| | |
| | | { |
| | | // 更新入库单明细状态 |
| | | UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail); |
| | | |
| | | ///更新库存状态 |
| | | stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt(); |
| | | // 更新库存明细状态 |
| | | stockInfo.Details.ForEach(x => x.Status = StockStatusEmun.入库完成.ObjToInt()); |
| | | |
| | |
| | | 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. 处理出库订单详情 |
| | |
| | | UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails); |
| | | |
| | | // 3. 执行核心出库逻辑 |
| | | return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails); |
| | | return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | //} |
| | | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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) |
| | |
| | | |
| | | private void CompleteTask(Dt_Task task) |
| | | { |
| | | task.TaskStatus = OutTaskStatusEnum.OutFinish.ObjToInt(); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成); |
| | | } |
| | | |
| | |
| | | |
| | | 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() |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |