| | |
| | | using log4net.Layout; |
| | | using SkiaSharp; |
| | | using SqlSugar.SplitTableExtensions; |
| | | using System.Data; |
| | | using System.Data; |
| | | using System.Text; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_IBusinessesRepository; |
| | | using WIDESEA_IBusinessServices; |
| | | using WIDESEA_IStorageBasicRepository; |
| | | using WIDESEA_IStorageTaskRepository; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Repository; |
| | | |
| | | namespace WIDESEA_BusinessServices |
| | | { |
| | | public class Dt_InboundOrderService : ServiceBase<Dt_InboundOrder, IDt_InboundOrderRepository>, IDt_InboundOrderService |
| | | { |
| | | #region éæ³¨å
¥æ¥å£ |
| | | #region æ¥å£ |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IDt_InboundOrderDetailRepository _dt_InboundOrderDetailRepository; |
| | | private readonly IDt_InboundOrderProductionRepository _dt_InboundOrderProductionRepository; |
| | |
| | | private readonly IDt_MaterielInfoRepository _dt_MaterielInfoRepository; |
| | | private readonly IDt_WareAreaInfoRepository _dt_WareAreaInfoRepository; |
| | | private readonly IDt_StrategyRepository _dt_StrategyRepository; |
| | | private readonly IDt_LocationInfoRepository _dt_LocationInfoRepository; |
| | | private readonly IDt_LocationRepository _dt_LocationInfoRepository; |
| | | private readonly IDt_TaskRepository _dt_TaskRepository; |
| | | private readonly IDt_Task_HtyRepository _dt_Task_HtyRepository; |
| | | private readonly IDt_TaskExecuteDetailRepository _dt_TaskExecuteDetailRepository; |
| | | private readonly IDt_TypeMappingRepository _dt_TypeMappingRepository; |
| | | |
| | | private readonly IDt_RoadWayInfoRepository _dt_RoadWayInfoRepository; |
| | | #endregion |
| | |
| | | IDt_InboundOrderProductionService dt_InboundOrderProductionService, IDt_InboundOrderProductionRepository dt_InboundOrderProductionRepository, |
| | | IDt_InboundOrderPurchaseRepository dt_InboundOrderPurchaseRepository, IDt_InboundOrderPurchaseService dt_InboundOrderPurchaseService, |
| | | IDt_BillGroupStockDetailRepository dt_BillGroupStockDetailRepository, IDt_MaterielInfoRepository dt_MaterielInfoRepository, |
| | | IDt_WareAreaInfoRepository dt_WareAreaInfoRepository, IDt_StrategyRepository dt_StrategyRepository, IDt_LocationInfoRepository dt_LocationInfoRepository, |
| | | IDt_BillGroupStockRepository dt_BillGroupStockRepository, IDt_TaskRepository dt_TaskRepository, IDt_TaskExecuteDetailRepository dt_TaskExecuteDetailRepository |
| | | , IDt_RoadWayInfoRepository dt_RoadWayInfoRepository) : base(BaseDal) |
| | | IDt_WareAreaInfoRepository dt_WareAreaInfoRepository, IDt_StrategyRepository dt_StrategyRepository, IDt_LocationRepository dt_LocationInfoRepository, |
| | | IDt_BillGroupStockRepository dt_BillGroupStockRepository, IDt_TaskRepository dt_TaskRepository, IDt_TaskExecuteDetailRepository dt_TaskExecuteDetailRepository, |
| | | IDt_RoadWayInfoRepository dt_RoadWayInfoRepository, IDt_TypeMappingRepository dt_TypeMappingRepository, IDt_Task_HtyRepository dt_Task_HtyRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _dt_InboundOrderDetailRepository = dt_InboundOrderDetailRepository; |
| | |
| | | _dt_TaskRepository = dt_TaskRepository; |
| | | _dt_TaskExecuteDetailRepository = dt_TaskExecuteDetailRepository; |
| | | _dt_RoadWayInfoRepository = dt_RoadWayInfoRepository; |
| | | _dt_TypeMappingRepository = dt_TypeMappingRepository; |
| | | _dt_Task_HtyRepository = dt_Task_HtyRepository; |
| | | } |
| | | /// <summary> |
| | | /// 忥ç产å
¥åºåå§åæ®å°æ¬ç³»ç»å
¥åºå表ï¼å¹¶æ´æ°åå§åæ®ç忥æ å¿ |
| | |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> GetInboundOrderFromProductionOrigin() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "ç产å
¥åºå忥-GetInboundOrderFromProductionOrigin", "请æ±", "æ åæ°"); |
| | | |
| | | List<Dt_InboundOrderProduction> Dt_InboundOrderProductionList = await _dt_InboundOrderProductionService.GetDt_InboundOrderProduction((int)SynchronizationFlagEmun.æªåæ¥); |
| | |
| | | #region å
¥åºåå§åæ®ä¸»è¡¨æ ¡éªï¼åæ®è½¬æ¢ä¸ºæ¬ç³»ç»å
¥åºå主表 |
| | | //todoï¼æ¤å¤ååå§åæ®ä¸»è¡¨åæ®µæ ¡éª |
| | | Dt_InboundOrder dt_InboundOrder = new Dt_InboundOrder(); |
| | | dt_InboundOrder.OrderId = Guid.NewGuid(); |
| | | dt_InboundOrder.InboundNo = dt_InboundOrder.OrderId.ToString();//todo:è°ç¨èªå¨çæåå·æ¹æ³ |
| | | dt_InboundOrder.InboundNo = GenerateOrderNumber("R",DateTime.Now); |
| | | dt_InboundOrder.InboundUpperNo = mainItem.ProductionNo; |
| | | dt_InboundOrder.BatchNo = mainItem.BatchNo; |
| | | dt_InboundOrder.InboundDate = mainItem.CreateDate; |
| | |
| | | { |
| | | //todoï¼æ¤å¤ååå§åæ®æç»åæ®µæ ¡éª |
| | | Dt_InboundOrderDetail dt_InboundOrderDetail = new Dt_InboundOrderDetail(); |
| | | dt_InboundOrderDetail.OrderDetailId = Guid.NewGuid(); |
| | | //dt_InboundOrderDetail.OrderDetailId = Guid.NewGuid(); |
| | | dt_InboundOrderDetail.OrderId = mainItem.OrderId; |
| | | dt_InboundOrderDetail.InboundNo = dt_InboundOrder.InboundNo; |
| | | dt_InboundOrderDetail.BatchNo = dt_InboundOrder.BatchNo; |
| | |
| | | //æäº¤äºå¡ |
| | | _unitOfWorkManage.CommitTran(); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "ç产å
¥åºå忥-GetInboundOrderFromProductionOrigin", "ååº", "忥æå"); |
| | | webResponseContent.Error($"忥æå"); |
| | | } |
| | | catch (Exception) |
| | | { |
| | |
| | | mainItem.Remark = ex.Message;//è®°å½å¤±è´¥åå |
| | | _dt_InboundOrderProductionRepository.UpdateData(mainItem); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "ç产å
¥åºå忥-GetInboundOrderFromProductionOrigin", "ååº", $"åæ¥å¤±è´¥{ex.ToString()}"); |
| | | webResponseContent.Error($"åæ¥å¤±è´¥{ex.ToString()}"); |
| | | } |
| | | |
| | | } |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | return webResponseContent; |
| | | } |
| | | |
| | | |
| | |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> GetInboundOrderFromPurchaseOrigin() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "éè´å
¥åºå忥-GetInboundOrderFromProductionOrigin", "请æ±", "æ åæ°"); |
| | | List<Dt_InboundOrderPurchase> Dt_InboundOrderPurchaseList = await _dt_InboundOrderPurchaseService.GetDt_InboundOrderPurchase((int)SynchronizationFlagEmun.æªåæ¥); |
| | | |
| | |
| | | #region å
¥åºåå§åæ®ä¸»è¡¨æ ¡éªï¼åæ®è½¬æ¢ä¸ºæ¬ç³»ç»å
¥åºå主表 |
| | | //todoï¼æ¤å¤ååå§åæ®ä¸»è¡¨åæ®µæ ¡éª |
| | | Dt_InboundOrder dt_InboundOrder = new Dt_InboundOrder(); |
| | | dt_InboundOrder.OrderId = Guid.NewGuid(); |
| | | dt_InboundOrder.InboundNo = dt_InboundOrder.OrderId.ToString();//todo:è°ç¨èªå¨çæåå·æ¹æ³ |
| | | //dt_InboundOrder.OrderId = Guid.NewGuid(); |
| | | dt_InboundOrder.InboundNo = GenerateOrderNumber("R", DateTime.Now); |
| | | dt_InboundOrder.InboundUpperNo = mainItem.PurchaseNo; |
| | | dt_InboundOrder.BatchNo = mainItem.BatchNo; |
| | | dt_InboundOrder.InboundDate = mainItem.CreateDate; |
| | |
| | | { |
| | | //todoï¼æ¤å¤ååå§åæ®æç»åæ®µæ ¡éª |
| | | Dt_InboundOrderDetail dt_InboundOrderDetail = new Dt_InboundOrderDetail(); |
| | | dt_InboundOrderDetail.OrderDetailId = Guid.NewGuid(); |
| | | dt_InboundOrderDetail.OrderId = mainItem.OrderId; |
| | | dt_InboundOrderDetail.InboundNo = dt_InboundOrder.InboundNo; |
| | | dt_InboundOrderDetail.BatchNo = dt_InboundOrder.BatchNo; |
| | | dt_InboundOrderDetail.InboundType = dt_InboundOrder.InboundType; |
| | | dt_InboundOrderDetail.InboundState = dt_InboundOrder.InboundState; |
| | | dt_InboundOrderDetail.MaterialNo = detailItem.ProductionMatcode; |
| | | dt_InboundOrderDetail.MaterialName = detailItem.ProductionName; |
| | | dt_InboundOrderDetail.PreInboundQuantity = detailItem.ReceivableQuantity; |
| | | dt_InboundOrderDetail.MaterialNo = detailItem.PurchaseMatcode; |
| | | dt_InboundOrderDetail.MaterialName = detailItem.PurchaseName; |
| | | dt_InboundOrderDetail.PreInboundQuantity = detailItem.PurchaseQty; |
| | | Dt_InboundOrderDetailList.Add(dt_InboundOrderDetail); |
| | | } |
| | | #endregion |
| | |
| | | _dt_InboundOrderPurchaseRepository.UpdateData(mainItem); |
| | | //æäº¤äºå¡ |
| | | _unitOfWorkManage.CommitTran(); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "éè´å
¥åºå忥-GetInboundOrderFromPurchaseOrigin", "ååº", "忥æå"); |
| | | webResponseContent.Error($"忥æå"); |
| | | } |
| | | catch (Exception) |
| | | { |
| | |
| | | mainItem.Remark = ex.Message;//è®°å½å¤±è´¥åå |
| | | _dt_InboundOrderPurchaseRepository.UpdateData(mainItem); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "éè´å
¥åºå忥-GetInboundOrderFromProductionOrigin", "ååº", $"åæ¥å¤±è´¥{ex.ToString()}"); |
| | | webResponseContent.Error($"åæ¥å¤±è´¥{ex.ToString()}"); |
| | | } |
| | | |
| | | } |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | return webResponseContent; |
| | | } |
| | | |
| | | |
| | | /// 产çå
¥åºä»»å¡ åé
å··é |
| | | /// 1,æ ¹æ®ç©æå±æ§æå®åºåº |
| | | /// 2,æ¥è¯¢æ»¡è¶³æ¡ä»¶ç空é²è´§ä½çå··éï¼ç©ºé²è´§ä½å æ¯ ç©æåºåå æ¯ |
| | | /// <summary> |
| | | /// çæå
¥åºä»»å¡ åé
å··é |
| | | /// </summary> |
| | | /// <param name="plateCode">æçæ¡ç </param> |
| | | /// <param name="SourceAddress">èµ·å§å°å</param> |
| | |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | //ä»»å¡å·ä¸è½éå¤ |
| | | List<Dt_Task> dttasks =_dt_TaskRepository.QueryData(x => x.PalletCode == plateCode && x.TaskState != (int)InTaskStatusEnum.InFinish && x.TaskType >= 200 && x.TaskType <= 203); |
| | | if(dttasks!=null&& dttasks.Count > 0) |
| | | { |
| | | webResponseContent.OK("æçå·åå¨éå¤çå
¥åºä»»å¡ï¼"); |
| | | } |
| | | |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡å¹¶åé
å··é-GenerateInboundTask", "请æ±", $"plateCode:{plateCode}-SourceAddress:{SourceAddress}"); |
| | | List<RoadWayDTO> roadWays = new List<RoadWayDTO>(); |
| | | //æ ¹æ®æçç æ¥è¯¢ç©æç¼ç |
| | | List<Dt_BillGroupStock> billGroup = _dt_BillGroupStockRepository.QueryData(x => x.PalletCode == plateCode && x.State == StockStateEmun.ç»çæå.ToString()); |
| | | List<Dt_InboundOrder> inboundOrders = new List<Dt_InboundOrder>(); |
| | | if (billGroup != null && billGroup.Count == 1) |
| | | Dt_BillGroupStock billGroupStock = new Dt_BillGroupStock(); |
| | | //1,æ ¹æ®æçå·æ¥è¯¢ç»çä¿¡æ¯ |
| | | List<Dt_BillGroupStock> billGroup = Db.Queryable<Dt_BillGroupStock>().Includes(x => x.Dt_BillGroupStockDetailList).Where(x => x.PalletCode == plateCode && x.State == (int)StockStateEmun.ç»çæå).ToList(); |
| | | |
| | | if (billGroup != null && billGroup.Count > 0) |
| | | { |
| | | |
| | | //æ ¹æ®ç©æç¼ç ï¼æ¥è¯¢ç©æå±æ§ |
| | | List<Dt_MaterielInfo> masterielInfoList = _dt_MaterielInfoRepository.QueryData(x => x.MaterielCode == billGroup[0].MaterialNo); |
| | | if (masterielInfoList != null && masterielInfoList.Count > 0) |
| | | billGroupStock = billGroup[0]; |
| | | //æ ¹æ®ç©æç¼ç ï¼æ¥è¯¢ç©æä¿¡æ¯ï¼æå±åºåºï¼ |
| | | List<Dt_MaterielInfo> masterielInfos = _dt_MaterielInfoRepository.QueryData(x => x.MaterielCode == billGroupStock.MaterialNo); |
| | | if (masterielInfos != null && masterielInfos.Count > 0) |
| | | { |
| | | //æ¥è¯¢å··éåé
çç¥ |
| | | List<Dt_Strategy> strategyList = _dt_StrategyRepository.QueryData(x => x.StrategyType == "InboundRoadway" && x.IsPreset == true); |
| | | if (strategyList != null && strategyList.Count > 0) |
| | | //è·å空é²è´§ä½å表 todo:éèèè´§ä½ç¦ç¨çæ
åµ |
| | | var roadWayList = _dt_LocationInfoRepository.QueryData(x => x.Status == (int)LocationEnum.Free && x.WareAreaCode == masterielInfos[0].WareAreaCode.ToString()).GroupBy(x => x.Roadway).OrderByDescending(group => group.Count()).ToList(); |
| | | foreach (var item in roadWayList) |
| | | { |
| | | string strategyName = strategyList[0].StrategyName; |
| | | if (strategyName == "空é²è´§ä½å æ¯")//todoï¼çç¥åç§°ï¼è¿éå¯ä»¥å¨æ°æ®åºä¸é
ç½®çç¥åï¼å¨è¿éæ ¹æ®ä¸åççç¥æ¥å¤ç |
| | | //廿ç¦ç¨çå··é |
| | | Dt_RoadWayInfo roadway = _dt_RoadWayInfoRepository.QueryData(x => x.RoadWayNO == item.Key).FirstOrDefault(); |
| | | if (roadway != null && roadway.IsEnable == false) |
| | | { |
| | | //è·å空é²è´§ä½éåºå表 |
| | | |
| | | var roadWayList = _dt_LocationInfoRepository.QueryData(x => x.Status == (int)LocationStatus.ç©ºé² && x.WareAreaCode == masterielInfoList[0].WareAreaCode.ToString()).GroupBy(x => x.Roadway).OrderByDescending(group => group.Count()).ToList(); // è®¡ç®æ¯ä¸ªåç»çæ°é |
| | | foreach (var item in roadWayList) |
| | | { |
| | | //廿ç¦ç¨çå··é |
| | | Dt_RoadWayInfo roadway= _dt_RoadWayInfoRepository.QueryData(x => x.RoadWayNO == item.Key).FirstOrDefault(); |
| | | if (roadway != null&&roadway.IsEnable==false) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | //æ¥è¯¢å··é任塿° |
| | | int taskCount = _dt_TaskRepository.QueryData(x => x.Roadway == item.Key && (x.TaskState == TaskStatusEmun.æ°å»ºå
¥åºä»»å¡.ToString() || x.TaskState == TaskStatusEmun.AGVå
¥åºæ§è¡ä¸.ToString() || x.TaskState == TaskStatusEmun.è¾é线å
¥åºæ§è¡ä¸.ToString())).Count(); |
| | | RoadWayDTO roadWayDTO = new RoadWayDTO(); |
| | | roadWayDTO.RoadWayNO = item.Key; |
| | | roadWayDTO.FreeLocationCount = item.Count(); |
| | | roadWayDTO.TaskCount = taskCount; |
| | | roadWays.Add(roadWayDTO); |
| | | } |
| | | //æç©ºé²è´§å¤§å°å°æåºï¼ä¼å
å任塿°ä¸º0çï¼åé任塿°å°äºå¹³åæ°ççå··éï¼æåé»è®¤åç¬¬ä¸æ¡ç©ºé²è´§ä½æå¤ç |
| | | decimal taskSum = roadWays.Sum(x => x.TaskCount); |
| | | decimal avgQTY = roadWays.Count() == 0 ? 0 : taskSum / roadWays.Count(); |
| | | string roadWay = ""; |
| | | //todo:æ ¹æ®å··é任塿°åç©ºé²æ°è¿åå··éå· |
| | | foreach (var item in roadWays) |
| | | { |
| | | if (item.TaskCount == 0) |
| | | { |
| | | roadWay = item.RoadWayNO; |
| | | break; |
| | | } |
| | | else if (item.TaskCount <= avgQTY) |
| | | { |
| | | roadWay = item.RoadWayNO; |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | roadWay = roadWays[0].RoadWayNO; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | //æ¥è¯¢å¯¹åºçå
¥åºå,ç¨äºåå¼å
¥åºåç±»å |
| | | inboundOrders = BaseDal.QueryData(x => x.InboundNo == billGroup[0].InboundNo); |
| | | try |
| | | { |
| | | //å¼å¯äºç© |
| | | _unitOfWorkManage.BeginTran(); |
| | | //çæä»»å¡ï¼å¹¶è¿åä»»å¡ |
| | | Dt_Task dt_Task = new Dt_Task(); |
| | | dt_Task.TaskId = Guid.NewGuid(); |
| | | dt_Task.TaskNum = GetTaskNo(); |
| | | dt_Task.PalletCode = plateCode; |
| | | dt_Task.InboundNo = billGroup[0].InboundNo; |
| | | dt_Task.Roadway = roadWay; |
| | | dt_Task.TaskType = inboundOrders[0].InboundType; |
| | | dt_Task.TaskState = TaskStatusEmun.æ°å»ºå
¥åºä»»å¡.ToString(); |
| | | dt_Task.MaterialNo = billGroup[0].MaterialNo; |
| | | dt_Task.SourceAddress = SourceAddress; |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | _dt_TaskRepository.AddData(dt_Task); |
| | | //åå§å任塿§è¡æç» |
| | | List<Dt_TaskExecuteDetail> dt_TaskExecuteDetails = new List<Dt_TaskExecuteDetail>(); |
| | | Dt_TaskExecuteDetail dt_TaskExecuteDetail = new Dt_TaskExecuteDetail(); |
| | | dt_TaskExecuteDetail.TaskDetailId = Guid.NewGuid(); |
| | | dt_TaskExecuteDetail.TaskId = dt_Task.TaskId; |
| | | dt_TaskExecuteDetail.TaskNum = dt_Task.TaskNum.ToString(); |
| | | dt_TaskExecuteDetail.TaskState = dt_Task.TaskState; |
| | | dt_TaskExecuteDetail.IsManual = false; |
| | | dt_TaskExecuteDetails.Add(dt_TaskExecuteDetail); |
| | | _dt_TaskExecuteDetailRepository.AddData(dt_TaskExecuteDetail); |
| | | dt_Task.Dt_TaskExecuteDetailList = dt_TaskExecuteDetails; |
| | | |
| | | //æäº¤äºç© |
| | | _unitOfWorkManage.CommitTran(); |
| | | webResponseContent.OK("è·åå··éå·æåï¼", dt_Task); |
| | | |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | |
| | | continue; |
| | | } |
| | | //æ¥è¯¢å··éæ°å»ºç忣卿§è¡ä¸ç任塿° |
| | | int taskCount = _dt_TaskRepository.QueryData(x => x.Roadway == item.Key && (x.TaskState == (int)InTaskStatusEnum.InNew || x.TaskState == (int)InTaskStatusEnum.AGV_InExecuting || x.TaskState == (int)InTaskStatusEnum.Line_InExecuting || x.TaskState == (int)InTaskStatusEnum.SC_InExecuting)).Count(); |
| | | RoadWayDTO roadWayDTO = new RoadWayDTO(); |
| | | roadWayDTO.RoadWayNO = item.Key; |
| | | roadWayDTO.FreeLocationCount = item.Count(); |
| | | roadWayDTO.TaskCount = taskCount; |
| | | roadWayDTO.PreFreeLocationCount = roadWayDTO.FreeLocationCount - roadWayDTO.TaskCount; |
| | | roadWays.Add(roadWayDTO); |
| | | } |
| | | else |
| | | if(roadWays.Count == 0) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡å¹¶åé
å··é-GenerateInboundTask", "ååº", $"plateCode:{plateCode}-æ æ¤ç©æåºæ¬ä¿¡æ¯ï¼è¯·é
ç½®åé
å··éçç¥ï¼"); |
| | | webResponseContent.Error($"plateCode:{plateCode}-æ æ¤ç©æåºæ¬ä¿¡æ¯ï¼è¯·é
ç½®åé
å··éçç¥ï¼"); |
| | | webResponseContent.OK("æªè·åå°å··éå·å表ï¼"); |
| | | } |
| | | //æ ¹æ®é¢è®¡è´§ä½ç©ºé²æ°ï¼è´§ä½ç©ºé²æ°-å··éå½å任塿°),è·å项éå· |
| | | string roadWay = roadWays.OrderByDescending(roadway => roadway.PreFreeLocationCount).FirstOrDefault().RoadWayNO; |
| | | //æ¥è¯¢å¯¹åºçå
¥åºå,ç¨äºåå¼å
¥åºåç±»å |
| | | inboundOrders = BaseDal.QueryData(x => x.InboundNo == billGroupStock.OrderNo); |
| | | if (inboundOrders.Count == 0) |
| | | { |
| | | return webResponseContent.Error($"æªæ¥è¯¢å°å½åæçå·ä¸º{plateCode} 对åºçå
¥åºåï¼"); |
| | | } |
| | | //éè¿åæ®ç±»åè·åä»»å¡ç±»å |
| | | List<Dt_TypeMapping> typeMappings = _dt_TypeMappingRepository.QueryData(x => x.OrderType == inboundOrders[0].InboundType).ToList(); |
| | | if (typeMappings.Count == 0) |
| | | { |
| | | return webResponseContent.Error($"æªé
ç½®åæ®ç±»å对åºçä»»å¡ç±»åï¼"); |
| | | } |
| | | try |
| | | { |
| | | //çæä»»å¡ |
| | | Dt_Task dt_Task = new Dt_Task(); |
| | | #region çæä»»å¡ |
| | | dt_Task.TaskNum = GetTaskNo(); |
| | | dt_Task.PalletCode = plateCode; |
| | | dt_Task.GroupID = billGroupStock.GroupId; |
| | | dt_Task.InboundNo = billGroupStock.OrderNo; |
| | | dt_Task.Roadway = roadWay; |
| | | dt_Task.TaskType = typeMappings[0].OrderType; |
| | | dt_Task.TaskState = (int)InTaskStatusEnum.InNew; |
| | | dt_Task.MaterialNo = billGroupStock.MaterialNo; |
| | | dt_Task.SourceAddress = SourceAddress; |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | #endregion |
| | | _dt_TaskRepository.AddData(dt_Task); |
| | | //å¼å¯äºç© |
| | | _unitOfWorkManage.BeginTran(); |
| | | _dt_TaskRepository.AddData(dt_Task); |
| | | //åºåç¶æ æ¹ä¸º å
¥åºç¡®è®¤ç¶æ |
| | | billGroupStock.State = (int)StockStateEmun.å
¥åºç¡®è®¤; |
| | | _dt_BillGroupStockRepository.UpdateData(billGroupStock); |
| | | //æäº¤äºç© |
| | | _unitOfWorkManage.CommitTran(); |
| | | webResponseContent.OK("è·åå··éå·æåï¼", dt_Task); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | } |
| | | } |
| | | catch(Exception ex) |
| | | catch (Exception ex) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡å¹¶åé
å··é-GenerateInboundTask", "ååº", $"å½åæçå·ä¸º{plateCode}è·å失败{ex.ToString()}"); |
| | | webResponseContent.Error($"å½åæçå·ä¸º{plateCode}è·å失败{ex.ToString()}"); |
| | | |
| | | } |
| | | |
| | | return webResponseContent.OK(); |
| | | |
| | | return webResponseContent; |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// çæå
¥åºä»»å¡(å
¥åºç¡®è®¤) |
| | | /// </summary> |
| | | /// <param name="plateCode">æçæ¡ç </param> |
| | | /// <param name="SourceAddress">èµ·å§å°å</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GenerateInboundTask(string plateCode) |
| | | { |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡-GenerateInboundTask", "请æ±", $"plateCode:{plateCode}"); |
| | | List<RoadWayDTO> roadWays = new List<RoadWayDTO>(); |
| | | List<Dt_InboundOrder> inboundOrders = new List<Dt_InboundOrder>(); |
| | | Dt_BillGroupStock billGroupStock = new Dt_BillGroupStock(); |
| | | //1,æ ¹æ®æçå·æ¥è¯¢ç»çä¿¡æ¯ |
| | | List<Dt_BillGroupStock> billGroup = Db.Queryable<Dt_BillGroupStock>().Includes(x => x.Dt_BillGroupStockDetailList).Where(x => x.PalletCode == plateCode && x.State == (int)StockStateEmun.ç»çæå).ToList(); |
| | | if (billGroup != null && billGroup.Count > 0) |
| | | { |
| | | //æ¥è¯¢å¯¹åºçå
¥åºå,ç¨äºåå¼å
¥åºåç±»å |
| | | inboundOrders = BaseDal.QueryData(x => x.InboundNo == billGroupStock.OrderNo); |
| | | if(inboundOrders.Count == 0) |
| | | { |
| | | return webResponseContent.Error($"æªæ¥è¯¢å°å½åæçå·ä¸º{plateCode} 对åºçå
¥åºåï¼"); |
| | | } |
| | | //éè¿åæ®ç±»åè·åä»»å¡ç±»å |
| | | List<Dt_TypeMapping> typeMappings= _dt_TypeMappingRepository.QueryData(x => x.OrderType == inboundOrders[0].InboundType).ToList(); |
| | | if (typeMappings.Count == 0) |
| | | { |
| | | return webResponseContent.Error($"æªé
ç½®åæ®ç±»å对åºçä»»å¡ç±»åï¼"); |
| | | } |
| | | try |
| | | { |
| | | //çæä»»å¡ |
| | | Dt_Task dt_Task = new Dt_Task(); |
| | | dt_Task.TaskNum = GetTaskNo(); |
| | | dt_Task.PalletCode = plateCode; |
| | | dt_Task.GroupID = billGroupStock.GroupId; |
| | | dt_Task.InboundNo = billGroupStock.OrderNo; |
| | | dt_Task.TaskType = typeMappings[0].OrderType; |
| | | dt_Task.TaskState = (int)InTaskStatusEnum.InNew; |
| | | dt_Task.MaterialNo = billGroupStock.MaterialNo; |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | _dt_TaskRepository.AddData(dt_Task); |
| | | //å¼å¯äºç© |
| | | _unitOfWorkManage.BeginTran(); |
| | | _dt_TaskRepository.AddData(dt_Task); |
| | | //åºåç¶æ æ¹ä¸º å
¥åºç¡®è®¤ç¶æ |
| | | billGroupStock.State = (int)StockStateEmun.å
¥åºç¡®è®¤; |
| | | _dt_BillGroupStockRepository.UpdateData(billGroupStock); |
| | | //æäº¤äºç© |
| | | _unitOfWorkManage.CommitTran(); |
| | | webResponseContent.OK("çæä»»å¡æåï¼", dt_Task); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡-GenerateInboundTask", "ååº", $"å½åæçå·ä¸º{plateCode}è·å失败{ex.ToString()}"); |
| | | webResponseContent.Error($"å½åæçå·ä¸º{plateCode} çæä»»å¡å¤±è´¥ï¼{ex.ToString()}"); |
| | | |
| | | } |
| | | |
| | | return webResponseContent; |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// ç³è¯·åé
项é |
| | | /// </summary> |
| | | /// <param name="plateCode">æçæ¡ç </param> |
| | | /// <param name="SourceAddress">èµ·å§å°å</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetInboundRoadway(string plateCode, string SourceAddress) |
| | | { |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "ç³è¯·åé
项é-GetInboundRoadway", "请æ±", $"plateCode:{plateCode}-SourceAddress:{SourceAddress}"); |
| | | List<RoadWayDTO> roadWays = new List<RoadWayDTO>(); |
| | | List<Dt_InboundOrder> inboundOrders = new List<Dt_InboundOrder>(); |
| | | Dt_BillGroupStock billGroupStock = new Dt_BillGroupStock(); |
| | | Dt_Task dt_Task = new Dt_Task(); |
| | | List<Dt_Task> dt_TaskList = _dt_TaskRepository.QueryData(x => x.PalletCode == plateCode&&x.TaskState== (int)InTaskStatusEnum.InNew); |
| | | if (dt_TaskList != null && dt_TaskList.Count == 0) |
| | | { |
| | | return webResponseContent.OK("æªæ¥è¯¢å°ç¸å
³ä»»å¡ï¼"); |
| | | } |
| | | else |
| | | { |
| | | dt_Task = dt_TaskList.FirstOrDefault(); |
| | | } |
| | | //1,æ ¹æ®æçå·æ¥è¯¢ç»çä¿¡æ¯ |
| | | List<Dt_BillGroupStock> billGroup = Db.Queryable<Dt_BillGroupStock>().Includes(x => x.Dt_BillGroupStockDetailList).Where(x => x.PalletCode == plateCode && x.State == (int)StockStateEmun.ç»çæå).ToList(); |
| | | |
| | | if (billGroup != null && billGroup.Count > 0) |
| | | { |
| | | billGroupStock = billGroup[0]; |
| | | //æ ¹æ®ç©æç¼ç ï¼æ¥è¯¢ç©æä¿¡æ¯ï¼æå±åºåºï¼ |
| | | List<Dt_MaterielInfo> masterielInfos = _dt_MaterielInfoRepository.QueryData(x => x.MaterielCode == billGroupStock.MaterialNo); |
| | | if (masterielInfos != null && masterielInfos.Count > 0) |
| | | { |
| | | //è·å空é²è´§ä½å表 |
| | | var roadWayList = _dt_LocationInfoRepository.QueryData(x => x.Status == (int)LocationEnum.Free && x.WareAreaCode == masterielInfos[0].WareAreaCode.ToString()).GroupBy(x => x.Roadway).OrderByDescending(group => group.Count()).ToList(); |
| | | foreach (var item in roadWayList) |
| | | { |
| | | //廿ç¦ç¨çå··é |
| | | Dt_RoadWayInfo roadway = _dt_RoadWayInfoRepository.QueryData(x => x.RoadWayNO == item.Key).FirstOrDefault(); |
| | | if (roadway != null && roadway.IsEnable == false) |
| | | { |
| | | continue; |
| | | } |
| | | //æ¥è¯¢å··éæ°å»ºç忣卿§è¡ä¸ç任塿° |
| | | int taskCount = _dt_TaskRepository.QueryData(x => x.Roadway == item.Key && (x.TaskState == (int)InTaskStatusEnum.InNew || x.TaskState == (int)InTaskStatusEnum.AGV_InExecuting || x.TaskState == (int)InTaskStatusEnum.Line_InExecuting || x.TaskState == (int)InTaskStatusEnum.SC_InExecuting)).Count(); |
| | | RoadWayDTO roadWayDTO = new RoadWayDTO(); |
| | | roadWayDTO.RoadWayNO = item.Key; |
| | | roadWayDTO.FreeLocationCount = item.Count(); |
| | | roadWayDTO.TaskCount = taskCount; |
| | | roadWayDTO.PreFreeLocationCount = roadWayDTO.FreeLocationCount - roadWayDTO.TaskCount; |
| | | roadWays.Add(roadWayDTO); |
| | | } |
| | | if (roadWays.Count == 0) |
| | | { |
| | | return webResponseContent.OK("æªè·åå°æ»¡è¶³æ¡ä»¶çå··éå·å表ï¼"); |
| | | } |
| | | //æ ¹æ®é¢è®¡è´§ä½ç©ºé²æ°ï¼è´§ä½ç©ºé²æ°-å··éå½å任塿°),è·å项éå· |
| | | string roadWay = roadWays.OrderByDescending(roadway => roadway.PreFreeLocationCount).FirstOrDefault().RoadWayNO; |
| | | //æ¥è¯¢å¯¹åºçå
¥åºå,ç¨äºåå¼å
¥åºåç±»å |
| | | inboundOrders = BaseDal.QueryData(x => x.InboundNo == billGroupStock.OrderNo); |
| | | try |
| | | { |
| | | //æ´æ°ä»»å¡ç¶æãå··éå· |
| | | dt_Task.TaskState = (int)InTaskStatusEnum.AGV_InExecuting; |
| | | dt_Task.SourceAddress = SourceAddress; |
| | | dt_Task.Roadway = roadWay; |
| | | _dt_TaskRepository.Update(dt_Task); |
| | | webResponseContent.OK("è·åå··éå·æåï¼", dt_Task); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "ç³è¯·åé
项é-GetInboundRoadway", "ååº", $"plateCode:{plateCode}-æ æ¤ç©æåºæ¬ä¿¡æ¯ï¼ç©æç¼å·ï¼{billGroup[0].MaterialNo}"); |
| | | webResponseContent.Error($"plateCode:{plateCode}-æ æ¤ç©æåºæ¬ä¿¡æ¯ï¼ç©æç¼å·ï¼{billGroup[0].MaterialNo}"); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "产çå
¥åºä»»å¡å¹¶åé
å··é-GenerateInboundTask", "ååº", $"å½åæçå·ä¸º{plateCode}è·å失败{ex.ToString()}"); |
| | | webResponseContent.Error($"å½åæçå·ä¸º{plateCode}è·åå··éå·å¤±è´¥{ex.ToString()}"); |
| | | |
| | | } |
| | | |
| | | return webResponseContent; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®ä»»å¡å·è·åè´§ä½å· |
| | | /// ç³è¯·åé
è´§ä½ |
| | | /// </summary> |
| | | /// <param name="taskNo">ä»»å¡å·</param> |
| | | /// <returns></returns> |
| | |
| | | if (dt_TaskList != null && dt_TaskList.Count > 0) |
| | | { |
| | | //æ ¹æ®å··éæ¥è¯¢è´§ä½å· |
| | | List<Dt_LocationInfo> dt_LocationInfoList = _dt_LocationInfoRepository.QueryData(x => x.Roadway == dt_TaskList[0].Roadway && x.Status == (int)LocationStatus.空é²).ToList(); |
| | | //æ¥è¯¢ç¬¦åè¦æ±çè´§ä½å· |
| | | #region æ¥è¯¢å¯ç¨è´§ä½ |
| | | List<Dt_LocationInfo> dt_LocationInfoList = _dt_LocationInfoRepository.QueryData(x => x.Roadway == dt_TaskList[0].Roadway && x.Status == (int)LocationEnum.Free).ToList(); |
| | | List<Dt_LocationInfo> dt_LocationInfoResult = new List<Dt_LocationInfo>(); |
| | | foreach (Dt_LocationInfo dt_LocationInfo in dt_LocationInfoList) |
| | | { |
| | | //å¦ææ·±åº¦ä¸º2ï¼åé夿坹åºç1æ·±ä½(åï¼å±ä¸æ ·ï¼æä¸ºå¥æ°ï¼å½åææ°-1),妿1æ·±ä½ç©ºé²ï¼å符åè¦æ± |
| | | if (dt_LocationInfo.Depth == "2") |
| | | { |
| | | Dt_LocationInfo locationItem = _dt_LocationInfoRepository.QueryData(x => x.Layer == dt_LocationInfo.Layer && x.Column == dt_LocationInfo.Column && x.Line == (int.Parse(dt_LocationInfo.Line.ToString()) - 1).ToString() && x.Status == (int)LocationStatus.空é²).FirstOrDefault(); |
| | | Dt_LocationInfo locationItem = _dt_LocationInfoRepository.QueryData(x => x.Layer == dt_LocationInfo.Layer && x.Column == dt_LocationInfo.Column && x.Line == (int.Parse(dt_LocationInfo.Line.ToString()) - 1).ToString() && x.Status == (int)(int)LocationEnum.Free).FirstOrDefault(); |
| | | if (locationItem != null) |
| | | { |
| | | dt_LocationInfoResult.Add(dt_LocationInfo); |
| | |
| | | } |
| | | else//å¦ææ·±åº¦ä¸º1ï¼åé夿坹åºç2æ·±ä½(åï¼å±ä¸æ ·ï¼æä¸ºå¶æ°ï¼å½åææ°+1),妿2æ·±ä½æè´§ï¼å符åè¦æ± |
| | | { |
| | | Dt_LocationInfo locationItem = _dt_LocationInfoRepository.QueryData(x => x.Layer == dt_LocationInfo.Layer && x.Column == dt_LocationInfo.Column && x.Line == (int.Parse(dt_LocationInfo.Line.ToString()) + 1).ToString() && x.Status == (int)LocationStatus.æè´§).FirstOrDefault(); |
| | | Dt_LocationInfo locationItem = _dt_LocationInfoRepository.QueryData(x => x.Layer == dt_LocationInfo.Layer && x.Column == dt_LocationInfo.Column && x.Line == (int.Parse(dt_LocationInfo.Line.ToString()) + 1).ToString() && x.Status == (int)LocationEnum.InStock).FirstOrDefault(); |
| | | if (locationItem != null) |
| | | { |
| | | dt_LocationInfoResult.Add(dt_LocationInfo); |
| | | } |
| | | } |
| | | } |
| | | //todoï¼å¯¹ç¬¦åè¦æ±çè´§ä½ï¼è¿è¡çé,å
ææ·±åº¦éåºï¼æ·±åº¦ä¼å
ï¼ï¼åææååºï¼å°±è¿ååï¼ï¼åæå±æ°ï¼å
ä¸åä¸ï¼ |
| | | #endregion |
| | | //对符åè¦æ±çè´§ä½ï¼è¿è¡çé,å
ææ·±åº¦éåºï¼æ·±åº¦ä¼å
ï¼ï¼åæåååºï¼å°±è¿ååï¼ï¼åæå±æ°ï¼å
ä¸åä¸ï¼ |
| | | //todo: å 夿 dt_LocationInfoResult>=2 å°äºç´æ¥æç¤ºå½å空é²è´§ä½ä¸è¶³ |
| | | if(dt_LocationInfoResult.Count<2) |
| | | { |
| | | return webResponseContent.OK("å½å空é²è´§ä½ä¸è¶³!"); |
| | | } |
| | | dt_LocationInfoResult.OrderByDescending(x => x.Depth).ThenBy(x => x.Column).ThenBy(x => x.Layer).ToList(); |
| | | List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>(); |
| | | Dt_Task dt_task = dt_TaskList[0]; |
| | |
| | | if (locationResult.Depth == "2") |
| | | { |
| | | locationResult.IsLocked = true; |
| | | locationResult.Status = (int)LocationStatus.éå®; |
| | | locationResult.Status = (int)LocationEnum.Lock; |
| | | //è·å对åºç1æ·±ä½è´§ä½ä¿¡æ¯ |
| | | Dt_LocationInfo location = _dt_LocationInfoRepository.QueryData(x => x.Layer == locationResult.Layer && x.Column == locationResult.Column && x.Line == (int.Parse(locationResult.Line.ToString()) - 1).ToString() && x.Status == (int)LocationStatus.空é²).FirstOrDefault(); |
| | | Dt_LocationInfo location = dt_LocationInfoResult.Where(x => x.Layer == locationResult.Layer && x.Column == locationResult.Column && x.Line == (int.Parse(locationResult.Line.ToString()) - 1).ToString() && x.Status == (int)LocationEnum.Free).FirstOrDefault(); |
| | | if (location != null) |
| | | { |
| | | location.IsLocked = true; |
| | | location.Status = (int)LocationStatus.éå®; |
| | | location.Status = (int)LocationEnum.Lock; |
| | | dt_Locations.Add(locationResult);//1æ·±ä½ |
| | | dt_Locations.Add(location);//2æ·±ä½ |
| | | |
| | | dt_task.LocationCode = locationResult.LocationCode; |
| | | dt_task.LocationCode = locationResult.LocationCode;//åé
对åºçè´§ä½ |
| | | break; |
| | | } |
| | | else |
| | |
| | | else |
| | | { |
| | | locationResult.IsLocked = true; |
| | | locationResult.Status = (int)LocationStatus.éå®; |
| | | locationResult.Status = (int)LocationEnum.Lock; |
| | | dt_Locations.Add(locationResult); |
| | | dt_task.LocationCode = locationResult.LocationCode; |
| | | dt_task.LocationCode = locationResult.LocationCode;// åé
对åºçè´§ä½ |
| | | |
| | | break; |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /// <summary> |
| | | /// å
¥åºä»»å¡å®æå¤ç |
| | | /// å
¥åºä»»å¡å®æ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent FinishInboundTask(int taskNum) |
| | |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | //1ï¼ä¿®æ¹è´§ä½ç¶æ |
| | | //ä¿®æ¹è´§ä½ç¶æ |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡å®æå¤ç-FinishInboundTask", "请æ±", $"taskNum-{taskNum}"); |
| | | List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>(); |
| | | List<Dt_InboundOrderDetail> dt_InboundOrderDetails = new List<Dt_InboundOrderDetail>(); |
| | | List<Dt_Task> dt_TaskList = _dt_TaskRepository.QueryData(x => x.TaskNum == taskNum); |
| | | if (dt_TaskList != null && dt_TaskList.Count > 0) |
| | | { |
| | |
| | | if (locationinfo != null && locationinfo.Depth == "2") |
| | | { |
| | | //è·å对åºç1æ·±ä½è´§ä½ä¿¡æ¯ |
| | | Dt_LocationInfo location = _dt_LocationInfoRepository.QueryData(x => x.Layer == locationinfo.Layer && x.Column == locationinfo.Column && x.Line == (int.Parse(locationinfo.Line.ToString()) - 1).ToString() && x.Status == (int)LocationStatus.éå®).FirstOrDefault(); |
| | | Dt_LocationInfo location = _dt_LocationInfoRepository.QueryData(x => x.Layer == locationinfo.Layer && x.Column == locationinfo.Column && x.Line == (int.Parse(locationinfo.Line.ToString()) - 1).ToString() && x.Status == (int)LocationEnum.Lock).FirstOrDefault(); |
| | | if (location != null) |
| | | { |
| | | locationinfo.Status = (int)LocationStatus.空é²; |
| | | locationinfo.Status = (int)LocationEnum.Free; |
| | | locationinfo.IsLocked = false; |
| | | location.Status = (int)LocationStatus.空é²; |
| | | location.Status = (int)LocationEnum.Free; |
| | | location.IsLocked = false; |
| | | locationinfos.Add(locationinfo); |
| | | locationinfos.Add(location); |
| | |
| | | } |
| | | else |
| | | { |
| | | locationinfo.Status = (int)LocationStatus.空é²; |
| | | locationinfo.Status = (int)LocationEnum.Free; |
| | | locationinfo.IsLocked = false; |
| | | locationinfos.Add(locationinfo); |
| | | } |
| | | } |
| | | dt_TaskList[0].TaskState = TaskStatusEmun.å
¥åºä»»å¡å®æ.ToString(); |
| | | //æ´æ°ä»»å¡ç¶æ |
| | | dt_TaskList[0].TaskState =(int) InTaskStatusEnum.InFinish; |
| | | } |
| | | else |
| | | { |
| | | return webResponseContent.Error($"æªæ¥è¯¢å°è¯¥å
¥åºä»»å¡è®°å½ï¼ä»»å¡å·:{taskNum}"); |
| | | } |
| | | |
| | | //æ´æ°åºåä¿¡æ¯ï¼è´§ä½ä¸æçå·ç»å®ï¼,ç¶ææ¹ä¸ºå
¥åºå®æ |
| | | Dt_BillGroupStock billGroupStock = _dt_BillGroupStockRepository.QueryData(x => x.GroupId == dt_TaskList[0].GroupID).FirstOrDefault(); |
| | | decimal? palletQuantity = null; |
| | | if (billGroupStock != null) |
| | | { |
| | | billGroupStock.LocationCode = dt_TaskList[0].LocationCode; |
| | | billGroupStock.State = (int)StockStateEmun.å
¥åºå®æ; |
| | | } |
| | | |
| | | Dt_InboundOrder inboundOrder = BaseDal.QueryData(x => x.InboundNo == billGroupStock.OrderNo).FirstOrDefault(); |
| | | |
| | | if (inboundOrder != null) |
| | | { |
| | | if (billGroupStock.Dt_BillGroupStockDetailList != null && billGroupStock.Dt_BillGroupStockDetailList.Count > 0) |
| | | { |
| | | //å½åä»»å¡å®æå
¥åºæ°éï¼å½åæçæç»æ°éï¼ |
| | | //å¤ä¸ªæç»å
¥åºåæ®åç»ç»è®¡ |
| | | var billStockGroups = billGroupStock.Dt_BillGroupStockDetailList.GroupBy(x => x.OrderDetailId).Select(g => new { OrderDetailId = g.Key, PalletQuantity = g.Sum(x => x.PalletQuantity) }).ToList(); |
| | | |
| | | foreach (var kvp in billStockGroups) |
| | | { |
| | | //æ¥è¯¢å
¥åºåæç» |
| | | Dt_InboundOrderDetail inboundOrderDetail = new Dt_InboundOrderDetail(); |
| | | inboundOrderDetail = _dt_InboundOrderDetailRepository.QueryFirst(x => x.OrderDetailId == kvp.OrderDetailId); |
| | | if (inboundOrderDetail != null) |
| | | { |
| | | palletQuantity = kvp.PalletQuantity; |
| | | //æ´æ°å
¥åºåæç»å
¥åºæ°é(ç´¯å ) |
| | | inboundOrderDetail.ActualInboundQuantity = string.IsNullOrEmpty(inboundOrderDetail.ActualInboundQuantity) ? palletQuantity.ToString() : (Convert.ToDecimal(inboundOrderDetail.ActualInboundQuantity) + palletQuantity).ToString(); |
| | | //æ´æ°å
¥åºåæç»ç¶æä¸ºå·²å
¥åº |
| | | |
| | | if (Convert.ToDecimal(inboundOrderDetail.ActualInboundQuantity) == Convert.ToDecimal(inboundOrderDetail.PreInboundQuantity)) |
| | | { |
| | | inboundOrderDetail.InboundState = (int)InboundStateEmun.å
¥åºå®æ; |
| | | } |
| | | else |
| | | { |
| | | inboundOrderDetail.InboundState = (int)InboundStateEmun.å
¥åºä¸;//䏿¡å
¥åºåæ®æç»å¯è½ä¼å¯¹åºå¤ä¸ªæçï¼ææçä»»å¡å®æåï¼åæ¹ç¶æä¸ºå
¥åºä¸ã |
| | | } |
| | | |
| | | dt_InboundOrderDetails.Add(inboundOrderDetail); |
| | | } |
| | | else |
| | | { |
| | | return webResponseContent.Error($"æªæ¥è¯¢å°å¯¹åºçå
¥åºæç»ï¼å
¥åºæç»ID:{kvp.OrderDetailId}"); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | if (dt_Locations.Count > 0) |
| | | { |
| | |
| | | _unitOfWorkManage.BeginTran(); |
| | | //1,æ´æ°è´§ä½ç¶æ |
| | | _dt_LocationInfoRepository.UpdateData(dt_Locations); |
| | | //2ï¼æ´æ°ä»»å¡ç¶æ |
| | | //2ï¼æ´æ°ä»»å¡ç¶æï¼todo:ç´æ¥æå
¥åå²è¡¨ä¸ï¼ä¸ç¨åæ´æ°ä»»å¡è¡¨ä¸çç¶æï¼ |
| | | _dt_TaskRepository.UpdateData(dt_TaskList[0]); |
| | | //3,æ´æ°åºåä¿¡æ¯ï¼è´§ä½ä¸æçå·ç»å®ï¼,ç¶ææ¹ä¸ºå
¥åºå®æ |
| | | _dt_BillGroupStockRepository.UpdateData(billGroupStock); |
| | | //4,æ´æ°å
¥åºæç»åæ®ä¿¡æ¯ï¼å·²å
¥åºæ°éåç¶æ Dt_InboundOrderDetail ä¸çActualInboundQuantityï¼å®é
å
¥åºæ°éï¼ |
| | | _dt_InboundOrderDetailRepository.UpdateData(dt_InboundOrderDetails); |
| | | //5,æ´æ°å
¥åºåæ®ä¸»è¡¨ç¶æ Dt_InboundOrder ææçå
¥åºæç»å®æå
¥åºåï¼æ´ä¸ªåæ®ä¸»è¡¨æ¹ä¸ºå
¥åºå®æã |
| | | List<Dt_InboundOrderDetail> inboundOrders = inboundOrder.Dt_InboundOrderDetailList.Where(x => x.InboundState != (int)InboundStateEmun.å
¥åºå®æ).ToList(); |
| | | if(inboundOrders.Count == 0) |
| | | { |
| | | inboundOrder.InboundState =(int)InboundStateEmun.å
¥åºå®æ; |
| | | } |
| | | BaseDal.UpdateData(inboundOrder); |
| | | |
| | | _unitOfWorkManage.CommitTran();//æäº¤äºç© |
| | | webResponseContent.OK("è·åæå", dt_TaskList[0]); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å
¥åºä»»å¡åæ¶ |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CancelInboundTask(int taskNum) |
| | | { |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡åæ¶-CancelInboundTask", "请æ±", $"taskNum-{taskNum}"); |
| | | Dt_BillGroupStock dt_billGroupStock = new Dt_BillGroupStock(); |
| | | Dt_Task_Hty dt_Task_Hty = new Dt_Task_Hty(); |
| | | Dt_LocationInfo dt_locationInfo = new Dt_LocationInfo(); |
| | | //1,æ¥è¯¢æ¯å¦åå¨è¯¥ä»»å¡ï¼å¹¶ä¸ä»»å¡ç¶ææ¯ï¼200 æ°å»ºå
¥åºä»»å¡ |
| | | Dt_Task dt_Task = _dt_TaskRepository.QueryFirst(x => x.TaskNum == taskNum&&x.TaskState==(int) InTaskStatusEnum.InNew); |
| | | if (dt_Task != null) |
| | | { |
| | | //2,è¿åç»çç¶æä¸ºï¼1 ç»çæå |
| | | dt_billGroupStock = _dt_BillGroupStockRepository.QueryFirst(x => x.GroupId == dt_Task.GroupID); |
| | | if (dt_billGroupStock != null) |
| | | { |
| | | dt_billGroupStock.State = (int)StockStateEmun.ç»çæå; |
| | | dt_billGroupStock.LocationCode = ""; |
| | | } |
| | | else |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡åæ¶-CancelInboundTask", "ååº", $"æªæ¥è¯¢å°è¯¥ä»»å¡å·çç»çä¿¡æ¯ï¼{taskNum}"); |
| | | return webResponseContent.Error($"æªæ¥è¯¢å°è¯¥ä»»å¡å·çç»çä¿¡æ¯ï¼{taskNum}"); |
| | | } |
| | | //3,ç§»å°åå²ä»»å¡è¡¨ä¸ |
| | | #region çæåå²ä»»å¡è®°å½ |
| | | dt_Task_Hty.TaskNum = taskNum; |
| | | dt_Task_Hty.TaskId = dt_Task.TaskId; |
| | | dt_Task_Hty.PalletCode = dt_Task.PalletCode; |
| | | dt_Task_Hty.InboundNo = dt_Task.InboundNo; |
| | | dt_Task_Hty.GroupID = dt_Task.GroupID; |
| | | dt_Task_Hty.Roadway = dt_Task.Roadway; |
| | | dt_Task_Hty.LocationCode = dt_Task.LocationCode; |
| | | dt_Task_Hty.TaskType = dt_Task.TaskType; |
| | | dt_Task_Hty.TaskState = (int)InTaskStatusEnum.InCancel; |
| | | dt_Task_Hty.MaterialNo = dt_Task.MaterialNo; |
| | | dt_Task_Hty.SourceAddress = dt_Task.SourceAddress; |
| | | dt_Task_Hty.TargetAddress = dt_Task.TargetAddress; |
| | | dt_Task_Hty.CurrentAddress = dt_Task.CurrentAddress; |
| | | dt_Task_Hty.NextAddress = dt_Task.NextAddress; |
| | | dt_Task_Hty.Grade = dt_Task.Grade; |
| | | dt_Task_Hty.Dispatchertime = dt_Task.Dispatchertime; |
| | | dt_Task_Hty.Remark = dt_Task.Remark; |
| | | dt_Task_Hty.CreateID = dt_Task.CreateID; |
| | | dt_Task_Hty.Creater = dt_Task.Creater; |
| | | dt_Task_Hty.CreateDate = dt_Task.CreateDate; |
| | | dt_Task_Hty.ModifyID = dt_Task.ModifyID; |
| | | dt_Task_Hty.Modifier = dt_Task.Modifier; |
| | | dt_Task_Hty.ModifyDate = dt_Task.ModifyDate; |
| | | #endregion |
| | | //4,ä»»å¡è¡¨ä¸å é¤ä»»å¡ |
| | | |
| | | //5,éæ¾è´§ä½ |
| | | dt_locationInfo = _dt_LocationInfoRepository.QueryFirst(x => x.LocationCode == dt_Task.LocationCode); |
| | | dt_locationInfo.Status = (int)LocationEnum.Free; |
| | | } |
| | | else |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡åæ¶-CancelInboundTask", "ååº", $"该任å¡å·ä¸åå¨ï¼{taskNum}"); |
| | | return webResponseContent.Error($"该任å¡å·ä¸åå¨ï¼{taskNum}"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | //å¼å¯äºç© |
| | | _unitOfWorkManage.BeginTran(); |
| | | //2,æ´æ°ä»»å¡ç¶æä¸ºï¼270 å
¥åºä»»å¡åæ¶ |
| | | _dt_Task_HtyRepository.AddData(dt_Task_Hty); |
| | | //3,è¿åç»çç¶æä¸ºï¼1 ç»çæå |
| | | _dt_BillGroupStockRepository.UpdateData(dt_billGroupStock); |
| | | //4,å é¤ä»»å¡ |
| | | _dt_TaskRepository.DeleteDataById(dt_Task.TaskId); |
| | | //5,è´§ä½è¡¨éæ¾è´§ä½ |
| | | _dt_LocationInfoRepository.UpdateData(dt_locationInfo); |
| | | //æäº¤äºç© |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | throw; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡åæ¶-CancelInboundTask", "ååº", $"ä»»å¡å·ï¼{taskNum}ä»»å¡åæ¶å¤±è´¥ï¼å¼å¸¸{ex.ToString()}"); |
| | | return webResponseContent.Error($"ä»»å¡å·ï¼{taskNum}ä»»å¡åæ¶å¤±è´¥ï¼å¼å¸¸{ex.ToString()}"); |
| | | } |
| | | return webResponseContent; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// å
¥åºä»»å¡æ´æ° |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent UpdateInboundTask(int taskNum, string currentAddress, string nextAddress, string ErrorMessage) |
| | | { |
| | | WebResponseContent webResponseContent = new WebResponseContent(); |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡æ´æ°-UpdateInboundTask", "请æ±", $"taskNum-{taskNum} currentAddress-{currentAddress} nextAddress-{nextAddress} ErrorMessage-{ErrorMessage}"); |
| | | //1,æ¥è¯¢æ¯å¦åå¨è¯¥ä»»å¡ |
| | | try |
| | | { |
| | | Dt_Task dt_Task = _dt_TaskRepository.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (dt_Task != null) |
| | | { |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | { |
| | | dt_Task.CurrentAddress = currentAddress; |
| | | } |
| | | if (string.IsNullOrEmpty(nextAddress)) |
| | | { |
| | | dt_Task.NextAddress = nextAddress; |
| | | } |
| | | if (string.IsNullOrEmpty(ErrorMessage)) |
| | | { |
| | | dt_Task.ErrorMessage = ErrorMessage; |
| | | } |
| | | dt_Task.ModifyDate = DateTime.Now; |
| | | dt_Task.Modifier = App.User.UserId.ToString(); |
| | | //2,æ´æ°ä»»å¡ä¿¡æ¯ |
| | | _dt_TaskRepository.UpdateData(dt_Task); |
| | | } |
| | | else |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡æ´æ°-UpdateInboundTask", "ååº", $"ä»»å¡å·ï¼{taskNum} ä»»å¡ä¸åå¨"); |
| | | return webResponseContent.Error($"ä»»å¡å·ï¼{taskNum} ä»»å¡ä¸åå¨"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | new LogLibrary.Log.LogFactory().GetLog("æ¥å£").InfoFormat(true, "å
¥åºä»»å¡æ´æ°-UpdateInboundTask", "ååº", $"ä»»å¡å·ï¼{taskNum}任塿´æ°å¤±è´¥ï¼å¼å¸¸{ex.ToString()}"); |
| | | return webResponseContent.Error($"ä»»å¡å·ï¼{taskNum}任塿´æ°å¤±è´¥ï¼å¼å¸¸{ex.ToString()}"); |
| | | |
| | | } |
| | | return webResponseContent; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·åä»»å¡ç¼å· |
| | | /// </summary> |
| | | /// <returns></returns> |
| | |
| | | return int.Parse(dt.Rows[0][0].ToString()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// èªå¨çæå
¥åºåå· |
| | | /// </summary> |
| | | /// <param name="prefix">R</param> |
| | | /// <param name="date"></param> |
| | | /// <returns></returns> |
| | | public string GenerateOrderNumber(string prefix, DateTime date) |
| | | { |
| | | // æ ¼å¼åæ¥æä¸º "YYYYMMDD" |
| | | string dateString = date.ToString("yyyyMMdd"); |
| | | int sn = 1;//æµæ°´å·ä»1å¼å§ |
| | | //é墿µæ°´å· |
| | | List<Dt_InboundOrder> inboundOrders = BaseDal.QueryData().OrderByDescending(x => x.InboundNo.Substring(x.InboundNo.Length - 5)).ToList(); |
| | | if(inboundOrders.Count > 0 ) |
| | | { |
| | | Dt_InboundOrder dt_InboundOrder = new Dt_InboundOrder(); |
| | | sn = int.Parse(dt_InboundOrder.InboundNo.Substring(dt_InboundOrder.InboundNo.Length - 5)) + 1; |
| | | } |
| | | |
| | | // ç»ååç¼ãæ¥æåæµæ°´å· |
| | | StringBuilder orderNumber = new StringBuilder(); |
| | | orderNumber.Append(prefix); |
| | | orderNumber.Append(dateString); |
| | | orderNumber.Append(sn.ToString().PadLeft(5, '0')); |
| | | |
| | | return orderNumber.ToString(); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |