helongyang
2026-03-31 8fcd7a67e4391a5f1fbdb590c2a3f913aeb2a0a0
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -391,6 +391,7 @@
                        _inboundOrderService.FeedbackInboundOrder(inboundOrder.Id);
                    }
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -495,8 +496,8 @@
                    x.ProOutDetailStatus = StockStatusEmun.入库完成.ObjToInt();
                });
                #region todo:临时更新所有研发转成品
                if (proStockInfo.ProStockAttribute == ProStockAttributeEnum.研发.ObjToInt())
                #region todo:临时更新所有研发或尾数转成品
                if (proStockInfo.ProStockAttribute == ProStockAttributeEnum.研发.ObjToInt() || proStockInfo.ProStockAttribute == ProStockAttributeEnum.尾数.ObjToInt())
                {
                    proStockInfo.ProStockAttribute = ProStockAttributeEnum.成品.ObjToInt();
                    proStockInfo.WarehouseId = locationInfo.WarehouseId;
@@ -602,6 +603,14 @@
                }
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
                if(task.TaskType == TaskTypeEnum.MesPPMove.ObjToInt())
                {
                    task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    FeedBackWCSTaskCompleted(taskNum);
                    return WebResponseContent.Instance.OK();
                }
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (stockInfo == null)
                {
@@ -619,8 +628,11 @@
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>();
                List<Dt_MesPPOutboundOrder> mesPPOutboundOrders = new List<Dt_MesPPOutboundOrder>();
                List<Dt_MesPPCutOutboundOrder> mesPPCutOutboundOrders = new List<Dt_MesPPCutOutboundOrder>();
                List<Dt_MesPPCutOutboundOrderDetail> mesPPCutOutboundOrderDetails = new List<Dt_MesPPCutOutboundOrderDetail>();
                Dt_CheckOrder? checkOrder = null;
                Dt_OutboundOrder? outboundOrder = null;
                Dt_MesPPCutOutboundOrder mesPPCutOutboundOrder = null;
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA154.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                {
                    return WebResponseContent.Instance.Error($"未找到出库详情信息");
@@ -642,10 +654,10 @@
                                mesOutboundOrders.Add(mesOutboundOrder);
                            }
                        }
                        //PP出库任务完成判断。。。。。。。。。。。。。。。。。
                        else if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
                        //PP大卷出库任务完成判断
                        else if (task.TaskType == TaskTypeEnum.MesPPOutbound.ObjToInt() && (warehouse.WarehouseCode == WarehouseEnum.HA581.ToString()|| warehouse.WarehouseCode == WarehouseEnum.HA58.ToString()))
                        {
                            Dt_MesPPOutboundOrder mesPPOutboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.OrderNo == item.OrderNo);
                            Dt_MesPPOutboundOrder mesPPOutboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.TaskNo == item.OrderNo);
                            if (mesPPOutboundOrder != null)
                            {
                                mesPPOutboundOrder.OverOutQuantity = item.AssignQuantity;
@@ -654,6 +666,25 @@
                                    mesPPOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                mesPPOutboundOrders.Add(mesPPOutboundOrder);
                            }
                        }
                        else if (task.TaskType == TaskTypeEnum.MesPPCutOutbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA581.ToString())
                        {
                            Dt_MesPPCutOutboundOrderDetail mesPPCutOutboundOrderDetail = _outboundService.MesPPCutOutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId);
                            if (mesPPCutOutboundOrderDetail != null)
                            {
                                mesPPCutOutboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == mesPPCutOutboundOrderDetail.OrderId);
                                if (mesPPCutOutboundOrder == null)
                                {
                                    return WebResponseContent.Instance.Error($"未找到MES小卷出库单信息");
                                }
                                mesPPCutOutboundOrderDetail.OverOutQuantity = item.AssignQuantity;
                                if (mesPPCutOutboundOrderDetail.OverOutQuantity == mesPPCutOutboundOrderDetail.OrderQuantity)
                                {
                                    mesPPCutOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                mesPPCutOutboundOrderDetails.Add(mesPPCutOutboundOrderDetail);
                            }
                        }
                        else
@@ -704,7 +735,7 @@
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutSale.ObjToInt())
                {
                    //处理出库详情以及库存状态
                    if (outboundOrderDetails.Count > 0)
@@ -767,17 +798,36 @@
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                _unitOfWorkManage.CommitTran();
                //PP出库任务完成判断。。。。。。。。。。。。。。。。。
                if (warehouse.WarehouseCode == WarehouseEnum.HA58.ToString() && task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                //PP大卷出库任务完成判断
                if (task.TaskType == TaskTypeEnum.MesPPOutbound.ObjToInt() && (warehouse.WarehouseCode == WarehouseEnum.HA581.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString()))
                {
                    _outboundService.MesPPOutboundOrderService.Repository.UpdateData(mesPPOutboundOrders);
                    MesMaterialLotaAceptModel model = GetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesPPOutboundOrders.FirstOrDefault().TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesPPOutboundOrders.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity));
                    MesMaterialLotaAceptModel model = PPGetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesPPOutboundOrders.FirstOrDefault().TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesPPOutboundOrders.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity));
                    UploadMesMaterialLotaAcept(model);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                //PP小卷出库任务完成判断
                if (task.TaskType == TaskTypeEnum.MesPPCutOutbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA581.ToString())
                {
                    _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(mesPPCutOutboundOrderDetails);
                    int completedDetailCount = mesPPCutOutboundOrderDetails.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
                    // åˆ¤æ–­æ‰€æœ‰æ˜Žç»†æ˜¯å¦å®Œæˆ
                    if (completedDetailCount == mesPPCutOutboundOrderDetails.Count)
                    {
                        mesPPCutOutboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                        _outboundService.MesPPCutOutboundOrderService.UpdateData(mesPPCutOutboundOrder);
                    }
                    MesMaterialLotaAceptModel model = PPGetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesPPCutOutboundOrder.TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetails.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity));
                    UploadMesMaterialLotaAcept(model);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                if (warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                {
                    _outboundService.OutboundOrderService.TestOutUpload(outboundOrderDetails.FirstOrDefault().OrderId, outStockLockInfos);
@@ -787,6 +837,7 @@
                    MesMaterialLotaAceptModel model = GetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesOutboundOrders.FirstOrDefault().TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesOutboundOrders.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity));
                    UploadMesMaterialLotaAcept(model);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -916,12 +967,9 @@
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _unitOfWorkManage.CommitTran();
                //MES成品出库同步
                if (task.TaskType!= TaskTypeEnum.OutSendProduct.ObjToInt())
                {
                    MesShipmentOrderSync shipmentOrderSync = MesOutSync(outProStockInfo, proOutOrderDetail, proStockInfoDetails);
                    ShipmentOrderSync(shipmentOrderSync);
                    ShipmentOrderMESSync(shipmentOrderSync);
                }
                MesShipmentOrderSync shipmentOrderSync = MesOutSync(outProStockInfo, proOutOrderDetail, proStockInfoDetails, task);
                ShipmentOrderSync(shipmentOrderSync);
                ShipmentOrderMESSync(shipmentOrderSync);
                content.OK();
            }
            catch (Exception ex)
@@ -1010,6 +1058,7 @@
            }
            return content;
        }
        //报废出库完成
        public WebResponseContent OutProScrapCompleted(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
@@ -1028,7 +1077,6 @@
                    return content.Error("未找到成品出库详情");
                }
                //获取成品报废单
                Dt_ErpProScrapSheet erpProScrapSheet = _outboundRepository.ErpProScrapSheetRepository.Db.Queryable<Dt_ErpProScrapSheet>().Where(x => x.ProScrapSheetOrderNo == outProStockInfo.OrderNo).Includes(x=>x.Details).First();
                if (erpProScrapSheet == null)
                {
@@ -1043,12 +1091,21 @@
                {
                    return content.Error($"成品报废单明细行{erpProScrapSheetDetail.Id}已完成");
                }
                erpProScrapSheetDetail.ScrapProDetailStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                //获取当前库存
                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
                if (proStockInfo == null)
                {
                    return content.Error($"未找到{task.PalletCode}库存信息");
                }
                if (((int)outProStockInfo.AssignQuantity+erpProScrapSheetDetail.OverScrapPcsQty) == erpProScrapSheetDetail.ScrapPcsQty)
                {
                    erpProScrapSheetDetail.OverScrapPcsQty += (int)outProStockInfo.AssignQuantity;
                    erpProScrapSheetDetail.ScrapProDetailStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                }
                else
                {
                    erpProScrapSheetDetail.OverScrapPcsQty += (int)outProStockInfo.AssignQuantity;
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails;
                if (proStockInfoDetails.Count <= 0)
@@ -1201,7 +1258,10 @@
                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工删除 : OperateTypeEnum.自动删除);
                        _stockService.ProStockInfoService.Repository.DeleteAndMoveIntoHty(proStockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动删除 : OperateTypeEnum.人工删除);
                        _stockService.ProStockInfoDetailService.Repository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId == 0 ? OperateTypeEnum.自动删除 : OperateTypeEnum.人工删除);
                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
                        if (prolocationInfo != null)
                        {
                            _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
                        }
                        _unitOfWorkManage.CommitTran();
                        return WebResponseContent.Instance.OK();
                    }
@@ -1218,7 +1278,10 @@
                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工删除 : OperateTypeEnum.自动删除);
                        _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo);
                        _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails);
                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
                        if (prolocationInfo != null)
                        {
                            _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
                        }
                        _unitOfWorkManage.CommitTran();
                        return WebResponseContent.Instance.OK();
                    }
@@ -1260,7 +1323,7 @@
                Dt_InboundOrderDetail? inboundOrderDetail = null;
                Dt_ReturnOrder? returnOrder = null;
                //标准入库流程查找入库单据
                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt()&&(task.WarehouseId == WarehouseEnum.HA152.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA58.ObjToInt()))
                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt()&&(task.WarehouseId == 11 || task.WarehouseId == 4))
                {
                    inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo);
                    foreach (var item in stockInfo.Details)
@@ -1286,11 +1349,15 @@
                        }
                    }
                }
                if(task.WarehouseId == WarehouseEnum.HA154.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA152.ObjToInt() || task.WarehouseId == WarehouseEnum.HA58.ObjToInt())
                if(task.WarehouseId == 11 || task.WarehouseId == 4||task.WarehouseId == 12)
                {
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动删除 : OperateTypeEnum.人工删除);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动删除 : OperateTypeEnum.人工删除);
                }else
                }else if(task.WarehouseId == 6 && task.TaskType == TaskTypeEnum.ProductionReturn.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.组盘暂存.ObjToInt();
                }
@@ -1299,7 +1366,10 @@
                FeedBackWCSTaskHandCancel(taskNum);
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工删除 : OperateTypeEnum.人工删除);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                if(locationInfo != null)
                {
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                }
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                if (inboundOrder != null && inboundOrderDetail != null)
                {
@@ -1317,6 +1387,7 @@
            }
            catch(Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
@@ -1405,6 +1476,7 @@
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }