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,6 +23,7 @@
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;
@@ -47,10 +49,11 @@
        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, 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)
        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;
@@ -67,17 +70,18 @@
            _IStockInfoDetailHtyRepository = IStockInfoDetailHtyRepository;
            _IStockInfosRepository = IStockInfosRepository;
            _FillingOrderRepository = FillingOrderRepository;
            _OutboundOrderRepository = OutboundOrderRepository;
        }
        public IRepository<Dt_Task> Repository => BaseDal;
        //测试
        public WebResponseContent ceshi()
        public string ceshi()
        {
            WebResponseContent content = new WebResponseContent();
            Dt_StockInfos StockInfoss = _IStockInfosRepository.QueryFirst(x => x.Id == 7);
            return content;
            Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(2);
            return "123";
        }
@@ -122,20 +126,25 @@
            //List<MESSockInfo> MESSocks = new List<MESSockInfo>();
            string materielDetailedid = stock.MaterialCode1 + DateTime.Now.ToString("mmss").ObjToInt();
            string kk = stock.MaterialCode1.Replace("X", "");
            //区分货区
            int k = 1;
            //Dt_Warehouse warehouse = _WarehouseRepository.QueryFirst(x => x.MaterialName == "");
            ////查询物料二维编码
            //Dt_FillingOrder FillingOrder = _FillingOrderRepository.QueryFirst(x=>x.BarCode == stock.MaterialCode1);
            //if (warehouse.MaterialType == (int)WarehouseTypeEnum.Food)
            //{
            //    k = 2;
            //}
            //else if (warehouse.MaterialType == (int)WarehouseTypeEnum.Industry)
            //{
            //    k = 3;
            //}
            //查询物料二维编码
            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 (FillingOrder.WarehouseType.Equals("工业区"))
            {
                k = 3;
            }
            //入库分配货位
            Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(k);
@@ -150,7 +159,7 @@
            stockInfo.MaterielCode3 = stock.MaterialCode3;
            stockInfo.MaterielCode4 = stock.MaterialCode4;
            stockInfo.MaterielDetailedid = materielDetailedid;
            stockInfo.StockType = (int)StockTypeEmun.æ°´;
            stockInfo.MaterielName = FillingOrder.MaterialName;
            //创建物料详细信息
            //判定入库模式
@@ -264,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();
@@ -330,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;
@@ -375,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);
@@ -489,7 +498,7 @@
            Dt_Task task = new Dt_Task();
            //出库分配物料
            Dt_LocationInfo locations = _LocationInfoService.AllotStock(1);
            if (locations ==null)
            if (locations == null)
            {
                return content;
            }
@@ -519,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);
@@ -552,7 +569,7 @@
                }
                else
                {
                    return WebResponseContent.Instance.Error($"物料不足");
                    return content.Error("物料不足");
                }
                //开始数据库事务
@@ -571,7 +588,8 @@
            }
            else
            {
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量、种类或信号异常"});
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量、种类或信号异常" });
                return content.Error("下发数量、种类或信号异常");
            }
            return content;
        }
@@ -729,9 +747,10 @@
        //WCS满桶出库信号
        public WebResponseContent WCSSignal(int k)
        {
            WebResponseContent content=new WebResponseContent();
            WebResponseContent content = new WebResponseContent();
            //可以出
            if (k == 1) {
            if (k == 1)
            {
                kk = true;
            }
            //不可以出
@@ -742,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;
        }
    }
}