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 { /// /// ini文件内段落名 /// public bool RunAutomatically = false; /// /// ini文件内段落名 /// public string company = "烤箱同步工具"; /// /// 初始时间间隔 /// int second = 30; /// /// IP,端口,请求路径 /// 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(); } /// /// 初始化 /// /// /// 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(); } /// /// 时间间隔TextBox失去焦点事件 /// /// /// 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(); //} ///// ///// timer2事件 ///// ///// ///// //private void timer2_Tick(object sender, EventArgs e) //{ // RefreshTemperature(); //} /// /// timer事件 /// /// /// private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; ReClearLogUIThread();//清除内容 SynchronizeWorkOrder(); SynchronizeStatus(); SynchronousMachiningParameter(); SynchronizePersonnelInformation(); timer1.Enabled = true; } /// ///温度同步 /// //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)); // } // } // } //} /// /// 同步事件 人员账号信息 /// 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 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; } /// /// 同步事件 维修状态 /// 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 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"); } /// /// 同步事件 加工参数 /// 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 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"); } /// /// 同步事件 工单明细信息 /// 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"); } /// /// 后台线程刷新数据 /// /// public void RefreshLogUIThread(string msg) { if (this.IsHandleCreated) { Invoke((EventHandler)delegate { txtLog.Text += msg; txtLog.Select(txtLog.TextLength, 0); txtLog.ScrollToCaret(); }); } } /// /// 后台线程清理数据 /// /// public void ReClearLogUIThread() { if (this.IsHandleCreated) { Invoke((EventHandler)delegate { txtLog.Clear(); }); } } /// /// 主线程刷新数据 /// /// public void RefreshLog(string msg) { txtLog.Text += msg; txtLog.Select(txtLog.TextLength, 0); txtLog.ScrollToCaret(); } #region 连接服务器 /// /// 说明:连接服务器 /// 创建人:龚宇超 /// 创建日期:2017-08-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// if set to true [is save]. 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; } /// /// 说明:创建数据库连接 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. 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; } /// /// 获取连接服务器的字符串 /// /// 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 } }