IcsFromERPJob
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
5.9 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using ICSSoft.FromERP.Model;
using Newtonsoft.Json;
using Quartz;
namespace ICSSoft.FromERP
{
/// <summary>
/// 客户档案(威迈)
/// </summary>
public class SyncCustomer_WeiMas
{
private static object key = new object();
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public void Execute(IJobExecutionContext context)
{
try
{
lock (key)
{
log.Info("开始……………………………………………………………………");
Execute();
log.Info("结束……………………………………………………………………");
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
public void Execute()
{
try
{
string conStr = ICSHelper.GetConnectString();
string Namespace = this.GetType().Namespace;
//string Class = this.GetType().Name;
DataTable dt = ICSHelper.GetERPDB(conStr);
foreach (DataRow dr in dt.Rows)
{
var dtNow = new DateTime(2000, 1, 1, 0, 0, 0);//默认开始时间
string erpName = ICSHelper.GetConfigString()["ERPDB"];
string TenantId = dr["TenantId"].ToString();//mes 组织
string TenantCode = dr["TenantCode"].ToString();
string ErpId = dr["ErpID"].ToString(); //erpID
string Class = this.GetType().Name + TenantCode;
erpName = string.Format(erpName, TenantId);
string sql0 = " SELECT top 1 ModifyDate FROM ICSERPTime where ClassName='" + Class + "'";
var lastDate = ICSHelper.ExecuteScalar(conStr, sql0).ToDateOrNull();
if (!lastDate.HasValue)
{
lastDate = dtNow;
}
string sql = @" select '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' as MTIME into #TempCustomer ";
sql = ICSHelper.Time(Namespace, Class, TenantId, sql, "#TempCustomer");
sql += "DROP TABLE #TempCustomer";
ICSHelper.ExecuteDate(conStr, sql);
var input = new CustomerInputDto();
input.BeginTime = lastDate.Value;
input.EndTime = new DateTime(9999, 1, 1, 0, 0, 0);
var inputObj = JsonConvert.SerializeObject(input);
string url = ICSHelper.GetConfigString()["WeiMasErpUrl"];
var result = HttpHelper.HttpClientPost<WeiMasResult<List<CustomerDto>>>(url, inputObj).Result;
if (result.IsSuccess)
{
if (result.Data.Count == 0)
{
return;
}
var insertSql = @"select
*
into #tempFromErp4Customer
from
(";
Dictionary<string, string> dics = new Dictionary<string, string>();
for (int i = 0; i < result.Data.Count; i++)
{
var item = result.Data[i];
dics.Add("CusCode", item.CusCode);
dics.Add("CusName", item.CusName);
dics.Add("CusAbbName", item.CusAbbName);
dics.Add("CusAddress", item.CusAddress);
dics.Add("CusPerson", item.CusPerson);
dics.Add("CusPhone", item.CusPhone);
dics.Add("CusEmail", item.CusEmail);
dics.Add("Mtime", item.Mtime.ToString("yyyy-MM-dd HH:mm:ss"));
dics.Add("Free1", item.Free1);
dics.Add("Free2", item.Free2);
dics.Add("Free3", item.Free3);
dics.Add("Free4", item.Free4);
if (i == 0)
{
insertSql += " select ";
}
else
{
insertSql += " union all ";
insertSql += " select ";
}
foreach (var keyValue in dics)
{
insertSql += " '" + keyValue.Value + "' as " + keyValue.Key + " , ";
}
insertSql = insertSql.TrimEnd(',');
}
insertSql += " ) a";
insertSql += @"
insert into IcsCustomer
(CusCode,CusName,CusShortName,ContactUser,ContactPhone,ContactAddress,ContactEmail,Default1,Default2,Default3,Default4
,CreationTime,CreatorUserId,CreatorUserName,TenantId)
select a.CusCode,CusAbbName,CusPerson,CusPhone,CusAddress,CusEmail, Free1,Free2,Free3,Free4
,Mtime,'job','job','{0}'
from #tempFromErp4Customer a
left join IcsCustomer b with(nolock) on a.CusCode=b.CusCode
where 1=1
and b.id is null";
insertSql = string.Format(insertSql, TenantId);
ICSHelper.ExecuteDate(conStr, insertSql);
}
else
{
throw new Exception(result.Message);
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
}
}