zhanghonglin
2026-04-06 cfb3f2c7e9cde8cc2eb2a19263d0802c0c5410a3
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -8,6 +8,7 @@
using System.Threading.Tasks;
using Newtonsoft.Json;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OutboundOrder;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.Warehouse;
@@ -22,7 +23,9 @@
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
using WIDESEA_Model.Models.Basic;
using WIDESEA_Model.Models.Outbound;
using WIDESEA_Model.Models.Stock;
using WIDESEA_Model.View;
using WIDESEAWCS_DTO.Stock;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models.TaskInfo;
@@ -44,10 +47,13 @@
        private readonly IRepository<Dt_StockInfoDetail> _IStockInfoDetailRepository;
        private readonly IRepository<Dt_StockInfo_hty> _IStockInfohtyRepository;
        private readonly IRepository<Dt_StockInfoDetail_Hty> _IStockInfoDetailHtyRepository;
        private readonly IRepository<Dt_StockInfos> _IStockInfosRepository;
        private readonly IRepository<Dt_FillingOrder> _FillingOrderRepository;
        private readonly IRepository<Dt_OutboundOrder> _OutboundOrderRepository;
        //WCS满桶出库信号
        private static bool kk = false;
        public TaskService(IRepository<Dt_Task> BaseDal, ILocationInfoService ILocationInfoService, IRepository<Dt_StockInfoDetail> IStockInfoDetailRepository, IRepository<Dt_StockInfo_hty> IStockInfohtyRepository, IRepository<Dt_StockInfoDetail_Hty> IStockInfoDetailHtyRepository, IRepository<Dt_Outstockinfo> IOutstockinfoService, IStockService IStockService, IRepository<Dt_Warehouse> WarehouseService, IRepository<Dt_Outstockinfo> OutstockinfoRepository, ILocationInfoService LocationInfoService, IRepository<Dt_StockInfo> StockInfoRepository, IRepository<Dt_LocationInfo> LocationInfoRepository, IRepository<Dt_Task_Hty> Task_HtyRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        public TaskService(IRepository<Dt_Task> BaseDal, IRepository<Dt_OutboundOrder> OutboundOrderRepository, IRepository<Dt_FillingOrder> FillingOrderRepository, IRepository<Dt_StockInfos> IStockInfosRepository, ILocationInfoService ILocationInfoService, IRepository<Dt_StockInfoDetail> IStockInfoDetailRepository, IRepository<Dt_StockInfo_hty> IStockInfohtyRepository, IRepository<Dt_StockInfoDetail_Hty> IStockInfoDetailHtyRepository, IRepository<Dt_Outstockinfo> IOutstockinfoService, IStockService IStockService, IRepository<Dt_Warehouse> WarehouseService, IRepository<Dt_Outstockinfo> OutstockinfoRepository, ILocationInfoService LocationInfoService, IRepository<Dt_StockInfo> StockInfoRepository, IRepository<Dt_LocationInfo> LocationInfoRepository, IRepository<Dt_Task_Hty> Task_HtyRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _LocationInfoService = LocationInfoService;
            _unitOfWorkManage = unitOfWorkManage;
@@ -62,22 +68,20 @@
            _IStockInfoDetailRepository = IStockInfoDetailRepository;
            _IStockInfohtyRepository = IStockInfohtyRepository;
            _IStockInfoDetailHtyRepository = IStockInfoDetailHtyRepository;
            _IStockInfosRepository = IStockInfosRepository;
            _FillingOrderRepository = FillingOrderRepository;
            _OutboundOrderRepository = OutboundOrderRepository;
        }
        public IRepository<Dt_Task> Repository => BaseDal;
        //测试
        public WebResponseContent ceshi()
        public string ceshi()
        {
            WebResponseContent content = new WebResponseContent();
            string mes = AppSettings.Get("MSE");
            if (!string.IsNullOrEmpty(mes))
            {
                string k = "";
                HttpHelper.Get($"{mes}+{k}");
            }
                return content;
            Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(2);
            return "123";
        }
@@ -119,67 +123,25 @@
            WebResponseContent content = new WebResponseContent();
            Dt_Task task = new Dt_Task();
            List<Dt_StockInfoDetail> stockInfoDetail = new List<Dt_StockInfoDetail>();
            List<MESSockInfo> MESSocks = new List<MESSockInfo>();
            //List<MESSockInfo> MESSocks = new List<MESSockInfo>();
            string materielDetailedid = stock.MaterialCode1 + DateTime.Now.ToString("mmss").ObjToInt();
            //去MES查询物料编号详细信息
            int h = 0;
            string mes = AppSettings.Get("MSE");
            if (!string.IsNullOrEmpty(mes))
            {
                if (stock.MaterialCode1 != null && !stock.MaterialCode1.Equals(""))
                {
                    MESSocks[0] = JsonConvert.DeserializeObject<MESSockInfo>(HttpHelper.Get($"{mes}+{stock.MaterialCode1}"));
                    stockInfoDetail[0].MaterielCode = stock.MaterialCode1;
                }
                if (stock.MaterialCode2 != null && !stock.MaterialCode2.Equals(""))
                {
                    MESSocks[1] = JsonConvert.DeserializeObject<MESSockInfo>(HttpHelper.Get($"{mes}+{stock.MaterialCode2}"));
                    h++;
                    stockInfoDetail[1].MaterielCode = stock.MaterialCode2;
                }
                if (stock.MaterialCode3 != null && !stock.MaterialCode3.Equals(""))
                {
                    MESSocks[2] = JsonConvert.DeserializeObject<MESSockInfo>(HttpHelper.Get($"{mes}+{stock.MaterialCode3}"));
                    h++;
                    stockInfoDetail[2].MaterielCode = stock.MaterialCode3;
                }
                if (stock.MaterialCode4 != null && !stock.MaterialCode4.Equals(""))
                {
                    MESSocks[3] = JsonConvert.DeserializeObject<MESSockInfo>(HttpHelper.Get($"{mes}+{stock.MaterialCode4}"));
                    h++;
                    stockInfoDetail[3].MaterielCode = stock.MaterialCode4;
                }
            }
            //存储物料编号详细信息
            for(int m = 0; m <= h; m++)
            {
                stockInfoDetail[m].MaterielDetailedid = materielDetailedid;
                stockInfoDetail[m].BarcodeType = MESSocks[m].BarcodeType;
                stockInfoDetail[m].AuxQty = MESSocks[m].AuxQty;
                stockInfoDetail[m].Quantity = MESSocks[m].Quantity;
                stockInfoDetail[m].MaxQty = MESSocks[m].MaxQty;
                stockInfoDetail[m].BarWeight = MESSocks[m].BarWeight;
                stockInfoDetail[m].PackageQty = MESSocks[m].PackageQty;
                stockInfoDetail[m].QuantityIn = MESSocks[m].QuantityIn;
                stockInfoDetail[m].QuantityOut = MESSocks[m].QuantityOut;
                stockInfoDetail[m].Status = MESSocks[m].Status;
                stockInfoDetail[m].Materialld = MESSocks[m].Materialld;
                stockInfoDetail[m].BatchNum = MESSocks[m].BatchNum;
                stockInfoDetail[m].CreateEmpld = MESSocks[m].CreateEmpld;
                stockInfoDetail[m].Taskld = MESSocks[m].Taskld;
                stockInfoDetail[m].TaskSubld = MESSocks[m].TaskSubld;
            }
            string kk = stock.MaterialCode1.Replace("X", "");
            //区分货区
            int k = 1;
            Dt_Warehouse warehouse = _WarehouseRepository.QueryFirst(x => x.MaterialName == "");
            if (warehouse.MaterialType == (int)WarehouseTypeEnum.Food)
            //查询物料二维编码
            Dt_FillingOrder FillingOrder = _FillingOrderRepository.QueryFirst(x => x.BarCode == kk);
            if (FillingOrder == null)
            {
                LogLock.OutLogAOP("接口日志", new string[] { "满桶入库任务生成", $"{"二维码查询异常"}" });
                content.Message = "二维码查询异常";
                return content;
            }
            if (FillingOrder.WarehouseType.Equals("食品区"))
            {
                k = 2;
            }
            else if (warehouse.MaterialType == (int)WarehouseTypeEnum.Industry)
            else if (FillingOrder.WarehouseType.Equals("工业区"))
            {
                k = 3;
            }
@@ -197,7 +159,7 @@
            stockInfo.MaterielCode3 = stock.MaterialCode3;
            stockInfo.MaterielCode4 = stock.MaterialCode4;
            stockInfo.MaterielDetailedid = materielDetailedid;
            stockInfo.StockType = (int)StockTypeEmun.æ°´;
            stockInfo.MaterielName = FillingOrder.MaterialName;
            //创建物料详细信息
            //判定入库模式
@@ -311,7 +273,7 @@
                taskhty.Grade = task.Grade;
                taskhty.Remark = task.Remark;
                taskhty.TaskType = task.TaskType;
                taskhty.TaskState = task.TaskState;
                taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
                //开始数据库事务
                _unitOfWorkManage.BeginTran();
@@ -377,7 +339,7 @@
                stockInfo_Hty.MaterielDetailedid = stockInfo.MaterielDetailedid;
                List<Dt_StockInfoDetail_Hty> stockInfoDetail_Hty = new List<Dt_StockInfoDetail_Hty>();
                int k = stockInfoDetail.Count() - 1;
                for(int i = 0; i <= k; i++)
                for (int i = 0; i <= k; i++)
                {
                    stockInfoDetail_Hty[i].MaterielCode = stockInfoDetail[i].MaterielCode;
                    stockInfoDetail_Hty[i].MaterielDetailedid = stockInfoDetail[i].MaterielDetailedid;
@@ -422,7 +384,7 @@
                _unitOfWorkManage.CommitTran();
            }
            //直接出库
            else if(task.TaskType == (int)TaskTypeEnum.OutDirect)
            else if (task.TaskType == (int)TaskTypeEnum.OutDirect)
            {
                //删除库存信息
                Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
@@ -536,6 +498,10 @@
            Dt_Task task = new Dt_Task();
            //出库分配物料
            Dt_LocationInfo locations = _LocationInfoService.AllotStock(1);
            if (locations == null)
            {
                return content;
            }
            locations.LocationStatus = (int)LocationStatusEnum.Lock;
            task.SourceAddress = locations.LocationCode;
@@ -562,31 +528,39 @@
        }
        //根据数量和种类下发满桶出库任务
        public WebResponseContent ArtificialTask(int Num, int Type)
        public WebResponseContent ArtificialTask(int Num, string Types)
        {
            WebResponseContent content = new WebResponseContent();
            List<Dt_Task> tasks = new List<Dt_Task>();
            List<Dt_LocationInfo> LocationInfo = new List<Dt_LocationInfo>();
            List<Dt_StockInfo> StockInfo = new List<Dt_StockInfo>();
            if (Num > 0 && Type > 0 && kk == true)
            if (Num > 0 && !Types.Equals("") && Types != null && kk == true)
            {
                Dt_Outstockinfo outstockinfo = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
                //满
                if (outstockinfo.BigOrLittle == 1)
                {
                    //获取并锁定物料
                    StockInfo = _IStockService.PriorityBig(Num, Type);
                    StockInfo = _IStockService.PriorityBig(Num, Types);
                    if (StockInfo == null || StockInfo.Count <= 0)
                    {
                        StockInfo = _IStockService.PriorityLittle(Num, Types);
                    }
                }
                //残
                else
                {
                    //获取并锁定物料
                    StockInfo = _IStockService.PriorityLittle(Num, Type);
                    StockInfo = _IStockService.PriorityLittle(Num, Types);
                    if (StockInfo == null || StockInfo.Count <= 0)
                    {
                        StockInfo = _IStockService.PriorityBig(Num, Types);
                    }
                }
                //创建任务
                if (StockInfo != null)
                if (StockInfo != null && StockInfo.Count > 0)
                {
                    //获取并锁定货位
                    LocationInfo = _ILocationInfoService.StockLockLocation(StockInfo);
@@ -595,7 +569,7 @@
                }
                else
                {
                    return WebResponseContent.Instance.Error($"物料不足");
                    return content.Error("物料不足");
                }
                //开始数据库事务
@@ -614,7 +588,8 @@
            }
            else
            {
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量、种类或信号异常"});
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量、种类或信号异常" });
                return content.Error("下发数量、种类或信号异常");
            }
            return content;
        }
@@ -762,19 +737,20 @@
        }
        //大屏电视查询任务
        public List<Dt_Task_Hty> selectTask()
        public List<Dt_Task> selectTask()
        {
            List<Dt_Task_Hty> task = new List<Dt_Task_Hty>();
            task = _Task_HtyRepository.QueryData().OrderByDescending(t => t.CreateDate).ToList();
            List<Dt_Task> task = new List<Dt_Task>();
            task = BaseDal.QueryData().OrderByDescending(t => t.CreateDate).ToList();
            return task;
        }
        //WCS满桶出库信号
        public WebResponseContent WCSSignal(int k)
        {
            WebResponseContent content=new WebResponseContent();
            WebResponseContent content = new WebResponseContent();
            //可以出
            if (k == 1) {
            if (k == 1)
            {
                kk = true;
            }
            //不可以出
@@ -785,5 +761,20 @@
            return content;
        }
        //执行订单
        public string ExecuteOrder(int k)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x => x.Id == k);
            //下发任务
            content = ArtificialTask(OutboundOrder.num, OutboundOrder.MaterielName);
            if (content.Message == null || content.Message.Equals(""))
            {
                OutboundOrder.BoundOrderStatue = (int)OutboundOrderEnum.Execute;
                _OutboundOrderRepository.UpdateData(OutboundOrder);
            }
            return content.Message;
        }
    }
}