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.
 
 
 

231 lines
9.3 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Quartz;
namespace ICSSoft.FromERP
{
/// <summary>
/// 仓库
/// </summary>
public class ICSWarehouseList : 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 formattedDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
DataTable dt = ICSHelper.GetERPDB(conStr);
foreach (DataRow dr in dt.Rows)
{
string erpName = ICSHelper.GetConfigString()["ERPDB"];
string WorkPoint = dr["WorkPointCode"].ToString();
string Class = this.GetType().Name + WorkPoint;
erpName = string.Format(erpName, WorkPoint);
string dvURL = "";
string token = "";
List<string> lsid = new List<string>();
//获取token
token = YSHepler.GetToken();
dvURL = YSHepler.GetSELECTURL();
Dictionary<string, string> dic = new Dictionary<string, string>();
DYS dys = new DYS();
List<DYSs> ls = new List<DYSs>();
DataTable LastTime = ICSHelper.GetlastTime(conStr, Namespace, Class, WorkPoint, "", "#TempPO");
string Time = LastTime.Rows[0]["DateTime"].ToString();
dys.pageSize = 500;
dys.pageIndex = 1;
string ORG = "";
if (WorkPoint == "DE_Clean")
ORG = "1697012463846817795";
else if (WorkPoint == "DE_Clean-1")
ORG = "2143118501979095046";
else if (WorkPoint == "DE_Clean-2")
ORG = "2143119326616485897";
else if (WorkPoint == "DE_Clean-3")
ORG = "2201817055513018374";
dys.org = ORG;
dys.iUsed = "enable";
#region 添加条件
DYSs s = new DYSs();
s.field = "createTime";
s.op = "gt";
s.value1 = Convert.ToDateTime(Time).ToString("yyyy-MM-dd HH:mm:ss");
//s.value1 = "2025-04-26 00:00:00";
ls.Add(s);
#endregion
dys.simpleVOs = ls;
string JsonData = JsonConvert.SerializeObject(dys);
#region 获取列表内ID
string results = YSHepler.HttpPost(dvURL + "/yonbip/digitalModel/warehouse/list?access_token=" + token + "", JsonData, "", "POST");
JObject obj = JObject.Parse(results);
if (obj["code"].ToString() == "200")
{
List<InvLists> infos = new List<InvLists>();
infos = JsonConvert.DeserializeObject<List<InvLists>>(obj["data"]["recordList"].ToString());
infos = infos.GroupBy(p => p.id).Select(g => g.First()).ToList();
BulkInsertUsers(infos, WorkPoint);
string sqldelete = " delete ICSWMS_YS_DYSList.DBO.ICSWarehouseLists ";
ICSHelper.ExecuteDate(conStr, sqldelete);
int end = Convert.ToInt32(obj["data"]["endPageIndex"].ToString());
if (end > 1)
{
for (int i = 2; i <= end; i++)
{
dys.pageIndex = i;
JsonData = JsonConvert.SerializeObject(dys);
results = YSHepler.HttpPost(dvURL + "/yonbip/digitalModel/warehouse/list?access_token=" + token + "", JsonData, "", "POST");
obj = JObject.Parse(results);
if (obj["code"].ToString() == "200")
{
infos = new List<InvLists>();
infos = JsonConvert.DeserializeObject<List<InvLists>>(obj["data"]["recordList"].ToString());
infos = infos.GroupBy(p => p.id).Select(g => g.First()).ToList();
BulkInsertUsers(infos, WorkPoint);
sqldelete = " delete ICSWMS_YS_DYSList.DBO.ICSWarehouseLists ";
ICSHelper.ExecuteDate(conStr, sqldelete);
}
}
}
}
#endregion
string sql = "select '" + formattedDate + "' MTIME into #TempWarehouse delete ICSWMS_YS_DYSList.DBO.ICSWarehouseLists ";
sql = ICSHelper.Time(Namespace, Class, WorkPoint, sql, "#TempWarehouse");
sql += " DROP TABLE #TempWarehouse ";
sql = string.Format(sql, WorkPoint, erpName);
ICSHelper.ExecuteDate(conStr, sql);
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
public class DYS
{
public int pageIndex;
public int pageSize;
public string iUsed;
public string org;
public List<DYSs> simpleVOs;
}
public class DYSs
{
public string field;
public string op;
public string value1;
}
public class InvLists
{
public string id;
public string code;
}
static void BulkInsertUsers(List<InvLists> users, string WorkPoint)
{
try
{
string conStr = ICSHelper.GetYSString();
DataTable dataTable = new DataTable();
dataTable.Columns.Add("YSID", typeof(string));
dataTable.Columns.Add("Org", typeof(string));
dataTable.Columns.Add("OrgCode", typeof(string));
dataTable.Columns.Add("CODE", typeof(string));
dataTable.Columns.Add("ISIN", typeof(int));
string ORG = "";
if (WorkPoint == "DE_Clean")
ORG = "1697012463846817795";
else if (WorkPoint == "DE_Clean-1")
ORG = "2143118501979095046";
else if (WorkPoint == "DE_Clean-2")
ORG = "2143119326616485897";
else if (WorkPoint == "DE_Clean-3")
ORG = "2201817055513018374";
foreach (var user in users)
dataTable.Rows.Add(user.id, ORG, WorkPoint, user.code, 0);
using (SqlConnection connection = new SqlConnection(conStr))
{
connection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "ICSWarehouseLists";
bulkCopy.ColumnMappings.Add("YSID", "YSID");
bulkCopy.ColumnMappings.Add("Org", "Org");
bulkCopy.ColumnMappings.Add("OrgCode", "OrgCode");
bulkCopy.ColumnMappings.Add("CODE", "CODE");
bulkCopy.ColumnMappings.Add("ISIN", "ISIN");
bulkCopy.WriteToServer(dataTable);
}
// 执行 MERGE 操作
string mergeQuery = @"
MERGE INTO ICSWarehouseList AS Target
USING ICSWarehouseLists AS Source
ON Target.YSID = Source.YSID and Target.Org = Source.Org
WHEN MATCHED THEN
UPDATE SET Target.ISIN = 0
WHEN NOT MATCHED BY TARGET THEN
INSERT (YSID, Org, ISIN,OrgCode,CODE)
VALUES (Source.YSID, Source.Org,0, Source.OrgCode,Source.CODE);";
using (SqlCommand command = new SqlCommand(mergeQuery, connection))
{
command.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
}
}