浏览代码

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

Murphy 3 年之前
父节点
当前提交
1d51cb366f
共有 13 个文件被更改,包括 866 次插入120 次删除
  1. 30 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/OrderCheckDto.cs
  2. 213 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/OrderResourceDto.cs
  3. 25 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/PschedDto.cs
  4. 30 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/ResourceCheckInputDto.cs
  5. 6 1
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/SeorderentryDto.cs
  6. 15 1
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs
  7. 133 76
      MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs
  8. 33 15
      MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs
  9. 2 2
      MicroServices/Business/Business.Application/ResourceExamineManagement/PretreatmentAppService.cs
  10. 17 10
      MicroServices/Business/Business.Application/ResourceExamineManagement/PurchaseOrderAppService.cs
  11. 334 12
      MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs
  12. 26 1
      MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs
  13. 2 2
      MicroServices/Business/Bussiness.ApplicationTest/ResourceExamineManagement/ResourceExamineAppService_Tests.cs

+ 30 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/OrderCheckDto.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace Business.ResourceExamineManagement.Dto
+{
+    /// <summary>
+    /// 工单检查
+    /// </summary>
+    public class OrderCheckDto : EntityDto
+    {
+        /// <summary>
+        /// 企业id
+        /// </summary>
+        public long tenantId { get; set; }
+
+        /// <summary>
+        /// 工厂id
+        /// </summary>
+        public long factoryId { get; set; }
+
+        /// <summary>
+        /// 检查天数(未来几天)
+        /// </summary>
+        public int Day { get; set; }
+    }
+}

+ 213 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/OrderResourceDto.cs

@@ -0,0 +1,213 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.ResourceExamineManagement.Dto
+{
+    public class OrderResourceDto
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public long orderId { get; set; }
+
+        /// <summary>
+        /// 生产工单编号
+        /// </summary>
+        public string order_no { get; set; }
+
+        /// <summary>
+        /// 开工日期
+        /// </summary>
+        public DateTime time { get; set;}
+
+        /// <summary>
+        /// 齐套日期
+        /// </summary>
+        public DateTime ketting_time { get; set; }
+
+        /// <summary>
+        /// BOM编码
+        /// </summary>
+        public string bom_number { get; set;}
+
+        /// <summary>
+        /// 需要数量
+        /// </summary>
+        public decimal need_qty { get; set; }
+
+        /// <summary>
+        /// 物料齐套明细
+        /// </summary>
+        public List<OrderItemDto> order_item_list { get; set; }
+    }
+
+    public class OrderItemDto
+    {
+        /// <summary>
+        /// 物料id
+        /// </summary>
+        public long item_id { get; set; }
+
+        /// <summary>
+        /// bom编号
+        /// </summary>
+        public string bom_number { get; set; }
+
+        /// <summary>
+        /// 物料编号
+        /// </summary>
+        public string item_number { get; set; }
+
+        /// <summary>
+        /// 物料名称
+        /// </summary>
+        public string item_name { get; set; }
+
+        /// <summary>
+        /// 用量
+        /// </summary>
+        public decimal qty { get; set; }
+
+        /// <summary>
+        /// 本级缺料数量
+        /// </summary>
+        public decimal self_lack_qty { get; set; }
+
+        /// <summary>
+        /// 库存数量
+        /// </summary>
+        public decimal sqty { get; set; }
+
+        /// <summary>
+        /// 库存占用数量
+        /// </summary>
+        public decimal use_qty { get; set; }
+
+        /// <summary>
+        /// 在制占用数量
+        /// </summary>
+        public decimal mo_qty { get; set; }
+
+        /// <summary>
+        /// 在制工单占用明细
+        /// </summary>
+        public List<mo_occupy> mo_occupy_list { get; set; }
+
+        /// <summary>
+        /// 自制数量
+        /// </summary>
+        public decimal make_qty { get; set; }
+
+        /// <summary>
+        /// 自制工单明细
+        /// </summary>
+        public List<moorder> make_list { get; set; }
+
+        /// <summary>
+        /// 采购数量
+        /// </summary>
+        public decimal purchase_qty { get; set; }
+
+        /// <summary>
+        /// 采购明细
+        /// </summary>
+        public List<purchase> purchase_list { get; set; }
+
+        /// <summary>
+        /// 采购明细占用数量
+        /// </summary>
+        public decimal purchase_occupy_qty { get; set; }
+
+        /// <summary>
+        /// 采购占用明细
+        /// </summary>
+        public List<purchase_occupy> purchase_occupy_list { get; set; }
+
+        /// <summary>
+        /// 委外数量
+        /// </summary>
+        public decimal subcontracting_qty { get; set; }
+
+        /// <summary>
+        /// 委外工单明细
+        /// </summary>
+        public List<ooder> subcontracting_list { get; set; }
+
+        /// <summary>
+        /// 齐套时间
+        /// </summary>
+        public DateTime? kitting_time { get; set; }
+
+        /// <summary>
+        /// 群组代码
+        /// </summary>
+        public string substitute_code { get; set; }
+
+        /// <summary>
+        /// 替代策略
+        /// </summary>
+        public int? substitute_strategy { get; set; }
+
+        /// <summary>
+        /// 替代方式
+        /// </summary>
+        public int? substitute_mode { get; set; }
+
+        /// <summary>
+        /// 是否使用此物料
+        /// </summary>
+        public bool is_use { get; set; }
+    }
+
+    public class OrderResourceViewDto {
+        public List<OrderResourceDto> KittingCheckResultList { get; set; }
+
+        public List<DayBulletinBoard> DayBulletinBoardList { get; set; }
+    }
+
+    public class DayBulletinBoard
+    { 
+        /// <summary>
+        /// 日期
+        /// </summary>
+        public string day { get; set; }
+
+        /// <summary>
+        /// 物料名称
+        /// </summary>
+        public string item_name { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string item_number { get; set;}
+
+        /// <summary>
+        /// 库存占用数量
+        /// </summary>
+        public decimal use_qty { get; set; }
+
+        /// <summary>
+        /// 自制数量
+        /// </summary>
+        public decimal make_qty { get; set; }
+
+        /// <summary>
+        /// 在制占用数量
+        /// </summary>
+        public decimal mo_qty { get; set; }
+
+        /// <summary>
+        /// 采购占用数量
+        /// </summary>
+        public decimal purchase_occupy_qty { get; set; }
+
+        /// <summary>
+        /// 缺料数量
+        /// </summary>
+        public decimal self_lack_qty { get; set; }
+    }
+}

+ 25 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/PschedDto.cs

@@ -69,6 +69,26 @@ namespace Business.ResourceExamineManagement.Dto
         /// </summary>
         public long? sentry_id { get; set; }
 
+        /// <summary>
+        /// 工单id
+        /// </summary>
+        public long? morder_id { get; set; }
+
+        /// <summary>
+        /// 工单号
+        /// </summary>
+        public string morder_no { get; set; }
+
+        /// <summary>
+        /// BOM编码
+        /// </summary>
+        public string bom_number { get; set; }
+
+        /// <summary>
+        /// 需要数量
+        /// </summary>
+        public decimal need_qty { get; set; }
+
         /// <summary>
         /// 最早开工时间
         /// </summary>
@@ -79,6 +99,11 @@ namespace Business.ResourceExamineManagement.Dto
         /// </summary>
         public DateTime latest_times { get; set; }
 
+        /// <summary>
+        /// 工单开工时间
+        /// </summary>
+        public DateTime? order_statr_time { get; set; }
+
         /// <summary>
         /// 物料齐套时间
         /// </summary>

+ 30 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/ResourceCheckInputDto.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace Business.ResourceExamineManagement.Dto
+{
+    /// <summary>
+    /// 资源检查入参
+    /// </summary>
+    public class ResourceCheckInputDto : EntityDto
+    {
+        /// <summary>
+        /// 订单id
+        /// </summary>
+        public long sorderId { get; set; }
+
+        /// <summary>
+        /// 企业id
+        /// </summary>
+        public long tenantId { get; set; }
+
+        /// <summary>
+        /// 工厂id
+        /// </summary>
+        public long factoryId { get; set; }
+    }
+}

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

@@ -5,7 +5,7 @@ using Volo.Abp.Application.Dtos;
 namespace Business.ResourceExamineManagement.Dto
 {
     /// <summary>
-    /// 资源检查入参Dto
+    /// 资源检查参数
     /// </summary>
     public class SeorderentryDto:EntityDto 
     {
@@ -23,5 +23,10 @@ namespace Business.ResourceExamineManagement.Dto
         /// 工厂id
         /// </summary>
         public long factoryId { get; set; }
+
+        /// <summary>
+        /// 检查入口--用于判断是否需要生成(工单、委外、采购)
+        /// </summary>
+        public bool checkflag { get; set; }
     }
 }

+ 15 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -17,6 +17,20 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        Task<string> ReceiveResult(SeorderentryDto input);
+        Task<string> ReceiveResult(ResourceCheckInputDto input);
+
+        /// <summary>
+        /// ¹¤µ¥¼ì²é
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        Task<string> OrderResourceCheck(OrderCheckDto input);
+
+        /// <summary>
+        /// Ìæ´úÁϼì²é
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        Task<string> SubstituteResourceCheck(OrderCheckDto input);
     }
 }

+ 133 - 76
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -10,6 +10,8 @@ using Bussiness.MongoModel.MES.IC;
 using Bussiness.MongoModel.Production;
 using Bussiness.MongoModel.SRM;
 using Bussiness.MongoModel.Tech;
+using Spire.Pdf.Exporting.XPS.Schema;
+using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.wavelet.synthesis;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -128,9 +130,9 @@ namespace Business.ResourceExamineManagement
         /// <param name="returnlist"></param>
         /// <param name="bangid"></param>
         /// <param name="count"></param>
-        /// <param name="input"></param>
         /// <param name="plan_date"></param>
-        public void CalcView(List<BomChildExamineDto> returnlist, long bangid, decimal count, SeorderentryDto input, DateTime
+        /// <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)
         {
             //第一级
@@ -145,19 +147,52 @@ namespace Business.ResourceExamineManagement
             //先处理下最顶级的产品需要数量
 
             level1Dto.needCount = level1Dto.qty * count;
-            level1Dto.lack_qty = level1Dto.needCount - level1Dto.sqty;
+            if (param.checkflag)
+            {
+                //找到当前物料的占用记录
+                var itemSockoccupy = sklist.Where(s => s.icitem_id == level1Dto.item_id && s.bang_id == bangid).ToList();
+                //计算库存减去占用
+                level1Dto.sqty -= itemSockoccupy.Sum(s => s.quantity);
+                level1Dto.sqty = level1Dto.sqty < 0 ? 0 : level1Dto.sqty;
+                level1Dto.lack_qty = level1Dto.needCount - level1Dto.sqty;
+            }
+            else {
+                level1Dto.lack_qty = level1Dto.needCount;
+                level1Dto.sqty = 0;
+            }
             level1Dto.self_lack_qty = level1Dto.lack_qty;
             //平铺需要数量
             CaclMaterialShortage(returnlist);
 
-            Mes_MorderDto mes_MorderDto = new Mes_MorderDto();
+            Mes_MorderDto mes_MorderDto = null;
             if (level1Dto.lack_qty > 0)
             {
+                //直接占用库存,缺料就生成采购
+                mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
+                itemStockoccupyDto.bang_id = bangid;
+                itemStockoccupyDto.icitem_id = level1Dto.item_id;
+                itemStockoccupyDto.item_no = level1Dto.num;
+                if (sentrys != null)
+                {
+                    itemStockoccupyDto.orderentry_id = sentrys.Id;
+                }
+                if (level1Dto.sqty != 0 && param.checkflag)
+                {
+                    level1Dto.use_qty = level1Dto.sqty;
+                    itemStockoccupyDto.quantity = level1Dto.sqty;
+                    sklist.Add(itemStockoccupyDto);
+                }
+
                 //获取物料详情
                 var ic_item = icitemlist.Find(s => s.mysql_id == level1Dto.item_id);
                 _morderAppService.mo_Mes_Morders = mordersList;//工单
                 _morderAppService.mo_Mes_Mooccupies = mooccupyAllList;//工单占用
-                var mooccupylist = _morderAppService.CheckMorder(level1Dto.bom_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
+                List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
+                if (param.checkflag)
+                {
+                    //顶级无需检查在制
+                    mooccupylist = _morderAppService.CheckMorder(level1Dto.bom_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
+                }
 
                 if (mooccupylist.Any())
                 {
@@ -175,20 +210,10 @@ namespace Business.ResourceExamineManagement
                         level1Dto.mo_occupy_list.Add(mooc);
                     });
                 }
-                //直接占用库存,缺料就生成采购
-                mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
-                itemStockoccupyDto.bang_id = bangid;
-                itemStockoccupyDto.icitem_id = level1Dto.item_id;
-                itemStockoccupyDto.item_no = level1Dto.num;
-                itemStockoccupyDto.orderentry_id = sentrys.Id;
 
                 decimal moo_qty = mooccupylist.Sum(s => s.moo_qty.GetValueOrDefault());
                 level1Dto.mo_qty = moo_qty;
-                if (moo_qty != 0)
-                {
-                    itemStockoccupyDto.quantity = moo_qty;
-                    sklist.Add(itemStockoccupyDto);
-                }
+                
                 if (moo_qty == level1Dto.lack_qty)
                 {
                     //在制完全足够
@@ -205,44 +230,44 @@ namespace Business.ResourceExamineManagement
                     //先设定在制的齐套时间
                     //level1Dto.satisfy_time = mooccupylist[0]?.moo_etime;
                     level1Dto.stock_state = 0;
-                    //生成主工单
-                    GenerateMorderDto generateMorderDto = new GenerateMorderDto()
+                    if (param.checkflag)
                     {
-                        seorderentry = sentrys,
-                        seorder = seorder,
-                        ic_Item = ic_item,
-                        BomNumber = level1Dto.bom_number,
-                        version = level1Dto.version,
-                        number = level1Dto.item_number,
-                        Quantity = level1Dto.lack_qty,
-                        morder_type = MorderEnum.XsMorder,
-                        work_order_type = MorderEnum.CgMorder,
-                        morder_state = MorderEnum.Initial_state,
-                        bang_id = bangid,
+                        //生成主工单
+                        GenerateMorderDto generateMorderDto = new GenerateMorderDto()
+                        {
+                            seorderentry = sentrys,
+                            seorder = seorder,
+                            ic_Item = ic_item,
+                            BomNumber = level1Dto.bom_number,
+                            version = level1Dto.version,
+                            number = level1Dto.item_number,
+                            Quantity = level1Dto.lack_qty,
+                            morder_type = MorderEnum.XsMorder,
+                            work_order_type = MorderEnum.CgMorder,
+                            morder_state = MorderEnum.Initial_state,
+                            bang_id = bangid,
 
-                    };
-                    //生成主工单
-                    _morderAppService.process = process;
-                    _morderAppService.techs = techs;
-                    _morderAppService.tech_Processes = tech_Processes;
-                    _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
-                    mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
+                        };
+                        //生成主工单
+                        _morderAppService.process = process;
+                        _morderAppService.techs = techs;
+                        _morderAppService.tech_Processes = tech_Processes;
+                        _morderAppService.tech_Proc_Workshops = tech_Proc_Workshops;
+                        mes_MorderDto = _morderAppService.GenerateMorder(generateMorderDto);
+                    }
                 }
             }
             else
             {
+                level1Dto.is_use= true;
+                level1Dto.kitting_time = DateTime.Now;
+                level1Dto.lack_qty = 0;
                 level1Dto.satisfy_time = DateTime.Now;
                 level1Dto.stock_state = 1;
                 return;
             }
 
-            //这是从上往下展开计算缺料和可制
-            CaleLackItem(level1Dto, childList, returnlist, sklist, bangid);
-            //level1Dto.kz = childList.Min(s => s.kz);//得到最小可制数量。
-            //再加个循环,来根据替代关系里的检查结果,根据规则明确使用和生成占用关系。
-            List<long> childidList = new List<long>();
-            CalcIcitem(childList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
-            level1Dto.kitting_time = childList.Max(s => s.kitting_time);
+            MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
             //这里更新产品得满足时间。
             if (mes_MorderDto != null)
             {
@@ -267,7 +292,7 @@ namespace Business.ResourceExamineManagement
                         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 = level1Dto.kitting_time.Value.AddDays(1);//数据齐套完成后隔天开始生产;
+                        mes_Morders.moentry_sys_stime = childList.Max(s=>s.kitting_time.GetValueOrDefault()).AddDays(1);//数据齐套完成后隔天开始生产;
                         //结束日期=开始时间+生产时长+自检提前期+入库提前期+发运提前期;
                         var LeadTime = 0.00m;
                         if (plan != null)
@@ -309,6 +334,29 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        /// <summary>
+        /// 物料计算
+        /// </summary>
+        /// <param name="level1Dto"></param>
+        /// <param name="childList"></param>
+        /// <param name="returnlist"></param>
+        /// <param name="sklist"></param>
+        /// <param name="bangid"></param>
+        /// <param name="plan_date"></param>
+        /// <param name="sentrys"></param>
+        /// <param name="icitemlist"></param>
+        public void MatterTileDevelop(BomChildExamineDto level1Dto,List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist,long bangid,DateTime
+            ? plan_date, crm_seorderentry sentrys, List<mo_ic_item> icitemlist)
+        {
+            //这是从上往下展开计算缺料和可制
+            CaleLackItem(level1Dto, childList, returnlist, sklist, bangid);
+            //level1Dto.kz = childList.Min(s => s.kz);//得到最小可制数量。
+            //再加个循环,来根据替代关系里的检查结果,根据规则明确使用和生成占用关系。
+            List<long> childidList = new List<long>();
+            CalcIcitem(childList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
+        }
+
+
         /// <summary>
         /// 平铺计算物料情况
         /// </summary>
@@ -368,16 +416,17 @@ namespace Business.ResourceExamineManagement
             {
                 item.stock_state = parent.stock_state;
                 item.lack_qty = 0;
+                item.self_lack_qty = 0;
             }
             else
             {
                 //判断缺料数量
-                item.lack_qty = parent.lack_qty * item.qty - item.sqty;
+                item.self_lack_qty = parent.lack_qty * item.qty;
+                item.lack_qty = item.self_lack_qty - item.sqty;
                 item.lack_qty = item.lack_qty < 0 ? 0 : item.lack_qty;
                 //判断状态
                 item.stock_state = item.lack_qty > 0 ? 0 : 1;
             }
-            item.self_lack_qty = item.lack_qty;
         }
 
         /// <summary>
@@ -390,7 +439,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="input"></param>
         /// <param name="sklist"></param>
         /// <param name="plan_date"></param>
-        public void CalcIcitem(List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, long bangid, SeorderentryDto input, List<mo_ic_item_stockoccupy> sklist, DateTime
+        public void CalcIcitem(List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, long bangid, List<mo_ic_item_stockoccupy> sklist, DateTime
             ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
         {
             foreach (var item in childList)
@@ -405,10 +454,10 @@ namespace Business.ResourceExamineManagement
                     if (item.haveicsubs == 1)
                     {
                         //如果有替代关系,根据群组来明确使用哪个群组的替代料。按整批和混用逻辑来算
-                        // 如果有群组替代,就移除掉被检查过的记录 item.icitem_ids
+                        //如果有群组替代,就移除掉被检查过的记录 item.icitem_ids
                         //通过替代群组代码,将替代群组物料进行绑定。
                         childidList.AddRange(returnlist.Where(s => s.substitute_code == item.substitute_code).Select(d => d.bom_child_id.GetValueOrDefault()));
-                        CalcStrategy(item, returnlist, bangid, sklist, input, plan_date, icitemlist, sentrys, childidList);
+                        CalcStrategy(item, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                     }
                     else
                     {
@@ -421,7 +470,7 @@ namespace Business.ResourceExamineManagement
                         itemStockoccupyDto.item_no = item.num;
                         item.kitting_time = DateTime.Now;
                         item.is_use = true;
-                        StartProcessing(item, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input, childidList);
+                        StartProcessing(item, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, childidList);
                     }
                 }
             }
@@ -440,7 +489,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="bangid"></param>
         /// <param name="input"></param>
         public void StartProcessing(BomChildExamineDto item, List<mo_ic_item> icitemlist, List<BomChildExamineDto> returnlist, DateTime
-            ? plan_date, crm_seorderentry sentrys, List<mo_ic_item_stockoccupy> sklist, mo_ic_item_stockoccupy itemStockoccupyDto, long bangid, SeorderentryDto input, List<long> childidList)
+            ? plan_date, crm_seorderentry sentrys, List<mo_ic_item_stockoccupy> sklist, mo_ic_item_stockoccupy itemStockoccupyDto, long bangid, List<long> childidList)
         {
             var parent = returnlist.Find(s => s.id == item.parent_id);
             if (item.lack_qty > 0)
@@ -485,7 +534,7 @@ namespace Business.ResourceExamineManagement
                         //先计算末级数据的齐套时间。
                         if (cilList.Count() > 0)
                         {
-                            CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
+                            CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                             item.kitting_time = cilList.Max(s => s.kitting_time);
                         }
                         item.make_qty = item.lack_qty;
@@ -502,7 +551,10 @@ namespace Business.ResourceExamineManagement
                         _productExamineAppService.tech_Proc_Workshops = tech_Proc_Workshops;
 
                         item.make_qty = item.lack_qty;
-                        //todo:增加生成子工单后,这里需要加上生成的子工单的明细。
+                        /*if (param.checkflag)
+                        {
+                            //todo:增加生成子工单后,这里需要加上生成的子工单的明细。
+                        }*/
                         item.make_list = new List<moorder>();
                         var minute = _productExamineAppService.ProductiveExamine(prodExamine);
                         //系统建议完工日期为 开工日期+产能检查时间=完工日期
@@ -519,7 +571,7 @@ namespace Business.ResourceExamineManagement
                     if (item.lack_qty > 0)
                     {
                         //采购申请
-                        PackageSRMPR(item, input, bangid, plan_date);
+                        PackageSRMPR(item, bangid, plan_date);
                     }
                 }
                 else if (item.erp_cls == 2)
@@ -531,11 +583,11 @@ namespace Business.ResourceExamineManagement
                         //先计算末级数据的齐套时间。
                         if (cilList.Count() > 0)
                         {
-                            CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
+                            CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                             item.kitting_time = cilList.Max(s => s.kitting_time);
                         }
                         //1.先生成委外工单。
-                        var mesorder = CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                        var mesorder = CreateMesOOder(item, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
                         item.subcontracting_qty = item.lack_qty;
                         item.subcontracting_list = new List<ooder>();
                         ooder oo = new ooder();
@@ -552,7 +604,7 @@ namespace Business.ResourceExamineManagement
                         orderList.Add(mesorder);
                         //2.生成采购申请
                         //采购申请
-                        PackageSRMPR(item, input, bangid, plan_date);
+                        PackageSRMPR(item, bangid, plan_date);
                     }
                 }
             }
@@ -577,7 +629,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="sklist"></param>
         /// <param name="input"></param>
         /// <param name="plan_date"></param>
-        public void CalcStrategy(BomChildExamineDto item, List<BomChildExamineDto> returnlist, long bangid, List<mo_ic_item_stockoccupy> sklist, SeorderentryDto input, DateTime
+        public void CalcStrategy(BomChildExamineDto item, List<BomChildExamineDto> returnlist, long bangid, List<mo_ic_item_stockoccupy> sklist, DateTime
             ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
         {
             //提取群组关系
@@ -589,22 +641,22 @@ namespace Business.ResourceExamineManagement
                 case 0://整批
                     WholeBatchCheck(sublist, returnlist, sklist, select, bangid);
                     //如果都需要采购的情况下,则默认使用优先级最高的
-                    WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
+                    WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, plan_date, icitemlist, sentrys, childidList);
                     break;
                 case 1://混用
-                    MixedUse(item, sublist, returnlist, sklist, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
+                    MixedUse(item, sublist, returnlist, sklist, bangid, parent, plan_date, icitemlist, sentrys, childidList);
                     break;
                 case 2://整批加混用
                     WholeBatchCheck(sublist, returnlist, sklist, select, bangid);
                     if (select.Count() == 0)
                     {
                         //走混用
-                        MixedUse(item, sublist, returnlist, sklist, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
+                        MixedUse(item, sublist, returnlist, sklist, bangid, parent, plan_date, icitemlist, sentrys, childidList);
                     }
                     else
                     {
                         //走整批
-                        WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
+                        WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, plan_date, icitemlist, sentrys, childidList);
                     }
                     break;
             }
@@ -654,9 +706,8 @@ namespace Business.ResourceExamineManagement
         /// <param name="select"></param>
         /// <param name="bangid"></param>
         /// <param name="parent"></param>
-        /// <param name="input"></param>
         /// <param name="plan_date"></param>
-        public void WholeBatch(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent, SeorderentryDto input, DateTime
+        public void WholeBatch(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent, DateTime
             ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
         {
             if (select.Count() == 0)
@@ -682,7 +733,7 @@ namespace Business.ResourceExamineManagement
                 itemStockoccupyDto.icitem_id = slt.item_id;
                 itemStockoccupyDto.item_no = slt.num;
                 slt.is_use = true;
-                StartProcessing(slt, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input, childidList);
+                StartProcessing(slt, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, childidList);
             }
 
         }
@@ -696,9 +747,8 @@ namespace Business.ResourceExamineManagement
         /// <param name="sklist"></param>
         /// <param name="bangid"></param>
         /// <param name="parent"></param>
-        /// <param name="input"></param>
         /// <param name="plan_date"></param>
-        public void MixedUse(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent, SeorderentryDto input, DateTime
+        public void MixedUse(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent, DateTime
             ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
         {
 
@@ -774,7 +824,10 @@ namespace Business.ResourceExamineManagement
                             zy.stock_state = 1;
                         }
                         mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
-                        itemStockoccupyDto.orderentry_id = sentrys.Id;
+                        if (sentrys != null)
+                        {
+                            itemStockoccupyDto.orderentry_id = sentrys.Id;
+                        }
                         itemStockoccupyDto.bang_id = bangid;
                         itemStockoccupyDto.icitem_id = zy.item_id;
                         /*decimal moo_qty = use_p_num * zy.qty - zy.sqty;
@@ -829,7 +882,10 @@ namespace Business.ResourceExamineManagement
                     decimal sqty = sct.sqty - sct.use_qty;//这里得出前面混用使用后的库存。
                     decimal lack_Count = parent_lack * sct.qty;//混用后还缺的部分。
                     mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
-                    itemStockoccupyDto.orderentry_id = sentrys.Id;
+                    if (sentrys != null)
+                    {
+                        itemStockoccupyDto.orderentry_id = sentrys.Id;
+                    }
                     itemStockoccupyDto.bang_id = bangid;
                     itemStockoccupyDto.icitem_id = sct.item_id;
                     itemStockoccupyDto.item_no = sct.num;
@@ -856,7 +912,7 @@ namespace Business.ResourceExamineManagement
                             //先计算末级数据的齐套时间。
                             if (cilList.Count() > 0)
                             {
-                                CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
+                                CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                                 sct.kitting_time = cilList.Max(s => s.kitting_time);
                             }
                             //走自制
@@ -886,7 +942,7 @@ namespace Business.ResourceExamineManagement
                             if (sct.lack_qty > 0)
                             {
                                 //采购申请
-                                PackageSRMPR(sct, input, bangid, plan_date);
+                                PackageSRMPR(sct, bangid, plan_date);
                             }
                         }
                         else if (sct.erp_cls == 2)
@@ -898,11 +954,11 @@ namespace Business.ResourceExamineManagement
                                 //先计算末级数据的齐套时间。
                                 if (cilList.Count() > 0)
                                 {
-                                    CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
+                                    CalcIcitem(cilList, returnlist, bangid, sklist, plan_date, icitemlist, sentrys, childidList);
                                     sct.kitting_time = cilList.Max(s => s.kitting_time);
                                 }
                                 //1.先生成委外工单。
-                                var mesorder = CreateMesOOder(sct, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                var mesorder = CreateMesOOder(sct, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
                                 sct.subcontracting_qty = sct.lack_qty;
                                 sct.subcontracting_list = new List<ooder>();
                                 ooder oo = new ooder();
@@ -918,7 +974,7 @@ namespace Business.ResourceExamineManagement
                                 sct.kitting_time = mesorder.ooentry_etime;
                                 orderList.Add(mesorder);
                                 //采购申请
-                                PackageSRMPR(sct, input, bangid, plan_date);
+                                PackageSRMPR(sct, bangid, plan_date);
                             }
                         }
                     }
@@ -1030,6 +1086,7 @@ namespace Business.ResourceExamineManagement
         private mo_mes_oorder CreateMesOOder(BomChildExamineDto returnlist, long tenantId, long factoryid, long bangId, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_ic_item_pur> supplierList, DateTime deliveryDate)
         {
             mo_mes_oorder oOrder = new mo_mes_oorder();
+            oOrder.id = help.NextId();
             oOrder.GenerateNewId();
             oOrder.oorder_no = getOrderNum("WW");//生产工单编号
             oOrder.oorder_type = "委外工单";//生产工单类型
@@ -1105,10 +1162,10 @@ namespace Business.ResourceExamineManagement
             }
         }
 
-        public void PackageSRMPR(BomChildExamineDto item, SeorderentryDto input,long bangid,DateTime? plan_date)
+        public void PackageSRMPR(BomChildExamineDto item,long bangid,DateTime? plan_date)
         {
             //采购申请
-            var SRMPRDto = CreateSRMPR(item, input.tenantId, input.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
+            var SRMPRDto = CreateSRMPR(item, param.tenantId, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
             item.purchase_qty = item.lack_qty;
             item.purchase_list = new List<purchase>();
             if (SRMPRDto.srm_Pr_Main != null)

+ 33 - 15
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -36,6 +36,12 @@ namespace Business.ResourceExamineManagement
         ///// 销售订单明细
         ///// </summary>
         //private readonly IRepository<crm_seorderentry, long> _mysql_crm_seorderentry;
+
+        /// <summary>
+        /// 资源检查入参
+        /// </summary>
+        public SeorderentryDto param = new SeorderentryDto();
+
         /// <summary>
         /// 产能检查
         /// </summary>
@@ -155,13 +161,14 @@ namespace Business.ResourceExamineManagement
             }
 
             mes_Morder.moentry_startup_status = 0;
-            mes_Morder.tenant_id = generateMorderDto.seorderentry.tenant_id;
-            mes_Morder.factory_id = generateMorderDto.seorderentry.factory_id;
+            mes_Morder.tenant_id = param.tenantId;
+            mes_Morder.factory_id = param.factoryId;
             mes_Morder.product_code = generateMorderDto.number;
             mes_Morder.product_name = generateMorderDto.ic_Item.name;
-            mes_Morder.project_name = generateMorderDto.seorder.project_name;
-            mes_Morder.planner_num = generateMorderDto.seorderentry.planner_no;
-            mes_Morder.planner_name = generateMorderDto.seorderentry.planner_name;
+            if (generateMorderDto.seorder != null)
+            {
+                mes_Morder.project_name = generateMorderDto.seorder.project_name;
+            }
             mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
             //mes_Morder.morder_fstate = "计划";
             //TODO:目前没有取值位置
@@ -182,14 +189,12 @@ namespace Business.ResourceExamineManagement
             mes_Moentry.bang_id = generateMorderDto.bang_id;
             mes_Moentry.moentry_moid = mes_Morder.mysql_id;
             mes_Moentry.moentry_mono = mes_Morder.morder_no;
-            mes_Moentry.soentry_id = generateMorderDto.seorderentry.Id;
-            mes_Moentry.fbill_no = generateMorderDto.seorderentry.bill_no;
-            mes_Moentry.fentry_id = generateMorderDto.seorderentry.entry_seq.Value;
             mes_Moentry.unit = generateMorderDto.ic_Item.unit;
             mes_Moentry.morder_production_number = generateMorderDto.Quantity;
             mes_Moentry.need_number = generateMorderDto.Quantity;
             mes_Moentry.remaining_number = 0;
-            mes_Moentry.factory_id = generateMorderDto.seorderentry.factory_id;
+            mes_Moentry.tenant_id = param.tenantId;
+            mes_Moentry.factory_id = param.factoryId;
 
             Mes_MorderDto mes_MorderDto = new Mes_MorderDto();
             mes_MorderDto.mes_Morders = new List<mo_mes_morder>();
@@ -197,6 +202,15 @@ namespace Business.ResourceExamineManagement
             mes_MorderDto.mes_Morders.Add(mes_Morder);
             mes_MorderDto.mes_Moentries.Add(mes_Moentry);
 
+            if (generateMorderDto.seorderentry != null)
+            {
+                mes_Morder.planner_num = generateMorderDto.seorderentry.planner_no;
+                mes_Morder.planner_name = generateMorderDto.seorderentry.planner_name;
+                mes_Moentry.soentry_id = generateMorderDto.seorderentry.Id;
+                mes_Moentry.fbill_no = generateMorderDto.seorderentry.bill_no;
+                mes_Moentry.fentry_id = generateMorderDto.seorderentry.entry_seq.Value;
+            }
+
             return mes_MorderDto;
 
             //using (TransactionScope scope = new TransactionScope())
@@ -433,9 +447,14 @@ namespace Business.ResourceExamineManagement
             mes_Mooccupy.mysql_id = snowFlake.NextId();
             mes_Mooccupy.bang_id = bang_id;
             mes_Mooccupy.moo_id_type = MorderEnum.Zyjc_Type;
-            mes_Mooccupy.moo_id_billid = seorderentry.Id;//销售子表ID
-            mes_Mooccupy.fbill_no = seorderentry.bill_no;//销售订单号
-            mes_Mooccupy.fentry_id = seorderentry.entry_seq.Value;//销售订单行
+            if (seorderentry != null)
+            {
+                mes_Mooccupy.moo_id_billid = seorderentry.Id;//销售子表ID
+                mes_Mooccupy.fbill_no = seorderentry.bill_no;//销售订单号
+                mes_Mooccupy.fentry_id = seorderentry.entry_seq.Value;//销售订单行
+                mes_Mooccupy.org_id = seorderentry.org_id;
+            }
+            
             mes_Mooccupy.fitem_name = ic_item.name;//物料名称
             mes_Mooccupy.fitem_number = ic_item.number;
             mes_Mooccupy.fmodel = ic_item.model;//规格型号
@@ -449,9 +468,8 @@ namespace Business.ResourceExamineManagement
             //mes_Mooccupy.moo_cbr = string.Empty;
             //mes_Mooccupy.moo_ctime = ;
             //mes_Mooccupy.moo_creason = string.Empty;
-            mes_Mooccupy.tenant_id = seorderentry.tenant_id;//取销售子表企业ID
-            mes_Mooccupy.factory_id = seorderentry.factory_id;
-            mes_Mooccupy.org_id = seorderentry.org_id;
+            mes_Mooccupy.tenant_id = param.tenantId;//取销售子表企业ID
+            mes_Mooccupy.factory_id = param.factoryId;
             return mes_Mooccupy;
         }
     }

+ 2 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/PretreatmentAppService.cs

@@ -100,7 +100,7 @@ namespace Business.ResourceExamineManagement
 
             //var bdto = ObjectMapper.Map<ic_bom,BomChildExamineDto>(bom);
             returnlist.Add(dto);
-            var childlist = bomchildlist.Where(a => a.bom_id == bom.mysql_id).ToList();
+            var childlist = bomchildlist.Where(a => a.bom_id == bom.mysql_id).OrderBy(s=>s.child_num).ToList();
 
             int idx = 1;
             foreach (var c in childlist)
@@ -207,7 +207,7 @@ namespace Business.ResourceExamineManagement
                     var sall = suballlist.Where(s => s.substitute_id == sl.mysql_id).ToList();
                     foreach (var sal in sall)
                     {
-                        var sadl = subdtllist.Where(s => s.substitute_allid == sal.mysql_id).ToList();
+                        var sadl = subdtllist.Where(s => s.substitute_allid == sal.mysql_id).OrderBy(c => c.num).ToList();
                         foreach (var dtl in sadl)
                         {
                             if (sal.main_material.GetValueOrDefault() != 1)

+ 17 - 10
MicroServices/Business/Business.Application/ResourceExamineManagement/PurchaseOrderAppService.cs

@@ -1,6 +1,7 @@
 using Business.Core.Enum;
 using Business.Core.MongoDBHelper;
 using Business.Core.Utilities;
+using Business.ResourceExamineManagement.Dto;
 using Bussiness.Model.MES.IC;
 using Bussiness.Model.Sale;
 using Bussiness.Model.SRM;
@@ -38,6 +39,12 @@ namespace Business.ResourceExamineManagement
         ///// 采购申请单
         ///// </summary>
         ////private readonly IMongoDB<mo_srm_pr_main> _mo_srm_pr_main;
+
+        /// <summary>
+        /// 资源检查入参
+        /// </summary>
+        public SeorderentryDto param = new SeorderentryDto();
+
         /// <summary>
         ///  雪花算法
         /// </summary>
@@ -76,10 +83,6 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         public List<mo_srm_po_occupy> CheckPurchaseOrder(crm_seorderentry seorderentry, long icitem_id, decimal Quantity, DateTime DeliverDate, List<mo_ic_plan> ic_PlanList, long bang_id)
         {
-            if (seorderentry == null)
-            {
-                //TODO:入参异常
-            }
             List<mo_srm_po_occupy> occupyList = new List<mo_srm_po_occupy>();
 
             var ic_Plan = ic_PlanList.Where(x => x.icitem_id == icitem_id).FirstOrDefault();
@@ -143,17 +146,21 @@ namespace Business.ResourceExamineManagement
             srm_Po_Occupy.bang_id = bang_id;
             srm_Po_Occupy.polist_id = srm_po_list.id;
             srm_Po_Occupy.polist_row = srm_po_list.polist_row;
-            srm_Po_Occupy.eid = seorderentry.entry_seq.Value;
-            srm_Po_Occupy.bill_no = seorderentry.seorder_id;
-            srm_Po_Occupy.entry_id = seorderentry.entry_seq.GetValueOrDefault();
+            if (seorderentry != null)
+            {
+                srm_Po_Occupy.eid = seorderentry.entry_seq.Value;
+                srm_Po_Occupy.bill_no = seorderentry.seorder_id;
+                srm_Po_Occupy.entry_id = seorderentry.entry_seq.GetValueOrDefault();
+                srm_Po_Occupy.org_id = seorderentry.org_id;
+            }
+            
             srm_Po_Occupy.qty = number;
             srm_Po_Occupy.type = MorderEnum.Zyjc_Type;//TODO:类型未知
             srm_Po_Occupy.stime = srm_po_list.create_time;
             srm_Po_Occupy.etime = srm_po_list.rarrdate;
             srm_Po_Occupy.state = 1;
-            srm_Po_Occupy.tenant_id = seorderentry.tenant_id;//取销售子表企业ID
-            srm_Po_Occupy.factory_id = seorderentry.factory_id;
-            srm_Po_Occupy.org_id = seorderentry.org_id;
+            srm_Po_Occupy.tenant_id = param.tenantId;//取销售子表企业ID
+            srm_Po_Occupy.factory_id = param.factoryId;
             return srm_Po_Occupy;
         }
     }

+ 334 - 12
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -15,6 +15,7 @@ using Microsoft.EntityFrameworkCore;
 using MongoDB.Driver;
 using MongoDB.Driver.Linq;
 using Newtonsoft.Json;
+using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.wavelet.synthesis;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -200,6 +201,11 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private readonly PurchaseOrderAppService _purchaseOrderAppService;
 
+        /// <summary>
+        /// 工单App
+        /// </summary>
+        private readonly MorderAppService _morderAppService;
+
         /// <summary>
         /// 计算BOM平铺物料情况
         /// </summary>
@@ -266,7 +272,8 @@ namespace Business.ResourceExamineManagement
             PretreatmentAppService pretreatmentAppService,
             CalcBomViewAppService calcbomviewAppService,
             PurchaseOrderAppService purchaseOrderAppService,
-            ICurrentTenant currentTenant
+            ICurrentTenant currentTenant,
+            MorderAppService morderAppService
             )
         {
             _mes_technique = mes_technique;
@@ -314,6 +321,7 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService = calcbomviewAppService;
             _purchaseOrderAppService = purchaseOrderAppService;
             _currentTenant = currentTenant;
+            _morderAppService = morderAppService;
         }
         #endregion
 
@@ -323,12 +331,13 @@ namespace Business.ResourceExamineManagement
         /// <param name="input"></param>
         /// <returns></returns>
         /// <exception cref="NotImplementedException"></exception>
-        public async Task<string> ReceiveResult(SeorderentryDto input)
+        public async Task<string> ReceiveResult(ResourceCheckInputDto input)
         {
             //资源检查入参全局变量赋值
             param.sorderId = input.sorderId;
             param.tenantId = input.tenantId;
             param.factoryId = input.factoryId;
+            param.checkflag = true;
 
             //资源检查结果
             PschedDto rtn = new PschedDto();
@@ -361,11 +370,27 @@ namespace Business.ResourceExamineManagement
             //FilterDefinition<ic_bom> filter = Builders<ic_bom>.Filter.In(s => s.bom_number, sentrys.Select(m => m.bom_number).ToList());
             //List<ic_bom> boms = _ic_bom.GetManyByIds(filter).Result.Where(p => p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).ToList();
             List<mo_ic_bom> boms = _ic_bom.Find(p => sentrys.Select(m => m.item_number).Contains(p.item_number) && p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).Result.ToList();
-
             //物料bom
             List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
             //物料bom明细
             List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
+            //物料信息
+            List<mo_ic_item> icitemlist = new List<mo_ic_item>();
+            //替代关系
+            List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
+            List<mo_ic_substitute_all> suballlist = new List<mo_ic_substitute_all>();
+            List<mo_ic_substitute_all_dtl> subdtllist = new List<mo_ic_substitute_all_dtl>();
+            //物料库存表
+            List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
+            //物料占用记录
+            List<mo_ic_item_stockoccupy> sklist = new List<mo_ic_item_stockoccupy>();
+
+            DataInitialization(boms, bangid, sorder, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist, stocklist, sklist);
+
+            /*//物料bom
+            List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
+            //物料bom明细
+            List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
             //获取物料bom,物料bom明细
             GetIcBomData(boms, bomlist, bomchildlist);
 
@@ -430,8 +455,6 @@ namespace Business.ResourceExamineManagement
             supplierList = GetSupplier(itemIds, input.tenantId, input.factoryId);//供应商列表
             planList = GetICPlan(itemIds, input.tenantId, input.factoryId);//plan列表
 
-            //var srm_po_list = _srm_po_list.GetManyByCondition(x => itemIds.Contains(x.icitem_id.GetValueOrDefault()) && x.state == 1 && x.rstate == 1).Result;
-
             _CalcBomViewAppService.param = param;
             _CalcBomViewAppService.planList = planList;
             _CalcBomViewAppService.leadTimeList = leadTimeList;
@@ -441,15 +464,11 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.tech_Processes = tech_Processes;//工艺关联工序
             _CalcBomViewAppService.process = process;//工序
             _CalcBomViewAppService.tech_Proc_Workshops = tech_Proc_Workshops;//工艺工序关联工位
-
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
-                                                                      // _CalcBomViewAppService.srm_po_list = srm_po_list;//采购明细
-
             _CalcBomViewAppService.seorder = sorder;//销售订单
-
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
-            _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
+            _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表*/
 
             foreach (var item in sentrys)
             {
@@ -471,7 +490,7 @@ namespace Business.ResourceExamineManagement
                 //库存初始化
                 _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
                 //计算
-                _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.Value, input, item.plan_date, sklist, item, icitemlist);
+                _CalcBomViewAppService.CalcView(getBomList, bangid, item.qty.Value, item.plan_date, sklist, item, icitemlist);
 
                 //TODO:最晚开始时间
                 var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
@@ -515,7 +534,7 @@ namespace Business.ResourceExamineManagement
             }
             if (_CalcBomViewAppService.SRMPRDtoList.Any())
             {
-                var prlist = _CalcBomViewAppService.SRMPRDtoList.Select(s => s.srm_Pr_Main).ToList();
+                var prlist = _CalcBomViewAppService.SRMPRDtoList.Where(f => f.srm_Pr_Main != null).Select(s => s.srm_Pr_Main).ToList();
                 await _srm_pr_main.InsertMany(prlist);
                 rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
             }
@@ -1073,5 +1092,308 @@ namespace Business.ResourceExamineManagement
             string new_orderNum = preCode + Dates + Rdm.Next(0, 100000000) + newts;
             return new_orderNum;
         }
+
+        /// <summary>
+        /// 工单齐套检查
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<string> OrderResourceCheck(OrderCheckDto input)
+        {
+            var result = await OrderKittingCheck(input);
+            OrderResourceViewDto rtn = DataPackage(result);
+            rtn.DayBulletinBoardList = rtn.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
+            return JsonConvert.SerializeObject(rtn);
+        }
+
+        /// <summary>
+        /// 替代关系检查
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<string> SubstituteResourceCheck(OrderCheckDto input)
+        {
+            var result = await OrderKittingCheck(input);
+            OrderResourceViewDto rtn = DataPackage(result, true);
+            rtn.DayBulletinBoardList = rtn.DayBulletinBoardList.OrderByDescending(d => d.day).ToList();
+            return JsonConvert.SerializeObject(rtn);
+        }
+
+        public OrderResourceViewDto DataPackage(PschedDto result,bool flag =false)
+        {
+            OrderResourceViewDto rtn = new OrderResourceViewDto();
+            rtn.KittingCheckResultList = new List<OrderResourceDto>();
+            rtn.DayBulletinBoardList = new List<DayBulletinBoard>();
+            result.examines.ForEach(examine =>
+            {
+                OrderResourceDto dto = new OrderResourceDto();
+                dto.orderId = examine.morder_id.GetValueOrDefault();
+                dto.order_no = examine.morder_no;
+                dto.time = examine.order_statr_time.GetValueOrDefault();
+                dto.ketting_time = examine.kitting_times;
+                dto.need_qty = examine.need_qty;
+                dto.bom_number = examine.bom_number;
+                dto.order_item_list = new List<OrderItemDto>();
+                var list = examine.BomChildExamineList;
+                if (flag)
+                {
+                    list = list.Where(s => s.type == 1 || s.haveicsubs == 1).ToList();
+                }
+                list.ForEach(subitem =>
+                {
+                    OrderItemDto cdto = new OrderItemDto();
+                    cdto.bom_number = subitem.bom_number;
+                    cdto.item_id = subitem.item_id;
+                    cdto.item_name = subitem.item_name;
+                    cdto.item_number = subitem.item_number;
+                    cdto.qty = subitem.qty;
+                    cdto.self_lack_qty = subitem.self_lack_qty;
+                    cdto.sqty = subitem.sqty;
+                    cdto.use_qty = subitem.use_qty;
+                    cdto.mo_qty = subitem.mo_qty;
+                    cdto.mo_occupy_list = subitem.mo_occupy_list;
+                    cdto.make_qty = subitem.make_qty;
+                    cdto.make_list = subitem.make_list;
+                    cdto.purchase_qty = subitem.purchase_qty;
+                    cdto.purchase_list = subitem.purchase_list;
+                    cdto.purchase_occupy_qty = subitem.purchase_occupy_qty;
+                    cdto.purchase_occupy_list = subitem.purchase_occupy_list;
+                    cdto.subcontracting_qty = subitem.subcontracting_qty;
+                    cdto.subcontracting_list = subitem.subcontracting_list;
+                    cdto.kitting_time = subitem.kitting_time;
+                    cdto.substitute_code = subitem.substitute_code;
+                    cdto.substitute_strategy = subitem.substitute_strategy;
+                    cdto.substitute_mode = subitem.substitute_mode;
+                    cdto.is_use = subitem.is_use;
+                    dto.order_item_list.Add(cdto);
+                    string day = dto.time.ToString("yyyy-MM-dd");
+                    if (subitem.is_use)
+                    {
+                        DayBulletinBoard dbb = rtn.DayBulletinBoardList.Find(s => s.day == day && s.item_number == cdto.item_number);
+                        if (dbb == null)
+                        {
+                            dbb = new DayBulletinBoard();
+                            dbb.day = day;
+                            dbb.item_name = cdto.item_name;
+                            dbb.item_number = cdto.item_number;
+                        }
+                        dbb.self_lack_qty += subitem.self_lack_qty;
+                        dbb.use_qty += subitem.use_qty;
+                        dbb.make_qty += cdto.make_qty;
+                        dbb.mo_qty += subitem.mo_qty;
+                        dbb.purchase_occupy_qty += subitem.purchase_occupy_qty;
+                        rtn.DayBulletinBoardList.Add(dbb);
+                    }
+                });
+                rtn.KittingCheckResultList.Add(dto);
+            });
+            return rtn;
+        }
+
+        /// <summary>
+        /// 工单检查物料齐套
+        /// </summary>
+        /// <param name="input"></param>
+        public async Task<PschedDto> OrderKittingCheck(OrderCheckDto input)
+        {
+            //资源检查结果
+            PschedDto rtn = new PschedDto();
+            //资源检查明细list
+            List<ExamineResult> examines = new List<ExamineResult>();
+
+            //资源检查入参全局变量赋值
+            param.tenantId = input.tenantId;
+            param.factoryId = input.factoryId;
+            param.checkflag = false;
+
+            //生成当前计算bangid
+            long bangid = help.NextId();
+
+            /*List<mo_mes_morder> mo_Mes_Morders = _mes_morder.GetManyByCondition(x => x.start_time > DateTime
+            .Now.Date.AddDays(1) && x.start_time < DateTime
+            .Now.Date.AddDays(input.Day) && x.morder_state == MorderEnum.Initial_state && !x.IsDeleted && x.tenant_id == param.tenantId && x.bang_id == bangid).Result;
+
+            List<mo_mes_moentry> mo_Mes_Moentries = _mes_moentry.GetManyByCondition(x=> mo_Mes_Morders.Select(s => s.id).Contains(x.moentry_moid.Value)).Result;*/
+
+            List <mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime
+            .Now.Date.AddDays(1) && x.start_time < DateTime
+            .Now.Date.AddDays(input.Day) && x.morder_state != MorderEnum.Accomplish_state && !x.IsDeleted && x.tenant_id == param.tenantId).Result;
+
+            List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => mo_Mes_Morders.Select(s => s.Id).Contains(x.moentry_moid.Value)).Result;
+
+            //获取订单行数据
+            List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
+
+            //删除同步Mysql后旧数据
+            await DeleteMySqlOldData(sentrys);
+            //数据库快照-同步mysql库数据到mongoDB中
+            await DbSnapShot(input.tenantId, input.factoryId, bangid);
+
+            List<mo_ic_bom> boms = _ic_bom.Find(p => mo_Mes_Morders.Select(m => m.bom_number).Contains(p.bom_number) && p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).Result.ToList();
+
+            //物料bom
+            List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
+            //物料bom明细
+            List<mo_ic_bom_child> bomchildlist = new List<mo_ic_bom_child>();
+            //物料信息
+            List<mo_ic_item> icitemlist = new List<mo_ic_item>();
+            //替代关系
+            List<mo_ic_substitute> sublist = new List<mo_ic_substitute>();
+            List<mo_ic_substitute_all> suballlist = new List<mo_ic_substitute_all>();
+            List<mo_ic_substitute_all_dtl> subdtllist = new List<mo_ic_substitute_all_dtl>();
+            //物料库存表
+            List<mo_ic_item_stock> stocklist = new List<mo_ic_item_stock>();
+            //物料占用记录
+            List<mo_ic_item_stockoccupy> sklist = new List<mo_ic_item_stockoccupy>();
+
+            //sorder=null  是因为齐套检查不需要生成工单、采购、委外等信息,所以不需要关联的工单信息传递进去。
+            DataInitialization(boms, bangid, null, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist, stocklist, sklist);
+
+            foreach (var item in mo_Mes_Morders)
+            {
+                var moentry = mo_Mes_Moentries.Find(s => s.moentry_moid == item.Id);
+                if (moentry == null)
+                {
+                    continue;
+                }
+                var sentry = sentrys.Find(s => s.Id == moentry.soentry_id);
+
+                //工单资源检查信息
+                ExamineResult dtl = new ExamineResult();
+                dtl.morder_id = item.Id;
+                dtl.morder_no = item.morder_no;
+                
+                dtl.order_statr_time = item.start_time;
+                dtl.bom_number = item.bom_number;
+                dtl.need_qty = item.need_number.GetValueOrDefault();
+
+                //获取当前物料bom数据
+                var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
+                //bom层级组装
+                var getBomList = _pretreatmentAppService.BomPretreatment(childBom.mysql_id, bomlist, bomchildlist, icitemlist);
+                //bom替代关系组装
+                _pretreatmentAppService.BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
+                if (sentry != null)
+                {
+                    dtl.sentry_id = sentry.Id;
+                    getBomList.ForEach(s => s.sentry_id = item.Id);
+                }
+
+                //库存初始化
+                _CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
+                //计算
+                _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, icitemlist);
+
+                //TODO:最晚开始时间
+                var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
+                //物料齐套时间
+                dtl.kitting_times = getBomList.Where(p => p.is_use && p.kitting_time != null).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
+                //替代关系展开list
+                dtl.BomChildExamineList = getBomList;
+                //添加订单行开工信息
+                examines.Add(dtl);
+            }
+            rtn.examines = examines;
+            //清空快照数据
+            await ClearSnapShot(bangid);
+            return rtn;
+        }
+
+        /// <summary>
+        /// 物料数据计算前准备
+        /// </summary>
+        /// <param name="boms"></param>
+        /// <param name="bangid"></param>
+        /// <param name="sorder"></param>
+        /// <param name="bomlist"></param>
+        /// <param name="bomchildlist"></param>
+        /// <param name="icitemlist"></param>
+        /// <param name="sublist"></param>
+        /// <param name="suballlist"></param>
+        /// <param name="subdtllist"></param>
+        /// <param name="stocklist"></param>
+        /// <param name="sklist"></param>
+        /// <exception cref="NotImplementedException"></exception>
+        public void DataInitialization(List<mo_ic_bom> boms,long bangid, crm_seorder sorder, List<mo_ic_bom> bomlist, List<mo_ic_bom_child> bomchildlist, List<mo_ic_item> icitemlist, List<mo_ic_substitute> sublist, List<mo_ic_substitute_all> suballlist, List<mo_ic_substitute_all_dtl> subdtllist, List<mo_ic_item_stock> stocklist, List<mo_ic_item_stockoccupy> sklist)
+        {
+            //获取物料bom,物料bom明细
+            GetIcBomData(boms, bomlist, bomchildlist);
+
+            //根据明细集合查出所有得替代关系表数据集合
+            List<string> codeList = bomchildlist.Select(c => c.substitute_code).ToList();
+            sublist.AddRange(_ic_substitute.GetManyByCondition(p => codeList.Contains(p.substitute_code) && !p.IsDeleted).Result);
+
+            List<long> subidlist = sublist.Select(c => c.mysql_id).ToList();
+            suballlist.AddRange(_ic_substitute_all.GetManyByCondition(p => subidlist.Contains(p.substitute_id) && !p.IsDeleted).Result);
+
+            List<long> suballidlist = suballlist.Select(c => c.mysql_id).ToList();
+            subdtllist.AddRange(_ic_substitute_all_dtl.GetManyByCondition(p => suballidlist.Contains(p.substitute_allid) && !p.IsDeleted).Result);
+
+            #region 1、数据准备
+            //1.1、获取工艺路径数据
+            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).ToList().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;
+
+            //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.IsDeleted && x.tenant_id == param.tenantId && x.bang_id == bangid).Result;
+            //工单占用表
+            List<mo_mes_mooccupy> mes_mooccupyList = _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == param.tenantId
+          && boms.Select(p => p.item_number).Contains(x.fitem_number) && x.bang_id == bangid).Result;
+
+            //物料采购订单明细
+            var poDetailList = _srm_po_list.GetManyByCondition(x => boms.Select(p => p.icitem_id).ToList().Contains(x.icitem_id.Value) && x.state == 1 && x.rstate == 1 && !x.IsDeleted).Result;
+            //采购订单占用数据
+            var poOccupys = _srm_po_occupy.GetManyByCondition(x => poDetailList.Select(p => p.id).ToList().Contains(x.polist_id) && !x.IsDeleted).Result;
+            #endregion
+
+            //获取物料数据
+            List<long> itemIds = bomlist.Select(p => p.icitem_id).ToList();
+            itemIds.AddRange(bomchildlist.Select(p => p.icitem_id).ToList());
+            itemIds.AddRange(subdtllist.Select(p => p.icitem_id).ToList());
+            icitemlist.AddRange(_ic_item.GetManyByCondition(p => itemIds.Contains(p.mysql_id) && !p.IsDeleted).Result);
+
+            //物料库存
+            stocklist.AddRange(_ic_item_stock.GetManyByCondition(p => p.factory_id == param.factoryId && p.bang_id == bangid && itemIds.Contains(p.icitem_id)).Result);
+
+            //物料提前期
+            leadTimeList = GetLeadTime(itemIds, param.tenantId, param.factoryId);//提前期列表
+            supplierList = GetSupplier(itemIds, param.tenantId, param.factoryId);//供应商列表
+            planList = GetICPlan(itemIds, param.tenantId, param.factoryId);//plan列表
+
+            _morderAppService.param = param;
+            _purchaseOrderAppService.param = param;
+            _CalcBomViewAppService.param = param;
+            _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.mordersList = mo_Mes_Morders;//工单
+            _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
+            _CalcBomViewAppService.seorder = sorder;//销售订单
+            _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
+            _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
+        }
     }
 }

+ 26 - 1
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -32,9 +32,34 @@ namespace Business.Controllers
         /// <param name="input"></param>
         /// <returns></returns>
         [HttpGet]
-        public Task<string> ReceiveResult(SeorderentryDto input)
+        [Route("receiveresult")]
+        public Task<string> ReceiveResult(ResourceCheckInputDto input)
         {
             return _ResourceExamineAppService.ReceiveResult(input);
         }
+
+        /// <summary>
+        /// 资源检查
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("orderresourcecheck")]
+        public Task<string> OrderResourceCheck(OrderCheckDto input)
+        {
+            return _ResourceExamineAppService.OrderResourceCheck(input);
+        }
+
+        /// <summary>
+        /// 替代料检查
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("substituteresourcecheck")]
+        public Task<string> SubstituteResourceCheck(OrderCheckDto input) 
+        {
+            return _ResourceExamineAppService.SubstituteResourceCheck(input);
+        }
     }
 }

+ 2 - 2
MicroServices/Business/Bussiness.ApplicationTest/ResourceExamineManagement/ResourceExamineAppService_Tests.cs

@@ -24,7 +24,7 @@ namespace Bussiness.ApplicationTest.ResourceExamineManagement
         [Fact]
         public async Task Should_ThrowExcetion()
         {
-            var testInput = new SeorderentryDto { factoryId = 10201, sorderId = 111111, tenantId = 102 };
+            var testInput = new ResourceCheckInputDto { factoryId = 10201, sorderId = 111111, tenantId = 102 };
             await Xunit.Assert.ThrowsAsync<NotImplementedException>(async () => await _resourceExamineAppService.ReceiveResult(testInput));
         }
 
@@ -32,7 +32,7 @@ namespace Bussiness.ApplicationTest.ResourceExamineManagement
         [ExpectedException(typeof(NotImplementedException))]
         public async Task Should_ThrowExcetion_Second()
         {
-            var testInput = new SeorderentryDto { factoryId = 10201, sorderId = 111111, tenantId = 102 };
+            var testInput = new ResourceCheckInputDto { factoryId = 10201, sorderId = 111111, tenantId = 102 };
             await _resourceExamineAppService.ReceiveResult(testInput);
         }
     }