647556386
2025-08-10 75e3bca44b111c167b9389e4e51b2ce577a9f9e0
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -462,7 +462,8 @@
        {
            // 更新入库单明细状态
            UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
            ///更新库存状态
            stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
            // 更新库存明细状态
            stockInfo.Details.ForEach(x => x.Status = StockStatusEmun.入库完成.ObjToInt());
@@ -840,17 +841,15 @@
                int lastStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                Dt_OutboundOrderDetail outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                    .Where(x => x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo)
                    .First();
                if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
    .Where(x => x.Id == outboundOrderDetails.OrderId)
    .Includes(x => x.Details)
    .First();
                .Where(x => x.Id == outboundOrderDetails.OrderId)
                .Includes(x => x.Details)
                .First();
                if (inboundOrder == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                // 2. 处理出库订单详情
@@ -859,7 +858,7 @@
                UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
                // 3. 执行核心出库逻辑
                return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails);
                return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
            }
            catch (Exception ex)
            {
@@ -917,18 +916,18 @@
        //}
        private WebResponseContent ExecuteOutboundLogic(Dt_Task task, Dt_StockInfo stockInfo,
            Dt_LocationInfo locationInfo, Dt_OutboundOrderDetail outboundOrderDetails)
            Dt_LocationInfo locationInfo, Dt_OutboundOrderDetail outboundOrderDetails,Dt_OutboundOrder inboundOrder)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                ///更新出库单
                _outboundService.OutboundOrderService.Repository.UpdateData(inboundOrder);
                // 更新出库订单详情
                _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                // 更新库存状态
                UpdateStockStatus(stockInfo, locationInfo);
                DeleteAndMoveIntoHtStockStatus(stockInfo);
                // 更新货位状态
                UpdateLocationStatus(locationInfo);
@@ -971,8 +970,7 @@
                throw;
            }
        }
        private void UpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder,
    ref Dt_OutboundOrderDetail inboundOrderDetail)
        private void UpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder,ref Dt_OutboundOrderDetail inboundOrderDetail)
        {
            int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
            inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo);
@@ -1000,16 +998,10 @@
            }
        }
        private void UpdateStockStatus(Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo)
        private void DeleteAndMoveIntoHtStockStatus(Dt_StockInfo stockInfo)
        {
            stockInfo.LocationCode = "";
            stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
            stockInfo.Details.ForEach(x =>
            {
                x.Status = StockStatusEmun.出库完成.ObjToInt();
            });
            _stockRepository.StockInfoRepository.UpdateData(stockInfo);
            _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        }
        private void UpdateLocationStatus(Dt_LocationInfo locationInfo)
@@ -1021,6 +1013,7 @@
        private void CompleteTask(Dt_Task task)
        {
            task.TaskStatus = OutTaskStatusEnum.OutFinish.ObjToInt();
            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        }
@@ -1129,48 +1122,46 @@
        private void SendNormalOutboundToWMS(Dt_Task task, Dt_OutboundOrder outboundOrder,
            Dt_StockInfoDetail stockInfoDetail, Dt_OutboundOrderDetail outDetail)
        {
            //List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == task.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.BatchNo == outDetail.BatchNo)).ToList();
            List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.OrderNo == outboundOrder.OrderNo);
            if (outStockLockInfos.Count == 0) throw new Exception("未找到库存信息");
            // 构建回传数据,将所有匹配的库存明细加入 DetailList
            var passBack = new HouseoutboundPassBack
            {
                ApiType = "InventoryAllocateController",
                Method = "AsrsFinishedStockCount",
                Parameters = new List<HouseoutboundPassBack.datas>
    {
        new HouseoutboundPassBack.datas
        {
            Value = new List<HouseoutboundPassBack.datas.data1>
            {
                new HouseoutboundPassBack.datas.data1
                //List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == task.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.BatchNo == outDetail.BatchNo)).ToList();
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.OrderNo == outboundOrder.OrderNo);
                if (outStockLockInfos.Count == 0) throw new Exception("未找到库存信息");
                // 构建回传数据,将所有匹配的库存明细加入 DetailList
                var passBack = new HouseoutboundPassBack
                {
                    No = outboundOrder.OrderNo,
                    OutWareHouse = task.Roadway,
                    TransactionCode = outboundOrder.TransactionCode,
                    InoutType = outboundOrder.OrderType,
                    OrderType = outboundOrder.InoutType,
                    DetailList = outStockLockInfos.Select(d => new HouseoutboundPassBack.datas.data1.Inbound
                        {
                            LinId = d.LinId?? "",
                            LPN_No = d.PalletCode,
                            MaterielCode = d.MaterielCode?? "",
                            OrderQuantity = d.OrderQuantity,
                            BatchNo = d.BatchNo,
                            FinishQty = d.OrderQuantity,
                            LocationName = d.LocationCode
                        })
                        .ToList()
                    ApiType = "InventoryAllocateController",
                    Method = "AsrsFinishedStockCount",
                    Parameters = new List<HouseoutboundPassBack.datas>
            {
            new HouseoutboundPassBack.datas
            {
                Value = new List<HouseoutboundPassBack.datas.data1>
                {
                    new HouseoutboundPassBack.datas.data1
                    {
                        No = outboundOrder.OrderNo,
                        OutWareHouse = task.Roadway,
                        TransactionCode = outboundOrder.TransactionCode,
                        InoutType = outboundOrder.OrderType,
                        OrderType = outboundOrder.InoutType,
                        DetailList = outStockLockInfos.Select(d => new HouseoutboundPassBack.datas.data1.Inbound
                            {
                                LinId = d.LinId?? "",
                                LPN_No = d.PalletCode,
                                MaterielCode = d.MaterielCode?? "",
                                OrderQuantity = d.OrderQuantity,
                                BatchNo = d.BatchNo,
                                FinishQty = d.OrderQuantity,
                                LocationName = d.LocationCode
                            })
                            .ToList()
                    }
                }
            }
        }
    }
            };