| | |
| | | public readonly IRepository<Dt_InboundOrder> _inboundOrderRepository; |
| | | public readonly IRepository<Dt_WarehouseArea> _warehouseAreaRepository; |
| | | public readonly IRepository<Dt_LocationType> _locationTypeRepository; |
| | | public readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository; |
| | | |
| | | private Dictionary<string, string> stations = new Dictionary<string, string> |
| | | { |
| | |
| | | {"3-1","3-5" }, |
| | | }; |
| | | |
| | | public OutboundService(IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IFeedbackMesService feedbackMesService, IRepository<Dt_Task> taskRepository, ILocationInfoService locationInfoService, IESSApiService eSSApiService, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository) |
| | | public OutboundService(IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IFeedbackMesService feedbackMesService, IRepository<Dt_Task> taskRepository, ILocationInfoService locationInfoService, IESSApiService eSSApiService, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | |
| | | _inboundOrderRepository = inboundOrderRepository; |
| | | _locationTypeRepository = locationTypeRepository; |
| | | _warehouseAreaRepository = warehouseAreaRepository; |
| | | _outboundOrderDetailRepository = outboundOrderDetailRepository; |
| | | } |
| | | |
| | | public WebResponseContent PrintFromData (string barcode) |
| | |
| | | foreach (var detail in materielCalc.Details) |
| | | { |
| | | if (remainingToLock <= 0) break; |
| | | decimal maxLockableQty = detail.OrderQuantity - detail.OverOutQuantity; |
| | | decimal maxLockableQty = 0; |
| | | if (detail.LockQuantity > detail.OverOutQuantity && detail.OverOutQuantity > 0) |
| | | { |
| | | maxLockableQty = detail.OrderQuantity - detail.LockQuantity; |
| | | } |
| | | else if(detail.OverOutQuantity > 0) |
| | | { |
| | | maxLockableQty = detail.OrderQuantity - detail.OverOutQuantity; |
| | | } |
| | | else |
| | | { |
| | | maxLockableQty = detail.OrderQuantity - detail.OverOutQuantity - detail.LockQuantity; |
| | | } |
| | | if (maxLockableQty <= 0) continue; |
| | | decimal currentLockQty = Math.Min(remainingToLock, maxLockableQty); |
| | | detail.LockQuantity += currentLockQty; |
| | |
| | | |
| | | Func<Dt_OutStockLockInfo, bool> wareWhere = x => string.IsNullOrEmpty(outboundOrderDetails.First().WarehouseCode) ? true : x.WarehouseCode == outboundOrderDetails.First().WarehouseCode; |
| | | |
| | | List<Dt_OutStockLockInfo> stockLockInfos = _outboundLockInfoRepository.QueryData(x => |
| | | x.OrderNo == request.OrderNo && |
| | | x.MaterielCode == stockInfoDetail.MaterielCode).Where(supWhere).Where(wareWhere).ToList(); |
| | | var stockLockInfos = _outboundLockInfoRepository.QueryData(x => |
| | | x.OrderDetailIds == lockInfo.OrderDetailIds && |
| | | x.OrderNo == request.OrderNo && |
| | | x.MaterielCode == stockInfoDetail.MaterielCode) |
| | | .Where(supWhere) |
| | | .Where(wareWhere) |
| | | .ToList(); |
| | | if (stockLockInfos != null && stockLockInfos.Any()) |
| | | { |
| | | _outboundLockInfoRepository.DeleteAndMoveIntoHty(stockLockInfos, WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å é¤); |
| | | } |
| | | |
| | | outboundOrderDetails.FirstOrDefault().OrderDetailStatus = (int)OrderDetailStatusEnum.Over; |
| | | _detailRepository.UpdateData(outboundOrderDetails); |
| | | } |
| | | |
| | | // æ£æ¥åºåºåæ¯å¦å®æ |
| | |
| | | |
| | | Func<Dt_OutStockLockInfo, bool> wareWhere = x => string.IsNullOrEmpty(outboundOrderDetails.First().WarehouseCode) ? true : x.WarehouseCode == outboundOrderDetails.First().WarehouseCode; |
| | | |
| | | List<Dt_OutStockLockInfo> stockLockInfos = _outboundLockInfoRepository.QueryData(x => |
| | | x.OrderNo == request.OrderNo && |
| | | x.MaterielCode == stockDetail.MaterielCode).Where(supWhere).Where(wareWhere).ToList(); |
| | | var stockLockInfos = _outboundLockInfoRepository.QueryData(x => |
| | | x.OrderDetailIds == lockInfo.OrderDetailIds && |
| | | x.OrderNo == request.OrderNo && |
| | | x.MaterielCode == stockDetail.MaterielCode) |
| | | .Where(supWhere) |
| | | .Where(wareWhere) |
| | | .ToList(); |
| | | if (stockLockInfos != null && stockLockInfos.Any()) |
| | | { |
| | | _outboundLockInfoRepository.DeleteAndMoveIntoHty(stockLockInfos, WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å é¤); |
| | |
| | | // æ£æ¥åºåºåæ¯å¦å®æ |
| | | if (CheckOutboundOrderCompleted(request.OrderNo)) |
| | | { |
| | | UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.åºåºå®æ.ObjToInt()); |
| | | |
| | | if (outboundOrder.CreateType!=OrderCreateTypeEnum.CreateInSystem.ObjToInt()) |
| | | if(outboundOrder.OrderType != OutOrderTypeEnum.InternalAllocat.ObjToInt()) |
| | | { |
| | | _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo); |
| | | UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.åºåºå®æ.ObjToInt()); |
| | | |
| | | if (outboundOrder.CreateType != OrderCreateTypeEnum.CreateInSystem.ObjToInt()) |
| | | { |
| | | _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | OperateType = "åºåºå®æ", |
| | | InsertTime = DateTime.Now, |
| | | StockId = stockDetail.StockId, |
| | | Barcode = stockDetail.Barcode, |
| | | MaterielCode = stockDetail.MaterielCode, |
| | | MaterielName = stockDetail.MaterielName, |
| | | OrderNo = stockDetail.OrderNo, |
| | |
| | | Creater = stockDetail.Creater, |
| | | CreateDate = stockDetail.CreateDate, |
| | | WarehouseCode = stockDetail.WarehouseCode, |
| | | ValidDate = stockDetail.ValidDate, |
| | | Remark = $"åºåºå®æå é¤ï¼æ¡ç ï¼{request.Barcode}ï¼åæ°éï¼{stockDetail.StockQuantity}ï¼åºåºæ°éï¼{actualOutboundQuantity}ï¼æä½è
ï¼{request.Operator}" |
| | | }; |
| | | _stockDetailHistoryRepository.AddData(historyRecord); |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region æ¤éæ£é |
| | | /// <summary> |
| | | /// æ¤éæ£éæ¡ç ï¼åååæ»åºåºæ£éæä½ï¼ |
| | | /// </summary> |
| | | /// <param name="request">æ¤éæ£é请æ±ï¼è³å°å
嫿¡ç ã订åå·ãæçå·ï¼</param> |
| | | /// <returns>æ¤éååº</returns> |
| | | public WebResponseContent ReversePicking(ReversePickingRequestDTO request) |
| | | { |
| | | WebResponseContent content = WebResponseContent.Instance; |
| | | ReversePickingResponseDTO response = new ReversePickingResponseDTO(); |
| | | |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(request.Barcode) || string.IsNullOrWhiteSpace(request.OrderNo) || string.IsNullOrWhiteSpace(request.PalletCode)) |
| | | { |
| | | response.Success = false; |
| | | response.Message = "æ¡ç ã订åå·ãæçå·ä¸è½ä¸ºç©º"; |
| | | return WebResponseContent.Instance.Error(response.Message); |
| | | } |
| | | |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.QueryFirst(x => x.PalletCode == request.PalletCode); |
| | | if (stockInfo == null) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"æçå· {request.PalletCode} 对åºçåºåä¸åå¨"; |
| | | return WebResponseContent.Instance.Error(response.Message); |
| | | } |
| | | |
| | | Dt_OutboundOrder outboundOrder = _outboundRepository.QueryFirst(o => o.OrderNo == request.OrderNo); |
| | | if (outboundOrder == null) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"åºåºå {request.OrderNo} ä¸åå¨"; |
| | | return WebResponseContent.Instance.Error(response.Message); |
| | | } |
| | | |
| | | Dt_StockInfoDetail_Hty historyDetail = _stockDetailHistoryRepository.QueryFirst(x => |
| | | x.Barcode == request.Barcode && |
| | | (x.OperateType == "åºåºå®æ" || x.OperateType == "æå
-åå§è®°å½")); |
| | | |
| | | if (historyDetail != null) |
| | | { |
| | | double minutesDiff = (DateTime.Now - historyDetail.InsertTime).TotalMinutes; |
| | | if (minutesDiff >= 30) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¡ç {request.Barcode}å·²æ æ³æ¤é"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¡ç {request.Barcode}å·²æ æ³æ¤é"); |
| | | } |
| | | |
| | | Dt_OutStockLockInfo lockInfo = _outboundLockInfoRepository.QueryFirst(x => |
| | | x.OrderNo == request.OrderNo && |
| | | x.StockId == stockInfo.Id && |
| | | x.MaterielCode == historyDetail.MaterielCode && |
| | | x.PalletCode == stockInfo.PalletCode); |
| | | |
| | | if (lockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçå·²å
¨é¨æ£éå®,ä¸å
许æ¤é"); |
| | | } |
| | | |
| | | var details = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outboundOrder.Id); |
| | | |
| | | var outboundDetails = details |
| | | .Where(x => |
| | | x.MaterielCode == historyDetail.MaterielCode |
| | | && |
| | | !string.IsNullOrEmpty(lockInfo.OrderDetailIds) |
| | | && |
| | | lockInfo.OrderDetailIds.Split(",") |
| | | .Any(idStr => idStr.Trim() == x.Id.ToString()) |
| | | ).ToList(); |
| | | |
| | | var detail = outboundDetails.FirstOrDefault(); |
| | | if (detail != null && !string.IsNullOrEmpty(detail.ReturnJsonData)) |
| | | { |
| | | try |
| | | { |
| | | string deleteBarcode = request.Barcode; |
| | | |
| | | var list = JsonConvert.DeserializeObject<List<BarcodeItem>>(detail.ReturnJsonData); |
| | | if (list != null) |
| | | { |
| | | var filteredList = list.Where(x => x.barcode != deleteBarcode).ToList(); |
| | | |
| | | detail.ReturnJsonData = JsonConvert.SerializeObject(filteredList); |
| | | _outboundOrderDetailRepository.UpdateData(detail); |
| | | } |
| | | } |
| | | catch |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | try |
| | | { |
| | | bool isUnpack = historyDetail.OperateType == "æå
-åå§è®°å½"; |
| | | if (isUnpack) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æ¡ç å·²æå
ï¼ä¸å
许æ¤é"); |
| | | } |
| | | else |
| | | { |
| | | ReverseFullOutboundOperation(historyDetail, stockInfo, request); |
| | | } |
| | | |
| | | RollbackOutboundOrderDetails(historyDetail.MaterielCode, request.OrderNo, historyDetail.StockQuantity, stockInfo.Id); |
| | | |
| | | lockInfo.SortedQuantity = Math.Max(0, (decimal)(lockInfo.SortedQuantity - historyDetail.StockQuantity)); |
| | | _outboundLockInfoRepository.UpdateData(lockInfo); |
| | | |
| | | _stockDetailHistoryRepository.DeleteData(historyDetail); |
| | | |
| | | DeleteStockChangeRecord(request.Barcode, request.OrderNo); |
| | | |
| | | if (!CheckOutboundOrderCompleted(request.OrderNo)) |
| | | { |
| | | UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.åºåºä¸.ObjToInt()); |
| | | } |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | response.Success = true; |
| | | response.Message = $"æ¡ç {request.Barcode} æ¤éæ£éæå"; |
| | | response.Barcode = request.Barcode; |
| | | response.RestoredQuantity = historyDetail.StockQuantity; |
| | | |
| | | content = WebResponseContent.Instance.OK(data: response); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | response.Success = false; |
| | | response.Message = $"æ¤éæ£é失败ï¼{ex.Message}"; |
| | | content = WebResponseContent.Instance.Error(response.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"å¤çæ¤éæ£é失败ï¼{ex.Message}"; |
| | | content = WebResponseContent.Instance.Error(response.Message); |
| | | } |
| | | |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¤éæå
åºåºæä½ï¼å忢夿å
åç¶æï¼ |
| | | /// </summary> |
| | | private void ReverseUnpackOperation(Dt_StockInfoDetail_Hty historyDetail, Dt_StockInfo stockInfo, ReversePickingRequestDTO request, Dt_OutboundOrder outboundOrder) |
| | | { |
| | | Dt_StockInfoDetail currentDetail = _stockDetailRepository.QueryFirst(x => |
| | | x.Barcode == request.Barcode && |
| | | x.StockId == stockInfo.Id && |
| | | x.MaterielCode == historyDetail.MaterielCode); |
| | | |
| | | if (currentDetail != null) |
| | | { |
| | | currentDetail.StockQuantity = historyDetail.StockQuantity; |
| | | currentDetail.Remark = $"æ¤éæå
æ£éï¼æ¢å¤åå§æ°éï¼{historyDetail.StockQuantity}ï¼æä½è
ï¼{request.Operator}"; |
| | | _stockDetailRepository.UpdateData(currentDetail); |
| | | } |
| | | else |
| | | { |
| | | Dt_StockInfoDetail restoreDetail = new Dt_StockInfoDetail |
| | | { |
| | | StockId = historyDetail.StockId, |
| | | MaterielCode = historyDetail.MaterielCode, |
| | | MaterielName = historyDetail.MaterielName, |
| | | Barcode =historyDetail.Barcode, |
| | | OrderNo = historyDetail.OrderNo, |
| | | BatchNo = historyDetail.BatchNo, |
| | | ProductionDate = historyDetail.ProductionDate, |
| | | EffectiveDate = historyDetail.EffectiveDate, |
| | | SerialNumber = historyDetail.SerialNumber, |
| | | StockQuantity = historyDetail.StockQuantity, |
| | | OutboundQuantity = historyDetail.OutboundQuantity, |
| | | Status = historyDetail.Status, |
| | | Unit = historyDetail.Unit, |
| | | InboundOrderRowNo = historyDetail.InboundOrderRowNo, |
| | | SupplyCode = historyDetail.SupplyCode, |
| | | Creater = request.Operator, |
| | | CreateDate = DateTime.Now, |
| | | FactoryArea = historyDetail.FactoryArea, |
| | | WarehouseCode = historyDetail.WarehouseCode, |
| | | Remark = $"æ¤éæå
æ£éï¼éæ°å建åºåæç»ï¼æ¡ç ï¼{request.Barcode}ï¼æä½è
ï¼{request.Operator}" |
| | | }; |
| | | _stockDetailRepository.AddData(restoreDetail); |
| | | } |
| | | |
| | | List<Dt_MaterialCodeInfo> materialCodeInfos = _basicService.MaterielCodeInfoService.Repository.QueryData(x => |
| | | x.OldBarcode == request.Barcode && |
| | | x.OrderNo == request.OrderNo); |
| | | if (materialCodeInfos.Any()) |
| | | { |
| | | _basicService.MaterielCodeInfoService.Repository.DeleteData(materialCodeInfos); |
| | | } |
| | | |
| | | if (outboundOrder.OrderType == InOrderTypeEnum.InternalAllocat.ObjToInt()) |
| | | { |
| | | Dt_AllocateMaterialInfo allocateMaterialInfo = _allocateMaterialInfoRepository.QueryFirst(x => |
| | | x.Barcode == request.Barcode && |
| | | x.OrderNo == request.OrderNo); |
| | | if (allocateMaterialInfo != null) |
| | | { |
| | | _allocateMaterialInfoRepository.DeleteData(allocateMaterialInfo); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¤é宿´åºåºæä½ï¼æ¢å¤è¢«å é¤çåºåæç»ï¼ |
| | | /// </summary> |
| | | private void ReverseFullOutboundOperation(Dt_StockInfoDetail_Hty historyDetail, Dt_StockInfo stockInfo, ReversePickingRequestDTO request) |
| | | { |
| | | Dt_StockInfoDetail restoreDetail = new Dt_StockInfoDetail |
| | | { |
| | | |
| | | StockId = historyDetail.StockId, |
| | | MaterielCode = historyDetail.MaterielCode, |
| | | MaterielName = historyDetail.MaterielName, |
| | | Barcode = historyDetail.Barcode, |
| | | OrderNo = historyDetail.OrderNo, |
| | | BatchNo = historyDetail.BatchNo, |
| | | ProductionDate = historyDetail.ProductionDate, |
| | | EffectiveDate = historyDetail.EffectiveDate, |
| | | SerialNumber = historyDetail.SerialNumber, |
| | | StockQuantity = historyDetail.StockQuantity, |
| | | OutboundQuantity = historyDetail.OutboundQuantity - historyDetail.StockQuantity, |
| | | Status = historyDetail.Status, |
| | | Unit = historyDetail.Unit, |
| | | InboundOrderRowNo = historyDetail.InboundOrderRowNo, |
| | | SupplyCode = historyDetail.SupplyCode, |
| | | Creater = request.Operator, |
| | | CreateDate = DateTime.Now, |
| | | FactoryArea = historyDetail.FactoryArea, |
| | | WarehouseCode = historyDetail.WarehouseCode, |
| | | Remark = $"æ¤é宿´åºåºæ£éï¼æ¢å¤åºåæç»ï¼æ¡ç ï¼{request.Barcode}ï¼æä½è
ï¼{request.Operator}" |
| | | }; |
| | | |
| | | _stockDetailRepository.AddData(restoreDetail); |
| | | |
| | | if (request.OrderType == InOrderTypeEnum.InternalAllocat.ObjToInt()) |
| | | { |
| | | Dt_AllocateMaterialInfo allocateMaterialInfo = _allocateMaterialInfoRepository.QueryFirst(x => |
| | | x.Barcode == request.Barcode && |
| | | x.OrderNo == request.OrderNo); |
| | | if (allocateMaterialInfo != null) |
| | | { |
| | | _allocateMaterialInfoRepository.DeleteData(allocateMaterialInfo); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åæ»åºåºåæç»ï¼æ£åå·²åºåºæ°éï¼ |
| | | /// </summary> |
| | | private void RollbackOutboundOrderDetails(string materielCode, string orderNo, decimal rollbackQuantity, int stockId) |
| | | { |
| | | Dt_OutboundOrder outboundOrder = _outboundRepository.QueryFirst(x => x.OrderNo == orderNo); |
| | | List<Dt_OutboundOrderDetail> details = _detailRepository.QueryData(x => |
| | | x.OrderId == outboundOrder.Id && |
| | | x.MaterielCode == materielCode && |
| | | x.OverOutQuantity > 0); |
| | | |
| | | if (!details.Any()) return; |
| | | |
| | | decimal remainingRollbackQty = rollbackQuantity; |
| | | foreach (var detail in details) |
| | | { |
| | | if (remainingRollbackQty <= 0) break; |
| | | |
| | | decimal rollbackQty = Math.Min(remainingRollbackQty, detail.OverOutQuantity); |
| | | |
| | | detail.OverOutQuantity -= rollbackQty; |
| | | detail.CurrentDeliveryQty -= rollbackQty; |
| | | |
| | | if (detail.OrderDetailStatus == (int)OrderDetailStatusEnum.Over && detail.OverOutQuantity < detail.OrderQuantity - detail.MoveQty) |
| | | { |
| | | detail.OrderDetailStatus = (int)OrderDetailStatusEnum.New; |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(detail.ReturnJsonData)) |
| | | { |
| | | List<Barcodes> barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(detail.ReturnJsonData) ?? new List<Barcodes>(); |
| | | var targetBarcode = barcodesList.FirstOrDefault(x => x.Barcode == materielCode); |
| | | if (targetBarcode != null) |
| | | { |
| | | barcodesList.Remove(targetBarcode); |
| | | detail.ReturnJsonData = JsonConvert.SerializeObject(barcodesList, new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }); |
| | | } |
| | | } |
| | | |
| | | _detailRepository.UpdateData(detail); |
| | | remainingRollbackQty -= rollbackQty; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å é¤åºååå¨è®°å½ï¼æ£éæ¶çæçï¼ |
| | | /// </summary> |
| | | private void DeleteStockChangeRecord(string barcode, string orderNo) |
| | | { |
| | | Dt_StockQuantityChangeRecord changeRecord = _stockChangeRepository.QueryFirst(x => |
| | | x.OriginalSerilNumber == barcode && |
| | | x.OrderNo == orderNo && |
| | | x.ChangeType == (int)StockChangeTypeEnum.Outbound); |
| | | if (changeRecord != null) |
| | | { |
| | | _stockChangeRepository.DeleteData(changeRecord); |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¡ç æç»å®ä½ |
| | | /// </summary> |
| | | public class BarcodeItem |
| | | { |
| | | /// <summary> |
| | | /// æ¡ç |
| | | /// </summary> |
| | | public string barcode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ°é |
| | | /// </summary> |
| | | public decimal qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä¾åºåç¼ç |
| | | /// </summary> |
| | | public string supplyCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | | public string batchNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// åä½ |
| | | /// </summary> |
| | | public string unit { get; set; } |
| | | } |
| | | } |