zhengly 3 лет назад
Родитель
Сommit
613f7905e7

+ 47 - 29
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -299,9 +299,9 @@ namespace Business.ResourceExamineManagement
             _srm_po_list = srm_po_list;
             _crm_seorder = crm_seorder;
             _crm_seorderentry = crm_seorderentry;
-            _srm_po_occupy= srm_po_occupy;
-            _ic_item_pur= ic_item_pur;
-            _ic_plan= ic_plan;
+            _srm_po_occupy = srm_po_occupy;
+            _ic_item_pur = ic_item_pur;
+            _ic_plan = ic_plan;
             _ic_substitute = ic_substitute;
             _ic_substitute_all = ic_substitute_all;
             _ic_substitute_all_dtl = ic_substitute_all_dtl;
@@ -394,21 +394,21 @@ namespace Business.ResourceExamineManagement
         {
             //资源检查结果
             PschedDto rtn = new PschedDto();
-            rtn.sorderid = input.sorderId; 
+            rtn.sorderid = input.sorderId;
 
             //生成当前计算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 == false).Result.FirstOrDefault();
             if (sorder == null)
             {
                 throw new NotImplementedException("订单数据不存在!");
             }
             //获取订单行数据
             List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.tenant_id == input.tenantId && p.factory_id == input.factoryId && p.seorder_id == input.sorderId && p.IsDeleted == false).Result;
-            
+
             //数据库快照-同步mysql库数据到mongoDB中
             await SyncData(input.tenantId, input.factoryId, bangid);
 
@@ -428,6 +428,8 @@ namespace Business.ResourceExamineManagement
                 BomStock(getBomList, bangid, input.factoryId);
                 //
                 calcTest(getBomList, bangid, o.Id, o.qty.Value);
+                //生成工单 TODO:0=产品数量
+                GenerateMorder(o, 0);
             }
             #endregion
             rtn.entryDtls = entryDtls;
@@ -760,7 +762,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <returns></returns>
-        public async Task GenerateMorder(crm_seorderentry seorderentry, decimal? Quantity)
+        public void GenerateMorder(crm_seorderentry seorderentry, decimal? Quantity)
         {
             //1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
 
@@ -768,7 +770,7 @@ namespace Business.ResourceExamineManagement
             //查询销售订单子表数据
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
             //获取销售订单信息
-            var seorder = await _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id);
+            var seorder = _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id).Result;
             //物料BOM
             // var ic_bom = _ic_bom.GetManyByCondition(x => x.bom_number == seorderentry.bom_number && x.factory_id == seorderentry.factory_id).Result.FirstOrDefault();
 
@@ -831,8 +833,8 @@ namespace Business.ResourceExamineManagement
             mes_Moentry.factory_id = seorderentry.factory_id;
             //using (TransactionScope scope = new TransactionScope())
             // {
-            await _mes_morder.InsertOne(mes_Morder);
-            await _mes_moentry.InsertOne(mes_Moentry);
+            _mes_morder.InsertOne(mes_Morder);
+            _mes_moentry.InsertOne(mes_Moentry);
             //scope.Complete();
             //}
         }
@@ -871,13 +873,14 @@ namespace Business.ResourceExamineManagement
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <returns></returns>
-        public async Task<bool> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry)
+        public async Task<int> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry)
         {
             if (string.IsNullOrEmpty(bomNumber) || Quantity == null)
             {
                 //TODO:入参异常;
                 throw new NotImplementedException("BOM编码或需求数量不能为空!");
             }
+            var Number = 0; //1,满足,2数量满足,时间不满足,3不满足
             //获取销售订单信息
             //var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
@@ -896,6 +899,8 @@ namespace Business.ResourceExamineManagement
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
             var morderDataList = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate &&
             (x.morder_production_number - x.inventory_number) > Quantity).ToList();
+
+
             if (morderDataList.Count > 0)
             {
                 //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
@@ -903,17 +908,12 @@ namespace Business.ResourceExamineManagement
                 var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == morder.Id).ToList();
                 var mes_Mooccupy = GetMooccupies(seorderentry, ic_item, morder, mooccupies);
                 await _mes_mooccupy.InsertOne(mes_Mooccupy);
+                return Number = 1;
             }
             else
             {
                 // 寻找最早日期工单 &&  计算生产数量-入库数据并且大于需求产品数量后累加直到满足需求产品数量
                 var morderListData = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
-                if (morderListData.Count == 0)
-                {
-                    //TODO:后期处理无在制工单返回内容
-                    //throw new NotImplementedException("无可用在制工单!");
-                    return false;
-                }
                 List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
                 decimal? number = Quantity;
                 foreach (var item in morderListData)
@@ -928,8 +928,21 @@ namespace Business.ResourceExamineManagement
                         break;
                     }
                 }
+                var morderDatas = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) > DeliverDate &&
+          (x.morder_production_number - x.inventory_number) > Quantity).ToList();
+                if (number > 0)
+                {
+                    return Number = 3;
+                }
+                if (morderDatas.Count > 0)
+                {
+                    return Number = 2;
+                }
+                else
+                {
+                    return Number = 1;
+                }
             }
-            return true;
         }
         /// <summary>
         /// 拼接工单占用表
@@ -995,7 +1008,7 @@ namespace Business.ResourceExamineManagement
             {
                 return returnlist;
             }
-            
+
             var dto = new BomChildExamineDto();
             dto.item_id = bom.icitem_id;
             dto.bom_id = BomId.Value;
@@ -1033,7 +1046,8 @@ namespace Business.ResourceExamineManagement
             {
                 item = icitemlist.Where(a => a.Id == bom.icitem_id).FirstOrDefault();
             }
-            else {
+            else
+            {
                 item = icitemlist.Where(a => a.Id == dto.item_id).FirstOrDefault();
             }
             if (item == null)
@@ -1274,7 +1288,7 @@ namespace Business.ResourceExamineManagement
         }
 
         //计算库存
-        public void calcTest(List<BomChildExamineDto> returnlist, long bangid, long orderid,decimal count)
+        public void calcTest(List<BomChildExamineDto> returnlist, long bangid, long orderid, decimal count)
         {
             //占用情况
             List<ic_item_stockoccupy> sklist = new List<ic_item_stockoccupy>();
@@ -1378,22 +1392,22 @@ namespace Business.ResourceExamineManagement
                 case 0://整批
                     WholeBatchCheck(sublist, returnlist, sklist, select);
                     //如果都需要采购的情况下,则默认使用优先级最高的
-                    WholeBatch(item,sublist, returnlist, sklist, select, bangid, parent);
+                    WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent);
                     break;
                 case 1://混用
-                    MixedUse(item,sublist, returnlist, sklist, bangid, parent);
+                    MixedUse(item, sublist, returnlist, sklist, bangid, parent);
                     break;
                 case 2://整批加混用
                     WholeBatchCheck(sublist, returnlist, sklist, select);
                     if (select.Count() == 0)
                     {
                         //走混用
-                        MixedUse(item,sublist, returnlist, sklist, bangid, parent);
+                        MixedUse(item, sublist, returnlist, sklist, bangid, parent);
                     }
                     else
                     {
                         //走整批
-                        WholeBatch(item,sublist, returnlist, sklist, select, bangid, parent);
+                        WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent);
                     }
                     break;
             }
@@ -1427,7 +1441,8 @@ namespace Business.ResourceExamineManagement
             }
         }
         //整批占用
-        public void WholeBatch(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent) {
+        public void WholeBatch(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent)
+        {
             if (select.Count() == 0)
             {
                 //如果为空,则默认使用优先级为0的集合作为替代关系
@@ -1436,7 +1451,8 @@ namespace Business.ResourceExamineManagement
                     //替代
                     select = sublist.Where(s => s.type == 0).ToList();
                 }
-                else {
+                else
+                {
                     //取代
                     select = sublist.Where(s => s.substitute_all_num == 0).ToList();
                 }
@@ -1487,7 +1503,8 @@ namespace Business.ResourceExamineManagement
         }
 
         //混用占用数据
-        public void MixedUse(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent) {
+        public void MixedUse(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent)
+        {
 
             decimal parent_lack = 0;
             if (parent != null)
@@ -1549,7 +1566,8 @@ namespace Business.ResourceExamineManagement
                     //替代
                     select = sublist.Where(s => s.type == 0).ToList();
                 }
-                else {
+                else
+                {
                     //取代
                     select = sublist.Where(s => s.substitute_all_num == 0).ToList();
                 }