Jelajahi Sumber

补货模型提交

Murphy 2 tahun lalu
induk
melakukan
66886e04ba
16 mengubah file dengan 346 tambahan dan 445 penghapusan
  1. 1 1
      AuthServer/IdentityServer/AuthServer.Host/appsettings.json
  2. 9 1
      MicroServices/Business/Business.Application.Contracts/ReplenishmentManagement/IReplenishmentAppService.cs
  3. 241 222
      MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs
  4. 0 3
      MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs
  5. 0 2
      MicroServices/Business/Business.Core/Business.Core.csproj
  6. 0 115
      MicroServices/Business/Business.Core/Utilities/QRcodeHelper.cs
  7. 6 0
      MicroServices/Business/Business.Domain/StructuredDB/MES/IC/CustMaster.cs
  8. 2 0
      MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdMaster.cs
  9. 1 1
      MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdRouting.cs
  10. 1 7
      MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentROP.cs
  11. 1 7
      MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentServiceLevel.cs
  12. 2 1
      MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentWeekPlan.cs
  13. 2 0
      MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs
  14. 0 80
      MicroServices/Business/Business.HttpApi/Controllers/QRcodeController.cs
  15. 18 5
      MicroServices/Business/Business.HttpApi/Controllers/ReplenishmentController.cs
  16. 62 0
      MicroServices/Business/QuartzSettings/logs/logs.txt

+ 1 - 1
AuthServer/IdentityServer/AuthServer.Host/appsettings.json

@@ -1,6 +1,6 @@
 {
   "ConnectionStrings": {
-    "Default": "Server=123.60.181.157;Database=dopbiz;uid=sa;pwd=5heng)uN;Trusted_Connection=false;TrustServerCertificate=True"
+    "Default": "Server=123.60.180.165;Database=dopbiz;uid=sa;pwd=5h3n9)uN;Trusted_Connection=false;TrustServerCertificate=True"
   },
   "CorsOrigins": "http://localhost:9527,http://localhost:44307",
   "ElasticSearch": {

+ 9 - 1
MicroServices/Business/Business.Application.Contracts/ReplenishmentManagement/IReplenishmentAppService.cs

@@ -1,4 +1,5 @@
-using Business.Dto;
+using Business.Domain;
+using Business.Dto;
 using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
@@ -64,5 +65,12 @@ namespace Business.ReplenishmentManagement
         /// <param name="input"></param>
         /// <returns></returns>
         Task<string> DayCheckAllByFinalGoods(InputDto input);
+
+        /// <summary>
+        /// 计算工单优先级
+        /// </summary>
+        /// <param name="companyId">工厂id</param>
+        /// <returns></returns>
+        List<WorkOrdMaster> CalcPriority(List<string> workOrdMasters, string domain);
     }
 }

+ 241 - 222
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -28,6 +28,7 @@ using Newtonsoft.Json.Linq;
 using MathNet.Numerics.RootFinding;
 using Microsoft.EntityFrameworkCore;
 using System.ComponentModel.DataAnnotations;
+using System.Collections;
 
 namespace Business.Replenishment
 {
@@ -91,11 +92,13 @@ namespace Business.Replenishment
         private readonly ISqlRepository<ShopCalendarWorkCtr> _shopCalendarWorkCtr;
         private readonly ISqlRepository<PeriodSequenceDet> _periodSequenceDet;
         private readonly ISqlRepository<QualityLineWorkDetail> _qualityLineWorkDetail;
+        private readonly ISqlRepository<CustMaster> _custMaster;
         private readonly IRepository<mo_srm_po_main, long> _srm_po_main;
         private readonly IRepository<srm_po_main, long> _mysql_srm_po_main;
         private readonly IRepository<mo_srm_purchase, long> _srm_purchase;
         private readonly IRepository<srm_purchase, long> _mysql_srm_purchase;
         private readonly IRepository<mes_morder, long> _mysql_mes_morder;
+        private readonly IRepository<crm_seorder, long> _mysql_crm_seorder;
         private readonly IRepository<crm_seorderentry, long> _mysql_crm_seorderentry;
         private readonly IRepository<mo_mes_oorder, long> _mes_oorder;
         private readonly ISqlRepository<ScheduleResultOpMaster> _scheduleResultOpMaster;
@@ -277,6 +280,7 @@ namespace Business.Replenishment
             IRepository<mo_srm_purchase, long> srm_purchase,
             IRepository<srm_purchase, long> mysql_srm_purchase,
             IRepository<mes_morder, long> mysql_mes_morder,
+            IRepository<crm_seorder, long> mysql_crm_seorder,
             IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
             IRepository<mo_mes_oorder, long> mes_oorder,
             ISqlRepository<ScheduleResultOpMaster> scheduleResultOpMaster,
@@ -287,6 +291,7 @@ namespace Business.Replenishment
             IRepository<YearDemandManagementHistory, long> yearDemandManagementHistory,
             IRepository<WMS_PlatformInventory, long> PlatformInventory,
             ISqlRepository<WorkOrdRouting> workOrdRouting,
+            ISqlRepository<CustMaster> custMaster,
             IRepository<MonthlyProdCapacity, long> monthlyProdCapacity,
             IRepository<MonthlyProdCapacityDtl, long> monthlyProdCapacityDtl,
             IRepository<crm_planorder, long> crm_planorder,
@@ -329,6 +334,7 @@ namespace Business.Replenishment
             _mysql_mes_mooccupy = mysql_mes_mooccupy;
             _mysql_b_bom_pretreatment = mysql_b_bom_pretreatment;
             _workOrdMaster = workOrdMaster;
+            _custMaster=custMaster;
             _prodLineDetail = prodLineDetail;
             _ic_bom = ic_bom;
             _mysql_ic_bom = mysql_ic_bom;
@@ -359,6 +365,7 @@ namespace Business.Replenishment
             _srm_purchase= srm_purchase;
             _mysql_srm_purchase = mysql_srm_purchase;
             _mysql_mes_morder = mysql_mes_morder;
+            _mysql_crm_seorder = mysql_crm_seorder;
             _mysql_crm_seorderentry = mysql_crm_seorderentry;
             _mes_oorder = mes_oorder;
             _scheduleResultOpMaster = scheduleResultOpMaster;
@@ -520,6 +527,7 @@ namespace Business.Replenishment
             {
                 try
                 {
+                    await _replenishmentAnnualProduction.DeleteAsync(a => a.Year == input.year && a.tenant_id == input.tenant_id && a.factory_id == input.factory_id);
                     await _replenishmentAnnualProduction.InsertManyAsync(annualProductionOutlines);
                     await unitOfWork.CompleteAsync();
                 }
@@ -541,7 +549,7 @@ namespace Business.Replenishment
         public async Task<string> SaveProductionMasterPlan(InputDto input)
         {
             //计算当前年月的N0,N+1,N+2
-            List<string> planMons = GetPlanMonth(3);
+            List<string> planMons = GetPlanMonth(4);
             List<ProductionMasterPlan> productionMasters= new List<ProductionMasterPlan>();
             List<ProductionMasterPlan> pre3MonthPlan = _productionMasterPlan.GetListAsync(a => GetPlanMonth(-3).Contains(a.PlanMonth) && a.factory_id == input.factory_id && a.tenant_id == input.tenant_id && a.company_id == input.company_id).Result;
             //N0,N+1,N+2月度发货计划
@@ -551,7 +559,7 @@ namespace Business.Replenishment
             List<LocationDetail> locations = _locationDetail.Select(x => annualProduction.Select(m => m.SAPItemNumber).Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
             var InProdcutQty=GetInProdcutQty(annualProduction.Select(m => m.SAPItemNumber).ToList(),input);
             var itemStock = CalcStock(annualProduction.Select(m => m.SAPItemNumber).ToList(),input);
-            foreach (var item in annualProduction)
+            foreach (var item in annualProduction.Where(a=> GetPlanMonth(4).Contains(a.PlanMonth)))
             {
                 ProductionMasterPlan plan = new ProductionMasterPlan();
                 plan.Area = item.Area;
@@ -843,7 +851,7 @@ namespace Business.Replenishment
         //}
 
         /// <summary>
-        /// 调整ROP和最高库存水位
+        /// 调整ROP和最高库存水位(按照成品展开到原材料,原材料用领料算出库)
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -851,40 +859,44 @@ namespace Business.Replenishment
         {
             //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;
+            var boms = _ic_bom.GetListAsync(a => planList.Select(p => p.SAPItemNumber).ToList().Contains(a.item_number) && a.tenant_id == input.tenant_id && a.factory_id == input.factory_id).Result;
+            var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
+            List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
+            boms.ForEach(p =>
+            {
+                if (!pretreatments.Where(s => s.sourceid == p.Id).Any())
+                {
+                    autoCreates.Add(p);
+                }
+            });
+            if (autoCreates.Any())
+            {
+                AutoCreateBomBill(input.company_id.ToString(), autoCreates);
+                pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
+            }
+            var itemList = _ic_item.GetListAsync(a => pretreatments.Select(p => p.item_number).Contains(a.number) && a.tenant_id == input.tenant_id && a.company_id == input.company_id && !a.IsDeleted).Result;
+            var mesItemList = _itemMaster.Select(a => pretreatments.Select(p => p.item_number).Contains(a.ItemNum) && a.Domain == input.factory_id.ToString() && a.IsActive);
+            var srm_purchaseList = _srmPurchase.GetListAsync(a => pretreatments.Select(p => p.item_number).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(-6) && a.ShipDate <= getMonthEndTime(-1));
+            var locations = _locationDetail.Select(p => p.Domain == input.factory_id.ToString() && pretreatments.Select(p => p.item_number).Contains(p.ItemNum) && p.IsActive);
+            var sapItemInv = _SAPInv.Select(a => pretreatments.Select(p => p.item_number).Contains(a.MATNR) && a.WERKS == input.factory_id.ToString());
 
+            //取过去6个月发货出库记录
+            var shipList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && pretreatments.Select(p => p.item_number).Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(-6) && a.ShipDate <= getMonthEndTime(-1));
+            //领料出库记录
+            //var pickbilllist = _NbrDetail.Select(a => a.Domain == input.factory_id.ToString() && a.Type == "SM" && a.IsActive && a.UpdateTime >= DateTime.Now.AddMonths(replenishmentDto.HistoryOutStockMonth * -1) && itemNumList.Contains(a.ItemNum));
+            var pickbilllist = _invTransHist.Select(a => a.Domain == input.factory_id.ToString() && a.TransType == "iss-wo" && a.IsActive && a.CreateTime >= DateTime.Now.AddMonths(-6) && pretreatments.Select(p => p.item_number).Contains(a.ItemNum));
             //取本月发货出库记录
-            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 shipMList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.RealQty > 0 && pretreatments.Select(p => p.item_number).Contains(a.ContainerItem) && a.ShipDate >= getMonthStartTime(0) && a.ShipDate <= DateTime.Now);
             //按照物料分组统计出货金额
             var itemGroup = shipList.GroupBy(p => p.ContainerItem)
                  .Select(p => new ASNBOLShipperDetail
@@ -914,73 +926,91 @@ namespace Business.Replenishment
             //需要按照成品资源检查计算原材料
             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);
-                rop.supply_leadtime = 1;//默认
-                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)
+                var itemSourceId = boms.Find(b => b.item_number == a.SAPItemNumber)?.mysql_id;
+                if (itemSourceId != null)
                 {
-                    rop.supply_leadtime = srm_purchaseList.Find(s => s.number == a.SAPItemNumber).lead_time;
+                    for (int i = 0; i < pretreatments.Count; i++)
+                    {
+                        if (pretreatments[i].sourceid == itemSourceId)
+                        {
+                            ReplenishmentROP rop = new ReplenishmentROP();
+                            rop.number = pretreatments[i].item_number;
+                            var icItem = itemList.Find(s => s.number == pretreatments[i].item_number);
+                            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 == pretreatments[i].item_number)?.QtyOnHand;
+                            }
+                            else
+                            {
+                                rop.actual_period_start_instock = sapItemInv.Find(s => s.MATNR == pretreatments[i].item_number)?.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 == pretreatments[i].item_number))
+                            {
+                                rop.actual_out_qty = itemMGroup.Find(m => m.ContainerItem == pretreatments[i].item_number)?.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);
+                            if (rop.erp_cls == 3)
+                            {
+                                rop.monthl_avg_demand = CalcAvgDemand(planList, pretreatments[i].item_number, rop.erp_cls, pickbilllist);
+                            }
+                            else
+                            {
+                                rop.monthl_avg_demand = CalcAvgDemand(planList, pretreatments[i].item_number, rop.erp_cls);
+                            }
+
+                            rop.monthl_avg_demand_variance = Math.Ceiling(Convert.ToDecimal(CalcVariance(planList, pretreatments[i].item_number, rop.erp_cls, rop.monthl_avg_demand, pickbilllist)));
+                            rop.monthl_avg_outstock = CalcAvgOutStock(ropModelList, replenishmentDto, rop.actual_out_qty.Value, pretreatments[i].item_number);
+                            rop.supply_leadtime = 1;//默认
+                            if (mesItemList.Find(s => s.ItemNum == pretreatments[i].item_number) != null)
+                            {
+                                rop.stock_turnover = mesItemList.Find(s => s.ItemNum == pretreatments[i].item_number).StockTurnOver;
+                                rop.supply_leadtime = mesItemList.Find(s => s.ItemNum == pretreatments[i].item_number)?.PurLT;
+                                rop.stock_turnover = mesItemList.Find(s => s.ItemNum == pretreatments[i].item_number)?.StockTurnOver;
+                            }
+                            else
+                            {
+                                rop.stock_turnover = 4;
+                            }
+                            if (srm_purchaseList.Find(s => s.number == pretreatments[i].item_number) != null)
+                            {
+                                rop.supply_leadtime = srm_purchaseList.Find(s => s.number == pretreatments[i].item_number).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);
+                        }
+                    }
                 }
-                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()); });
 
@@ -1101,8 +1131,8 @@ namespace Business.Replenishment
                 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_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)
                 {
@@ -1151,7 +1181,11 @@ namespace Business.Replenishment
             ReplenishmentDto replenishmentDto = GetROPParam(input.factory_id.ToString());
             //DOP运行资源检查每个成品和半成品SKU的可用库存,当可用库存 <= 修正后ROP时,自动生成月度计划订单(MPlan order,MPO48年月日3位流水号)= EOP;可用库存为没有被其他SO和PO占用的(合格成品或半成品库存 + WIP);
             var ropModelList = _replenishmentROP.GetListAsync(a =>a.isparam && a.factory_id==input.factory_id && a.company_id==input.company_id && !a.IsDeleted).Result;
-            var itemStock=CalcStock(ropModelList.Select(a=>a.number).ToList(),input);
+            var itemStock = CalcStock(ropModelList.Select(a => a.number).ToList(), input);
+            ropModelList.Where(a => a.erp_cls == 1)?.ToList().ForEach(b =>
+            {
+
+            });
             //成品半成品取下周一开始+取供应提前期为结束时间
             //原材料取第二天开始+取供应提前期为结束时间
 
@@ -1173,132 +1207,92 @@ namespace Business.Replenishment
 
 
 
-            //获取月度发货计划(一次导入三个月的销售预测),因为是固定格式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();
+            return "OK";
+        }
 
 
-            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;
+        /// <summary>
+        /// 根据工单编号拍优先级
+        /// </summary>
+        /// <param name="workOrdMasters">工单编号列表</param>
+        /// <param name="domain">工厂编码</param>
+        /// <returns></returns>
+        //计算工单优先级
+        public List<WorkOrdMaster> CalcPriority(List<string> workOrdMasters,string domain)
+        {
+            var works= _workOrdMaster.Select(a => workOrdMasters.Contains(a.WorkOrd) && a.Domain == domain && a.IsActive);
+            var saleWordOrd = works.Where(a => !string.IsNullOrEmpty(a.SalesJob));
+            Dictionary<string, int> dict = new Dictionary<string, int>();
+            var soList=_mysql_crm_seorder.GetListAsync(a=> saleWordOrd.Select(b=>b.SalesJob).Contains(a.bill_no)).Result;
+            
+            var custList = _custMaster.Select(a => soList.Select(b => b.custom_no).Contains(a.Cust) && a.Domain == domain);
+            //T1海外客户
+            var T1CustList = custList.FindAll(a => a.Terms == "T1" || a.Terms == "海外").Select(a => a.Cust);
+            //国科海王客户
+            var T2CustList = custList.FindAll(a => a.Terms == "国科" || a.Terms == "海王").Select(a => a.Cust);
+            //T1海外订单
+            var T1SOList = soList.Where(a => T1CustList.Contains(a.custom_no)).Select(a => a.bill_no);
+            //国科海王订单
+            var T2SOList = soList.Where(a => T2CustList.Contains(a.custom_no)).Select(a => a.bill_no);
+            //T1海外工单
+            var T1WOList = saleWordOrd.Where(a => T1SOList.Contains(a.SalesJob)).ToList();
+            //国科海王工单
+            var T2WOList = saleWordOrd.Where(a => T2SOList.Contains(a.SalesJob)).ToList();
+            //在制工单
+            var inProductList = _mes_mooccupy.GetListAsync(a => works.Select(a => a.WorkOrd).Contains(a.moo_mo)).Result;
+
+            //优先1:T1、海外销售订单新产生的生产指令;
+            var T1WOListNew=T1WOList.Where(a=> !inProductList.Select(b=>b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a=>a.DueDate).ToList();
+            //优先2:T1、海外销售订单关联的在制生产指令;
+            var T1WOListInProduct = T1WOList.Where(a => inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
+            //优先3:平台(国科、海王)销售订单新产生的生产指令;
+            var T2WOListNew = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
+            //优先4:平台(国科、海王)销售订单关联的在制生产指令;
+            var T2WOListInProduct = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
+            //优先5:除销售订单以外,计划补货订单关联的生产指令;
+            var PlanWOList = works.Except(T1WOListNew).ToList();
+            PlanWOList = works.Except(T1WOListInProduct).ToList();
+            PlanWOList = works.Except(T2WOListNew).ToList();
+            PlanWOList = works.Except(T2WOListInProduct).ToList();
+            PlanWOList= PlanWOList.OrderBy(a => a.DueDate).ToList();
+            //先按生产指令的类型,再按生产指令的完工日期顺序排产;
+            List<WorkOrdMaster> orderedList = new List<WorkOrdMaster>();
+            decimal Priority = 1.0m;
+            for (int i=0;i< T1WOListNew.Count;i++)
+            {
+                T1WOListNew[i].Priority = Priority;
+                orderedList.Add(T1WOListNew[i]);
+                Priority = Priority + 1.0m;
+            }
 
-            //发货计划物料列表
-            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());
+            for (int i = 0; i < T1WOListInProduct.Count; i++)
+            {
+                T1WOListInProduct[i].Priority = Priority;
+                orderedList.Add(T1WOListInProduct[i]);
+                Priority = Priority + 1.0m;
+            }
 
-            //取上一个月发货出库记录
-            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));
+            for (int i = 0; i < T2WOListNew.Count; i++)
+            {
+                T2WOListNew[i].Priority = Priority;
+                orderedList.Add(T2WOListNew[i]);
+                Priority = Priority + 1.0m;
+            }
 
-            //取本月发货出库记录
-            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 =>
+            for (int i = 0; i < T2WOListInProduct.Count; i++)
             {
-                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()); });
+                T2WOListInProduct[i].Priority = Priority;
+                orderedList.Add(T2WOListInProduct[i]);
+                Priority = Priority + 1.0m;
+            }
 
-            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";
+            for (int i = 0; i < PlanWOList.Count; i++)
+            {
+                PlanWOList[i].Priority = Priority;
+                orderedList.Add(PlanWOList[i]);
+                Priority = Priority + 1.0m;
+            }
+            return orderedList;
         }
 
         /// <summary>
@@ -2273,7 +2267,7 @@ namespace Business.Replenishment
         /// </summary>
         public void AutoCreateBomBill(string companyid, List<mo_ic_bom> ic_Boms = null)
         {
-            ic_Boms ??= _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid && (p.bom_number == "10100012_V1.0" || p.bom_number == "10100241_V1.0" || p.bom_number == "BOM00042070") && !p.IsDeleted).Result.ToList();
+            ic_Boms ??= _ic_bom.GetListAsync(p => p.company_id.ToString() == companyid  && !p.IsDeleted).Result.ToList();
             var pretreatment = _mysql_b_bom_pretreatment.GetListAsync(s => ic_Boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
 
             param.company_id = long.Parse(companyid);
@@ -2661,7 +2655,7 @@ namespace Business.Replenishment
             var shipList = _ASNBOLShipperDetail.Select(a => a.Domain == input.factory_id.ToString() && a.IsActive && a.shtype == "SH" && a.Typed != "S" && a.ShipDate >= DateTime.Now.AddMonths(-6) && a.RealQty > 0 && replenishmentModel.number == a.ContainerItem);
             //领料出库记录
             //var pickbilllist = _NbrDetail.Select(a => a.Domain == input.factory_id.ToString() && a.Type == "SM" && a.IsActive && a.UpdateTime >= DateTime.Now.AddMonths(replenishmentDto.HistoryOutStockMonth * -1) && itemNumList.Contains(a.ItemNum));
-            var pickbilllist = _invTransHist.Select(a => a.Domain == input.factory_id.ToString() && a.TransType == "iss-wo" && a.IsActive && a.CreateTime >= DateTime.Now.AddMonths(-6) && replenishmentModel.number == a.ItemNum);
+            List<InvTransHist> pickbilllist = _invTransHist.Select(a => a.Domain == input.factory_id.ToString() && a.TransType == "iss-wo" && a.IsActive && a.CreateTime >= DateTime.Now.AddMonths(-6) && replenishmentModel.number == a.ItemNum);
             //总的移库次数
             int totalCount = shipList.Count() + pickbilllist.Count();
             //平均出库次数
@@ -2734,9 +2728,25 @@ namespace Business.Replenishment
         /// <param name="itemNum"></param>
         /// <param name="month"></param>
         /// <returns></returns>
-        public decimal CalcAvgDemand(List<MonthlyShipmentPlan> list, string itemNum)
+        public decimal CalcAvgDemand(List<MonthlyShipmentPlan> list, string itemNum,int? erp_cls, List<InvTransHist> pickbilllist=null)
         {
-            return list.Where(i => i.SAPItemNumber == itemNum).Select(a => a.Qty).Average();
+            if(erp_cls!=3)
+            {
+                if(list.Where(i => i.SAPItemNumber == itemNum).Count()>0)
+                {
+                    return list.Where(i => i.SAPItemNumber == itemNum).Average(a => a.Qty);
+                }
+                return 0;
+            }else
+            {
+                var pickItemList = pickbilllist.Select(a => a.ItemNum).Distinct();
+                var sumQty = pickbilllist.Where(a => a.ItemNum == itemNum)?.Sum(a => a.QtyChange);
+                var month = pickbilllist.Where(a => a.ItemNum == itemNum)?.Select(a => a.CreateTime.Value.Month).Distinct().Count();
+                if (month == 0)
+                    return sumQty.Value;
+                else
+                    return sumQty.GetValueOrDefault()/month.Value;
+            } 
         }
         /// <summary>
         /// 
@@ -2751,13 +2761,22 @@ namespace Business.Replenishment
             return (list.Where(i => i.number == itemNum && i.zero_based_seqno > 1 - replenishmentDto.HistoryOutStockMonth && i.zero_based_seqno <= 0).Select(a => a.actual_out_qty.Value).Sum() + MQty) / (replenishmentDto.HistoryOutStockMonth + 1);
         }
 
-        public double CalcVariance(List<MonthlyShipmentPlan> list, string itemNum)
+        public double CalcVariance(List<MonthlyShipmentPlan> list, string itemNum, int? erp_cls,decimal? monthl_avg_demand, List<InvTransHist> pickbilllist = null)
         {
-            var avg = CalcAvgDemand(list, itemNum);
-            var nums = list.Where(i => i.SAPItemNumber == itemNum).Select(a => a.Qty);
-            if (nums.Count() <= 1)
-                return 0;
-            return Math.Sqrt(nums.Sum(x => Math.Pow(Convert.ToDouble(x) - Convert.ToDouble(avg), 2)) / (nums.Count() - 1));
+            if (erp_cls != 3)
+            {
+                var nums = list.Where(i => i.SAPItemNumber == itemNum).Select(a => a.Qty);
+                if (nums.Count() <= 1)
+                    return 0;
+                return Math.Sqrt(nums.Sum(x => Math.Pow(Convert.ToDouble(x) - Convert.ToDouble(monthl_avg_demand), 2)) / (nums.Count() - 1));
+            }
+            else
+            {
+                var nums = pickbilllist.Where(i => i.ItemNum == itemNum).Select(a =>a.QtyChange);
+                if (nums.Count() <= 1)
+                    return 0;
+                return Math.Sqrt(nums.Sum(x => Math.Pow(Convert.ToDouble(x) - Convert.ToDouble(monthl_avg_demand), 2)) / (nums.Count() - 1));
+            }
         }
 
         /// <summary>

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

@@ -2,14 +2,11 @@
 using Business.Core.Utilities;
 using Business.Domain;
 using Business.ResourceExamineManagement.Dto;
-using MathNet.Numerics.RootFinding;
 using MongoDB.Driver.Linq;
 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using Volo.Abp.Application.Services;
-using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
 
 namespace Business.ResourceExamineManagement
 {

+ 0 - 2
MicroServices/Business/Business.Core/Business.Core.csproj

@@ -15,8 +15,6 @@
     <PackageReference Include="NLog.Extensions.Logging" Version="5.2.2" />
     <PackageReference Include="NLog.Web.AspNetCore" Version="5.2.2" />
     <PackageReference Include="RSAExtensions" Version="1.1.1" />
-    <PackageReference Include="Spire.Barcode" Version="3.5.0" />
-    <PackageReference Include="Spire.PDF" Version="4.11.3" />
     <PackageReference Include="ThoughtWorks.QRCode" Version="1.1.0" />
     <PackageReference Include="Volo.Abp.Ddd.Domain" Version="6.0.3" />
   </ItemGroup>

+ 0 - 115
MicroServices/Business/Business.Core/Utilities/QRcodeHelper.cs

@@ -1,115 +0,0 @@
-using SharpCompress.Common;
-//using Spire.Barcode;
-using Spire.Pdf;
-using Spire.Pdf.Barcode;
-using Spire.Pdf.Graphics;
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using ThoughtWorks.QRCode.Codec;
-using static System.Formats.Asn1.AsnWriter;
-
-namespace Business.Core.Utilities
-{
-    /// <summary>
-    /// 二维码生成工具
-    /// </summary>
-    public class QRcodeHelper
-    {
-        /// <summary>
-        /// 生成二维码
-        /// </summary>
-        /// <param name="context">二维码内容</param>
-        public Image GenerateQrCode(string context)
-        {
-            //使用ThoughtWorks.QRCode.Codec生成二维码
-            QRCodeEncoder qRCode = new QRCodeEncoder();
-            qRCode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;          //编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
-            qRCode.QRCodeScale = 2;                                            //大小(值越大生成的二维码图片像素越高)-值越大,二维码图片越大
-            qRCode.QRCodeVersion = 0;                                          //版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
-            qRCode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;      //错误效验、错误更正(有4个等级)
-            qRCode.QRCodeBackgroundColor = Color.White;                        //背景色
-            qRCode.QRCodeForegroundColor = Color.Black;                        //前景色
-            System.Drawing.Bitmap bt = qRCode.Encode(context, Encoding.UTF8);
-
-            //bt.Save("二维码文件保存路径");//如果需要保存二维码,则返回文件路径即可
-            return bt;
-        }
-
-        /// <summary>
-        /// 生成条形码
-        /// </summary>
-        /// <param name="context">条形码内容</param>
-        public void GenerateBarcode(string context)
-        {
-            
-        }
-
-        /// <summary>
-        /// Pdf文档添加二维码
-        /// </summary>
-        /// <param name="filePath">文件路径</param>
-        /// <param name="context">二维码内容</param>
-        /// <param name="x">x轴偏移量</param>
-        /// <param name="y">y轴偏移量</param>
-        public void PdfAddQrCode(string filePath, string context,int x,int y)
-        {
-            PdfDocument pdf = new PdfDocument();
-            //读取文件
-            pdf.LoadFromFile(filePath);
-            PdfPageBase pb = pdf.Pages.Add();
-            pdf.Pages.Remove(pb);
-
-            //生成二维码
-            Image image = GenerateQrCode(context);
-
-            //循环每一页,绘制二维码图形到PDF
-            PdfImage pdfImage = PdfImage.FromImage(image);
-            for (int i = 0; i < pdf.Pages.Count; i++)
-            {
-                var page = pdf.Pages[i];
-                //自定义位置
-                page.Canvas.DrawImage(pdfImage, x, y);
-            }
-            //保存文档
-            pdf.SaveToFile(filePath);
-        }
-
-        /// <summary>
-        /// Pdf文档添加条形码
-        /// </summary>
-        /// <param name="filePath">文件路径</param>
-        /// <param name="context">挑衅码内容</param>
-        /// <param name="x">x轴偏移量</param>
-        /// <param name="y">y轴偏移量</param>
-        public void PdfAddBarcode(string filePath, string context, int x, int y)
-        {
-            PdfDocument pdf = new PdfDocument();
-            //读取文件
-            pdf.LoadFromFile(filePath);
-            PdfPageBase pb = pdf.Pages.Add();
-            pdf.Pages.Remove(pb);
-            //生成条形码
-            PdfCode39Barcode pdfCode = new PdfCode39Barcode(context);   //构造条形码内容
-            pdfCode.BarcodeToTextGapHeight = 2f;
-            pdfCode.TextDisplayLocation = TextLocation.Bottom;          //条形码文字位置
-            pdfCode.BarHeight = 40;                                     //高度
-            pdfCode.NarrowBarWidth = 0.5f;                              //宽度比例
-            pdfCode.TextColor = Color.Black;                            //文字颜色
-
-            //绘制条形码图形到PDF
-            for (int i = 0; i < pdf.Pages.Count; i++)
-            {
-                var page = pdf.Pages[i];
-                //自定义位置
-                pdfCode.Draw(page, new Point(x, y));
-            }
-            //保存文档
-            pdf.SaveToFile(filePath);
-        }
-
-    }
-}

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/CustMaster.cs

@@ -58,6 +58,12 @@ namespace Business.Domain
         public string CustShippingLT { get; set; }
 
         /// <summary>
+        /// 客户类别,T1,海外,国科,海王
+        /// </summary>
+        [Comment("客户类别")]
+        public string Terms { get; set; }
+
+        /// <summary>
         /// 是否有效:1-有效;0-无效
         /// </summary>
         [Comment("是否有效")]

+ 2 - 0
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdMaster.cs

@@ -140,5 +140,7 @@ namespace Business.Domain
         /// </summary>
         [Comment("流程id")]
         public long BusinessID { get; set; }
+
+        public string SalesJob { get; set; }
     }
 }

+ 1 - 1
MicroServices/Business/Business.Domain/StructuredDB/Production/WorkOrdRouting.cs

@@ -127,6 +127,6 @@ namespace Business.Domain
         /// 工单主键
         /// </summary>
         [Comment("工单主键")]
-        public int WorkOrdMasterRecID { get; set; }
+        public long WorkOrdMasterRecID { get; set; }
     }
 }

+ 1 - 7
MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentROP.cs

@@ -1,12 +1,6 @@
-using Business.Core.Attributes;
-using Microsoft.EntityFrameworkCore;
-using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.roi.encoder;
+using Microsoft.EntityFrameworkCore;
 using System;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Runtime.Intrinsics.X86;
-using ZstdSharp.Unsafe;
 
 namespace Business.Domain
 {

+ 1 - 7
MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentServiceLevel.cs

@@ -1,12 +1,6 @@
-using Business.Core.Attributes;
-using Microsoft.EntityFrameworkCore;
-using Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.roi.encoder;
+using Microsoft.EntityFrameworkCore;
 using System;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Runtime.Intrinsics.X86;
-using ZstdSharp.Unsafe;
 
 namespace Business.Domain
 {

+ 2 - 1
MicroServices/Business/Business.Domain/StructuredDB/Replenishment/ReplenishmentWeekPlan.cs

@@ -19,7 +19,8 @@ namespace Business.StructuredDB.Replenishment
         /// 排序编码(优先级)    
         /// </summary>
         [Comment("排序编码(优先级)")]
-        public int OrderNum { get; set; }
+        [Precision(18,5)]
+        public decimal Priority { get; set; }
 
         /// <summary>
         /// 市场    

+ 2 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs

@@ -274,6 +274,8 @@ namespace Business.EntityFrameworkCore
 
         public DbSet<srm_pr_main_occupy> srm_pr_main_occupy { get; set; }
 
+        public DbSet<CustMaster> CustMaster { get; set; }
+
         #endregion
 
         //Code generation...

+ 0 - 80
MicroServices/Business/Business.HttpApi/Controllers/QRcodeController.cs

@@ -1,80 +0,0 @@
-using Business.Core.Utilities;
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Volo.Abp.AspNetCore.Mvc;
-using Volo.Abp;
-using System.Drawing;
-
-namespace Business.Controllers
-{
-    /// <summary>
-    /// 二维码生成接口
-    /// </summary>
-    [RemoteService]
-    [Area("Business")]
-    [Route("api/business/codehelper")]
-    public class QRcodeController : AbpController
-    {
-        /// <summary>
-        /// 生成二维码
-        /// </summary>
-        /// <param name="context">二维码内容</param>
-        [HttpGet]
-        [Route("generate_qrcode")]
-        public Image GenerateQrCode(string context)
-        {
-            //二维码帮助类
-            QRcodeHelper qRcode = new QRcodeHelper();
-            //生成二维码
-            return qRcode.GenerateQrCode(context);
-        }
-
-        ///// <summary>
-        ///// 生成条形码
-        ///// </summary>
-        ///// <param name="context">条形码内容</param>
-        //[HttpGet]
-        //[Route("generate_barcode")]
-        //public void GenerateBarcode(string context)
-        //{
-        //    QRcodeHelper qRcode = new QRcodeHelper();
-        //    qRcode.GenerateBarcode(context);
-        //}
-
-        /// <summary>
-        /// Pdf文档添加二维码
-        /// </summary>
-        /// <param name="filePath">文件路径</param>
-        /// <param name="context">二维码内容</param>
-        /// <param name="x">x轴偏移量</param>
-        /// <param name="y">y轴偏移量</param>
-        [HttpGet]
-        [Route("pdfaddqrcode")]
-        public void PdfAddQrCode(string filePath, string context, int x, int y)
-        {
-            //二维码帮助类
-            QRcodeHelper qRcode = new QRcodeHelper();
-            //生成二维码
-            qRcode.PdfAddQrCode(filePath, context, x, y);
-        }
-
-        /// <summary>
-        /// Pdf文档添加条形码
-        /// </summary>
-        /// <param name="filePath">文件路径</param>
-        /// <param name="context">挑衅码内容</param>
-        /// <param name="x">x轴偏移量</param>
-        /// <param name="y">y轴偏移量</param>
-        [HttpGet]
-        [Route("pdfaddbarcode")]
-        public void PdfAddBarcode(string filePath, string context, int x, int y)
-        {
-            QRcodeHelper qRcode = new QRcodeHelper();
-            qRcode.PdfAddBarcode(filePath, context, x, y);
-        }
-    }
-}

+ 18 - 5
MicroServices/Business/Business.HttpApi/Controllers/ReplenishmentController.cs

@@ -39,7 +39,7 @@ namespace Business.Controllers
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet]
         [Route("calcrop")]
         public Task<string> CalcROP(InputDto input)
         {
@@ -51,7 +51,7 @@ namespace Business.Controllers
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet]
         [Route("calcweekplan")]
         public Task<string> CalcWeekPlan(InputDto input)
         {
@@ -64,13 +64,26 @@ namespace Business.Controllers
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet]
         [Route("demandanalysis")]
         public Task<string> DemandAnalysis(InputDto input)
         {
             return _ReplenishmentAppService.DemandAnalysis(input);
         }
 
+
+        /// <summary>
+        /// 计算工单优先级
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("calcpriority")]
+        public List<WorkOrdMaster> CalcPriority(List<string> workOrdMasters, string domain)
+        {
+            return _ReplenishmentAppService.CalcPriority(workOrdMasters,domain);
+        }
+
         /// <summary>
         /// 定时任务长周期物料
         /// </summary>
@@ -100,7 +113,7 @@ namespace Business.Controllers
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet]
         [Route("overalldemandplan")]
         //public Task<string> OverallDemandPlan(InputDto input)
         //{
@@ -112,7 +125,7 @@ namespace Business.Controllers
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet]
         [Route("SaveAnnualProductionOutline")]
         public Task<string> SaveAnnualProductionOutline(InputDto input)
         {

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

@@ -335,3 +335,65 @@
 {"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-11T01:46:03.7186157+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T01:46:03.7210925+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-11T01:46:03.7225617+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-11T16:18:13.3042741+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-11T16:18:13.3727712+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T16:18:13.3776679+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-11T16:18:13.3808251+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T17:04:00.2947903+08:00","EndDate":"2023-09-11T17:04:12.8478362+08:00","Msg":"任务执行成功","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-11T22:49:03.2027561+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-11T22:49:03.2681686+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T22:49:03.2731303+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-11T22:49:03.2751296+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:02:06.91418+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:02:06.9688799+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:02:06.9734762+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:02:06.9756121+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:23:19.0113638+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:23:19.0534066+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:23:19.0567879+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-11T23:23:19.0583887+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:49:20.3371746+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:49:20.3831135+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:49:20.3858364+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:49:20.3879008+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:59:55.495233+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:59:55.5572324+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:59:55.5630387+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-12T13:59:55.5647867+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-12T14:06:23.1805106+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-12T14:06:23.24576+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-12T14:06:23.2511442+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-12T14:06:23.2535015+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-12T21:44:03.1005296+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-12T21:44:03.149278+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-12T21:44:03.1522779+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-12T21:44:03.1539641+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-12T23:48:47.2799187+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-12T23:48:47.3425522+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-12T23:48:47.3483518+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-12T23:48:47.3503005+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:16:00.5338644+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:16:00.6055854+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:16:00.6105683+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:16:00.6129273+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:55:28.3535553+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:55:28.4221838+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:55:28.427632+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T00:55:28.4300913+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:01:00.1287154+08:00","EndDate":"2023-09-13T01:01:00.4653109+08:00","Msg":"任务执行成功","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:08:17.2979835+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:08:17.3514127+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:08:17.3568089+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:08:17.3589908+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:16:59.3450307+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:16:59.4149275+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:16:59.4206452+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T01:16:59.42317+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:21:21.0385152+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:21:21.1008226+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:21:21.106028+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:21:21.1084827+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步WMS物料订单等基础数据到MySQL","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:27:08.6423453+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时创建NLog日志按月分表","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:27:08.7225361+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"定时同步MySQL基础数据到MongoDB","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:27:08.7278219+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"长周期物料PR","GroupName":"systemquartzjob","BeginDate":"2023-09-13T15:27:08.7309267+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}