소스 검색

接口平台swagger正式环境也启用,在途考虑PR

Murphy 2 년 전
부모
커밋
afbba06277

+ 7 - 0
MicroServices/Business/Business.Application.Contracts/ReplenishmentManagement/IReplenishmentAppService.cs

@@ -52,6 +52,13 @@ namespace Business.ReplenishmentManagement
         Task<string> CalcWeekPlan(InputDto input);
 
         /// <summary>
+        /// 根据月计划生产周计划
+        /// </summary>
+        /// <param name="companyId">工厂id</param>
+        /// <returns></returns>
+        Task<string> CalcDayPlan(InputDto input);
+
+        /// <summary>
         /// 检查所有成品半成品原材料是否需要补货先判断SS再判断ROP
         /// </summary>
         /// <param name="input"></param>

+ 184 - 11
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -775,7 +775,7 @@ namespace Business.Replenishment
             var sapItemInv = _SAPInv.Select(a => planItemList.Contains(a.MATNR) && a.WERKS == input.factory_id.ToString());
 
             //取上一个月发货出库记录
-            var shipList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && planItemList.Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(-1) && a.ShipDate <= getMonthEndTime(-1));
+            var shipList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && planItemList.Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(-6) && a.ShipDate <= getMonthEndTime(-1));
 
             //取本月发货出库记录
             var shipMList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && planItemList.Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(0) && a.ShipDate <= DateTime.Now);
@@ -1035,11 +1035,160 @@ namespace Business.Replenishment
         }
 
         /// <summary>
+        /// 每天补货
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<string> CalcDayPlan(InputDto input)
+        {
+            //1.获取补货模型全局参数
+            ReplenishmentDto replenishmentDto = GetROPParam(input.factory_id.ToString());
+
+            //Step1:按照瑞奇、两大平台分别根据历史出库数据和预测出货数据计算ROP
+            //Step2:计算瑞奇的M-M+2共12周补货(每次补EOP/4),计算海王的M-M+2共12周补货(每次补EOP/4),计算国科的M-M+2共12周补货(每次补EOP/4)
+            //Step3:汇总Step2所有补货,为工厂的制造需求
+            //Step4:按照Step3制造需求做资源检查,按月统计各物料消耗预测
+            //Step5:按照各SKU的历史出库数据和Step4里计算的预测消耗数量计算参数
+            //Step6:计算各SKU的12周采购补货
+
+
+
+            //获取月度发货计划(一次导入三个月的销售预测),因为是固定格式yyyy-MM所以可以用字符串比较,避免写很多字符串判断相等
+            string planMonth = $"{DateTime.Now.Year}-{DateTime.Now.Month.ToString("00")}";
+            string planMonthMax = $"{DateTime.Now.AddMonths(replenishmentDto.SaleFcstMonth).Year}-{DateTime.Now.AddMonths(replenishmentDto.SaleFcstMonth).Month.ToString("00")}";
+            var planList = _monthlyShipmentPlan.Select(a => a.PlanMonth.CompareTo(planMonth) >= 0 && a.PlanMonth.CompareTo(planMonthMax) <= 0 && !a.IsDeleted).ToList();
+
+
+            var itemList = _ic_item.GetListAsync(a => planList.Select(p => p.SAPItemNumber).Contains(a.number) && a.tenant_id == input.tenant_id && a.company_id == input.company_id && !a.IsDeleted).Result;
+            var mesItemList = _itemMaster.Select(a => planList.Select(p => p.SAPItemNumber).Contains(a.ItemNum) && a.Domain == input.factory_id.ToString() && a.IsActive);
+            var srm_purchaseList = _srmPurchase.GetListAsync(a => planList.Select(p => p.SAPItemNumber).Contains(a.number) && a.tenant_id == input.tenant_id && a.company_id == input.company_id && !a.IsDeleted).Result;
+
+            //获取补货模型前H周期和未来F个周期的数据
+            var ropModelList = _replenishmentROP.GetListAsync(a => a.zero_based_seqno >= -1 * replenishmentDto.HistoryOutStockMonth && a.zero_based_seqno <= replenishmentDto.SaleFcstMonth).Result;
+            //发货计划物料列表
+            List<string> planItemList = planList?.Select(a => a.SAPItemNumber).ToList();
+            //获取成品库存、灭菌库存、在制库存(会从SAP同步的库存表更新到LocationDetail、ic_item表中)
+            //List<SAPInv> sAPInvs = _SAPInv.Select(p => p.WERKS == input.factory_id.ToString() && itemNums.Contains(p.MATNR));
+            var locations = _locationDetail.Select(p => p.Domain == input.factory_id.ToString() && planList.Select(a => a.SAPItemNumber).Contains(p.ItemNum) && p.IsActive);
+            var sapItemInv = _SAPInv.Select(a => planItemList.Contains(a.MATNR) && a.WERKS == input.factory_id.ToString());
+
+            //取上一个月发货出库记录
+            var shipList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && planItemList.Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(-1) && a.ShipDate <= getMonthEndTime(-1));
+
+            //取本月发货出库记录
+            var shipMList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && planItemList.Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(0) && a.ShipDate <= DateTime.Now);
+            //按照物料分组统计出货金额
+            var itemGroup = shipList.GroupBy(p => p.ContainerItem)
+                 .Select(p => new ASNBOLShipperDetail
+                 {
+                     QtyToShip = p.Sum(a => a.QtyToShip),
+                     ContainerItem = p.Key
+                 }).ToList();
+            //按照物料分组统计出货金额
+            var itemMGroup = shipMList.GroupBy(p => p.ContainerItem)
+                 .Select(p => new ASNBOLShipperDetail
+                 {
+                     QtyToShip = p.Sum(a => a.QtyToShip),
+                     ContainerItem = p.Key
+                 }).ToList();
+            List<ReplenishmentROP> addList = new List<ReplenishmentROP>();
+            List<ReplenishmentROP> updateList = new List<ReplenishmentROP>();//更新上一个月的实际出库数量
+            var mathtool = new MathNet.Numerics.Distributions.Normal();
+            ropModelList?.Where(r => r.isparam && r.seqno == DateTime.Now.AddMonths(-1).Month && r.year == DateTime.Now.AddMonths(-1).Year).ToList()?.ForEach
+                (m =>
+                {
+                    if (itemGroup.Any(a => a.ContainerItem == m.number))
+                    {
+                        m.actual_out_qty = itemGroup.Find(a => a.ContainerItem == m.number)?.QtyToShip;
+                        updateList.Add(m);
+                    }
+                });
+            //需要按照成品资源检查计算原材料
+            planList?.Where(s => s.PlanMonth == planMonth).ToList()?.ForEach(a =>
+            {
+                ReplenishmentROP rop = new ReplenishmentROP();
+                rop.number = a.SAPItemNumber;
+                var icItem = itemList.Find(s => s.number == a.SAPItemNumber);
+                if (icItem != null)
+                {
+                    rop.name = icItem.name;
+                    rop.model = a.Model;
+                    rop.erp_cls = icItem.erp_cls; //物料属性: 0.配置类 1.自制 2.委外加工 3.外购 4.虚拟件
+                    rop.fversion = icItem.fversion;
+                    rop.min_pack_qty = icItem.minpackqty;
+                    rop.moq = icItem.moq;
+                }
+                rop.actual_period_start_instock = 0;
+                if (rop.distributionchannel == "海王" || rop.distributionchannel == "国科")
+                {
+                    rop.actual_period_start_instock = locations.Find(l => l.ItemNum == a.SAPItemNumber)?.QtyOnHand;
+                }
+                else
+                {
+                    rop.actual_period_start_instock = sapItemInv.Find(s => s.MATNR == a.SAPItemNumber)?.LABST.ToDecimal();
+                }
+                rop.distributionchannel = a.DistributionChannel;
+                rop.lifecycle = a.LifeCycle;
+                rop.area = a.Area;
+                rop.plan_out_qty = Math.Ceiling(a.Qty);
+                rop.actual_out_qty = 0;
+                if (itemMGroup.Any(m => m.ContainerItem == a.SAPItemNumber))
+                {
+                    rop.actual_out_qty = itemMGroup.Find(m => m.ContainerItem == a.SAPItemNumber)?.QtyToShip;
+                }
+                rop.year = DateTime.Now.Year;
+                rop.long_period = "Y";
+                rop.short_period = "M";
+                rop.seqno = DateTime.Now.Month;
+                rop.zero_based_seqno = 0;
+                rop.period_start_date = getMonthStartTime(0);
+                rop.period_end_date = getMonthEndTime(0);
+                rop.monthl_avg_demand = CalcAvgDemand(planList, a.SAPItemNumber);
+                rop.monthl_avg_demand_variance = Math.Ceiling(Convert.ToDecimal(CalcVariance(planList, a.SAPItemNumber)));
+                rop.monthl_avg_outstock = CalcAvgOutStock(ropModelList, replenishmentDto, rop.actual_out_qty.Value, a.SAPItemNumber);
+                if (mesItemList.Find(s => s.ItemNum == a.SAPItemNumber) != null)
+                {
+                    rop.stock_turnover = mesItemList.Find(s => s.ItemNum == a.SAPItemNumber).StockTurnOver;
+                    rop.supply_leadtime = mesItemList.Find(s => s.ItemNum == a.SAPItemNumber)?.PurLT;
+                    rop.stock_turnover = mesItemList.Find(s => s.ItemNum == a.SAPItemNumber)?.StockTurnOver;
+                }
+                else
+                {
+                    rop.stock_turnover = 4;
+                }
+                if (srm_purchaseList.Find(s => s.number == a.SAPItemNumber) != null)
+                {
+                    rop.supply_leadtime = srm_purchaseList.Find(s => s.number == a.SAPItemNumber).lead_time;
+                }
+                CalcFMRAndABC(rop, replenishmentDto, input);
+                rop.security_stock = Math.Ceiling((decimal)(mathtool.InverseCumulativeDistribution((double)rop.service_level_pct.Value) * (double)rop.monthl_avg_demand_variance));
+                rop.eop = Math.Ceiling(rop.monthl_avg_demand.Value * rop.supply_leadtime.Value / DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
+                rop.rop_computed = rop.security_stock + rop.eop;
+                rop.max_stock_level = rop.monthl_avg_outstock * (12 / rop.stock_turnover);
+                rop.rop_revised = Math.Min(rop.rop_computed.Value, rop.max_stock_level.Value);
+                rop.isparam = true;
+                rop.tenant_id = input.tenant_id;
+                rop.factory_id = input.factory_id;
+                rop.create_time = DateTime.Now;
+                rop.org_id = input.org_id;
+                addList.Add(rop);
+            });
+            addList?.ForEach(item => { item.GenerateNewId(help.NextId()); });
+
+            await _replenishmentROP.InsertManyAsync(addList);
+            await _replenishmentROP.UpdateManyAsync(updateList);
+            var ropModeAllList = _replenishmentROP.GetListAsync(a => a.year != DateTime.Now.Year && a.seqno != DateTime.Now.Month && a.isparam).Result;
+            ropModeAllList?.ForEach(item => { item.seqno = item.seqno - 1; });
+            await _replenishmentROP.UpdateManyAsync(ropModeAllList);
+            return "OK";
+        }
+
+        /// <summary>
         /// 计划工单齐套检查
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders,InputDto input)
+        public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList, InputDto input)
         {
             //先排除锁定期内的工单 //优先级排序
             var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == input.company_id.ToString()).ToList();
@@ -1111,7 +1260,7 @@ namespace Business.Replenishment
                     _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
                 }
                 //只走计划工单
-                var rtn = await OrderKittingCheck(Mes_Morders, true);
+                var rtn = await OrderKittingCheck(Mes_Morders, moentryList, true);
             }
             else
             {
@@ -1161,7 +1310,7 @@ namespace Business.Replenishment
         /// 工单检查物料齐套
         /// </summary>
         /// <param name="input"></param>
-        public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, bool planCheck = false)
+        public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList, bool planCheck = false)
         {
             //资源检查结果
             PschedDto rtn = new PschedDto();
@@ -1189,8 +1338,8 @@ namespace Business.Replenishment
 
             var morderIdList = mo_Mes_Morders.Select(s => s.Id).ToList();
 
-            List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => morderIdList.Contains(x.moentry_moid.Value)).Result;
-
+            //List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => morderIdList.Contains(x.moentry_moid.Value)).Result;
+            List<mes_moentry> mo_Mes_Moentries = moentryList;
             //获取订单行数据
             List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.company_id == input.company_id && p.factory_id == input.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
 
@@ -1699,6 +1848,15 @@ namespace Business.Replenishment
                 moSrm_po_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
                 await _srm_po_occupy.InsertManyAsync(moSrm_po_occupy);
             }
+
+            //pr
+            var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && itemIds.Contains(x.icitem_id.GetValueOrDefault())).Result;
+            if (srm_pr_main.Count > 0)
+            {
+                var moSrm_pr_main = ObjectMapper.Map<List<srm_pr_main>, List<mo_srm_pr_main>>(srm_pr_main);
+                moSrm_pr_main.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                await _srm_pr_main.InsertManyAsync(moSrm_pr_main);
+            }
         }
 
         /// <summary>
@@ -1727,6 +1885,9 @@ namespace Business.Replenishment
 
             //清除采购订单占用详情
             //await _srm_po_occupy.DeleteAsync(p => p.bang_id == bangid);
+
+            //清除PR
+            await _srm_pr_main.DeleteAsync(p => p.bang_id == bangid);
         }
 
 
@@ -1778,6 +1939,7 @@ namespace Business.Replenishment
             var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && x.rstate == 1 && !x.IsDeleted).Result;
             //采购订单占用数据
             var poOccupys = _srm_po_occupy.GetListAsync(x => poDetailList.Select(p => p.Id).ToList().Contains(x.polist_id) && x.bang_id == bangid && !x.IsDeleted).Result;
+            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 0 && !x.IsDeleted).Result;
             #endregion
 
             //处理一下已经插入得占用记录
@@ -1808,6 +1970,7 @@ namespace Business.Replenishment
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
             _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
             _CalcBomViewAppService.ic_item_List = icitemlist; //物料表
+            _CalcBomViewAppService.srm_Pr_Mains = srm_pr_mains;//PR
         }
 
 
@@ -2015,10 +2178,9 @@ namespace Business.Replenishment
         /// <returns></returns>
         public async Task<string> CalcLongPeriodItemPR(InputDto input)
         {
-            //取年份最大的数据
-            int yearMax=DateTime.Now.Year;
-            yearMax=_businessDbContext.ReplenishmentAnnualProduction.Where(m => m.factory_id ==input.factory_id && !m.IsDeleted).Max(m => (int?)m.Year).GetValueOrDefault();
-            var productList = _replenishmentAnnualProduction.GetListAsync(a => a.Year == yearMax && !a.IsDeleted && a.factory_id == input.factory_id).Result.OrderBy(s=>s.OrderNum).ToList();
+            //获取未来六个月数据
+            var monthlist = GetSixPlanMonth();
+            var productList = _replenishmentAnnualProduction.GetListAsync(a => monthlist.Contains(a.PlanMonth) && !a.IsDeleted && a.factory_id == input.factory_id).Result.OrderBy(s=>s.OrderNum).ToList();
             var itemList= productList.Select(a=>a.SAPItemNumber).ToList();
             var planList=_mysql_ic_item.GetListAsync(a=>itemList.Contains(a.number) && a.factory_id==input.factory_id && !a.IsDeleted).Result.ToList();
             var mesItem=_itemMaster.Select(a => itemList.Contains(a.ItemNum) &&a.IsActive && a.Domain==input.factory_id.ToString());
@@ -2082,7 +2244,7 @@ namespace Business.Replenishment
             }
             await _mysql_mes_morder.InsertManyAsync(moList);
             await _mysql_mes_moentry.InsertManyAsync(moentryList);
-            await PlanOrderResourceCheck(moList,input);
+            await PlanOrderResourceCheck(moList,moentryList,input);
             return "OK";
         }
 
@@ -2513,5 +2675,16 @@ namespace Business.Replenishment
         {
             return getPreMonthEndTime().AddMonths(months + 1);
         }
+
+        public List<string> GetSixPlanMonth()
+        {
+            List<string> result=new List<string>();
+            for(int i=0;i<6;i++)
+            {
+                var months = DateTime.Now.AddMonths(i + 1);
+                result.Add($"{months.Year}-{months.Month}");
+            }
+            return result;
+        }
     }
 }

+ 16 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -32,6 +32,7 @@ namespace Business.ResourceExamineManagement
         public List<mo_ic_item> ic_item_List = new List<mo_ic_item>();
         public List<mo_srm_po_list> srm_Po_Lists = new List<mo_srm_po_list>();
         public List<mo_srm_po_occupy> srm_Po_Occupies = new List<mo_srm_po_occupy>();
+        public List<mo_srm_pr_main> srm_Pr_Mains = new List<mo_srm_pr_main>();
         public List<mo_srm_po_occupy> srm_Po_OccupiesInsert = new List<mo_srm_po_occupy>();
 
         public List<mo_ic_item_stockoccupy> newStockOccList = new List<mo_ic_item_stockoccupy>();
@@ -284,8 +285,13 @@ namespace Business.ResourceExamineManagement
                             CalcInTransit(sentrys, level1Dto, bangid, plan_date.GetValueOrDefault());
                             if (level1Dto.lack_qty > 0)
                             {
-                                //采购申请
-                                PackageSRMPR(level1Dto, bangid, sentrys);
+                                decimal itemPRQty = srm_Pr_Mains.Where(x => x.icitem_id.Value == level1Dto.item_id && x.pr_parrive_date <= plan_date).Sum(y => y.pr_aqty.GetValueOrDefault());
+                                if (itemPRQty < level1Dto.lack_qty)
+                                {
+                                    level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
+                                    //采购申请
+                                    PackageSRMPR(level1Dto, bangid, sentrys);
+                                }
                             }
                         }
                         else if (level1Dto.erp_cls == 2)
@@ -305,7 +311,14 @@ namespace Business.ResourceExamineManagement
 
                                 //2.生成采购申请
                                 //采购申请
-                                PackageSRMPR(level1Dto, bangid, sentrys);
+                                decimal itemPRQty = srm_Pr_Mains.Where(x => x.icitem_id.Value == level1Dto.item_id && x.pr_parrive_date <= plan_date).Sum(y => y.pr_aqty.GetValueOrDefault());
+                                if (itemPRQty < level1Dto.lack_qty)
+                                {
+                                    level1Dto.lack_qty = level1Dto.lack_qty - itemPRQty;
+                                    //采购申请
+                                    PackageSRMPR(level1Dto, bangid, sentrys);
+                                }
+                                //PackageSRMPR(level1Dto, bangid, sentrys);
 
                                 level1Dto.subcontracting_qty = level1Dto.lack_qty;
                                 level1Dto.subcontracting_list = new List<ooder>();

+ 15 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -1886,6 +1886,15 @@ namespace Business.ResourceExamineManagement
                 moSrm_po_occupy.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
                 await _srm_po_occupy.InsertManyAsync(moSrm_po_occupy);
             }
+
+            //pr
+            var srm_pr_main = _mysql_srm_pr_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && itemIds.Contains(x.icitem_id.GetValueOrDefault())).Result;
+            if(srm_pr_main.Count>0)
+            {
+                var moSrm_pr_main = ObjectMapper.Map<List<srm_pr_main>, List<mo_srm_pr_main>>(srm_pr_main);
+                moSrm_pr_main.ForEach(item => { item.GenerateNewId(help.NextId()); item.bang_id = bangid; });
+                await _srm_pr_main.InsertManyAsync(moSrm_pr_main);
+            }
         }
 
         /// <summary>
@@ -1914,6 +1923,9 @@ namespace Business.ResourceExamineManagement
 
             //清除采购订单占用详情
             //await _srm_po_occupy.DeleteAsync(p => p.bang_id == bangid);
+
+            //清除PR
+            await _srm_pr_main.DeleteAsync(p => p.bang_id == bangid);
         }
 
         /// <summary>
@@ -3205,6 +3217,8 @@ namespace Business.ResourceExamineManagement
             var poDetailList = _srm_po_list.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 1 && x.rstate == 1 && !x.IsDeleted).Result;
             //采购订单占用数据
             var poOccupys = _srm_po_occupy.GetListAsync(x => poDetailList.Select(p => p.Id).ToList().Contains(x.polist_id) && x.bang_id == bangid && !x.IsDeleted).Result;
+
+            var srm_pr_mains = _srm_pr_main.GetListAsync(x => icitemlist.Select(p => p.mysql_id).ToList().Contains(x.icitem_id.Value) && x.bang_id == bangid && x.state == 0 && !x.IsDeleted).Result;
             #endregion
 
             //处理一下已经插入得占用记录
@@ -3235,6 +3249,7 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
             _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
             _CalcBomViewAppService.ic_item_List = icitemlist; //物料表
+            _CalcBomViewAppService.srm_Pr_Mains = srm_pr_mains;//PR
         }
 
         public void GenerateSort(List<BomChildExamineDto> returnlist)

+ 9 - 0
MicroServices/Business/Business.Domain/MongoDB/MES/IC/mo_ic_item.cs

@@ -682,5 +682,14 @@ namespace Business.Domain
         [StringLength(80)]
         [Comment("物料类型")]
         public string item_type { get; set; }
+
+        /// <summary>
+        /// 供应提前期
+        /// </summary>
+        [Comment("供应提前期")]
+        [Required]
+        [DefaultValue(0)]
+        [Precision(23, 10)]
+        public int PurLT { get; set; }
     }
 }

+ 9 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ic_item.cs

@@ -687,5 +687,14 @@ namespace Business.Domain
         [StringLength(80)]
         [Comment("物料类型")]
         public string item_type { get; set; }
+
+        /// <summary>
+        /// 供应提前期
+        /// </summary>
+        [Comment("供应提前期")]
+        [Required]
+        [DefaultValue(0)]
+        [Precision(23, 10)]
+        public int PurLT { get; set; }
     }
 }

+ 14 - 24
MicroServices/Business/Business.HttpApi/Controllers/ReplenishmentController.cs

@@ -33,17 +33,6 @@ namespace Business.Controllers
             _ReplenishmentAppService = ReplenishmentAppService;
         }
 
-        ///// <summary>
-        ///// 计划工单齐套检查
-        ///// </summary>
-        ///// <param name="workOrd"></param>
-        ///// <returns></returns>
-        //[HttpPost]
-        //[Route("PlanOrderResourceCheck")]
-        //public Task<string> PlanOrderResourceCheck(string companyid)
-        //{
-        //    return _ReplenishmentAppService.PlanOrderResourceCheck(companyid);
-        //}
 
         /// <summary>
         /// 调整ROP和最高库存水位
@@ -58,28 +47,17 @@ namespace Business.Controllers
         }
 
         /// <summary>
-        /// 根据月计划生产周计划
+        /// 生产周计划
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
         [HttpPost]
         [Route("calcweekplan")]
-        public Task<string> CalcCalcWeekPlanROP(InputDto input)
+        public Task<string> CalcWeekPlan(InputDto input)
         {
             return _ReplenishmentAppService.CalcWeekPlan(input);
         }
 
-        ///// <summary>
-        ///// 更新周计划
-        ///// </summary>
-        ///// <param name="input"></param>
-        ///// <returns></returns>
-        //[HttpPost]
-        //[Route("weekplan")]
-        //public Task<string> WeekPlan(InputDto input)
-        //{
-        //    return _ReplenishmentAppService.WeekPlan(input);
-        //}
 
         /// <summary>
         /// 刷新年度销售预测
@@ -106,6 +84,18 @@ namespace Business.Controllers
         }
 
         /// <summary>
+        /// 定时任务每天补货
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("calclongperioditempr")]
+        public Task<string> CalcDayPlan(InputDto input)
+        {
+            return _ReplenishmentAppService.CalcDayPlan(input);
+        }
+
+        /// <summary>
         /// 生成整体需求计划
         /// </summary>
         /// <param name="input"></param>

+ 33 - 0
MicroServices/Business/QuartzSettings/logs/logs.txt

@@ -242,3 +242,36 @@
 {"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:19:24.0360216+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:19:24.0399294+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:19:24.0421363+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:34:01.1887374+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:34:01.2508916+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:34:01.2541968+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:34:01.2563019+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:37:38.016605+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:37:38.0566604+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:37:38.0602136+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:37:38.0621968+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:48:38.6253594+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:48:38.6856654+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:48:38.6923829+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T14:48:38.6953885+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T15:46:03.0274634+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T15:46:03.0708451+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T15:46:03.0728369+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T15:46:03.0780607+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T16:51:39.0329342+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T16:51:39.0749882+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T16:51:39.077945+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T16:51:39.0794661+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:03:49.2745203+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:03:49.3333242+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:03:49.3398368+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:03:49.3427292+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:04:00.1099598+08:00","EndDate":"2023-09-06T17:05:40.518191+08:00","Msg":"The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:26:01.1603172+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:26:01.2217802+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:26:01.2283193+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T17:26:01.2308807+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-06T18:29:09.8158061+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-06T18:29:09.878539+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-06T18:29:09.8827482+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-06T18:29:09.8856624+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}

+ 1 - 0
MicroServices/DopInterfacePlatform/DopInterfacePlatform.csproj.user

@@ -3,5 +3,6 @@
   <PropertyGroup>
     <Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
     <Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
+    <NameOfLastUsedPublishProfile>D:\DOPCore\MicroServices\DOPInterfacePlatform\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
   </PropertyGroup>
 </Project>

+ 4 - 5
MicroServices/DopInterfacePlatform/Program.cs

@@ -45,11 +45,10 @@ namespace DopInterfacePlatform
             var app = builder.Build();
 
             // Configure the HTTP request pipeline.
-            if (app.Environment.IsDevelopment())
-            {
-                app.UseSwagger();
-                app.UseSwaggerUI();
-            }
+
+            app.UseSwagger();
+            app.UseSwaggerUI();
+
 
             app.UseHttpsRedirection();
 

+ 21 - 0
MicroServices/DopInterfacePlatform/Properties/PublishProfiles/FolderProfile.pubxml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>true</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>C:\Users\yuanhefei\Desktop\DOP文档\publish\DOPInterfacePlatform</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <_TargetId>Folder</_TargetId>
+    <SiteUrlToLaunchAfterPublish />
+    <TargetFramework>net6.0</TargetFramework>
+    <ProjectGuid>58b598ba-29fc-492e-a976-d271f3a842c8</ProjectGuid>
+    <SelfContained>false</SelfContained>
+  </PropertyGroup>
+</Project>

+ 11 - 0
MicroServices/DopInterfacePlatform/Properties/PublishProfiles/FolderProfile.pubxml.user

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>C:\Users\yuanhefei\Desktop\DOP文档\publish\DOPInterfacePlatform</_PublishTargetUrl>
+    <History>True|2023-09-06T08:32:23.0343111Z;True|2023-09-06T16:29:00.3120067+08:00;True|2023-09-06T16:20:50.3191564+08:00;True|2023-09-06T16:16:12.2283892+08:00;True|2023-09-06T16:16:02.3726602+08:00;True|2023-09-06T16:12:46.4394558+08:00;True|2023-09-06T15:50:40.9163484+08:00;True|2023-09-06T15:15:21.6056173+08:00;</History>
+    <LastFailureDetails />
+  </PropertyGroup>
+</Project>

+ 1 - 1
MicroServices/DopInterfacePlatform/Properties/launchSettings.json

@@ -14,7 +14,7 @@
       "dotnetRunMessages": true,
       "launchBrowser": true,
       "launchUrl": "swagger",
-      "applicationUrl": "https://localhost:7059;http://localhost:5036",
+      "applicationUrl": "http://localhost:9800;https://localhost:9801",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
       }

+ 3 - 3
MicroServices/DopInterfacePlatform/appsettings.json

@@ -9,11 +9,11 @@
   "JWT": {
     "Issuer": "zzy2025@qq.com",
     "Audience": "zzy2025@qq.com",
-    "Key": "A86DA130-1B95-4748-B3B2-1B6AA9F2F743", //加密密钥
+    "Key": "A86DA1301B954748B3B21B6AA9F2F743", //加密密钥
     "ExpireSeconds": 600 //密钥过期时间
   },
-  "IpWhiteList": "192.168.1.5;::1",
+  "IpWhiteList": "172.16.8.154;127.0.0.1;192.168.1.5;::1",
   "ConnectionStrings": {
-    "todoContext": "Server=123.60.180.165;Database=DopInterfacePlatform;uid=sa;pwd=5h3n9)uN;Trusted_Connection=false;TrustServerCertificate=True"
+    "todoContext": "Server=172.16.8.154;Database=DopInterfacePlatform;uid=sa;pwd=ac%qams)aCXI;Trusted_Connection=false;TrustServerCertificate=True"
   }
 }