zhanghonglin
10 天以前 8f9b9411ca279670bd85fcfa7763987295ed9abf
ÏîÄ¿´úÂë/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,12 @@
        private readonly IRepository<Dt_StockInfoDetail> _IStockInfoDetailRepository;
        private readonly IRepository<Dt_StockInfo_hty> _IStockInfohtyRepository;
        private readonly IRepository<Dt_StockInfoDetail_Hty> _IStockInfoDetailHtyRepository;
        //WCS满桶出库信号
        private static bool kk = false;
        private readonly IRepository<Dt_StockInfos> _IStockInfosRepository;
        private readonly IRepository<Dt_FillingOrder> _FillingOrderRepository;
        private readonly IRepository<Dt_OutboundOrder> _OutboundOrderRepository;
        private readonly IRepository<Dt_OutboundOrder_Hty> _OutboundOrderHtyRepository;
        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_Hty> OutboundOrderHtyRepository, 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 +67,21 @@
            _IStockInfoDetailRepository = IStockInfoDetailRepository;
            _IStockInfohtyRepository = IStockInfohtyRepository;
            _IStockInfoDetailHtyRepository = IStockInfoDetailHtyRepository;
            _IStockInfosRepository = IStockInfosRepository;
            _FillingOrderRepository = FillingOrderRepository;
            _OutboundOrderRepository = OutboundOrderRepository;
            _OutboundOrderHtyRepository = OutboundOrderHtyRepository;
        }
        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";
        }
@@ -86,9 +90,12 @@
        {
            WebResponseContent content = new WebResponseContent();
            Dt_Task task = new Dt_Task();
            //查询当前入库空桶类型
            Dt_Outstockinfo Warehouse = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
            //入库分配货位
            Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(1);
            locations.LocationStatus = (int)LocationStatusEnum.Lock;
            locations.Remark = Warehouse.EmptyOutSet;
            task.SourceAddress = location;
            task.TargetAddress = locations.LocationCode;
@@ -96,7 +103,7 @@
            task.Grade = 1;
            task.TaskType = (int)TaskTypeEnum.InEmpty;
            task.TaskState = (int)TaskStatusEnum.InNew;
            task.TaskNum = DateTime.Now.ToString("mmss").ObjToInt();
            task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
            //开始数据库事务
            _unitOfWorkManage.BeginTran();
@@ -119,85 +126,41 @@
            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;
            }
            //入库分配货位
            Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(k);
            locations.LocationStatus = (int)LocationStatusEnum.Lock;
            //创建物料组盘
            Dt_StockInfo stockInfo = new Dt_StockInfo();
            stockInfo.LocationCode = locations.LocationCode;
            stockInfo.StockStatus = (int)StockStatusEmun.组盘暂存;
            stockInfo.MaterielCode1 = stock.MaterialCode1;
            stockInfo.MaterielCode2 = stock.MaterialCode2;
            stockInfo.MaterielCode3 = stock.MaterialCode3;
            stockInfo.MaterielCode4 = stock.MaterialCode4;
            stockInfo.MaterielDetailedid = materielDetailedid;
            stockInfo.StockType = (int)StockTypeEmun.æ°´;
            stockInfo.MaterielName = FillingOrder.MaterialName;
            //创建物料详细信息
            //判定入库模式
@@ -205,24 +168,29 @@
            //正常入库
            if (outstockinfo.OutMode == 1)
            {
                locations.LocationStatus = (int)LocationStatusEnum.Lock;
                stockInfo.StockStatus = (int)StockStatusEmun.组盘暂存;
                task.SourceAddress = stock.location;
                task.TargetAddress = locations.LocationCode;
                task.Roadway = "SC01";
                task.Grade = 1;
                task.TaskType = (int)TaskTypeEnum.Infull;
                task.TaskState = (int)TaskStatusEnum.InNew;
                task.TaskNum = DateTime.Now.ToString("mmss").ObjToInt();
                task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
            }
            //直接出库
            else
            {
                stockInfo.StockStatus = (int)StockStatusEmun.直接出库;
                task.SourceAddress = "1-52-1";
                task.TargetAddress = locations.LocationCode;
                task.Roadway = "SC01";
                task.Grade = 1;
                task.TaskType = (int)TaskTypeEnum.OutDirect;
                task.TaskState = (int)TaskStatusEnum.InNew;
                task.TaskNum = DateTime.Now.ToString("mmss").ObjToInt();
                task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
            }
            //开始数据库事务
@@ -242,7 +210,7 @@
            return content;
        }
        //WCS入库任务完成
        //WCS任务完成
        public Stock WCSAccomplishIn(int TaskNum)
        {
            Stock content = new Stock();
@@ -311,7 +279,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();
@@ -331,6 +299,7 @@
                //修改货位状态
                Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
                locationInfo.Remark = "";
                //生成历史任务
                Dt_Task_Hty taskhty = new Dt_Task_Hty();
@@ -361,7 +330,6 @@
            {
                //删除库存信息
                Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                List<Dt_StockInfoDetail> stockInfoDetail = _IStockInfoDetailRepository.QueryData(x => x.MaterielDetailedid == stockInfo.MaterielDetailedid);
                //生成历史库存信息
                Dt_StockInfo_hty stockInfo_Hty = new Dt_StockInfo_hty();
                stockInfo_Hty.PalletCode = stockInfo.PalletCode;
@@ -375,13 +343,6 @@
                stockInfo_Hty.MaterielCode4 = stockInfo.MaterielCode4;
                stockInfo_Hty.StockType = stockInfo.StockType;
                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++)
                {
                    stockInfoDetail_Hty[i].MaterielCode = stockInfoDetail[i].MaterielCode;
                    stockInfoDetail_Hty[i].MaterielDetailedid = stockInfoDetail[i].MaterielDetailedid;
                }
                //修改货位状态
                Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
@@ -412,21 +373,20 @@
                //开始数据库事务
                _unitOfWorkManage.BeginTran();
                _StockInfoRepository.DeleteData(stockInfo);
                _IStockInfoDetailRepository.DeleteData(stockInfoDetail);
                _IStockInfohtyRepository.AddData(stockInfo_Hty);
                _IStockInfoDetailHtyRepository.AddData(stockInfoDetail_Hty);
                _LocationInfoRepository.UpdateData(locationInfo);
                _Task_HtyRepository.AddData(taskhty);
                BaseDal.DeleteData(task);
                //判断订单任务是否完成
                OrderTask(task, stockInfo);
                //提交事务
                _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);
                List<Dt_StockInfoDetail> stockInfoDetail = _IStockInfoDetailRepository.QueryData(x => x.MaterielDetailedid == stockInfo.MaterielDetailedid);
                //生成历史库存信息
                Dt_StockInfo_hty stockInfo_Hty = new Dt_StockInfo_hty();
                stockInfo_Hty.PalletCode = stockInfo.PalletCode;
@@ -440,27 +400,6 @@
                stockInfo_Hty.MaterielCode4 = stockInfo.MaterielCode4;
                stockInfo_Hty.StockType = stockInfo.StockType;
                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++)
                {
                    stockInfoDetail_Hty[i].MaterielCode = stockInfoDetail[i].MaterielCode;
                    stockInfoDetail_Hty[i].MaterielDetailedid = stockInfoDetail[i].MaterielDetailedid;
                    stockInfoDetail_Hty[i].BarcodeType = stockInfoDetail[i].BarcodeType;
                    stockInfoDetail_Hty[i].AuxQty = stockInfoDetail[i].AuxQty;
                    stockInfoDetail_Hty[i].Quantity = stockInfoDetail[i].Quantity;
                    stockInfoDetail_Hty[i].MaxQty = stockInfoDetail[i].MaxQty;
                    stockInfoDetail_Hty[i].BarWeight = stockInfoDetail[i].BarWeight;
                    stockInfoDetail_Hty[i].PackageQty = stockInfoDetail[i].PackageQty;
                    stockInfoDetail_Hty[i].QuantityIn = stockInfoDetail[i].QuantityIn;
                    stockInfoDetail_Hty[i].QuantityOut = stockInfoDetail[i].QuantityOut;
                    stockInfoDetail_Hty[i].Status = stockInfoDetail[i].Status;
                    stockInfoDetail_Hty[i].Materialld = stockInfoDetail[i].Materialld;
                    stockInfoDetail_Hty[i].BatchNum = stockInfoDetail[i].BatchNum;
                    stockInfoDetail_Hty[i].CreateEmpld = stockInfoDetail[i].CreateEmpld;
                    stockInfoDetail_Hty[i].Taskld = stockInfoDetail[i].Taskld;
                    stockInfoDetail_Hty[i].TaskSubld = stockInfoDetail[i].TaskSubld;
                }
                //生成历史任务
                Dt_Task_Hty taskhty = new Dt_Task_Hty();
@@ -484,19 +423,81 @@
                content.MaterialCode3 = stockInfo.MaterielCode3;
                content.MaterialCode4 = stockInfo.MaterielCode4;
                //开始数据库事务
                _unitOfWorkManage.BeginTran();
                _StockInfoRepository.DeleteData(stockInfo);
                _IStockInfoDetailRepository.DeleteData(stockInfoDetail);
                _IStockInfohtyRepository.AddData(stockInfo_Hty);
                _IStockInfoDetailHtyRepository.AddData(stockInfoDetail_Hty);
                _Task_HtyRepository.AddData(taskhty);
                BaseDal.DeleteData(task);
                //提交事务
                _unitOfWorkManage.CommitTran();
                //查询当前执行的订单
                Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x => x.BoundOrderStatue == (int)OutboundOrderEnum.Execute);
                Dt_OutboundOrder_Hty OutboundOrder_Hty = new Dt_OutboundOrder_Hty();
                int num = OutboundOrder.BoundTaskNum + 1;
                OutboundOrder.BoundTaskNum = num;
                //判断订单是否执行完成
                if (num == OutboundOrder.num)
                {
                    //生成历史订单
                    OutboundOrder_Hty.MaterielName = OutboundOrder.MaterielName;
                    OutboundOrder_Hty.num = OutboundOrder.num;
                    OutboundOrder_Hty.BoundOrderType = OutboundOrder.BoundOrderType;
                    OutboundOrder_Hty.BoundOrderCode = OutboundOrder.BoundOrderCode;
                    OutboundOrder_Hty.BoundOrderStatue = (int)OutboundOrderEnum.Accomplish;
                    //修改入库模式
                    Dt_Outstockinfo outstockinfo = _IOutstockinfoService.QueryFirst(x => x.Id == 1);
                    outstockinfo.OutMode = 0;
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _StockInfoRepository.DeleteData(stockInfo);
                    _IStockInfohtyRepository.AddData(stockInfo_Hty);
                    _Task_HtyRepository.AddData(taskhty);
                    BaseDal.DeleteData(task);
                    _OutboundOrderRepository.DeleteData(OutboundOrder);
                    _OutboundOrderHtyRepository.AddData(OutboundOrder_Hty);
                    _IOutstockinfoService.UpdateData(outstockinfo);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
                else
                {
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _StockInfoRepository.DeleteData(stockInfo);
                    _IStockInfohtyRepository.AddData(stockInfo_Hty);
                    _Task_HtyRepository.AddData(taskhty);
                    BaseDal.DeleteData(task);
                    _OutboundOrderRepository.UpdateData(OutboundOrder);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
            }
            return content;
        }
        //判断订单任务是否完成
        public void OrderTask(Dt_Task task, Dt_StockInfo stock)
        {
            //判断是否为订单任务
            if (task.Remark != null && task.Remark.Equals(""))
            {
                //判断当前订单任务是否还有未执行完成的
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Remark == task.Remark);
                if (tasks == null)
                {
                    Dt_OutboundOrder OutboundOrder =  _OutboundOrderRepository.QueryFirst(x=>x.MaterielName == stock.MaterielName && x.BoundOrderCode == task.Remark);
                    //生成历史订单
                    Dt_OutboundOrder_Hty OutboundOrder_Hty = new Dt_OutboundOrder_Hty();
                    OutboundOrder_Hty.MaterielName = OutboundOrder.MaterielName;
                    OutboundOrder_Hty.num = OutboundOrder.num;
                    OutboundOrder_Hty.BoundOrderType = OutboundOrder.BoundOrderType;
                    OutboundOrder_Hty.BoundOrderCode = OutboundOrder.BoundOrderCode;
                    OutboundOrder_Hty.BoundOrderStatue = (int)OutboundOrderEnum.Accomplish;
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _OutboundOrderHtyRepository.AddData(OutboundOrder_Hty);
                    _OutboundOrderRepository.UpdateData(OutboundOrder);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
            }
        }
        //根据任务号查询任务
@@ -536,6 +537,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;
@@ -544,7 +549,7 @@
            task.Grade = 1;
            task.TaskType = (int)TaskTypeEnum.OutEmpty;
            task.TaskState = (int)TaskStatusEnum.OutNew;
            task.TaskNum = DateTime.Now.ToString("mmss").ObjToInt();
            task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
            //开始数据库事务
            _unitOfWorkManage.BeginTran();
@@ -562,40 +567,83 @@
        }
        //根据数量和种类下发满桶出库任务
        public WebResponseContent ArtificialTask(int Num, int Type)
        public WebResponseContent ArtificialTask(int Num, string Types, string? remark)
        {
            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)
            {
                Dt_Outstockinfo outstockinfo = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
                //满
                if (outstockinfo.BigOrLittle == 1)
                Dt_Warehouse Warehouse = _WarehouseRepository.QueryFirst(x=>x.MateriaCode == Types);
                //满桶出库
                if (Warehouse == null)
                {
                    //获取并锁定物料
                    StockInfo = _IStockService.PriorityBig(Num, Type);
                }
                //残
                else
                {
                    //获取并锁定物料
                    StockInfo = _IStockService.PriorityLittle(Num, Type);
                }
                    Dt_Outstockinfo outstockinfo = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
                    //满
                    if (outstockinfo.BigOrLittle == 1)
                    {
                        //获取并锁定物料
                        StockInfo = _IStockService.PriorityBig(Num, Types);
                        if (StockInfo == null || StockInfo.Count <= 0)
                        {
                            StockInfo = _IStockService.PriorityLittle(Num, Types);
                        }
                    }
                    //残
                    else
                    {
                        //获取并锁定物料
                        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);
                        //创建任务
                        tasks = StocksAddTasks(StockInfo, remark);
                    }
                    else
                    {
                        return content.Error("物料不足");
                    }
                }
                //空桶出库
                else
                {
                    //获取并锁定货位
                    LocationInfo = _ILocationInfoService.StockLockLocation(StockInfo);
                    //创建任务
                    tasks = StocksAddTasks(StockInfo);
                }
                else
                {
                    return WebResponseContent.Instance.Error($"物料不足");
                    LocationInfo = _LocationInfoRepository.QueryData(x => x.Remark == Types && x.LocationStatus == (int)LocationStatusEnum.EmptyBarrel).Take(Num).ToList();
                    if (LocationInfo.Count() == Num)
                    {
                        string StationName = "满桶出";
                        string StationNames = SelectStationManger(StationName);
                        foreach (var item in LocationInfo)
                        {
                            item.LocationStatus = (int)LocationStatusEnum.Lock;
                            //创建任务
                            Dt_Task task = new Dt_Task();
                            task.SourceAddress = item.LocationCode;
                            task.TargetAddress = StationNames;
                            task.Roadway = "SC01";
                            task.Grade = 1;
                            task.TaskType = (int)TaskTypeEnum.OutEmpty;
                            task.TaskState = (int)TaskStatusEnum.OutNew;
                            task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
                            tasks.Add(task);
                        }
                    }
                    else
                    {
                        return content.Error("物料不足");
                    }
                }
                //开始数据库事务
@@ -614,13 +662,14 @@
            }
            else
            {
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量、种类或信号异常"});
                LogLock.OutLogAOP("接口日志", new string[] { "下发数量或种类异常" });
                return content.Error("下发数量或种类异常");
            }
            return content;
        }
        //根据多条物料创建多条出库任务
        public List<Dt_Task> StocksAddTasks(List<Dt_StockInfo> StockInfo)
        public List<Dt_Task> StocksAddTasks(List<Dt_StockInfo> StockInfo ,string? remark)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            int k = StockInfo.Count() - 1;
@@ -636,7 +685,8 @@
                task.Grade = 1;
                task.TaskType = (int)TaskTypeEnum.Outfull;
                task.TaskState = (int)TaskStatusEnum.OutNew;
                task.TaskNum = DateTime.Now.ToString("mmss").ObjToInt() + i;
                task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt() + i);
                task.Remark = remark;
                tasks.Add(task);
            }
@@ -697,6 +747,7 @@
            {
                Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
                locationInfo.Remark = "";
                //开始数据库事务
                _unitOfWorkManage.BeginTran();
@@ -739,6 +790,8 @@
                BaseDal.DeleteData(task);
                WCSTaskDelete(task.TaskNum);
                _Task_HtyRepository.AddData(taskhty);
                //判断订单任务是否完成
                OrderTask(task, stockInfo);
                //提交事务
                _unitOfWorkManage.CommitTran();
            }
@@ -769,21 +822,65 @@
            return task;
        }
        //WCS满桶出库信号
        public WebResponseContent WCSSignal(int k)
        //执行订单
        public string ExecuteOrder(int k)
        {
            WebResponseContent content=new WebResponseContent();
            //可以出
            if (k == 1) {
                kk = true;
            WebResponseContent content = new WebResponseContent();
            Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x => x.Id == k);
            //直接出库订单
            if (OutboundOrder.BoundOrderType == 4)
            {
                //防止多条订单执行
                Dt_OutboundOrder OutboundOrders = _OutboundOrderRepository.QueryFirst(x => x.BoundOrderStatue == (int)OutboundOrderEnum.Execute);
                if (OutboundOrders == null)
                {
                    //修改入库模式
                    Dt_Outstockinfo outstockinfo = _IOutstockinfoService.QueryFirst(x => x.Id == 1);
                    outstockinfo.OutMode = 1;
                    OutboundOrder.BoundOrderStatue = (int)OutboundOrderEnum.Execute;
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _IOutstockinfoService.UpdateData(outstockinfo);
                    _OutboundOrderRepository.UpdateData(OutboundOrder);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
                else
                {
                    content.Message="请等待其他订单执行完成";
                }
            }
            //不可以出
            //其他正常出库
            else
            {
                kk = false;
                content = ArtificialTask(OutboundOrder.num, OutboundOrder.MaterielName, OutboundOrder.BoundOrderCode);
                if (content.Message == null || content.Message.Equals(""))
                {
                    OutboundOrder.BoundOrderStatue = (int)OutboundOrderEnum.Execute;
                    _OutboundOrderRepository.UpdateData(OutboundOrder);
                }
            }
            return content.Message;
        }
            return content;
        //防止任务号重复
        public int TaskNum(int num)
        {
            int k = num;
            while (true)
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == k);
                if (task == null)
                {
                    return k;
                }
                else
                {
                    k = DateTime.Now.ToString("mmss").ObjToInt();
                    continue;
                }
            }
        }
    }
}