فهرست منبع

合并冲突解决

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

+ 44 - 0
MicroServices/Business/Business.Application.Contracts/Dto/KittingTimeDto.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.Dto
+{
+    /// <summary>
+    /// 订单行建议交期
+    /// </summary>
+    public class KittingTimeDto
+    {
+        /// <summary>
+        /// 订单行id
+        /// </summary>
+        public long sentry_id { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string ItemNum { get; set; }
+
+        /// <summary>
+        /// 生产数量
+        /// </summary>
+        public decimal LackQty { get; set; }
+
+        /// <summary>
+        /// 物料齐套时间
+        /// </summary>
+        public DateTime sys_capacity_date { get; set; }
+
+        /// <summary>
+        /// 系统建议交期(产能)
+        /// </summary>
+        public DateTime kitting_time { get; set; }
+
+        /// <summary>
+        /// 系统建议交期(物料)
+        /// </summary>
+        public DateTime sys_material_date { get; set; }
+    }
+}

+ 6 - 6
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/ProdExamineParamDto.cs

@@ -12,18 +12,18 @@ namespace Business.ResourceExamineManagement.Dto
     public class ProdExamineParamDto
     {
         /// <summary>
-        /// bom编号
+        /// 物料编码
         /// </summary>
-        public string? bom_number { get; set; }
+        public string ItemNum { get; set; }
 
         /// <summary>
-        /// bom版本
+        /// 订单行数量
         /// </summary>
-        public string? version { get; set; }
+        public decimal QtyOrd { get; set; }
 
         /// <summary>
-        /// 生产件数
+        /// 计划开始时间
         /// </summary>
-        public int packages { get; set; }
+        public DateTime PlanStart { get; set; }
     }
 }

+ 56 - 34
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -1,5 +1,6 @@
 using Business.Core.Enum;
 using Business.Core.Utilities;
+using Business.Model.Production;
 using Business.Model.Sale;
 using Business.Model.SRM;
 using Business.MongoModel.MES.IC;
@@ -7,9 +8,11 @@ using Business.MongoModel.Production;
 using Business.MongoModel.SRM;
 using Business.MongoModel.Tech;
 using Business.ResourceExamineManagement.Dto;
+using MongoDB.Driver.Linq;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using Volo.Abp.Application.Services;
 using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
@@ -47,24 +50,34 @@ namespace Business.ResourceExamineManagement
         SnowFlake help = new SnowFlake();
 
         /// <summary>
-        /// 工艺路径
+        /// 生产线明细表
         /// </summary>
-        public List<mo_mes_technique> techs = new List<mo_mes_technique>();
+        public List<ProdLineDetail> prodLines = new List<ProdLineDetail>();
 
         /// <summary>
-        /// 工艺关联工序
+        /// 标准工艺路径表
         /// </summary>
-        public List<mo_mes_tech_process> tech_Processes = new List<mo_mes_tech_process>();
+        public List<RoutingOpDetail> routingOps = new List<RoutingOpDetail>();
 
         /// <summary>
-        /// 工序
+        /// 排产记录表
         /// </summary>
-        public List<mo_mes_process> process = new List<mo_mes_process>();
+        public List<PeriodSequenceDet> periodSequences = new List<PeriodSequenceDet>();
 
         /// <summary>
-        /// 工艺工序关联工位
+        /// 工作日历
         /// </summary>
-        public List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = new List<mo_mes_tech_proc_workshop>();
+        public List<ShopCalendarWorkCtr> calendarWorks = new List<ShopCalendarWorkCtr>();
+
+        /// <summary>
+        /// 休息时间段
+        /// </summary>
+        public List<QualityLineWorkDetail> qualityLineWorks = new List<QualityLineWorkDetail>();
+
+        /// <summary>
+        /// 节假日
+        /// </summary>
+        public List<HolidayMaster> holidays = new List<HolidayMaster>();
 
         /// <summary>
         /// 工单App
@@ -333,10 +346,13 @@ namespace Business.ResourceExamineManagement
             ? 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;
+            _morderAppService.prodLines = prodLines;
+            _morderAppService.routingOps = routingOps;
+            _morderAppService.periodSequences = periodSequences;
+            _morderAppService.calendarWorks = calendarWorks;
+            _morderAppService.qualityLineWorks = qualityLineWorks;
+            _morderAppService.holidays = holidays;
+
             Mes_MorderDto mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto, urgent);
             MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
             //这里更新产品得满足时间。
@@ -348,37 +364,42 @@ namespace Business.ResourceExamineManagement
                 {
                     if (!string.IsNullOrEmpty(mes_Morders.bom_number))
                     {
+                        mes_Morders.moentry_sys_stime = childList.Max(s => s.kitting_time.GetValueOrDefault()).AddDays(1).Date;//数据齐套完成后隔天开始生产;
                         //var ProductiveDate = ProductiveExamine(mes_Morders.bom_number, level1Dto.version, (int)mes_Morders.morder_production_number.Value);
                         ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                         {
-                            bom_number = mes_Morders.bom_number,
-                            version = level1Dto.version,
-                            packages = (int)mes_Morders.morder_production_number.Value
+                            ItemNum = mes_Morders.bom_number,
+                            PlanStart = mes_Morders.moentry_sys_stime.Value,
+                            QtyOrd = (int)mes_Morders.morder_production_number.Value
                         };
-                        _productExamineAppService.process = process;
-                        _productExamineAppService.techs = techs;
-                        _productExamineAppService.tech_Processes = tech_Processes;
-                        _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+                        _productExamineAppService.prodLines = prodLines;
+                        _productExamineAppService.routingOps = routingOps;
+                        _productExamineAppService.periodSequences = periodSequences;
+                        _productExamineAppService.calendarWorks = calendarWorks;
+                        _productExamineAppService.qualityLineWorks = qualityLineWorks;
+                        _productExamineAppService.holidays = holidays;
 
                         var plan = planList.Find(x => x.icitem_id == level1Dto.item_id);
                         var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
-                        var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
-                        mes_Morders.moentry_sys_stime = childList.Max(s => s.kitting_time.GetValueOrDefault()).AddDays(1);//数据齐套完成后隔天开始生产;
+                        //var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
+
                         //结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
-                        var LeadTime = 0.00m;
+                        DateTime LeadTime;
                         if (plan != null)
                         {
-                            LeadTime = Day + plan.self_inspection_date.GetValueOrDefault() + plan.Warehousing_date.GetValueOrDefault();
+                            var TQdate = plan.self_inspection_date.GetValueOrDefault() + plan.Warehousing_date.GetValueOrDefault();
+                            LeadTime = ProductiveDate.AddDays((double)TQdate);
                         }
                         else
                         {
-                            LeadTime = Day;
+                            LeadTime = ProductiveDate;
                         }
-                        ProductionTimeDay = LeadTime;
-                        mes_Morders.moentry_sys_etime = mes_Morders.moentry_sys_stime.Value.AddDays((double)Day);
-                        mes_Morders.morder_need_time = ProductiveDate;
+                        //ProductionTimeDay = LeadTime;
+                        mes_Morders.moentry_sys_etime = LeadTime;
+                        mes_Morders.morder_need_time = Convert.ToInt32(DateTime.ParseExact(ProductiveDate.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", CultureInfo.CurrentCulture) -
+                            DateTime.ParseExact(mes_Morders.moentry_sys_stime.Value.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", CultureInfo.CurrentCulture));
                         //满足资源检查的时间需加上提前期
-                        level1Dto.satisfy_time = mes_Morders.moentry_sys_stime.Value.AddDays((double)LeadTime);
+                        level1Dto.satisfy_time = LeadTime;
                         if (sentrys != null)
                         {
                             sentrys.sys_capacity_date = level1Dto.satisfy_time;
@@ -618,7 +639,7 @@ namespace Business.ResourceExamineManagement
                             item.kitting_time = cilList.Max(s => s.kitting_time);
                         }
                         item.make_qty = item.lack_qty;
-                        //走自制
+                        /*//走自制
                         ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                         {
                             bom_number = item.bom_number,
@@ -630,17 +651,17 @@ namespace Business.ResourceExamineManagement
                         _productExamineAppService.tech_Processes = tech_Processes;
                         _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
 
-                        /*if (param.checkflag)
+                        *//*if (param.checkflag)
                         {
                             //todo:增加生成子工单后,这里需要加上生成的子工单的明细。
-                        }*/
+                        }*//*
                         item.make_list = new List<moorder>();
                         var minute = _productExamineAppService.ProductiveExamine(prodExamine);
                         //系统建议完工日期为 开工日期+产能检查时间=完工日期
                         var Day = minute / (60 * 10); //返回的分钟除以十个小时得出工作天数;
                         var ktime = item.kitting_time.Value.AddDays((double)Day);
                         //item.kitting_time = ktime > mooccupylist[0].moo_etime ? ktime : mooccupylist[0].moo_etime;
-                        item.kitting_time = ktime;
+                        item.kitting_time = ktime;*/
                     }
                 }
                 else if (item.erp_cls == 3)
@@ -1007,7 +1028,8 @@ namespace Business.ResourceExamineManagement
                                 CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                                 sct.kitting_time = cilList.Max(s => s.kitting_time);
                             }
-                            //走自制
+                            sct.make_qty = sct.lack_qty;
+                            /*//走自制
                             ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                             {
                                 bom_number = sct.bom_number,
@@ -1023,7 +1045,7 @@ namespace Business.ResourceExamineManagement
                             //系统建议完工日期为 开工日期+产能检查时间=完工日期
                             var Day = minute / (60 * 10); //返回的分钟除以十个小时得出工作天数;
                             sct.kitting_time = sct.kitting_time.Value.AddDays((double)Day);
-                            sct.make_qty = sct.lack_qty;
+                            sct.make_qty = sct.lack_qty;*/
                             //todo:
                             sct.make_list = new List<moorder>();
                         }

+ 35 - 18
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -1,5 +1,6 @@
 using Business.Core.Enum;
 using Business.Core.Utilities;
+using Business.Model.Production;
 using Business.Model.Sale;
 using Business.MongoModel.MES.IC;
 using Business.MongoModel.Production;
@@ -7,6 +8,7 @@ using Business.MongoModel.Tech;
 using Business.ResourceExamineManagement.Dto;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using Volo.Abp.Application.Services;
 
@@ -52,24 +54,36 @@ namespace Business.ResourceExamineManagement
         SnowFlake snowFlake = new SnowFlake();
 
         /// <summary>
-        /// 工艺路径
+        /// 生产线明细表
         /// </summary>
-        public List<mo_mes_technique> techs = new List<mo_mes_technique>();
+        public List<ProdLineDetail> prodLines = new List<ProdLineDetail>();
 
         /// <summary>
-        /// 工艺关联工序
+        /// 标准工艺路径表
         /// </summary>
-        public List<mo_mes_tech_process> tech_Processes = new List<mo_mes_tech_process>();
+        public List<RoutingOpDetail> routingOps = new List<RoutingOpDetail>();
 
         /// <summary>
-        /// 工序
+        /// 排产记录表
         /// </summary>
-        public List<mo_mes_process> process = new List<mo_mes_process>();
+        public List<PeriodSequenceDet> periodSequences = new List<PeriodSequenceDet>();
 
         /// <summary>
-        /// 工艺工序关联工位
+        /// 工作日历
         /// </summary>
-        public List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = new List<mo_mes_tech_proc_workshop>();
+        public List<ShopCalendarWorkCtr> calendarWorks = new List<ShopCalendarWorkCtr>();
+
+        /// <summary>
+        /// 休息时间段
+        /// </summary>
+        public List<QualityLineWorkDetail> qualityLineWorks = new List<QualityLineWorkDetail>();
+
+        /// <summary>
+        /// 节假日
+        /// </summary>
+        public List<HolidayMaster> holidays = new List<HolidayMaster>();
+
+
         /// <summary>
         /// 工单
         /// </summary>
@@ -148,20 +162,23 @@ namespace Business.ResourceExamineManagement
                 {
                     ProdExamineParamDto prodExamine = new ProdExamineParamDto()
                     {
-                        bom_number = generateMorderDto.BomNumber,
-                        version = generateMorderDto.version,
-                        packages = (int)generateMorderDto.Quantity.GetValueOrDefault()
+                        ItemNum = generateMorderDto.BomNumber,
+                        PlanStart = generateMorderDto.moentry_sys_stime.Value,
+                        QtyOrd = (int)generateMorderDto.Quantity.GetValueOrDefault()
                     };
-                    _productExamineAppService.process = process;
-                    _productExamineAppService.techs = techs;
-                    _productExamineAppService.tech_Processes = tech_Processes;
-                    _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+                    _productExamineAppService.prodLines = prodLines;
+                    _productExamineAppService.routingOps = routingOps;
+                    _productExamineAppService.periodSequences = periodSequences;
+                    _productExamineAppService.calendarWorks = calendarWorks;
+                    _productExamineAppService.qualityLineWorks = qualityLineWorks;
+                    _productExamineAppService.holidays = holidays;
 
                     var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
                     //系统建议完工日期为 开工日期+产能检查时间=完工日期
-                    var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
-                    mes_Morder.moentry_sys_etime = mes_Morder.moentry_sys_stime.GetValueOrDefault().AddDays((double)Day);
-                    mes_Morder.morder_need_time = ProductiveDate;
+                    //var Day = ProductiveDate / (60 * 10); //返回的分钟除以十个小时得出工作天数;
+                    mes_Morder.moentry_sys_etime = ProductiveDate;
+                    mes_Morder.morder_need_time = Convert.ToInt32(DateTime.ParseExact(ProductiveDate.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", CultureInfo.CurrentCulture) -
+                            DateTime.ParseExact(generateMorderDto.moentry_sys_stime.Value.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", CultureInfo.CurrentCulture)); ;
                 }
             }
 

+ 130 - 209
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs

@@ -11,6 +11,8 @@ using System.Text;
 using System.Threading.Tasks;
 using Volo.Abp.Application.Services;
 using Volo.Abp.Domain.Repositories;
+using Business.Dto;
+using Business.Model.Sale;
 
 namespace Business.ResourceExamineManagement
 {
@@ -21,24 +23,34 @@ namespace Business.ResourceExamineManagement
     {
         #region 服务
         /// <summary>
-        /// 工艺路径
+        /// 生产线明细表
         /// </summary>
-        public List<mo_mes_technique> techs = new List<mo_mes_technique>();
+        public List<ProdLineDetail> prodLines = new List<ProdLineDetail>();
 
         /// <summary>
-        /// 工艺关联工序
+        /// 标准工艺路径表
         /// </summary>
-        public List<mo_mes_tech_process> tech_Processes = new List<mo_mes_tech_process>();
+        public List<RoutingOpDetail> routingOps = new List<RoutingOpDetail>();
 
         /// <summary>
-        /// 工序
+        /// 排产记录表
         /// </summary>
-        public List<mo_mes_process> process = new List<mo_mes_process>();
+        public List<PeriodSequenceDet> periodSequences = new List<PeriodSequenceDet>();
 
         /// <summary>
-        /// 工艺工序关联工位
+        /// 工作日历
         /// </summary>
-        public List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = new List<mo_mes_tech_proc_workshop>();
+        public List<ShopCalendarWorkCtr> calendarWorks = new List<ShopCalendarWorkCtr>();
+
+        /// <summary>
+        /// 休息时间段
+        /// </summary>
+        public List<QualityLineWorkDetail> qualityLineWorks = new List<QualityLineWorkDetail>();
+
+        /// <summary>
+        /// 节假日
+        /// </summary>
+        public List<HolidayMaster> holidays = new List<HolidayMaster>();
 
         #endregion
 
@@ -50,255 +62,164 @@ namespace Business.ResourceExamineManagement
         }
 
         /// <summary>
-        /// 产能计算
+        /// 产能计算-批量
         /// </summary>
-        /// <param name="packages">件数</param>
-        /// <returns>生产时长</returns>
-        public decimal ProductiveExamine(ProdExamineParamDto param)
+        /// <param name="param">产能检查入参</param>
+        /// <returns>生产时长(天)</returns>
+        public DateTime ProductiveExamine(ProdExamineParamDto param)
         {
-            if (param.packages <= 0)
+            //生产结束时间
+            DateTime planEnd = param.PlanStart.Date;
+            if (param.QtyOrd <= 0)
             {
-                //throw new NotImplementedException("产能计算参数有误!");
+                return planEnd;
             }
-            //过滤数据
-            //1.1、获取工艺路径数据
-            mo_mes_technique curTech = techs.FirstOrDefault(p => p.bom == param.bom_number && p.bomver == param.version);
-            if (curTech == null)
+            //获取当前产品的工艺路线:主产线,最后一道工序
+            var curRoutingOps = routingOps.Where(p => p.RoutingCode == param.ItemNum && p.ParentOp == 0).OrderByDescending(p => p.Op).ToList();
+            if (curRoutingOps.Count() == 0)
             {
-                return param.packages * 20;
-                //throw new NotImplementedException("工艺路径不存在,请调整!");
+                return planEnd;
             }
-            //1.2、获取工艺关联工序数据
-            List<mo_mes_tech_process> curTechProcess = tech_Processes.Where(p => p.tech_id == curTech.mysql_id).ToList();
-            if (curTechProcess.Count == 0)
+            var lastOp = curRoutingOps.Last();
+            //获取产线
+            var curProdLine = prodLines.FirstOrDefault(p => p.Part == param.ItemNum && p.Op == lastOp.Op);
+            if (curProdLine == null)
             {
-                return param.packages * 20;
-                //throw new NotImplementedException("当前工艺路径没有配置工序,请调整!");
+                return planEnd;
             }
-            //1.3、获取工序数据
-            List<mo_mes_process> curProcess = process.Where(p => curTechProcess.Select(m => m.proc_id).Contains(p.mysql_id)).ToList();
-            if (curProcess.Count == 0)
+            //获取产线工作日历
+            var curCalendars = calendarWorks.Where(p => p.ProdLine == curProdLine.Line).ToList();
+            if (curCalendars.Count() == 0 || curCalendars.Count() != 0)
             {
-                return param.packages * 20;
-                //throw new NotImplementedException("工序数据不存在,请调整!");
+                return planEnd;
             }
-            //1.4、获取工位数据
-            List<mo_mes_tech_proc_workshop> curWorkShops = tech_Proc_Workshops.Where(p=> curTechProcess.Select(m=>m.mysql_id).Contains(p.tech_proc_id)).ToList(); ;
-
-            //2、获取工艺路径下的第一层级工序:目前只考虑第一层级
-            List<mo_mes_tech_process> fistLevels = curTechProcess.Where(p => p.parentprocid == curTech.mysql_id).ToList();
-            if (fistLevels.Count == 0)
+            //获取产线休息时间
+            var curqualityLines = qualityLineWorks.Where(p=>p.ProdLine == curProdLine.Line).ToList();
+            //生产数量
+            decimal sumAmount = 0m;
+            do
             {
-                return param.packages * 20;
-                //throw new NotImplementedException("当前工艺路径没有配置工序,请调整!");
-            }
-            //工艺预处理
-            List<TechProcDto> teches = TechProcPretreatment(fistLevels,param.packages);
-            decimal sumTimes = teches.OrderByDescending(p => p.sumTimes).First().sumTimes;
-            return sumTimes;
+                //获取工作日
+                planEnd = GetNextWorkDay(planEnd, curCalendars);
+                //计算工作日的产能
+                sumAmount += CalcCapacity(planEnd, curProdLine, curCalendars, curqualityLines);
+                planEnd.AddDays(1);
+            } while (sumAmount < param.QtyOrd);
+            return planEnd.AddDays(-1);
         }
 
         /// <summary>
-        /// 工序预处理,按照多分支生成多条单独的工艺路径
+        /// 获取工作日
         /// </summary>
-        /// <param name="proc">当前工序</param>
-        /// <param name="processes">工艺关联工序list</param>
-        /// <param name="packages">生产件数</param>
+        /// <param name="weekDay">当前周几</param>
+        /// <param name="startTime">开始时间:年-月-日</param>
+        /// <param name="curCalendars">当前产线的工作日历</param>
         /// <returns></returns>
-        private List<TechProcDto> TechProcPretreatment(List<mo_mes_tech_process> processes,int packages)
-        { 
-            //工艺路径预处理dto
-            List<TechProcDto> techProcDtos = new List<TechProcDto>();
-            TechProcDto dto;
-            //获取下一步工序id
-            List<long> nextProcIds = processes.Where(p=>p.nextprocid != null).Select(p => p.nextprocid.GetValueOrDefault()).ToList();
-            //获取起点工序
-            var startProcs = processes.Where(p => !nextProcIds.Contains(p.proc_id)).ToList();
-            //递归处理工序返回值
-            List<mo_mes_tech_process> rtnList;
-            for (int i = 0; i < startProcs.Count; i++)
-            {
-                dto = new TechProcDto();
-                rtnList = new List<mo_mes_tech_process>();
-                GetNextProc(startProcs[i], processes, rtnList);
-                dto.serialno = i + 1;
-                dto.processes = rtnList;
-                //dto.details = CalcTakeTimeByLq(rtnList, packages);//通过Lq计算
-                dto.details = CalcTakeTimeByLqt(rtnList, packages);//通过Lqt计算
-                dto.sumTimes = dto.details.Sum(p=>p.wait_time);
-                techProcDtos.Add(dto);
-            }
-            return techProcDtos;
-        }
-
-        /// <summary>
-        /// 递归:根据起始工序,获取后续工序
-        /// </summary>
-        /// <param name="proc"></param>
-        /// <param name="processes"></param>
-        /// <param name="rtnList"></param>
-        private void GetNextProc(mo_mes_tech_process proc, List<mo_mes_tech_process> processes, List<mo_mes_tech_process> rtnList)
+        public DateTime GetNextWorkDay(DateTime startTime, List<ShopCalendarWorkCtr> curCalendars)
         {
-            rtnList.Add(proc);
-            //下一工序id为null,终止
-            if (proc?.nextprocid == null)
+            DateTime rtnData = startTime;
+            int weekDay = (int)startTime.DayOfWeek;
+            var calendar = curCalendars.FirstOrDefault(p => p.WeekDay == weekDay);
+            //判断当天是否是工作日
+            if (weekDay == 0 || weekDay == 6)//周六,周日
             {
-                return;
+                if (!holidays.Exists(p => p.Dated.GetValueOrDefault().Date == startTime && p.Ufld1 == "调班"))//今天是周末
+                {
+                    //递归继续找下一个工作日
+                    rtnData = GetNextWorkDay(startTime.AddDays(1), curCalendars);
+                    return rtnData;
+                }
+                return rtnData;
             }
-            //获取下一个工序
-            var nextProc = processes.FirstOrDefault(p=>p.proc_id == proc.nextprocid);
-            if (nextProc == null) 
+            //今天不是周六周日,需要判断是不是节假日
+            if (holidays.Exists(p => p.Dated.GetValueOrDefault().Date == startTime && p.Ufld1 == "休假"))//是节假日
             {
-                return;
+                //递归继续找下一个工作日
+                rtnData = GetNextWorkDay(startTime.AddDays(1), curCalendars);
+                return rtnData;
             }
-            GetNextProc(nextProc, processes, rtnList);
+            return rtnData;
         }
 
         /// <summary>
-        /// 通过Lq计算工艺耗时
+        /// 计算当天的产能
         /// </summary>
-        /// <param name="Processes"></param>
-        /// <param name="packages"></param>
+        /// <param name="startTime"></param>
+        /// <param name="prodLine"></param>
+        /// <param name="curCalendars"></param>
+        /// <param name="curQualityLines"></param>
         /// <returns></returns>
-        private List<StartTimeDto> CalcTakeTimeByLq(List<mo_mes_tech_process> Processes, int packages)
+        public decimal CalcCapacity(DateTime startTime,ProdLineDetail prodLine, List<ShopCalendarWorkCtr> curCalendars, List<QualityLineWorkDetail> curQualityLines)
         {
-            //工序需要等待时间记录
-            List<StartTimeDto> starts = new List<StartTimeDto>();
-            StartTimeDto dto;
-            foreach (var chd in Processes)
-            {
-                dto = new StartTimeDto();
-                if (chd.nextprocid == null)//最后一个工序
-                {
-                    //计算最后一个工序耗时
-                    dto = CalcProcTakeTimeByLq(chd, packages, packages);
-                }
-                else
-                {
-                    dto = CalcProcTakeTimeByLq(chd, chd.lq.GetValueOrDefault(), packages);
-                }
-                //添加记录
-                starts.Add(dto);
-            }
-            return starts;
+            decimal sumQty = 0m;
+            //获取休息时长(分钟)
+            decimal sumResrt = curQualityLines.Sum(p => p.RestTime);
+            //获取当天的工作时长(分钟)
+            decimal workTime = curCalendars.First(p => p.WeekDay == (int)startTime.DayOfWeek).ShiftsHours1 * 60;
+            //计算产能
+            sumQty = (workTime - sumResrt) / 60 * prodLine.Rate;
+            return sumQty;
         }
 
         /// <summary>
-        /// 通过Lq计算当前工序前置准备时间
+        /// 计算订单行的建议交期(产能/物料)
         /// </summary>
-        /// <param name="proc"></param>
-        /// <param name="quantity">LeadQuantity to Start Next</param>
-        /// <param name="packages">件数</param>
+        /// <param name="sentrys"></param>
+        /// <param name="kittingTimes"></param>
         /// <returns></returns>
-        private StartTimeDto CalcProcTakeTimeByLq(mo_mes_tech_process proc, decimal quantity, int packages)
+        public List<crm_seorderentry> CalcSuggestTime(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes)
         {
-            //记录当前工序耗时
-            StartTimeDto dto = new StartTimeDto();
-            //添加耗时记录
-            dto.tech_id = proc.tech_id;
-            dto.proc_id = proc.proc_id;
-            dto.nextproc_id = proc.nextprocid;
-            if (proc.wctype == 1)//人工型:数量/uph(一小时生产数量)*60(小时转换为分钟)/wsinuse(工位数)
+            ProdExamineParamDto param;
+            foreach (var item in sentrys)
             {
-                if ( proc.uph.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0)
+                var dto = kittingTimes.FirstOrDefault(p=>p.sentry_id == item.Id);
+                if (dto == null)
                 {
-                    throw new NotImplementedException("当前工序uph或wsinuse参数配置错误,请调整!");
+                    continue;
                 }
-                dto.wait_time = quantity / proc.uph.GetValueOrDefault() * 60 / proc.wsinuse.GetValueOrDefault();
-                dto.take_time = packages / proc.uph.GetValueOrDefault() * 60 / proc.wsinuse.GetValueOrDefault();
-            }
-            else if (proc.wctype == 2)//流水线型:数量*ct(生产一件所需时间)/wsinuse(工位数)
-            {
-                if (proc.ct.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0)
+                if (dto.LackQty == 0)//当前订单行库存足够
                 {
-                    throw new NotImplementedException("当前工序ct或wsinuse参数配置错误,请调整!");
+                    item.sys_material_date = dto.kitting_time;
+                    item.sys_capacity_date = dto.kitting_time;
                 }
-                dto.wait_time = quantity * proc.ct.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault();
-                dto.take_time = packages * proc.ct.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault();
-            }
-            else if (proc.wctype == 3)//设备型:向上取整(数量/一次可加工数量/wsinuse(工位数))*ct(老化一次所需时间)
-            {
-                if (proc.upe.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0|| proc.ct.GetValueOrDefault() == 0)
+                //计算系统建议交期(物料)
+                param = new ProdExamineParamDto
                 {
-                    throw new NotImplementedException("当前工序upe或ct或wsinuse参数配置错误,请调整!");
-                }
-                dto.wait_time = Math.Ceiling(quantity / proc.upe.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault()) * proc.ct.GetValueOrDefault();
-                dto.take_time = Math.Ceiling(packages / proc.upe.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault()) * proc.ct.GetValueOrDefault();
-            }
-            return dto;
-        }
-
-        /// <summary>
-        /// 通过Lqt计算工艺耗时
-        /// </summary>
-        /// <param name="Processes"></param>
-        /// <param name="packages"></param>
-        /// <returns></returns>
-        private List<StartTimeDto> CalcTakeTimeByLqt(List<mo_mes_tech_process> Processes, int packages)
-        {
-            //工序需要等待时间记录
-            List<StartTimeDto> starts = new List<StartTimeDto>();
-            StartTimeDto dto;
-            foreach (var chd in Processes)
-            {
-                dto = new StartTimeDto();
-                //添加耗时记录
-                dto.tech_id = chd.tech_id;
-                dto.proc_id = chd.proc_id;
-                dto.nextproc_id = chd.nextprocid;
-
-                //计算当前工序生产耗时
-                dto.take_time = CalcProcTakeTime(chd, packages);
-                if (chd.nextprocid == null)//最后一个工序
+                    ItemNum = item.item_number,
+                    QtyOrd = dto.LackQty,
+                    PlanStart = dto.kitting_time.Date.AddDays(1)
+                };
+                item.sys_material_date = ProductiveExamine(param);
+                item.sys_capacity_date = item.sys_material_date;
+                //计算系统交期(产能)
+                //获取主线最后一道工序
+                var routings = routingOps.Where(p => p.RoutingCode == item.item_number && p.ParentOp == 0).ToList();
+                if (routings.Count() == 0)
                 {
-                    dto.wait_time = dto.take_time;
+                    continue;
                 }
-                else
+                //获取产线
+                var prodLine = prodLines.FirstOrDefault(p=>p.Part == item.item_number && p.Op == routings.Last().Op);
+                if (prodLine == null)
                 {
-                    dto.wait_time = chd.lqt.Value;
+                    continue;
                 }
-                //添加记录
-                starts.Add(dto);
-            }
-            return starts;
-        }
-
-        /// <summary>
-        /// 计算当前工序生产时间
-        /// </summary>
-        /// <param name="proc"></param>
-        /// <param name="packages">件数</param>
-        /// <returns></returns>
-        private decimal CalcProcTakeTime(mo_mes_tech_process proc, int packages)
-        {
-            //当前工序生产时间
-            decimal takeTiem = 0.00m;
-
-            if (proc.wctype == 1)//人工型:数量/uph(一小时生产数量)*60(小时转换为分钟)/wsinuse(工位数)
-            {
-                if (proc.uph.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0)
+                //获取产线空闲开始时间
+                var schedules= periodSequences.Where(p => p.ItemNum == item.item_number && p.Op == prodLine.Op && p.Line == prodLine.Line).OrderByDescending(p => p.PlanDate).ToList();
+                if (schedules.Count() == 0)
                 {
-                    throw new NotImplementedException("当前工序uph或wsinuse参数配置错误,请调整!");
+                    continue;
                 }
-                takeTiem = packages / proc.uph.GetValueOrDefault() * 60 / proc.wsinuse.GetValueOrDefault();
-            }
-            else if (proc.wctype == 2)//流水线型:数量*ct(生产一件所需时间)/wsinuse(工位数)
-            {
-                if (proc.ct.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0)
-                {
-                    throw new NotImplementedException("当前工序ct或wsinuse参数配置错误,请调整!");
-                }
-                takeTiem = packages * proc.ct.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault();
-            }
-            else if (proc.wctype == 3)//设备型:向上取整(数量/一次可加工数量/wsinuse(工位数))*ct(老化一次所需时间)
-            {
-                if (proc.upe.GetValueOrDefault() == 0 || proc.wsinuse.GetValueOrDefault() == 0 || proc.ct.GetValueOrDefault() == 0)
+                //产线空闲开始时间
+                var lastTime = schedules.First().PlanDate.GetValueOrDefault().Date;
+                if (lastTime >= param.PlanStart)//如果产线空闲时间大于或者等于系统建议交期(物料)的开工时间
                 {
-                    throw new NotImplementedException("当前工序upe或ct或wsinuse参数配置错误,请调整!");
+                    //取下一天开始计算生产结束时间
+                    param.PlanStart = lastTime.AddDays(1);
+                    item.sys_capacity_date = ProductiveExamine(param);
                 }
-                takeTiem = Math.Ceiling(packages / proc.upe.GetValueOrDefault() / proc.wsinuse.GetValueOrDefault()) * proc.ct.GetValueOrDefault();
             }
-            return takeTiem;
+            return sentrys;
         }
     }
 }

+ 118 - 31
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -38,6 +38,8 @@ using Volo.Abp.Uow;
 using Spire.Pdf.Exporting.XPS.Schema;
 using Business.PriorityManagement;
 using Newtonsoft.Json.Linq;
+using Business.Dto;
+using NetTopologySuite.Simplify;
 
 namespace Business.ResourceExamineManagement
 {
@@ -220,13 +222,51 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private readonly ISqlRepository<RoutingOpDetail> _routingOpDetail;
 
+        /// <summary>
+        /// 生产线明细
+        /// </summary>
+        private readonly ISqlRepository<ProdLineDetail> _prodLineDetail;
+
+        /// <summary>
+        /// 排产记录表
+        /// </summary>
+        private readonly ISqlRepository<PeriodSequenceDet> _periodSequenceDet;
+
+        /// <summary>
+        /// 工作日历
+        /// </summary>
+        private readonly ISqlRepository<ShopCalendarWorkCtr> _shopCalendarWorkCtr;
+
+        /// <summary>
+        /// 休息时间段
+        /// </summary>
+        private readonly ISqlRepository<QualityLineWorkDetail> _qualityLineWorkDetail;
+
+        /// <summary>
+        /// 节假日
+        /// </summary>
+        private readonly ISqlRepository<HolidayMaster> _holidayMaster;
+
         /// <summary>
         /// 标准BOM表
         /// </summary>
         private readonly ISqlRepository<ProductStructureMaster> _productStructureMaster;
+
+        /// <summary>
+        /// 工单工序表
+        /// </summary>
         private readonly ISqlRepository<WorkOrdRouting> _workOrdRouting;
+
+        /// <summary>
+        /// 工单主表
+        /// </summary>
         private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
+
+        /// <summary>
+        /// 工单物料明细
+        /// </summary>
         private readonly ISqlRepository<WorkOrdDetail> _workOrdDetail;
+
         private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
         private readonly ISqlRepository<LocationDetail> _locationDetail;
         /// <summary>
@@ -264,10 +304,6 @@ namespace Business.ResourceExamineManagement
         private readonly BusinessDbContext _businessDbContext;
         private readonly ISqlRepository<TagMaster> _tagMasterRepository;
         /// <summary>
-        /// 生产周期明细
-        /// </summary>
-        private ISqlRepository<PeriodSequenceDet> _periodSequenceDet;
-        /// <summary>
         /// 生产线维护表
         /// </summary>
         private ISqlRepository<LineMaster> _lineMaster;
@@ -284,6 +320,11 @@ namespace Business.ResourceExamineManagement
         /// 优先级
         /// </summary>
         private readonly PriorityAppService _priorityAppService;
+
+        /// <summary>
+        /// 产能检查
+        /// </summary>
+        private readonly ProductExamineAppService _productExamineAppService;
         #endregion
 
         #region 构造函数
@@ -367,6 +408,11 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<NbrMaster> nbrMaster,
             ISqlRepository<NbrDetail> nbrDetail,
             PriorityAppService priorityAppService,
+            ISqlRepository<ProdLineDetail> prodLineDetail,
+            ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
+            ISqlRepository<QualityLineWorkDetail> qualityLineWorkDetail,
+            ISqlRepository<HolidayMaster> holidayMaster,
+            ProductExamineAppService productExamineAppService
             ISqlRepository<rf_serialnumber> rf_serialnumber,
             ISqlRepository<LocationDetail> locationDetail,
             ISqlRepository<ItemPackMaster> itemPackMaster
@@ -444,6 +490,12 @@ namespace Business.ResourceExamineManagement
             _nbrDetail = nbrDetail;
             _priorityAppService= priorityAppService;
             _rf_serialnumber = rf_serialnumber;
+            _prodLineDetail = prodLineDetail;
+            _shopCalendarWorkCtr = shopCalendarWorkCtr;
+            _qualityLineWorkDetail = qualityLineWorkDetail;
+            _holidayMaster = holidayMaster;
+            _productExamineAppService= productExamineAppService;
+    }
             _locationDetail=locationDetail;
             _itemPackMaster= itemPackMaster;
         }
@@ -483,6 +535,9 @@ namespace Business.ResourceExamineManagement
 
             //获取订单行数据
             List<crm_seorderentry> sentrys = await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && input.sorderId.Contains(p.seorder_id.GetValueOrDefault()) && !p.IsDeleted);
+
+            //处理销售订单优先级
+            sorders = _priorityAppService.CalcOrderPriority(sorders, sentrys);
             AsyncItemStockFromWMS(sentrys);
             //处理订单行优先级
             sentrys = _priorityAppService.CalcOrderEntryPriority(sorders, sentrys);
@@ -517,7 +572,8 @@ namespace Business.ResourceExamineManagement
                 AutoCreateBomBill(autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             }
-
+            //记录订单行的物料齐套时间
+            List<KittingTimeDto> kittingTimes = new List<KittingTimeDto>();
             DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments);
             foreach (var sorder in sorders)
             {
@@ -574,8 +630,18 @@ namespace Business.ResourceExamineManagement
                     dtl.BomChildExamineList = getBomList;
                     //添加订单行开工信息
                     examines.Add(dtl);
+
+                    //记录订单行的建议交期
+                    KittingTimeDto dto = new KittingTimeDto();
+                    dto.sentry_id = item.Id;
+                    dto.ItemNum = item.item_number;
+                    dto.LackQty = getBomList.First(p => p.level == 1).lack_qty;
+                    dto.kitting_time = dtl.kitting_times;
+                    kittingTimes.Add(dto);
                 }
             }
+            //计算订单行的建议交期(产能/物料)
+            CalcSuggestDate(sentrys, kittingTimes);
 
             await _mysql_crm_seorderentry.UpdateManyAsync(sentrys);
 
@@ -1845,29 +1911,23 @@ namespace Business.ResourceExamineManagement
         {
             List<long> itemIds = pretreatments.Select(p => p.item_id.GetValueOrDefault()).ToList();
             icitemlist.AddRange(_ic_item.GetManyByCondition(p => itemIds.Contains(p.mysql_id) && !p.IsDeleted).Result);
-            #region 1、数据准备
-            //1.1、获取工艺路径数据
-            List<mo_ic_bom> bomlist = _ic_bom.GetManyByCondition(p => itemIds.Contains(p.icitem_id) && p.use_status == 1 && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result.ToList();
-            List<mo_mes_technique> techs = GetMesTechniques(bomlist);
-            if (techs.Count == 0)
-            {
-                //throw new NotImplementedException("请先配置工艺路径!");
-            }
-
-            //1.2、获取工艺路径关联工序数据
-            List<mo_mes_tech_process> tech_Processes = _mes_tech_process.GetManyByCondition(p => techs.Select(m => m.mysql_id).Contains(p.tech_id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result;
-            if (tech_Processes.Count == 0)
-            {
-                //throw new NotImplementedException("请先配置工序!");
-            }
 
-            //1.3、获取当前工艺路径下的工序数据
-            List<long> procIds = tech_Processes.Select(m => m.proc_id).ToList();
-            List<mo_mes_process> process = _mes_process.GetManyByCondition(p => procIds.Contains(p.mysql_id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result;
+            #region 1、数据准备
+            //1.1、获取产能检查相关数据
+            //产品物料编码
+            List<string> itemnums = pretreatments.Where(p => p.level == 1).Select(p => p.item_number).Distinct().ToList();
+            //产线明细
+            List<ProdLineDetail> prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
+            //标注工序
+            List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
+            List<string> lines = prodLines.Select(p=>p.Line).Distinct().ToList();
+            //工作日历
+            List<ShopCalendarWorkCtr> calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
+            //休息日
+            List<QualityLineWorkDetail> qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
+            //节假日
+            List<HolidayMaster> holidays = _holidayMaster.Select(p => p.Dated >= DateTime.Now.Date);
 
-            //1.3、获取工艺工序关联工位信息
-            List<long> techProcIds = tech_Processes.Select(m => m.mysql_id).ToList();
-            List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result;
             //主工单
             List<mo_mes_morder> mo_Mes_Morders = _mes_morder.GetManyByCondition(x => boms.Select(p => p.bom_number).Contains(x.bom_number) && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
           && x.morder_icitem_type != MorderEnum.XgwyMorder) && x.tenant_id == param.tenantId && x.bang_id == bangid).Result;
@@ -1895,11 +1955,14 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.planList = planList;
             _CalcBomViewAppService.leadTimeList = leadTimeList;
             _CalcBomViewAppService.supplierList = supplierList;
-            //资源检查添加工艺路径数据
-            _CalcBomViewAppService.techs = techs;//工艺路径
-            _CalcBomViewAppService.tech_Processes = tech_Processes;//工艺关联工序
-            _CalcBomViewAppService.process = process;//工序
-            _CalcBomViewAppService.tech_Proc_Workshops = tech_Proc_Workshops;//工艺工序关联工位
+
+            //资源检查添加产线工序等数据
+            _CalcBomViewAppService.prodLines = prodLines;
+            _CalcBomViewAppService.routingOps = routingOps;
+            _CalcBomViewAppService.calendarWorks = calendarWorks;
+            _CalcBomViewAppService.qualityLineWorks = qualityLineWorks;
+            _CalcBomViewAppService.holidays = holidays;
+
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
             _CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
@@ -2308,6 +2371,10 @@ namespace Business.ResourceExamineManagement
             }
             //获取工单数据
             var workOrdMasters = _workOrdMaster.Select(p => workOrds.Contains(p.WorkOrd));
+            //获取已排产的工单
+            List<string> dbWorkOrds = _periodSequenceDet.Select(p => workOrds.Contains(p.WorkOrds)).Select(p => p.WorkOrds).Distinct().ToList();
+            //过滤掉已排产的工单
+            workOrdMasters = workOrdMasters.Where(p => !dbWorkOrds.Contains(p.WorkOrd)).ToList();
             //排产
             await _productionScheduleAppService.DoProductShcedule(workOrdMasters);
             AutoCreatePickBill(workOrds);
@@ -2450,5 +2517,25 @@ namespace Business.ResourceExamineManagement
                 RecursionProductStructure(parentItem, phantoms, rtnStructures);
             }
         }
+
+        /// <summary>
+        /// 计算订单行的系统建议交期
+        /// </summary>
+        /// <param name="sentrys"></param>
+        /// <param name="kittingTimes"></param>
+        public async void CalcSuggestDate(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes) 
+        {
+            //获取排产记录
+            List<string> itemNums = sentrys.Select(p=>p.item_number).Distinct().ToList();
+            DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
+            List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
+            _productExamineAppService.periodSequences = periodSequences;
+            if (sentrys.Count() == 0)
+            {
+                return;
+            }
+            sentrys = _productExamineAppService.CalcSuggestTime(sentrys, kittingTimes);
+            await _mysql_crm_seorderentry.UpdateManyAsync(sentrys);
+        }
     }
 }

+ 9 - 9
MicroServices/Business/Business.Test/MorderTest.cs

@@ -20,18 +20,18 @@ namespace Business.Test
             //Arrange
             var ProductExamine = new ProductExamineAppService();
             ProductExamineTest productExamineTest = new ProductExamineTest();
-            ProductExamine.techs = productExamineTest.CreateTechnique();
-            ProductExamine.process = productExamineTest.CreateProcess();
-            ProductExamine.tech_Processes = productExamineTest.CreateTechProcess();
+            //ProductExamine.techs = productExamineTest.CreateTechnique();
+            //ProductExamine.process = productExamineTest.CreateProcess();
+            //ProductExamine.tech_Processes = productExamineTest.CreateTechProcess();
             var morder = new MorderAppService(ProductExamine);
 
             //Act
-            ProdExamineParamDto prodExamine = new ProdExamineParamDto()
-            {
-                bom_number = "R650K",
-                version = "3.0",
-                packages = 1000
-            };
+            //ProdExamineParamDto prodExamine = new ProdExamineParamDto()
+            //{
+            //    bom_number = "R650K",
+            //    version = "3.0",
+            //    packages = 1000
+            //};
             //var result = sut.ProductiveExamine(prodExamine);
             //Assert
             //Xunit.Assert.Equal(14030, result);

+ 12 - 12
MicroServices/Business/Business.Test/ProductExamineTest.cs

@@ -24,20 +24,20 @@ namespace Business.Test
             //dev合并master测试注释
             //Arrange
             var sut = new ProductExamineAppService();
-            sut.techs = CreateTechnique();
-            sut.process = CreateProcess();
-            sut.tech_Processes = CreateTechProcess();
+            //sut.techs = CreateTechnique();
+            //sut.process = CreateProcess();
+            //sut.tech_Processes = CreateTechProcess();
 
             //Act
-            ProdExamineParamDto prodExamine = new ProdExamineParamDto()
-            {
-                bom_number = "R650K",
-                version = "3.0",
-                packages = 1000
-            };
-            var result =  sut.ProductiveExamine(prodExamine);
-            //Assert
-            Xunit.Assert.Equal(14030, result);
+            //ProdExamineParamDto prodExamine = new ProdExamineParamDto()
+            //{
+            //    bom_number = "R650K",
+            //    version = "3.0",
+            //    packages = 1000
+            //};
+            //var result =  sut.ProductiveExamine(prodExamine);
+            ////Assert
+            //Xunit.Assert.Equal(14030, result);
         }
 
         /// <summary>