zhengly 3 лет назад
Родитель
Сommit
07b262523e

+ 18 - 15
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -83,7 +83,7 @@ namespace Business.ResourceExamineManagement
         /// 计算物料库存量
         /// </summary>
         /// <param name="returnlist"></param>
-        public void BomStock(List<BomChildExamineDto> returnlist, List<mo_ic_item_stock> _ic_item_stock,long bangid)
+        public void BomStock(List<BomChildExamineDto> returnlist, List<mo_ic_item_stock> _ic_item_stock, long bangid)
         {
             returnlist = returnlist.OrderBy(s => s.num_order).ToList();
             //获取当前工厂下物料库存数据
@@ -137,7 +137,9 @@ namespace Business.ResourceExamineManagement
             {
                 //获取物料详情
                 var ic_item = icitemlist.Find(s => s.mysql_id == level1Dto.item_id);
-                var mooccupylist = _morderAppService.CheckMorder(level1Dto.bom_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid).Result;
+                _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);
 
                 if (mooccupylist.Any())
                 {
@@ -160,7 +162,7 @@ namespace Business.ResourceExamineManagement
                 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)
@@ -318,7 +320,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="bzlist"></param>
         /// <param name="returnlist"></param>
         /// <param name="sockoccupyList"></param>
-        public void CaleLackItem(BomChildExamineDto parent, List<BomChildExamineDto> bzlist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sockoccupyList,long bangid)
+        public void CaleLackItem(BomChildExamineDto parent, List<BomChildExamineDto> bzlist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sockoccupyList, long bangid)
         {
             //从第二级开始循环
             foreach (var item in bzlist)
@@ -466,7 +468,7 @@ namespace Business.ResourceExamineManagement
                         //先计算末级数据的齐套时间。
                         if (cilList.Count() > 0)
                         {
-                            CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys,  childidList);
+                            CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
                             item.kitting_time = cilList.Max(s => s.kitting_time);
                         }
                         item.make_qty = item.lack_qty;
@@ -543,13 +545,13 @@ namespace Business.ResourceExamineManagement
                     item.subcontracting_list = new List<ooder>();
                     ooder oo = new ooder();
                     oo.morder_production_number = mesorder.morder_production_number;
-                    oo.production_unit= mesorder.production_unit;
+                    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;
+                    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;
                     item.subcontracting_list.Add(oo);
                     item.kitting_time = mesorder.ooentry_etime;
                     orderList.Add(mesorder);
@@ -615,7 +617,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="returnlist"></param>
         /// <param name="sklist"></param>
         /// <param name="select"></param>
-        public void WholeBatchCheck(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, List<BomChildExamineDto> select,long bangid)
+        public void WholeBatchCheck(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid)
         {
             for (int idx = 0; idx < 99; idx++)
             {
@@ -656,7 +658,7 @@ namespace Business.ResourceExamineManagement
         /// <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
-            ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys,List<long> childidList)
+            ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
         {
             if (select.Count() == 0)
             {
@@ -840,7 +842,8 @@ namespace Business.ResourceExamineManagement
                         sct.use_qty += lack_Count;
                         sklist.Add(itemStockoccupyDto);
                     }
-                    else {
+                    else
+                    {
                         var cilList = returnlist.Where(s => s.parent_id == sct.id && s.type == sct.type).OrderBy(k => k.num_order).ToList();
 
                         itemStockoccupyDto.quantity = sqty;
@@ -924,7 +927,7 @@ namespace Business.ResourceExamineManagement
                             orderList.Add(mesorder);
                         }
                     }
-                    
+
                 }
             }
         }

+ 20 - 7
MicroServices/Business/Business.Application/ResourceExamineManagement/MorderAppService.cs

@@ -75,6 +75,14 @@ namespace Business.ResourceExamineManagement
         /// 工艺工序关联工位
         /// </summary>
         public List<mo_mes_tech_proc_workshop> tech_Proc_Workshops = new List<mo_mes_tech_proc_workshop>();
+        /// <summary>
+        /// 工单
+        /// </summary>
+        public List<mo_mes_morder> mo_Mes_Morders = new List<mo_mes_morder>();
+        /// <summary>
+        /// 工单占用
+        /// </summary>
+        public List<mo_mes_mooccupy> mo_Mes_Mooccupies = new List<mo_mes_mooccupy>();
 
         #endregion
         #region 构造函数
@@ -221,7 +229,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <returns></returns>
-        public async Task<List<mo_mes_mooccupy>> CheckMorder(string bomNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, mo_ic_item ic_Item, long bang_id)
+        public virtual List<mo_mes_mooccupy> CheckMorder(string bomNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, mo_ic_item ic_Item, long bang_id)
         {
             if (string.IsNullOrEmpty(bomNumber))
             {
@@ -233,19 +241,24 @@ namespace Business.ResourceExamineManagement
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
             //根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
             //TODO:工单类型;
-            var morderList = await _mo_mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
-            && x.morder_icitem_type != MorderEnum.XgwyMorder) && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id && x.bang_id == bang_id);
+
+            //var morderList = await _mo_mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
+            //&& x.morder_icitem_type != MorderEnum.XgwyMorder) && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id && x.bang_id == bang_id);
+
+            //var morderList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber).ToList();
 
             //获取物料详情
             //var ic_item = _ic_item.GetManyByCondition(x => x.number == seorderentry.item_number && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
 
             //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
-            var mes_mooccupyList = await _mo_mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id
-            && x.fitem_number == ic_Item.number && x.bang_id == bang_id);
+            //var mes_mooccupyList = await _mo_mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id
+            //&& x.fitem_number == ic_Item.number && x.bang_id == bang_id);
+
+            var mes_mooccupyList = mo_Mes_Mooccupies.Where(x => x.fitem_number == ic_Item.number);
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
-            var morderDataList = morderList.Where(x => x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate &&
+            var morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && 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();
 
@@ -253,7 +266,7 @@ namespace Business.ResourceExamineManagement
             //当数量或日期不满足的时候,寻找最早日期的工单
             if (morderDataList.Count == 0)
             {
-                morderDataList = morderList.Where(x => x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
+                morderDataList = mo_Mes_Morders.Where(x => x.bom_number == bomNumber && x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
             }
             var QuantityNumber = 0.00m;
             //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。

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

@@ -1,3 +1,4 @@
+using Business.Core.Enum;
 using Business.Core.MongoDBHelper;
 using Business.Core.Utilities;
 using Business.ResourceExamineManagement.Dto;
@@ -381,7 +382,7 @@ namespace Business.ResourceExamineManagement
             }
 
             //1.2、获取工艺路径关联工序数据
-            List<mo_mes_tech_process> tech_Processes = await _mes_tech_process.GetManyByCondition(p => techs.Select(m=>m.mysql_id).ToList().Contains(p.tech_id.GetValueOrDefault()) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
+            List<mo_mes_tech_process> tech_Processes = await _mes_tech_process.GetManyByCondition(p => techs.Select(m => m.mysql_id).ToList().Contains(p.tech_id.GetValueOrDefault()) && p.tenant_id == param.tenantId && p.factory_id == param.factoryId && !p.IsDeleted);
             if (tech_Processes.Count == 0)
             {
                 throw new NotImplementedException("请先配置工序!");
@@ -394,6 +395,13 @@ namespace Business.ResourceExamineManagement
             //1.3、获取工艺工序关联工位信息
             List<long> techProcIds = tech_Processes.Select(m => m.mysql_id).ToList();
             List<mo_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);
+            //主工单
+            List<mo_mes_morder> mo_Mes_Morders = await _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);
+            //工单占用表
+            List<mo_mes_mooccupy> mes_mooccupyList = await _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);
+
             #endregion
 
             //物料占用记录
@@ -422,6 +430,9 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.process = process;//工序
             _CalcBomViewAppService.tech_Proc_Workshops = tech_Proc_Workshops;//工艺工序关联工位
 
+            _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
+            _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
+
             foreach (var item in sentrys)
             {
                 //工单资源检查信息