| | |
| | | using WIDESEA_DTO.CalcOut; |
| | | using Newtonsoft.Json.Serialization; |
| | | using Newtonsoft.Json; |
| | | using WIDESEA_DTO.Basic; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | |
| | | private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository; |
| | | private readonly IOutboundService _outboundService; |
| | | private readonly IFeedbackMesService _feedbackMesService; |
| | | public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService, IRepository<Dt_InboundOrder> inboundOrderRepository,IRepository<Dt_OutboundOrder> outboundOrderRepository,IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, IOutboundPickingService outboundPickingService, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IOutboundService outboundService,IFeedbackMesService feedbackMesService) : base(BaseDal) |
| | | private readonly IESSApiService _eSSApiService; |
| | | public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService, IRepository<Dt_InboundOrder> inboundOrderRepository,IRepository<Dt_OutboundOrder> outboundOrderRepository,IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, IOutboundPickingService outboundPickingService, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IOutboundService outboundService,IFeedbackMesService feedbackMesService,IESSApiService eSSApiService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _takeStockOrder = takeStockOrder; |
| | |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | _outboundService = outboundService; |
| | | _feedbackMesService = feedbackMesService; |
| | | _eSSApiService = eSSApiService; |
| | | } |
| | | |
| | | private Dictionary<string, string> stations = new Dictionary<string, string> |
| | | { |
| | | {"2-1","2-9" }, |
| | | {"3-1","3-9" }, |
| | | }; |
| | | |
| | | private Dictionary<string, string> movestations = new Dictionary<string, string> |
| | | { |
| | | {"2-1","2-5" }, |
| | | {"3-1","3-5" }, |
| | | }; |
| | | public WebResponseContent ValidateBoxNo(string orderNo, string boxNo) |
| | | { |
| | | try |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçå¤äºéçç¹ç¶æï¼è¯·æ£æ¥çç¹ä»»å¡"); |
| | | } |
| | | Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == orderNo); |
| | | Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.AllPalletCode.Contains(boxNo)&& x.TakeStockStatus == TakeStockStatusEnum.çç¹ä¸.ObjToInt()); |
| | | if (takeStockOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥çç¹åæ®"); |
| | | return WebResponseContent.Instance.Error("该æçæªæ¾å°è¯¥çç¹åæ®"); |
| | | } |
| | | if (takeStockOrder.AllPalletCode.Contains(",")) |
| | | { |
| | |
| | | return WebResponseContent.Instance.Error($"ç®±å·ã{boxNo}ãæªå¨çç¹åç®±å·ã{takeStockOrder.AllPalletCode}ã䏿¾å°å¹é
项"); |
| | | } |
| | | } |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | var resultData = new { takeStockOrder = takeStockOrder.OrderNo }; |
| | | return WebResponseContent.Instance.OK(data:resultData); |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | |
| | | { |
| | | try |
| | | { |
| | | if(completeStockTakeDTO.actualQuantity == completeStockTakeDTO.stockQuantity) |
| | | { |
| | | return WebResponseContent.Instance.OK("该æ¡ç ä¸ºå¹³è´¦ï¼æ éè®°å½å·®å¼"); |
| | | } |
| | | Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == completeStockTakeDTO.orderNo); |
| | | if (takeStockOrder == null) |
| | | { |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error("æ¡ç åºåæ°æ®æªæ¾å°å¹é
æ°æ®"); |
| | | } |
| | | List<Dt_AllocateMaterialInfo> allocateMaterialInfos = new List<Dt_AllocateMaterialInfo>(); |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = new Dt_TakeStockOrderDetail() |
| | | { |
| | | TakeStockId = takeStockOrder.Id, |
| | |
| | | Unit = stockInfoDetail.Unit, |
| | | SysQty = completeStockTakeDTO.stockQuantity, |
| | | Qty = completeStockTakeDTO.actualQuantity, |
| | | Remark = completeStockTakeDTO.actualQuantity - completeStockTakeDTO.stockQuantity >= 0 ? "çç" : "çäº", |
| | | Remark = "çäº", |
| | | barcode = completeStockTakeDTO.barcode, |
| | | WarehouseCode = stockInfoDetail.WarehouseCode ?? "", |
| | | FactoryArea = stockInfoDetail.FactoryArea, |
| | |
| | | DifferenceQty = completeStockTakeDTO.actualQuantity - completeStockTakeDTO.stockQuantity |
| | | |
| | | }; |
| | | foreach (var item in stockInfo.Details) |
| | | { |
| | | Dt_AllocateMaterialInfo allocateMaterialInfo = new Dt_AllocateMaterialInfo() |
| | | { |
| | | Barcode = item.Barcode, |
| | | BatchNo = item.BatchNo, |
| | | FactoryArea = item.FactoryArea, |
| | | MaterialCode = item.MaterielCode, |
| | | MaterialName = item.MaterielName, |
| | | OrderId = takeStockOrder.Id, |
| | | OrderNo = takeStockOrder.OrderNo, |
| | | Quantity = item.StockQuantity, |
| | | SupplyCode = item.SupplyCode, |
| | | Unit = item.Unit |
| | | }; |
| | | } |
| | | stockInfoDetail.StockId = 0; |
| | | stockInfoDetail.OrderNo = takeStockOrder.OrderNo; |
| | | stockInfo.StockStatus = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | _takeStockOrderDetail.AddData(takeStockOrderDetail); |
| | | _stockInfoDetailRepository.UpdateData(stockInfoDetail); |
| | | _stockInfoRepository.UpdateData(stockInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("çç¹å®æï¼è¯·å走该å¼å¸¸æç®±è¿è¡å¹³è´¦å¤çï¼"); |
| | |
| | | { |
| | | return content.Error("æªæ¾å°è¯¥çç¹åæ®"); |
| | | } |
| | | var stock = _stockInfoRepository.QueryFirst(x => x.PalletCode == boxNo); |
| | | var stock = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == boxNo).Includes(x=>x.Details).First(); |
| | | |
| | | if (stock == null) |
| | | { |
| | |
| | | } |
| | | |
| | | var task = _taskRepository.QueryFirst(x => x.PalletCode == boxNo); |
| | | |
| | | |
| | | if (task != null) |
| | | { |
| | | return content.Error($"æç{boxNo}åå¨ä»»å¡ååºå¤±è´¥!"); |
| | | return content.Error($"æç{boxNo}åå¨ä»»å¡ï¼ååºå¤±è´¥!"); |
| | | } |
| | | if(stock.StockStatus != StockStatusEmun.çç¹åºåºå®æ.ObjToInt() && stock.StockStatus != StockStatusEmun.çç¹åºå宿.ObjToInt()) |
| | | { |
| | | return content.Error("该æçç¶æä¸å¯¹,ä¸å
许çç¹å
¥åº"); |
| | | } |
| | | stock.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | |
| | | var palletCodes = new HashSet<string>(StringComparer.OrdinalIgnoreCase); |
| | | if (!string.IsNullOrEmpty(takeStockOrder.AllPalletCode)) |
| | | { |
| | |
| | | .Select(p => p.Trim()) |
| | | .ToHashSet(StringComparer.OrdinalIgnoreCase); |
| | | } |
| | | Dt_TakeStockOrderDetail isReturn = _takeStockOrderDetail.QueryFirst(x => x.TakePalletCode == boxNo && (x.TakeDetalStatus == TakeStockDetailStatusEnum.æªè¿è¡å¹³è´¦å¤ç.ObjToInt() || x.TakeDetalStatus == TakeStockDetailStatusEnum.ææ¶æå平账å¤çä¸.ObjToInt())); |
| | | if(isReturn != null) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçè¿ææ¡ç å¾
平账ï¼è¯·å
å¤çåååº"); |
| | | } |
| | | bool hasRelatedTasks = _taskRepository.QueryData(x => palletCodes.Contains(x.PalletCode)).Any(); |
| | | bool hasRelatedDetails = _takeStockOrderDetail.QueryData(x => palletCodes.Contains(x.TakePalletCode)).Any(); |
| | | int overPalletCodeCount = _stockInfoRepository.QueryData(x => palletCodes.Contains(x.PalletCode) && (x.StockStatus == StockStatusEmun.åºåºå®æ.ObjToInt() || x.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt() || x.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()|| x.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt())).Count(); |
| | | bool hasRelatedTasks = palletCodes.Count == overPalletCodeCount + 1; |
| | | |
| | | if (!hasRelatedTasks && !hasRelatedDetails) |
| | | if (hasRelatedTasks) |
| | | { |
| | | takeStockOrder.TakeStockStatus = (int)TakeStockStatusEnum.çç¹å®æ; |
| | | } |
| | | |
| | | stock.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | // åé
æ°è´§ä½ |
| | | var newLocation = _locationInfoService.AssignLocation(stock.LocationType); |
| | | |
| | |
| | | NextAddress = "", |
| | | OrderNo = takeStockOrder.OrderNo, |
| | | Roadway = newLocation.RoadwayNo, |
| | | SourceAddress = sourceAddress, |
| | | SourceAddress = stations.GetValueOrDefault(sourceAddress)??"", |
| | | TargetAddress = newLocation.LocationCode, |
| | | TaskStatus = (int)TaskStatusEnum.New, |
| | | TaskType = TaskTypeEnum.InInventory.ObjToInt(), |
| | | PalletType = stock.PalletType, |
| | | WarehouseId = stock.WarehouseId |
| | | }; |
| | | if (stock.Details.Count <= 0) |
| | | { |
| | | stock.PalletType = (int)PalletTypeEnum.Empty; |
| | | newTask.TaskType = TaskTypeEnum.InEmpty.ObjToInt(); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _stockInfoRepository.UpdateData(stock); |
| | | _takeStockOrder.UpdateData(takeStockOrder); |
| | | _taskRepository.AddData(newTask); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | //var moveResult = await _eSSApiService.MoveContainerAsync(new MoveContainerRequest |
| | | //{ |
| | | // slotCode = movestations[station], |
| | | // containerCode = palletCode |
| | | //}); |
| | | var moveResult = _eSSApiService.MoveContainerAsync(new MoveContainerRequest |
| | | { |
| | | slotCode = movestations[sourceAddress], |
| | | containerCode = boxNo |
| | | }); |
| | | return content.OK(); |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent DocumentReconciliation(int orderId, int id) |
| | | public WebResponseContent DocumentReconciliation(string barcode) |
| | | { |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetail.QueryFirst(x => x.Id == id); |
| | | if(takeStockOrderDetail== null) |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetail.QueryFirst(x => x.barcode == barcode); |
| | | if (takeStockOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥çç¹å·®å¼æ°æ®"); |
| | | } |
| | | if(takeStockOrderDetail.Remark == "çç") |
| | | Dt_OutboundOrderDetail outboundOrderDetail = _outboundOrderDetailRepository.QueryFirst(x => x.Remark == takeStockOrderDetail.TakeStockNo && (x.OrderQuantity-x.LockQuantity-x.MoveQty)>0); |
| | | if (outboundOrderDetail == null) |
| | | { |
| | | Dt_InboundOrderDetail inboundOrderDetail = _inboundOrderDetailRepository.QueryFirst(x => x.Id == orderId); |
| | | if(inboundOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°éæ©çææ¶å¹³è´¦åæ®"); |
| | | } |
| | | Dt_InboundOrder inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x=>x.Id == inboundOrderDetail.OrderId).Includes(x=>x.Details).First(); |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode == takeStockOrderDetail.TakePalletCode && x.StockStatus == StockStatusEmun.çç¹åºå宿.ObjToInt()).Includes(x=>x.Details).First(); |
| | | if(stockInfo== null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"çç¹æç{takeStockOrderDetail.TakePalletCode}çåºåä¿¡æ¯æªæ¾å°ï¼ææçç¶æä¸æ£ç¡®"); |
| | | } |
| | | var datevaliDate = _inboundOrderRepository.Db.Queryable<Dt_MaterialExpirationDate>().Where(x => x.MaterialCode.Contains(inboundOrderDetail.MaterielCode.Substring(0, 6))).First(); |
| | | var newStockDetail = new Dt_StockInfoDetail |
| | | { |
| | | StockId = stockInfo == null ? 0 : stockInfo.Id, |
| | | Barcode = inboundOrderDetail.Barcode, |
| | | MaterielCode = inboundOrderDetail.MaterielCode, |
| | | MaterielName = inboundOrderDetail.MaterielName, |
| | | BatchNo = inboundOrderDetail.BatchNo, |
| | | Unit = inboundOrderDetail.Unit, |
| | | InboundOrderRowNo = inboundOrderDetail.lineNo, |
| | | SupplyCode = inboundOrderDetail.SupplyCode, |
| | | WarehouseCode = inboundOrderDetail.WarehouseCode, |
| | | StockQuantity = inboundOrderDetail.OrderQuantity, |
| | | BarcodeQty = inboundOrderDetail.BarcodeQty, |
| | | BarcodeUnit = inboundOrderDetail.BarcodeUnit, |
| | | FactoryArea = inboundOrder.FactoryArea, |
| | | Status = 0, |
| | | OrderNo = inboundOrder.InboundOrderNo, |
| | | BusinessType = inboundOrder.BusinessType, |
| | | ValidDate = inboundOrder.BusinessType == BusinessTypeEnum.å¤é¨ä»åºè°æºä».ToString() ? inboundOrderDetail.ValidDate : datevaliDate == null ? null : Convert.ToDateTime(DateTime.Now).AddDays(Convert.ToDouble(datevaliDate.ValidityDays)), |
| | | }; |
| | | stockInfo.Details.Add(newStockDetail); |
| | | |
| | | inboundOrderDetail.ReceiptQuantity = inboundOrderDetail.OrderQuantity; |
| | | inboundOrderDetail.OverInQuantity = inboundOrderDetail.OrderQuantity; |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | int overCount = 1; |
| | | int moreOverCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()); |
| | | if (inboundOrder.Details.Count() == overCount + moreOverCount) |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºå®æ.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | } |
| | | takeStockOrderDetail.DifferenceQty -= inboundOrderDetail.OrderQuantity; |
| | | if(takeStockOrderDetail.DifferenceQty > 0) |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤çä¸.ObjToInt(); |
| | | } |
| | | else if (takeStockOrderDetail.DifferenceQty == 0) |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤ç.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error("è¯¥ææ¶åæ®æç»æ¡ç æ°é大äºå¾
平账æ°éï¼è¯·å¦éå
¶ä»åæ®å¹³è´¦"); |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderRepository.UpdateData(inboundOrder); |
| | | _inboundOrderDetailRepository.UpdateData(inboundOrderDetail); |
| | | _takeStockOrderDetail.UpdateData(takeStockOrderDetail); |
| | | BaseDal.Db.Insertable(newStockDetail).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | List<string> barcodes = new List<string>(); |
| | | barcodes.Add(inboundOrderDetail.Barcode); |
| | | _outboundPickingService.NoStockOutBatchInOrderFeedbackToMes(inboundOrder.Id, barcodes); |
| | | |
| | | |
| | | return WebResponseContent.Instance.Error("æªæ¾å°éæ©çæåå¹³è´¦åæ®"); |
| | | } |
| | | else |
| | | if(outboundOrderDetail.MaterielCode != takeStockOrderDetail.MaterielCode) |
| | | { |
| | | Dt_OutboundOrderDetail outboundOrderDetail = _outboundOrderDetailRepository.QueryFirst(x => x.Id == orderId); |
| | | if (outboundOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°éæ©çæåå¹³è´¦åæ®"); |
| | | } |
| | | Dt_OutboundOrder outboundOrder = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First(); |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == takeStockOrderDetail.TakePalletCode && x.StockStatus == StockStatusEmun.çç¹åºå宿.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"çç¹æç{takeStockOrderDetail.TakePalletCode}çåºåä¿¡æ¯æªæ¾å°ï¼ææçç¶æä¸æ£ç¡®"); |
| | | } |
| | | if(outboundOrderDetail.OrderQuantity + takeStockOrderDetail.DifferenceQty > 0) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æååæ®æç»åææ°é大äºå¾
平账æ°éï¼è¯·å¦éå
¶ä»åæ®å¹³è´¦"); |
| | | } |
| | | else if(outboundOrderDetail.OrderQuantity + takeStockOrderDetail.DifferenceQty < 0) |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤çä¸.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤ç.ObjToInt(); |
| | | } |
| | | OutboundCompleteRequestDTO request = new OutboundCompleteRequestDTO() |
| | | { |
| | | OrderNo = outboundOrder.OrderNo, |
| | | PalletCode = stockInfo.PalletCode, |
| | | Barcode = takeStockOrderDetail.barcode, |
| | | Operator = App.User.UserName |
| | | }; |
| | | decimal stoQty = takeStockOrderDetail.SysQty; |
| | | webResponseContent = CompleteOutboundWithBarcode(request, stoQty, orderId); |
| | | takeStockOrderDetail.DifferenceQty = 0; |
| | | _takeStockOrderDetail.UpdateData(takeStockOrderDetail); |
| | | return WebResponseContent.Instance.Error("䏿åå¹³è´¦åæ®ç©æç¼ç ä¸å¹é
"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(outboundOrderDetail.BatchNo)&& outboundOrderDetail.BatchNo != takeStockOrderDetail.BatchNo) |
| | | { |
| | | return WebResponseContent.Instance.Error("䏿åå¹³è´¦åæ®ç©ææ¹æ¬¡ä¸å¹é
"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(outboundOrderDetail.SupplyCode) && outboundOrderDetail.SupplyCode != takeStockOrderDetail.SupplyCode) |
| | | { |
| | | return WebResponseContent.Instance.Error("䏿åå¹³è´¦åæ®ä¾åºåä¸å¹é
"); |
| | | } |
| | | Dt_OutboundOrder outboundOrder = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First(); |
| | | |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤ç.ObjToInt(); |
| | | OutboundCompleteRequestDTO request = new OutboundCompleteRequestDTO() |
| | | { |
| | | OrderNo = outboundOrder.OrderNo, |
| | | PalletCode = takeStockOrderDetail.TakePalletCode, |
| | | Barcode = takeStockOrderDetail.barcode, |
| | | Operator = App.User.UserName |
| | | }; |
| | | webResponseContent = CompleteOutboundWithBarcode(request,outboundOrderDetail.Id); |
| | | takeStockOrderDetail.DifferenceQty = 0; |
| | | _takeStockOrderDetail.UpdateData(takeStockOrderDetail); |
| | | return WebResponseContent.Instance.OK(data: webResponseContent); |
| | | } |
| | | catch(Exception ex) |
| | |
| | | |
| | | } |
| | | } |
| | | public WebResponseContent CompleteOutboundWithBarcode(OutboundCompleteRequestDTO request ,decimal stoQty, int orderDetailId) |
| | | public WebResponseContent CompleteOutboundWithBarcode(OutboundCompleteRequestDTO request ,int orderDetailId) |
| | | { |
| | | WebResponseContent content = WebResponseContent.Instance; |
| | | |
| | |
| | | return WebResponseContent.Instance.Error($"æ¡ç {request.Barcode} 对åºçåºåæç»ä¸åå¨"); |
| | | } |
| | | |
| | | // 3. éªè¯åºåæç»ä¸æçæ¯å¦å¹é
|
| | | if (stockDetail.StockId != stockInfo.Id) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"æ¡ç {request.Barcode} ä¸å±äºæçå· {request.PalletCode} çåºåæç»"; |
| | | return WebResponseContent.Instance.Error($"æ¡ç {request.Barcode} ä¸å±äºæçå· {request.PalletCode} çåºåæç»"); |
| | | } |
| | | |
| | | |
| | | // 4. æ¥æ¾åºåºåä¿¡æ¯ |
| | | Dt_OutboundOrder outboundOrder = _outboundOrderRepository.QueryFirst(o => o.OrderNo == request.OrderNo); |
| | |
| | | return WebResponseContent.Instance.Error("æªæ¾å°åºåºåæç»"); |
| | | } |
| | | // å®é
åºåºé |
| | | decimal actualOutboundQuantity = outboundOrderDetail.OrderQuantity; |
| | | decimal actualOutboundQuantity = outboundOrderDetail.OrderQuantity-outboundOrderDetail.LockQuantity-outboundOrderDetail.MoveQty; |
| | | |
| | | |
| | | // 8. 夿æ¯å¦éè¦æå
ï¼å½åºåºæ°éå°äºåºåæ°éæ¶éè¦æå
ï¼ |
| | | bool isUnpacked = outboundOrderDetail.OrderQuantity < stockDetail.StockQuantity; |
| | | bool isUnpacked = actualOutboundQuantity < stockDetail.StockQuantity; |
| | | List<MaterialCodeReturnDTO> returnDTOs = new List<MaterialCodeReturnDTO>(); |
| | | string newBarcode = string.Empty; |
| | | // 9. å¼å¯äºå¡ |
| | |
| | | // ç©ææ°æ¡ç åä¼ |
| | | _feedbackMesService.BarcodeFeedback(newBarcode); |
| | | } |
| | | |
| | | _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo); |
| | | List<Dt_OutboundOrderDetail> details = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outboundOrder.Id); |
| | | if(details.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty)) |
| | | { |
| | | _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo); |
| | | outboundOrder.OrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); |
| | | _outboundOrderRepository.UpdateData(outboundOrder); |
| | | } |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent StockTakeGroupPallet(string barcode, string boxNo) |
| | | { |
| | | throw new NotImplementedException(); |
| | | } |
| | | } |
| | | |
| | | } |