Переглянути джерело

缺料数量展示优化。

tangdi 2 роки тому
батько
коміт
bf2d962e61

+ 49 - 41
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -322,28 +322,30 @@ namespace Business.ResourceExamineManagement
                         else if (level1Dto.erp_cls == 3)
                         {
                             //先找在途
-                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
-                            if (level1Dto.lack_qty > 0)
+                            decimal occqty = CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            if (level1Dto.lack_qty - occqty > 0)
                             {
                                 decimal itemPRQty = srm_Pr_Mains.Where(x => x.icitem_id.Value == level1Dto.item_id && x.pr_sarrive_date <= plan_date).Sum(y => y.pr_aqty.GetValueOrDefault());
-                                if (itemPRQty < level1Dto.lack_qty)
+                                if (itemPRQty < level1Dto.lack_qty - occqty)
                                 {
-                                    level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
+                                    //level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
+                                    decimal lack_qty = level1Dto.lack_qty - itemPRQty;
                                     //采购申请
-                                    PackageSRMPR(level1Dto, bangid, sentrys, plan_date);
+                                    PackageSRMPR(level1Dto, bangid, sentrys, plan_date, lack_qty);
                                 }
                             }
                         }
                         else if (level1Dto.erp_cls == 2)
                         {
                             //先找在途
-                            CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
-                            if (level1Dto.lack_qty > 0)
+                            decimal occqty = CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
+                            decimal lack_qty = level1Dto.lack_qty - occqty;
+                            if (lack_qty > 0)
                             {
                                 //1.先生成委外工单。
-                                var mesorder = CreateMesOOder(level1Dto, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                var mesorder = CreateMesOOder(level1Dto, lack_qty, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
                                 mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
-                                var srmprDto = PackageSRMPR(level1Dto, bangid, sentrys, plan_date);
+                                var srmprDto = PackageSRMPR(level1Dto, bangid, sentrys, plan_date, lack_qty);
                                 mesorder.ooentry_stime = plan_date.GetValueOrDefault().AddDays(-srmprDto.totalLeadTime.GetValueOrDefault());
 
                                 //先计算末级数据的齐套时间。
@@ -353,7 +355,7 @@ namespace Business.ResourceExamineManagement
                                     level1Dto.kitting_time = childList.Max(s => s.kitting_time).GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());//加上物料的采购提前期
                                 }
 
-                                level1Dto.subcontracting_qty = level1Dto.lack_qty;
+                                level1Dto.subcontracting_qty = lack_qty;
                                 level1Dto.subcontracting_list = new List<ooder>();
                                 ooder oo = new ooder();
                                 oo.Id = mesorder.Id;
@@ -848,11 +850,12 @@ namespace Business.ResourceExamineManagement
                     if (param.checkflag || param.checkPlan)
                     {
                         //先找在途
-                        CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
-                        if (item.lack_qty > 0)
+                        decimal occqty = CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
+                        decimal lack_qty = item.lack_qty - occqty;
+                        if (lack_qty > 0)
                         {
                             //采购申请
-                            PackageSRMPR(item, bangid, sentrys, plan_date);
+                            PackageSRMPR(item, bangid, sentrys, plan_date, lack_qty);
                         }
                     }
                 }
@@ -862,13 +865,14 @@ namespace Business.ResourceExamineManagement
                     if (param.checkflag || param.checkPlan)
                     {
                         //先找在途
-                        CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
-                        if (item.lack_qty > 0)
+                        decimal occqty = CalcInTransit(sentrys, item, bangid, plan_date.GetValueOrDefault());
+                        decimal lack_qty = item.lack_qty - occqty;
+                        if (lack_qty > 0)
                         {
                             //1.先生成委外工单。
-                            var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
+                            var mesorder = CreateMesOOder(item, lack_qty, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
                             mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
-                            var srmprDto = PackageSRMPR(item, bangid, sentrys, plan_date);
+                            var srmprDto = PackageSRMPR(item, bangid, sentrys, plan_date, lack_qty);
                             mesorder.ooentry_stime = mesorder.ooentry_etime.GetValueOrDefault().AddDays(-(srmprDto.totalLeadTime.GetValueOrDefault() - 1));
                             //先计算末级数据的齐套时间。
                             if (cilList.Count > 0)
@@ -885,7 +889,7 @@ namespace Business.ResourceExamineManagement
                                     mesorder.ooentry_etime = mesorder.ooentry_stime.GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());
                                 }
                             }
-                            item.subcontracting_qty = item.lack_qty;
+                            item.subcontracting_qty = lack_qty;
                             item.subcontracting_list = new List<ooder>();
                             ooder oo = new ooder();
                             oo.Id = mesorder.Id;
@@ -1400,11 +1404,12 @@ namespace Business.ResourceExamineManagement
                             if (param.checkflag || param.checkPlan)
                             {
                                 //先找在途
-                                CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
-                                if (sct.lack_qty > 0)
+                                decimal occqty = CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
+                                decimal lack_qty = sct.lack_qty - occqty;
+                                if (lack_qty > 0)
                                 {
                                     //采购申请
-                                    PackageSRMPR(sct, bangid, sentrys, plan_date);
+                                    PackageSRMPR(sct, bangid, sentrys, plan_date, lack_qty);
                                 }
                             }
                         }
@@ -1413,13 +1418,14 @@ namespace Business.ResourceExamineManagement
                             if (param.checkflag || param.checkPlan)
                             {
                                 //先找在途
-                                CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
-                                if (sct.lack_qty > 0)
+                                decimal occqty = CalcInTransit(sentrys, sct, bangid, plan_date.GetValueOrDefault());
+                                decimal lack_qty = sct.lack_qty - occqty;
+                                if (lack_qty > 0)
                                 {
                                     //1.先生成委外工单。
-                                    var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
+                                    var mesorder = CreateMesOOder(sct, lack_qty, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.GetValueOrDefault());
                                     mesorder.ooentry_etime = plan_date.GetValueOrDefault().AddDays(-1);
-                                    var srmprDto = PackageSRMPR(sct, bangid, sentrys, plan_date);
+                                    var srmprDto = PackageSRMPR(sct, bangid, sentrys, plan_date, lack_qty);
                                     mesorder.start_time = mesorder.ooentry_etime.GetValueOrDefault().AddDays(-(srmprDto.totalLeadTime.GetValueOrDefault() - 1));
 
                                     //先计算末级数据的齐套时间。
@@ -1428,7 +1434,7 @@ namespace Business.ResourceExamineManagement
                                         CalcIcitem(cilList, returnlist, bangid, sklist, mesorder.ooentry_stime, icitemlist, sentrys, childidList);
                                         sct.kitting_time = cilList.Max(s => s.kitting_time).GetValueOrDefault().AddDays(srmprDto.totalLeadTime.GetValueOrDefault());//加上物料的采购提前期
                                     }
-                                    sct.subcontracting_qty = sct.lack_qty;
+                                    sct.subcontracting_qty = lack_qty;
                                     sct.subcontracting_list = new List<ooder>();
                                     ooder oo = new ooder();
                                     oo.Id = mesorder.Id;
@@ -1494,7 +1500,7 @@ namespace Business.ResourceExamineManagement
         /// <param name="returnlist"></param>
         /// <param name="factoryid"></param>
         /// <param name="orderType">2委外采购申请单,3采购申请单</param>
-        private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, long? companyId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, crm_seorderentry sentrys, DateTime? plan_date)
+        private SRMPRDto CreateSRMPR(BomChildExamineDto returnlist, decimal lack_qty, long? companyId, long factoryid, long bangId, int orderType, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, List<mo_ic_item> planList, crm_seorderentry sentrys, DateTime? plan_date)
         {
             SRMPRDto sRMPR = new SRMPRDto();
             mo_srm_purchase supplier = null;
@@ -1607,16 +1613,16 @@ namespace Business.ResourceExamineManagement
             srm_Pr.pr_purchasename = supplier.supplier_name;//供应商名称
             srm_Pr.pr_purchaser = supplier.order_rector_name;//采购员
             srm_Pr.pr_purchaser_num = supplier.order_rector_num;//采购员工号(采购信息表)
-            decimal qty = returnlist.lack_qty;
+            decimal qty = lack_qty;
             //数量圆整 按最小包装量向上圆整
             if (supplier.packaging_qty.GetValueOrDefault() != 0)
             {
-                decimal count = Math.Ceiling(returnlist.lack_qty / supplier.packaging_qty.GetValueOrDefault());
+                decimal count = Math.Ceiling(lack_qty / supplier.packaging_qty.GetValueOrDefault());
                 qty = count * supplier.packaging_qty.GetValueOrDefault();
             }
             //判断最小起订量
             qty = qty > supplier.qty_min.GetValueOrDefault() ? qty : supplier.qty_min.GetValueOrDefault();
-            srm_Pr.pr_rqty = returnlist.lack_qty;//需求数量
+            srm_Pr.pr_rqty = lack_qty;//需求数量
             srm_Pr.pr_aqty = qty;//申请数量
             srm_Pr.pr_sqty = qty;//建议数量
             srm_Pr.icitem_id = returnlist.item_id;//物料id
@@ -1692,7 +1698,7 @@ namespace Business.ResourceExamineManagement
                 srm_Po_Occupy.morder_id = mes_morder.Id;
                 srm_Po_Occupy.morder_mo = mes_morder.morder_no;
             }
-            srm_Po_Occupy.qty = returnlist.lack_qty;
+            srm_Po_Occupy.qty = lack_qty;
             srm_Po_Occupy.type = MorderEnum.Zyjc_Type;//TODO:类型未知
             srm_Po_Occupy.stime = srm_Pr.pr_ssend_date;
             srm_Po_Occupy.etime = srm_Pr.pr_sarrive_date;
@@ -1718,7 +1724,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="returnlist"></param>
         /// <param name="factoryid"></param>
-        private mo_mes_oorder CreateMesOOder(BomChildExamineDto returnlist, long? companyId, long factoryid, long bangId, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, DateTime deliveryDate)
+        private mo_mes_oorder CreateMesOOder(BomChildExamineDto returnlist, decimal lack_qty, long? companyId, long factoryid, long bangId, List<ICItemLeadTimeDto> iCItemLeadTimes, List<mo_srm_purchase> supplierList, DateTime deliveryDate)
         {
             mo_mes_oorder oOrder = new mo_mes_oorder();
             oOrder.GenerateNewId(help.NextId());
@@ -1742,9 +1748,9 @@ namespace Business.ResourceExamineManagement
             oOrder.bom_number = returnlist.bom_number;//bom编码
             oOrder.unit = returnlist.unit;//单位
             oOrder.morder_progress = "";//工单进度
-            oOrder.morder_production_number = returnlist.lack_qty;//工单生产数量(计划数量)
-            oOrder.need_number = returnlist.lack_qty;//需求数量
-            oOrder.remaining_number = returnlist.lack_qty;//剩余可用数量
+            oOrder.morder_production_number = lack_qty;//工单生产数量(计划数量)
+            oOrder.need_number = lack_qty;//需求数量
+            oOrder.remaining_number = lack_qty;//剩余可用数量
             oOrder.work_number = 0;//报工数量
             oOrder.inspection_number = 0;//报检数量
             oOrder.qualified_number = 0;//合格数量
@@ -1774,7 +1780,7 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 计算在途
         /// </summary>
-        public void CalcInTransit(crm_seorderentry sentrys, BomChildExamineDto item, long bangid, DateTime plan_date)
+        public decimal CalcInTransit(crm_seorderentry sentrys, BomChildExamineDto item, long bangid, DateTime plan_date)
         {
             _purchaseOrderAppService.mo_Srm_Po_Lists = srm_Po_Lists; //采购明细
             _purchaseOrderAppService.srm_Po_Occupies = srm_Po_Occupies; //采购明细
@@ -1782,11 +1788,12 @@ namespace Business.ResourceExamineManagement
             _purchaseOrderAppService.mes_morder = mes_morder;//当前工单传递进去。
 
             var occupylist = _purchaseOrderAppService.CheckPurchaseOrder(sentrys, item.item_id, item.lack_qty, plan_date, ic_item_List, bangid);
+            decimal occqty = 0;
             if (occupylist.Any())
             {
-                decimal occqty = occupylist.Sum(s => s.qty.GetValueOrDefault());
+                occqty = occupylist.Sum(s => s.qty.GetValueOrDefault());
                 item.purchase_occupy_qty = occqty;
-                item.lack_qty -= occqty;
+                //item.lack_qty -= occqty;
                 item.purchase_occupy_list = new List<purchase_occupy>();
                 item.kitting_time = occupylist[0].etime;
                 occupylist.ForEach(s => {
@@ -1811,12 +1818,13 @@ namespace Business.ResourceExamineManagement
                 srm_Po_Occupies.AddRange(occupylist);
                 srm_Po_OccupiesInsert.AddRange(occupylist);
             }
+            return occqty;
         }
 
-        public SRMPRDto PackageSRMPR(BomChildExamineDto item,long bangid, crm_seorderentry sentrys, DateTime? plan_date)
+        public SRMPRDto PackageSRMPR(BomChildExamineDto item,long bangid, crm_seorderentry sentrys, DateTime? plan_date, decimal lack_qty)
         {
             //采购申请
-            var SRMPRDto = CreateSRMPR(item, param.company_id, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, sentrys, plan_date);
+            var SRMPRDto = CreateSRMPR(item, lack_qty, param.company_id, param.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, ic_item_List, sentrys, plan_date);
             item.purchase_list = new List<purchase>();
             if (SRMPRDto.srm_Pr_Main != null)
             {
@@ -1843,7 +1851,7 @@ namespace Business.ResourceExamineManagement
             }
             if (item.erp_cls == 3)
             {
-                item.purchase_qty = item.lack_qty;
+                item.purchase_qty = lack_qty;
                 item.purchase_list = new List<purchase>();
             }
             if (SRMPRDto.lastStartTmie > item.kitting_time)