| | |
| | | |
| | | public class Dt_OutOrderService : ServiceBase<Dt_OutOrder, IDt_OutOrderRepository>, IDt_OutOrderService |
| | | { |
| | | private readonly LogFactory LogFactory = new LogFactory(); |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IDt_OutOrderProductionService _outOrderProductionService; |
| | | private readonly IDt_OutOrderProductionDetailService _outOrderProductionDetailService; |
| | | private readonly IDt_OutOrderDtailService _outOrderDtailService; |
| | | private readonly IDt_OutOrderTransferRepository _OutOrderTransferRepository; |
| | | private readonly IDt_OutOrderTransferDetailRepository _OutOrderTransferDetailRepository; |
| | | private readonly IDt_MaterielInfoRepository _materielInfoRepository; |
| | | private readonly IDt_BillGroupStockRepository _billGroupStockRepository; |
| | | private readonly IDt_OutOrderAndStockRepository _outOrderAndStockRepository; |
| | | private readonly IDt_TaskRepository _taskRepository; |
| | | |
| | | public Dt_OutOrderService(IDt_OutOrderRepository BaseDal, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | |
| | | IDt_OutOrderProductionDetailService outOrderProductionDetailService, |
| | | IDt_OutOrderDtailService outOrderDtailService, |
| | | IDt_OutOrderTransferDetailRepository outOrderTransferDetailRepository, |
| | | IDt_OutOrderTransferRepository outOrderTransferRepository) : base(BaseDal) |
| | | IDt_OutOrderTransferRepository outOrderTransferRepository, |
| | | IDt_MaterielInfoRepository materielInfoRepository, |
| | | IDt_BillGroupStockRepository billGroupStockRepository, |
| | | IDt_OutOrderAndStockRepository outOrderAndStockRepository, |
| | | IDt_TaskRepository taskRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _outOrderProductionService = outOrderProductionService; |
| | |
| | | _outOrderDtailService = outOrderDtailService; |
| | | _OutOrderTransferDetailRepository = outOrderTransferDetailRepository; |
| | | _OutOrderTransferRepository = outOrderTransferRepository; |
| | | _materielInfoRepository = materielInfoRepository; |
| | | _billGroupStockRepository = billGroupStockRepository; |
| | | _outOrderAndStockRepository = outOrderAndStockRepository; |
| | | _taskRepository = taskRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "请æ±", JsonConvert.SerializeObject(model)); |
| | | // 1. æå»ºç产åºåºå对象 |
| | | var production = CreateProductionOrder(model.MainData); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æå»ºç产åºåºå对象", JsonConvert.SerializeObject(production)); |
| | | |
| | | // 2. æå»ºç产åºåºåæç»å表 |
| | | var productionDetails = CreateProductionDetails(model.DetailData); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æå»ºç产åºåºåæç»å¯¹è±¡", JsonConvert.SerializeObject(productionDetails)); |
| | | |
| | | // 3. æå»ºç³»ç»åºåºå对象 |
| | | var order = CreateSystemOrder(production); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æå»ºç³»ç»åºåºå对象", JsonConvert.SerializeObject(order)); |
| | | |
| | | // 4. æå»ºç³»ç»åºåºåæç»å表 |
| | | var orderDetails = CreateSystemOrderDetails(productionDetails); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æå»ºç³»ç»åºåºåæç»å¯¹è±¡", JsonConvert.SerializeObject(orderDetails)); |
| | | |
| | | // å¼å¯äºå¡ |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 5. æ·»å ç产åºåºåå¹¶è·å主é®ID |
| | | var productionId = _outOrderProductionService.AddOrderProduction(production); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æ·»å ç产åºåºåå¹¶è·å主é®ID", productionId); |
| | | |
| | | // 6. ç产åºåºåæç»ç»å®ä¸»è¡¨ID |
| | | productionDetails.ForEach(item => { item.ProductionOutOrderId = productionId; }); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "ç产åºåºåæç»ç»å®ä¸»è¡¨ID", productionId); |
| | | |
| | | // 7. æ·»å ç产åºåºåæç» |
| | | var detailAddResult = _outOrderProductionDetailService.AddData(productionDetails); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æ·»å ç产åºåºåæç»", detailAddResult.Status); |
| | | |
| | | // 8. ç³»ç»åºåºåç»å®ç产åºåºåID |
| | | order.UpperOutOrderId = productionId; |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "ç³»ç»åºåºåç»å®ç产åºåºåID", productionId); |
| | | |
| | | // 9. æ·»å ç³»ç»åºåºåå¹¶è·å主é®ID |
| | | var orderId = BaseDal.AddData(order); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æ·»å ç³»ç»åºåºåå¹¶è·å主é®ID", orderId); |
| | | |
| | | // 10 . ç³»ç»åºåºåæç»ç»å®ä¸»è¡¨ID |
| | | orderDetails.ForEach(item => { item.OutOrderId = orderId; }); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "ç³»ç»åºåºåæç»ç»å®ä¸»è¡¨ID", orderId); |
| | | |
| | | // 11. æ·»å ç³»ç»åºåºåæç»å¹¶è¿åç»æ |
| | | content = _outOrderDtailService.AddData(orderDetails); |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æ·»å ç³»ç»åºåºåæç»å¹¶è¿åç»æ", content.Status); |
| | | |
| | | if (content.Status && productionId > 0 && detailAddResult.Status && orderId > 0) |
| | | { |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æææä½æ§è¡å®ææäº¤äºå¡", "æ åæ°"); |
| | | _unitOfWorkManage.CommitTran(); // æäº¤äºå¡ |
| | | } |
| | | else |
| | | throw new Exception("åºåºåæ·»å 失败"); |
| | | { |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "æ·»å æ°æ®åºå¤±è´¥,è¯·æ£æ¥æ°æ®æ¯å¦æ£ç¡®", $"ç³»ç»åºåºåæç»:{content.Status},æ·»å ç³»ç»åºåºå:{orderId > 0},ç产åºåºå:{productionId > 0},ç产åºåºåæç»:{detailAddResult.Status}"); |
| | | throw new Exception("åºåºåæ·»å 失败" + $"ç³»ç»åºåºåæç»:{content.Status},æ·»å ç³»ç»åºåºå:{orderId > 0},ç产åºåºå:{productionId > 0},ç产åºåºåæç»:{detailAddResult.Status}"); |
| | | } |
| | | |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); // åæ»äºå¡ |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, $"ç³»ç»å¼å¸¸ï¼å¼å¸¸ä¿¡æ¯ï¼{ex.Message}", "æ åæ°"); |
| | | return content.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | LogFactory.GetLog("æ·»å ç产åºåºå").InfoFormat(true, "ååº", JsonConvert.SerializeObject(content)); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | // 1. æå»ºè°æ¨åºåºå对象 |
| | | var transfer = CreateTransferOrder(model.MainData); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æå»ºè°æ¨åºåºå对象", JsonConvert.SerializeObject(transfer)); |
| | | |
| | | // 2. æå»ºè°æ¨åºåºåæç»å表 |
| | | var transferDetail = CreateTransferDetails(model.DetailData); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æå»ºè°æ¨åºåºåæç»å¯¹è±¡", JsonConvert.SerializeObject(transferDetail)); |
| | | |
| | | // 3. æå»ºç³»ç»åºåºå对象 |
| | | var order = CreateSystemOrder(transfer); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æå»ºç³»ç»åºåºå对象", JsonConvert.SerializeObject(order)); |
| | | |
| | | // 4. æå»ºç³»ç»åºåºåæç»å表 |
| | | var orderDetails = CreateSystemOrderDetails(transferDetail); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æå»ºç³»ç»åºåºåæç»å¯¹è±¡", JsonConvert.SerializeObject(orderDetails)); |
| | | |
| | | // æ·»å äºå¡ |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 5. æ·»å è°æ¨åºåºåå¹¶è·å主é®ID |
| | | var transferId = _OutOrderTransferRepository.AddData(transfer); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æ·»å è°æ¨åºåºåå¹¶è·å主é®ID", transferId); |
| | | |
| | | // 6. è°æ¨åºåºåæç»ç»å®ä¸»è¡¨ID |
| | | transferDetail.ForEach(item => { item.TransferOutOrderId = transferId; }); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "è°æ¨åºåºåæç»ç»å®ä¸»è¡¨ID", transferId); |
| | | |
| | | // 7. æ·»å ç产åºåºåæç» |
| | | var detailAddResult = _OutOrderTransferDetailRepository.AddData(transferDetail); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æ·»å ç产åºåºåæç»", detailAddResult); |
| | | |
| | | // 8. ç³»ç»åºåºåç»å®è°æ¨åºåºåID |
| | | order.UpperOutOrderId = transferId; |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "ç³»ç»åºåºåç»å®è°æ¨åºåºåID", transferId); |
| | | |
| | | // 9. æ·»å ç³»ç»åºåºåå¹¶è·å主é®ID |
| | | var orderId = BaseDal.AddData(order); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æ·»å ç³»ç»åºåºåå¹¶è·å主é®ID", orderId); |
| | | |
| | | // 10 . ç³»ç»åºåºåæç»ç»å®ä¸»è¡¨ID |
| | | orderDetails.ForEach(item => { item.OutOrderId = orderId; }); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "ç³»ç»åºåºåæç»ç»å®ä¸»è¡¨ID", orderId); |
| | | |
| | | // 11. æ·»å ç³»ç»åºåºåæç»å¹¶è¿åç»æ |
| | | content = _outOrderDtailService.AddData(orderDetails); |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æ·»å ç³»ç»åºåºåæç»å¹¶è¿åç»æ", content.Status); |
| | | |
| | | if (content.Status && transferId > 0 && detailAddResult > 0 && orderId > 0) |
| | | { |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æææä½æ§è¡å®ææäº¤äºå¡", "æ åæ°"); |
| | | _unitOfWorkManage.CommitTran(); // æäº¤äºå¡ |
| | | } |
| | | else |
| | | throw new Exception("åºåºåæ·»å 失败"); |
| | | { |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, "æ·»å æ°æ®åºå¤±è´¥,è¯·æ£æ¥æ°æ®æ¯å¦æ£ç¡®", $"ç³»ç»åºåºåæç»:{content.Status},æ·»å ç³»ç»åºåºå:{orderId > 0},ç产åºåºå:{transferId > 0},ç产åºåºåæç»:{detailAddResult > 0}"); |
| | | throw new Exception("æ·»å è°æ¨åºåºå"); |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); // åæ»äºå¡ |
| | | LogFactory.GetLog("æ·»å è°æ¨åºåºå").InfoFormat(true, $"ç³»ç»å¼å¸¸ï¼å¼å¸¸ä¿¡æ¯ï¼{ex.Message}", "æ åæ°"); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®è®¢ååé
åºåºåºå |
| | | /// </summary> |
| | | /// <param name="orderNo">订åç¼å·</param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> GetOutboundStockAsync(string orderNo) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | // è·å订å |
| | | var order = await BaseDal.GetOutOrderByNumberAsync(orderNo); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "æ ¹æ®è®¢åç¼å·è·åè®¢åæ°æ®", JsonConvert.SerializeObject(order)); |
| | | |
| | | // æ£æ¥è®¢åæ¯å¦è·åæå |
| | | if (order == null) |
| | | { |
| | | return content.Error("è·å订å失败"); |
| | | } |
| | | |
| | | // è·å订åä¸ç第ä¸ä¸ªç©æç¼å· |
| | | var materielInfo = await _materielInfoRepository.QueryFirstAsync(x => x.MaterielID == order.OrderDetailList.MaterialId); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "è·å订åç©æç¼å·", JsonConvert.SerializeObject(materielInfo)); |
| | | |
| | | #region å
å
¥å
åº |
| | | |
| | | // è·åè¯¥ç©æææå¯åºåºåºå |
| | | var filteredStocks = _billGroupStockRepository.GetOutboundStockList(materielInfo.MaterielCode) |
| | | .OrderBy(x => x.CreateDate).ToList(); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "è·åè¯¥ç©æææå¯åºåºåºå", JsonConvert.SerializeObject(filteredStocks)); |
| | | |
| | | #endregion å
å
¥å
åº |
| | | |
| | | #region æ¥æ¾é è¿åºåºå£åºå |
| | | |
| | | // é»è®¤åè¶å¤§è¶é è¿åºåºå£ |
| | | filteredStocks = filteredStocks.OrderByDescending(x => x.LocationInfo.Column).OrderBy(x => x.CreateDate).ToList(); |
| | | |
| | | #endregion æ¥æ¾é è¿åºåºå£åºå |
| | | |
| | | #region 䏿·±ä½ä¼å
æ¥æ¾ï¼åæ¥æ¾ååäºæ·±ä½ |
| | | |
| | | filteredStocks = PickStocks(filteredStocks); |
| | | |
| | | #endregion 䏿·±ä½ä¼å
æ¥æ¾ï¼åæ¥æ¾ååäºæ·±ä½ |
| | | |
| | | // å建任å¡å表 |
| | | var (tasks, updateOrder, stock) = CreateTasks(order, filteredStocks); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "å建任å¡å表ï¼ä¿®æ¹è®¢ååé
æ°éï¼è·ååºåºåé
åºå", |
| | | $"ä»»å¡å表:{JsonConvert.SerializeObject(tasks)},订åå表ï¼{JsonConvert.SerializeObject(updateOrder)},å·²åé
åºåï¼{JsonConvert.SerializeObject(stock)}"); |
| | | |
| | | // æ´æ°åºåç¶æ |
| | | var stockList = UpdateStocks(stock); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "æ´æ°åºåç¶æ", JsonConvert.SerializeObject(stockList)); |
| | | |
| | | // å建订ååºåå表 |
| | | List<Dt_OutOrderAndStock>? orderStocks = CreateOrderStock(stock, updateOrder); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "å建订ååºåå表", JsonConvert.SerializeObject(orderStocks)); |
| | | |
| | | // å¼å§äºå¡ |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // æ´æ°åºå |
| | | var isStockUpdated = _billGroupStockRepository.UpdateNavStock(stockList); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "äºå¡æ´æ°åºå", isStockUpdated); |
| | | |
| | | // æ´æ°è®¢å |
| | | var isOrderUpdated = await BaseDal.OutOrderUpdatedAsync(updateOrder); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "äºå¡æ´æ°è®¢å", isOrderUpdated); |
| | | |
| | | //æ·»å 订ååºå |
| | | var isOrderStockCread = await _outOrderAndStockRepository.AddDataAsync(orderStocks) > 0; |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "äºå¡æ·»å 订ååºå", isOrderStockCread); |
| | | |
| | | // åå»ºä»»å¡ |
| | | var isTaskCreated = await _taskRepository.Create(tasks); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "äºå¡å建任å¡", isTaskCreated); |
| | | |
| | | // æäº¤æåæ»äºå¡ |
| | | if (isStockUpdated && isTaskCreated && isOrderUpdated && isOrderStockCread) |
| | | { |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "æ°æ®å¤çå®æï¼æäº¤äºå¡", "æ åæ°"); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | else |
| | | { |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, "æ·»å æ°æ®åºå¤±è´¥,è¯·æ£æ¥æ°æ®æ¯å¦æ£ç¡®,æ°æ®åæ»", $"æ´æ°åºå:{isStockUpdated},æ´æ°è®¢å:{isOrderUpdated},æ·»å 订ååºå:{isOrderStockCread},å建任å¡:{isTaskCreated}"); |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw new Exception("æ·»å æ°æ®åºå¤±è´¥,è¯·æ£æ¥æ°æ®æ¯å¦æ£ç¡®,æ°æ®åæ»"); |
| | | } |
| | | |
| | | return content.OK(data: orderStocks); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | LogFactory.GetLog("åºåºåé
å¹¶å建任å¡").InfoFormat(true, $"ç³»ç»å¼å¸¸ï¼å¼å¸¸ä¿¡æ¯ï¼{ex.Message}", "æ åæ°"); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä¿®æ¹åºåºè®¢åï¼å¯¼èªä¿®æ¹ï¼ |
| | | /// </summary> |
| | | /// <param name="outOrder"></param> |
| | | /// <returns>æ¯å¦æå</returns> |
| | | public async Task<bool> OutOrderUpdated(Dt_OutOrder outOrder) |
| | | public async Task<bool> OutOrderUpdatedAsync(Dt_OutOrder outOrder) |
| | | { |
| | | return await BaseDal.OutOrderUpdated(outOrder); |
| | | return await BaseDal.OutOrderUpdatedAsync(outOrder); |
| | | } |
| | | |
| | | #region å
é¨è°ç¨ |
| | | |
| | | /// <summary> |
| | | /// 䏿·±ä½ä¼å
æ¥æ¾ |
| | | /// </summary> |
| | | /// <param name="filteredStocks">å¯åºåºåºå</param> |
| | | /// <returns>æåºå¥½çåºåºåºå</returns> |
| | | public List<Dt_BillGroupStock> PickStocks(List<Dt_BillGroupStock> filteredStocks) |
| | | { |
| | | var oneDepthList = filteredStocks.Where(x => x.LocationInfo.Depth == "䏿·±ä½").ToList(); |
| | | var twoDepthList = filteredStocks.Where(x => x.LocationInfo.Depth == "äºæ·±ä½").ToList(); |
| | | |
| | | var results = new List<Dt_BillGroupStock>(); |
| | | foreach (var oneDepth in oneDepthList) |
| | | { |
| | | // å° Line å符串转æ¢ä¸ºæ´æ° |
| | | if (!int.TryParse(oneDepth.LocationInfo.Line, out int oneDepthLine)) |
| | | { |
| | | continue; // å¦æè½¬æ¢å¤±è´¥ï¼è·³è¿è¿ä¸ªè®°å½ |
| | | } |
| | | |
| | | // 计ç®ç¸å¯¹è¡ |
| | | int relativeLine = oneDepthLine % 2 == 1 ? oneDepthLine + 1 : oneDepthLine - 1; |
| | | |
| | | // æ¥æ¾ææ¥è¿çäºæ·±ä½è®°å½ |
| | | var closestTwoDepth = twoDepthList |
| | | .Where(t => t.LocationInfo.Line == relativeLine.ToString()) |
| | | .Where(x => x.LocationInfo.Column == oneDepth.LocationInfo.Column) |
| | | .Where(x => x.LocationInfo.Layer == oneDepth.LocationInfo.Layer) |
| | | .FirstOrDefault(); |
| | | |
| | | // 妿æ¾å°äºææ¥è¿çäºæ·±ä½è®°å½ï¼å°å
¶ä¸ä¸æ·±ä½ä¸èµ·æ·»å å°ç»æå表 |
| | | if (closestTwoDepth != null) |
| | | { |
| | | results.Add(oneDepth); |
| | | results.Add(closestTwoDepth); |
| | | } |
| | | else |
| | | { |
| | | // å¦ææ²¡ææ¾å°ææ¥è¿çäºæ·±ä½è®°å½ï¼å°ä¸æ·±ä½æ·»å å°ç»æå表 |
| | | results.Add(oneDepth); |
| | | } |
| | | } |
| | | return results; |
| | | } |
| | | |
| | | #endregion å
é¨è°ç¨ |
| | | |
| | | #region ç§ææ¹æ³ |
| | | |
| | |
| | | { |
| | | OrderNumber = mainData.GetValueOrDefault("OrderNumber")?.ToString(), |
| | | WarehouseId = mainData.GetValueOrDefault("WarehouseId")?.ObjToInt() ?? 0, |
| | | Status = mainData.GetValueOrDefault("Status")?.ToString(), |
| | | Status = (int)OutOrderTypeEnum.Issue, |
| | | Remarks = mainData.GetValueOrDefault("Remarks")?.ToString(), |
| | | CreateID = 1, |
| | | Creater = mainData.GetValueOrDefault("Creater")?.ToString(), |
| | | CreateDate = mainData.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, |
| | | OrderDate = mainData.GetValueOrDefault("OrderDate")?.ObjToDate() ?? DateTime.Now, |
| | |
| | | { |
| | | MaterialId = item.GetValueOrDefault("MaterialId")?.ObjToInt() ?? 0, |
| | | Quantity = item.GetValueOrDefault("Quantity")?.ObjToInt() ?? 0, |
| | | UnitPrice = item.GetValueOrDefault("UnitPrice")?.ObjToDecimal(), |
| | | TotalPrice = item.GetValueOrDefault("TotalPrice")?.ObjToDecimal(), |
| | | Remarks = item.GetValueOrDefault("Remarks")?.ToString(), |
| | | CreateDate = item.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, |
| | | Creater = item.GetValueOrDefault("Creater")?.ToString(), |
| | | CreateID = 1, |
| | | BatchNumber = item.GetValueOrDefault("BatchNumber")?.ToString(), |
| | | }; |
| | | details.Add(detail); |
| | |
| | | OrderDate = DateTime.Now, |
| | | OrderNumber = production.OrderNumber, |
| | | Remarks = production.Remarks, |
| | | CreateID = 1, |
| | | WarehouseId = production.WarehouseId, |
| | | }; |
| | | } |
| | |
| | | MaterialId = item.MaterialId, |
| | | OutboundQuantity = item.Quantity, |
| | | Remarks = item.Remarks, |
| | | CreateID = 1, |
| | | MaterialName = item.Remarks // ç©æåç§° |
| | | }; |
| | | orderDetails.Add(detail); |
| | |
| | | #region è°æ¨åºåºå |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®ä¸»æ°æ®æå»ºç产åºåºå对象ã |
| | | /// æ ¹æ®ä¸»æ°æ®æå»ºè°æ¨åºåºå对象ã |
| | | /// </summary> |
| | | private Dt_OutOrderTransfer CreateTransferOrder(Dictionary<string, object> mainData) |
| | | { |
| | |
| | | OrderNumber = mainData.GetValueOrDefault("OrderNumber")?.ToString(), |
| | | SourceWarehouseId = mainData.GetValueOrDefault("SourceWarehouseId")?.ObjToInt() ?? 0, |
| | | DestinationWarehouseId = mainData.GetValueOrDefault("WarehouseId")?.ObjToInt() ?? 0, |
| | | Status = mainData.GetValueOrDefault("Status")?.ToString(), |
| | | Status = (int)OutOrderTypeEnum.Allocate, |
| | | CreateID = 1, |
| | | Remarks = mainData.GetValueOrDefault("Remarks")?.ToString(), |
| | | Creater = mainData.GetValueOrDefault("Creater")?.ToString(), |
| | | CreateDate = mainData.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æç»æ°æ®åç产åºåºåIDæå»ºç产åºåºåæç»å表ã |
| | | /// æ ¹æ®æç»æ°æ®åè°æ¨åºåºåIDæå»ºè°æ¨åºåºåæç»å表ã |
| | | /// </summary> |
| | | private List<Dt_OutOrderTransferDetail> CreateTransferDetails(List<Dictionary<string, object>> detailData) |
| | | { |
| | |
| | | { |
| | | MaterialId = item.GetValueOrDefault("MaterialId")?.ObjToInt() ?? 0, |
| | | Quantity = item.GetValueOrDefault("Quantity")?.ObjToInt() ?? 0, |
| | | UnitPrice = item.GetValueOrDefault("UnitPrice")?.ObjToDecimal(), |
| | | TotalPrice = item.GetValueOrDefault("TotalPrice")?.ObjToDecimal(), |
| | | Remarks = item.GetValueOrDefault("Remarks")?.ToString(), |
| | | CreateDate = item.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, |
| | | Creater = item.GetValueOrDefault("Creater")?.ToString(), |
| | | CreateID = 1, |
| | | BatchNumber = item.GetValueOrDefault("BatchNumber")?.ToString(), |
| | | }; |
| | | details.Add(detail); |
| | |
| | | Status = transfer.Status, |
| | | CreateDate = DateTime.Now, |
| | | Creater = transfer.Creater, |
| | | CreateID = 1, |
| | | OrderDate = DateTime.Now, |
| | | OrderNumber = transfer.OrderNumber, |
| | | Remarks = transfer.Remarks, |
| | |
| | | CompletedQuantity = 0, |
| | | CreateDate = item.CreateDate, |
| | | Creater = item.Creater, |
| | | CreateID = 1, |
| | | MaterialId = item.MaterialId, |
| | | OutboundQuantity = item.Quantity, |
| | | Remarks = item.Remarks, |
| | |
| | | |
| | | #endregion è°æ¨åºåºå |
| | | |
| | | #region åºåºåé
|
| | | |
| | | /// <summary> |
| | | /// å建任å¡å表 |
| | | /// </summary> |
| | | /// <param name="order">订å对象</param> |
| | | /// <param name="filteredStocks">çéåçåºåå表</param> |
| | | /// <returns>ãä»»å¡å表,æ´æ°åé
æ°é订å,å建任å¡çåºåã</returns> |
| | | private (List<Dt_Task>, Dt_OutOrder, List<Dt_BillGroupStock>) CreateTasks(Dt_OutOrder order, List<Dt_BillGroupStock> filteredStocks) |
| | | { |
| | | var tasks = new List<Dt_Task>(); |
| | | var stocks = new List<Dt_BillGroupStock>(); |
| | | |
| | | foreach (var stock in filteredStocks) |
| | | { |
| | | // 妿已åé
æ°éè¾¾å°åºåºæ°éï¼åæ¢åé
|
| | | if (order.OrderDetailList.AllocatedQuantity >= order.OrderDetailList.OutboundQuantity) |
| | | break; |
| | | |
| | | // 妿æçä»»å¡å·²åå¨ï¼è·³è¿ |
| | | if (_taskRepository.QueryFirst(x => x.PalletCode == stock.PalletCode) != null) |
| | | continue; |
| | | |
| | | // åå»ºä»»å¡ |
| | | tasks.Add(new Dt_Task |
| | | { |
| | | CreateDate = DateTime.Now, // å建æ¶é´ |
| | | Creater = App.User.UserName, // å建人 |
| | | CurrentAddress = stock.LocationCode, //å½åä½ç½® |
| | | Dispatchertime = DateTime.Now, //è°åº¦æ¶é´ï¼ä»»å¡ä¸åæ¶é´ï¼ |
| | | Grade = 1, // ç级 |
| | | InboundNo = stock.OrderNo, //åæ®ç¼å· |
| | | MaterialNo = stock.MaterialNo, // ç©æå· |
| | | NextAddress = stock.LocationCode, // ä¸ä¸ä½ç½® |
| | | PalletCode = stock.PalletCode, //æçå· |
| | | Remark = stock.Remark, //夿³¨ |
| | | Roadway = stock.LocationInfo.Roadway, //å··é |
| | | SourceAddress = stock.LocationCode, //æ¥æºä½ç½® |
| | | TargetAddress = order.OrderDetailList.Remarks, //ç®æ å°å |
| | | TaskNum = _taskRepository.GetTaskNo().Result, //ä»»å¡å· |
| | | TaskState = (int)OutTaskStatusEnum.OutNew, //ä»»å¡ç¶æ |
| | | TaskType = (int)TaskTypeEnum.Outbound, //ä»»å¡ç±»å |
| | | }); |
| | | |
| | | // æ´æ°å·²åé
æ°é |
| | | order.OrderDetailList.AllocatedQuantity += stock.Dt_BillGroupStockDetailList.Sum(x => x.PalletQuantity).Value; |
| | | stocks.Add(stock); |
| | | } |
| | | |
| | | return (tasks, order, stocks); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ´æ°åºåç¶æ |
| | | /// </summary> |
| | | /// <param name="filteredStocks">çéåçåºåå表</param> |
| | | /// <returns>æ´æ°åçåºåå表</returns> |
| | | private List<Dt_BillGroupStock> UpdateStocks(List<Dt_BillGroupStock> filteredStocks) |
| | | { |
| | | var updatedStocks = new List<Dt_BillGroupStock>(); |
| | | |
| | | foreach (var stock in filteredStocks) |
| | | { |
| | | // æ´æ°åºåç¶æ |
| | | stock.LocationInfo.IsLocked = true; |
| | | stock.LocationInfo.Status = (int)LocationEnum.Lock; |
| | | stock.State = (int)StockStateEmun.åºåºéå®; |
| | | updatedStocks.Add(stock); |
| | | } |
| | | |
| | | return updatedStocks; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建订ååºåå表 |
| | | /// </summary> |
| | | /// <param name="stock">çéåçåºåå表</param> |
| | | /// <param name="order">订å对象</param> |
| | | /// <returns>订ååºåå表</returns> |
| | | private List<Dt_OutOrderAndStock> CreateOrderStock(List<Dt_BillGroupStock> stock, Dt_OutOrder order) |
| | | { |
| | | var orderStocks = new List<Dt_OutOrderAndStock>(); |
| | | foreach (var item in stock) |
| | | { |
| | | orderStocks.Add(new Dt_OutOrderAndStock() |
| | | { |
| | | AllocatedQuantity = order.OrderDetailList.AllocatedQuantity, |
| | | MaterialNo = item.MaterialNo, |
| | | MaterialName = order.OrderDetailList.MaterialName, |
| | | OrderNumber = order.OrderNumber, |
| | | OutboundQuantity = order.OrderDetailList.OutboundQuantity, |
| | | PalletCode = item.PalletCode, |
| | | PalletQuantity = item.Dt_BillGroupStockDetailList.Sum(x => x.PalletQuantity), |
| | | State = item.State, |
| | | BatchNumber = order.OrderDetailList.BatchNumber, |
| | | CompletedQuantity = order.OrderDetailList.CompletedQuantity, |
| | | Creater = App.User.UserName, |
| | | CreateDate = DateTime.Now, |
| | | CreateID = App.User.UserId, |
| | | GroupId = item.GroupId, |
| | | LocationCode = item.LocationInfo.LocationCode, |
| | | OutOrderId = order.Id, |
| | | }); |
| | | } |
| | | |
| | | return orderStocks; |
| | | } |
| | | |
| | | #endregion åºåºåé
|
| | | |
| | | #endregion ç§ææ¹æ³ |
| | | } |