Просмотр исходного кода

资源检查部分代码优化

heteng 3 лет назад
Родитель
Сommit
cd2a2fbc6f

+ 79 - 57
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -229,6 +229,11 @@ namespace Business.ResourceExamineManagement
         /// 生产工单子表
         /// </summary>
         private readonly IRepository<mes_moentry, long> _mysql_mes_moentry;
+
+        /// <summary>
+        /// 资源检查入参
+        /// </summary>
+        private readonly SeorderentryDto param = new SeorderentryDto();
         #endregion
 
         #region 构造函数
@@ -388,34 +393,6 @@ namespace Business.ResourceExamineManagement
             //await _ic_item_stock.DeleteAll();
         }
 
-        public void GetMongoDb(ic_bom bom, List<ic_bom> bomlist, List<ic_bom_child> bomchildlist, List<ic_item> icitemlist)
-        {
-
-            if (bom != null)
-            {
-                bomlist.Add(bom);
-                var item = _ic_item.Find(s => s.Id == bom.icitem_id).Result.FirstOrDefault();
-                if (item != null)
-                {
-                    icitemlist.Add(item);
-                }
-                List<ic_bom_child> childList = _ic_bom_child.GetManyByCondition(p => p.bom_id == bom.Id && p.IsDeleted == false).Result.ToList();
-                bomchildlist.AddRange(childList);
-                foreach (var childd in childList)
-                {
-                    List<long> itemids = childList.Select(s => s.icitem_id).ToList();
-                    var itemlist = _ic_item.GetManyByCondition(p => itemids.Contains(p.Id) && p.IsDeleted == false).Result;
-                    var childBom = _ic_bom.GetManyByCondition(p => p.icitem_id == childd.icitem_id).Result.FirstOrDefault();
-                    icitemlist.AddRange(itemlist);
-                    if (childBom != null)
-                    {
-                        GetMongoDb(childBom, bomlist, bomchildlist, icitemlist);
-                    }
-                }
-            }
-
-        }
-
         /// <summary>
         /// 资源检查
         /// </summary>
@@ -424,63 +401,76 @@ namespace Business.ResourceExamineManagement
         /// <exception cref="NotImplementedException"></exception>
         public async Task<string> ReceiveResult(SeorderentryDto input)
         {
+            //资源检查入参全局变量赋值
+            param.sorderId = input.sorderId;
+            param.tenantId = input.tenantId;
+            param.factoryId = input.factoryId;
+            
             //资源检查结果
             PschedDto rtn = new PschedDto();
             rtn.sorderid = input.sorderId;
+            //资源检查明细list
+            List<ExamineResult> examines = new List<ExamineResult>();
+            ExamineResult dtl;
 
             //生成当前计算bangid
             SnowFlake snow = new SnowFlake();
             long bangid = snow.NextId();
 
             //获取订单数据
-            crm_seorder sorder = _mysql_crm_seorder.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.Id == input.sorderId && p.IsDeleted == false).Result.FirstOrDefault();
+            crm_seorder sorder = _mysql_crm_seorder.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.Id == input.sorderId && !p.IsDeleted).Result.FirstOrDefault();
             if (sorder == null)
             {
                 throw new NotImplementedException("订单数据不存在!");
             }
             //获取订单行数据
-            List<crm_seorderentry> sentrys =await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && p.IsDeleted == false);
+            List<crm_seorderentry> sentrys =await _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && !p.IsDeleted);
 
             //数据库快照-同步mysql库数据到mongoDB中
             //await SyncData(input.tenantId, input.factoryId, bangid);
 
-            //资源检查结果list
-            List<ExamineResult> examines = new List<ExamineResult>();
-            ExamineResult dtl;
+            //通过订单行获取物料BOM数据
+            //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<ic_bom> boms = _ic_bom.Find(p=>sentrys.Select(m=>m.bom_number).Contains(p.bom_number) && p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).Result.ToList();
+            //通过物料id获取产品提前期
+            List<ICItemLeadTimeDto> leadTimes = GetLeadTime(boms.Select(p => p.icitem_id).ToList(), input.tenantId, input.factoryId);
 
+            //物料bom
             List<ic_bom> bomlist = new List<ic_bom>();
+            //物料bom明细
             List<ic_bom_child> bomchildlist = new List<ic_bom_child>();
-            List<ic_item> icitemlist = new List<ic_item>();
+            //获取物料bom,物料bom明细
+            GetIcBomData(boms, bomlist, bomchildlist);
+            
+            //获取物料数据
+            List<long> itemIds = bomlist.Select(p => p.icitem_id).ToList();
+            itemIds.AddRange(bomchildlist.Select(p => p.icitem_id).ToList());
+            List<ic_item> icitemlist = _ic_item.GetManyByCondition(p => itemIds.Contains(p.Id) && !p.IsDeleted).Result;
 
-            //通过订单行获取物料BOM数据
-            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<ICItemLeadTimeDto> leadTimes = GetLeadTime(boms.Select(p=>p.icitem_id).ToList(), input.tenantId, input.factoryId);
-            foreach (var o in sentrys)
+            foreach (var item in sentrys)
             {
-                var childBom = boms.Where(p => p.bom_number == o.bom_number).FirstOrDefault();
-                GetMongoDb(childBom, bomlist, bomchildlist, icitemlist);
-
                 //工单资源检查信息
                 dtl = new ExamineResult();
-                dtl.sentry_id = o.Id;
+                dtl.sentry_id = item.Id;
                 //TODO:最早开始时间默认3天后(后期调整)
                 dtl.earliest_times = DateTime.Now.Date.AddDays(3);
 
+                //获取当前物料bom数据
+                var childBom = boms.Where(p => p.bom_number == item.bom_number).FirstOrDefault();
                 //bom层级组装
-                var getBomList = BomPretreatment(o.Id, 160162, o.qty.GetInt(), bomlist, bomchildlist, icitemlist);
+                var getBomList = BomPretreatment(item.Id, 160162, item.qty.GetInt(), bomlist, bomchildlist, icitemlist);
                 //bom替代关系组装
                 BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist);
                 //库存初始化
                 BomStock(getBomList, bangid, input.factoryId);
                 //计算
-                calcTest(getBomList, bangid, o.Id, o.qty.Value, input, o.plan_date);
+                calcTest(getBomList, bangid, item.Id, item.qty.Value, input, item.plan_date);
 
                 //TODO:最晚开始时间
                 var curFacDtl = leadTimes.FirstOrDefault(p=>p.item_id == childBom.icitem_id);
                 //最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期
-                dtl.latest_times = o.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault()));
+                dtl.latest_times = item.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault()));
                 //物料齐套时间
                 dtl.kitting_times = getBomList.Where(p => p.is_use).OrderByDescending(m => m.kitting_time).First().kitting_time.GetValueOrDefault();
                 //替代关系展开list
@@ -494,6 +484,38 @@ namespace Business.ResourceExamineManagement
             rtn.examines = examines;
             return JsonConvert.SerializeObject(rtn);
         }
+
+        /// <summary>
+        /// 获取icbom,icbomchild数据
+        /// </summary>
+        /// <param name="icBoms"></param>
+        /// <param name="bomlist"></param>
+        /// <param name="bomchildlist"></param>
+        public void GetIcBomData(List<ic_bom> icBoms, List<ic_bom> bomlist, List<ic_bom_child> bomchildlist)
+        {
+            if (icBoms.Count() == 0)
+            {
+                return;
+            }
+            //添加物料bom数据
+            bomlist.AddRange(icBoms);
+            //获取物料bom明细数据
+            List<ic_bom_child> childList = _ic_bom_child.GetManyByCondition(p => icBoms.Select(m=>m.Id).Contains(p.bom_id) && p.use_status == 1 && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result.ToList();
+            //没有明细数据,终止
+            if (childList.Count == 0)
+            {
+                return;
+            }
+            bomchildlist.AddRange(childList);
+            //通过物料bom明细数据反查物料bom数据
+            var boms = _ic_bom.GetManyByCondition(p => childList.Select(m=>m.icitem_id).ToList().Contains(p.icitem_id) && p.fse_status == 1 && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result.ToList();
+            foreach (var chd in childList)
+            {
+                var curBoms = boms.Where(p => p.icitem_id == chd.icitem_id).ToList();
+                GetIcBomData(curBoms, bomlist, bomchildlist);
+            }
+        }
+
         /// <summary>
         /// 测试使用新增销售订单数据
         /// </summary>
@@ -689,14 +711,14 @@ namespace Business.ResourceExamineManagement
             }
             #region 1、数据准备
             //1.1、获取工艺路径数据
-            mes_technique tech = _mes_technique.Find(p => p.bom == bom_number && p.IsDeleted == false).Result.FirstOrDefault();
+            mes_technique tech = _mes_technique.Find(p => p.bom == bom_number && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted).Result.FirstOrDefault();
             if (tech == null)
             {
                 throw new NotImplementedException("请先配置工艺路径!");
             }
 
             //1.2、获取工艺路径关联工序数据
-            List<mes_tech_process> tech_Processes = await _mes_tech_process.GetManyByCondition(p => p.tech_id == tech.Id && p.IsDeleted == false);
+            List<mes_tech_process> tech_Processes = await _mes_tech_process.GetManyByCondition(p => p.tech_id == tech.Id && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
             if (tech_Processes.Count == 0)
             {
                 throw new NotImplementedException("请先配置工序!");
@@ -706,11 +728,11 @@ namespace Business.ResourceExamineManagement
             //FilterDefinition<mes_process> filter = Builders<mes_process>.Filter.In(s => s.Id, tech_Processes.Select(m => m.proc_id).ToList());
             //List<mes_process> process = await _mes_process.GetManyByIds(filter);
             List<long> procIds = tech_Processes.Select(m => m.proc_id.Value).ToList();
-            List<mes_process> process = await _mes_process.GetManyByCondition(p => procIds.Contains(p.Id) && p.IsDeleted == false);
+            List<mes_process> process = await _mes_process.GetManyByCondition(p => procIds.Contains(p.Id) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
 
             //1.3、获取工艺工序关联工位信息
             List<long> techProcIds = tech_Processes.Select(m => m.Id).ToList();
-            List<mes_tech_proc_workshop> tech_Proc_Workshops = await _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id.Value) && p.IsDeleted == false);
+            List<mes_tech_proc_workshop> tech_Proc_Workshops = await _mes_tech_proc_workshop.GetManyByCondition(p => techProcIds.Contains(p.tech_proc_id.Value) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
             #endregion
 
             #region 计算产能,得到耗时
@@ -933,13 +955,13 @@ namespace Business.ResourceExamineManagement
             //根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
             //TODO:工单类型;
             var morderList = await _mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != "完成" || x.morder_state != "关闭"
-            && x.morder_icitem_type != "相关委外工单") && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
+            && x.morder_icitem_type != "相关委外工单") && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id);
 
             //获取物料详情
             var ic_item = _ic_item.GetManyByCondition(x => x.number == seorderentry.item_number && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
 
             //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
-            var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
+            var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id);
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
@@ -1183,13 +1205,13 @@ namespace Business.ResourceExamineManagement
         public void BomSubstitute(List<BomChildExamineDto> returnlist, List<ic_bom> bomlist, List<ic_bom_child> bomchildlist, List<ic_item> icitemlist)
         {
             List<string> codeList = returnlist.Select(c => c.substitute_code).ToList();
-            var sublist = _ic_substitute.GetManyByCondition(p => codeList.Contains(p.substitute_code) && p.IsDeleted == false).Result;
+            var sublist = _ic_substitute.GetManyByCondition(p => codeList.Contains(p.substitute_code) && !p.IsDeleted).Result;
 
             List<long> subidlist = sublist.Select(c => c.Id).ToList();
-            var suballlist = _ic_substitute_all.GetManyByCondition(p => subidlist.Contains(p.substitute_id) && p.IsDeleted == false).Result;
+            var suballlist = _ic_substitute_all.GetManyByCondition(p => subidlist.Contains(p.substitute_id) && !p.IsDeleted).Result;
 
             List<long> suballidlist = suballlist.Select(c => c.Id).ToList();
-            var subdtllist = _ic_substitute_all_dtl.GetManyByCondition(p => suballidlist.Contains(p.substitute_allid) && p.IsDeleted == false).Result;
+            var subdtllist = _ic_substitute_all_dtl.GetManyByCondition(p => suballidlist.Contains(p.substitute_allid) && !p.IsDeleted).Result;
 
             List<long> childidList = new List<long>();
             var help = new SnowFlake();
@@ -1228,7 +1250,7 @@ namespace Business.ResourceExamineManagement
                             {
                                 var sadl = subdtllist.Where(s => s.substitute_allid == sal.Id).ToList();
                                 List<long> dtlItemId = sadl.Select(m => m.icitem_id).ToList();
-                                var dtlitemlist = _ic_item.GetManyByCondition(p => dtlItemId.Contains(p.Id) && p.IsDeleted == false).Result;
+                                var dtlitemlist = _ic_item.GetManyByCondition(p => dtlItemId.Contains(p.Id) && !p.IsDeleted).Result;
                                 icitemlist.AddRange(dtlitemlist);
                                 foreach (var dtl in sadl)
                                 {