123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using DapperORMCore.Context.DataContext;
- using Microsoft.Extensions.Logging;
- using NXWMS.IService.NXWMS;
- using NXWMS.Model.Common;
- using WestDistance.DapperORM.Repository.Repositorys;
- namespace NXWMS.Service.NXWMS.ERP
- {
- [AutoInject(typeof(IErpSyncServer), InjectType.Scope)]
- public class ErpSyncServer : IErpSyncServer
- {
- private IERPServer _ERPServer;
- //IDataRepositoryContext _context;
- private IServiceProvider _serviceProvider;
- private ILogger<ErpSyncServer> _logger;
- public ErpSyncServer(IERPServer ERPServer, ILogger<ErpSyncServer> logger, IDataRepositoryContext dataRepositoryContext, IServiceProvider serviceProvider)
- {
- _ERPServer = ERPServer;
- _logger = logger;
- //this._context = dataRepositoryContext;
- _serviceProvider = serviceProvider;
- }
- public async Task<bool> UpdateWarehouse()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_WAREHOUSE>(_context);
- var list = await _ERPServer.GetERPWareHousesAsync();
- var src = list.ToList().ToDictionary(m => { return m.WAREHOUSE_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.WAREHOUSE_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "WAREHOUSE_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "WAREHOUSE_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw;
- }
- }
- public async Task<bool> UpdateBin()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_BIN>(_context);
- var list = await _ERPServer.GetERPERPpBinsAsync();
- var src = list.ToList().ToDictionary(m => { return m.BIN_CODE; });
- var dst = Repository.Query<DataAccess.Entity.BAS_BIN>("Select * from BAS_BIN where REGION_CODE=@regionCode", new { regionCode = "YCLK_Region" }).ToDictionary(m => { return m.BIN_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "BIN_CODE");
- }
- foreach (var key in addKey)
- {
- src[key].USED_FLAG = 1;
- src[key].REGION_CODE = "YCLK_Region";
- Repository.Add(src[key], new string[] { "BIN_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateUnit()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_UNIT>(_context);
- var list = await _ERPServer.GetERPUnitsAsync();
- var src = list.ToList().ToDictionary(m => { return m.UNIT_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.UNIT_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "UNIT_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "UNIT_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateMaterielType()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_MATERIEL_TYPE>(_context);
- var list = await _ERPServer.GetERPMaterielTypesAsync();
- var src = list.ToList().ToDictionary(m => { return m.MATERIEL_TYPE_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.MATERIEL_TYPE_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "MATERIEL_TYPE_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "MATERIEL_TYPE_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateMateriel()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_MATERIEL>(_context);
- var list = await _ERPServer.GetERPMaterielsAsync();
- var src = list.ToList().ToDictionary(m => { return m.MATERIEL_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.MATERIEL_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "MATERIEL_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "MATERIEL_ID" });
- }
- return true;
- }
- catch (Exception)
- {
- throw;
- }
- }
- public async Task<bool> UpdateSuppliers()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_SUPPLIER>(_context);
- var list = await _ERPServer.GetERPSuppliersAsync();
- var src = list.ToList().ToDictionary(m => { return m.SUPPLIER_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.SUPPLIER_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "SUPPLIER_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "SUPPLIER_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateCustomer()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.BAS_CUSTOMER>(_context);
- var list = await _ERPServer.GetERPCustomersAsync();
- var src = list.ToList().ToDictionary(m => { return m.CUSTOMER_CODE; });
- var dst = Repository.Query().ToDictionary(m => { return m.CUSTOMER_CODE; });
- //更新
- var update = src.Keys.Intersect(dst.Keys);
- var addKey = src.Keys.Except(dst.Keys);
- var deleteKey = dst.Keys.Except(src.Keys);
- foreach (var key in deleteKey)
- {
- Repository.Remove(dst[key], "CUSTOMER_CODE");
- }
- foreach (var key in addKey)
- {
- Repository.Add(src[key], new string[] { "CUSTOMER_ID" });
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateArrival(string ArrivalNo)
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- _context.BeginTran();
- try
- {
- var Repository = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL>(_context);
- var RepositoryDtl = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL_DTL>(_context);
- var arrival = Repository.Query().FirstOrDefault(m => m.ARRIVAL_NO == ArrivalNo);
- if (arrival != null)
- {
- var arrivalDtl = RepositoryDtl.Query("ARRIVAL_ID", arrival.ARRIVAL_ID.ToString()).ToList();
- var list = await _ERPServer.GetArrival(arrival.ERP_ID);
- foreach (var _arrival in list)
- {
- var (key, detail) = _arrival;
- key.ARRIVAL_ID = arrival.ARRIVAL_ID;
- Repository.Update(key, nameof(DataAccess.Entity.WMS_IN_ARRIVAL.ARRIVAL_ID));
- foreach (var item in detail)
- {
- var _localArrival = arrivalDtl.FirstOrDefault(m => m.ERP_DTL_ID == item.ERP_DTL_ID);
- if (_localArrival == null)
- {
- item.ARRIVAL_ID = arrival.ARRIVAL_ID;
- item.INSPECTION_RESULT = "OK";
- RepositoryDtl.IdentityAdd(item, nameof(DataAccess.Entity.WMS_IN_ARRIVAL_DTL.ARRIVAL_DTL_ID));
- }
- else
- {
- item.ARRIVAL_ID = arrival.ARRIVAL_ID;
- item.INSPECTION_RESULT = "OK";
- RepositoryDtl.Update(item, nameof(DataAccess.Entity.WMS_IN_ARRIVAL_DTL.ARRIVAL_DTL_ID));
- arrivalDtl.Remove(_localArrival);
- }
- }
- if (arrivalDtl.Count > 0)
- {
- foreach (var item in arrivalDtl)
- {
- RepositoryDtl.Remove(item, nameof(DataAccess.Entity.WMS_IN_ARRIVAL_DTL.ARRIVAL_DTL_ID));
- }
- }
- }
- }
- _context.Commit();
- return true;
- }
- catch (Exception err)
- {
- _context.Rollback();
- throw err;
- }
- }
- public async Task<bool> UpdateArrival()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL>(_context);
- var RepositoryDtl = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL_DTL>(_context);
- var listhas = Repository.Query().Select(m => m.ERP_ID).ToHashSet();
- var list = await _ERPServer.GetArrival();
- foreach (var (key, detail) in list)
- {
- if (listhas.Contains(key.ERP_ID))
- {
- continue;
- }
- var id = Repository.IdentityAdd(key, nameof(DataAccess.Entity.WMS_IN_ARRIVAL.ARRIVAL_ID));
- foreach (var item in detail)
- {
- item.ARRIVAL_ID = id;
- item.INSPECTION_RESULT = "OK";
- RepositoryDtl.IdentityAdd(item, nameof(DataAccess.Entity.WMS_IN_ARRIVAL_DTL.ARRIVAL_DTL_ID));
- }
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public async Task<bool> UpdateOutInvoice()
- {
- try
- {
- var _context = (IDataRepositoryContext)this._serviceProvider.GetService(typeof(IDataRepositoryContext));
- var Repository = new DataRepository<DataAccess.Entity.WMS_OUT_INVOICE>(_context);
- var RepositoryDtl = new DataRepository<DataAccess.Entity.WMS_OUT_INVOICE_DTL>(_context);
- var list = await _ERPServer.GetOutInvoice();
- foreach (var key in list.Keys)
- {
- var detail = list[key];
- var id = Repository.IdentityAdd(key, nameof(DataAccess.Entity.WMS_OUT_INVOICE.INVOICE_ID));
- foreach (var item in detail)
- {
- item.INVOICE_ID = id;
- RepositoryDtl.IdentityAdd(item, nameof(DataAccess.Entity.WMS_OUT_INVOICE_DTL.INVOICE_DTL_ID));
- }
- }
- return true;
- }
- catch (Exception err)
- {
- throw err;
- }
- }
- public void UpdateBaseInfo()
- {
- this._logger.LogInformation("ERP同步开始");
- //this.UpdateWarehouse();
- //this.UpdateMaterielType();
- //this.UpdateMateriel();
- //this.UpdateSuppliers();
- //this.UpdateCustomer();
- Task.WaitAll(this.UpdateArrival());
- this._logger.LogInformation("ERP同步结束");
- }
- }
- }
|