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

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

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

+ 38 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -100,6 +100,10 @@ namespace Business.ResourceExamineManagement
         /// 生产工单主表
         /// </summary>
         private readonly IMongoDB<mes_morder> _mes_morder;
+        /// <summary>
+        /// 在制工单占用记录表
+        /// </summary>
+        private readonly IMongoDB<mes_mooccupy> _mes_mooccupy;
         #endregion
 
         /// <summary>
@@ -117,6 +121,7 @@ namespace Business.ResourceExamineManagement
             IMongoDB<ic_bom_child> ic_bom_child,
             IMongoDB<ic_item_stock> ic_item_stock,
             IMongoDB<mes_morder> mes_morder,
+            IMongoDB<mes_mooccupy> mes_mooccupy,
             IBasicRepository<ic_item, long> mysql_ic_item,
             IBasicRepository<ic_bom, long> mysql_ic_bom,
             IBasicRepository<ic_bom_child, long> mysql_ic_bom_child
@@ -361,6 +366,11 @@ namespace Business.ResourceExamineManagement
             var morderList = await _mes_morder.GetManyByCondition(filter);
             //首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
 
+            //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
+            Expression<Func<mes_mooccupy, bool>> mooccupyfilter = x => x.moo_state == 1 && x.IsDeleted == false;
+            var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(mooccupyfilter);
+            //morderList = morderList.Where(x => x.Id.IsIn(mes_mooccupyList.Select(p => p.moo_moid))).ToList();
+
             //当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
             var morderDataList = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate &&
             (x.morder_production_number - x.inventory_number) > Quantity).ToList();
@@ -368,7 +378,28 @@ namespace Business.ResourceExamineManagement
             {
                 //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
                 var morder = morderDataList.OrderByDescending(x => x.planner_end_date).FirstOrDefault();
+
                 //生成mes_mooccupy工单占用表数据,代表此工单被某个销售订单已占用。
+                mes_mooccupy mes_Mooccupy = new mes_mooccupy();
+                mes_Mooccupy.GenerateNewId();
+                mes_Mooccupy.moo_id_type = "分配";
+                mes_Mooccupy.moo_id_billid = 0;//销售订单ID
+                mes_Mooccupy.fbill_no = "0";//销售订单号
+                mes_Mooccupy.fentry_id = 0;//销售订单行
+                mes_Mooccupy.fitem_name = string.Empty;//物料名称
+                mes_Mooccupy.fitem_number = bomNumber;
+                mes_Mooccupy.fmodel = string.Empty;//规格型号
+                mes_Mooccupy.moo_moid = morder.Id;
+                mes_Mooccupy.moo_mo = morder.morder_no;
+                mes_Mooccupy.moo_qty = Quantity;
+                mes_Mooccupy.moo_stime = DateTime.Now;
+                mes_Mooccupy.moo_etime = DateTime.Now;//日期来源需确定
+                mes_Mooccupy.moo_state = 1;
+                mes_Mooccupy.moo_cbr = string.Empty;
+                //mes_Mooccupy.moo_ctime = ;
+                mes_Mooccupy.moo_creason = string.Empty;
+                mes_Mooccupy.tenant_id = 0;
+                await _mes_mooccupy.InsertOne(mes_Mooccupy);
             }
             else
             {
@@ -380,16 +411,21 @@ namespace Business.ResourceExamineManagement
                     throw new NotImplementedException("无可用在制工单!");
                 }
                 List<mes_morder> mes_Morders = new List<mes_morder>();
+                List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
                 decimal? number = Quantity;
                 foreach (var item in morderListData)
                 {
-                    number = number - (item.morder_production_number - item.inventory_number);
-                    if (number < 0)
+                    //查询出工单已占用总数量
+                    var mes_mooccupy = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
+                    // 需要数量-(生产计划数量-入库数量-已被占用数量)
+                    number = number - (item.morder_production_number - item.inventory_number - mes_mooccupy.Sum(x => x.moo_qty));
+                    if (number <= 0)
                     {
                         mes_Morders.Add(item);
                     }
                     else
                     {
+                        mes_Morders.Add(item);
                         break;
                     }
                 }