| | |
| | | using WIDESEA_BasicService.MESOperation; |
| | | using WIDESEA_Core.Util; |
| | | using WIDESEA_DTO.Allocate; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
| | | using WIDESEA_IRecordService; |
| | | |
| | | namespace WIDESEA_OutboundService |
| | | { |
| | |
| | | private readonly IFeedbackMesService _feedbackMesService; |
| | | private readonly HttpClientHelper _httpClientHelper; |
| | | private readonly IRepository<Dt_MesReturnRecord> _mesReturnRecord; |
| | | private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecordService; |
| | | private readonly IInboundOrderService _inboundOrderService; |
| | | |
| | | private Dictionary<string, string> stations = new Dictionary<string, string> |
| | | { |
| | |
| | | public OutboundPickingService(IRepository<Dt_PickingRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, IStockService stockService, |
| | | IOutStockLockInfoService outStockLockInfoService, IStockInfoDetailService stockInfoDetailService, ILocationInfoService locationInfoService, |
| | | IOutboundOrderDetailService outboundOrderDetailService, ISplitPackageService splitPackageService, IOutboundOrderService outboundOrderService, |
| | | IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog, IInboundService inboundService, IFeedbackMesService feedbackMesService, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord) : base(BaseDal) |
| | | IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog, IInboundService inboundService, IFeedbackMesService feedbackMesService, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord,IStockQuantityChangeRecordService stockQuantityChangeRecordService,IInboundOrderService inboundOrderService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _stockInfoService = stockInfoService; |
| | |
| | | _feedbackMesService = feedbackMesService; |
| | | _httpClientHelper = httpClientHelper; |
| | | _mesReturnRecord = mesReturnRecord; |
| | | _stockQuantityChangeRecordService = stockQuantityChangeRecordService; |
| | | _inboundOrderService = inboundOrderService; |
| | | |
| | | } |
| | | |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°æ»¡è¶³åºåºæ¡ä»¶çåºåºå"); |
| | | } |
| | | if(outboundOrder.IsBatch == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error("è¯¥åæ®ä¸å±äºåæ¹åä¼ åæ®ï¼ä¸å
许èæåºå
¥åº"); |
| | | } |
| | | //å
æ¸
ç©ºåæ®èæåºå
¥åºæ°éè¿è¡è®¡ç® |
| | | foreach (var item in outboundOrder.Details) |
| | | { |
| | |
| | | return WebResponseContent.Instance.OK("æå"); |
| | | |
| | | } |
| | | public WebResponseContent BarcodeValidate(NoStockOutModel noStockOut) |
| | | |
| | | public WebResponseContent BarcodeValidate(NoStockOutModel noStockOut) |
| | | { |
| | | try |
| | | { |
| | | try |
| | | Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>() |
| | | .Where(x => x.UpperOrderNo == noStockOut.inOder && x.OrderStatus != InOrderStatusEnum.å
¥åºå®æ.ObjToInt()) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | if (inboundOrder == null) |
| | | { |
| | | Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == noStockOut.inOder && x.OrderStatus != InOrderStatusEnum.å
¥åºå®æ.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (inboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åï¼{noStockOut.inOder}"); |
| | | } |
| | | Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == noStockOut.outOder && x.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (outboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºåï¼{noStockOut.inOder}"); |
| | | } |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åï¼{noStockOut.inOder}"); |
| | | } |
| | | |
| | | //åå¨å
¥åºåæ®æç»ä¿¡æ¯ |
| | | var detailLists = new List<Dt_InboundOrderDetail>(); |
| | | Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>() |
| | | .Where(x => x.UpperOrderNo == noStockOut.outOder && x.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | if (outboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºåï¼{noStockOut.outOder}"); |
| | | } |
| | | |
| | | var matchedDetail = inboundOrder.Details.FirstOrDefault(detail => |
| | | detail.Barcode == noStockOut.barCode && |
| | | var detailLists = new List<Dt_InboundOrderDetail>(); |
| | | var matchedDetail = inboundOrder.Details.FirstOrDefault(detail => |
| | | detail.Barcode == noStockOut.barCode && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | if (matchedDetail == null) |
| | | { |
| | | matchedDetail = inboundOrder.Details.FirstOrDefault(detail => |
| | | detail.OutBoxbarcodes == noStockOut.barCode && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | if (matchedDetail == null) |
| | | { |
| | | matchedDetail = inboundOrder.Details.FirstOrDefault(detail => |
| | | detail.OutBoxbarcodes == noStockOut.barCode && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | if (matchedDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨éè´å {noStockOut.inOder} 䏿ªæ¾å°æ¡ç 为 {noStockOut.barCode} çæç»ã"); |
| | | } |
| | | else |
| | | { |
| | | |
| | | // æ·»å ææéå®æç¶æçæç»æ¡ç |
| | | foreach (var detail in inboundOrder.Details) |
| | | { |
| | | if (detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && |
| | | !string.IsNullOrEmpty(detail.Barcode)&& detail.OutBoxbarcodes == noStockOut.barCode) |
| | | { |
| | | detailLists.Add(detail); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (!string.IsNullOrEmpty(noStockOut.barCode)) |
| | | { |
| | | detailLists.Add(matchedDetail); |
| | | } |
| | | } |
| | | |
| | | var outDetails = new List<Dt_OutboundOrderDetail>(); |
| | | |
| | | foreach (var item in detailLists) |
| | | { |
| | | item.NoStockOutQty = 0; |
| | | |
| | | var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == item.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()&& detail.OrderQuantity - detail.LockQuantity - detail.MoveQty - detail.NoStockOutQty > 0); |
| | | |
| | | if (matchedCode != null) |
| | | { |
| | | if(matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty - matchedCode.NoStockOutQty < 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç©æ{item.MaterielCode}å¯åºæ°é溢åº{(matchedCode.LockQuantity + matchedCode.MoveQty + matchedCode.NoStockOutQty) - matchedCode.OrderQuantity}"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºåçç©æç¼ç 䏿ªæ¾å°ä¸éè´åä¸ç{item.MaterielCode} 对åºçç©æ"); |
| | | } |
| | | if (!matchedCode.BatchNo.IsNullOrEmpty() && matchedCode.BatchNo != "") |
| | | { |
| | | var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.BatchNo == item.BatchNo); |
| | | if (matcheBatch == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºåçç©æç¼ç 䏿ªæ¾å°ä¸éè´åæ¹æ¬¡ä¸ç{item.BatchNo} 对åºçç©æã"); |
| | | } |
| | | } |
| | | if (!matchedCode.SupplyCode.IsNullOrEmpty() && matchedCode.SupplyCode != "") |
| | | { |
| | | var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.SupplyCode == item.SupplyCode); |
| | | if (matcheBatch == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºåçç©æç¼ç 䏿ªæ¾å°ä¸éè´åä¾åºåä¸ç{item.SupplyCode} 对åºçç©æã"); |
| | | } |
| | | } |
| | | if (!outboundOrder.FactoryArea.IsNullOrEmpty() && outboundOrder.FactoryArea != "" && !inboundOrder.FactoryArea.IsNullOrEmpty() && inboundOrder.FactoryArea != "") |
| | | { |
| | | if (inboundOrder.FactoryArea != outboundOrder.FactoryArea) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¡ç {item.Barcode}对åºçåæ®ååºä¸åºåºåæ®ä¸ä¸è´ï¼ä¸å
许åºåºã"); |
| | | } |
| | | } |
| | | if(inboundOrder.BusinessType != "11") |
| | | { |
| | | if (!matchedCode.WarehouseCode.IsNullOrEmpty() && matchedCode.WarehouseCode != "") |
| | | { |
| | | var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.WarehouseCode == item.WarehouseCode); |
| | | if (matcheBatch == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ä»åºä¸ä¸è´ï¼å¨åºåºåçç©æç¼ç 䏿ªæ¾å°ä¸éè´åä»åºä¸ç{item.WarehouseCode} 对åºçç©æã"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //å©ä½å
¥åºæ°éå³èæåºå
¥åºå©ä½å¯åºæ°é |
| | | decimal outQuantity = item.OrderQuantity - item.ReceiptQuantity; |
| | | if (outQuantity == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åä¸çæ¡ç 对åºçå¯åºæ°é为0"); |
| | | } |
| | | if (matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty - matchedCode.NoStockOutQty < outQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åä¸çæ¡ç 对åºçå¯åºæ°éè¶
åºåºåºååºåºæ°é{item.OrderQuantity - (matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty)},䏿»¡è¶³æ´å
åºåº"); |
| | | } |
| | | //åæ®åºåºé宿°é |
| | | item.NoStockOutQty += outQuantity; |
| | | matchedCode.NoStockOutQty += outQuantity; |
| | | |
| | | //åä¼ MESåæ° |
| | | List<Barcodes> barcodesList = new List<Barcodes>(); |
| | | Barcodes barcodes = new Barcodes |
| | | { |
| | | Barcode = item.Barcode, |
| | | Qty = item.BarcodeQty, |
| | | SupplyCode = item?.SupplyCode ?? "", |
| | | BatchNo = item?.BatchNo ?? "", |
| | | Unit = item?.Unit ?? "" |
| | | }; |
| | | if (!string.IsNullOrEmpty(matchedCode.documentsNO)) |
| | | { |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(matchedCode.documentsNO) ?? new List<Barcodes>(); |
| | | } |
| | | barcodesList.Add(barcodes); |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | matchedCode.documentsNO = JsonConvert.SerializeObject(barcodesList, settings); |
| | | |
| | | |
| | | if ((matchedCode.LockQuantity + matchedCode.NoStockOutQty+matchedCode.MoveQty) > matchedCode.OrderQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåæç»æ°é溢åº{matchedCode.OrderQuantity - matchedCode.LockQuantity-matchedCode.NoStockOutQty-matchedCode.MoveQty}"); |
| | | } |
| | | item.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt(); |
| | | |
| | | outDetails.Add(matchedCode); |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderDetailService.UpdateData(detailLists); |
| | | _outboundOrderDetailService.UpdateData(outDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æå",data:detailLists); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public WebResponseContent DeleteBarcode(NoStockOutModel noStockOut) |
| | | { |
| | | try |
| | | { |
| | | Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == noStockOut.inOder && x.OrderStatus != InOrderStatusEnum.å
¥åºå®æ.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (inboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åï¼{noStockOut.inOder}"); |
| | | } |
| | | var matchedDetail = inboundOrder.Details.FirstOrDefault(detail => detail.Barcode == noStockOut.barCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | if (matchedDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨éè´å {noStockOut.inOder} 䏿ªæ¾å°æ¡ç 为 {noStockOut.barCode} çæç»ã"); |
| | | } |
| | | matchedDetail.NoStockOutQty = 0; |
| | | |
| | | if (matchedDetail.ReceiptQuantity == 0 && matchedDetail.OverInQuantity == 0) |
| | | else |
| | | { |
| | | matchedDetail.OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(); |
| | | // æ·»å ææå¹é
å¤ç®±ç ä¸éå®æç¶æçæç» |
| | | foreach (var detail in inboundOrder.Details) |
| | | { |
| | | if (detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && |
| | | !string.IsNullOrEmpty(detail.Barcode) && |
| | | detail.OutBoxbarcodes == noStockOut.barCode) |
| | | { |
| | | detailLists.Add(detail); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (!string.IsNullOrEmpty(noStockOut.barCode)) |
| | | { |
| | | detailLists.Add(matchedDetail); |
| | | } |
| | | } |
| | | var outDetails = new List<Dt_OutboundOrderDetail>(); |
| | | // éåæ¯ä¸ªå
¥åºæç» |
| | | foreach (var item in detailLists) |
| | | { |
| | | // éç½®å½åå
¥åºæç»çæ åºååºåºæ°é |
| | | item.NoStockOutQty = 0; |
| | | |
| | | // å½åæ¡ç éè¦åºåºçæ»æ°éï¼å
¥åºåå©ä½å¯åºæ°éï¼ |
| | | decimal remainingBarcodeQty = item.OrderQuantity - item.ReceiptQuantity; |
| | | if (remainingBarcodeQty <= 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åä¸çæ¡ç {item.Barcode}对åºçå¯åºæ°é为0"); |
| | | } |
| | | |
| | | // çéåºåºåä¸ç¬¦åæ¡ä»¶çæç»ï¼åç©æãé宿ãæå©ä½å¯åºæ°éï¼ |
| | | var eligibleOutDetails = outboundOrder.Details.Where(detail => |
| | | detail.MaterielCode == item.MaterielCode && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && |
| | | (detail.OrderQuantity - detail.LockQuantity - detail.MoveQty - detail.NoStockOutQty) > 0).ToList(); |
| | | |
| | | if (!eligibleOutDetails.Any()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºå䏿ªæ¾å°ç©æ{item.MaterielCode}çå¯åºåºæç»"); |
| | | } |
| | | |
| | | // éåç¬¦åæ¡ä»¶çåºåºæç»ï¼éè¡åé
æ°é |
| | | foreach (var outDetail in eligibleOutDetails) |
| | | { |
| | | // 计ç®å½ååºåºè¡çå©ä½å¯åºæ°é |
| | | decimal rowRemainingQty = outDetail.OrderQuantity - outDetail.LockQuantity - outDetail.MoveQty - outDetail.NoStockOutQty; |
| | | if (rowRemainingQty <= 0) continue; |
| | | |
| | | if (!outDetail.BatchNo.IsNullOrEmpty()) |
| | | { |
| | | if (outDetail.BatchNo != item.BatchNo) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåè¡æ¹æ¬¡{outDetail.BatchNo}ä¸éè´åæ¹æ¬¡{item.BatchNo}ä¸å¹é
"); |
| | | } |
| | | } |
| | | if (!outDetail.SupplyCode.IsNullOrEmpty()) |
| | | { |
| | | if (outDetail.SupplyCode != item.SupplyCode) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåè¡ä¾åºå{outDetail.SupplyCode}ä¸éè´åä¾åºå{item.SupplyCode}ä¸å¹é
"); |
| | | } |
| | | } |
| | | if (!string.IsNullOrEmpty(outboundOrder.FactoryArea) && !string.IsNullOrEmpty(inboundOrder.FactoryArea)) |
| | | { |
| | | if (inboundOrder.FactoryArea != outboundOrder.FactoryArea) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¡ç {item.Barcode}对åºçåæ®ååºä¸åºåºåæ®ä¸ä¸è´ï¼ä¸å
许åºåºã"); |
| | | } |
| | | } |
| | | if (inboundOrder.BusinessType != "11" && !outDetail.WarehouseCode.IsNullOrEmpty()) |
| | | { |
| | | if (outDetail.WarehouseCode != item.WarehouseCode) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ä»åºä¸ä¸è´ï¼åºåºåè¡ä»åº{outDetail.WarehouseCode}ä¸éè´åä»åº{item.WarehouseCode}ä¸å¹é
"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.WarehouseCode = outDetail.WarehouseCode; |
| | | } |
| | | |
| | | // è®¡ç®æ¬æ¬¡åé
çæ°éï¼åå©ä½æ¡ç æ°éåå½åè¡å©ä½æ°éçè¾å°å¼ï¼ |
| | | decimal assignQty = Math.Min(remainingBarcodeQty, rowRemainingQty); |
| | | |
| | | // æ´æ°å
¥åºæç»ååºåºæç»çæ åºååºåºæ°é |
| | | item.NoStockOutQty += assignQty; |
| | | outDetail.NoStockOutQty += assignQty; |
| | | |
| | | // æ´æ°å©ä½éè¦åé
çæ¡ç æ°é |
| | | remainingBarcodeQty -= assignQty; |
| | | |
| | | // è®°å½å·²æ´æ°çåºåºæç»ï¼å»éï¼ |
| | | if (!outDetails.Contains(outDetail)) |
| | | { |
| | | outDetails.Add(outDetail); |
| | | } |
| | | |
| | | // éªè¯å½åè¡æ¯å¦æº¢åº |
| | | if ((outDetail.LockQuantity + outDetail.NoStockOutQty + outDetail.MoveQty) > outDetail.OrderQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåæç»{outDetail.Id}æ°é溢åºï¼è¶
åºæ°éï¼{(outDetail.LockQuantity + outDetail.NoStockOutQty + outDetail.MoveQty) - outDetail.OrderQuantity}"); |
| | | } |
| | | |
| | | // å¤çMESåæ°åä¼ ï¼è®°å½å½åæ¡ç åé
å°è¯¥è¡çå®é
æ°é |
| | | List<Barcodes> barcodesList = new List<Barcodes>(); |
| | | Barcodes barcodes = new Barcodes |
| | | { |
| | | Barcode = item.Barcode, |
| | | Qty = assignQty, |
| | | SupplyCode = item?.SupplyCode ?? "", |
| | | BatchNo = item?.BatchNo ?? "", |
| | | Unit = item?.Unit ?? "" |
| | | }; |
| | | // ååºåå该è¡å·²æçæ¡ç è®°å½ |
| | | if (!string.IsNullOrEmpty(outDetail.documentsNO)) |
| | | { |
| | | try |
| | | { |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(outDetail.documentsNO) ?? new List<Barcodes>(); |
| | | } |
| | | catch (JsonException ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåæç»{outDetail.Id}çdocumentsNOåæ®µæ ¼å¼é误ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | // æ·»å æ¬æ¬¡åé
çè®°å½ |
| | | barcodesList.Add(barcodes); |
| | | // åºåååå |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | outDetail.documentsNO = JsonConvert.SerializeObject(barcodesList, settings); |
| | | |
| | | // æ¡ç æ°éåé
宿¯ï¼éåºå½åè¡å¾ªç¯ |
| | | if (remainingBarcodeQty <= 0) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // ææç¬¦åæ¡ä»¶çåºåºè¡éåå®åï¼æ¡ç æ°é仿å©ä½ |
| | | if (remainingBarcodeQty > 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¡ç {item.Barcode}éåºåºæ°é{item.OrderQuantity - item.ReceiptQuantity}ï¼ä½åºåºåä¸ç©æ{item.MaterielCode}å©ä½å¯åºæ»éä¸è¶³ï¼ä»å©ä½{remainingBarcodeQty}æ°éæªåé
"); |
| | | } |
| | | } |
| | | |
| | | Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == noStockOut.outOder && x.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (outboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºåï¼{noStockOut.inOder}"); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderDetailService.UpdateData(detailLists); |
| | | _outboundOrderDetailService.UpdateData(outDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | // æ¤éåä¼ MESåæ° |
| | | return WebResponseContent.Instance.OK("æå", data: detailLists); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public WebResponseContent DeleteBarcode(NoStockOutModel noStockOut) |
| | | { |
| | | try |
| | | { |
| | | Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>() |
| | | .Where(x => x.UpperOrderNo == noStockOut.inOder && x.OrderStatus != InOrderStatusEnum.å
¥åºå®æ.ObjToInt()) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | if (inboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åï¼{noStockOut.inOder}"); |
| | | } |
| | | |
| | | var matchedDetail = inboundOrder.Details.FirstOrDefault(detail => |
| | | detail.Barcode == noStockOut.barCode && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | if (matchedDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨éè´å {noStockOut.inOder} 䏿ªæ¾å°æ¡ç 为 {noStockOut.barCode} çæç»ã"); |
| | | } |
| | | |
| | | // éç½®å
¥åºæç»çæ åºååºåºæ°é |
| | | decimal revokedTotalQty = matchedDetail.NoStockOutQty; // è®°å½éè¦æ¤éçæ»æ°éï¼å
¥åºåä¸å·²åé
çæ°éï¼ |
| | | matchedDetail.NoStockOutQty = 0; |
| | | if(inboundOrder.BusinessType == "11") |
| | | { |
| | | matchedDetail.WarehouseCode =""; |
| | | } |
| | | |
| | | // éç½®å
¥åºæç»ç¶æ |
| | | if (matchedDetail.ReceiptQuantity == 0 && matchedDetail.OverInQuantity == 0) |
| | | { |
| | | matchedDetail.OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(); |
| | | } |
| | | |
| | | Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>() |
| | | .Where(x => x.UpperOrderNo == noStockOut.outOder && x.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | if (outboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºåï¼{noStockOut.outOder}"); |
| | | } |
| | | |
| | | // æ¾å°ææå
³è该æ¡ç çåºåºæç»è¡ |
| | | // åç©æãéå®æç¶æãdocumentsNOå
å«è¯¥æ¡ç |
| | | var matchedCodeList = outboundOrder.Details.Where(detail => |
| | | detail.MaterielCode == matchedDetail.MaterielCode && // ç¡®ä¿ç©æå¹é
|
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && |
| | | !string.IsNullOrEmpty(detail.documentsNO) && |
| | | detail.documentsNO.Contains(noStockOut.barCode) // å
å«å½åæ¡ç |
| | | ).ToList(); |
| | | |
| | | if (!matchedCodeList.Any()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºå䏿ªæ¾å°å
³èæ¡ç {noStockOut.barCode}çç©æ{matchedDetail.MaterielCode}æç»ã"); |
| | | } |
| | | |
| | | //éè¡å¤çåºåºæç»çæ¤éé»è¾ |
| | | decimal remainingRevokeQty = revokedTotalQty; // å©ä½éè¦æ¤éçæ°é |
| | | foreach (var matchedCode in matchedCodeList) |
| | | { |
| | | if (remainingRevokeQty <= 0) break; // æææ°éå·²æ¤éï¼éåºå¾ªç¯ |
| | | |
| | | // å¤çMESåæ°æ¤é |
| | | List<Barcodes> barcodesList = new List<Barcodes>(); |
| | | Barcodes barcodes = new Barcodes |
| | | { |
| | | Barcode = matchedDetail.Barcode, |
| | | Qty = matchedDetail.BarcodeQty, |
| | | SupplyCode = matchedDetail?.SupplyCode ?? "", |
| | | BatchNo = matchedDetail?.BatchNo ?? "", |
| | | Unit = matchedDetail?.Unit ?? "" |
| | | }; |
| | | var matchedCode = outboundOrder.Details.FirstOrDefault(detail => |
| | | detail.documentsNO.Contains(barcodes.Barcode) && |
| | | detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() |
| | | ); |
| | | |
| | | if (matchedCode == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å¨åºåºåçç©æç¼ç 䏿ªæ¾å°ä¸éè´åä¸ç{matchedDetail.MaterielCode} 对åºçç©æã"); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(matchedCode.documentsNO)) |
| | | { |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(matchedCode.documentsNO) ?? new List<Barcodes>(); |
| | | try |
| | | { |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(matchedCode.documentsNO) ?? new List<Barcodes>(); |
| | | } |
| | | catch (JsonException ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåæç»{matchedCode.Id}çdocumentsNOåæ®µæ ¼å¼é误ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | barcodesList.RemoveAll(b => |
| | | string.Equals(b.Barcode, barcodes.Barcode, StringComparison.OrdinalIgnoreCase) |
| | | ); |
| | | |
| | | // çéåºå½åæ¡ç çææè®°å½ |
| | | var barcodeRecords = barcodesList.Where(b => |
| | | string.Equals(b.Barcode, noStockOut.barCode, StringComparison.OrdinalIgnoreCase)).ToList(); |
| | | if (!barcodeRecords.Any()) continue; |
| | | |
| | | // 计ç®è¯¥è¡éè¦æ¤éçæ°éï¼ç´¯å 该æ¡ç å¨è¯¥è¡çææåé
æ°éï¼ |
| | | decimal rowRevokeQty = barcodeRecords.Sum(b => b.Qty); |
| | | // å®é
æ¤éæ°éï¼å该è¡å¯æ¤éæ°éåå©ä½éè¦æ¤éæ°éçè¾å°å¼ |
| | | decimal actualRevokeQty = Math.Min(rowRevokeQty, remainingRevokeQty); |
| | | |
| | | // ç§»é¤è¯¥è¡ä¸è¯¥æ¡ç çè®°å½ï¼æé¨åè®°å½ï¼è¥å©ä½æ¤éæ°éä¸è¶³ï¼ |
| | | if (actualRevokeQty < rowRevokeQty) |
| | | { |
| | | // å©ä½æ¤éæ°éä¸è¶³ï¼åªç§»é¤é¨åè®°å½ï¼ææ°éæ£åï¼ |
| | | decimal tempQty = actualRevokeQty; |
| | | var removeList = new List<Barcodes>(); |
| | | foreach (var record in barcodeRecords) |
| | | { |
| | | if (tempQty <= 0) break; |
| | | if (record.Qty <= tempQty) |
| | | { |
| | | removeList.Add(record); |
| | | tempQty -= record.Qty; |
| | | } |
| | | else |
| | | { |
| | | // è®°å½æ°éæåï¼æ£åé¨åæ°é |
| | | record.Qty -= tempQty; |
| | | tempQty = 0; |
| | | } |
| | | } |
| | | barcodesList.RemoveAll(b => removeList.Contains(b)); |
| | | } |
| | | else |
| | | { |
| | | // ç§»é¤è¯¥è¡ä¸è¯¥æ¡ç çææè®°å½ |
| | | barcodesList.RemoveAll(b => |
| | | string.Equals(b.Barcode, noStockOut.barCode, StringComparison.OrdinalIgnoreCase)); |
| | | } |
| | | |
| | | //éæ°åºååMESåæ° |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | matchedCode.documentsNO = JsonConvert.SerializeObject(barcodesList, settings); |
| | | |
| | | matchedCode.NoStockOutQty -= matchedDetail.OrderQuantity; |
| | | //æ£ååºåºæç»çæ åºååºåºæ°é |
| | | matchedCode.NoStockOutQty = Math.Max(0, matchedCode.NoStockOutQty - actualRevokeQty); |
| | | remainingRevokeQty -= actualRevokeQty; |
| | | |
| | | //éç½®åºåºæç»ç¶æ |
| | | if (matchedCode.LockQuantity == 0 && matchedCode.OverOutQuantity == 0) |
| | | { |
| | | matchedCode.OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderDetailService.UpdateData(matchedDetail); |
| | | _outboundOrderDetailService.UpdateData(matchedCode); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | |
| | | //è¥ä»ææªæ¤éçæ°éï¼è¯´ææ°æ®ä¸ä¸è´ |
| | | if (remainingRevokeQty > 0) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | return WebResponseContent.Instance.Error($"æ¤éæ¡ç {noStockOut.barCode}æ¶ï¼åºåºåä¸å¯æ¤éæ°éä¸è¶³ï¼ä»æ{remainingRevokeQty}æ°éæªæ¤é"); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> NoStockOutSubmit(NoStockOutSubmit noStockOutSubmit) |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderDetailService.UpdateData(matchedDetail); |
| | | _outboundOrderDetailService.UpdateData(matchedCodeList); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | return WebResponseContent.Instance.OK("æ¡ç æ¤éæå", data: new { RevokedQty = revokedTotalQty }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public async Task<WebResponseContent> NoStockOutSubmit(NoStockOutSubmit noStockOutSubmit) |
| | | { |
| | | try |
| | | { |
| | |
| | | |
| | | Dictionary<int, Dt_InboundOrder> updateInboundOrders = new Dictionary<int, Dt_InboundOrder>(); |
| | | |
| | | List<Dt_StockQuantityChangeRecord> changeRecords = new List<Dt_StockQuantityChangeRecord>(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | List<Dt_InboundOrderDetail> allInboundDetails = _inboundOrderDetailService.Db |
| | | .Queryable<Dt_InboundOrderDetail>() |
| | | .Where(detail => noStockOutSubmit.BarCodeSubmit.Contains(detail.Barcode) |
| | | && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) |
| | | .ToList(); |
| | | .Queryable<Dt_InboundOrderDetail>() |
| | | .Where(detail => noStockOutSubmit.BarCodeSubmit.Contains(detail.Barcode) |
| | | && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) |
| | | .ToList(); |
| | | |
| | | var detailGroupByOrderId = allInboundDetails.GroupBy(d => d.OrderId).ToList(); |
| | | foreach (var group in detailGroupByOrderId) |
| | |
| | | List<Dt_InboundOrderDetail> groupDetails = group.ToList(); |
| | | List<string> groupBarCodes = groupDetails.Select(d => d.Barcode).ToList(); |
| | | |
| | | |
| | | orderIdBarCodeDict[orderId] = groupBarCodes; |
| | | |
| | | Dt_InboundOrder currentInboundOrder = null; |
| | | if (!updateInboundOrders.TryGetValue(orderId, out currentInboundOrder)) |
| | | { |
| | | currentInboundOrder = _inboundOrderRepository.Db |
| | | .Queryable<Dt_InboundOrder>() |
| | | .Where(x => x.Id == orderId) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | |
| | | if (currentInboundOrder == null) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å
¥åºåID为 {orderId} çåæ®"); |
| | | } |
| | | updateInboundOrders[orderId] = currentInboundOrder; |
| | | } |
| | | |
| | | foreach (var detail in groupDetails) |
| | | { |
| | |
| | | detail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | } |
| | | updateInboundDetails.Add(detail); |
| | | } |
| | | |
| | | if (!updateInboundOrders.ContainsKey(orderId)) |
| | | { |
| | | Dt_InboundOrder inboundOrder = _inboundOrderRepository.Db |
| | | .Queryable<Dt_InboundOrder>() |
| | | .Where(x => x.Id == orderId) |
| | | .Includes(x => x.Details) |
| | | .First(); |
| | | |
| | | if (inboundOrder == null) |
| | | //æ·»å åºååå¨è®°å½ |
| | | Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å
¥åºåID为 {orderId} çåæ®"); |
| | | } |
| | | |
| | | // 夿æ´åæ¯å¦å
¨é¨å®æ |
| | | int totalDetailCount = inboundOrder.Details.Count(); |
| | | int beforeDetailCount = inboundOrder.Details.Where(x => x.OrderId == orderId && x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) |
| | | .Count(); |
| | | int finishedDetailCount = updateInboundDetails |
| | | .Where(x => x.OrderId == orderId && x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) |
| | | .Count(); |
| | | |
| | | inboundOrder.OrderStatus = totalDetailCount == finishedDetailCount+beforeDetailCount |
| | | ? InOrderStatusEnum.å
¥åºå®æ.ObjToInt() |
| | | : InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | |
| | | updateInboundOrders[orderId] = inboundOrder; |
| | | StockDetailId = detail.Id, |
| | | PalleCode = DateTime.Now.ToString(), |
| | | MaterielCode = detail.MaterielCode, |
| | | MaterielName = detail.MaterielName ?? "", |
| | | BatchNo = detail.BatchNo ?? "", |
| | | OriginalSerilNumber = detail.Barcode, |
| | | NewSerilNumber = "", |
| | | OrderNo = currentInboundOrder.InboundOrderNo, |
| | | TaskNum = 0, |
| | | ChangeType = (int)StockChangeTypeEnum.Inbound, |
| | | ChangeQuantity = detail.NoStockOutQty, |
| | | BeforeQuantity = detail.OverInQuantity - detail.NoStockOutQty, |
| | | AfterQuantity = detail.OverInQuantity, |
| | | SupplyCode = detail.SupplyCode ?? "", |
| | | WarehouseCode = detail.WarehouseCode ?? "", |
| | | Remark = $"èæå
¥åº" |
| | | }; |
| | | changeRecords.Add(changeRecord); |
| | | } |
| | | |
| | | var inboundOrder = updateInboundOrders[orderId]; |
| | | int totalDetailCount = inboundOrder.Details.Count; |
| | | |
| | | int finishedDetailCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) |
| | | + groupDetails.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()); |
| | | |
| | | inboundOrder.OrderStatus = totalDetailCount == finishedDetailCount |
| | | ? InOrderStatusEnum.å
¥åºå®æ.ObjToInt() |
| | | : InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | } |
| | | |
| | | // 6. æ¹éæ´æ°æç»å主åï¼æ¹éæä½æåæ§è½ï¼ |
| | | if (updateInboundDetails.Any()) |
| | | { |
| | | foreach (var detail in updateInboundDetails) |
| | | { |
| | | _inboundOrderDetailService.UpdateData(detail); |
| | | } |
| | | |
| | | _inboundOrderDetailService.Db.Updateable(updateInboundDetails).ExecuteCommand(); |
| | | } |
| | | if (updateInboundOrders.Any()) |
| | | { |
| | | foreach (var order in updateInboundOrders.Values) |
| | | { |
| | | _inboundOrderRepository.UpdateData(order); |
| | | } |
| | | // æ¹éæ´æ°å
¥åºä¸»å |
| | | _inboundOrderService.Db.Updateable(updateInboundOrders.Values.ToList()).ExecuteCommand(); |
| | | } |
| | | |
| | | // 7. 循ç¯åç»ç»æï¼è°ç¨MESåä¼ æ¹æ³ï¼æå
¥åºååç»åä¼ ï¼ |
| | |
| | | List<string> barCodeList = kvp.Value; |
| | | //å
¥åºåä¼ MES |
| | | NoStockOutBatchInOrderFeedbackToMes(orderId, barCodeList); |
| | | |
| | | } |
| | | |
| | | //åªå¯¹åºåºæ¡ç çåºåºåæç»è¿è¡è®¡ç®åä¼ |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetail = outboundOrder.Details |
| | | .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO) |
| | | && noStockOutSubmit.BarCodeSubmit.Any(barcode => |
| | | x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0)) |
| | | .ToList(); |
| | | .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO) |
| | | && noStockOutSubmit.BarCodeSubmit.Any(barcode => |
| | | x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0)) |
| | | .ToList(); |
| | | |
| | | foreach (var item in outboundOrderDetail) |
| | | { |
| | | item.LockQuantity = item.NoStockOutQty; |
| | | item.OverOutQuantity = item.NoStockOutQty; |
| | | item.CurrentDeliveryQty = item.OverOutQuantity; |
| | | item.LockQuantity += item.NoStockOutQty; |
| | | item.OverOutQuantity += item.NoStockOutQty; |
| | | item.CurrentDeliveryQty += item.NoStockOutQty; |
| | | //æ·»å åä¼ MESåæ° |
| | | List<Barcodes> barcodesList = new List<Barcodes>(); |
| | | List<Barcodes> documentsNOList = new List<Barcodes>(); |
| | | if (!string.IsNullOrEmpty(item.ReturnJsonData)) |
| | | { |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(item.documentsNO) ?? new List<Barcodes>(); |
| | | barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(item.ReturnJsonData) ?? new List<Barcodes>(); |
| | | } |
| | | if (!string.IsNullOrEmpty(item.documentsNO) && item.documentsNO!="") |
| | | { |
| | |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | item.ReturnJsonData = JsonConvert.SerializeObject(barcodesList, settings); |
| | | |
| | | //æ·»å åºååå¨è®°å½ |
| | | Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord |
| | | { |
| | | StockDetailId = item.Id, |
| | | PalleCode = DateTime.Now.ToString(), |
| | | MaterielCode = item.MaterielCode, |
| | | MaterielName = item.MaterielName ?? "", |
| | | BatchNo = item.BatchNo ?? "", |
| | | OriginalSerilNumber = item.ReturnJsonData, |
| | | NewSerilNumber = "", |
| | | OrderNo = outboundOrder.OrderNo, |
| | | TaskNum = 0, |
| | | ChangeType = (int)StockChangeTypeEnum.Inbound, |
| | | ChangeQuantity = -item.NoStockOutQty, |
| | | BeforeQuantity = item.OrderQuantity, |
| | | AfterQuantity = item.OrderQuantity - item.OverOutQuantity, |
| | | SupplyCode = item.SupplyCode ?? "", |
| | | WarehouseCode = item.WarehouseCode ?? "", |
| | | Remark = $"èæåºåº" |
| | | }; |
| | | changeRecords.Add(changeRecord); |
| | | outboundOrderDetails.Add(item); |
| | | } |
| | | |
| | | _outboundOrderDetailService.UpdateData(outboundOrderDetails); |
| | | |
| | | //æ¹éæ·»å åºååå¨è®°å½ |
| | | if (changeRecords.Any()) |
| | | { |
| | | _stockQuantityChangeRecordService.Db.Insertable(changeRecords).ExecuteCommand(); |
| | | } |
| | | // æ£æ¥åºåºåæ¯å¦å®æ |
| | | if (CheckOutboundOrderCompleted(outboundOrder.OrderNo)) |
| | | { |
| | | outboundOrder.OrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); |
| | | _outboundOrderService.UpdateData(outboundOrder); |
| | | |
| | | } |
| | | else |
| | | { |
| | | outboundOrder.OrderStatus = OutOrderStatusEnum.åºåºä¸.ObjToInt(); |
| | | } |
| | | _outboundOrderService.UpdateData(outboundOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //åºåºåä¼ MES |
| | | _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo); |
| | |
| | | if (response != null && response.IsSuccess) |
| | | { |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) |
| | | .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); |
| | | .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand(); |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 }) |
| | | .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }) |
| | | .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); |
| | | .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand(); |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus =2}) |
| | | .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); |
| | | return content.Error("åä¼ MES失败"); |
| | | } |
| | | } |
| | |
| | | if (response != null && response.IsSuccess) |
| | | { |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) |
| | | .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); |
| | | .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand(); |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 }) |
| | | .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }).Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }).Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand(); |
| | | _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 }) |
| | | .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); |
| | | return content.Error("åä¼ MES失败"); |
| | |
| | | }).ToList(); |
| | | return groupedData; |
| | | } |
| | | public List<FeedbackInboundDetailsModel> NoStockOutFeedbackInboundDetailsModelDto(List<Dt_InboundOrderDetail> inboundOrderDetails) |
| | | public List<FeedbackInboundDetailsModel> NoStockOutFeedbackInboundDetailsModelDto(List<Dt_InboundOrderDetail> inboundOrderDetails ) |
| | | { |
| | | var groupedData = inboundOrderDetails.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode }) |
| | | .Select(group => new FeedbackInboundDetailsModel |