| | |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly ISys_ConfigService _configService; |
| | | private readonly IDt_OrderOutDetailsRepository _orderOutDetailsRepository; |
| | | private readonly IDt_WareAreaInfoRepository _wareAreaInfoRepository; |
| | | |
| | | public Dt_TaskService(IDt_TaskRepository BaseDal, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | |
| | | IStockInfoDetailRepository stockInfoDetailRepository, |
| | | IDt_StationManagerRepository stationManagerRepository, |
| | | ISys_ConfigService configService, |
| | | IDt_OrderOutDetailsRepository orderOutDetailsRepository) : base(BaseDal) |
| | | IDt_OrderOutDetailsRepository orderOutDetailsRepository, |
| | | IDt_WareAreaInfoRepository wareAreaInfoRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _stockInfoRepository = stockInfoRepository; |
| | |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _configService = configService; |
| | | _orderOutDetailsRepository = orderOutDetailsRepository; |
| | | _wareAreaInfoRepository = wareAreaInfoRepository; |
| | | } |
| | | |
| | | #region å¤é¨æ¥å£æ¹æ³ |
| | |
| | | orderdetailshtys.Add(item.Adapt<Dt_OrderOutDetails_Hty>()); |
| | | }); |
| | | |
| | | var allocateOrderdetail = orderDetails.Where(x => true).ToList(); |
| | | |
| | | //await ERPAllocateOut(stock); |
| | | await ERPAllocateOut(stock); |
| | | |
| | | //è°æ¨åºåº |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.OutAllocate) |
| | |
| | | if (orderDetails.Count > 0) |
| | | { |
| | | content = await ERPProduction(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.çäº§é¢æå).ToList()); |
| | | } |
| | | } |
| | | } |
| | | List<DtBoxingInfo> boxingInfos = new List<DtBoxingInfo>(); |
| | | foreach (var item in allocateOrderdetail) |
| | | |
| | | var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == stock.PalletCode); |
| | | if (boxingInfo != null) |
| | | { |
| | | var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == item.PalletCode); |
| | | if (boxingInfo == null) |
| | | { |
| | | continue; |
| | | } |
| | | var boxingdetail = boxingInfo.BoxingInfoDetails.Where(x => x.MaterielCode == item.MaterielCode).ToList(); |
| | | if (boxingdetail.Count() > 0) |
| | | { |
| | | foreach (var detail in boxingdetail) |
| | | { |
| | | //detail.Quantity = detail.Quantity - item.OutboundQuantity; |
| | | detail.Warehouse = "WMSåºåºç¼ååº"; |
| | | detail.WareHouseId = "205"; |
| | | //if (detail.Quantity <= 0) |
| | | //{ |
| | | // boxingInfo.BoxingInfoDetails.Remove(detail); |
| | | //} |
| | | } |
| | | } |
| | | boxingInfos.Add(boxingInfo); |
| | | var mergedDetails = boxingInfo.BoxingInfoDetails |
| | | .GroupBy(x => new { x.MaterielCode, x.MaterielName }) |
| | | .Select(g => new DtBoxingInfoDetail |
| | | { |
| | | MaterielCode = g.Key.MaterielCode, |
| | | MaterielName = g.Key.MaterielName, |
| | | DemandClassification = g.FirstOrDefault().DemandClassification, |
| | | Warehouse = "WMSåºåºç¼ååº", |
| | | WareHouseId = "205", |
| | | OrderNo = g.FirstOrDefault().OrderNo, |
| | | Unit = g.FirstOrDefault().Unit, |
| | | Specs = g.FirstOrDefault().Specs, |
| | | Weight = g.FirstOrDefault().Weight, |
| | | DrawingNumber = g.FirstOrDefault().DrawingNumber, |
| | | Date = g.FirstOrDefault().Date, |
| | | Remark = g.FirstOrDefault().Remark, |
| | | Quantity = g.Sum(item => item.Quantity), |
| | | }) |
| | | .ToList(); |
| | | boxingInfo.BoxingInfoDetails = mergedDetails; |
| | | } |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await DeleteStockInfoAsync(stock.Id); |
| | | _boxingInfoRepository.UpdateDataNav(boxingInfos); |
| | | _boxingInfoRepository.UpdateDataNav(boxingInfo); |
| | | await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | |
| | | { |
| | | return content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | await ERPAllocate(boxinfo); |
| | | |
| | | var stock = CreateStock(boxinfo, task); |
| | | |
| | |
| | | |
| | | var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | await ERPAllocate(stock); |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | |
| | | public DtStockInfo CreateStock(DtBoxingInfo boxingInfo,Dt_Task task) |
| | | { |
| | | var boxDetail = boxingInfo.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); |
| | | boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.å·²å
¥åº; }); |
| | | boxDetail.ForEach(x => |
| | | { |
| | | x.Status = (int)StockStateEmun.å·²å
¥åº; |
| | | }); |
| | | var mergedDetails = boxDetail |
| | | .GroupBy(x => new { x.MaterielCode, x.MaterielName }) |
| | | .Select(g => new DtStockInfoDetail |
| | | { |
| | | MaterielCode = g.Key.MaterielCode, |
| | | MaterielName = g.Key.MaterielName, |
| | | DemandClassification = g.FirstOrDefault().DemandClassification, |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | OrderNo = g.FirstOrDefault().OrderNo, |
| | | Unit = g.FirstOrDefault().Unit, |
| | | Specs = g.FirstOrDefault().Specs, |
| | | Weight = g.FirstOrDefault().Weight, |
| | | OutboundQuantity = g.FirstOrDefault().OutboundQuantity, |
| | | DrawingNumber = g.FirstOrDefault().DrawingNumber, |
| | | Date = g.FirstOrDefault().Date, |
| | | AllocateWarehouse = g.FirstOrDefault().AllocateWarehouse, |
| | | Remark = g.FirstOrDefault().Remark, |
| | | Quantity = g.Sum(item => item.Quantity), |
| | | }) |
| | | .ToList(); |
| | | return new DtStockInfo() |
| | | { |
| | | PalletCode = task.PalletCode, |
| | |
| | | CreateDate = DateTime.Now, |
| | | Creater = "system", |
| | | IsFullExit = boxingInfo.IsFullExit, |
| | | StockInfoDetails = boxDetail, |
| | | StockInfoDetails = mergedDetails, |
| | | StockStatus = (int)StockStateEmun.å·²å
¥åº |
| | | }; |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode) |
| | | public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode,string remark) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = stock.PalletCode, AreaId = 2, Position = stock.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutAllocate }); |
| | | |
| | | List<Dt_OrderOutDetails> outDetails = new List<Dt_OrderOutDetails>(); |
| | | details.Where(x => x.OutboundQuantity > 0).ForEach(x => |
| | | details.Where(x=>x.OutboundQuantity>0).ForEach(x => |
| | | { |
| | | var areaName = _areaInfoRepository.QueryFirst(y => y.AreaID == Convert.ToInt32(x.Remark)); |
| | | if (areaName == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°è°æ¨ä»åº{x.Remark}æ°æ®"); |
| | | } |
| | | if (x.Quantity < x.OutboundQuantity) |
| | | { |
| | | throw new Exception($"{x.MaterielName}{x.MaterielCode}åºåºæ°éä¸å¯å¤§äºåºåæ°é"); |
| | | } |
| | | var wareinfo = _wareAreaInfoRepository.QueryFirst(y => y.WareAreaCode ==x.AllocateWarehouse); |
| | | if (wareinfo == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°è°æ¨ä»åº{x.AllocateWarehouse}æ°æ®"); |
| | | } |
| | | if (wareinfo.WareAreaCode == "205") |
| | | { |
| | | throw new Exception($"ä¸å¯è°æ¨è³WMSåºåºç¼ååº{x.AllocateWarehouse}æ°æ®"); |
| | | } |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = areaName.AreaName, |
| | | AllocateWarehouse = wareinfo.WareAreaName, |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = areaName.AreaCode , |
| | | AllocateWarehouseId = wareinfo.WareAreaCode , |
| | | OutboundQuantity = x.OutboundQuantity, |
| | | }); |
| | | }); |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | /// |
| | | public async Task ERPAllocate(DtStockInfo stock) |
| | | public async Task ERPAllocate(DtBoxingInfo boxing) |
| | | { |
| | | try |
| | | { |
| | | if (stock == null) |
| | | if (boxing == null) |
| | | { |
| | | throw new Exception("æªæ¾å°åºåä¿¡æ¯"); |
| | | throw new Exception("æªæ¾å°ç»çä¿¡æ¯"); |
| | | } |
| | | Allocate allocate = new Allocate |
| | | { |
| | |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | transferInList = stock.StockInfoDetails.Select(item => new transferInList |
| | | transferInList = boxing.BoxingInfoDetails.Select(item => new transferInList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = item.MaterielCode, |
| | |
| | | throw new Exception($"æªæ¾å°è°æ¨åºåºæ°æ®"); |
| | | } |
| | | List<transferInList> transferInList=new List<transferInList>(); |
| | | orderOutDetails.ForEach(x => |
| | | foreach (var item in orderOutDetails) |
| | | { |
| | | if (item.AllocateWarehouseId == "205") |
| | | { |
| | | continue; |
| | | } |
| | | transferInList.Add(new transferInList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = x.MaterielCode, |
| | | ItemCode = item.MaterielCode, |
| | | //è°å
¥ä»åºå°å |
| | | TransInWHCode = x.AllocateWarehouseId, |
| | | TransInWHCode = item.AllocateWarehouseId, |
| | | //è°å
¥æ°é |
| | | TransInQty = x.OutboundQuantity, |
| | | TransInQty = item.OutboundQuantity, |
| | | // è°åºä»åºç¼ç |
| | | TransOutWHCode = "205", |
| | | }); |
| | | }); |
| | | } |
| | | if (transferInList.Count <= 0) |
| | | { |
| | | return; |
| | | } |
| | | Allocate allocate = new Allocate |
| | | { |
| | | context = new Context |