using Business.Core.Utilities; using Business.Domain; using Business.EntityFrameworkCore; using Business.EntityFrameworkCore.SqlRepositories; using Business.ResourceExamineManagement; using Business.SystemJob; using NLog; using System; using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.MultiTenancy; namespace Business.SystemJobManagement { public class SystemJobAppService : ApplicationService, ISystemJobAppService { /// /// 物料bom /// private IRepository _mysql_ic_bom; /// /// 物料bom子表 /// private IRepository _mysql_ic_bom_child; /// /// 物料 /// private IRepository _mysql_ic_item; /// /// 供应商 /// private IRepository _mysql_srm_supplier; /// /// 物料采购报价单 /// private IRepository _mysql_srm_purchase; /// /// 物料采购报价单 /// private IRepository _mysql_crm_customer; /// /// 销售订单 /// private IRepository _mysql_crm_seorder; /// /// 销售订单明细 /// private IRepository _mysql_crm_seorderentry; /// /// 雪花算法 /// SnowFlake help = new SnowFlake(); private readonly BusinessDbContext _businessDbContext; private readonly ISqlRepository _custMaster; private readonly ISqlRepository _suppMaster; private readonly ISqlRepository _consigneeAddressMaster; private readonly ISqlRepository _itemMaster; private readonly ISqlRepository _productStructureMaster; /// /// 替代群组 /// private IRepository _mysql_ic_substitute; /// /// 物料替代多群组 /// private IRepository _mysql_ic_substitute_group; /// /// 物料替代多群组明细 /// private IRepository _mysql_ic_substitute_group_detail; /// /// 工艺路径 /// private readonly IRepository _mes_technique; private IRepository _mysql_mes_technique; /// /// 工序 /// private readonly IRepository _mes_process; private IRepository _mysql_mes_process; /// /// 工艺路径关联工序 /// private readonly IRepository _mes_tech_process; private IRepository _mysql_mes_tech_process; /// /// 生产排产 /// private readonly ProductionScheduleAppService _productionScheduleAppService; public SystemJobAppService( IRepository mysql_ic_bom, IRepository mysql_ic_bom_child, IRepository mysql_ic_item, IRepository mysql_srm_supplier, IRepository mysql_srm_purchase, IRepository mysql_crm_customer, IRepository mysql_crm_seorder, IRepository mysql_crm_seorderentry, IRepository mysql_ic_substitute, IRepository mysql_ic_substitute_group, IRepository mysql_ic_substitute_group_detail, IRepository mysql_mes_technique, IRepository mysql_mes_process, IRepository mysql_mes_tech_process, ISqlRepository custMaster, ISqlRepository suppMaster, ISqlRepository consigneeAddressMaster, ISqlRepository itemMaster, ISqlRepository productStructureMaster, IRepository mes_technique, IRepository mes_process, IRepository mes_tech_process, ProductionScheduleAppService productionScheduleAppService, 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; _mes_technique = mes_technique; _mes_process = mes_process; _mes_tech_process = mes_tech_process; _businessDbContext = businessDbContext; _itemMaster = itemMaster; _productionScheduleAppService = productionScheduleAppService; } public string SyncWMSDataToMySQLJob() { try { //SyncCustMaster(); //SyncSuppMaster(); //SyncSalesOrdMaster(); //SyncSalesOrdMasterEntry(); //SyncItemMaster(); //SyncBom(); } catch (Exception ex) { return ex.Message; } return "同步完成"; } public string LogInstallJob() { try { LogManager.Configuration.Install(new NLog.Config.InstallationContext());//每天0点执行一次 } catch (Exception ex) { return ex.Message; } return "任务执行成功"; } public async Task SyncBaseDataToMongoDBJob() { try { //物料采购报价单 List srm_purchases = _mysql_srm_purchase.GetListAsync().Result; if (srm_purchases.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var mosrm_purchase = ObjectMapper.Map, List>(srm_purchases); mosrm_purchase.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(mosrm_purchase); } //同步物料BOM明细数据 var icbom_childs = _mysql_ic_bom_child.GetListAsync().Result; if (icbom_childs.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moIcbom_childs = ObjectMapper.Map, List>(icbom_childs); moIcbom_childs.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moIcbom_childs); } //同步物料Bom数据 var icBoms = _mysql_ic_bom.GetListAsync().Result; if (icBoms.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moIcBoms = ObjectMapper.Map, List>(icBoms); moIcBoms.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moIcBoms); } //同步物料数据 var icItems = _mysql_ic_item.GetListAsync().Result; if (icItems.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moIcItems = ObjectMapper.Map, List>(icItems); moIcItems.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moIcItems); } //同步替代群组数据 var subtitutes = _mysql_ic_substitute.GetListAsync().Result; if (subtitutes.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moSubtitutes = ObjectMapper.Map, List>(subtitutes); moSubtitutes.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moSubtitutes); } //同步物料替代多群组数据 var subAlls = _mysql_ic_substitute_group.GetListAsync().Result; if (subAlls.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moSubAlls = ObjectMapper.Map, List>(subAlls); moSubAlls.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moSubAlls); } //同步物料替代多群组明细数据 var subAllDtls = _mysql_ic_substitute_group_detail.GetListAsync().Result; if (subAllDtls.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moSubAllDtls = ObjectMapper.Map, List>(subAllDtls); moSubAllDtls.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moSubAllDtls); } //同步供应商数据 var suppliers = _mysql_srm_supplier.GetListAsync().Result; if (suppliers.Count > 0) { //先清空表数据 await MongoHelper.DeleteManyAsync(p => p.mysql_id != -1); var moSuppliers = ObjectMapper.Map, List>(suppliers); moSuppliers.ForEach(s => s.GenerateNewId(help.NextId())); await MongoHelper.InsertManyAsync(moSuppliers); } } catch (Exception ex) { return ex.Message; } return "任务执行成功"; } ////同步客户 //public void SyncCustMaster() //{ // var customerList = _mysql_crm_customer.GetListAsync().Result; // List custList = _custMaster.Select(a => a.Domain == "1001" && a.IsActive); // var addressList = _consigneeAddressMaster.Select(a => a.Domain == "1001" && a.Typed == "Cust" && a.IsActive); // List ItemsAdd = new List(); // 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 custList = _suppMaster.Select(a => a.Domain == "1001" && a.IsActive); // var addressList = _consigneeAddressMaster.Select(a => a.Domain == "1001" && a.Typed == "Supp" && a.IsActive); // List ItemsAdd = new List(); // 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 ItemsAdd = new List(); //// List ItemsUpdate = new List(); //// 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 ItemsAdd = new List(); //// List ItemsUpdate = new List(); //// 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 custList = new List(); // if (isAll) // { // custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001"); // } // else // { // //格努产品编码同步子级物料 // List childItems = GetChildItemNumber("", new List()); // custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001" && childItems.Distinct().Contains(a.ItemNum)); // } // List ItemsAdd = new List(); // List srm_purchaseAdd = new List(); // 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 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 ItemsAdd = new List(); // List childItemsAdd = new List(); // 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 GetChildItemNumber(string itemNum, List 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; //} public string DoProductShceduleJob() { try { _productionScheduleAppService.DoExt(); } catch (Exception ex) { return ex.Message; } return "任务执行成功"; } } }