WarehouseService.cs 6.4 KB
using FreeSql;
using HHECS.Dal.Repository;
using HHECS.Infrastructure.Json;
using HHECS.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace HHECS.Application.Service
{
    public class WarehouseService : BaseService
    {
        public string Load(Warehouse entity, PageReq pageRequest)
        {
            return Execute(() =>
            {
                using var warehouseRepository = new WarehouseRepository();
                var query = warehouseRepository.Where(GetExpression(entity));
                var result = query.OrderByDescending(a => a.Created).Page(pageRequest.page, pageRequest.limit).ToList();


                var dictDetailRepository = new DictDetailRepository();
                result.ForEach(y =>
                {
                    var factoryName = dictDetailRepository.Where(x => x.DictId == 45 && x.Code == y.FactoryClass).First().Name;
                    y.FactoryClassName = factoryName;
                });
                Response.Result = result;
                Response.Count = query.Count();
                return Response.ToJson();
            });
        }

        public string LoadEquipmentCount(Warehouse entity, PageReq pageRequest, EquipmentService equipmentService)
        {
            return Execute(() =>
            {
                using var warehouseRepository = new WarehouseRepository();
                using var equipmentRepository = new EquipmentRepository();
                using var dictDetailRepository = new DictDetailRepository();
                var query = warehouseRepository.Where(GetExpression(entity));
                var result = query.OrderByDescending(a => a.Created).Page(pageRequest.page, pageRequest.limit).ToList();
                var factoryList = dictDetailRepository.Where(x => x.DictId == 45).ToList();
                var factoryName = "";

                var listWarehouse = result.Select(x =>
                 {
                     var equipment = new Equipment
                     {
                         WarehouseCode = x.Code
                     };
                     long count = equipmentService.LoadCount(equipment, pageRequest);
                     factoryName = factoryList.FirstOrDefault(l => l.Code == x.FactoryClass).Name;

                     return new eqInfo
                     {
                         Id = x.Id,
                         Code = x.Code,
                         Name = x.Name,
                         Remark = x.Remark,
                         Created = x.Created,
                         CreatedBy = x.CreatedBy,
                         Updated = x.Updated,
                         UpdatedBy = x.UpdatedBy,
                         Count = count,
                         FactoryClass = factoryName
                     };
                 }).ToList();
                //agv设备
                var agvEqList = equipmentRepository.Where(x => x.EquipmentTypeId == 7).ToList();
                //agv设备 仓库分类
                var agvEqWarehouseCodeList = agvEqList.Select(x => x.WarehouseCode).Distinct().ToList();
                var index = 100;
                foreach (var warehouse in agvEqWarehouseCodeList)
                {
                    listWarehouse.Add(new eqInfo
                    {
                        Id = index++,
                        Code = warehouse + "_AGV",
                        Name = result.First(x => x.Code == warehouse).Name + "_AGV",
                        Remark = "",
                        Created = listWarehouse[0].Created,
                        CreatedBy = "admin",
                        Updated = listWarehouse[0].Updated,
                        UpdatedBy = "admin",
                        Count = agvEqList.Where(x => x.WarehouseCode == warehouse).Count(),
                        FactoryClass = factoryName
                    });
                }

                Response.Result = listWarehouse.OrderByDescending(x => x.Name);

                Response.Count = query.Count();
                return Response.ToJson();
            });
        }

        private Expression<Func<Warehouse, bool>> GetExpression(Warehouse entity)
        {
            Expression<Func<Warehouse, bool>> filter = t => true;
            if (!string.IsNullOrWhiteSpace(entity.Code))
            {
                filter = filter.And(x => x.Code.Contains(entity.Code));
            }
            if (!string.IsNullOrWhiteSpace(entity.Name))
            {
                filter = filter.And(x => x.Name.Contains(entity.Name));
            }
            return filter;
        }
        public string Ins(Warehouse entity, User user)
        {
            return Execute(() =>
            {
                entity.CreatedBy = user.UserCode;
                entity.Created = DateTime.Now;
                new WarehouseRepository().Insert(entity);
                return Response.ToJson();
            });
        }

        public string Upd(Warehouse entity, User user)
        {
            return Execute(() =>
            {
                entity.UpdatedBy = user.UserCode;
                entity.Updated = DateTime.Now;
                new WarehouseRepository().InsertOrUpdate(entity);
                return Response.ToJson();
            });
        }

        public string DelByIds(int[] ids)
        {
            return Execute(() =>
            {
                new WarehouseRepository().Delete(t => ids.Contains(t.Id));
                return Response.ToJson();
            });
        }

        public Dictionary<string, string> GetDicFactoryClass()
        {
            var result = new Dictionary<string, string>();

            using DictDetailRepository dictRepository = new DictDetailRepository();
            var res = dictRepository.Where(x => x.DictId == 45).ToList();

            foreach (var item in res)
            {
                result.Add(item.Code, item.Name);
            }

            return result;
        }

        public class eqInfo
        {

            public int Id { get; set; }
            public string Code { get; set; }
            public string Name { get; set; }
            public string Remark { get; set; }

            public string FactoryClass { get; set; }

            public DateTime? Created { get; set; }
            public string CreatedBy { get; set; }
            public DateTime? Updated { get; set; }
            public string UpdatedBy { get; set; }
            public long Count { get; set; }
        }
    }
}