wangxinhui
2026-01-19 3148a5c11b47ccbda05b8cf4b7fc445318eb13f5
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -41,29 +41,24 @@
        /// <param name="stationCode"></param>
        /// <param name="palletCode"></param>
        /// <returns></returns>
        public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
        public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode)
        {
            try
            {
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == stationCode);
                if (task != null)
                {
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map<WMSTaskDTO>(task));
                }
                Dt_ProStockInfo stockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
                Dt_ProStockInfo stockInfo = BaseDal.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == stationCode).Includes(x => x.proStockInfoDetails).First(); ;
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.MES余料退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES空托退库.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                Dt_Task newTask = new Dt_Task()
@@ -71,35 +66,28 @@
                    CurrentAddress = stationCode,
                    Grade = 0,
                    NextAddress = "",
                    PalletCode = palletCode,
                    PalletCode = stationCode,
                    Roadway = "",
                    SourceAddress = stationCode,
                    TargetAddress = "",
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskType = TaskTypeEnum.InProduct.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType,
                };
                if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                stockInfo.proStockInfoDetails.ForEach(x =>
                {
                    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                }
                    x.ProStockDetailStatus = StockStatusEmun.入库确认.ObjToInt();
                });
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                _stockRepository.ProStockInfoRepository.UpdateData(stockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails);
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                PushTasksToWCS(new List<Dt_Task> { newTask });
                if (newTask.WarehouseId == 5) PutFinish(stationCode, newTask.PalletCode, newTask.TaskNum.ToString());
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
@@ -372,7 +360,7 @@
                    stockInfoOld.IsPick = WhetherEnum.False.ObjToInt();
                }
                decimal stockLength = bSTStockInfoDTO.StockMeter;
                if (weight != bSTStockInfoDTO.Qty)
                if (weight != bSTStockInfoDTO.Qty && weight < stockInfoOld.InitialWeight)
                {
                    Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterialSourceId == stockInfoOld.MaterielId);
                    int gramWeight = (int)(materielInfo.MaterielWeight * 1000);
@@ -393,13 +381,13 @@
                        throw new Exception($"上报称重失败");
                    }
                    stockLength = weight / bSTStockInfoDTO.W / gramWeight * 1000000;
                    stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
                    stockInfoOld.MaterielWeight = weight;
                }
                stockInfoOld.StockStatus = StockStatusEmun.老厂退库.ObjToInt();
                stockInfoOld.MaterielThickness = bSTStockInfoDTO.Thick;
                stockInfoOld.MaterielWeight = weight;
                stockInfoOld.MaterielWide = bSTStockInfoDTO.W;
                stockInfoOld.StockLength = stockLength;
                stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
                stockInfoOld.StockOutLength = 0;
                stockInfoOld.WarehouseId = WarehouseEnum.LLDYL.ObjToInt();
                if (thickness < 400)
@@ -459,9 +447,9 @@
                        {
                            throw new Exception($"未找到入库单号为{inboundOrder.PurchaseOrderNo}条码{palletCode}单据信息");
                        }
                        if (inboundOrderDetail.PurchaseDetailWide < 690)
                        if (inboundOrderDetail.PurchaseDetailWide < 690 || inboundOrderDetail.PurchaseDetailWide > 2500)
                        {
                            return content.Error("新厂物料幅宽限制为690-2700mm");
                            return content.Error($"物料幅宽限制为690-2500mm,当前纸卷幅宽{inboundOrderDetail.PurchaseDetailWide}");
                        }
                        if (inboundOrderDetail.PurchaseDetailThickness <= 0)
                        {
@@ -509,7 +497,7 @@
                                BatchNo = inboundOrderDetail.MaterialLot,
                                StockLength = inboundOrderDetail.PurchaseDetailQuantity
                            };
                            if (inboundOrderDetail.PurchaseDetailWide > 1200)
                            if (inboundOrderDetail.PurchaseDetailWide >= 1160)
                            {
                                stockInfo.PalletType = 2;
                            }
@@ -554,9 +542,9 @@
                        {
                            throw new Exception($"未找到入库单号为{inboundOrder.UpperOrderNo}条码{palletCode}单据信息");
                        }
                        if (inboundOrderDetail.MaterialWide < 690)
                        if (inboundOrderDetail.MaterialWide < 690 || inboundOrderDetail.MaterialWide > 2500)
                        {
                            return content.Error("新厂物料幅宽限制为690-2700mm");
                            return content.Error($"物料幅宽限制为690-2500mm,当前纸卷幅宽{inboundOrderDetail.MaterialWide}");
                        }
                        if (inboundOrderDetail.MaterialThick <= 0)
                        {
@@ -604,7 +592,7 @@
                                BatchNo = inboundOrderDetail.MaterialLot,
                                StockLength = inboundOrderDetail.OrderQuantity
                            };
                            if (inboundOrderDetail.MaterialWide > 1200)
                            if (inboundOrderDetail.MaterialWide >= 1160)
                            {
                                stockInfo.PalletType = 2;
                            }
@@ -651,9 +639,11 @@
                        }
                        BSTStockInfoDTO bSTStockInfoDTO = bSTResponse.Data ?? throw new Exception($"一期ERP未返回{palletCode}的库存信息");
                        if (bSTStockInfoDTO.W < 690 || bSTStockInfoDTO.W > 2500)
                        {
                            return content.Error($"物料幅宽限制为690-2500mm,当前纸卷幅宽{bSTStockInfoDTO.W}");
                        }
                        Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterialSourceId == bSTStockInfoDTO.MaterialId) ?? throw new Exception($"未找到条码{palletCode}物料信息{bSTStockInfoDTO.MaterialNo}");
                        //生成库存组盘信息
                        Dt_StockInfo stockInfo = new Dt_StockInfo()
                        {
@@ -670,12 +660,13 @@
                            MaterielThickness = bSTStockInfoDTO.Thick,
                            MaterielWide = bSTStockInfoDTO.W,
                            MaterielWeight = bSTStockInfoDTO.Qty,
                            InitialWeight = bSTStockInfoDTO.Qty,
                            MaterielCode = materielInfo.MaterielCode,
                            MaterielName = materielInfo.MaterielName,
                            StockLength = bSTStockInfoDTO.StockMeter,
                            MaterielId = materielInfo.MaterialSourceId
                        };
                        if (bSTStockInfoDTO.W > 1200)
                        if (bSTStockInfoDTO.W >= 1160)
                        {
                            stockInfo.PalletType = 2;
                        }
@@ -729,6 +720,10 @@
                        }
                        else if (yLInboundCache.BarCode != palletCode && yLInboundCache.BindStatus == WhetherEnum.True.ObjToInt())
                        {
                            if (purchaseBSTOrderDetail.MaterialWide < 690 || purchaseBSTOrderDetail.MaterialWide > 2500)
                            {
                                return content.Error($"物料幅宽限制为690-2500mm,当前纸卷幅宽{purchaseBSTOrderDetail.MaterialWide}");
                            }
                            yLInboundCache = _mapper.Map<Dt_YLInboundCache>(purchaseBSTOrderDetail);
                            yLInboundCache.Id = Id;
                            //获取采购主单
@@ -751,12 +746,13 @@
                                MaterielThickness = purchaseBSTOrderDetail.MaterialThick,
                                MaterielWide = purchaseBSTOrderDetail.MaterialWide,
                                MaterielWeight = purchaseBSTOrderDetail.DeliveryQty,
                                InitialWeight=purchaseBSTOrderDetail.DeliveryQty,
                                MaterielCode = materielInfo.MaterielCode,
                                MaterielName = materielInfo.MaterielName,
                                StockLength = purchaseBSTOrderDetail.ProcurementLength,
                                MaterielId = purchaseBSTOrderDetail.MaterialId
                            };
                            if (purchaseBSTOrderDetail.MaterialWide > 1200)
                            if (purchaseBSTOrderDetail.MaterialWide >= 1160)
                            {
                                stockInfo.PalletType = 2;
                            }
@@ -830,6 +826,12 @@
        {
            try
            {
                List<string> roadways = ExistRoadwaysError();
                bool ErrorRoadway = false;
                if (roadways!=null && roadways.Count>0)
                {
                    ErrorRoadway = true;
                }
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
                if (stockInfo==null)
                {
@@ -865,8 +867,7 @@
                        {
                            locationCounts = locationCounts.Where(x => x.RoadwayNo != "SC03_YLDual").ToList();
                        }
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                    }
                }
                else
@@ -876,6 +877,7 @@
                    {
                        bool LayerLimit = stockInfo.CheckThickness > 1300;
                        bool RoadwayLimit = stockInfo.MaterielWide > 2200;
                        bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt();
                        var query = Db.Queryable<Dt_LocationInfo>()
                            .Where(x => x.WarehouseId == warehouse.WarehouseId
                                && x.LocationStatus == (int)LocationStatusEnum.Free
@@ -901,15 +903,46 @@
                            })
                            .OrderBy(x => x.RoadwayNo)
                            .ToList();
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
                        if (RoadwayType)
                        {
                            foreach (var item in locationCounts)
                            {
                                if (item.RoadwayNo.Contains("YLDual"))
                                {
                                    int count = Db.Queryable<Dt_LocationInfo>()
                                    .Where(x => x.WarehouseId == warehouse.WarehouseId
                                        && x.LocationStatus == (int)LocationStatusEnum.Free
                                        && x.EnableStatus == (int)EnableStatusEnum.Normal
                                        && x.LocationType==LocationTypeEnum.MediumPallet.ObjToInt()
                                        && x.RoadwayNo == item.RoadwayNo).Count();
                                    item.Count = count;
                                }
                            }
                        }
                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                    }
                    else if (stockInfo.CheckThickness >= 400 && stockInfo.CheckThickness < 800 && stockInfo.MaterielWide >= 700 && stockInfo.MaterielWide <= 2500)
                    {
                        bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt();
                        //获取分配
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.RoadwayNo.Contains("YLDual") && (stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt() ? x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() : x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt())).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).OrderBy(x => x.RoadwayNo).ToList();
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
                        if (RoadwayType)
                        {
                            foreach (var item in locationCounts)
                            {
                                if (item.RoadwayNo.Contains("YLDual"))
                                {
                                    int count = Db.Queryable<Dt_LocationInfo>()
                                    .Where(x => x.WarehouseId == warehouse.WarehouseId
                                        && x.LocationStatus == (int)LocationStatusEnum.Free
                                        && x.EnableStatus == (int)EnableStatusEnum.Normal
                                        && x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt()
                                        && x.RoadwayNo == item.RoadwayNo).Count();
                                    item.Count = count;
                                }
                            }
                        }
                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                    }
                }
@@ -927,12 +960,17 @@
            }
        }
        //处理分配巷道 ä»»åŠ¡æ•°é‡
        public string HandleRoadway(List<LocationCount> locationCounts, Dt_Warehouse warehouse)
        public string HandleRoadway(List<LocationCount> locationCounts, Dt_Warehouse warehouse,List<string> roadways=null)
        {
            if (roadways != null)
            {
                locationCounts = locationCounts.Where(x => !roadways.Contains(x.RoadwayNo)).ToList();
            }
            //巷道任务分配数量
            List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId
            && locationCounts.Select(j => j.RoadwayNo).Distinct().Contains(x.Roadway)
            && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
            foreach (var item in locationCounts)
            {
                LocationCount? count = useLocationCounts.FirstOrDefault(x => x.RoadwayNo == item.RoadwayNo);
@@ -998,6 +1036,28 @@
                        _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
                        _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId);
                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
                        if (task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
                        {
                            ERPProInUpModel proInUpModel = new ERPProInUpModel();
                            List<PB_INV_PRODUCT_INItem> pRODUCT_INItems = new List<PB_INV_PRODUCT_INItem>();
                            foreach (var item in proStockInfo.proStockInfoDetails)
                            {
                                PB_INV_PRODUCT_INItem pB_INV_PRODUCT_INItem = new PB_INV_PRODUCT_INItem()
                                {
                                    WP_ID=item.LotNumber.ObjToInt(),
                                    INV_BARCODE=item.ProductNo,
                                    QTY=(int)item.StockQty,
                                    REMARK="成品入库"
                                };
                                pRODUCT_INItems.Add(pB_INV_PRODUCT_INItem);
                            }
                            proInUpModel.PB_INV_PRODUCT_IN= pRODUCT_INItems;
                            string request = _invokeERPService.ERPProInUp(proInUpModel) ?? throw new Exception("成品入库接口请求失败");
                            if (!request.Contains("Success"))
                            {
                                throw new Exception($"成品入库失败");
                            }
                        }
                        _unitOfWorkManage.CommitTran();
                        _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(proStockInfo, 0, proStockInfo.proStockInfoDetails.Sum(x => x.StockQty), StockChangeTypeEnum.Inbound);
                    }
@@ -1016,7 +1076,7 @@
                    }
                    //获取货位信息
                    Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                    if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                    if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                    {
                        return content.Error($"未找到对应的终点货位信息");
                    }
@@ -1028,7 +1088,7 @@
                        Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                        _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                    }
                    if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                    if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
                    {
                        stockInfo.LocationCode = locationInfoEnd.LocationCode;
                    }
@@ -1051,6 +1111,21 @@
                    _unitOfWorkManage.CommitTran();
                    //记录库存变动
                    _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.StockLength, 0, StockChangeTypeEnum.Inbound,taskNum:task.TaskNum);
                    //上报新厂ERP
                    if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.新厂.ObjToInt() && task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
                    {
                        string request = _invokeERPService.ERPPurchaseUp(new ERPPurchaseUpModel()
                        {
                            INV_BARCODE_RFID = new List<INV_BARCODE_RFIDItem>()
                            {
                                new INV_BARCODE_RFIDItem()
                                {
                                    INV_BARCODE=stockInfo.PalletCode,
                                    RFID_BARCODE=stockInfo.RfidCode
                                }
                            }
                        });
                    }
                    //上报老厂ERP
                    if (stockInfo.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
                    {
@@ -1631,7 +1706,7 @@
                    MaterielCode = materielInfo.MaterielCode,
                    MaterielName = materielInfo.MaterielName,
                };
                if (wide > 1200)
                if (wide >= 1160)
                {
                    stockInfo.PalletType = 2;
                }
@@ -1717,7 +1792,7 @@
                    MaterielCode = materielInfo.MaterielCode,
                    MaterielName = materielInfo.MaterielName,
                };
                if (wide > 1200)
                if (wide >= 1160)
                {
                    stockInfo.PalletType = 2;
                }
@@ -1814,19 +1889,45 @@
                List<Dt_Task> tasks = new List<Dt_Task>();
                _unitOfWorkManage.BeginTran();
                _inboundRepository.MESProInOrderInfoRepository.AddData(AddMESProInOrders);
                if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).Count() > 0)
                List<Dt_MESProInOrderInfo> mESProInOrderInfos = AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).ToList();
                if (mESProInOrderInfos.Count > 0)
                {
                    List<PB_INV_PRODUCT_INItem> pRODUCT_INItems = new List<PB_INV_PRODUCT_INItem>();
                    foreach (var item in mESProInOrderInfos)
                    {
                        PB_INV_PRODUCT_INItem pB_INV_PRODUCT_INItem = new PB_INV_PRODUCT_INItem()
                        {
                            WP_ID = item.ProcessNum,
                            INV_BARCODE=item.BarCode,
                            REMARK = "半成品入库",
                            QTY=(int)item.ProQuantity
                        };
                        pRODUCT_INItems.Add(pB_INV_PRODUCT_INItem);
                    }
                    string request = _invokeERPService.ERPSemiProInUp(
                            new ERPProInUpModel()
                            {
                                PB_INV_PRODUCT_IN= pRODUCT_INItems
                            }) ?? throw new Exception("半成品入库接口请求失败");
                    //生成半成品入库
                    WebResponseContent webResponse = PrintInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).ToList());
                    WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).ToList());
                    if (!webResponse.Status)
                    {
                        throw new Exception(webResponse.Message);
                    }
                    tasks = webResponse.Data as List<Dt_Task>;
                    WebResponseContent taskResponse = PushTasksToWCS(tasks);
                    if (taskResponse.Status)
                    if (!taskResponse.Status)
                    {
                        throw new Exception(taskResponse.Message);
                    }
                }
                if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.成品.ObjToInt()).Count() > 0)
                {
                    WebResponseContent webResponse = PushPackaxisTaskToWCS(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.成品.ObjToInt()).ToList());
                    if (!webResponse.Status)
                    {
                        throw new Exception(webResponse.Message);
                    }
                }
                _unitOfWorkManage.CommitTran();
@@ -1841,9 +1942,9 @@
            return content;
        }
        /// <summary>
        /// å°åˆ·ä¸‹æ–™MES任务
        /// åŠæˆå“ä¸‹æ–™MES任务
        /// </summary>
        public WebResponseContent PrintInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
        public WebResponseContent SemiProInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -1858,11 +1959,16 @@
                List<Dt_Task> tasks = new List<Dt_Task>();
                //获取所有AGV点位
                List<Dt_AGVStationInfo> aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
                List<Dt_AGVStationInfo> _AGVStationInfos = new List<Dt_AGVStationInfo>();
                //根据半成品信息呼叫对应任务
                foreach (var item in mESProInOrderInfos)
                {
                    Dt_AGVStationInfo? CheckPointCode = aGVStationInfos.FirstOrDefault(x => x.MESPointCode == item?.PointCode);
                    Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialCode);
                    if (CheckPointCode==null)
                    {
                        return content.Error($"未找到{item?.PointCode}点位");
                    }
                    if (materielInfo == null)
                    {
                        return content.Error("未找到物料信息");
@@ -1895,7 +2001,7 @@
                        MaterielName = materielInfo.MaterielName,
                        StockLength=item.ProQuantity
                    };
                    if (item.Wide > 1200)
                    if (item.Wide >= 1160)
                    {
                        stockInfo.PalletType = 2;
                    }
@@ -1903,7 +2009,7 @@
                    //半成品入库任务
                    Dt_Task newTask = new Dt_Task()
                    {
                        CurrentAddress = CheckPointCode.AGVStationCode,
                        CurrentAddress = item.PointCode.StartsWith("YS") ? CheckPointCode.AGVStationCode : CheckPointCode.MESPointCode,
                        Grade = 0,
                        NextAddress = "",
                        PalletCode = item.BarCode,
@@ -1919,17 +2025,54 @@
                    TaskTypeEnum taskTypeEnum = CheckPointCode.StationArea switch
                    {
                        nameof(StationAreaEnum.一楼印刷) => TaskTypeEnum.PrintYLInbound,
                        nameof(StationAreaEnum.一楼分切) => TaskTypeEnum.PartOffInbound,
                        nameof(StationAreaEnum.一楼纸张淋膜) => TaskTypeEnum.PaperFilmInbound,
                        nameof(StationAreaEnum.一楼无纺淋膜) => TaskTypeEnum.WFBYLInbound,
                        _ => throw new Exception("未找到对应任务")
                    };
                    if (taskTypeEnum == TaskTypeEnum.WFBYLInbound)
                    {
                        Dt_AGVStationInfo? stationInfo = AssignWFBStation(_AGVStationInfos?.Select(x => x.AGVStationCode).ToList()) ?? throw new Exception("未找到可用无纺布暂存架");
                        newTask.NextAddress = stationInfo.AGVStationCode;
                        newTask.TargetAddress = stationInfo.AGVStationCode;
                        newTask.Roadway = "AGV";
                        stationInfo.IsOccupied = 1;
                        _AGVStationInfos.Add(stationInfo);
                    }
                    newTask.TaskType = taskTypeEnum.ObjToInt();
                    stockInfos.Add(stockInfo);
                    tasks.Add(newTask);
                }
                //操作入库数据
                BaseDal.AddData(tasks);
                _basicRepository.AGVStationInfoRepository.UpdateData(_AGVStationInfos);
                _stockRepository.StockInfoRepository.AddData(stockInfos);
                //推送任务
                content.OK("发送成功",data:tasks);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æŽ¨é€ç åž›æ•°æ®è‡³WCS
        /// </summary>
        /// <returns></returns>
        public WebResponseContent PushPackaxisTaskToWCS(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string url = AppSettings.Get("WCS");
                if (string.IsNullOrEmpty(url))
                {
                    throw new Exception($"未找到WCSAApi地址,请检查配置文件");
                }
                string response = HttpHelper.Post($"{url}/api/Packinfo/ReceivePackaxisTask", mESProInOrderInfos.Serialize());
                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("返回错误");
            }
            catch (Exception ex)
            {
@@ -1953,5 +2096,94 @@
                throw new Exception(ex.Message);
            }
        }
        public WebResponseContent BoxingInBound(string stationCode,List<string> barCodes)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取成品库存
                Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == stationCode);
                if (proStockInfoOld != null)
                {
                    return content.Error($"托盘{stationCode}已存在");
                }
                //获取条码信息
                List<Dt_MESProInOrderInfo> proInOrderInfos = _inboundRepository.MESProInOrderInfoRepository.QueryData(x=> barCodes.Contains(x.BarCode));
                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== proInOrderInfos.FirstOrDefault().MaterialCode);
                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
                foreach (var item in proInOrderInfos)
                {
                    Dt_ProStockInfoDetail proStockInfoDetail = new Dt_ProStockInfoDetail()
                    {
                        ProductCode = materielInfo.MaterielCode,
                        ProductNo = item.BarCode,
                        ProductName = materielInfo.MaterielName,
                        ProductSpec = materielInfo.MaterielSpec,
                        LotNumber = item.ProcessNum.ToString(),
                        ProductUnit = materielInfo.MaterielUnit,
                        StockQty = item.ProQuantity,
                        ProStockDetailStatus = StockStatusEmun.组盘暂存.ObjToInt()
                    };
                    proStockInfoDetails.Add(proStockInfoDetail);
                }
                Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
                {
                    PalletCode = stationCode,
                    ProInOrderNo = proInOrderInfos.FirstOrDefault().ProductOrderNo,
                    ProStockAttribute = materielInfo.MaterielSourceType,
                    PalletType = 1,
                    LocationCode = "",
                    WarehouseId = materielInfo.WarehouseId,
                    StockStatus = StockStatusEmun.组盘暂存.ObjToInt(),
                    proStockInfoDetails = proStockInfoDetails
                };
                BaseDal.Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
                content.OK();
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æˆå“å…¥åº“扫码请求更新条码
        /// </summary>
        /// <returns></returns>
        public WebResponseContent InBoundPalletCode(int taskNum, string barCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取当前任务
                Dt_Task? taskExist = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (taskExist==null)
                {
                    return content.Error($"未找到任务{taskNum}");
                }
                //判断库存中是否存在重复托盘条码
                Dt_ProStockInfo? proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x=>x.PalletCode==barCode);
                if (proStockInfo!=null)
                {
                    return content.Error($"库存条码{proStockInfo.PalletCode}已存在");
                }
                Dt_ProStockInfo proStockInfoExist = _stockRepository.ProStockInfoRepository.QueryFirst(x=>x.PalletCode== taskExist.PalletCode);
                //更新
                proStockInfoExist.PalletCode = barCode;
                taskExist.PalletCode = barCode;
                _unitOfWorkManage.BeginTran();
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfoExist);
                BaseDal.UpdateData(taskExist);
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
    }
}