using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using ICSSoft.FromERP.Extension;
using ICSSoft.FromERP.Model;
using Newtonsoft.Json;
using Quartz;
namespace ICSSoft.FromERP
{
///
/// 物料档案(威迈)
///
public class SyncItem_WeiMas : IJob
{
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 dtNowBegin = new DateTime(2000, 1, 1, 0, 0, 0);//默认开始时间
var dtNow = DateTime.Now;
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 = dtNowBegin;
}
string sql = @" select '"+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' as MTIME into #TempItem ";
sql = ICSHelper.Time(Namespace, Class, TenantId, sql, "#TempItem");
sql += "DROP TABLE #TempItem";
ICSHelper.ExecuteDate(conStr, sql);
#region 获取Token
var tokenUrl = ICSHelper.GetConfigString()["WeiMasTokenUrl"]+ @"/identity/connect/token";
var inputTokenDto = new TokenInputDto();
inputTokenDto.route = "sj_token";
inputTokenDto.grant_type = "password";
inputTokenDto.client_id = ICSHelper.GetConfigString()["app_id"];
inputTokenDto.client_secret = ICSHelper.GetConfigString()["app_secret"];
inputTokenDto.timestamp = dtNow.ToMillisecondsTimeStamp();
inputTokenDto.username = "api_token";
inputTokenDto.sign = ICSHelper.ApiSign(inputTokenDto.client_id, inputTokenDto.client_secret, inputTokenDto.timestamp);
inputTokenDto.clientExplorer = "";
var tokenDto= HttpHelper.PostForm (tokenUrl, inputTokenDto).Result;
if(string.IsNullOrEmpty(tokenDto.access_token))
{
throw new Exception(" no access_token ");
}
// return;
#endregion
#region 获取子公司列表
var companyUrl = ICSHelper.GetConfigString()["WeiMasOrgUrl"] + @"/EnterpriseService/FromWeMec/GetSubCompanyList";
var companyDto = HttpHelper.HttpClientGet>>(companyUrl,"", tokenDto.access_token).Result;
if(companyDto.Data==null|| companyDto.Data.Count == 0)
{
throw new Exception(" 获取子公司列表失败 ");
}
// return;
#endregion
var input = new ItemInputDto();
input.CustomerId = companyDto.Data.First().customerId;
input.CASNo = "";
input.BeginTime = dtNowBegin.ToString("yyyy-MM-dd HH:mm:ss");
input.EndTime =dtNow.ToString("yyyy-MM-dd HH:mm:ss");
var inputObj = JsonConvert.SerializeObject(input);
string url = ICSHelper.GetConfigString()["WeiMasErpUrl"]+ @"/BasicAssistingService/FromWeMec/APIItemToMES";
var result = HttpHelper.HttpClientPost>>(url, inputObj,token: tokenDto.access_token).Result;
if (result.IsSuccess)
{
if (result.Data.Count == 0)
{
return;
}
// return;
var insertSql = @"
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempFromErp4ItemCode') and type='U')
DROP TABLE #tempFromErp4ItemCode
select
*
into #tempFromErp4ItemCode
from
(";
Dictionary dics = new Dictionary();
for (int i = 0; i < result.Data.Count; i++)
{
var item = result.Data[i];
dics.Clear();
dics.Add("ItemCode", item.ItemCode);
dics.Add("ItemName", item.ItemName);
dics.Add("ItemStd", item.ItemStd);
dics.Add("ItemDesc", item.ItemDesc);
dics.Add("ItemCasNo", item.ItemCasNo);
dics.Add("ItemMolecularFormula", item.ItemMolecularFormula);
dics.Add("ItemAttribute", item.ItemAttribute);
dics.Add("ItemMainCategoryCode", item.ItemMainCategoryCode);
dics.Add("ItemUnit", item.ItemUnit);
dics.Add("Itemmodel", item.Itemmodel);
dics.Add("GR", item.GR);
dics.Add("SGFS", item.SGFS);
dics.Add("TGFS", item.TGFS);
dics.Add("WG", item.WG);
dics.Add("NI", item.NI);
dics.Add("MA", item.MA);
dics.Add("Mtime", item.Mtime.ToString("yyyy-MM-dd HH:mm:ss"));
dics.Add("Other", item.Other);
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 IcsInventory
(ItemCode,ItemName,ItemDesc,ItemStd,ItemType,ItemControlType,ItemContype
,ItemAttribute,ItemUnit,ItemMainCategoryCode,ItemModel,ItemCasNo,ItemMolecularFormula,GR,SGFS,TGFS,WG,NI,MA,Other,Default1,Default2,Default3,Default4
,CreationTime,CreatorUserId,CreatorUserName,TenantId)
select a.ItemCode,a.ItemName,a.ItemDesc,a.ItemStd,'itemtype_finishedproduct','item_control_lot','item_control_nocontrol'
,a.ItemAttribute,a.ITEMUnit,a.ItemMainCategoryCode,a.ITEMMODEL,a.ItemCasNo,a.ItemMolecularFormula,a.GR,a.SGFS,a.TGFS,a.WG,a.NI,a.MA,a.Other,a.Free1,a.Free2,a.Free3,a.Free4
,Mtime,'job','job','{0}'
from #tempFromErp4ItemCode a
left join IcsInventory b with(nolock) on a.itemcode=b.itemcode
where 1=1
and b.id is null
update IcsInventory
set
ItemName=a.ItemName,ItemDesc=a.ItemDesc,ItemStd=a.ItemStd,ItemAttribute=a.ItemAttribute ,ITEMUnit=a.ITEMUnit,ItemMainCategoryCode=a.ItemMainCategoryCode,ITEMMODEL=a.ITEMMODEL
,ItemCasNo=a.ItemCasNo,ItemMolecularFormula=a.ItemMolecularFormula,Default1=a.Free1,Default2=a.Free2,Default3=a.Free3,Default4=a.Free4
,LastModificationTime=a.Mtime,LastModifierUserId='job',LastModifierUserName='job'
from #tempFromErp4ItemCode a
left join IcsInventory b with(nolock) on a.itemcode=b.itemcode
where 1=1
and b.Id is not null
";
insertSql = string.Format(insertSql, TenantId);
ICSHelper.ExecuteDate(conStr, insertSql);
}
else
{
throw new Exception(result.Message);
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
}
}