| | |
| | | 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) |
| | |
| | | |
| | | 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.èªå¨å é¤); |
| | |
| | | |
| | | 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.èªå¨å é¤); |
| | |
| | | |
| | | Dt_StockInfoDetail_Hty historyDetail = _stockDetailHistoryRepository.QueryFirst(x => |
| | | x.Barcode == request.Barcode && |
| | | |
| | | (x.OperateType == "åºåºå®æ" || x.OperateType == "æå
-åå§è®°å½")); |
| | | |
| | | if(historyDetail != null) |
| | | 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.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 |
| | | { |
| | | if(lockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçå·²å
¨é¨æ£éå®,ä¸å
许æ¤é"); |
| | | } |
| | | bool isUnpack = historyDetail.OperateType == "æå
-åå§è®°å½"; |
| | | if (isUnpack) |
| | | { |
| | |
| | | { |
| | | ReverseFullOutboundOperation(historyDetail, stockInfo, request); |
| | | } |
| | | |
| | | RollbackOutboundOrderDetails(historyDetail.MaterielCode, request.OrderNo, historyDetail.StockQuantity, stockInfo.Id); |
| | | |
| | | if (lockInfo != null) |
| | | { |
| | | lockInfo.SortedQuantity = Math.Max(0, (decimal)(lockInfo.SortedQuantity - historyDetail.StockQuantity)); |
| | | |
| | | if (lockInfo.SortedQuantity == 0) |
| | | { |
| | | _outboundLockInfoRepository.UpdateData(lockInfo); |
| | | } |
| | | else |
| | | { |
| | | _outboundLockInfoRepository.UpdateData(lockInfo); |
| | | } |
| | | } |
| | | lockInfo.SortedQuantity = Math.Max(0, (decimal)(lockInfo.SortedQuantity - historyDetail.StockQuantity)); |
| | | _outboundLockInfoRepository.UpdateData(lockInfo); |
| | | |
| | | _stockDetailHistoryRepository.DeleteData(historyDetail); |
| | | |
| | |
| | | |
| | | |
| | | } |
| | | |
| | | /// <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; } |
| | | } |
| | | } |