Jelajahi Sumber

系统定时任务改成接口的方式

Murphy 2 tahun lalu
induk
melakukan
9b7d4d63ac
17 mengubah file dengan 1084 tambahan dan 408 penghapusan
  1. 6 4
      MicroServices/Business/Business.Application.Contracts/Business.Application.Contracts.csproj
  2. 7 0
      MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/ISerialNumberAppService.cs
  3. 39 0
      MicroServices/Business/Business.Application.Contracts/SystemJob/ISystemJobAppService.cs
  4. 0 16
      MicroServices/Business/Business.Application.Contracts/Test/ITestAppService.cs
  5. 0 34
      MicroServices/Business/Business.Application/Quartz/ExtJob.cs
  6. 0 251
      MicroServices/Business/Business.Application/Quartz/ExtJobService.cs
  7. 7 7
      MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs
  8. 3 3
      MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs
  9. 1 1
      MicroServices/Business/Business.Application/SaleForecastManagement/MonthlyCapacityLoadAppService.cs
  10. 944 0
      MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs
  11. 0 9
      MicroServices/Business/Business.Host/BusinessHostModule.cs
  12. 3 0
      MicroServices/Business/Business.Host/Startup.cs
  13. 6 4
      MicroServices/Business/Business.HttpApi/Business.HttpApi.csproj
  14. 12 8
      MicroServices/Business/Business.HttpApi/Controllers/SerialNumberController.cs
  15. 56 0
      MicroServices/Business/Business.HttpApi/Controllers/SystemJobController.cs
  16. 0 60
      MicroServices/Business/Business.HttpApi/Controllers/TestController.cs
  17. 0 11
      MicroServices/Business/Business.HttpApi/Models/Test/TestModel.cs

+ 6 - 4
MicroServices/Business/Business.Application.Contracts/Business.Application.Contracts.csproj

@@ -19,6 +19,12 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="MES\**" />
+    <EmbeddedResource Remove="MES\**" />
+    <None Remove="MES\**" />
+  </ItemGroup>
+
+  <ItemGroup>
     <None Remove="Localization\Business\cs.json" />
     <None Remove="Localization\Business\en.json" />
     <None Remove="Localization\Business\zh-Hans.json" />
@@ -42,8 +48,4 @@
     <ProjectReference Include="..\Bussiness.MongoModel\Business.MongoModel.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="MES\" />
-  </ItemGroup>
-
 </Project>

+ 7 - 0
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/ISerialNumberAppService.cs

@@ -18,5 +18,12 @@ namespace Business.ResourceExamineManagement
         /// <param name="id"></param>
         /// <returns></returns>
         string GetSerialNumber(long id);
+
+        /// <summary>
+        /// 定时创建NLog日志按月分表
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string LogInstall();
     }
 }

+ 39 - 0
MicroServices/Business/Business.Application.Contracts/SystemJob/ISystemJobAppService.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Business;
+using Business.ResourceExamineManagement;
+using Business.SystemJob;
+using Volo.Abp.Application.Services;
+
+namespace Business.SystemJob
+{
+    /// <summary>
+    /// 系统定时任务
+    /// </summary>
+    public interface ISystemJobAppService : IApplicationService
+    {
+        /// <summary>
+        /// 定时同步WMS物料订单等基础数据到MySQL
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string SyncWMSDataToMySQL();
+
+        /// <summary>
+        /// 定时创建NLog日志按月分表
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string LogInstall();
+
+        /// <summary>
+        /// 定时同步MySQL基础数据到MongoDB
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string SyncBaseDataToMongoDB();
+    }
+}

+ 0 - 16
MicroServices/Business/Business.Application.Contracts/Test/ITestAppService.cs

@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Services;
-
-namespace Business.Test
-{
-    public interface ITestAppService: IApplicationService
-    {
-        Task<string> TestApi(string name);
-
-        Task<long> GetUserCount();
-
-        //Task<dynamic> GetMenuTree();
-
-    }
-}

+ 0 - 34
MicroServices/Business/Business.Application/Quartz/ExtJob.cs

@@ -1,34 +0,0 @@
-using Business.SyncDataManagement;
-using Quartz;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Business.Quartz
-{
-    public class ExtJob : IJob
-    {
-
-        /// <summary>
-        /// Nlog日志按月分表,需要每天凌晨检查是否存在表,不存在就要新建表,程序启动的时候也要检查一次。类似初始化
-        /// </summary>
-        public readonly ExtJobService _extJobService;
-
-        /// <summary>
-        /// 构造函数
-        /// </summary>
-        public ExtJob(ExtJobService extJobService)
-        {
-            _extJobService = extJobService;
-        }
-        public Task Execute(IJobExecutionContext context)
-        {
-            _extJobService.DoExt();
-
-            return Task.CompletedTask;
-        }
-    }
-}

+ 0 - 251
MicroServices/Business/Business.Application/Quartz/ExtJobService.cs

@@ -1,251 +0,0 @@
-using Business.Core.Utilities;
-using Business.EntityFrameworkCore;
-using Business.Model.Ext;
-using Business.Model.MES.IC;
-using Business.Model.SRM;
-using EFCore.BulkExtensions;
-using NLog;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Services;
-using Volo.Abp.Domain.Repositories;
-
-namespace Business.Quartz
-{
-    //处理Ext数据库表
-    public class ExtJobService: ApplicationService
-    {
-        SnowFlake help = new SnowFlake();
-        private IRepository<in_kd_material, long> _kd_material;
-        private IRepository<ic_item, long> _ic_item;
-        private IRepository<srm_purchase, long> _srm_purchase;
-        private readonly BusinessDbContext _businessDbContext;
-        private readonly BusinessExtDbContext _businessExtDbContext;
-
-        public ExtJobService(
-         IRepository<in_kd_material, long> kd_material,
-         IRepository<ic_item, long> ic_item,
-         IRepository<srm_purchase, long> srm_purchase,
-         BusinessDbContext businessDbContext,
-         BusinessExtDbContext businessExtDbContext
-         )
-        {
-            _kd_material= kd_material;
-            _ic_item= ic_item;
-            _srm_purchase = srm_purchase;
-            _businessDbContext = businessDbContext;
-            _businessExtDbContext = businessExtDbContext;
-        }
-
-        /// <summary>
-        /// 处理物料
-        /// </summary>
-        public async void DoExt()
-        {
-           await DoMaterial();
-            //DoBom();
-        }
-
-        /// <summary>
-        /// 处理物料
-        /// </summary>
-        public async Task DoMaterial()
-        {
-           var extMaterials=_kd_material.GetListAsync();
-            var ic_items = _ic_item.GetListAsync(p => p.factory_id == 10101 && p.org_id == 101 && p.tenant_id == 101);
-            var srm_purchases = _srm_purchase.GetListAsync(p => p.factory_id == 10101 && p.org_id == 101 && p.tenant_id == 101);
-
-            List<ic_item> ic_itemListAdd = new List<ic_item>();
-            List<ic_item> ic_itemListUpdate = new List<ic_item>();
-            List<srm_purchase> srm_purchaseListAdd = new List<srm_purchase>();
-            List<srm_purchase> srm_purchaseListUpdate = new List<srm_purchase>();
-            List<ext_xref> ext_xrefList = new List<ext_xref>();
-            if (extMaterials != null)
-            {
-                extMaterials.Result.ForEach(ext =>
-                {
-                    if (ic_items != null && ic_items.Result.Exists(a => a.number == ext.FNumber))
-                    {
-                        var ic_item = ic_items.Result.FirstOrDefault(a => a.number == ext.FNumber);
-                        if (ic_item != null)
-                        {
-                            ic_item.number = ext.FNumber;
-                            ic_item.name = ext.FName_2052;
-                            ic_item.model = ext.FSpecification_2052;
-                            ic_item.full_name = ext.FDescription_2052;
-                            ic_item.fms_number = ext.FOldNumber;
-                            //0.配置类 1. 2.委外加工 3.外购 4.虚拟件
-                            ic_item.erp_cls = ext.FErpClsID == "配置类" ? 0 : ext.FErpClsID == "自制" ? 1 : ext.FErpClsID == "委外" ? 2 : ext.FErpClsID == "外购" ? 3 : ext.FErpClsID == "虚拟" ? 4 : ext.FErpClsID == "费用" ? 5 : ext.FErpClsID == "服务" ? 6 : -1;
-                            ic_item.source = ext.FDataSource;
-                            ic_item.iskeyitem = ext.FIsKitting == "是" ? 1 : 0;
-                            ic_item.gross_weight = ext.FGROSSWEIGHT;
-                            ic_item.net_weight = ext.FNETWEIGHT;
-                            ic_item.maund = ext.FWEIGHTUNITID_Name;
-                            ic_item.cubic_measure = ext.FVOLUMEUNITID_Name;
-                            ic_item.length = ext.FLENGTH;
-                            ic_item.width = ext.FWIDTH;
-                            ic_item.height = ext.FHEIGHT;
-                            ic_item.size = ext.FVOLUME;
-                            ic_item.allowpur = ext.FIsPurchase == "是" ? 1 : 0;
-                            ic_item.allowsale = ext.FIsSale == "是" ? 1 : 0;
-                            ic_item.allowmanu = ext.FIsProduce == "是" ? 1 : 0;
-                            ic_item.allowout = ext.FIsSubContract == "是" ? 1 : 0;
-                            ic_item.allowbatch = ext.F_SFJLPCH == "是" ? 1 : 0;
-                            ic_item.product_line = ext.F_CPX_Name;
-                            ic_item.minpackqty = ext.FIncreaseQty;
-                            ic_item.fix_leadtime = ext.FFixLeadTime;
-                            ic_item.plan_trategy = ext.FPlanningStrategy == "MRP" ? 1 : 0;
-                            ic_item.order_trategy = ext.FOrderPolicy == "LFL(批对批)" ? 1 : 0;
-                            ic_item.order_inter_val = ext.FOrderIntervalTime;
-                            ic_item.lead_time = ext.FVarLeadTime;
-                            ic_item.bat_change_economy = ext.FVarLeadTimeLotSize;
-                            ic_item.order_point = ext.FReOrderGood;
-                            ic_item.secinv = ext.FPlanSafeStockQty;
-                            ic_itemListUpdate.Add(ic_item);
-
-                            ext_xrefList.Add(new ext_xref
-                            {
-                                dop_table_name = "ic_item",
-                                dop_id = ic_item.Id,
-                                dop_col1_name = "number",
-                                dop_col1_value = ic_item.number,
-                                other_sys_name = "kd",
-                                other_table_name = "in_kd_material",
-                                other_id = ext.Id,
-                                other_col1_name = "FNumber",
-                                other_col1_value = ext.FNumber
-                            });
-
-                            var srm_purchase = srm_purchases.Result.FirstOrDefault(a => a.icitem_id == ic_item.Id);
-                            if (srm_purchase != null)
-                            {
-                                srm_purchase.icitem_name = ic_item.name;
-                                srm_purchase.purchgroup = ext.FPurchaseGroupId_Name;
-                                srm_purchase.purcher = ext.FPurchaserId_Name;
-                                srm_purchase.purchase_unit = ext.FPurchaseUnitId_Name;
-                                srm_purchaseListUpdate.Add(srm_purchase);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        ic_item item = new ic_item(help.NextId());
-                        item.number = ext.FNumber;
-                        item.name = ext.FName_2052;
-                        item.model = ext.FSpecification_2052;
-                        item.full_name = ext.FDescription_2052;
-                        item.fms_number = ext.FOldNumber;
-                        //0.配置类 1. 2.委外加工 3.外购 4.虚拟件
-                        item.erp_cls = ext.FErpClsID == "配置类" ? 0 : ext.FErpClsID == "自制" ? 1 : ext.FErpClsID == "委外" ? 2 : ext.FErpClsID == "外购" ? 3 : ext.FErpClsID == "虚拟" ? 4 : ext.FErpClsID == "费用" ? 5 : ext.FErpClsID == "服务" ? 6 : -1;
-                        item.source = ext.FDataSource;
-                        item.iskeyitem = ext.FIsKitting == "是" ? 1 : 0;
-                        item.gross_weight = ext.FGROSSWEIGHT;
-                        item.net_weight = ext.FNETWEIGHT;
-                        item.maund = ext.FWEIGHTUNITID_Name;
-                        item.cubic_measure = ext.FVOLUMEUNITID_Name;
-                        item.length = ext.FLENGTH;
-                        item.width = ext.FWIDTH;
-                        item.height = ext.FHEIGHT;
-                        item.size = ext.FVOLUME;
-                        item.allowpur = ext.FIsPurchase == "是" ? 1 : 0;
-                        item.allowsale = ext.FIsSale == "是" ? 1 : 0;
-                        item.allowmanu = ext.FIsProduce == "是" ? 1 : 0;
-                        item.allowout = ext.FIsSubContract == "是" ? 1 : 0;
-                        item.allowbatch = ext.F_SFJLPCH == "是" ? 1 : 0;
-                        item.tenant_id = 101;//TODO
-                        item.factory_id = 10101;//TODO
-                        item.org_id = 101;//TODO
-                        item.IsDeleted = false;//TODO
-                        item.is_equipment = 0;
-                        item.item_level = 0;
-                        item.picktype = 0;
-                        item.enable_warning = 0;
-
-                        item.batch_manager = 0;
-                        item.product_line = ext.F_CPX_Name;
-                        item.production_leadtime = 0;
-                        item.stock_leadtime = 0;
-                        item.transportation_leadtime = 0;
-                        item.order_leadtime = 0;
-                        item.minpackqty = ext.FIncreaseQty;
-                        item.minorderqty = 0;
-
-                        item.fix_leadtime = ext.FFixLeadTime;
-                        item.plan_trategy = ext.FPlanningStrategy == "MRP" ? 1 : 0;
-                        item.order_trategy = ext.FOrderPolicy == "LFL(批对批)" ? 1 : 0;
-                        item.order_inter_val = ext.FOrderIntervalTime;
-                        item.lead_time = ext.FVarLeadTime;
-                        item.bat_change_economy = ext.FVarLeadTimeLotSize;
-                        item.order_point = ext.FReOrderGood;
-                        item.secinv = ext.FPlanSafeStockQty;
-
-
-                        ic_itemListAdd.Add(item);
-
-                        ext_xrefList.Add(new ext_xref
-                        {
-                            dop_table_name = "ic_item",
-                            dop_id = item.Id,
-                            dop_col1_name = "number",
-                            dop_col1_value = item.number,
-                            other_sys_name = "kd",
-                            other_table_name = "in_kd_material",
-                            other_id = ext.Id,
-                            other_col1_name = "FNumber",
-                            other_col1_value = ext.FNumber
-                        });
-
-                        srm_purchaseListAdd.Add(new srm_purchase(help.NextId())
-                        {
-                            icitem_id = item.Id,
-                            icitem_name = item.name,
-                            currency_type = ext.FCurrencyId_Name == "人民币" ? 1 : 0,//TODO
-                            tenant_id = 101,//TODO
-                            factory_id = 10101,////TODO
-                            org_id = 101,//TODO
-                            IsDeleted = false,//TODO
-                            supplier_id = 0,
-                            purchgroup = ext.FPurchaseGroupId_Name,
-                            purcher = ext.FPurchaserId_Name,
-                            purchase_unit = ext.FPurchaseUnitId_Name
-                        });
-                    }
-                });
-                if (ic_itemListAdd.Count > 0)
-                {
-                    //await _ic_item.InsertManyAsync(ic_itemListAdd);
-                    _businessDbContext.BulkInsert(ic_itemListAdd);
-                }
-                if (ic_itemListUpdate.Count > 0)
-                {
-                    //await _ic_item.UpdateManyAsync(ic_itemListUpdate);
-                    _businessDbContext.BulkUpdate(ic_itemListUpdate);
-                }
-
-                if (srm_purchaseListAdd.Count > 0)
-                {
-                    //await _ic_item_pur.InsertManyAsync(ic_item_purListAdd);
-                    _businessDbContext.BulkInsert(srm_purchaseListAdd);
-                }
-                if (srm_purchaseListUpdate.Count > 0)
-                {
-                    //await _ic_item_pur.UpdateManyAsync(ic_item_purListUpdate);
-                    _businessDbContext.BulkUpdate(srm_purchaseListUpdate);
-                }
-                if (ext_xrefList.Count > 0)
-                {
-                    //await _ext_xref.UpdateManyAsync(ext_xrefList);
-                    _businessExtDbContext.BulkInsert(ext_xrefList);
-                }
-            }
-        }
-        /// <summary>
-        /// 处理物料清单
-        /// </summary>
-        public void DoBom()
-        {
-            LogManager.Configuration.Install(new NLog.Config.InstallationContext());
-        }
-    }
-}

+ 7 - 7
MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs

@@ -153,12 +153,12 @@ namespace Business.Quartz
         /// <returns></returns>
         public async Task DoProductShcedule(List<WorkOrdMaster> workOrds)
         {
-            if (workOrds.Count() == 0)//定时任务调用时,需要获取工单数据
+            if (workOrds.Count == 0)//定时任务调用时,需要获取工单数据
             {
                 //1、获取需要排产的工单:Status为空且IsActive==1
                 workOrds = _workOrdMaster.Select(p => string.IsNullOrEmpty(p.Status) && p.IsActive);
             }
-            if (workOrds.Count() == 0)//没有工单需要排产
+            if (workOrds.Count == 0)//没有工单需要排产
             {
                 return;
             }
@@ -203,7 +203,7 @@ namespace Business.Quartz
                 List<WorkOrdRoutingDto> routingDtos = ProcPretreatment(item, workOrdRoutings.Where(p => p.WorkOrd == item.WorkOrd).ToList(), prodLines, allResults);
                 
                 //排产前的数据校验
-                if (routingDtos.Count() == 0)//没有维护主工序
+                if (routingDtos.Count == 0)//没有维护主工序
                 {
                     //记录排产异常原因
                     new NLogHelper("ProductionScheduleAppService").WriteLog("DoProductShcedule", "工单<"+ item.WorkOrd + ">的工序数据维护错误", _currentTenant.Id.ToString());
@@ -821,7 +821,7 @@ namespace Business.Quartz
             DateTime planStart = workOrd.OrdDate.GetValueOrDefault().AddDays(2);
             //取主工序(第一层级工序)
             var firsts = woRuntings.Where(p =>p.ParentOp == 0).OrderByDescending(p => p.OP).ToList();
-            if (firsts.Count() == 0)
+            if (firsts.Count == 0)
             {
                 return routingDtos;
             }
@@ -834,7 +834,7 @@ namespace Business.Quartz
             dto.ChdParentOps = new List<int>();
             //获取当前层级工序中有子级的工序集合
             var childs = woRuntings.Where(p => firsts.Select(m => m.OP).Contains(p.ParentOp)).Select(m => m.ParentOp).Distinct().ToList();
-            if (childs.Count() > 0)
+            if (childs.Count > 0)
             {
                 dto.ChdParentOps = childs;
             }
@@ -868,7 +868,7 @@ namespace Business.Quartz
         {
             //获取当前层级工序
             var curLevels = woRuntings.Where(p => preLevels.Select(m=>m.OP).Contains(p.ParentOp)).ToList();
-            if (curLevels.Count() == 0)
+            if (curLevels.Count == 0)
             {
                 return;
             }
@@ -887,7 +887,7 @@ namespace Business.Quartz
                 dto.ChdParentOps = new List<int>();
                 //获取当前层级工序中有子级的工序集合
                 var childs = woRuntings.Where(p => curLevels.Where(p => p.ParentOp == item).Select(m => m.OP).Contains(p.ParentOp)).Select(m => m.ParentOp).Distinct().ToList();
-                if (childs.Count() > 0)
+                if (childs.Count > 0)
                 {
                     dto.ChdParentOps = childs;
                 }

+ 3 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs

@@ -78,7 +78,7 @@ namespace Business.ResourceExamineManagement
             }
             //获取当前产品的工艺路线:主产线,最后一道工序
             var curRoutingOps = routingOps.Where(p => p.RoutingCode == param.ItemNum && p.ParentOp == 0).OrderByDescending(p => p.Op).ToList();
-            if (curRoutingOps.Count() == 0)
+            if (curRoutingOps.Count == 0)
             {
                 return planEnd;
             }
@@ -91,7 +91,7 @@ namespace Business.ResourceExamineManagement
             }
             //获取产线工作日历
             var curCalendars = calendarWorks.Where(p => p.ProdLine == curProdLine.Line).ToList();
-            if (curCalendars.Count() == 0 || curCalendars.Count() != 7)
+            if (curCalendars.Count == 0 || curCalendars.Count != 7)
             {
                 return planEnd;
             }
@@ -212,7 +212,7 @@ namespace Business.ResourceExamineManagement
                 //获取主线最后一道工序
                 List<PeriodSequenceDet> schedules = new List<PeriodSequenceDet>();
                 var routings = routingOps.Where(p => p.RoutingCode == item.item_number && p.ParentOp == 0).OrderBy(p=>p.Op).ToList();
-                if (routings.Count() != 0)
+                if (routings.Count != 0)
                 {
                     //获取产线
                     var prodLine = prodLines.FirstOrDefault(p => p.Part == item.item_number && p.Op == routings.Last().Op);

+ 1 - 1
MicroServices/Business/Business.Application/SaleForecastManagement/MonthlyCapacityLoadAppService.cs

@@ -162,7 +162,7 @@ namespace Business.SaleForecastManagement
                 var curLines = lines.Where(p=>p.Part == std.ItemNumber).OrderBy(p => p.Line).ToList();
                 //过滤产线
                 var distLines = curLines.Select(p => p.Line).Distinct().ToList();
-                if (distLines.Count() == 0)
+                if (distLines.Count == 0)
                 {
                     new NLogHelper("MonthlyCapacityLoadAppService").WriteLog("CapacityAnalysis", "物料【" + std.ItemNumber + "】没有维护产线数据", _currentTenant.Id.ToString());
                     return "NO|物料【" + std.ItemNumber + "】没有维护产线数据,请维护后再发布!";

+ 944 - 0
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -0,0 +1,944 @@
+using Abp.Application.Services;
+using Abp.Dependency;
+using Business.Core.MongoDBHelper;
+using Business.Core.Utilities;
+using Business.EntityFrameworkCore;
+using Business.EntityFrameworkCore.SqlRepositories;
+using Business.Model.MES.IC;
+using Business.Model.Sale;
+using Business.Model.SRM;
+using Business.Model.Tech;
+using Business.MongoModel.MES.IC;
+using Business.MongoModel.SRM;
+using Business.MongoModel.Tech;
+using Business.SystemJob;
+using EFCore.BulkExtensions;
+using NLog;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+
+namespace Business.SystemJobManagement
+{
+    public class SystemJobAppService : ApplicationService, ISystemJobAppService
+    {
+        /// <summary>
+        /// 物料bom
+        /// </summary>
+        private IRepository<ic_bom, long> _mysql_ic_bom;
+        private readonly IMongoDB<mo_ic_bom> _ic_bom;
+
+        /// <summary>
+        /// 物料bom子表
+        /// </summary>
+        private IRepository<ic_bom_child, long> _mysql_ic_bom_child;
+        private readonly IMongoDB<mo_ic_bom_child> _ic_bom_child;
+
+        /// <summary>
+        /// 物料
+        /// </summary>
+        private IRepository<ic_item, long> _mysql_ic_item;
+        private readonly IMongoDB<mo_ic_item> _ic_item;
+
+        /// <summary>
+        /// 供应商
+        /// </summary>
+        private IRepository<srm_supplier, long> _mysql_srm_supplier;
+        private readonly IMongoDB<mo_srm_supplier> _srm_supplier;
+
+        /// <summary>
+        /// 物料采购报价单
+        /// </summary>
+        private IRepository<srm_purchase, long> _mysql_srm_purchase;
+        private readonly IMongoDB<mo_srm_purchase> _srm_purchase;
+
+        /// <summary>
+        /// 物料采购报价单
+        /// </summary>
+        private IRepository<crm_customer, long> _mysql_crm_customer;
+
+        /// <summary>
+        /// 销售订单
+        /// </summary>
+        private IRepository<crm_seorder, long> _mysql_crm_seorder;
+
+        /// <summary>
+        /// 销售订单明细
+        /// </summary>
+        private IRepository<crm_seorderentry, long> _mysql_crm_seorderentry;
+
+        /// <summary>
+        /// 雪花算法
+        /// </summary>
+        SnowFlake help = new SnowFlake();
+        private readonly BusinessDbContext _businessDbContext;
+        private readonly ISqlRepository<CustMaster> _custMaster;
+        private readonly ISqlRepository<SuppMaster> _suppMaster;
+        private readonly ISqlRepository<ConsigneeAddressMaster> _consigneeAddressMaster;
+        private readonly ISqlRepository<ItemMaster> _itemMaster;
+        private readonly ISqlRepository<ProductStructureMaster> _productStructureMaster;
+
+
+
+
+        /// <summary>
+        /// 替代群组
+        /// </summary>
+        private readonly IMongoDB<mo_ic_substitute> _ic_substitute;
+        private IRepository<ic_substitute, long> _mysql_ic_substitute;
+
+        /// <summary>
+        /// 物料替代多群组
+        /// </summary>
+        private readonly IMongoDB<mo_ic_substitute_group> _ic_substitute_group;
+        private IRepository<ic_substitute_group, long> _mysql_ic_substitute_group;
+
+        /// <summary>
+        /// 物料替代多群组明细
+        /// </summary>
+        private readonly IMongoDB<mo_ic_substitute_group_detail> _ic_substitute_group_detail;
+        private IRepository<ic_substitute_group_detail, long> _mysql_ic_substitute_group_detail;
+
+        /// <summary>
+        /// 工艺路径
+        /// </summary>
+        private readonly IMongoDB<mo_mes_technique> _mes_technique;
+        private IRepository<mes_technique, long> _mysql_mes_technique;
+
+        /// <summary>
+        /// 工序
+        /// </summary>
+        private readonly IMongoDB<mo_mes_process> _mes_process;
+        private IRepository<mes_process, long> _mysql_mes_process;
+
+        /// <summary>
+        /// 工艺路径关联工序
+        /// </summary>
+        private readonly IMongoDB<mo_mes_tech_process> _mes_tech_process;
+        private IRepository<mes_tech_process, long> _mysql_mes_tech_process;
+
+        public SystemJobAppService(
+         IRepository<ic_bom, long> mysql_ic_bom,
+         IRepository<ic_bom_child, long> mysql_ic_bom_child,
+         IRepository<ic_item, long> mysql_ic_item,
+         IRepository<srm_supplier, long> mysql_srm_supplier,
+         IRepository<srm_purchase, long> mysql_srm_purchase,
+         IRepository<crm_customer, long> mysql_crm_customer,
+         IRepository<crm_seorder, long> mysql_crm_seorder,
+         IRepository<crm_seorderentry, long> mysql_crm_seorderentry,
+         IRepository<ic_substitute, long> mysql_ic_substitute,
+         IRepository<ic_substitute_group, long> mysql_ic_substitute_group,
+         IRepository<ic_substitute_group_detail, long> mysql_ic_substitute_group_detail,
+         IRepository<mes_technique, long> mysql_mes_technique,
+         IRepository<mes_process, long> mysql_mes_process,
+         IRepository<mes_tech_process, long> mysql_mes_tech_process,
+         ISqlRepository<CustMaster> custMaster,
+         ISqlRepository<SuppMaster> suppMaster,
+         ISqlRepository<ConsigneeAddressMaster> consigneeAddressMaster,
+         ISqlRepository<ItemMaster> itemMaster,
+         ISqlRepository<ProductStructureMaster> productStructureMaster,
+         IMongoDB<mo_ic_bom> ic_bom,
+         IMongoDB<mo_ic_bom_child> ic_bom_child,
+         IMongoDB<mo_ic_item> ic_item,
+         IMongoDB<mo_ic_substitute> ic_substitute,
+         IMongoDB<mo_ic_substitute_group> ic_substitute_group,
+         IMongoDB<mo_ic_substitute_group_detail> ic_substitute_group_detail,
+         IMongoDB<mo_srm_supplier> srm_supplier,
+         IMongoDB<mo_mes_technique> mes_technique,
+         IMongoDB<mo_mes_process> mes_process,
+         IMongoDB<mo_mes_tech_process> mes_tech_process,
+         IMongoDB<mo_srm_purchase> srm_purchase,
+         BusinessDbContext businessDbContext
+         )
+        {
+            _mysql_ic_bom = mysql_ic_bom;
+            _mysql_ic_bom_child = mysql_ic_bom_child;
+            _mysql_ic_item = mysql_ic_item;
+            _mysql_srm_supplier = mysql_srm_supplier;
+            _mysql_srm_purchase = mysql_srm_purchase;
+            _mysql_crm_customer = mysql_crm_customer;
+            _mysql_crm_seorder = mysql_crm_seorder;
+            _mysql_crm_seorderentry = mysql_crm_seorderentry;
+            _mysql_ic_substitute = mysql_ic_substitute;
+            _mysql_ic_substitute_group = mysql_ic_substitute_group;
+            _mysql_ic_substitute_group_detail = mysql_ic_substitute_group_detail;
+            _mysql_mes_technique = mysql_mes_technique;
+            _mysql_mes_process = mysql_mes_process;
+            _mysql_mes_tech_process = mysql_mes_tech_process;
+            _custMaster = custMaster;
+            _suppMaster = suppMaster;
+            _consigneeAddressMaster = consigneeAddressMaster;
+            _itemMaster = itemMaster;
+            _productStructureMaster = productStructureMaster;
+            _ic_bom = ic_bom;
+            _ic_bom_child = ic_bom_child;
+            _ic_item = ic_item;
+            _ic_substitute = ic_substitute;
+            _ic_substitute_group = ic_substitute_group;
+            _ic_substitute_group_detail = ic_substitute_group_detail;
+            _srm_supplier = srm_supplier;
+            _mes_technique = mes_technique;
+            _mes_process = mes_process;
+            _mes_tech_process = mes_tech_process;
+            _srm_purchase = srm_purchase;
+            _businessDbContext = businessDbContext;
+        }
+
+        public string SyncWMSDataToMySQL()
+        {
+            try
+            {
+                //SyncCustMaster();
+                //SyncSuppMaster();
+                //SyncSalesOrdMaster();
+                //SyncSalesOrdMasterEntry();
+                //SyncItemMaster();
+                //SyncBom();
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+            return "同步完成";
+        }
+
+        public string LogInstall()
+        {
+            try
+            {
+                LogManager.Configuration.Install(new NLog.Config.InstallationContext());//每天0点执行一次
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+            return "任务执行成功";
+
+        }
+
+        public string SyncBaseDataToMongoDB()
+        {
+            try
+            {
+                //物料采购报价单
+                //var srm_purchase = _mysql_srm_purchase.GetListAsync().Result;
+                //if (srm_purchase.Count > 0)
+                //{
+                //    //先清空表数据
+                //    _srm_purchase.Delete(p => p.mysql_id != -1);
+                //    List<mo_srm_purchase> mosrm_purchase = ObjectMapper.Map<List<srm_purchase>, List<mo_srm_purchase>>(srm_purchase);
+                //    mosrm_purchase.ForEach(s => s.id = help.NextId());
+                //    _srm_purchase.InsertMany(mosrm_purchase);
+                //}
+                /*//同步物料BOM明细数据
+                var icbom_childs = _mysql_ic_bom_child.GetListAsync().Result;
+                if (icbom_childs.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_bom_child.Delete(p => p.mysql_id != -1);
+                    var moIcbom_childs = ObjectMapper.Map<List<ic_bom_child>, List<mo_ic_bom_child>>(icbom_childs);
+                    moIcbom_childs.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_bom_child.InsertMany(moIcbom_childs);
+                }*/
+
+                /*//同步物料Bom数据
+                var icBoms = _mysql_ic_bom.GetListAsync().Result;
+                if (icBoms.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_bom.Delete(p => p.mysql_id != -1);
+                    var moIcBoms = ObjectMapper.Map<List<ic_bom>, List<mo_ic_bom>>(icBoms);
+                    moIcBoms.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_bom.InsertMany(moIcBoms);
+                }
+
+                //同步物料BOM明细数据
+                var icbom_childs = _mysql_ic_bom_child.GetListAsync().Result;
+                if (icbom_childs.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_bom_child.Delete(p => p.mysql_id != -1);
+                    var moIcbom_childs = ObjectMapper.Map<List<ic_bom_child>, List<mo_ic_bom_child>>(icbom_childs);
+                    moIcbom_childs.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_bom_child.InsertMany(moIcbom_childs);
+                }
+
+                ////工厂物料明细表
+                //var ic_factory_details = _mysql_ic_factory_details.GetListAsync().Result;
+                //if (ic_factory_details.Count > 0)
+                //{
+                //    //先清空表数据
+                //    await _ic_factory_details.Delete(p => p.mysql_id != -1);
+                //    var moIc_factory_details = ObjectMapper.Map<List<ic_factory_details>, List<mo_ic_factory_details>>(ic_factory_details);
+                //    moIc_factory_details.ForEach(s => s.id = help.NextId());
+                //    await _ic_factory_details.InsertMany(moIc_factory_details);
+                //}
+
+                //同步物料数据
+                var icItems = _mysql_ic_item.GetListAsync().Result;
+                if (icItems.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_item.Delete(p => p.mysql_id != -1);
+                    var moIcItems = ObjectMapper.Map<List<ic_item>, List<mo_ic_item>>(icItems);
+                    moIcItems.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_item.InsertMany(moIcItems);
+                }
+
+                //同步替代群组数据
+                var subtitutes = _mysql_ic_substitute.GetListAsync().Result;
+                if (subtitutes.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_substitute.Delete(p => p.mysql_id != -1);
+                    var moSubtitutes = ObjectMapper.Map<List<ic_substitute>, List<mo_ic_substitute>>(subtitutes);
+                    moSubtitutes.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_substitute.InsertMany(moSubtitutes);
+                }
+
+                //同步物料替代多群组数据
+                var subAlls = _mysql_ic_substitute_group.GetListAsync().Result;
+                if (subAlls.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_substitute_group.Delete(p => p.mysql_id != -1);
+                    var moSubAlls = ObjectMapper.Map<List<ic_substitute_group>, List<mo_ic_substitute_group>>(subAlls);
+                    moSubAlls.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_substitute_group.InsertMany(moSubAlls);
+                }
+
+                //同步物料替代多群组明细数据
+                var subAllDtls = _mysql_ic_substitute_group_detail.GetListAsync().Result;
+                if (subAllDtls.Count > 0)
+                {
+                    //先清空表数据
+                    await _ic_substitute_group_detail.Delete(p => p.mysql_id != -1);
+                    var moSubAllDtls = ObjectMapper.Map<List<ic_substitute_group_detail>, List<mo_ic_substitute_group_detail>>(subAllDtls);
+                    moSubAllDtls.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _ic_substitute_group_detail.InsertMany(moSubAllDtls);
+                }
+
+                //同步供应商数据
+                var suppliers = _mysql_srm_supplier.GetListAsync().Result;
+                if (suppliers.Count > 0)
+                {
+                    //先清空表数据
+                    await _srm_supplier.Delete(p => p.mysql_id != -1);
+                    var moSuppliers = ObjectMapper.Map<List<srm_supplier>, List<mo_srm_supplier>>(suppliers);
+                    moSuppliers.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _srm_supplier.InsertMany(moSuppliers);
+                }
+
+                //同步工艺路径数据
+                var techs = _mysql_mes_technique.GetListAsync().Result;
+                if (techs.Count > 0)
+                {
+                    //先清空表数据
+                    await _mes_technique.Delete(p => p.mysql_id != -1);
+                    var moTechs = ObjectMapper.Map<List<mes_technique>, List<mo_mes_technique>>(techs);
+                    moTechs.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _mes_technique.InsertMany(moTechs);
+                }
+
+                //同步工序数据
+                var processes = _mysql_mes_process.GetListAsync().Result;
+                if (suppliers.Count > 0)
+                {
+                    //先清空表数据
+                    await _mes_process.Delete(p => p.mysql_id != -1);
+                    var moProcesses = ObjectMapper.Map<List<mes_process>, List<mo_mes_process>>(processes);
+                    moProcesses.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _mes_process.InsertMany(moProcesses);
+                }
+
+                //同步工艺关联工序数据
+                var tech_procs = _mysql_mes_tech_process.GetListAsync().Result;
+                if (tech_procs.Count > 0)
+                {
+                    //先清空表数据
+                    await _mes_tech_process.Delete(p => p.mysql_id != -1);
+                    var moTech_procs = ObjectMapper.Map<List<mes_tech_process>, List<mo_mes_tech_process>>(tech_procs);
+                    moTech_procs.ForEach(s => s.id = help.NextId());
+                    //插入数据
+                    await _mes_tech_process.InsertMany(moTech_procs);
+                }
+
+
+                ////物料采购计划表
+                //var ic_plan = _mysql_ic_plan.GetListAsync().Result;
+                //if (ic_plan.Count > 0)
+                //{
+                //    //先清空表数据
+                //    await _ic_plan.Delete(p => p.mysql_id != -1);
+                //    var moIc_plan = ObjectMapper.Map<List<ic_plan>, List<mo_ic_plan>>(ic_plan);
+                //    moIc_plan.ForEach(s => s.id = help.NextId());
+                //    await _ic_plan.InsertMany(moIc_plan);
+                //}
+
+                //物料采购报价单
+                var srm_purchase = _mysql_srm_purchase.GetListAsync().Result;
+                if (srm_purchase.Count > 0)
+                {
+                    //先清空表数据
+                    await _srm_purchase.Delete(p => p.mysql_id != -1);
+                    var mosrm_purchase = ObjectMapper.Map<List<srm_purchase>, List<mo_srm_purchase>>(srm_purchase);
+                    mosrm_purchase.ForEach(s => s.id = help.NextId());
+                    await _srm_purchase.InsertMany(mosrm_purchase);
+                }*/
+
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+            return "任务执行成功";
+        }
+
+        ////同步客户
+        //public void SyncCustMaster()
+        //{
+        //    var customerList = _mysql_crm_customer.GetListAsync().Result;
+        //    List<CustMaster> custList = _custMaster.Select(a => a.Domain == "1001" && a.IsActive);
+        //    var addressList = _consigneeAddressMaster.Select(a => a.Domain == "1001" && a.Typed == "Cust" && a.IsActive);
+        //    List<crm_customer> ItemsAdd = new List<crm_customer>();
+        //    if (custList != null && custList.Count > 0)
+        //    {
+        //        for (int i = 0; i < custList.Count; i++)
+        //        {
+        //            long domain = Convert.ToInt64(custList[i].Domain);
+        //            long factory_id = domain % 1000;
+        //            long tenant_id = domain - factory_id;
+        //            var cust = customerList.Find(x => x.customer_no == custList[i].Cust && x.tenant_id == 1000 && x.factory_id == 1001);
+        //            if (cust is null)
+        //            {
+        //                ConsigneeAddressMaster address = addressList.Find(a => a.Address == custList[i].Cust);
+        //                var customer = new crm_customer
+        //                {
+        //                    customer_no = custList[i].Cust,
+        //                    customer_name = address is null ? address.Name : "",
+        //                    telephone = address is null ? address.Telephone : "",
+        //                    email = address is null ? address.AttentionEmail : "",
+        //                    contact = address is null ? address.Attention1 : "",
+        //                    post_code = address is null ? address.Post : "",
+        //                    country = address is null ? address.Country : "",
+        //                    province = address is null ? address.State : "",
+        //                    city = address is null ? address.City : "",
+        //                    region = address is null ? address.State : "",
+        //                    address = address is null ? address.Address1 : "",
+        //                    short_name = custList[i].SortName,
+        //                    carrying_aos = Convert.ToInt32(custList[i].CustShippingLT),
+        //                    currency = custList[i].Curr,
+        //                    employee_name = custList[i].Salesperson1,
+        //                    factory_id = 1001,
+        //                    tenant_id = 1000
+        //                };
+        //                customer.GenerateNewId(help.NextId());
+        //                ItemsAdd.Add(customer);
+        //            }
+        //        }
+        //        _businessDbContext.BulkInsert(ItemsAdd);
+        //    }
+        //}
+
+        ////同步供应商
+        //public void SyncSuppMaster()
+        //{
+        //    var suppList = _mysql_srm_supplier.GetListAsync().Result;
+        //    List<SuppMaster> custList = _suppMaster.Select(a => a.Domain == "1001" && a.IsActive);
+        //    var addressList = _consigneeAddressMaster.Select(a => a.Domain == "1001" && a.Typed == "Supp" && a.IsActive);
+        //    List<srm_supplier> ItemsAdd = new List<srm_supplier>();
+        //    if (custList != null && custList.Count > 0)
+        //    {
+        //        for (int i = 0; i < custList.Count; i++)
+        //        {
+        //            long domain = Convert.ToInt64(custList[i].Domain.ToString());
+        //            long factory_id = domain % 1000;
+        //            long tenant_id = domain - factory_id;
+        //            var supp = suppList.Find(x => x.supplier_no == custList[i].Supp.ToString() && x.tenant_id == factory_id && x.factory_id == tenant_id);
+        //            if (supp is null)
+        //            {
+        //                ConsigneeAddressMaster address = addressList.Find(a => a.Address == custList[i].Supp);
+        //                var supplier = new srm_supplier
+        //                {
+        //                    supplier_no = custList[i].Supp,
+        //                    supplier_name = address is null ? address.Name : "",
+        //                    supplier_short_name = custList[i].SortName,
+        //                    country = address is null ? address.Country : "",
+        //                    state = address is null ? address.State : "",
+        //                    region = address is null ? address.City : "",
+        //                    contact = address is null ? address.Attention1 : "",
+        //                    telephone = address is null ? address.Telephone : "",
+        //                    post_code = address is null ? address.Post : "",
+        //                    email = address is null ? address.AttentionEmail : "",
+        //                    currency = custList[i].Curr,
+        //                    supply_type = custList[i].Type,
+        //                    settlement = custList[i].CrTerms,
+        //                    factory_id = factory_id,
+        //                    tenant_id = tenant_id
+        //                };
+        //                supplier.GenerateNewId(help.NextId());
+        //                ItemsAdd.Add(supplier);
+        //            }
+        //        }
+        //        _businessDbContext.BulkInsert(ItemsAdd);
+        //    }
+        //}
+        //////同步销售订单
+        ////public void SyncSalesOrdMaster()
+        ////{
+        ////    var customerList = _mysql_crm_customer.GetListAsync().Result;
+        ////    var saleOrderList = _mysql_crm_seorder.GetListAsync().Result;
+        ////    var ItemMasterDS = _repository.SelectDataBaseBySql("SELECT A.SalesOrd,C.SortName AS CustomName,A.SoldTo AS Cust,A.OrdDate,A.RequiredDate,A.Sequence,A.Curr,A.ExchRate,A.Salesperson1,A.Project,B.Descr AS ProjectName,A.[Domain] from SalesOrdMaster A INNER JOIN CustMaster C ON A.SoldTo=C.Cust and A.[Domain]=C.[Domain]\r\nLEFT JOIN ProjectMaster B On A.Project=B.Project AND A.[Domain]=B.[Domain] ", "SalesOrdMaster");
+        ////    List<crm_seorder> ItemsAdd = new List<crm_seorder>();
+        ////    List<crm_seorder> ItemsUpdate = new List<crm_seorder>();
+        ////    if (ItemMasterDS != null && ItemMasterDS.Tables.Count > 0 && ItemMasterDS.Tables[0].Rows.Count > 0)
+        ////    {
+        ////        for (int i = 0; i < ItemMasterDS.Tables[0].Rows.Count; i++)
+        ////        {
+        ////            long domain = Convert.ToInt64(ItemMasterDS.Tables[0].Rows[i]["Domain"].ToString());
+        ////            long factory_id = domain % 1000;
+        ////            long tenant_id = domain - factory_id;
+        ////            var custno = ItemMasterDS.Tables[0].Rows[i]["Cust"].ToString();
+        ////            var cust = customerList.Find(a => a.customer_no == custno && a.factory_id == factory_id && a.tenant_id == tenant_id);
+        ////            long? custom_id = cust is null ? cust.Id : null;
+        ////            var saleorder = saleOrderList.Find(x => x.bill_no == ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString() && x.tenant_id == factory_id && x.factory_id == tenant_id);
+        ////            if (saleorder is null)
+        ////            {
+        ////                var order = new crm_seorder
+        ////                {
+        ////                    bill_no = ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString(),
+        ////                    custom_id = custom_id,
+        ////                    custom_name = ItemMasterDS.Tables[0].Rows[i]["CustomName"].ToString(),
+        ////                    custom_no = ItemMasterDS.Tables[0].Rows[i]["Cust"].ToString(),
+        ////                    //custom_level = ItemMasterDS.Tables[0].Rows[i]["PurMfg"].ToString() == "P" ? "外购" : "自制",
+        ////                    date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                    rdate = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["RequiredDate"],
+        ////                    //urgent = "",
+        ////                    currency = ItemMasterDS.Tables[0].Rows[i]["Curr"].ToString() == "RMB" ? 1 : 0,
+        ////                    exchange_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                    //biller = ItemMasterDS.Tables[0].Rows[i]["NetWeightUM"].ToString(),
+        ////                    //emp_no = (decimal)ItemMasterDS.Tables[0].Rows[i]["Length"],
+        ////                    emp_name = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    //auditor = (decimal)ItemMasterDS.Tables[0].Rows[i]["Height"],
+        ////                    //audit_date = ItemMasterDS.Tables[0].Rows[i]["PurMfg"].ToString() == "P" ? 1 : 0,
+        ////                    //status = 1,
+        ////                    //closed = "",
+        ////                    //op_time = 1,
+        ////                    bill_from = "",
+        ////                    //project_name = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["LotSerialControl"]) == true ? 1 : 0,
+        ////                    //project_code = "",
+        ////                    out_stock_type = 1,//TODO
+        ////                    //sale_dept_id = "",
+        ////                    //sale_dept_name = 1,
+        ////                    //sale_dept_code = 1,
+        ////                    //create_dept = 1
+        ////                    factory_id = factory_id,
+        ////                    tenant_id = tenant_id
+        ////                };
+        ////                order.GenerateNewId();
+        ////                ItemsAdd.Add(order);
+        ////            }
+        ////            else
+        ////            {
+        ////                saleorder.bill_no = ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString();
+        ////                saleorder.custom_id = custom_id;
+        ////                saleorder.custom_name = ItemMasterDS.Tables[0].Rows[i]["CustomName"].ToString();
+        ////                saleorder.custom_no = ItemMasterDS.Tables[0].Rows[i]["Cust"].ToString();
+        ////                //custom_level = ItemMasterDS.Tables[0].Rows[i]["PurMfg"].ToString() == "P" ? "外购" : "自制",
+        ////                saleorder.date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"];
+        ////                saleorder.rdate = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["RequiredDate"];
+        ////                saleorder.urgent = (int?)ItemMasterDS.Tables[0].Rows[i]["Sequence"];
+        ////                saleorder.currency = ItemMasterDS.Tables[0].Rows[i]["Curr"].ToString() == "RMB" ? 1 : 0;
+        ////                saleorder.exchange_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"];
+        ////                //biller = ItemMasterDS.Tables[0].Rows[i]["NetWeightUM"].ToString(),
+        ////                //emp_no = (decimal)ItemMasterDS.Tables[0].Rows[i]["Length"],
+        ////                saleorder.emp_name = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString();
+        ////                //auditor = (decimal)ItemMasterDS.Tables[0].Rows[i]["Height"],
+        ////                //audit_date = ItemMasterDS.Tables[0].Rows[i]["PurMfg"].ToString() == "P" ? 1 : 0,
+        ////                //status = 1,
+        ////                //closed = "",
+        ////                //op_time = 1,
+        ////                saleorder.bill_from = "";
+        ////                saleorder.project_name = ItemMasterDS.Tables[0].Rows[i]["ProjectName"].ToString();
+        ////                saleorder.project_code = ItemMasterDS.Tables[0].Rows[i]["Project"].ToString();
+        ////                saleorder.out_stock_type = 1;//TODO
+        ////                //sale_dept_id = "",
+        ////                //sale_dept_name = 1,
+        ////                //sale_dept_code = 1,
+        ////                //create_dept = 1
+        ////                ItemsUpdate.Add(saleorder);
+        ////            }
+        ////        }
+        ////        //_businessDbContext.crm_seorder.Delete();
+        ////        _businessDbContext.crm_seorder.BulkInsert(ItemsAdd);
+        ////        _businessDbContext.crm_seorder.BulkUpdate(ItemsUpdate);
+        ////    }
+        ////}
+
+        //////同步销售订单明细
+        ////public void SyncSalesOrdMasterEntry()
+        ////{
+        ////    var saleOrderEntryList = _mysql_crm_seorderentry.GetListAsync().Result;
+        ////    var saleOrderList = _mysql_crm_seorder.GetListAsync().Result;
+        ////    var ItemMasterDS = _repository.SelectDataBaseBySql("SELECT A.SalesOrd,A.Line,C.Descr,C.Descr1,A.ItemNum,A.UM,A.QtyOrded,A.Price,A.Disc,A.RequiredDate,A.Remark,B.CustPO,A.CustItem,A.Status,A.QtyShipped,A.QtyReturned,B.Contract,A.Domain from SalesOrdDetail A INNER JOIN SalesOrdMaster B On A.SalesOrd=B.SalesOrd and A.[Domain]=B.[Domain] INNER JOIN ItemMaster C on A.ItemNum=C.ItemNum and A.[Domain]=C.[Domain]", "SalesOrdDetail");
+        ////    List<crm_seorderentry> ItemsAdd = new List<crm_seorderentry>();
+        ////    List<crm_seorderentry> ItemsUpdate = new List<crm_seorderentry>();
+        ////    if (ItemMasterDS != null && ItemMasterDS.Tables.Count > 0 && ItemMasterDS.Tables[0].Rows.Count > 0)
+        ////    {
+        ////        for (int i = 0; i < ItemMasterDS.Tables[0].Rows.Count; i++)
+        ////        {
+        ////            long domain = Convert.ToInt64(ItemMasterDS.Tables[0].Rows[i]["Domain"].ToString());
+        ////            long factory_id = domain % 1000;
+        ////            long tenant_id = domain - factory_id;
+        ////            var bill_no = ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString();
+        ////            var seorder = saleOrderList.Find(a => a.bill_no == bill_no && a.factory_id == factory_id && a.tenant_id == tenant_id);
+        ////            long? seorder_id = seorder is null ? seorder.Id : null;
+        ////            var saleorderentry = saleOrderEntryList.Find(x => x.bill_no == bill_no && x.tenant_id == factory_id && x.factory_id == tenant_id);
+        ////            if (saleorderentry is null)
+        ////            {
+        ////                var entry = new crm_seorderentry
+        ////                {
+        ////                    seorder_id = seorder_id,
+        ////                    bill_no = ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString(),
+        ////                    entry_seq = (int?)ItemMasterDS.Tables[0].Rows[i]["Line"],
+        ////                    item_number = ItemMasterDS.Tables[0].Rows[i]["ItemNum"].ToString(),
+        ////                    item_name = ItemMasterDS.Tables[0].Rows[i]["Descr"].ToString(),
+        ////                    specification = ItemMasterDS.Tables[0].Rows[i]["Descr1"].ToString(),
+        ////                    //urgent = (int?)ItemMasterDS.Tables[0].Rows[i]["PLPriority"],
+        ////                    bom_number = ItemMasterDS.Tables[0].Rows[i]["ItemNum"].ToString(),
+        ////                    unit = ItemMasterDS.Tables[0].Rows[i]["UM"].ToString(),
+        ////                    qty = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyOrded"],
+        ////                    //price = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Price"],
+        ////                    //tax_price = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                    //tax_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                    amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Price"],
+        ////                    //discount_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                    discount_amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Disc"],
+        ////                    //total_amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                    plan_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["RequiredDate"],
+        ////                    //date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                    //planner_name = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    //planner_no = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    remark = ItemMasterDS.Tables[0].Rows[i]["Remark"].ToString(),
+        ////                    //soure_bill_no = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    custom_order_bill_no = ItemMasterDS.Tables[0].Rows[i]["CustPO"].ToString(),
+        ////                    //custom_order_entryid = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    //sys_capacity_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                    //adjust_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                    //mrp_closed = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                    custom_order_itemno = ItemMasterDS.Tables[0].Rows[i]["CustItem"].ToString(),
+        ////                    state = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["Status"]),//TODO
+        ////                    deliver_count = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyShipped"],
+        ////                    returned_count = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyReturned"],
+        ////                    //se_reject_reason = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    //out_stock_type = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                    //is_checked = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                    //sys_material_date = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                    contract_no = ItemMasterDS.Tables[0].Rows[i]["Contract"].ToString(),
+        ////                    //create_dept = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"])
+        ////                    factory_id = factory_id,
+        ////                    tenant_id = tenant_id
+        ////                };
+        ////                entry.GenerateNewId();
+        ////                ItemsAdd.Add(entry);
+        ////            }
+        ////            else
+        ////            {
+        ////                saleorderentry.seorder_id = seorder_id;
+        ////                saleorderentry.bill_no = ItemMasterDS.Tables[0].Rows[i]["SalesOrd"].ToString();
+        ////                saleorderentry.entry_seq = (int?)ItemMasterDS.Tables[0].Rows[i]["Line"];
+        ////                saleorderentry.item_number = ItemMasterDS.Tables[0].Rows[i]["ItemNum"].ToString();
+        ////                saleorderentry.item_name = ItemMasterDS.Tables[0].Rows[i]["Descr"].ToString();
+        ////                saleorderentry.specification = ItemMasterDS.Tables[0].Rows[i]["Descr1"].ToString();
+        ////                //urgent = (int?)ItemMasterDS.Tables[0].Rows[i]["PLPriority"],
+        ////                saleorderentry.bom_number = ItemMasterDS.Tables[0].Rows[i]["ItemNum"].ToString();
+        ////                saleorderentry.unit = ItemMasterDS.Tables[0].Rows[i]["UM"].ToString();
+        ////                saleorderentry.qty = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyOrded"];
+        ////                //price = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Price"],
+        ////                //tax_price = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                //tax_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                saleorderentry.amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Price"];
+        ////                //discount_rate = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                saleorderentry.discount_amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["Disc"];
+        ////                //total_amount = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                saleorderentry.plan_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["RequiredDate"];
+        ////                //date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                //planner_name = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                //planner_no = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                saleorderentry.remark = ItemMasterDS.Tables[0].Rows[i]["Remark"].ToString();
+        ////                //soure_bill_no = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                saleorderentry.custom_order_bill_no = ItemMasterDS.Tables[0].Rows[i]["CustPO"].ToString();
+        ////                //custom_order_entryid = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                //sys_capacity_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                //adjust_date = (DateTime?)ItemMasterDS.Tables[0].Rows[i]["OrdDate"],
+        ////                //mrp_closed = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                saleorderentry.custom_order_itemno = ItemMasterDS.Tables[0].Rows[i]["CustItem"].ToString();
+        ////                saleorderentry.state = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["Status"]);//TODO
+        ////                //rnumber = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                //deliver_notice_count = (decimal?)ItemMasterDS.Tables[0].Rows[i]["ExchRate"],
+        ////                saleorderentry.deliver_count = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyShipped"];
+        ////                saleorderentry.returned_count = (decimal?)ItemMasterDS.Tables[0].Rows[i]["QtyReturned"];
+        ////                //se_reject_reason = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                //out_stock_type = ItemMasterDS.Tables[0].Rows[i]["Salesperson1"].ToString(),
+        ////                //is_checked = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                //sys_material_date = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"]),
+        ////                saleorderentry.contract_no = ItemMasterDS.Tables[0].Rows[i]["Contract"].ToString();
+        ////                //create_dept = Convert.ToBoolean(ItemMasterDS.Tables[0].Rows[i]["OrdDate"])
+        ////                ItemsUpdate.Add(saleorderentry);
+        ////            }
+        ////        }
+        ////        //_businessDbContext.crm_seorder.Delete();
+        ////        _businessDbContext.crm_seorderentry.BulkInsert(ItemsAdd);
+        ////        _businessDbContext.crm_seorderentry.BulkUpdate(ItemsUpdate);
+
+        ////    }
+        ////}
+
+        ////同步物料
+        //public void SyncItemMaster()
+        //{
+        //    bool isAll = true;//是否同步所有物料
+        //    var ic_itemList = _mysql_ic_item.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001).Result;
+        //    List<ItemMaster> custList = new List<ItemMaster>();
+        //    if (isAll)
+        //    {
+        //        custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001");
+        //    }
+        //    else
+        //    {
+        //        //格努产品编码同步子级物料
+        //        List<string> childItems = GetChildItemNumber("", new List<string>());
+        //        custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001" && childItems.Distinct().Contains(a.ItemNum));
+        //    }
+        //    List<ic_item> ItemsAdd = new List<ic_item>();
+        //    List<srm_purchase> srm_purchaseAdd = new List<srm_purchase>();
+        //    if (custList != null && custList.Count > 0)
+        //    {
+        //        for (int i = 0; i < custList.Count; i++)
+        //        {
+        //            var ic_item = ic_itemList.Find(x => x.number == custList[i].ItemNum && x.tenant_id == 1000 && x.factory_id == 1001);
+        //            if (ic_item == null)
+        //            {
+        //                long itemId = help.NextId();
+        //                ItemsAdd.Add(new ic_item(itemId)
+        //                {
+        //                    number = custList[i].ItemNum, //物料编码
+        //                    name = custList[i].Descr, //物料名称
+        //                    model = custList[i].Descr1,//规格型号
+        //                    fversion = "",//版本号
+        //                    //ext.FErpClsID == "配置类" ? 0 : ext.FErpClsID == "自制" ? 1 : ext.FErpClsID == "委外" ? 2 : ext.FErpClsID == "外购" ? 3 : ext.FErpClsID == "虚拟" ? 4 : ext.FErpClsID == "费用" ? 5 : ext.FErpClsID == "服务" ? 6 : -1;
+        //                    //erp_cls = custList[i].PurMfg == "P" ? 3 : 1,//物料属性
+        //                    erp_cls = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? 1 : 3,
+        //                    //erp_cls_name = custList[i].PurMfg == "P" ? "外购" : "自制",//物料属性名称
+        //                    erp_cls_name = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? "自制" : "外购",
+        //                    unit = custList[i].UM,//单位
+        //                    item_level = 0,//物料等级
+        //                    source = "",//来源
+        //                    iskeyitem = custList[i].IsMainMas ? 1 : 0,//是否关键件
+        //                    net_weight = (decimal)custList[i].NetWeight,//净重
+        //                    maund = custList[i].NetWeightUM,//重量单位
+        //                    length = (decimal)custList[i].Length,//长度
+        //                    width = (decimal)custList[i].Width,//宽度
+        //                    height = (decimal)custList[i].Height,//高度
+        //                    allowpur = custList[i].PurMfg == "P" ? 1 : 0,//允许采购
+        //                    allowsale = 1,//允许销售
+        //                    allowmanu = custList[i].PurMfg == "L" ? 1 : 0,//允许生产
+        //                    allowout = 1,//允许委外
+        //                    allowbatch = custList[i].LotSerialControl ? 1 : 0,//批号管理
+        //                    allowserial = custList[i].LotSerialControl ? 1 : 0,//序列号管理
+        //                    photo = "",//图片
+        //                    enable_warning = 1,//启用预警
+        //                    factory_id = 1001,
+        //                    tenant_id = 1000,
+        //                    IsDeleted = false,
+
+
+        //                    batch_manager = custList[i].LotSerialControl ? 1 : 0,
+        //                    minorderqty = custList[i].MinOrd,
+        //                    minpackqty = 1,
+        //                    ordissu_days = 1,
+        //                    transportation_leadtime = 3,
+        //                    stock_leadtime = 1,
+        //                    production_leadtime = 4,
+        //                    order_leadtime = 4,
+
+        //                    fix_leadtime = 1,
+        //                    order_inter_val = 1,
+        //                    lead_time = 1,
+        //                    bat_change_economy = 1,
+        //                    total_tqq = 1,
+        //                    order_point = 1,
+        //                    secinv = 1,
+        //                    secinv_ratio = 1,
+        //                    self_inspection_date = 1,
+        //                    Warehousing_date = 1,
+        //                    Shipping_date = 3,
+        //                });
+        //                srm_purchaseAdd.Add(new srm_purchase(help.NextId())
+        //                {
+        //                    icitem_id = itemId,
+        //                    icitem_name = custList[i].Descr,
+        //                    sourcelist_number = "HYQD12064",
+        //                    supplier_id = 10101000051,
+        //                    supplier_number = "",
+        //                    supplier_name = "广州市伟正金属构件有限公司",
+        //                    purchgroup = "",
+        //                    purcher = "",
+        //                    purchase_unit = "",
+        //                    netpurchase_price = 1,
+        //                    taxrate = 0.13m,
+        //                    currency_type = 1,
+        //                    order_rector_name = "",
+        //                    order_rector_num = "",
+        //                    factory_code = "",
+        //                    order_dept = "",
+        //                    order_price = 13,
+        //                    sale_price = 130,
+        //                    qty_min = 10,
+        //                    batch_append_qty = 10,
+        //                    factory_id = 1001,
+        //                    tenant_id = 1000,
+        //                    IsDeleted = false
+        //                });
+        //            }
+        //        }
+        //    }
+        //    _businessDbContext.BulkInsert(ItemsAdd);
+        //    _businessDbContext.BulkInsert(srm_purchaseAdd);
+        //}
+
+        //public void SyncBom()
+        //{
+        //    var ic_bomList = _mysql_ic_bom.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001).Result;
+        //    var ic_itemList = _mysql_ic_item.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001).Result;
+        //    var ic_bomchildList = _mysql_ic_bom_child.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001 && (a.bom_number == "1.SD1.D.0056-F" || a.bom_number == "1.ZC1.D.0001" || a.bom_number == "1.BW1.D.0030")).Result;
+        //    List<ProductStructureMaster> wmsBomList = _productStructureMaster.Select(a => a.Domain == "1001" && (a.ParentItem == "1.SD1.D.0056-F" || a.ParentItem == "1.ZC1.D.0001" || a.ParentItem == "1.BW1.D.0030") && a.IsActive);
+        //    List<ic_bom> ItemsAdd = new List<ic_bom>();
+        //    List<ic_bom_child> childItemsAdd = new List<ic_bom_child>();
+        //    if (wmsBomList != null && wmsBomList.Count > 0)
+        //    {
+        //        var ItemMasterDS = wmsBomList.Select(a => a.ParentItem).Distinct().ToList();
+        //        foreach (var c in ItemMasterDS)
+        //        {
+        //            var icbom = ic_bomList.Find(x => x.item_number == c && x.tenant_id == 1000 && x.factory_id == 1001);
+        //            var ItemList = wmsBomList.Where(a => a.ParentItem == c);
+        //            var item = ic_itemList.Find(a => a.number == c);
+        //            if (item == null)
+        //            {
+        //                continue;
+        //            }
+        //            if (icbom == null)
+        //            {
+        //                long domain = Convert.ToInt64(ItemList.First().Domain);
+        //                long factory_id = domain % 1000;
+        //                long tenant_id = domain - factory_id;
+        //                var bom = new ic_bom(help.NextId())
+        //                {
+        //                    bom_number = c,
+        //                    icitem_id = item.Id,
+        //                    item_name = item.name,
+        //                    item_number = c,
+        //                    version = ItemList.First().Refs,
+        //                    factory_id = 1001,
+        //                    tenant_id = 1000,
+        //                    IsDeleted = false,
+        //                    use_status = 1
+        //                };
+        //                ItemsAdd.Add(bom);
+        //                foreach (var child in ItemList)
+        //                {
+        //                    var itemchild = ic_itemList.Find(a => a.number == child.ComponentItem);
+        //                    if (itemchild == null) { continue; }
+        //                    var bomchild = new ic_bom_child(help.NextId())
+        //                    {
+        //                        bom_id = bom.Id,
+        //                        bom_number = bom.bom_number,
+        //                        icitem_id = itemchild == null ? long.MinValue : itemchild.Id,
+        //                        item_number = child.ComponentItem,
+        //                        item_name = itemchild == null ? "" : itemchild.name,
+        //                        unit = child.UM,
+        //                        qty = child.Qty,
+        //                        entryid = child.SequenceNum,
+        //                        erp_cls = itemchild == null ? 2 : itemchild.erp_cls,
+        //                        begin_day = child.StartEff,
+        //                        end_day = child.EndEff,
+        //                        child_num = child.SequenceNum,
+        //                        version = child.Refs,
+        //                        factory_id = 1001,
+        //                        tenant_id = 1000,
+        //                        IsDeleted = false,
+        //                        use_status = 1
+        //                    };
+        //                    childItemsAdd.Add(bomchild);
+        //                }
+        //            }
+        //            else
+        //            {
+        //                foreach (var child in ItemList)
+        //                {
+        //                    var itemchild = ic_itemList.Find(a => a.number == child.ComponentItem);
+        //                    if (itemchild == null) { continue; }
+        //                    var icbomchild = ic_bomchildList.Find(s => s.bom_number == c && s.item_number == child.ComponentItem);
+        //                    if (icbomchild == null)
+        //                    {
+        //                        var bomchild = new ic_bom_child(help.NextId())
+        //                        {
+        //                            bom_id = icbom.Id,
+        //                            bom_number = icbom.bom_number,
+        //                            icitem_id = itemchild == null ? long.MinValue : itemchild.Id,
+        //                            item_number = child.ComponentItem,
+        //                            item_name = itemchild == null ? "" : itemchild.name,
+        //                            unit = child.UM,
+        //                            qty = child.Qty,
+        //                            entryid = child.SequenceNum,
+        //                            erp_cls = itemchild == null ? 2 : itemchild.erp_cls,
+        //                            begin_day = child.StartEff,
+        //                            end_day = child.EndEff,
+        //                            child_num = child.SequenceNum,
+        //                            version = child.Refs,
+        //                            factory_id = 1001,
+        //                            tenant_id = 1000,
+        //                            IsDeleted = false,
+        //                            use_status = 1
+        //                        };
+        //                        childItemsAdd.Add(bomchild);
+        //                    }
+        //                }
+        //            }
+
+
+        //        }
+        //        _businessDbContext.BulkInsert(ItemsAdd);
+        //        _businessDbContext.BulkInsert(childItemsAdd);
+        //    }
+        //}
+
+        ////循环获取子级物料编码,包括产品本身,有重复的结果去重即可
+        //public List<string> GetChildItemNumber(string itemNum, List<string> list)
+        //{
+        //    list.Add(itemNum);
+        //    var productStructures = _productStructureMaster.Select(p => p.ParentItem == itemNum && p.Domain == "1001" && p.IsActive);
+        //    list.AddRange(productStructures.Select(a => a.ComponentItem));
+        //    foreach (var item in productStructures)
+        //    {
+        //        if (item.StructureType.ToUpper() == "X")
+        //        {
+        //            GetChildItemNumber(item.ComponentItem, list);
+        //        }
+        //    }
+        //    return list;
+        //}
+    }
+}

+ 0 - 9
MicroServices/Business/Business.Host/BusinessHostModule.cs

@@ -130,15 +130,6 @@ namespace Business
                     .WithCronSchedule("0 01 01 * * ?")
                     .WithDescription("定时创建NLog日志按月分表"));
 
-                //var ExtJobKey = new JobKey("ExtJob");
-                //q.AddJob<ExtJob>(opts => opts.WithIdentity(ExtJobKey));
-
-                //q.AddTrigger(opts => opts
-                //    .ForJob(ExtJobKey)
-                //    .WithIdentity("ExtJob-trigger")
-                //    .WithCronSchedule("0 01 01 * * ?")
-                //    .WithDescription("定时处理金蝶同步到Ext数据库的数据"));
-
                 var WMSJobKey = new JobKey("WMSJob");
                 q.AddJob<WMSJob>(opts => opts.WithIdentity(WMSJobKey));
 

+ 3 - 0
MicroServices/Business/Business.Host/Startup.cs

@@ -1,6 +1,8 @@
 using Business.Core.MongoDBHelper;
 using Business.EntityFrameworkCore.SqlRepositories;
 using Business.Quartz;
+using Business.SystemJob;
+using Business.SystemJobManagement;
 using GZY.Quartz.MUI.Extensions;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
@@ -19,6 +21,7 @@ namespace Business
             services.AddScoped(typeof(ISqlRepository<>), typeof(SqlRepository<>));
             services.AddScoped<Config>();
             services.AddScoped<LogHostedService>();
+            services.AddScoped(typeof(ISystemJobAppService), typeof(SystemJobAppService));
             services.AddScoped<GZY.Quartz.MUI.Areas.MyFeature.Pages.MainModel>();
         }
 

+ 6 - 4
MicroServices/Business/Business.HttpApi/Business.HttpApi.csproj

@@ -15,6 +15,12 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="Controllers\MES\**" />
+    <EmbeddedResource Remove="Controllers\MES\**" />
+    <None Remove="Controllers\MES\**" />
+  </ItemGroup>
+
+  <ItemGroup>
     <PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="6.0.3" />
     <PackageReference Include="XCZ.FlowManagement.HttpApi" Version="1.3.0" />
     <PackageReference Include="XCZ.FormManagement.HttpApi" Version="2.3.0" />
@@ -24,8 +30,4 @@
     <ProjectReference Include="..\Business.Application.Contracts\Business.Application.Contracts.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Controllers\MES\" />
-  </ItemGroup>
-
 </Project>

+ 12 - 8
MicroServices/Business/Business.HttpApi/Controllers/SerialNumberController.cs

@@ -1,14 +1,7 @@
-using Business.Core.Utilities;
-using Business.ResourceExamineManagement;
+using Business.ResourceExamineManagement;
 using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Volo.Abp;
 using Volo.Abp.AspNetCore.Mvc;
-using static Business.Permissions.BusinessPermissions;
 
 namespace Business.Controllers
 {
@@ -36,5 +29,16 @@ namespace Business.Controllers
         {
             return _SerialNumberAppService.GetSerialNumber(id);
         }
+
+        /// <summary>
+        /// 定时创建NLog日志按月分表
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("loginstall")]
+        public string LogInstall()
+        {
+            return _SerialNumberAppService.LogInstall();
+        }
     }
 }

+ 56 - 0
MicroServices/Business/Business.HttpApi/Controllers/SystemJobController.cs

@@ -0,0 +1,56 @@
+using Business.SystemJob;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.AspNetCore.Mvc;
+
+namespace Business.Controllers
+{
+    /// <summary>
+    /// 系统定时任务接口
+    /// </summary>
+    [RemoteService]
+    [Area("Business")]
+    [Route("api/business/systemquartzjob")]
+    public class SystemJobController : AbpController
+    {
+        private readonly ISystemJobAppService _SystemJobAppService;
+
+        public SystemJobController(ISystemJobAppService SystemJobAppService)
+        {
+            _SystemJobAppService = SystemJobAppService;
+        }
+
+        /// <summary>
+        /// 定时同步WMS物料订单等基础数据到MySQL
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("syncwmsdatatomysql")]
+        public string SyncWMSDataToMySQL()
+        {
+            return _SystemJobAppService.SyncWMSDataToMySQL();
+        }
+
+        /// <summary>
+        /// 定时创建NLog日志按月分表
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("loginstall")]
+        public string LogInstall()
+        {
+            return _SystemJobAppService.LogInstall();
+        }
+
+        /// <summary>
+        /// 定时同步MySQL基础数据到MongoDB
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("syncbasedatatomongodb")]
+        public string SyncBaseDataToMongoDB()
+        {
+            return _SystemJobAppService.SyncBaseDataToMongoDB();
+        }
+    }
+}

+ 0 - 60
MicroServices/Business/Business.HttpApi/Controllers/TestController.cs

@@ -1,60 +0,0 @@
-using Business.Core.Utilities;
-using Business.Test;
-using Microsoft.AspNetCore.Mvc;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Threading.Tasks;
-
-namespace Business.Controllers
-{
-    [Area("business")]
-    [Route("api/business/test")]
-    public class TestController: BusinessController
-    {
-        private readonly ITestAppService _testAppService;
-
-        public TestController(ITestAppService testAppService)
-        {
-            _testAppService = testAppService;
-        }
-
-        [HttpGet]
-        public async Task<string> GetAsync(string str)
-        {
-            return await _testAppService.TestApi(str);
-        }
-
-        [HttpGet]
-        [Route("classes")]
-        public List<string> GetClasses()
-        {
-            var theList = Assembly.GetExecutingAssembly().GetTypes()
-                      .Where(t => t.Namespace == "Business.Models.Test")
-                      .ToList();
-
-            foreach (var the in theList)
-            {
-                var type = the.GetProperties();
-            }
-
-            return null;
-        }
-
-        [HttpGet]
-        [Route("user-count")]
-        public Task<long> GetUserCount()
-        {
-            NLogHelper.Default.WriteLog("TestController", "默认logger","");
-            new NLogHelper("TestController").WriteLog("TestController", "自定义logger","");
-            return _testAppService.GetUserCount();
-        }
-
-        //[HttpGet]
-        //[Route("menu-tree")]
-        //public Task<dynamic> GetMenuTree()
-        //{
-        //    return _testAppService.GetMenuTree();
-        //}
-    }
-}

+ 0 - 11
MicroServices/Business/Business.HttpApi/Models/Test/TestModel.cs

@@ -1,11 +0,0 @@
-using System;
-
-namespace Business.Models.Test
-{
-    public class TestModel
-    {
-        public string Name { get; set; }
-
-        public DateTime BirthDate { get; set; }
-    }
-}