Files
lserp_cs_6.0/其他程序/SynchronousOven/Form1.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

920 lines
47 KiB
C#

using Lskj.Control;
using Lskj.Core;
using Lskj.Data;
//using Lskj.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using static SynchronousOven.NewEmp;
namespace SynchronousOven
{
public partial class Form1 : Form
{
/// <summary>
/// ini文件内段落名
/// </summary>
public bool RunAutomatically = false;
/// <summary>
/// ini文件内段落名
/// </summary>
public string company = "烤箱同步工具";
/// <summary>
/// 初始时间间隔
/// </summary>
int second = 30;
/// <summary>
/// IP,端口,请求路径
/// </summary>
public string IP = "110.185.210.70";
public string port = "8881";
public System.Threading.Thread thread = null;
public System.Timers.Timer timer1 = new System.Timers.Timer();
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
txtSeverId.Text = Lskj.Util.IniHelper.Read("Setting.ini", company, "serverName");
txtDataBase.Text = Lskj.Util.IniHelper.Read("Setting.ini", company, "dbName");
txtName.Text = Lskj.Util.IniHelper.Read("Setting.ini", company, "user");
txtPassword.Text = Lskj.Util.IniHelper.Read("Setting.ini", company, "password");
txtTimeInterval.Text = Lskj.Util.IniHelper.Read("Setting.ini", company, "interval");
//txtSeverId.Text = IniUtil.IniReadValue(company, "serverName");
//txtDataBase.Text = IniUtil.IniReadValue(company, "dbName");
//txtName.Text = IniUtil.IniReadValue(company, "user");
//txtPassword.Text = IniUtil.IniReadValue(company, "password");
//txtTimeInterval.Text = IniUtil.IniReadValue(company, "interval");
if (string.IsNullOrEmpty(txtTimeInterval.Text)) txtTimeInterval.Text = "30";
txtTimeInterval.LostFocus += new EventHandler(txtTimeInterval_LostFocus);
this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
//数据都有的话就自动启动
if (!string.IsNullOrWhiteSpace(txtSeverId.Text) && !string.IsNullOrWhiteSpace(txtDataBase.Text) && !string.IsNullOrWhiteSpace(txtName.Text) && !string.IsNullOrWhiteSpace(txtPassword.Text) && !string.IsNullOrWhiteSpace(txtTimeInterval.Text))
{
RunAutomatically = Lskj.Util.IniHelper.Read("Setting.ini", company, "RunAutomatically").Equals("1");
if (RunAutomatically)
{
this.btnBegin_Click(null, null);
}
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (thread != null)
{
thread.Abort();
}
this.Dispose();
this.Close();
}
/// <summary>
/// 时间间隔TextBox失去焦点事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtTimeInterval_LostFocus(object sender, EventArgs e)
{
string checkStr = txtTimeInterval.Text.ToString();
if (string.IsNullOrEmpty(checkStr)) txtTimeInterval.Text = "30";
int check = Convert.ToInt32(txtTimeInterval.Text.ToString());
if (check < 30)
{
txtTimeInterval.Text = "30";
}
second = Convert.ToInt32(txtTimeInterval.Text.ToString());
IniUtil.IniWriteValue(company, "interval", txtTimeInterval.Text.ToString());
}
//开始同步
private void btnBegin_Click(object sender, EventArgs e)
{
if (thread == null)
{
thread = new System.Threading.Thread(StartMethod);
thread.Start();
}
}
//同步事件
private void StartMethod()
{
try
{
if (ConnectServer())
{
//判断数据库是否有该配置列
DataTable DT = SqlHelper.ExecuteDataTable("select name from syscolumns where id=object_id('mrp_WorkTaskListTab') and name='SyncFlag'");
bool flag = DT.Rows.Count > 0;
if (!flag)
{
MessageBox.Show("同步失败,原因:数据库内无同步标识列!");
return;
}
timer1.Interval = second * 1000;
RefreshLogUIThread("开始同步");
SynchronizeWorkOrder();
SynchronizeStatus();
SynchronousMachiningParameter();
SynchronizePersonnelInformation();
RefreshLogUIThread("同步完成");
timer1.Enabled = true;
this.timer1.Start();
}
else
{
thread = null;
}
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format("失败.原因:{0}.\r\n", ex.Message));
}
}
//private void RefreshTemperature()
//{
// Thread thread = new Thread(DatabaseMonitoring);
// thread.IsBackground = true;
// thread.Start();
//}
///// <summary>
///// timer2事件
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//private void timer2_Tick(object sender, EventArgs e)
//{
// RefreshTemperature();
//}
/// <summary>
/// timer事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
ReClearLogUIThread();//清除内容
SynchronizeWorkOrder();
SynchronizeStatus();
SynchronousMachiningParameter();
SynchronizePersonnelInformation();
timer1.Enabled = true;
}
/// <summary>
///温度同步
/// </summary>
//public void DatabaseMonitoring()
//{
// string sqlValue = "select * from p_sbhottab";
// DataTable dt = SqlHelper.ExecuteDataTable(sqlValue);
// string url = "http://110.185.210.70:8881/business/receive/findEquipmentSetData?jtBillNo=";
// foreach (DataRow row in dt.Rows)
// {
// if (string.IsNullOrEmpty(row["sbhot"].ToString()) || row["sbhot"].ToString().Equals("0.00"))
// {
// url = "http://110.185.210.70:8881/business/receive/findEquipmentSetData?jtBillNo=";
// url += row["sbno"];
// ResponseMode mode = NewEmp.GetUrl(url);
// if (mode!=null&&0 == mode.ret)
// {
// string temp = mode.data.temp;
// sqlValue = string.Format("update p_sbhottab set sbhot='{0}' where sbno='{1}'", temp, row["sbno"].ToString());
// SqlHelper.ExecuteNonQuery(sqlValue);
// }
// else
// {
// string errorMsg = mode != null ? mode.msg : "未知原因.";
// RefreshLogUIThread(DateTime.Now + string.Format(" 维修状态,信息读取失败,错误原因:{0}.\r\n", errorMsg));
// }
// }
// }
//}
/// <summary>
/// 同步事件 人员账号信息
/// </summary>
private void SynchronizePersonnelInformation()
{
//现在用户信息表里的信息
string sqlValue = "select isnull(LoginAccount,'') as LoginAccount,isnull(Password,'') as Password,isnull(p_emp_status,'') as p_emp_status,isnull(EmployeeName,'') as EmployeeName,isnull(p_emp_linkphone,'') as p_emp_linkphone,isnull(p_emp_email,'') as p_emp_email from P_EmployeeTab";
DataTable dt = SqlHelper.ExecuteDataTable(sqlValue);
sqlValue = "select isnull(LoginAccount,'') as LoginAccount,isnull(UseFlag,0) as UseFlag from P_EmployeeTab";
DataTable useFlagTab = SqlHelper.ExecuteDataTable(sqlValue);
//人员信息对照表
sqlValue = "select * from P_EmployeeTab_temp";
DataTable lastimportDt = SqlHelper.ExecuteDataTable(sqlValue);
//有差别的数据 差集
DataTable changeContent = dt.Clone();
IEnumerable<DataRow> QCJ = dt.Select().AsEnumerable().Except(lastimportDt.Select().AsEnumerable(), DataRowComparer.Default);
try
{
DataTable jg = QCJ.CopyToDataTable();
changeContent = jg;
//sqlValue = "select LoginAccount,Password,p_emp_status,EmployeeName,p_emp_linkphone,p_emp_email from P_EmployeeTab where LoginAccount='09998'";
//changeContent = SqlHelper.ExecuteDataTable(sqlValue);
}
catch (System.InvalidOperationException ex) //如果差集为null,就回进当前报错
{
changeContent = dt.Clone();
}
finally
{
//更改表格列名
changeContent.Columns["LoginAccount"].ColumnName = "userName";
changeContent.Columns["Password"].ColumnName = "password";
changeContent.Columns["p_emp_status"].ColumnName = "status";
changeContent.Columns["EmployeeName"].ColumnName = "trueName";
changeContent.Columns["p_emp_linkphone"].ColumnName = "phone";
changeContent.Columns["p_emp_email"].ColumnName = "email";
}
string tokenName = "09998";
string token = GetToken();
try
{
foreach (DataRow item in changeContent.Rows)
{
string statusStr = item["status"] + "";
//判断更改状态
string loginAccount = item["userName"] + "";
DataTable selectTab = SqlHelper.ExecuteDataTable(string.Format("select * from P_EmployeeTab_temp where LoginAccount='{0}'", loginAccount));
if (selectTab.Rows.Count == 0)
{
item["status"] = "1";
}
else
{
string useFlag = useFlagTab.Select(string.Format("LoginAccount='{0}'", loginAccount))[0]["UseFlag"] + "";
DataRow selectRow = selectTab.Rows[0];
if ((item["status"] + "").Equals("离职") || useFlag.Equals("0") || useFlag.Equals(""))
{
item["status"] = "3";
}
else
{
item["status"] = "2";
}
}
if (!string.IsNullOrWhiteSpace(token))
{
string jsonObj = JsonUtil.ToJsonObject(item);
newResponseMode newmode = ExecutePost(tokenName, token, jsonObj);
//修改对比表数据
sqlValue = string.Format(@"if(select 1 from P_EmployeeTab_temp where LoginAccount='{0}')=1
begin
update P_EmployeeTab_temp set Password = '{1}', p_emp_status = '{2}',EmployeeName='{3}',p_emp_linkphone='{4}',p_emp_email='{5}' where LoginAccount='{0}';
end else
begin
insert into P_EmployeeTab_temp(LoginAccount,Password,p_emp_status,EmployeeName,p_emp_linkphone,p_emp_email) values('{0}', '{1}', '{2}','{3}','{4}','{5}')
end
", item["userName"], item["password"], statusStr, item["trueName"], item["phone"], item["email"]);
SqlHelper.ExecuteNonQuery(sqlValue);
}
}
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format(" 人员账号信息,信息读取失败.\r\n" + " 原因:" + ex.Message + Environment.NewLine));
}
RefreshLogUIThread(DateTime.Now + "人员账号信息 同步完成.\r\n");
RefreshLogUIThread("--------------------分割线------------------------\r\n");
}
private newResponseMode ExecutePost(string tokenName, string token, string jsonStr, int num = 0)
{
string url = "http://110.185.210.70:8881/auth/sys/users/thirdPlatformData?userDb=ditoo&username={0}&token={1}";
url = string.Format(url, tokenName, token);
string jsonObj = jsonStr;
string newDeljson = jsonObj.Substring(1, jsonObj.Length - 2);
newResponseMode newmode = NewEmp.newPostMethodToObj(url, newDeljson);
if (newmode.msg.Equals("token验证失败,请重新登录!"))
{
if (num < 10)
{
num += 1;
token = GetToken();
newmode = ExecutePost(tokenName, token, jsonStr, num);
}
else
{
return newmode;
}
}
return newmode;
}
private string GetToken()
{
string token = string.Empty;
string tokenUrl = "http://110.185.210.70:8881/auth/sys/users/thirdPlatformData/login?userDb=ditoo";//获得令牌
string tokenSqlStr = "select isnull(LoginAccount,'') as LoginAccount,isnull(Password,'') as Password,isnull(p_emp_status,'') as p_emp_status,isnull(EmployeeName,'') as EmployeeName,isnull(p_emp_linkphone,'') as p_emp_linkphone,isnull(p_emp_email,'') as p_emp_email from P_EmployeeTab where LoginAccount='09998'";
DataTable tokenTab = SqlHelper.ExecuteDataTable(tokenSqlStr);
DataRow tokenRow = null;
if (tokenTab.Rows.Count > 0)
{
tokenRow = tokenTab.Rows[0];
}
if (tokenRow != null)
{
string tokenName = tokenRow["LoginAccount"] + "";
string tokenPassWord = tokenRow["Password"] + "";
string tokenJson = string.Format("\"userName\":\"{0}\",\"password\":\"{1}\"", tokenName, tokenPassWord);//sbs@4433 item["password"] + ""
tokenJson = "{" + tokenJson + "}";
newResponseMode mode = NewEmp.newPostMethodToObj(tokenUrl, tokenJson);
if (mode.data != null)
{
token = mode.data.token;
}
}
return token;
}
/// <summary>
/// 同步事件 维修状态
/// </summary>
private void SynchronizeStatus()
{
//当前最新的维修状态信息
string sqlValue = @"
select sbnumber as 'jtBillNo',isrepair,COALESCE((
select top 1 Ema_wx_wxman
from EMA_WxMaintab a left
join p_departmenttab b on a.Ema_wx_departmentid = b.Departmentid
where 1 = 1
and isnull(Ema_wx_Affirmer, 0) <> 0
and ISNULL(Ema_wx_stepcode, '') > 100 and Ema_wx_sbnumber = sbnumber order by Ema_wx_operatedate desc
) ,'')as 'ema_wx_wxman',
COALESCE((
select top 1 case when Ema_wx_receiveflag=1 then '维修中'
when Ema_wx_receiveflag=2 then '完工'
when Ema_wx_receiveflag=3 then '暂停'
else '未开工' end
from EMA_WxMaintab a left
join p_departmenttab b on a.Ema_wx_departmentid = b.Departmentid
where 1 = 1
and isnull(Ema_wx_Affirmer, 0) <> 0
and ISNULL(Ema_wx_stepcode, '') > 100 and Ema_wx_sbnumber = sbnumber order by Ema_wx_operatedate desc
) ,'')as 'stateOfRepair'
from(select a.*
,case when sbnumber in (select Ema_wx_sbnumber from EMA_WxMaintab where Ema_wx_receiveflag = 1) then '是'
else '' end as isrepair
,case when sbnumber in (select ema_sbnumber from EMA_stopTab where ema_type = '停用' ) then '停用'
when sbnumber in (select ema_pst_number from EMA_ScrapTab ) then '报废'
when sbnumber in (select Ema_wx_sbnumber from EMA_WxMaintab where isnull(Ema_wx_receiveflag,0) = 0) then '待修'
else '启用' end as Usage
from Wms_toolsTab a where 1 = 1
) a where 1 = 1 ";
//2022-1-20 zj让把Ema_wx_receiveflag 改为isnull(Ema_wx_receiveflag,0) 改前是按照设备档案sql查询
DataTable dt = SqlHelper.ExecuteDataTable(sqlValue);
//上一次同步时的维修信息
sqlValue = "select * from lastimport_repair";
DataTable lastimportDt = SqlHelper.ExecuteDataTable(sqlValue);
//有差别的数据 差集
DataTable changeContent = dt.Clone();
IEnumerable<DataRow> QCJ = dt.Select().AsEnumerable().Except(lastimportDt.Select().AsEnumerable(), DataRowComparer.Default);
try
{
DataTable jg = QCJ.CopyToDataTable();
changeContent = jg;
}
catch (System.InvalidOperationException ex) //如果差集为null,就回进当前报错
{
changeContent = dt.Clone();
}
string url = "http://110.185.210.70:8881/business/receive/maintainRecord";
try
{
foreach (DataRow item in changeContent.Rows)
{
string ema_wx_wxman = item["ema_wx_wxman"].ToString();
string name = (ema_wx_wxman.Split(','))[0];//维修人只传第一个
item["ema_wx_wxman"] = name;
string jtBillNo = item["jtBillNo"].ToString();
string newjtBillNo = jtBillNo.Trim();
item["jtBillNo"] = newjtBillNo;
string jsonObj = JsonUtil.ToJsonObject(item);
string deljson = jsonObj.Substring(1, jsonObj.Length - 2);
ResponseMode mode = NewEmp.PostMethodToObj(url, deljson);
item["ema_wx_wxman"] = ema_wx_wxman;
item["jtBillNo"] = jtBillNo;
if (mode != null && 0 == mode.ret)
{
//修改上一次查询表的数据,根据是否存在编号去修改或新增
sqlValue = string.Format(@"if(select 1 from lastimport_repair where jtBillNo='{0}')=1
begin
update lastimport_repair set isrepair = '{1}', ema_wx_wxman = '{2}',stateOfRepair='{3}' where jtBillNo='{0}';
end else
begin
insert into lastimport_repair(jtBillNo, isrepair, ema_wx_wxman,stateOfRepair) values('{0}', '{1}', '{2}','{3}')
end",
item["jtBillNo"], item["isrepair"], item["ema_wx_wxman"], item["stateOfRepair"]);
SqlHelper.ExecuteNonQuery(sqlValue);
string updareabak = DateTime.Now + string.Format(" 维修状态{0} 信息同步成功.\r\n", item["jtBillNo"]);
RefreshLogUIThread(updareabak);
}
else
{
string errorMsg = mode != null ? mode.msg : "未知原因.";
RefreshLogUIThread(DateTime.Now + string.Format(" 维修状态,信息读取失败,错误原因:{0}.\r\n", errorMsg));
}
}
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format(" 维修状态,信息读取失败.\r\n" + " 原因:" + ex.Message + Environment.NewLine));
}
RefreshLogUIThread(DateTime.Now + "维修状态 同步完成.\r\n");
RefreshLogUIThread("--------------------分割线------------------------\r\n");
}
/// <summary>
/// 同步事件 加工参数
/// </summary>
private void SynchronousMachiningParameter()
{
//当前最新的加工参数数据
string sqlValue = @"select wms_ep_ProductId,wms_ep_mojuid,isnull(wms_ep_bzlhwd,0)as wms_ep_bzlhwd ,isnull(wms_ep_lhwdgc,0)as wms_ep_lhwdgc,
isnull(wms_ep_lhtime,0)as wms_ep_lhtime,isnull(wms_ep_sjgc,0)as wms_ep_sjgc,isnull(wms_ep_lhyl,0)as wms_ep_lhyl,
isnull(wms_ep_ylgc,0)as wms_ep_ylgc,isnull(wms_ep_bzedwd,0)as wms_ep_bzedwd,isnull(wms_ep_edwdgc,0)as wms_ep_edwdgc,
isnull(wms_ep_bzedtime,0)as wms_ep_bzedtime,isnull(wms_ep_edsjgc,0)as wms_ep_edsjgc,isnull(wms_ep_bzedwd2,0)as wms_ep_bzedwd2,
isnull(wms_ep_edwdgc2,0)as wms_ep_edwdgc2,isnull(wms_ep_bzedtime2,0)as wms_ep_bzedtime2,isnull(wms_ep_edsjgc2,0)as wms_ep_edsjgc2,
isnull(wms_ep_bzedwd3,0)as wms_ep_bzedwd3,isnull(wms_ep_edwdgc3,0)as wms_ep_edwdgc3,isnull(wms_ep_bzedtime3,0)as wms_ep_bzedtime3,
isnull(wms_ep_edsjgc3,0)as wms_ep_edsjgc3,isnull(wms_ep_bzedwd4,0)as wms_ep_bzedwd4,isnull(wms_ep_edwdgc4,0)as wms_ep_edwdgc4,
isnull(wms_ep_bzedtime4,0)as wms_ep_bzedtime4,isnull(wms_ep_edsjgc4,0)as wms_ep_edsjgc4,isnull(wms_ep_jfdy,0)as wms_ep_jfdy,
isnull(wms_ep_nyz,0)as wms_ep_nyz,isnull(wms_ep_nytime,0)as wms_ep_nytime,isnull(wms_ep_yl1,0)as wms_ep_yl1,isnull(wms_ep_yl2,0)as wms_ep_yl2,
isnull(wms_ep_yl3,0)as wms_ep_yl3,isnull(wms_ep_yl4,0)as wms_ep_yl4,isnull(wms_ep_yl5,0)as wms_ep_yl5,isnull(wms_ep_yl6,0)as wms_ep_yl6,
isnull(wms_ep_yl7,0)as wms_ep_yl7,isnull(wms_ep_yl8,0)as wms_ep_yl8,isnull(wms_ep_yl9,0)as wms_ep_yl9,isnull(wms_ep_yl10,0)as wms_ep_yl10
from wms_Equipmentparameterstab";
DataTable dt = SqlHelper.ExecuteDataTable(sqlValue);
// 上一次同步时物料加工标准参数
sqlValue = @"select wms_ep_ProductId,wms_ep_mojuid,wms_ep_bzlhwd,wms_ep_lhwdgc,wms_ep_lhtime,wms_ep_sjgc,wms_ep_lhyl,wms_ep_ylgc,
wms_ep_bzedwd,wms_ep_edwdgc,wms_ep_bzedtime,wms_ep_edsjgc,wms_ep_bzedwd2,wms_ep_edwdgc2,wms_ep_bzedtime2,wms_ep_edsjgc2,
wms_ep_bzedwd3,wms_ep_edwdgc3,wms_ep_bzedtime3,wms_ep_edsjgc3,wms_ep_bzedwd4,wms_ep_edwdgc4,wms_ep_bzedtime4,wms_ep_edsjgc4,
wms_ep_jfdy,wms_ep_nyz,wms_ep_nytime,wms_ep_yl1,wms_ep_yl2,wms_ep_yl3,wms_ep_yl4,wms_ep_yl5,wms_ep_yl6,wms_ep_yl7,wms_ep_yl8,
wms_ep_yl9,wms_ep_yl10
from lastimport_machining";
DataTable LastTimeDt = SqlHelper.ExecuteDataTable(sqlValue);
//需要同步的数据
DataTable changeContent = dt.Clone();
//差集
IEnumerable<DataRow> QCJ = dt.Select().AsEnumerable().Except(LastTimeDt.Select().AsEnumerable(), DataRowComparer.Default);
string url = "http://110.185.210.70:8881/business/receive/productionStandard";
try
{
DataTable jg = QCJ.CopyToDataTable();
changeContent = jg;
}
catch (System.InvalidOperationException ex) //如果差集为null,就回进当前报错
{
changeContent = dt.Clone();
}
try
{
foreach (DataRow item in changeContent.Rows)
{
string updateSql = "update {0} set {1} where {2}='{3}';";
string insertSql = "insert into {0}({1}) values({2});";
string updateFields = string.Empty;
string insertFields = string.Empty;
string insertValues = string.Empty;
string jsonObj = JsonUtil.ToJsonObject(item);
string deljson = jsonObj.Substring(1, jsonObj.Length - 2);
ResponseMode mode = NewEmp.PostMethodToObj(url, deljson);
if (mode != null && 0 == mode.ret)
{
//判断对照表中是否存在相同编码
DataRow[] dr = LastTimeDt.Select("wms_ep_ProductId" + "='" + item["wms_ep_ProductId"] + "'");
bool isupdate = dr.Length == 1 ? true : false;
//同步数据到对照表中
foreach (DataColumn column in changeContent.Columns)
{
if (isupdate)
{
//修改语句
if (!column.ColumnName.Equals("wms_ep_ProductId"))
{
if (column.DataType == typeof(Decimal) || column.DataType == typeof(Int32))
{
updateFields += string.Format("[{0}]='{1}',", column.ColumnName, 0);
}
else
{
updateFields += string.Format("[{0}]='{1}',", column.ColumnName, (item[column.ColumnName] + "").Replace("'", "''"));
}
}
}
else
{
//新增语句
string fieldValue = string.Empty;
fieldValue = (item[column.ColumnName] + "").Replace("'", "''");
insertFields += "[" + column.ColumnName + "],";
if (!string.IsNullOrWhiteSpace(fieldValue))
{
insertValues += column.DataType == typeof(DateTime) ? "'" + Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") + "'," : "'" + fieldValue + "',";
}
else
{
if (column.DataType == typeof(Decimal) || column.DataType == typeof(Int32))
insertValues += "0,";
else if (column.DataType == typeof(DateTime))
insertValues += "NULL,";
else
insertValues += "'',";
}
}
}
updateFields = updateFields.TrimEnd(',');
insertFields = insertFields.TrimEnd(',');
insertValues = insertValues.TrimEnd(',');
if (!string.IsNullOrEmpty(updateFields))
{
sqlValue = string.Format(updateSql, "lastimport_machining", updateFields, "wms_ep_ProductId", item["wms_ep_ProductId"]);
}
if (!string.IsNullOrEmpty(insertFields))
{
sqlValue = string.Format(insertSql, "lastimport_machining", insertFields, insertValues);
}
SqlHelper.ExecuteNonQuery(sqlValue);
string updareabak = DateTime.Now + string.Format(" 加工参数{0} 信息同步成功.\r\n", item["wms_ep_ProductId"]);
RefreshLogUIThread(updareabak);
}
else
{
string errorMsg = mode != null ? mode.msg : "未知原因.";
RefreshLogUIThread(DateTime.Now + string.Format(" 加工参数 信息读取失败,错误原因:{0}.\r\n", errorMsg));
}
}
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format("加工参数 信息读取失败.\r\n" + " 原因:" + ex.Message + Environment.NewLine));
}
RefreshLogUIThread(DateTime.Now + "加工参数 同步完成.\r\n");
RefreshLogUIThread("--------------------分割线------------------------\r\n");
}
/// <summary>
/// 同步事件 工单明细信息
/// </summary>
private void SynchronizeWorkOrder()
{
// string sqlValue = @"select mrp_lwt_id,mrp_lwt_workno ,mrp_lwt_workordername ,stdt,
//(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select mrp_lwt_beforeAmount) ELSE( select (mrp_lwt_kxamount1+mrp_lwt_kxamount2 +mrp_lwt_kxamount3) as 'mrp_lwt_kxamount' from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id )END )) as'mrp_lwt_beforeAmount',
//--mrp_lwt_beforeAmount,
// enddt,mrp_lwt_AfterAmount,mrp_lwt_badamount,
// (select EmployeeName from p_employeetab where employeeid = mrp_lwt_publishOper) as mrp_lwt_publishOper,
// mrp_lwt_ProductId,
// (select mrp_mwt_appellation from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'mrp_mwt_appellation',
//(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select jtBillNo from Mps_MachineSetTab where id =(select mrp_mwt_machine from mrp_worktaskmaintab where mrp_mwt_workno = a.mrp_lwt_workno)) ELSE( select mrp_lwt_kaoxiang1 from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id )END )) as'jtBillNo',
//(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select jtname from Mps_MachineSetTab where id =(select mrp_mwt_machine from mrp_worktaskmaintab where mrp_mwt_workno = a.mrp_lwt_workno)) ELSE( select jtname from Mps_MachineSetTab where jtBillNo =(select mrp_lwt_kaoxiang1 from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id ))END )) as'jtname',
// --(select jtBillNo from Mps_MachineSetTab where id =(select CASE mrp_lwt_workordername WHEN '硫化' THEN mrp_mwt_machine ELSE mrp_mwt_str3 END from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)) as 'jtBillNo',
// --(select jtname from Mps_MachineSetTab where id =(select CASE mrp_lwt_workordername WHEN '硫化' THEN mrp_mwt_machine ELSE mrp_mwt_str3 END from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)) as 'jtname',
//SyncFlag,
// (select mrp_mwt_comid from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'comid',
// (select mrp_mwt_finish from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'finish'
// from(
// select
// *, DATEDIFF(minute, a.mrp_lwt_starttime, a.mrp_lwt_endtime) / 60 as betweenTime
// ,case when isnull(mrp_lwt_glgx, '') = '' then b.mes_list_glgx else mrp_lwt_glgx end as glgx
// from mrp_WorkTaskListTab a with(nolock)
// left join(
// select mes_list_no, mes_List_Name , mes_list_glgx from mes_fl_list with(nolock)
// where isnull(sign,0)= 0
// ) b on b.mes_list_no = a.mrp_lwt_prolistno
// left join(
// select a.workno, a.taskid, MIN(optime) stdt, max(opendtime) enddt
// from mrp_worktaskoptimetab a
// group by a.workno, a.taskid
// ) aa on a.mrp_lwt_workno = aa.workno and a.mrp_lwt_id = aa.taskid
// where 1 = 1
// ) a where 1 = 1 and (mrp_lwt_workordername = '硫化' or mrp_lwt_workordername = '二段硫化') and ISNULL(SyncFlag,0)<>1 ";
//and stdt > '2021-11-19' and mrp_lwt_workno='CCP202201170056' and ISNULL(SyncFlag,0)<>1
string sqlValue = @"select mrp_lwt_id,mrp_lwt_workno ,mrp_lwt_workordername ,stdt,
(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select mrp_lwt_beforeAmount) ELSE( select (mrp_lwt_kxamount1+mrp_lwt_kxamount2 +mrp_lwt_kxamount3) as 'mrp_lwt_kxamount' from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id )END )) as'mrp_lwt_beforeAmount',
enddt,mrp_lwt_AfterAmount,mrp_lwt_badamount,
(select EmployeeName from p_employeetab where employeeid = mrp_lwt_publishOper) as mrp_lwt_publishOper,
mrp_lwt_ProductId,
(select mrp_mwt_appellation from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'mrp_mwt_appellation',
(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select jtBillNo from Mps_MachineSetTab where id =(select mrp_mwt_machine from mrp_worktaskmaintab where mrp_mwt_workno = a.mrp_lwt_workno)) ELSE( select mrp_lwt_kaoxiang1 from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id )END )) as'jtBillNo',
(select (CASE mrp_lwt_workordername WHEN '硫化' THEN (select jtname from Mps_MachineSetTab where id =(select mrp_mwt_machine from mrp_worktaskmaintab where mrp_mwt_workno = a.mrp_lwt_workno)) ELSE( select jtname from Mps_MachineSetTab where jtBillNo =(select mrp_lwt_kaoxiang1 from mrp_WorkTaskListTab where mrp_lwt_workno = a.mrp_lwt_workno and mrp_lwt_workordername=a.mrp_lwt_workordername and mrp_lwt_ProductId=a.mrp_lwt_ProductId and mrp_lwt_id=a.mrp_lwt_id ))END )) as'jtname',
SyncFlag,
(select mrp_mwt_comid from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'comid',
(select mrp_mwt_finish from mrp_worktaskmaintab where mrp_mwt_workno = mrp_lwt_workno)as 'finish'
--,mrp_mwt_Start
from(
select
*, DATEDIFF(minute, a.mrp_lwt_starttime, a.mrp_lwt_endtime) / 60 as betweenTime
,case when isnull(mrp_lwt_glgx, '') = '' then b.mes_list_glgx else mrp_lwt_glgx end as glgx
from mrp_WorkTaskListTab a with(nolock)
left join ( select mrp_mwt_Start,mrp_mwt_workno from mrp_worktaskmaintab ) ttt on ttt.mrp_mwt_workno=a.mrp_lwt_workno
left join(
select mes_list_no, mes_List_Name , mes_list_glgx from mes_fl_list with(nolock)
where isnull(sign,0)= 0
) b on b.mes_list_no = a.mrp_lwt_prolistno
left join(
select a.workno, a.taskid, MIN(optime) stdt, max(opendtime) enddt
from mrp_worktaskoptimetab a
group by a.workno, a.taskid
) aa on a.mrp_lwt_workno = aa.workno and a.mrp_lwt_id = aa.taskid
where 1 = 1 and mrp_mwt_Start=1
) a where 1 = 1 and (mrp_lwt_workordername = '硫化' or mrp_lwt_workordername = '二段硫化') and ISNULL(SyncFlag,0)<>1";
try
{
DataTable dt = SqlHelper.ExecuteDataTable(sqlValue);
dt.Columns.Remove("SyncFlag");
string url = "http://110.185.210.70:8881/business/receive/followWorkOrder";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (string.IsNullOrWhiteSpace(dt.Rows[i]["jtBillNo"]+"")) continue;
string jsonObj = JsonUtil.ToJsonObject(dt.Rows[i]);
string deljson = jsonObj.Substring(1, jsonObj.Length - 2);
ResponseMode mode = NewEmp.PostMethodToObj(url, deljson);
if (mode!=null&&0 == mode.ret)
{
//有完工时间的行才会改变同步状态
if ("1".Equals(dt.Rows[i]["comid"] + "") || "1".Equals(dt.Rows[i]["finish"] + "") || !string.IsNullOrWhiteSpace(dt.Rows[i]["enddt"] + ""))
{
sqlValue = string.Format("update mrp_WorkTaskListTab set SyncFlag = 1 where mrp_lwt_workno='{0}' and mrp_lwt_workordername='{1}' and mrp_lwt_id='{2}'", dt.Rows[i]["mrp_lwt_workno"], dt.Rows[i]["mrp_lwt_workordername"], dt.Rows[i]["mrp_lwt_id"]);
SqlHelper.ExecuteNonQuery(sqlValue);
}
string updareabak = DateTime.Now + string.Format(" 工单号{0},工序{1} 信息同步成功.\r\n", dt.Rows[i]["mrp_lwt_workno"], dt.Rows[i]["mrp_lwt_workordername"]);
RefreshLogUIThread(updareabak);
}
else
{
string errorMsg = mode != null ? mode.msg : "未知原因.";
RefreshLogUIThread(DateTime.Now + string.Format("工单明细信息 信息读取失败,错误原因:{0}.\r\n", errorMsg));
}
}
////删除或者取消下发的工单信息。 SyncFlag标识 0还未同步 1正在同步 2同步成功
//RefreshLogUIThread("正在同步已删除和取消下发工单信息\r\n");
//string sqlValue2 = "update DeleteWorkOrderTable set SyncFlag='1' where ISNULL(SyncFlag,0)=0";//
//SqlHelper.ExecuteNonQuery(sqlValue2);
//sqlValue2 = "select * from DeleteWorkOrderTable where SyncFlag='1'";
//DataTable deleteDt = SqlHelper.ExecuteDataTable(sqlValue2);
//deleteDt.Columns.Remove("SyncFlag");
////推送程序中删除或取消下发的工单数据
//for (int i = 0; i < deleteDt.Rows.Count; i++)
//{
// string jsonObj = JsonUtil.ToJsonObject(deleteDt.Rows[i]);
// string deljson = jsonObj.Substring(1, jsonObj.Length - 2);
// deljson = deljson.Replace("\"true\"", "true");
// //url = "http://110.185.210.70:8881/business/receive/followWorkOrder";
// ResponseMode mode = NewEmp.PostMethodToObj(url, deljson);
// if (mode != null && mode.msg.Equals("success"))
// {
// //修改标识
// //sqlValue2 = string.Format("update DeleteWorkOrderTable set SyncFlag='2' where SyncFlag='1' and mrp_lwt_workno='{0}' and mrp_lwt_workordername='{1}'", deleteDt.Rows[i]["mrp_lwt_workno"], deleteDt.Rows[i]["mrp_lwt_workordername"]);
// sqlValue2 = string.Format("update DeleteWorkOrderTable set SyncFlag='2' where SyncFlag='1' and mrp_lwt_workno='{0}' and mrp_lwt_workordername='{1}' and mrp_lwt_id='{2}'", deleteDt.Rows[i]["mrp_lwt_workno"], deleteDt.Rows[i]["mrp_lwt_workordername"], deleteDt.Rows[i]["mrp_lwt_id"]);
// SqlHelper.ExecuteNonQuery(sqlValue2);
// }
// else if(string.IsNullOrWhiteSpace(deleteDt.Rows[i]["jtBillNo"] +"")&& !string.IsNullOrWhiteSpace(deleteDt.Rows[i]["mrp_lwt_id"] + ""))
// {
// //如果机器编号未空,则直接算同步成功,不会再次同步
// sqlValue2 = string.Format("update DeleteWorkOrderTable set SyncFlag='2' where mrp_lwt_id='{0}'", deleteDt.Rows[i]["mrp_lwt_id"]);
// SqlHelper.ExecuteNonQuery(sqlValue2);
// }
//}
//清空删除信息表
//sqlValue2 = "delete DeleteWorkOrderTable where SyncFlag='1'";
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format("工单明细信息 信息读取失败.\r\n" + " 原因:" + ex.Message + Environment.NewLine));
}
RefreshLogUIThread(DateTime.Now + "工单明细信息 同步完成.\r\n");
RefreshLogUIThread("--------------------分割线------------------------\r\n");
}
/// <summary>
/// 后台线程刷新数据
/// </summary>
/// <param name="msg"></param>
public void RefreshLogUIThread(string msg)
{
if (this.IsHandleCreated)
{
Invoke((EventHandler)delegate
{
txtLog.Text += msg;
txtLog.Select(txtLog.TextLength, 0);
txtLog.ScrollToCaret();
});
}
}
/// <summary>
/// 后台线程清理数据
/// </summary>
/// <param name="msg"></param>
public void ReClearLogUIThread()
{
if (this.IsHandleCreated)
{
Invoke((EventHandler)delegate
{
txtLog.Clear();
});
}
}
/// <summary>
/// 主线程刷新数据
/// </summary>
/// <param name="msg"></param>
public void RefreshLog(string msg)
{
txtLog.Text += msg;
txtLog.Select(txtLog.TextLength, 0);
txtLog.ScrollToCaret();
}
#region 连接服务器
/// <summary>
/// <para>说明:连接服务器</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-08-09 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="isSave">if set to <c>true</c> [is save].</param>
public bool ConnectServer(bool isSave = false)
{
string serverName = this.txtSeverId.Text.Trim();//地址
string dbName = this.txtDataBase.Text.Trim();//数据库名
string user = this.txtName.Text.Trim();//用户名
string password = this.txtPassword.Text.Trim();//密码
if (string.IsNullOrWhiteSpace(serverName))
{
MessageUtil.Show(ResourceKeys.ServerNameIsNull);
return false;
}
if (string.IsNullOrWhiteSpace(dbName))
{
MessageUtil.Show(ResourceKeys.ServerDBIsNull);
return false;
}
if (string.IsNullOrWhiteSpace(user))
{
MessageUtil.Show("请重新输入用户名");
return false;
}
// 测试数据库连接
try
{
if (ConnectingToDatabase())
{
if (isSave)
{
}
else
{
IniUtil.IniWriteValue(company, "serverName", serverName);
IniUtil.IniWriteValue(company, "dbName", dbName);
IniUtil.IniWriteValue(company, "user", user);
IniUtil.IniWriteValue(company, "password", password);
return true;
}
}
else
{
MessageUtil.Show(ResourceKeys.ConnectFault);
return false;
}
}
catch (Exception ex)
{
MessageUtil.Show(ResourceKeys.ConnectFault);
}
return true;
}
/// <summary>
/// <para>说明:创建数据库连接</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-08-07 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool ConnectingToDatabase()
{
string connStr = GetConnection();
if (SqlHelper._connection != null)
{
try
{
SqlHelper._connection.Close();
SqlHelper._connection.Dispose();
}
catch (Exception)
{
}
SqlHelper._connection = null;
}
try
{
SqlHelper._connection = new SqlConnection(connStr);
SqlHelper._connection.Open();
return true;
}
catch (Exception ex)
{
// LogHelper.Instance.WriteLog(ex.Message);
}
return false;
}
/// <summary>
/// 获取连接服务器的字符串
/// </summary>
/// <returns></returns>
public string GetConnection()
{
return string.Format("Server={0};Database={1};Persist Security Info=True;User ID={2};Password={3};Connection Timeout=5;MultipleActiveResultSets=true", txtSeverId.Text.ToString(), txtDataBase.Text.ToString(), txtName.Text.ToString(), txtPassword.Text.ToString());
}
#endregion
}
}