| | |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | |
| | | private readonly IRepository<Dt_LocationInfo> _locationInfoRepository; |
| | | private readonly IBasicService _basicService; |
| | | private readonly IRepository<Dt_AllocateOrder> _allocateOrderRepository; |
| | | private readonly IRepository<Dt_OutboundOrder> _outboundOrderRepository; |
| | | private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository; |
| | | public IRepository<Dt_InboundOrder> Repository => BaseDal; |
| | | |
| | | public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository) : base(BaseDal) |
| | | public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_OutboundOrder> outboundOrderRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | |
| | | _basicService = basicService; |
| | | _locationInfoRepository = locationInfoRepository; |
| | | _allocateOrderRepository = allocateOrderRepository; |
| | | _outboundOrderRepository = outboundOrderRepository; |
| | | _outboundOrderDetailRepository = outboundOrderDetailRepository; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType) |
| | |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // æºè½è¯å«è¾å
¥ç±»å |
| | | |
| | | string palletCode = null; |
| | | string barcode = null; |
| | | int stockStatus = 0; |
| | | |
| | | // 1. å
å°è¯ææçå·æ¥è¯¢ |
| | | var stockByPallet = _stockRepository.Db.Queryable<Dt_StockInfo>() |
| | |
| | | { |
| | | // è¯å«ä¸ºæçå· |
| | | palletCode = code; |
| | | stockStatus = stockByPallet.StockStatus; |
| | | |
| | | var task = _taskRepository.Db.Queryable<Dt_Task>().Where(t => t.PalletCode == palletCode).ToList(); |
| | | if (task != null && task.Any()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æçå· {palletCode} å卿ªå®æçä»»å¡ï¼æ æ³æ¤é"); |
| | | } |
| | | |
| | | if (stockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æçå· {palletCode} å¤äºå
¥åºç¡®è®¤ç¶æï¼ç¦æ¢æ´æçæ¤éï¼è¯·åç¬æ¤éæ¡ç "); |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | var stockInfo = _stockRepository |
| | | .Db.Queryable<Dt_StockInfo>() |
| | | .Where(s => s.Id == detail.StockId&& (s.StockStatus == (int)StockStatusEmun.ç»çæå || s.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt())) |
| | | .Where(s => s.Id == detail.StockId && (s.StockStatus == (int)StockStatusEmun.ç»çæå || s.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt())) |
| | | .First(); |
| | | |
| | | if (stockInfo != null) |
| | | { |
| | | barcode = code; |
| | | palletCode = stockInfo.PalletCode; |
| | | stockStatus = stockInfo.StockStatus; |
| | | } |
| | | } |
| | | else |
| | |
| | | return WebResponseContent.Instance.Error($"æç {palletCode} 䏿ªæ¾å°æ¡ç {barcode} çæç»è®°å½"); |
| | | } |
| | | |
| | | if (stockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt()) |
| | | { |
| | | var totalDetails = stock.Details?.Count ?? 0; |
| | | if (totalDetails <= 1) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æç {palletCode} å¤äºå
¥åºç¡®è®¤ç¶æï¼å½åä»
å©ä½æå1æ¡æç»ï¼ç¦æ¢æ¤éï¼å¿
é¡»ä¿çè³å°1æ¡åºåæç»ï¼"); |
| | | } |
| | | } |
| | | |
| | | ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode }); |
| | | _stockDetailRepository.DeleteData(targetDetail); |
| | | |
| | |
| | | |
| | | if (!remainingDetails.Any()) |
| | | { |
| | | ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList()); |
| | | _stockRepository.DeleteData(stock); |
| | | if (stockStatus == (int)StockStatusEmun.ç»çæå) |
| | | { |
| | | ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList()); |
| | | _stockRepository.DeleteData(stock); |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK($"æ¡ç {barcode} æ¤éæåï¼æçæ å©ä½æç»ï¼å·²å 餿çå¹¶éç½®å
³èå
¥åºåç¶æ"); |
| | | return WebResponseContent.Instance.OK($"æ¡ç {barcode} æ¤éæåï¼æçæ å©ä½æç»ï¼å·²éç½®å
³èå
¥åºåç¶æ"); |
| | | } |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | |
| | | } |
| | | else |
| | | { |
| | | // ===== æ¤éæ´ä¸ªæç ===== |
| | | var stock = _stockRepository.Db.Queryable<Dt_StockInfo>() |
| | | .Includes(o => o.Details) |
| | | .First(x => x.PalletCode == palletCode |
| | |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.OrderType.Equals(searchParameters.Value.ToString())); |
| | | } |
| | | |
| | | var detailMaterielCode = searchParametersList.FirstOrDefault(x => x.Name == "materielCode"); |
| | | if(detailMaterielCode!=null && !string.IsNullOrEmpty(detailMaterielCode.Value?.ToString())) |
| | | { |
| | | string materielCode = detailMaterielCode.Value.ToString().Trim(); |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(d => d.MaterielCode.Contains(materielCode))); |
| | | |
| | | } |
| | | |
| | | //var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount); |
| | | //return new PageGridData<Dt_InboundOrder>(totalCount, dataList); |
| | | } |
| | |
| | | return content.OK(data: details); |
| | | } |
| | | |
| | | public WebResponseContent GetLocationType(string code) |
| | | { |
| | | var warehouseAreaName = _warehouseAreaRepository.QueryFirst(x => x.Code == code); |
| | | if(string.IsNullOrWhiteSpace(warehouseAreaName.ToString())) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°ä»åºåç§°"); |
| | | } |
| | | var locationTypeDesc = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => string.Equals(x.LocationTypeDesc, warehouseAreaName.Name, StringComparison.OrdinalIgnoreCase)).First(); |
| | | |
| | | return WebResponseContent.Instance.OK(data:locationTypeDesc.LocationType); |
| | | } |
| | | |
| | | public WebResponseContent HandCloseOrder(List<string> orderNos) |
| | | { |
| | | try |
| | |
| | | foreach (var orderNo in orderNos) |
| | | { |
| | | var inbound = _inboundOrderRepository.QueryFirst(x => x.InboundOrderNo == orderNo); |
| | | if(inbound == null) |
| | | var outbound = _outboundOrderRepository.QueryFirst(x=>x.OrderNo == orderNo); |
| | | |
| | | if (inbound != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥åæ®ä¸åå¨ï¼æ æ³è¿è¡å
³é"); |
| | | if (inbound.OrderStatus != (int)InOrderStatusEnum.æªå¼å§ && inbound.OrderStatus != (int)InOrderStatusEnum.å
¥åºä¸) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥åæ®ç¶æä¸å¯ä»¥å
³é"); |
| | | } |
| | | inbound.OrderStatus = (int)InOrderStatusEnum.æå¨å
³é; |
| | | inbound.Operator = App.User.UserName; |
| | | _inboundOrderRepository.UpdateData(inbound); |
| | | |
| | | var inboundItems = _inboundOrderDetailRepository.QueryData(x => x.OrderId == inbound.Id); |
| | | if(inboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New) |
| | | { |
| | | foreach (var item in inboundItems) |
| | | { |
| | | item.OrderDetailStatus = (int)InOrderStatusEnum.æå¨å
³é; |
| | | item.Modifier = App.User.UserName; |
| | | BaseDal.Db.Updateable<Dt_InboundOrderDetail>(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | if (inbound.OrderStatus != (int)InOrderStatusEnum.æªå¼å§ && inbound.OrderStatus != (int)InOrderStatusEnum.å
¥åºä¸) |
| | | else if (outbound != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥åæ®ç¶æä¸å¯ä»¥å
³é"); |
| | | if(outbound.OrderStatus ==(int)OutOrderStatusEnum.åºåºå®æ) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥åæ®ç¶æä¸å¯ä»¥å
³é"); |
| | | } |
| | | if(outbound.OrderStatus == (int)OutOrderStatusEnum.åºåºä¸) |
| | | { |
| | | var outboundDetails = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outbound.Id); |
| | | if (outboundDetails == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("è¯¥åæ®ç¶æä¸è½å
³é"); |
| | | } |
| | | var detailStatus = outboundDetails.All(x => x.LockQuantity == x.OverOutQuantity); |
| | | if (!detailStatus) |
| | | { |
| | | return WebResponseContent.Instance.Error("è¯¥åæ®ææ£å¨åºåºçç©æï¼ä¸è½å
³é"); |
| | | } |
| | | } |
| | | outbound.OrderStatus = (int)OutOrderStatusEnum.å
³é; |
| | | outbound.Operator = App.User.UserName; |
| | | _outboundOrderRepository.UpdateData(outbound); |
| | | |
| | | var outboundItems = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == outbound.Id).ToList(); |
| | | if(outboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New) |
| | | foreach(var item in outboundItems) |
| | | { |
| | | item.OrderDetailStatus = (int)OutOrderStatusEnum.å
³é; |
| | | item.Modifier = App.User.UserName; |
| | | BaseDal.Db.Updateable<Dt_OutboundOrderDetail>(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | inbound.OrderStatus = (int)InOrderStatusEnum.æå¨å
³é; |
| | | _inboundOrderRepository.UpdateData(inbound); |
| | | |
| | | } |
| | | return WebResponseContent.Instance.OK($"åæ®å
³éæå"); |
| | | } |