1
wankeda
2026-01-22 eaf097eeef67ebaaf46777269128e65f820e31fc
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -108,6 +108,7 @@
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly INewOutboundOrderDetailRepository _newOutboundOrderDetailRepository;
        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
        private readonly IStockInfoDetailCPRepository _stockInfoDetailCPRepository;
        private readonly IReturnOrderRepository _returnOrderRepository;
        private readonly IProductionRepository _productionRepository;
        private readonly IInboundRepository _inboundRepository;
@@ -115,7 +116,7 @@
        private readonly ITakeStockOrderDetailCPRepository _takeStockOrderDetailCPRepository;
        public ITaskRepository Repository => BaseDal;
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository, ITakeStockOrderCPRepository takeStockOrderCPRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository, ITakeStockOrderCPRepository takeStockOrderCPRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository, IStockInfoDetailCPRepository stockInfoDetailCPRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _stockRepository = stockRepository;
@@ -143,6 +144,7 @@
            _newOutboundOrderDetailRepository = newOutboundOrderDetailRepository;
            _takeStockOrderCPRepository = takeStockOrderCPRepository;
            _takeStockOrderDetailCPRepository = takeStockOrderDetailCPRepository;
            _stockInfoDetailCPRepository = stockInfoDetailCPRepository;
        }
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
@@ -988,7 +990,7 @@
                                // 单据数量全部上架完成,处理WMS回传
                                if (inboundOrderDetails.Any(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) && inboundOrder.System.Equals("ERP"))
                                {
                                    if(inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt())
                                    if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt())
                                    {
                                        bool allCompleted = inboundOrder.Details.All(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
                                        if (allCompleted)
@@ -1139,7 +1141,7 @@
            int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
        {
            // 更新入库单明细状态
               UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
            UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
            ///更新库存状态
            stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
            // 更新库存明细状态
@@ -1162,21 +1164,21 @@
                AddRecords(task, stockInfo, locationInfo, lastStatus);
                // 更新入库单
                    UpdateInboundOrder(inboundOrder, inboundOrderDetail);
                UpdateInboundOrder(inboundOrder, inboundOrderDetail);
                    // 单据数量全部上架完成,处理WMS回传
                    if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && inboundOrder.System.Equals("ERP"))
                    {
                            FeedBackInboundERP(inboundOrder.UpperOrderNo, inboundOrderDetail.LinId);
                        }
                    if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
                    {
                        //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
                // 单据数量全部上架完成,处理WMS回传
                if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && inboundOrder.System.Equals("ERP"))
                {
                    FeedBackInboundERP(inboundOrder.UpperOrderNo, inboundOrderDetail.LinId);
                }
                    else if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
                    {
                        SendAllocateInfoToWMS(task, inboundOrder, stockInfo);
                    }
                if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
                {
                    SendInboundInfoToWMS(task, inboundOrder, stockInfo);
                }
                else if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
                {
                    SendAllocateInfoToWMS(task, inboundOrder, stockInfo);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
@@ -1938,7 +1940,7 @@
                            return WebResponseContent.Instance.Error($"处理失败: {ex.Message}");
                        }
                    }
                    else if(warehouse.WarehouseCode.Contains("DW") || warehouse.WarehouseCode.Contains("YS"))
                    else if (warehouse.WarehouseCode.Contains("DW") || warehouse.WarehouseCode.Contains("YS"))
                    {
                        Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                        .Where(x => x.OrderNo == task.OrderNo)
@@ -1948,24 +1950,24 @@
                        if (inboundOrder == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                        Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail();
                        foreach(var detail in stockInfo.Details)
                        foreach (var detail in stockInfo.Details)
                        {
                            outboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                            .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo)
                            .First();
                            if(outboundOrderDetail != null) break;
                            if (outboundOrderDetail != null) break;
                        }
                        if (outboundOrderDetail.LocationName != null && outboundOrderDetail.LocationName != "")
                        {
                          foreach(var detail in stockInfo.Details)
                          {
                            foreach (var detail in stockInfo.Details)
                            {
                                outboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                                .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo && x.LocationName == stockInfo.LocationCode)
                                .First();
                                if (outboundOrderDetail != null) break;
                           }
                            }
                        }
                        if (outboundOrderDetail == null) return WebResponseContent.Instance.Error("未找到出库单信息");
@@ -2066,7 +2068,7 @@
                _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                // 更新库存状态 回库单
                if(locationInfo.RoadwayNo.Contains("DW") || locationInfo.RoadwayNo.Contains("YS"))
                if (locationInfo.RoadwayNo.Contains("DW") || locationInfo.RoadwayNo.Contains("YS"))
                {
                    AddDWANDYSRetrueOrder(stockInfo, inboundOrder);
                }
@@ -2074,7 +2076,7 @@
                {
                    AddRetrueOrder(stockInfo, inboundOrder);
                }
                // 区分单据数据来源更新货位状态
                if (inboundOrder.System == null)
                {
@@ -2171,7 +2173,7 @@
            {
                if (inboundOrderDetail == null) continue;
                if(inboundOrderDetail.BatchNo == item.BatchNo)
                if (inboundOrderDetail.BatchNo == item.BatchNo)
                {
                    inboundOrderDetail.OverOutQuantity += item.OutboundQuantity;
@@ -2526,7 +2528,7 @@
            List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
           .Where(x => x.StockId == stockInfo.Id).ToList();
            Dt_ReturnOrder? lastReturnOrder = null;
            Dt_ReturnOrder? lastReturnOrder = null;
            foreach (var stockInfoDetail in stockInfoDetails)
            {
                if (stockInfoDetail == null)
@@ -2575,7 +2577,7 @@
                                System = "WMS",
                                Remark = stockInfoDetail.BatchNo
                            };
                            if(lastReturnOrder != null)
                            if (lastReturnOrder != null)
                            {
                                lastReturnOrder.Remark = lastReturnOrder.Remark + $", {returnOrder.BatchNo}";
                                _returnOrderRepository.UpdateData(lastReturnOrder);
@@ -2585,7 +2587,7 @@
                                returnOrder.LocationCode = stockInfo.LocationCode;
                            }
                            _unitOfWorkManage.BeginTran();
                            if(lastReturnOrder == null)
                            if (lastReturnOrder == null)
                            {
                                _returnOrderRepository.AddData(returnOrder);
                                lastReturnOrder = returnOrder;
@@ -2678,7 +2680,7 @@
                        var matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode && x.BatchNo == outboundDetail.BatchNo);
                        if (matchedStockDetail == null)
                        {
                            matchedStockDetail = stockInfoDetails.FirstOrDefault(x =>x.MaterielCode == outboundDetail.MaterielCode);
                            matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode);
                            if (matchedStockDetail == null)
                            {
@@ -2716,7 +2718,7 @@
                            returnOrders.Add(returnOrder);
                            // 更新当前批次明细:只保留出库数量,其余返库
                            matchedStockDetail.StockQuantity = outboundDetail.OrderQuantity;
                            matchedStockDetail.StockQuantity = remainingQuantity;
                            matchedStockDetail.OutboundQuantity = outboundDetail.OrderQuantity;
                            //matchedStockDetail.OrderNo = returnOrder.OrderNo;
                        }
@@ -3427,12 +3429,7 @@
            try
            {
                //获取对应盘点单
                Dt_TakeStockOrderDetailCP takeStockOrderDetailCP = _takeStockOrderDetailCPRepository.QueryFirst(x => x.TakePalletCode == task.PalletCode);
                if (takeStockOrderDetailCP == null)
                {
                    return content.Error($"盘点单,托盘号{takeStockOrderDetailCP.TakePalletCode}不存在");
                }
                Dt_TakeStockOrderCP takeStockOrder = _inboundRepository.TakeStockOrderRepository.Db.Queryable<Dt_TakeStockOrderCP>().Where(x => x.Id == takeStockOrderDetailCP.TakeStockId).Includes(x => x.Details).First();
                Dt_TakeStockOrderCP takeStockOrder = _inboundRepository.TakeStockOrderRepository.Db.Queryable<Dt_TakeStockOrderCP>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details).First();
                if (takeStockOrder == null)
                {
                    return content.Error($"盘点单{task.OrderNo}不存在");
@@ -3495,6 +3492,7 @@
                _returnOrderRepository.AddData(returnOrder);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, LocationStatusEnum.Lock.ObjToInt(), LocationChangeType.OutboundCompleted.ObjToInt(), takeStockOrder?.OrderNo ?? "", task.TaskNum);
                _takeStockOrderCPRepository.UpdateData(takeStockOrder);
                _takeStockOrderDetailCPRepository.UpdateData(takeStockOrder.Details);
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);