Murphy 2 سال پیش
والد
کامیت
ff8a7a1caa

+ 5 - 5
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/PriorityDto.cs

@@ -12,23 +12,23 @@ namespace Business.ResourceExamineManagement.Dto
     public class PriorityDto
     {
         /// <summary>
-        /// 主键
+        /// 销售订单主键
         /// </summary>
         public long id { get; set; }
 
         /// <summary>
-        /// 加急级别
+        /// 是否加急
         /// </summary>
         public int urgent { get; set; }
 
         /// <summary>
-        /// 级别
+        /// 客户级别
         /// </summary>
         public int level { get; set; }
 
         /// <summary>
-        /// 交期
+        /// 交期-订单行最早交期
         /// </summary>
-        public DateTime? plan_date { get; set; }
+        public DateTime plan_date { get; set; }
     }
 }

+ 57 - 6
MicroServices/Business/Business.Application/PriorityManagement/PriorityAppService.cs

@@ -22,12 +22,12 @@ namespace Business.PriorityManagement
         /// <param name="seorders">订单数据</param>
         /// <param name="sentrys">订单行数据</param>
         /// <returns></returns>
-        public List<PriorityDto> CalcOrderPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
+        public List<crm_seorder> CalcOrderPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
         {
             //数据处理:取主表数据
-            var rtn = seorders.Select(p=>new PriorityDto { 
+            var dtos = seorders.Select(p=>new PriorityDto { 
                 id = p.Id,
-                urgent = p.urgent.GetValueOrDefault(),
+                urgent = p.urgent,
                 level = p.custom_level.GetValueOrDefault()
             }).AsQueryable<PriorityDto>().ToList(); 
             
@@ -39,7 +39,7 @@ namespace Business.PriorityManagement
                              id = temp.Key,
                              plan_date = temp.Max(x => x.plan_date.GetValueOrDefault())
                          };
-            foreach (var item in rtn)
+            foreach (var item in dtos)
             {
                 var entry = entrys.FirstOrDefault(p => p.id == item.id);
                 if (entry != null)
@@ -48,8 +48,59 @@ namespace Business.PriorityManagement
                 }
             }
             //根据紧急级别倒序,客户级别升序,交期升序排序
-            rtn = rtn.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
-            return rtn;
+            dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
+
+            List<crm_seorder> rtnOrders = new List<crm_seorder>();
+            foreach (var item in dtos)
+            {
+                var order = seorders.First(p=>p.Id == item.id);
+                rtnOrders.Add(order);
+            }
+            return rtnOrders;
+        }
+
+        /// <summary>
+        /// 计算订单行优先级
+        /// </summary>
+        /// <param name="seorders">订单数据</param>
+        /// <param name="sentrys">订单行数据</param>
+        /// <returns></returns>
+        public List<crm_seorderentry> CalcOrderEntryPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
+        {
+            //数据处理:取主表数据
+            var dtos = seorders.Select(p => new PriorityDto
+            {
+                id = p.Id,
+                urgent = p.urgent,
+                level = p.custom_level.GetValueOrDefault()
+            }).AsQueryable<PriorityDto>().ToList();
+
+            //子表数据处理:根据订单id分组取出客户要求交期交期最大的数据
+            var entrys = from t in sentrys
+                         group t by t.seorder_id into temp
+                         select new
+                         {
+                             id = temp.Key,
+                             plan_date = temp.Max(x => x.plan_date.GetValueOrDefault())
+                         };
+            foreach (var item in dtos)
+            {
+                var entry = entrys.FirstOrDefault(p => p.id == item.id);
+                if (entry != null)
+                {
+                    item.plan_date = entry.plan_date;
+                }
+            }
+            //根据紧急级别倒序,客户级别升序,交期升序排序
+            dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
+
+            List<crm_seorderentry> rtnEntrys = new List<crm_seorderentry>();
+            foreach (var item in dtos)
+            {
+                var curEntrys = sentrys.Where(p => p.seorder_id == item.id).ToList();
+                rtnEntrys.AddRange(curEntrys);
+            }
+            return rtnEntrys;
         }
     }
 }

+ 4 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -132,7 +132,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="plan_date"></param>
         /// <param name="checkflag">是否生成工单、委外、采购</param>
         public void CalcView(List<BomChildExamineDto> returnlist, long bangid, decimal count, DateTime
-            ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys, List<mo_ic_item> icitemlist)
+            ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys,int urgent, List<mo_ic_item> icitemlist)
         {
             ProductionTimeDay = 0;
             //第一级
@@ -260,7 +260,7 @@ namespace Business.ResourceExamineManagement
                                 morder_state = MorderEnum.Initial_state,
                                 bang_id = bangid
                             };
-                            CreateMainOrder(generateMorderDto, level1Dto, childList, returnlist, bangid, plan_date, sklist, sentrys, icitemlist);
+                            CreateMainOrder(generateMorderDto, level1Dto, childList, returnlist, bangid, plan_date, sklist, sentrys, urgent, icitemlist);
                         }
                         else if (level1Dto.erp_cls == 3)
                         {
@@ -330,14 +330,14 @@ namespace Business.ResourceExamineManagement
         /// 生成主工单
         /// </summary>
         public void CreateMainOrder(GenerateMorderDto generateMorderDto, BomChildExamineDto level1Dto, List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, long bangid, DateTime
-            ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys, List<mo_ic_item> icitemlist)
+            ? plan_date, List<mo_ic_item_stockoccupy> sklist, crm_seorderentry sentrys,int urgent, List<mo_ic_item> icitemlist)
         {
             //生成主工单
             _morderAppService.process = process;
             _morderAppService.techs = techs;
             _morderAppService.tech_Processes = tech_Processes;
             _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
-            Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
+            Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto, urgent);
             MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
             //这里更新产品得满足时间。
             if (mes_MorderDto != null)

+ 2 - 1
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -118,7 +118,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="number">物料编码</param>
         /// <param name="Quantity"></param>
         /// <param name="ParentId"></param>
-        public Mes_MorderDto GenerateMorder(GenerateMorderDto generateMorderDto)
+        public Mes_MorderDto GenerateMorder(GenerateMorderDto generateMorderDto,int urgent)
         {
             //1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
 
@@ -138,6 +138,7 @@ namespace Business.ResourceExamineManagement
             mes_Morder.fms_number = generateMorderDto.ic_Item.fms_number;
             mes_Morder.bom_number = generateMorderDto.BomNumber;
             mes_Morder.fmodel = generateMorderDto.ic_Item.model;
+            mes_Morder.urgent = urgent;
             if (generateMorderDto.ParentId != null && generateMorderDto.moentry_sys_stime != null)
             {
                 //最早的开工时间3天后、 最晚时间为订单承诺时间 - 采购提前期 - 质检提前期 - 入库提前期 - 发料提前期 = 最晚开工时间  最早或最晚为系统建议开工日期

+ 20 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -36,6 +36,7 @@ using System.Diagnostics.CodeAnalysis;
 using System.Diagnostics;
 using Volo.Abp.Uow;
 using Spire.Pdf.Exporting.XPS.Schema;
+using Business.PriorityManagement;
 using Newtonsoft.Json.Linq;
 
 namespace Business.ResourceExamineManagement
@@ -272,7 +273,16 @@ namespace Business.ResourceExamineManagement
         private ISqlRepository<ItemMaster> _itemMaster;
         private ISqlRepository<NbrMaster> _nbrMaster;
         private ISqlRepository<NbrDetail> _nbrDetail;
+
+        /// <summary>
+        /// 生产排产
+        /// </summary>
         private readonly ProductionScheduleAppService _productionScheduleAppService;
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        private readonly PriorityAppService _priorityAppService;
         #endregion
 
         #region 构造函数
@@ -355,6 +365,7 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<WorkOrdDetail> workOrdDetail,
             ISqlRepository<NbrMaster> nbrMaster,
             ISqlRepository<NbrDetail> nbrDetail,
+            PriorityAppService priorityAppService,
             ISqlRepository<rf_serialnumber> rf_serialnumber
             )
         {
@@ -428,6 +439,7 @@ namespace Business.ResourceExamineManagement
             _itemMaster = itemMaster;
             _nbrMaster = nbrMaster;
             _nbrDetail = nbrDetail;
+            _priorityAppService= priorityAppService;
             _rf_serialnumber = rf_serialnumber;
     }
         #endregion
@@ -462,6 +474,7 @@ namespace Business.ResourceExamineManagement
                 new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "订单数据不存在", _currentTenant.Id.ToString());
                 throw new NotImplementedException("订单数据不存在!");
             }
+
             //获取订单行数据
             List<crm_seorderentry> sentrys = await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && !p.IsDeleted);
 
@@ -499,6 +512,9 @@ namespace Business.ResourceExamineManagement
             DataInitialization(boms, bangid, sorder, icitemlist, stocklist, pretreatments);
             foreach (var item in sentrys)
             {
+                //获取销售订单“是否加急”字段
+                int urgent = sorder.urgent;
+
                 //工单资源检查信息
                 dtl = new ExamineResult();
                 dtl.sorderid = rtn.sorderid;
@@ -523,7 +539,7 @@ namespace Business.ResourceExamineManagement
                 //库存初始化
                 _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
                 //计算
-                _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.GetValueOrDefault(), item.plan_date, sklist, item, icitemlist);
+                _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.GetValueOrDefault(), item.plan_date, sklist, item, urgent, icitemlist);
 
                 //TODO:最晚开始时间
                 var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
@@ -2092,7 +2108,7 @@ namespace Business.ResourceExamineManagement
                 //库存初始化
                 _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
                 //计算
-                _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, icitemlist);
+                _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, item.urgent, icitemlist);
 
                 //TODO:最晚开始时间
                 var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
@@ -2314,7 +2330,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="morders"></param>
         [UnitOfWork]
-        public async void CreateWorkOrdDates(List<mo_mes_morder> morders)
+        public void CreateWorkOrdDates(List<mo_mes_morder> morders)
         {
             //获取工艺路线数据:product_code=物料编码
             List<RoutingOpDetail> allRoutings = _routingOpDetail.Select(p => morders.Select(m => m.product_code).Contains(p.RoutingCode));
@@ -2341,7 +2357,7 @@ namespace Business.ResourceExamineManagement
                 workOrd.QtyOrded = item.need_number.GetValueOrDefault();
                 workOrd.RoutingCode = item.product_code;
                 workOrd.Period = 1;
-                workOrd.Priority = 1;
+                workOrd.Priority = item.urgent;
                 workOrd.Status = "";
                 workOrd.IsActive = true;
                 workOrds.Add(workOrd);

+ 6 - 0
MicroServices/Business/Bussiness.Model/Production/mes_morder.cs

@@ -323,5 +323,11 @@ namespace Business.Model.Production
         [Comment("计算id")]
         [NotMapped]
         public long? bang_id { get; set; }
+
+        /// <summary>
+        /// 加急级别
+        /// </summary>
+        [Comment("加急级别")]
+        public int urgent { get; set; }
     }
 }

+ 1 - 1
MicroServices/Business/Bussiness.Model/Sale/crm_seorder.cs

@@ -97,7 +97,7 @@ namespace Business.Model.Sale
         /// 加急级别
         /// </summary>
         [Comment("加急级别")]
-        public int? urgent { get; set; }
+        public int urgent { get; set; }
 
         /// <summary>
         /// 币种

+ 6 - 0
MicroServices/Business/Bussiness.MongoModel/Production/mo_mes_morder.cs

@@ -323,5 +323,11 @@ namespace Business.MongoModel.Production
         [Comment("计算id")]
         [NotMapped]
         public long? bang_id { get; set; }
+
+        /// <summary>
+        /// 加急级别
+        /// </summary>
+        [Comment("加急级别")]
+        public int urgent { get; set; }
     }
 }