| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | _newOutboundOrderDetailRepository = newOutboundOrderDetailRepository; |
| | | _takeStockOrderCPRepository = takeStockOrderCPRepository; |
| | | _takeStockOrderDetailCPRepository = takeStockOrderDetailCPRepository; |
| | | _stockInfoDetailCPRepository = stockInfoDetailCPRepository; |
| | | } |
| | | |
| | | public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"]; |
| | |
| | | // 单据数量全部上架完成,处理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) |
| | |
| | | int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail) |
| | | { |
| | | // 更新入库单明细状态 |
| | | UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail); |
| | | UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail); |
| | | ///更新库存状态 |
| | | stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt(); |
| | | // 更新库存明细状态 |
| | |
| | | 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(); |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | System = "WMS", |
| | | Remark = stockInfoDetail.BatchNo |
| | | }; |
| | | if(lastReturnOrder != null) |
| | | if (lastReturnOrder != null) |
| | | { |
| | | lastReturnOrder.Remark = lastReturnOrder.Remark + $", {returnOrder.BatchNo}"; |
| | | _returnOrderRepository.UpdateData(lastReturnOrder); |
| | |
| | | returnOrder.LocationCode = stockInfo.LocationCode; |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | if(lastReturnOrder == null) |
| | | if (lastReturnOrder == null) |
| | | { |
| | | _returnOrderRepository.AddData(returnOrder); |
| | | lastReturnOrder = returnOrder; |
| | |
| | | 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) |
| | | { |
| | |
| | | returnOrders.Add(returnOrder); |
| | | |
| | | // 更新当前批次明细:只保留出库数量,其余返库 |
| | | matchedStockDetail.StockQuantity = outboundDetail.OrderQuantity; |
| | | matchedStockDetail.StockQuantity = remainingQuantity; |
| | | matchedStockDetail.OutboundQuantity = outboundDetail.OrderQuantity; |
| | | //matchedStockDetail.OrderNo = returnOrder.OrderNo; |
| | | } |
| | |
| | | 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}不存在"); |
| | |
| | | _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.人工完成); |