Selaa lähdekoodia

Merge branch 'master' of http://123.60.180.165:4647/ZZYDOP/DOPCore

heteng 3 vuotta sitten
vanhempi
commit
1a959514a7

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

@@ -183,14 +183,13 @@ namespace Business.ResourceExamineManagement
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="DeliverDate">交付日期</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <param name="seorderentry_id">销售订单子表ID</param>
         /// <returns></returns>
         /// <returns></returns>
-        public async Task<List<mes_mooccupy>> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, ic_item ic_Item,bool flag = true)
+        public async Task<List<mes_mooccupy>> CheckMorder(string bomNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, ic_item ic_Item, bool flag = true)
         {
         {
-            if (string.IsNullOrEmpty(bomNumber) || Quantity == null)
+            if (string.IsNullOrEmpty(bomNumber))
             {
             {
                 //TODO:入参异常;
                 //TODO:入参异常;
-                throw new NotImplementedException("BOM编码或需求数量不能为空!");
+                return null;
             }
             }
-            var Number = 3; //1,满足,2数量满足,时间不满足,3不满足
             //获取销售订单信息
             //获取销售订单信息
             //var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
             //var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
             //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
@@ -204,7 +203,7 @@ namespace Business.ResourceExamineManagement
 
 
             //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
             //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
             var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && 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
-            && x.fitem_number == seorderentry.item_number);
+            && x.fitem_number == ic_Item.number);
 
 
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
@@ -216,6 +215,7 @@ namespace Business.ResourceExamineManagement
             {
             {
                 morderDataList = morderList.Where(x => x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
                 morderDataList = morderList.Where(x => x.moentry_sys_etime.GetValueOrDefault().AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
             }
             }
+            var QuantityNumber = 0.00m;
             //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
             //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
             foreach (var item in morderDataList)
             foreach (var item in morderDataList)
             {
             {
@@ -270,19 +270,28 @@ namespace Business.ResourceExamineManagement
 
 
                     #endregion
                     #endregion
                     var Sum = item.morder_production_number - item.inventory_number - Sumqty;
                     var Sum = item.morder_production_number - item.inventory_number - Sumqty;
-                    //剩余需要数量= 需要数量 -(计划数量 - 入库数量 - 已占用量)
-                    Quantity = Quantity - (item.morder_production_number - item.inventory_number - Sumqty);
-                    var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, Sum);
+                    //工单可占用数量-需求数量小于0时 占用工单全部可占用数量
+                    if (Sum - Quantity <= 0)
+                    {
+                        QuantityNumber = Sum.GetValueOrDefault();
+                    }
+                    else
+                    {
+                        //工单可占用数量满足 需求数量时直接占用需求数量
+                        QuantityNumber = Quantity;
+                    }
+                    var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, QuantityNumber);
                     mes_Mooccupies.Add(mes_Mooccupy);
                     mes_Mooccupies.Add(mes_Mooccupy);
                     //当剩余需要数量大于0则继续寻找可占用工单,已满足需要数量停止循环查找
                     //当剩余需要数量大于0则继续寻找可占用工单,已满足需要数量停止循环查找
-                    if (Quantity <= 0)
+                    if (Quantity - Sum <= 0)
                     {
                     {
                         break;
                         break;
                     }
                     }
+                    Quantity = Quantity - Sum.GetValueOrDefault();
                 }
                 }
 
 
             }
             }
-            if (flag)
+            if (flag && mes_Mooccupies.Count > 0)
             {
             {
                 await _mes_mooccupy.InsertMany(mes_Mooccupies);
                 await _mes_mooccupy.InsertMany(mes_Mooccupies);
             }
             }
@@ -372,7 +381,7 @@ namespace Business.ResourceExamineManagement
             //  }
             //  }
             #endregion
             #endregion
             //TODO:返回占用数据,外层每个BOM根据占用工单数据判断是否满足。
             //TODO:返回占用数据,外层每个BOM根据占用工单数据判断是否满足。
-            return mes_Mooccupies.OrderByDescending(s=>s.moo_etime).ToList();
+            return mes_Mooccupies.OrderByDescending(s => s.moo_etime).ToList();
         }
         }
         /// <summary>
         /// <summary>
         /// 拼接工单占用表
         /// 拼接工单占用表