tangdi 3 лет назад
Родитель
Сommit
adb4550363

+ 44 - 27
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -8,9 +8,11 @@ using Business.MongoModel.SRM;
 using Business.MongoModel.Tech;
 using Business.ResourceExamineManagement.Dto;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using Volo.Abp.Application.Services;
+using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
 
 namespace Business.ResourceExamineManagement
 {
@@ -32,6 +34,7 @@ namespace Business.ResourceExamineManagement
         public List<mo_mes_morder> mordersList = new List<mo_mes_morder>();
         public List<mo_mes_morder> mordersInsertList = new List<mo_mes_morder>();
         public List<mo_mes_moentry> moentriesList = new List<mo_mes_moentry>();
+        public List<mo_mes_moentry> moentriesInsertList = new List<mo_mes_moentry>();
         public List<mo_mes_mooccupy> mooccupyAllList = new List<mo_mes_mooccupy>();
         public List<mo_mes_mooccupy> mooccupyAllInsertList = new List<mo_mes_mooccupy>();
 
@@ -189,11 +192,12 @@ namespace Business.ResourceExamineManagement
                 //获取物料详情
                 var ic_item = icitemlist.Find(s => s.mysql_id == level1Dto.item_id);
                 _morderAppService.mo_Mes_Morders = mordersList;//工单
+                _morderAppService.mo_Mes_Moentry = moentriesList;//工单子表
                 _morderAppService.mo_Mes_Mooccupies = mooccupyAllList;//工单占用
                 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);
                 }
 
@@ -260,37 +264,49 @@ namespace Business.ResourceExamineManagement
                         }
                         else if (level1Dto.erp_cls == 3)
                         {
-                            //采购申请
-                            PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                            //先找在途
+                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            if (level1Dto.lack_qty > 0)
+                            {
+                                //采购申请
+                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+                            }
                         }
                         else if (level1Dto.erp_cls == 2)
                         {
-                            //先计算末级数据的齐套时间。
-                            if (childList.Count() > 0)
+                            //先找在途
+                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            if (level1Dto.lack_qty > 0)
                             {
-                                MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
-                                level1Dto.kitting_time = childList.Max(s => s.kitting_time);
+                                //先计算末级数据的齐套时间。
+                                if (childList.Count() > 0)
+                                {
+                                    MatterTileDevelop(level1Dto, childList, returnlist, sklist, bangid, plan_date, sentrys, icitemlist);
+                                    level1Dto.kitting_time = childList.Max(s => s.kitting_time);
+                                }
+                                //1.先生成委外工单。
+                                var mesorder = CreateMesOOder(level1Dto, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                level1Dto.subcontracting_qty = level1Dto.lack_qty;
+                                level1Dto.subcontracting_list = new List<ooder>();
+                                ooder oo = new ooder();
+                                oo.Id = mesorder.id;
+                                oo.morder_production_number = mesorder.morder_production_number;
+                                oo.production_unit = mesorder.production_unit;
+                                oo.production_unit_code = mesorder.production_unit_code;
+                                oo.ooentry_prdname = mesorder.ooentry_prdname;
+                                oo.ooentry_stime = mesorder.ooentry_stime;
+                                oo.ooentry_etime = mesorder.ooentry_etime;
+                                oo.oorder_date = mesorder.oorder_date;
+                                oo.oorder_no = mesorder.oorder_no;
+                                level1Dto.subcontracting_list.Add(oo);
+                                level1Dto.kitting_time = mesorder.ooentry_etime;
+                                orderList.Add(mesorder);
+                                //2.生成采购申请
+                                //采购申请
+                                PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
                             }
-                            //1.先生成委外工单。
-                            var mesorder = CreateMesOOder(level1Dto, param.tenantId, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
-                            level1Dto.subcontracting_qty = level1Dto.lack_qty;
-                            level1Dto.subcontracting_list = new List<ooder>();
-                            ooder oo = new ooder();
-                            oo.Id = mesorder.id;
-                            oo.morder_production_number = mesorder.morder_production_number;
-                            oo.production_unit = mesorder.production_unit;
-                            oo.production_unit_code = mesorder.production_unit_code;
-                            oo.ooentry_prdname = mesorder.ooentry_prdname;
-                            oo.ooentry_stime = mesorder.ooentry_stime;
-                            oo.ooentry_etime = mesorder.ooentry_etime;
-                            oo.oorder_date = mesorder.oorder_date;
-                            oo.oorder_no = mesorder.oorder_no;
-                            level1Dto.subcontracting_list.Add(oo);
-                            level1Dto.kitting_time = mesorder.ooentry_etime;
-                            orderList.Add(mesorder);
-                            //2.生成采购申请
-                            //采购申请
-                            PackageSRMPR(level1Dto, bangid, plan_date, sentrys);
+
+                           
 
                         }
                     }
@@ -387,6 +403,7 @@ namespace Business.ResourceExamineManagement
                     mordersList.AddRange(mes_MorderDto.mes_Morders);
                     mordersInsertList.AddRange(mes_MorderDto.mes_Morders);
                     moentriesList.AddRange(mes_MorderDto.mes_Moentries);
+                    moentriesInsertList.AddRange(mes_MorderDto.mes_Moentries);
                 }
             }
         }

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

@@ -75,6 +75,10 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         public List<mo_mes_morder> mo_Mes_Morders = new List<mo_mes_morder>();
         /// <summary>
+        /// 工单子表
+        /// </summary>
+        public List<mo_mes_moentry> mo_Mes_Moentry = new List<mo_mes_moentry>();
+        /// <summary>
         /// 工单占用
         /// </summary>
         public List<mo_mes_mooccupy> mo_Mes_Mooccupies = new List<mo_mes_mooccupy>();
@@ -258,7 +262,10 @@ namespace Business.ResourceExamineManagement
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
-            var morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && x.morder_type == MorderEnum.JhMorder && x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
+            var moentrys = mo_Mes_Moentry.Where(s => s.soentry_id == seorderentry.Id);
+            //找到当前订单行生成的主工单
+            var toMid = moentrys.Select(s => s.moentry_moid.GetValueOrDefault()).ToList();
+            var morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && (x.morder_type == MorderEnum.JhMorder || toMid.Contains(x.relation_moid.GetValueOrDefault())) && x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
             (x.morder_production_number - x.inventory_number - mes_mooccupyList.Where(p => p.moo_moid.GetValueOrDefault() == x.mysql_id)?.Sum(m => m.moo_qty)) > Quantity)
              .OrderByDescending(x => x.planner_end_date).ToList();
 

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

@@ -539,10 +539,10 @@ namespace Business.ResourceExamineManagement
                 await _mes_mooccupy.InsertMany(_CalcBomViewAppService.mooccupyAllInsertList);
                 rtn.mooccupyAllList = _CalcBomViewAppService.mooccupyAllInsertList;
             }
-            if (_CalcBomViewAppService.moentriesList.Any())
+            if (_CalcBomViewAppService.moentriesInsertList.Any())
             {
-                await _mes_moentry.InsertMany(_CalcBomViewAppService.moentriesList);
-                var mesmoentrys = ObjectMapper.Map<List<mo_mes_moentry>, List<mes_moentry>>(_CalcBomViewAppService.moentriesList);
+                await _mes_moentry.InsertMany(_CalcBomViewAppService.moentriesInsertList);
+                var mesmoentrys = ObjectMapper.Map<List<mo_mes_moentry>, List<mes_moentry>>(_CalcBomViewAppService.moentriesInsertList);
                 _businessDbContext.BulkInsert(mesmoentrys);
             }
             if (_CalcBomViewAppService.orderList.Any())
@@ -771,7 +771,7 @@ namespace Business.ResourceExamineManagement
         {
             List<long> sentryids = soentry_id.Select(p => p.Id).ToList();
             //删除工单相关表数据
-            var mes_moentry = _mysql_mes_moentry.GetListAsync(x => sentryids.Contains(x.soentry_id.Value)).Result;
+            /*var mes_moentry = _mysql_mes_moentry.GetListAsync(x => sentryids.Contains(x.soentry_id.Value)).Result;
 
             var mes_morder = _mysql_mes_morder.GetListAsync(x => mes_moentry.Select(p => p.moentry_moid).ToList().Contains(x.Id)).Result;
             if (mes_moentry.Count > 0)
@@ -781,27 +781,22 @@ namespace Business.ResourceExamineManagement
             if (mes_morder.Count > 0)
             {
                 await _mysql_mes_morder.DeleteManyAsync(mes_morder);
-            }
+            }*/
             var mysql_mes_mooccupy = _mysql_mes_mooccupy.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.moo_id_billid.Value)).Result;
             if (mysql_mes_mooccupy.Count > 0)
             {
                 await _mysql_mes_mooccupy.DeleteManyAsync(mysql_mes_mooccupy);
             }
-            var mysql_mes_ooder = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
-            if (mysql_mes_ooder.Count > 0)
-            {
-                await _mysql_mes_oorder.DeleteManyAsync(mysql_mes_ooder);
-            }
             var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
             if (srm_pr_main.Count > 0)
             {
                 await _mysql_srm_pr_main.DeleteManyAsync(srm_pr_main);
             }
-            var mes_oorders = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
+            /*var mes_oorders = _mysql_mes_oorder.GetListAsync(x => soentry_id.Select(p => p.Id).Contains(x.sentry_id.GetValueOrDefault())).Result;
             if (mes_oorders.Count > 0)
             {
                 await _mysql_mes_oorder.DeleteManyAsync(mes_oorders);
-            }
+            }*/
         }
 
         /// <summary>
@@ -1618,6 +1613,7 @@ namespace Business.ResourceExamineManagement
             //主工单
             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_moentry> mo_Mes_Moentry = _mes_moentry.GetManyByCondition(x => mo_Mes_Morders.Select(p => p.id).Contains(x.moentry_moid.GetValueOrDefault())).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;
@@ -1648,6 +1644,7 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.process = process;//工序
             _CalcBomViewAppService.tech_Proc_Workshops = tech_Proc_Workshops;//工艺工序关联工位
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
+            _CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
             _CalcBomViewAppService.seorder = sorder;//销售订单
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细