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

3048 lines
184 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using DevExpress.Utils;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Columns;
using Lskj.Control;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace AFKAbutment
{
public partial class Form1 : Form
{
public Form1(string[] args)
{
arg = args;
this.FormClosed += Form1_FormClosed;
this.KeyDown += Form1_KeyDown;
InitializeComponent();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (thread != null)
{
thread.Abort();
}
this.Dispose();
this.Close();
}
public string[] arg;
public bool rightClickExecute = false;
public System.Threading.Thread thread = null;
public bool isStop = false;
public System.Timers.Timer timer1 = new System.Timers.Timer();
public System.Timers.Timer timer2 = new System.Timers.Timer();
public System.Timers.Timer timer3 = new System.Timers.Timer();
public string separator = "Lserp$specialTag";//分割符
//初始化
private void Form1_Load(object sender, EventArgs e)
{
this.startBtn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
this.startBtn.MouseHover += new EventHandler(OnStartBtn_MouseHover);
this.startBtn.MouseLeave += new EventHandler(OnStartBtn_MouseLeave);
this.stopBtn.MouseHover += new EventHandler(OnStoptBtn_MouseHover);
this.stopBtn.MouseLeave += new EventHandler(OnStopBtn_MouseLeave);
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer1_Elapsed);
this.timer2.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer2_Elapsed);
this.timer3.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer3_Elapsed);
//afk
afkSeverId.Text = IniHelper.Read("Setting.ini", "AFK", "serverName"); //地址
afkPortNumber.Text = IniHelper.Read("Setting.ini", "AFK", "port"); //端口
afkDataBase.Text = IniHelper.Read("Setting.ini", "AFK", "dbName");//数据库名
afkName.Text = IniHelper.Read("Setting.ini", "AFK", "user");//用户名
afkPassword.Text = IniHelper.Read("Setting.ini", "AFK", "password"); //密码
//ls
lsSeverId.Text = IniHelper.Read("Setting.ini", "LS", "serverName"); //地址
lsDataBase.Text = IniHelper.Read("Setting.ini", "LS", "dbName");//数据库名
lsName.Text = IniHelper.Read("Setting.ini", "LS", "user");//用户名
lsPassword.Text = IniHelper.Read("Setting.ini", "LS", "password"); //密码
//parameter
string time = IniHelper.Read("Setting.ini", "parameter", "time"); //间隔时间
if (string.IsNullOrEmpty(time)) time = "30";
if (Convert.ToInt32(time) < 30) time = "30";
intervalTime.Text = time;
intervalTime.LostFocus += new EventHandler(intervalTime_LostFocus);
if (arg.Length > 0)
{
if (arg[0].Equals("1"))
{
timer2.Interval = 10000;
timer2.Enabled = true;
}
}
InitializeDataSettings();
}
// <summary>
/// 时间间隔TextBox失去焦点事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void intervalTime_LostFocus(object sender, EventArgs e)
{
string checkStr = intervalTime.Text.ToString();
if (string.IsNullOrEmpty(checkStr)) intervalTime.Text = "30";
int check = Convert.ToInt32(intervalTime.Text.ToString());
if (check < 30)
{
intervalTime.Text = "30";
}
IniHelper.Write("parameter", "time", intervalTime.Text.ToString());
}
//判断右键列,是否要立刻同步数据
private void OnTimer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer3.Enabled = false;
bool isRecover = false;
if (!isStop)
{
isRecover = true;
}
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where rightKeyTag='1' ORDER BY id");
if (synchronousTable.Rows.Count > 0)
{
if (rightClickExecute)
{
isStop = true;
timer1.Enabled = false;
RefreshLogUIThread("清空");
RefreshLogUIThread(DateTime.Now + "正在同步右键数据.\r\n");
//AFK》LS
DataRow[] performDr = synchronousTable.Select("directionTag" + "='0'");
this.getAfktoLs(performDr);
//LS》AFK
performDr = synchronousTable.Select("directionTag" + "='1'");
this.getLStoAFK(performDr);
string sql = "update p_synchrTab set rightKeyTag='0'";
SqlHelper.ExecuteNonQuery(sql);
//固定执行
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
if (dt != null && dt.Rows.Count > 0)
{
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
RefreshLogUIThread(DateTime.Now + "同步右键数据结束.\r\n");
timer1.Enabled = true;
if (isRecover)
{
RefreshLogUIThread(DateTime.Now + "恢复同步.\r\n");
isStop = false;
}
else
{
RefreshLogUIThread(DateTime.Now + "请点击开始按钮恢复同步.\r\n");
}
}
else
{
isStop = true;
RefreshLogUIThread("清空");
RefreshLogUIThread(DateTime.Now + "已暂停当前同步,正在同步右键数据.\r\n");
//AFK》LS
DataRow[] performDr = synchronousTable.Select("directionTag" + "='0'");
this.getAfktoLs(performDr, true);
//LS》AFK
performDr = synchronousTable.Select("directionTag" + "='1'");
this.getLStoAFK(performDr, true);
string sql = "update p_synchrTab set rightKeyTag='0'";
SqlHelper.ExecuteNonQuery(sql);
//固定执行
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
if (dt != null && dt.Rows.Count > 0)
{
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
RefreshLogUIThread(DateTime.Now + "同步右键数据结束.\r\n");
if (isRecover)
{
RefreshLogUIThread(DateTime.Now + "恢复同步.\r\n");
isStop = false;
}
else
{
RefreshLogUIThread(DateTime.Now + "请点击开始按钮恢复同步.\r\n");
}
}
}
timer3.Enabled = true;
}
//被服务打开后主动执行点击同步暗流
private void OnTimer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer2.Enabled = false;
startBtn_Click(sender, e);
}
//循环同步操作
private void OnTimer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
rightClickExecute = false;
timer1.Enabled = false;
RefreshLogUIThread("清空");
//AFK》LS
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='0' ORDER BY id");
this.SynchroDataSingle(synchronousTable, DataDirection.AfkToLs);
//固定执行
try
{
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
if (dt != null && dt.Rows.Count > 0)
{
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
}
catch (Exception)
{
}
//LS》AFK
synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");
this.SynchroDataSingle(synchronousTable, DataDirection.LsToAfk);
// 获取中间日志表中报错信息
getErrorLine();
timer1.Enabled = true;
rightClickExecute = true;
}
private void StartMethod()
{
try
{
RefreshLogUIThread(DateTime.Now + "正在初始化平台.\r\n");
//连接服务器
if (ConnectServer() && ConnectMySql())
{
timer3.Interval = 2000;
timer3.Enabled = true;
RefreshLogUIThread(DateTime.Now + "初始化平台成功.\r\n");
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' ORDER BY id");
DataRow[] performDr = null;
//AFK》LS
performDr = synchronousTable.Select("directionTag" + "='0'");
//performDr = synchronousTable.Select("id" + "='14'");
//this.getAfktoLs(performDr);
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='0' ORDER BY id");// and id in(38,46,47)
this.SynchroDataSingle(dt, DataDirection.AfkToLs);
performDr = synchronousTable.Select("id" + "='9999999'");
if (performDr != null && performDr.Length > 0)
{
string afterSql = performDr[0]["afterSql"] + "";//同步完成后执行的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
DataTable dts = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");//and id=36
this.SynchroDataSingle(dts, DataDirection.LsToAfk);
//LS》AFK
//performDr = synchronousTable.Select("directionTag" + "='1'");
//performDr = synchronousTable.Select("id" + "='6'");
//this.getLStoAFK(performDr);
//DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");
//this.SynchroDataSingle(dt, DataDirection.LsToAfk);
// 获取中间日志表中报错信息
getErrorLine();
rightClickExecute = true;
timer1.Interval = Convert.ToInt32(intervalTime.Text.ToString()) * 1000;
timer1.Enabled = true;
}
else
{
RefreshLogUIThread(DateTime.Now + " 初始化平台失败.\r\n");
thread = null;
}
}
catch (Exception ex)
{
RefreshLogUIThread(DateTime.Now + string.Format("初始化失败.原因:{0}.\r\n", ex.Message));
}
}
private void startBtn_Click(object sender, EventArgs e)
{
if (thread == null)
{
thread = new System.Threading.Thread(StartMethod);
thread.Start();
}
else
{
RefreshLogUIThread(string.Format("恢复同步,同步中……\r\n"));
isStop = false;
}
}
private void stopBtn_Click(object sender, EventArgs e)
{
isStop = true;
}
//从AFK拿数据同步到LS中
public void getAfktoLs(DataRow[] performDr, bool isRightStop = false)
{
//afk》朗速
RefreshLogUIThread(string.Format("开始从AFK获取数据:\r\n"));
RefreshLogUIThread(string.Format("开始同步:\r\n"));
string mainTableName = string.Empty;
foreach (DataRow item in performDr)
{
try
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string targetTabSql = item["targetTabSql"] + "";//去获得的数据源sql
string synchroSql = (item["synchroSql"] + "").ToLower();//同步sql
string synLogSql = (item["synLogSql"] + "").ToLower();//同步到备份日志表中的sql
string afterSql = item["afterSql"] + "";//同步完成后执行的sql
string targetTab = string.Empty;//中间表对应的表名
string disableFieid = item["disableField"] + "";//tagid是3或者4,指定字段改变
targetTab = targetTabSql.Split('^')[0].Replace(" ", "");
mainTableName = synchroSql.Split('^')[0].Replace(" ", "");
string sql = string.Format(@"if not exists(select * from syscolumns
where id=object_id('{0}') and name='directTag')
begin
alter table {0} add directTag int
end", mainTableName);
SqlHelper.ExecuteNonQuery(sql);
//判断有无标识列
sql = string.Format(@"select CASE when (select count(1)
FROM information_schema.COLUMNS
WHERE table_schema = '{0}'
and table_name = '{1}'
AND column_name = 'isSynchro') > 0
then '1'
else '2'
end
", afkDataBase.Text + "", targetTab);
string jg = MySqlHelper.ExecuteScalar(sql) + "";
if (jg.Equals("2"))
{
//添加标识列
sql = string.Format("alter table {0} add column isSynchro varchar(30);", targetTab);
MySqlHelper.ExecuteNonQuery(sql);
}
//获得需要替换的数据
String replacementValue = synchroSql.Split('^')[2];
string[] replacementValues = replacementValue.Replace(" ", "").Split(',');
//获得修改语句中修改表的数据
String modifyTableColumn = synchroSql.Split('^')[1];
string[] modifyTableColumns = modifyTableColumn.Replace(" ", "").Split(',');
//判断数据源是否有where条件
string conditions = string.Empty;
string isSynchro = string.Empty;
string[] sArray = targetTabSql.Split('^');
if (sArray.Length == 1)
{
isSynchro = " where isSynchro=1";
}
else
{
conditions = " where " + sArray[1];
isSynchro = " where " + sArray[1] + " and isSynchro=1 ";
}
//根据获得对应的表,并把其中的列(isSynchro)变为1
sql = string.Format("update {0} set isSynchro='1' {1}", targetTab, conditions);
MySqlHelper.ExecuteNonQuery(sql);
//根据sql拿到数据源
sql = string.Format("select * from {0}", targetTabSql.Split('^')[0] + isSynchro);
DataTable afkDataSource = MySqlHelper.ExecuteDataTable(sql);
//获得拼接的主键对应条件
string[] synchroSqls = synchroSql.Split('^');
string modifyConditions = string.Empty;//修改sql条件
string[] modifyConditionsReplacementValue = null;//条件中要双方对应的属性
if (synchroSqls.Length == 4)
{
modifyConditions = synchroSqls[3];
modifyConditionsReplacementValue = modifyConditions.Split('=');
}
//获得中间表主键名
// string MysqlPrimaryKey = MysqlGetPrimaryKey(targetTab);
//数据库属性表
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", mainTableName));
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", targetTab));
//要执行的sql
string allSql = string.Empty;//主表保存sql
string logAllSql = string.Empty;//日志备份表保存sql
List<string> errorRecordInformation = new List<string>();//报错时需要用到的信息
//List<string> errorRecordInformationMiddle = new List<string>();//报错时需要用到的信息
List<string> DatabaseValidationInformation = new List<string>();//数据库验证信息
RefreshLogUIThread(string.Format("正在同步: lserp >>>>> {0}\r\n", mainTableName));
foreach (DataRow afkitem in afkDataSource.Rows)
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string backupReplaceField = string.Empty;//新增语句列名
string newreplacementValue = string.Empty;//新增语句真实值
string AllBackupReplaceField = string.Empty;//数据源全部列名
string AllBewreplacementValue = string.Empty;//数据源全部真实值
string modifyContent = string.Empty;//修改内容
string newModifyConditions = string.Empty;//主表修改或删除条件
string newModifyConditionsMiddle = string.Empty;//中间表表修改或删除条件
string insertSql = "insert into {0}({1}) values({2});";
string updateSql = "update {0} set {1} {2};";
string ModeOfOperation = "0";//操作编号 1新增,2修改,3删除
if (modifyConditionsReplacementValue != null && modifyConditionsReplacementValue.Length == 2)
{
//当前行主键值
string key = afkitem[modifyConditionsReplacementValue[1].Replace(" ", "")] + "";
newModifyConditions = " where " + modifyConditionsReplacementValue[0] + " ='" + key + "'";
// newModifyConditionsMiddle = " and " + MysqlPrimaryKey + " ='" + afkitem[MysqlPrimaryKey] + "'";
//执行的操作
if (afkDataSource.Columns.Contains("tagid"))
{
ModeOfOperation = afkitem["tagid"] + "";
}
else if (afkDataSource.Columns.Contains("tag_id"))
{
ModeOfOperation = afkitem["tag_id"] + "";
}
else
ModeOfOperation = "0";
//判断LS数据库是否存在这一行
sql = string.Format("select 1 from {0} {1}", mainTableName, newModifyConditions);
bool isExistence = "1".Equals(SqlHelper.ExecuteScalar(sql) + "");
//如果数据库中存在,还是做新增存在的话就不执行
if (isExistence && (ModeOfOperation.Equals("1") || ModeOfOperation.Equals("0")))
{
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", mainTableName, key, "数据库新增已存在相同主键", modifyConditionsReplacementValue[0]);
SqlHelper.ExecuteNonQuery(sql);
continue;
}
}
foreach (DataColumn column in afkDataSource.Columns)
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
if (column.ColumnName.Equals("isSynchro")) continue;
if (column.ColumnName.Equals("directTag")) continue;
string value = afkitem[column.ColumnName.Replace(" ", "")] + "";
value = GetTheRealValue(column, value.Replace("'", "''"));
if (value.Equals("null"))
{
AllBewreplacementValue = AllBewreplacementValue + value + ",";
}
else
{
AllBewreplacementValue = AllBewreplacementValue + "'" + value + "',";
}
AllBackupReplaceField = AllBackupReplaceField + column.ColumnName.Replace(" ", "") + ",";
}
int i = 0;
//重新循环,上面的循环获得的真实值和sql中的字段顺序不同
foreach (string columnName in replacementValues)
{
string name = columnName.Replace(" ", "");
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
if (name.Contains("#add$_"))
{
name = name.Replace("#add$_", "");
if (ModeOfOperation == "2")
{
i++;
continue;
}
}
DataColumn dc = afkDataSource.Columns[name];
string value = afkitem[name] + "";
value = GetTheRealValue(dc, value.Replace("'", "''"));
if (value.Equals("null"))
{
newreplacementValue = newreplacementValue + value + ",";
modifyContent = modifyContent + modifyTableColumns[i].Replace(" ", "") + "=" + value + ",";
}
else
{
newreplacementValue = newreplacementValue + "'" + value + "',";
modifyContent = modifyContent + modifyTableColumns[i].Replace(" ", "") + "='" + value + "',";
}
backupReplaceField = backupReplaceField + modifyTableColumns[i].Replace(" ", "") + ",";
i++;
}
if (ModeOfOperation.Replace(" ", "").Equals("2") && !string.IsNullOrEmpty(newModifyConditions))
{
updateSql = string.Format(updateSql, mainTableName, modifyContent.TrimEnd(','), newModifyConditions);
allSql = allSql + "\r\n" + updateSql + " " + separator;
}
else if (ModeOfOperation.Replace(" ", "").Equals("3") && !string.IsNullOrEmpty(newModifyConditions))
{
string Field = string.Empty;
if (!string.IsNullOrWhiteSpace(disableFieid))
{
Field = disableFieid.Split('^')[0];
updateSql = string.Format(updateSql, mainTableName, Field, newModifyConditions);
allSql = allSql + "\r\n" + updateSql + " " + separator;
}
}
else if (ModeOfOperation.Replace(" ", "").Equals("4") && !string.IsNullOrEmpty(newModifyConditions))
{
string Field = string.Empty;
if (!string.IsNullOrWhiteSpace(disableFieid))
{
Field = disableFieid.Split('^')[1];
updateSql = string.Format(updateSql, mainTableName, Field, newModifyConditions);
allSql = allSql + "\r\n" + updateSql + " " + separator;
}
}
else
{
//获得要添加的列,并新增同步列(“directTag”)
string NewreplacementField = synchroSql.Replace("#add$_", "").Split('^')[1];
insertSql = string.Format(insertSql, mainTableName, NewreplacementField + ",directTag", newreplacementValue + "'1'");
if (!string.IsNullOrWhiteSpace(newModifyConditions))
{
insertSql = insertSql.TrimEnd(';');
insertSql = string.Format(@"if isnull((select 1 from {0} {1}),0)<>1
begin
{2}
end;
", mainTableName, newModifyConditions, insertSql);
}
allSql = allSql + "\r\n" + insertSql + " " + separator;
}
errorRecordInformation.Add(ModeOfOperation.Replace(" ", "") + "^" + newModifyConditions.Replace("where ", ""));
//判断数据是否符合规范
DatabaseValidationInformation.Add(IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, afkitem, modifyTableColumn.Replace("#add$_", ""), replacementValue, DataDirection.AfkToLs));
//写入日志备份表
string backupTableName = string.Empty;//备份表表名
string dateTime = DateTime.Now.ToString();
if (string.IsNullOrWhiteSpace(synLogSql)) continue;
string[] synLog = (item["synLogSql"] + "").Split('^');
string backupSql = "insert into {0}({1}) values({2});";//备份sql
backupSql = string.Format(backupSql, synLog[0], AllBackupReplaceField + synLog[1], AllBewreplacementValue + synLog[2].Replace("GETDATE()", "'" + dateTime + "'"));
logAllSql = logAllSql + "\r\n" + backupSql + " " + separator;
}
try
{
if (!string.IsNullOrWhiteSpace(allSql)) SqlHelper.ExecuteNonQuery(allSql.Replace(separator, ""));
sql = string.Format("update {0} set directTag='2'where directTag ='1'", mainTableName);
SqlHelper.ExecuteNonQuery(sql);
//同步日志
if (!string.IsNullOrWhiteSpace(logAllSql))
{
MySqlHelper.ExecuteNonQuery(logAllSql.Replace(separator, "").Replace("@TransferLogo", "1").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "批量增加,表名:" + mainTableName, "GETDATE()", "正常", "", "朗速");
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKey) values ('{0}')", targetTab);
SqlHelper.ExecuteNonQuery(sql);
}
//把中间表中同步后的数据删除
sql = string.Format("delete from {0} where isSynchro='1'", targetTab);
if (this.deleteCheck.Checked)
{
MySqlHelper.ExecuteNonQuery(sql);
}
RefreshLogUIThread(string.Format("{0}=========》同步成功:\r\n", mainTableName));
}
catch (Exception ex)
{
string RollBackSql = string.Format("delete {0} where directTag='1'", mainTableName);
SqlHelper.ExecuteNonQuery(RollBackSql);
string[] Sqls = allSql.Split(new string[] { separator }, StringSplitOptions.None);
string[] backupSqls = logAllSql.Split(new string[] { separator }, StringSplitOptions.None);
string operation = string.Empty;
string primaryKey = string.Empty;
//string middlePrimaryKey = string.Empty;
for (int i = 0; i < Sqls.Length - 1; i++)
{
try
{
operation = string.Empty;
primaryKey = string.Empty;
switch (errorRecordInformation[i].Split('^')[0])
{
case "0":
operation = "单条新增";
break;
case "1":
operation = "单条新增";
break;
case "2":
operation = "单条修改";
break;
case "3":
operation = "单条修改";
break;
case "4":
operation = "单条修改";
break;
}
if (!string.IsNullOrWhiteSpace(errorRecordInformation[i].Split('^')[1]))
{
primaryKey = errorRecordInformation[i].Split('^')[1];
//middlePrimaryKey = errorRecordInformationMiddle[i];
}
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
SqlHelper.ExecuteNonQuery(Sqls[i]);
if (Sqls.Length == backupSqls.Length) MySqlHelper.ExecuteNonQuery(backupSqls[i].Replace("@TransferLogo", "1").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", operation + " " + mainTableName + "表,主键" + primaryKey.Replace("'", "''"), "GETDATE()", "正常", "", "朗速");
//sql = string.Format("insert into P_RemarkTable(LsTableName) values ('{0}')", mainTableName);
//SqlHelper.ExecuteNonQuery(sql);
}
catch (Exception newEx)
{
primaryKey = primaryKey.Replace("'", "''");
string errorMessage = string.IsNullOrWhiteSpace(DatabaseValidationInformation[i]) ? newEx.Message.Replace("'", "''") : DatabaseValidationInformation[i];
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", targetTab, primaryKey.Split('=')[1].Replace("'", ""), "朗速获取AFK数据错误:" + errorMessage + "", primaryKey.Split('=')[0]);
SqlHelper.ExecuteNonQuery(sql);
if (Sqls.Length == backupSqls.Length) MySqlHelper.ExecuteNonQuery(backupSqls[i].Replace("@TransferLogo", "2").Replace("@ErrorType", "1").Replace("@ErrorMessage", "'朗速获取AFK数据错误:" + errorMessage + ""));
}
}
sql = string.Format("update {0} set directTag='2'", mainTableName);
SqlHelper.ExecuteNonQuery(sql);
//把中间表中剩下同步失败的数据同步标识改变
sql = string.Format("delete from {0} where isSynchro='1'", targetTab);
if (this.deleteCheck.Checked)
{
MySqlHelper.ExecuteNonQuery(sql);
}
RefreshLogUIThread(string.Format("{0}{1}=========》同步部分失败:\r\n", mainTableName, ex.Message));
}
//执行同步完成后的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
catch (Exception ex)
{
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", mainTableName, "朗速获取AFK数据错误:" + ex.Message.Replace("'", "''") + "");
SqlHelper.ExecuteNonQuery(sql);
}
}
}
/// <summary>
/// 把中间数据库日志表中报错信息存入朗速数据库
/// </summary>
public void getErrorLine()
{
try
{
DataTable RemarkdockTable = SqlHelper.ExecuteDataTable("select * from Remarkdock");
foreach (DataRow RemarkdockDr in RemarkdockTable.Rows)
{
string LsTableName = RemarkdockDr["LsTableName"] + "";//朗速表名
string ZhTableName = RemarkdockDr["ZhTableName"] + "";//Afk表名
string SucceedId = RemarkdockDr["SucceedId"] + "";//成功标识 1成功 2失败
string SucceedRemark = RemarkdockDr["SucceedRemark"] + "";//错误信息
string PrimKeyId = RemarkdockDr["PrimKeyId"] + "";//afk主键名
string LsPrimKeyId = RemarkdockDr["LsPrimKeyId"] + "";//朗速主键名
//判断有无标识列
string sql = string.Format(@"select CASE when (select count(1)
FROM information_schema.COLUMNS
WHERE table_schema = '{0}'
and table_name = '{1}'
AND column_name = 'Ls_succeed_ID') > 0
then '1'
else '2'
end
", afkDataBase.Text + "", ZhTableName);
string jg = MySqlHelper.ExecuteScalar(sql) + "";
if (jg.Equals("2"))
{
//添加标识列
sql = string.Format("alter table {0} add column Ls_succeed_ID varchar(30);", ZhTableName);
MySqlHelper.ExecuteNonQuery(sql);
}
sql = string.Format("update {0} set Ls_succeed_ID='2' where ifnull(Ls_succeed_ID,'0')!='1' ", ZhTableName);
MySqlHelper.ExecuteNonQuery(sql);
//根据中航的中间日志表名获取没有同步的错误日志信息
string querySql = string.Format("SELECT {0},{1} from {2} where {3}=2 and Ls_succeed_ID='2' ", PrimKeyId, SucceedRemark, ZhTableName, SucceedId);
DataTable queryTable = MySqlHelper.ExecuteDataTable(querySql);
//把获取的错误信息存入朗速数据库表中
string preservationSql = string.Empty;
foreach (DataRow queryDr in queryTable.Rows)
{
preservationSql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", LsTableName, queryDr[PrimKeyId], (queryDr[SucceedRemark] + "").Replace("'", "''"), LsPrimKeyId);
SqlHelper.ExecuteNonQuery(preservationSql);
}
sql = string.Format("update {0} set Ls_succeed_ID='1' where Ls_succeed_ID='2' ", ZhTableName);
MySqlHelper.ExecuteNonQuery(sql);
}
}
catch (Exception)
{
}
}
/// <summary>
/// 根据传入的列和值,转成数据库可以获取的值
/// </summary>
/// <param name="column"></param>
/// <param name="Value"></param>
/// <returns></returns>
public string GetTheRealValue(DataColumn column, string Value)
{
//如果数据源类型是bool,就替换成0(false)或1true
if (column.DataType == typeof(Boolean))
{
if (Value.Equals("true", StringComparison.OrdinalIgnoreCase))
{
Value = "1";
}
else
{
Value = "0";
}
}
if (column.DataType == typeof(int))
{
if (Value.Equals(""))
{
Value = "0";
}
}
if (Value.Equals(""))
{
Value = "null";
}
return Value;
}
//从LS拿数据同步到AFK中
public void getLStoAFK(DataRow[] performDr, bool isRightStop = false)
{
RefreshLogUIThread(string.Format("开始从LS传输数据:\r\n"));
RefreshLogUIThread(string.Format("开始传输:\r\n"));
string targetTab = string.Empty;//获取数据源sql对应的表名(ls数据库表名)
foreach (DataRow item in performDr)
{
try
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string directTagValue = (item["tabname"] + "").Contains("&") ? "8" : "2";//数据源传输成功后更改的directTag的值
string targetTabSql = item["targetTabSql"] + "";//去获得的数据sql
string synchroSql = (item["synchroSql"] + "").ToLower();//同步sql
string synLogSql = (item["synLogSql"] + "").ToLower();//同步到备份日志表中的sql
string afterSql = item["afterSql"] + "";//同步完成后执行的sql
targetTab = targetTabSql.Split('^')[0].Replace(" ", "");
//判断LS数据中有无标识列
string sql = string.Format(@"if not exists(select * from syscolumns
where id=object_id('{0}') and name='directTag')
begin
alter table {0} add directTag int not null default 0
end
", targetTab);
SqlHelper.ExecuteNonQuery(sql);
//中间表表名
string mainTableName = (item["synchroSql"] + "").Split('^')[0].Replace(" ", "");
sql = string.Format(@"select CASE when (select count(1)
FROM information_schema.COLUMNS
WHERE table_schema = '{0}'
and table_name = '{1}'
AND column_name = 'directTag') > 0
then '1'
else '2'
end
", afkDataBase.Text + "", mainTableName);
string jg = MySqlHelper.ExecuteScalar(sql) + "";
if (jg.Equals("2"))
{
//中间表添加标识列
sql = string.Format("alter table {0} add column directTag int;", mainTableName);
MySqlHelper.ExecuteNonQuery(sql);
}
//获得需要替换的数据
String replacementValue = synchroSql.Split('^')[2];
string[] replacementValues = replacementValue.Replace(" ", "").Split(',');
List<string> replacementValuesList = new List<string>(replacementValues);
//判断数据源是否有where条件
string conditions = string.Empty;
string[] sArray = targetTabSql.Split('^');
if (sArray.Length != 1)
{
conditions = " where " + sArray[1];
}
//获得拼接的主键对应条件
string[] synchroSqls = synchroSql.Split('^');
string modifyConditions = string.Empty;//修改sql条件
string[] modifyConditionsReplacementValue = null;//条件中要双方对应的属性
if (synchroSqls.Length == 4)
{
modifyConditions = synchroSqls[3];
modifyConditionsReplacementValue = modifyConditions.Split('=');
}
//是否有对应关联的主表
string relevanceSql = (item["relevanceSql"] + "").ToLower();
string associativeTableName = string.Empty;//相关联的主表
string[] associatedConditions = null;//关联条件
if (!string.IsNullOrWhiteSpace(relevanceSql))
{
associativeTableName = relevanceSql.Split('^')[0];
//第一个为主表字段,第二个为当前表字段
associatedConditions = relevanceSql.Split('^')[1].Split('=');
}
//数据库属性表
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", targetTab));
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", mainTableName));
//根据sql拿到数据源
sql = string.Format("select * from {0} {1}", sArray[0], conditions);
DataTable LsDataSource = SqlHelper.ExecuteDataTable(sql);
//要执行的sql
string allSql = string.Empty;//主表保存sql
string logAllSql = string.Empty;//日志备份表保存sql
List<string> errorRecordInformation = new List<string>();//报错时需要用到的信息
string updateAllSql = string.Empty;//保存后修改数据源tagid的全部sql
string modifyTheKey = string.Empty;//修改内容(tagid或tag_id
string associativeTableSql = string.Empty;//关联表在当前表成功后执行的sql
List<string> DatabaseValidationInformation = new List<string>();//数据库验证信息
RefreshLogUIThread(string.Format("正在传输: lserp >>>>> {0}\r\n", targetTab));
foreach (DataRow afkitem in LsDataSource.Rows)
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string backupReplaceField = string.Empty;
string newreplacementValue = string.Empty;
string insertSql = "insert into {0}({1}) values({2});";
string newModifyConditions = string.Empty;//对应的主键值
string dataSourcePrimaryKey = string.Empty;//数据源主键
string updateTagidSql = "update {0} set {1} {2};";//修改数据源tagid属性sql
if (LsDataSource.Columns.Contains("tagid"))
{
modifyTheKey = "tagid='5'";
}
else if (LsDataSource.Columns.Contains("tag_id"))
{
modifyTheKey = "tag_id='5'";
}
//是否有对应的主表
if (associatedConditions != null && associatedConditions.Length == 2 && !string.IsNullOrWhiteSpace(associativeTableName))
{
sql = string.Format("select directTag from {0} where {1}='{2}'", associativeTableName, associatedConditions[0], afkitem[associatedConditions[1]] + "");
if (!(SqlHelper.ExecuteScalar(sql) + "").Equals("8")) continue;
string updateDirectTagsql = string.Format("update {0} set directTag='2' where {1}='{2}'", associativeTableName, associatedConditions[0], afkitem[associatedConditions[1]] + "");
associativeTableSql = associativeTableSql + "\r\n" + updateDirectTagsql + " " + separator;
}
foreach (DataColumn column in LsDataSource.Columns)
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string value = afkitem[column.ColumnName.Replace(" ", "")] + "";
value = GetTheRealValue(column, value.Replace("'", "''"));
if (modifyConditionsReplacementValue != null && modifyConditionsReplacementValue.Length == 2)
{
if (column.ColumnName.Equals(modifyConditionsReplacementValue[1], StringComparison.OrdinalIgnoreCase))
{
newModifyConditions = " where " + modifyConditionsReplacementValue[0] + " ='" + value + "'";
dataSourcePrimaryKey = " where " + column.ColumnName + " ='" + value + "'";
}
}
int order = Array.IndexOf(replacementValues, column.ColumnName.ToLower());
//保存sql需要用到的真实值
if (order != -1)
{
if (value.Equals("null"))
{
replacementValuesList[order] = value;
}
else
{
replacementValuesList[order] = "'" + value + "'";
}
}
}
newreplacementValue = string.Join(",", replacementValuesList.ToArray());
//获得要添加的列,并新增同步列(“directTag”)
string NewreplacementField = synchroSql.Split('^')[1];
string dateTime = DateTime.Now.ToString();
newreplacementValue = Regex.Replace(newreplacementValue, @"getdate\(\)", "now()", RegexOptions.IgnoreCase);
insertSql = string.Format(insertSql, mainTableName, NewreplacementField + ",directTag", newreplacementValue + ",'1'");
allSql = allSql + "\r\n" + insertSql + " " + separator; ;
updateTagidSql = string.Format(updateTagidSql, targetTab, modifyTheKey, dataSourcePrimaryKey);
updateAllSql = updateAllSql + "\r\n" + updateTagidSql + " " + separator;
errorRecordInformation.Add(newModifyConditions.Replace("where ", ""));
//判断数据是否符合规范
DatabaseValidationInformation.Add(IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, afkitem, replacementValue, NewreplacementField, DataDirection.LsToAfk));
//备份sql
//if (string.IsNullOrWhiteSpace(synLogSql)) continue;
//string backupTableName = string.Empty;//备份表表名
//string[] synLog = (item["synLogSql"] + "").Split('^');
//string backupSql = "insert into {0}({1}) values({2});";//备份sql
//backupSql = string.Format(backupSql, synLog[0], NewreplacementField + "," + synLog[1], newreplacementValue + "," + synLog[2].Replace("GETDATE()", "'" + dateTime + "'"));//Regex.Replace( synLog[2], dateTime, "GETDATE()", RegexOptions.IgnoreCase)
//logAllSql = logAllSql + "\r\n" + backupSql + " " + separator; ;
}
try
{
if (!string.IsNullOrWhiteSpace(allSql))
{
MySqlHelper.ExecuteNonQuery(allSql.Replace(separator, ""));
sql = string.Format("update {0} set directTag='2' where directTag='1'", mainTableName);
MySqlHelper.ExecuteNonQuery(sql);
}
//同步日志
//if (!string.IsNullOrWhiteSpace(logAllSql))
//{
// MySqlHelper.ExecuteNonQuery(logAllSql.Replace(separator, "").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
// sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "批量增加,表名:" + mainTableName, "GETDATE()", "正常", "", "AFK");
// SqlHelper.ExecuteNonQuery(sql);
//}
if (!string.IsNullOrWhiteSpace(updateAllSql))
{
//SqlHelper.ExecuteNonQuery(updateAllSql.Replace(separator, ""));
}
if (!string.IsNullOrWhiteSpace(associativeTableSql))
{
SqlHelper.ExecuteNonQuery(associativeTableSql.Replace(separator, ""));
}
sql = string.Format("update {0} set directTag='{2}' {1}", targetTab, conditions, directTagValue);
SqlHelper.ExecuteNonQuery(sql);
RefreshLogUIThread(string.Format("{0}=========》传输成功:\r\n", targetTab));
}
catch (Exception ex)
{
if (!string.IsNullOrWhiteSpace(associativeTableSql))
{
//不管报错先把主表中的directTag改了,单条执行时报错时在改回来
SqlHelper.ExecuteNonQuery(associativeTableSql.Replace(separator, ""));
}
sql = string.Format("delete from {0} where directTag='1'", mainTableName);
MySqlHelper.ExecuteNonQuery(sql);
//string[] logAllSqls = logAllSql.Split(new string[] { separator }, StringSplitOptions.None);
string[] allSqls = allSql.Split(new string[] { separator }, StringSplitOptions.None);
// string[] updatesqls = updateAllSql.Split(new string[] { separator }, StringSplitOptions.None);
string[] associativeTableSqls = associativeTableSql.Split(new string[] { separator }, StringSplitOptions.None);
string primaryKey = string.Empty;//主键值
string RollBackSql = string.Empty;
for (int i = 0; i < allSqls.Length - 1; i++)
{
try
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
if (!string.IsNullOrWhiteSpace(errorRecordInformation[i]))//
{
primaryKey = errorRecordInformation[i];
if (!string.IsNullOrWhiteSpace(conditions))
{
RollBackSql = string.Format("update {0} set directTag='{2}' {1} and {3}", targetTab, conditions, directTagValue, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
SqlHelper.ExecuteNonQuery(RollBackSql);
}
else
{
RollBackSql = string.Format("update {0} set directTag='{2}' {1} where {3}", targetTab, conditions, directTagValue, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
SqlHelper.ExecuteNonQuery(RollBackSql);
}
}
MySqlHelper.ExecuteNonQuery(allSqls[i]);
//if (logAllSqls.Length > i) MySqlHelper.ExecuteNonQuery(logAllSqls[i].Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
//SqlHelper.ExecuteNonQuery(updatesqls[i].Replace(separator, ""));
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + mainTableName + "表,主键" + primaryKey.Replace("'", "''"), "GETDATE()", "正常", "", "AFK");
//SqlHelper.ExecuteNonQuery(sql);
}
catch (Exception newEx)
{
string errorMessage = string.IsNullOrWhiteSpace(DatabaseValidationInformation[i]) ? newEx.Message.Replace("'", "''") : DatabaseValidationInformation[i];
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", mainTableName, primaryKey.Split('=')[1].Replace("'", ""), "AFK获取朗速数据错误:" + errorMessage + "", primaryKey.Split('=')[0]);
SqlHelper.ExecuteNonQuery(sql);
if (!string.IsNullOrWhiteSpace(primaryKey))//
{
if (!string.IsNullOrWhiteSpace(conditions))
{
RollBackSql = string.Format("update {0} set directTag='3' {1} and {2}", targetTab, conditions, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
SqlHelper.ExecuteNonQuery(RollBackSql);
}
else
{
RollBackSql = string.Format("update {0} set directTag='3' {1} where {2}", targetTab, conditions, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
SqlHelper.ExecuteNonQuery(RollBackSql);
}
}
//有对应主表,并且当前明细表的行sql报错,回滚主表directTag值
if (associativeTableSqls.Length > i && !string.IsNullOrWhiteSpace(associativeTableSqls[i]))
{
string[] newAssociatedConditions = associativeTableSqls[i].Split(new string[] { "where" }, StringSplitOptions.None);
sql = string.Format("update {0} set directTag='8' where {1}", associativeTableName, newAssociatedConditions[1]);
SqlHelper.ExecuteNonQuery(sql);
}
//SqlHelper.ExecuteNonQuery(updatesqls[i].Replace(separator, "").Replace("5", "3"));
}
}
if (string.IsNullOrWhiteSpace(modifyConditions))
{
RollBackSql = string.Format("update {0} set directTag='2' {1} ", targetTab, conditions);
SqlHelper.ExecuteNonQuery(RollBackSql);
}
RefreshLogUIThread(string.Format("{0}{1}=========》部分传输失败:\r\n", targetTab, ex.Message));
//修改中间主表中的同步中内容
RollBackSql = string.Format("update {0} set directTag='2' where directTag='1'", mainTableName);
MySqlHelper.ExecuteNonQuery(RollBackSql);
}
//执行同步完成后的sql
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
}
catch (Exception ex)
{
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", targetTab, "AFK获取朗速数据错误:" + ex.Message.Replace("'", "''") + "");
SqlHelper.ExecuteNonQuery(sql);
}
}
}
#region 测试汇总单条执行方法
/// <summary>
/// 数据传递方向
/// </summary>
public enum DataDirection : int
{
LsToAfk = 1,
AfkToLs = 0
}
#region 同步数据单条执行
public void SynchroDataSingle(DataTable synchronousTable, DataDirection dataDirection, bool isRightStop = false)
{
string selectCond = string.Format("directionTag='{0}'", ((int)dataDirection));
DataRow[] performDr = synchronousTable.Select(selectCond);//需要执行的数据条数
RefreshLogUIThread(string.Format("开始从{0}获取数据:\r\n", dataDirection == 0 ? "中航爱福客" : "朗速"));
RefreshLogUIThread(string.Format("开始同步:\r\n"));
foreach (DataRow item in performDr)//循环需要同步的表
{
if (isStop && !isRightStop)
{
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
StopMethod();
}
string[] targetStrs = (item["targetTabSql"] + "").ToLower().Split('^');//数据源字段解析
string[] synchroStrs = (item["synchroSql"] + "").ToLower().Split('^');//同步字段解析
string[] synLogStrs = (item["synLogSql"] + "").ToLower().Split('^');//同步日志表字段解析
string[] primaryKeys = null;
if (synchroStrs.Length == 4)
{
primaryKeys = synchroStrs[3].Replace(" ", "").Split('=');
}
#region 中航方相关信息
string afkTabName = dataDirection == 0 ? targetStrs[0].Replace(" ", "") : synchroStrs[0].Replace(" ", "");//表名
string afkTargeFields = dataDirection == 0 ? synchroStrs[2].Replace(" ", "") : synchroStrs[1].Replace(" ", "");//字段名
string afkPrimaryKey = dataDirection == 0 ? (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[1] : "") : (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[0] : "");
#endregion
#region 朗速方相关信息
string lsTabName = dataDirection == 0 ? synchroStrs[0].Replace(" ", "") : targetStrs[0].Replace(" ", "");
string lsTargeFields = dataDirection == 0 ? synchroStrs[1].Replace(" ", "") : synchroStrs[2].Replace(" ", "");
string lsPrimaryKey = dataDirection == 0 ? (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[0] : "") : (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[1] : "");
#endregion
#region 日志表相关信息
string logTabName = synLogStrs.Length == 3 ? synLogStrs[0].Replace(" ", "") : "";
string[] logFields = synLogStrs.Length == 3 ? synLogStrs[1].Replace(" ", "").Split(',') : null;
string[] logAsFields = synLogStrs.Length == 3 ? synLogStrs[2].Replace(" ", "").Split(',') : null;
string logSucceeId = "";
string logErrorType = "";
string logErrorMessage = "";
#endregion
#region 其他信息
string afterSql = (item["afterSql"] + "").ToLower();//同步完成后执行的sql
string disableFieids = (item["disableField"] + "").ToLower();//tagid是3或者4,指定字段改变
//数据库属性表
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", lsTabName));
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", afkTabName));
#endregion
int ErrorNumber = 0;
try
{
string lsExistTagStr = string.Format(@"if not exists(select * from syscolumns
where id=object_id('{0}') and name='directTag')
begin
alter table {0} add directTag int
end", lsTabName);
SqlHelper.ExecuteNonQuery(lsExistTagStr);//判断朗速方是否存在同步完成字段
string afkExistTagStr = string.Format(@"select CASE when (select count(1)
FROM information_schema.COLUMNS
WHERE table_schema = '{0}'
and table_name = '{1}'
AND column_name = 'isSynchro') > 0
then '1'
else '2'
end
", afkDataBase.Text + "", afkTabName);
string afkExistResult = MySqlHelper.ExecuteScalar(afkExistTagStr) + "";//判断中航方有无标识列
if (afkExistResult.Equals("2"))
{
string afkAddTagStr = string.Format("alter table {0} add column isSynchro varchar(30);", afkTabName); //如果不存在则添加标识列
MySqlHelper.ExecuteNonQuery(afkAddTagStr);
}
//判断数据源是否有where条件,
string sourceWhereCond = string.Empty;//获取数据源where条件
if (targetStrs.Length == 1)
sourceWhereCond = dataDirection == 0 ? "where isSynchro=1" : " where directTag<>2";//数据源是afk则默认条件字段没有意义,数据源是ls则需获取默认条件字段不为2的数据
else
sourceWhereCond = string.Format(" where {0}", dataDirection == 0 ? targetStrs[1] + " and isSynchro=1 " : targetStrs[1]);
#region 获取数据源
//如果是ls获取数据,要先把数据源中当前的全部数据的isSynchro变为1
if (dataDirection == 0)
{
string conditions = string.Empty;
conditions = targetStrs.Length == 2 ? " where " + targetStrs[1] : "";
string sql = string.Format("update {0} set isSynchro='1' {1}", afkTabName, conditions);
MySqlHelper.ExecuteNonQuery(sql);
}
string sourceTabNale = dataDirection == 0 ? afkTabName : lsTabName;//数据源表名
string getSourceTabName = dataDirection == 0 ? lsTabName : afkTabName;//接受数据表表名
string sourceSelectFields = dataDirection == 0 ? afkTargeFields : lsTargeFields;//数据源字段
if (sourceSelectFields.Contains("getdate()"))//处理各种特殊字段
sourceSelectFields = sourceSelectFields.Replace("getdate()", dataDirection == 0 ? "now() as as_senddate" : "getdate() as as_senddate");
if (sourceSelectFields.Contains("#add$_"))
sourceSelectFields = sourceSelectFields.Replace("#add$_", "");
string selectSourceSql = string.Format("select {0} from {1}{2}", sourceSelectFields, sourceTabNale, sourceWhereCond);//查询数据源sql
DataTable sourceTab = dataDirection == 0 ? MySqlHelper.ExecuteDataTable(selectSourceSql) : SqlHelper.ExecuteDataTable(selectSourceSql);//获取数据源
#endregion
RefreshLogUIThread(string.Format("正在同步: {0} {2} >>>>> {1} {3}\r\n", dataDirection == 0 ? "中航爱福客" : "朗速", dataDirection == 0 ? "朗速" : "中航爱福客", dataDirection == 0 ? afkTabName : lsTabName, dataDirection == 0 ? lsTabName : afkTabName));
string modeOfOperation = sourceTab.Columns.Contains("tagid") ? "tagid" : sourceTab.Columns.Contains("tag_id") ? "tag_id" : "";//获取执方式的字段
string dataTransferSql = "";//执行数据传递sql
string dataTransferLogSql = "";//接收数据需要向中间表写日志
string lsErrorLogSqlStr = "";//朗速日志表
ErrorNumber = 0;
if (!string.IsNullOrEmpty(modeOfOperation))
{
IEnumerable<IGrouping<string, DataRow>> resultGroup = sourceTab.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr[modeOfOperation] + "");//C# 对DataTable中的某列分组,result中的Key是分组后的值
foreach (IGrouping<string, DataRow> afkTagGroup in resultGroup)//按tagid分组
{
switch (afkTagGroup.Key)
{
case "1"://传递新增
#region 新增
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
bool pushLog = false;
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
//判断是否有不能为空的数据
string SaveErrorMessage = IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, sourceRow, lsTargeFields, afkTargeFields, dataDirection);
if (!string.IsNullOrWhiteSpace(SaveErrorMessage))
{
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = SaveErrorMessage;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
continue;
}
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
if (dataDirection == 0 && IsExistPrimaryValue(sourceRow, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, dataDirection))//朗速获取数据前应判断主键是否存在,执行前
{
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = string.Format("主键值{0}已存在", primaryValue);
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", string.Format("主键值{0}已存在", primaryValue), dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
continue;
}
int result = dataDirection == 0 ? SqlHelper.ExecuteNonQuery(dataTransferSql) : MySqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
{
if (!string.IsNullOrWhiteSpace(afterSql))
{
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
string execsql = "";
string type = "";
if (afterTab != null && afterTab.Rows.Count > 0)
{
DataRow afterRow = afterTab.Rows[0];
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
}
string afterReturnMsg = execsql;
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
{
afterReturnMsg = BillOutPush(sourceRow, type);
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
}
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
{
if (afterReturnMsg.Equals("99999"))
{
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = "未检测到明细表数据";
updateIssychro(sourceTabNale, sourcePrimaryKey, sourceRow);
pushLog = true;
continue;
}
logErrorMessage = afterReturnMsg;
logSucceeId = "2";
logErrorType = "1";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
}
}
}
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
//LS》AFK要处理双方数据的directTag问题
if (dataDirection == DataDirection.LsToAfk)
{
//把传输的数据directTag改为2
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
MySqlHelper.ExecuteNonQuery(sql);
//把ls数据库中已经传输的数据directTag改为2
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
}
#region 处理中间表写入日志
if (synLogStrs.Length == 3)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
if (!pushLog)
{
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
}
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
#endregion
}
}
#endregion
break;
case "2"://传递修改
#region 修改
if (dataDirection == 0)
{
#region 修改朗速为修改语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertLogKeysStr = "";//insert日志语句keys
string insertLogValuesStr = "";//insert日志语句values
try
{
dataTransferSql = "update {0} set {1} where {2}";
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetUpdateSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
{
if (!string.IsNullOrWhiteSpace(afterSql))
{
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
string execsql = "";
string type = "";
if (afterTab != null && afterTab.Rows.Count > 0)
{
DataRow afterRow = afterTab.Rows[0];
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
}
string afterReturnMsg = execsql;
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
{
afterReturnMsg = BillOutPush(sourceRow, type);
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
}
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
{
logErrorMessage = afterReturnMsg;
logSucceeId = "2";
logErrorType = "1";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
}
}
}
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
#region 处理中间表写入日志
if (synLogStrs.Length == 3 && dataDirection == 0)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
#endregion
}
}
#endregion
}
else
{
#region 修改爱福客为新增语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
//LS》AFK要处理双方数据的directTag问题
//把传输的数据directTag改为2
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
MySqlHelper.ExecuteNonQuery(sql);
//把ls数据库中已经传输的数据directTag改为2
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
#endregion
}
}
#endregion
}
#endregion
break;
case "3"://更改状态,禁用,上下架等
#region 更改状态,禁用,上下架等
if (dataDirection == 0)
{
#region 修改朗速为修改语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertLogKeysStr = "";//insert日志语句keys
string insertLogValuesStr = "";//insert日志语句values
string[] disableFieidsArgs = disableFieids.Replace(" ", "").Split('^');
string stateField = disableFieidsArgs[0];//3对应第一个状态
try
{
dataTransferSql = "update {0} set {1} where {2}";
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetChangeStateSqlStr(sourceRow, stateField, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
{
if (!string.IsNullOrWhiteSpace(afterSql))
{
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
string execsql = "";
string type = "";
if (afterTab != null && afterTab.Rows.Count > 0)
{
DataRow afterRow = afterTab.Rows[0];
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
}
string afterReturnMsg = execsql;
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
{
afterReturnMsg = BillOutPush(sourceRow, type);
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
}
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
{
logErrorMessage = afterReturnMsg;
logSucceeId = "2";
logErrorType = "1";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
}
}
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
}
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
#region 处理中间表写入日志
if (synLogStrs.Length == 3)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
#endregion
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
}
}
#endregion
}
else
{
#region 修改爱福客为新增语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
//LS》AFK要处理双方数据的directTag问题
//把传输的数据directTag改为2
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
MySqlHelper.ExecuteNonQuery(sql);
//把ls数据库中已经传输的数据directTag改为2
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
#endregion
}
}
#endregion
}
#endregion
break;
case "4":
#region 更改状态,禁用,上下架等
if (dataDirection == 0)
{
#region 修改朗速为修改语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertLogKeysStr = "";//insert日志语句keys
string insertLogValuesStr = "";//insert日志语句values
string[] disableFieidsArgs = disableFieids.Replace(" ", "").Split('^');
string stateField = disableFieidsArgs[1];//4对应第二个状态
try
{
dataTransferSql = "update {0} set {1} where {2}";
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetChangeStateSqlStr(sourceRow, stateField, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
{
if (!string.IsNullOrWhiteSpace(afterSql))
{
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
string execsql = "";
string type = "";
if (afterTab != null && afterTab.Rows.Count > 0)
{
DataRow afterRow = afterTab.Rows[0];
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
}
string afterReturnMsg = execsql;
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
{
afterReturnMsg = BillOutPush(sourceRow, type);
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
}
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
{
logErrorMessage = afterReturnMsg;
logSucceeId = "2";
logErrorType = "1";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
}
}
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
}
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
#region 处理中间表写入日志
if (synLogStrs.Length == 3)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
#endregion
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
}
}
#endregion
}
else
{
#region 修改爱福客为新增语句
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
//LS》AFK要处理双方数据的directTag问题
//把传输的数据directTag改为2
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
MySqlHelper.ExecuteNonQuery(sql);
//把ls数据库中已经传输的数据directTag改为2
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
#endregion
}
}
#endregion
}
#endregion
break;
case ""://没有可执行的操作
#region 没有可执行的操作
foreach (DataRow sourceRow in afkTagGroup)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = string.Format("{0}为空,没有可执行的操作", modeOfOperation);
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", string.Format("{0}为空,没有可执行的操作", modeOfOperation), dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
#region 处理中间表写入日志
if (synLogStrs.Length == 3)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
#endregion
}
}
#endregion
break;
}
}
}
else
{
#region 没有标识字段默认新增
foreach (DataRow sourceRow in sourceTab.Rows)
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
lsErrorLogSqlStr = "";
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeysStr = "";//insert语句keys
string insertValuesStr = "";//insert语句values
try
{
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
int result = dataDirection == 0 ? SqlHelper.ExecuteNonQuery(dataTransferSql) : MySqlHelper.ExecuteNonQuery(dataTransferSql);
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";//执行成功
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
{
if (!string.IsNullOrWhiteSpace(afterSql))
{
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
string execsql = "";
string type = "";
if (afterTab != null && afterTab.Rows.Count > 0)
{
DataRow afterRow = afterTab.Rows[0];
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
}
string afterReturnMsg = execsql;
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
{
afterReturnMsg = BillOutPush(sourceRow, type);
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
{
logSucceeId = "1";
logErrorType = "0";
logErrorMessage = "";
}
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
{
logErrorMessage = afterReturnMsg;
logSucceeId = "2";
logErrorType = "1";
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
}
}
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
}
}
catch (Exception ex)
{
ErrorNumber++;
logSucceeId = "2";
logErrorType = "1";
logErrorMessage = ex.Message.Replace("'", "''");
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
}
finally
{
#region 处理中间表写入日志
if (synLogStrs.Length == 3)
{
try
{
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
}
catch (Exception ex)
{
ErrorNumber++;
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
}
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
}
#endregion
}
}
#endregion
}
//删除
if (dataDirection == 0)
{
string deleteSql = string.Format("delete from {0} where isSynchro='1'", afkTabName);
if (this.deleteCheck.Checked)
{
MySqlHelper.ExecuteNonQuery(deleteSql);
}
}
}
catch (Exception ex)
{
string direction = dataDirection == 0 ? "朗速获取AFK数据错误" : "AFK获取朗速数据错误";
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", lsTabName, direction + "" + ex.Message.Replace("'", "''") + "");
SqlHelper.ExecuteNonQuery(sql);
}
finally
{
RefreshLogUIThread("同步完成,失败条数:" + ErrorNumber + "\r\n");
}
}
}
#endregion
#region MyRegion
private void updateIssychro(string dataName, string primary, DataRow sourceRow)
{
string primaryValue = !string.IsNullOrEmpty(primary) ? sourceRow[primary] + "" : "";
string sql = "update {0} set issynchro ='0' where {1}='{2}'";
sql = string.Format(sql, dataName, primary, primaryValue);
MySqlHelper.ExecuteNonQuery(sql);
}
#endregion
#region 反写固定存储过程些入出库单
/// <summary>
/// 反写固定存储过程些入出库单
/// </summary>
/// <param name="name">数据行中name字段</param>
/// <param name="logisticsid">数据行中logisticsid字段</param>
/// <returns></returns>
public static string BillOutPush(DataRow sourceRow, string type)
{
string name = sourceRow.Table.Columns.Contains("name") ? sourceRow["name"] + "" : "";
string logisticsid = sourceRow.Table.Columns.Contains("logisticsid") ? sourceRow["logisticsid"] + "" : "";
string operatorName = "管理员", operatorId = "1";
if (!string.IsNullOrEmpty(name))
{
string sql = string.Format("select employeeid,employeename from p_employeetab where employeename = '{0}'", name);
DataTable DataOperTable = SqlHelperOther.ExecuteDataTable(sql);
if (DataOperTable.Rows.Count > 0)
{
operatorId = DataOperTable.Rows[0]["employeeid"] + "";
operatorName = DataOperTable.Rows[0]["employeename"] + "";
}
}
SqlParameter msg = new SqlParameter("@msg", SqlDbType.VarChar, 3000);
msg.Direction = ParameterDirection.Output;
List<SqlParameter> list = new List<SqlParameter>
{
new SqlParameter("@nbgys",SqlDbType.VarChar,10),
new SqlParameter("@type",SqlDbType.Int,4),
new SqlParameter("@keyvalue",SqlDbType.VarChar,200),
new SqlParameter("@operatorId",SqlDbType.Int,4),
new SqlParameter("@operatorName",SqlDbType.VarChar,20),
msg,
};
SqlParameter[] param = list.ToArray();
param[0].Value = "e25d5dd2b4b74dd99f79227d8db5b4c7";
param[1].Value = type;
param[2].Value = logisticsid;
param[3].Value = operatorId;
param[4].Value = operatorName;
param[5].Value = "";
try
{
SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "wms_createbillpr", "billpr", param);
}
catch (Exception)
{
return msg.Value + "";
}
return msg.Value + "";
}
#endregion
#region 判断主键值是否已经存在
private bool IsExistPrimaryValue(DataRow sourceRow, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, DataDirection dataDirection)
{
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
if (!string.IsNullOrEmpty(primaryValue))
{
string isExistSql = string.Format("select * from {0} where {1}='{2}'", getSourceTabName, getSourcePrimaryKey, primaryValue);
DataTable resultTab = new DataTable();
if (dataDirection == 0)
resultTab = SqlHelper.ExecuteDataTable(isExistSql);
else
resultTab = MySqlHelper.ExecuteDataTable(isExistSql);
if (resultTab.Rows.Count > 0)
return true;
else
return false;
}
else
return false;
}
#endregion
#region 判断值是否可以为空
//sql表格属性表 mysql表格属性表 行数据 ls数据库中的列 afk列 方向
private string IsValueBlank(DataTable SQLQueryPropertySheet, DataTable MYSQLPropertySheet, DataRow sourceRow, string LsColumnName, string AfkColumnName, DataDirection dataDirection)
{
string key = string.Empty;
string Value = string.Empty;
string SaveErrorMessage = string.Empty;//提示信息
//判断存入的值是否为空
string[] LsColumnNames = LsColumnName.Split(',');
string[] AfkColumnNames = AfkColumnName.Split(',');
for (int i = 0; i < AfkColumnNames.Length - 1; i++)
{
//获取数据源中当前列名
key = (dataDirection == 0) ? (AfkColumnNames[i] + "").Trim() : (LsColumnNames[i] + "").Trim();
if (key.Contains("getdate()")) continue;
//获取AFK列名或注释
DataRow[] ListOfAttributes = MYSQLPropertySheet.Select("Field='" + (AfkColumnNames[i] + "").Trim() + "'");
string name = AfkColumnNames[i];
if ((!string.IsNullOrWhiteSpace(ListOfAttributes[0]["Comment"] + "")) && (ListOfAttributes[0]["Comment"] + "").Length < 5)
{
name = ListOfAttributes[0]["Comment"] + "";
}
//当前列的值
Value = sourceRow[key] + "";
//判断是否为空
if (dataDirection == 0)
{
SaveErrorMessage += DatabaseFormatJudgment.SQLQueryVerification(SQLQueryPropertySheet, (LsColumnNames[i] + "").Trim(), Value, name);
}
else
{
SaveErrorMessage += DatabaseFormatJudgment.MYSqlVerification(MYSQLPropertySheet, (AfkColumnNames[i] + "").Trim(), Value, name);
}
}
return SaveErrorMessage;
}
#endregion
#region 获取insert语句
private void GetInsertSqlStr(DataRow sourceRow, string getSourceKeys, string afkTargeFields, string getSourceTabName, out string insertKeysStr, out string insertValuesStr, out string dataTransferSql, DataDirection dataDirection)
{
string insertKeys = "";
string insertValues = "";
string afkTargeFieldKey = "";
string insertSql = "insert into {0} ({1}) values ({2})";
string[] getSourceKeysList = getSourceKeys.Split(',');
string[] afkTargeFieldsList = afkTargeFields.Split(',');
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
{
string intermediateLogKey = afkTargeFieldsList[i];
string getSourceKey = getSourceKeysList[i];
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
string sourceValue = sourceRow[sourceKey] + "";
if (sourceValue.Contains("'"))
sourceValue = sourceValue.Replace("'", "''");
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
if (getSourceKey.Contains("#add$_"))
{
getSourceKey = getSourceKey.Replace("#add$_", "");
afkTargeFieldKey = afkTargeFieldKey.Replace("#add$_", "");
}
insertKeys += string.Format("{0},", getSourceKey);
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
}
insertKeysStr = afkTargeFieldKey;
insertValuesStr = insertValues;
//dataTransferSql = string.Format(insertSql, getSourceTabName, insertKeys.TrimEnd(','), insertValues.TrimEnd(','));
dataTransferSql = dataDirection == 0 ? string.Format(insertSql, getSourceTabName, insertKeys + "directTag", insertValues + "2") : string.Format(insertSql, getSourceTabName, insertKeys.TrimEnd(','), insertValues.TrimEnd(','));
}
#endregion
#region 获取update语句
private void GetUpdateSqlStr(DataRow sourceRow, string getSourceKeys, string afkTargeFields, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, out string insertLogKeysStr, out string insertLogValuesStr, out string dataTransferSql)
{
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeys = "";
string insertValues = "";
string updateKeyValues = "";
string afkTargeFieldKey = "";
string updateSql = "update {0} set {1} where {2}";
string[] getSourceKeysList = getSourceKeys.Split(',');
string[] afkTargeFieldsList = afkTargeFields.Split(',');
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
{
string getSourceKey = getSourceKeysList[i];
string intermediateLogKey = afkTargeFieldsList[i];
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
string sourceValue = sourceRow[sourceKey] + "";
if (sourceValue.Contains("'"))
sourceValue = sourceValue.Replace("'", "''");
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
if (getSourceKey.Contains("#add$_"))
{
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
insertKeys += string.Format("{0},", getSourceKey);
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
continue;
}
updateKeyValues += sourceValue.Equals("null") ? string.Format("{0}={1},", getSourceKey, sourceValue) : string.Format("{0}='{1}',", getSourceKey, sourceValue);
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
insertKeys += string.Format("{0},", getSourceKey);
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
}
insertLogKeysStr = afkTargeFieldKey;
insertLogValuesStr = insertValues;
string updateCond = string.Format("{0}='{1}'", getSourcePrimaryKey, primaryValue);
dataTransferSql = string.Format(updateSql, getSourceTabName, updateKeyValues.TrimEnd(','), updateCond);
}
#endregion
#region 获取改变状态语句
private void GetChangeStateSqlStr(DataRow sourceRow, string stateFieid, string getSourceKeys, string afkTargeFields, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, out string insertLogKeysStr, out string insertLogValuesStr, out string dataTransferSql)
{
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
string insertKeys = "";
string insertValues = "";
string afkTargeFieldKey = "";
string updateSql = "update {0} set {1} where {2}";
string[] getSourceKeysList = getSourceKeys.Split(',');
string[] afkTargeFieldsList = afkTargeFields.Split(',');
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
{
string getSourceKey = getSourceKeysList[i];
string intermediateLogKey = afkTargeFieldsList[i];
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
string sourceValue = sourceRow[sourceKey] + "";
if (sourceValue.Contains("'"))
sourceValue = sourceValue.Replace("'", "''");
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
if (getSourceKey.Contains("#add$_"))
getSourceKey = getSourceKey.Replace("#add$_", "");
if (intermediateLogKey.Contains("#add$_"))
intermediateLogKey = intermediateLogKey.Replace("#add$_", "");
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
insertKeys += string.Format("{0},", getSourceKey);
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
}
insertLogKeysStr = afkTargeFieldKey;
insertLogValuesStr = insertValues;
string updateCond = string.Format("{0}='{1}'", getSourcePrimaryKey, primaryValue);
dataTransferSql = string.Format(updateSql, getSourceTabName, stateFieid, updateCond);
}
#endregion
#region 获取logInsert语句
private void GetLogSqlStr(string[] logFields, string[] logAsFields, string[] logArgs, string insertKeysStr, string insertValuesStr, string logTabName, out string dataTransferLogSql)
{
string insertLogKeys = insertKeysStr;
string insertLogValues = insertValuesStr;
string logSqlStr = "insert into {0} ({1}) values ({2})";
for (int i = 0; i < logAsFields.Length; i++)
{
string logField = logFields[i];
string logAsField = logAsFields[i];
insertLogKeys += string.Format("{0},", logField);
if (logAsField.Equals("getdate()", StringComparison.OrdinalIgnoreCase))
insertLogValues += string.Format("{0},", "now()");
else if (logAsField.Equals("@transferLogo", StringComparison.OrdinalIgnoreCase))
insertLogValues += string.Format("'{0}',", logArgs[0]);
else if (logAsField.Equals("@errortype", StringComparison.OrdinalIgnoreCase))
insertLogValues += string.Format("'{0}',", logArgs[1]);
else if (logAsField.Equals("@errormessage", StringComparison.OrdinalIgnoreCase))
insertLogValues += string.Format("'{0}',", logArgs[2]);
else
insertLogValues += string.Format("{0},", "null");
}
dataTransferLogSql = string.Format(logSqlStr, logTabName, insertLogKeys.TrimEnd(','), insertLogValues.TrimEnd(','));
}
#endregion
#region 替换行数据
public string ReplaceRowValue(string defaultValue, DataRow row)
{
if (!string.IsNullOrWhiteSpace(defaultValue))
{
var paramList = GetParamFields(defaultValue);
foreach (string item in paramList)
{
string field = item.Replace("}", "").Replace("{", "").ToLower();
string value = row.Table.Columns.Contains(field) ? row[field] + "" : "";
defaultValue = defaultValue.Replace(item, value);
}
}
return defaultValue;
}
public List<string> GetParamFields(string defaultValue)
{
List<string> list = new List<string>();
Regex regex = new Regex("{([^{])+}");
MatchCollection mcs = regex.Matches(defaultValue);
foreach (Match item in mcs)
{
if (list.IndexOf(item.Value) == -1)
list.Add(item.Value);
}
return list;
}
#endregion
#endregion
/// <summary>
/// <para>说明:获取中间表的主键值,没有就创建标识列</para>
/// <para>创建人:</para>
/// <para>创建日期: </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns></returns>
public static string MysqlGetPrimaryKey(string TableName)
{
string PrimaryKeyName = string.Empty;
string sql = string.Format(" SHOW KEYS FROM {0} WHERE Key_name = 'PRIMARY'", TableName);
DataTable dt = MySqlHelper.ExecuteDataTable(sql);
if (dt != null && dt.Rows.Count > 0)
{
PrimaryKeyName = dt.Rows[0]["Column_name"] + "";
}
if (string.IsNullOrWhiteSpace(PrimaryKeyName))
{
//没有主键就创建自增长列
sql = string.Format(@"alter table {0} add AutoPrimaryKey BIGINT;
alter table {0} change AutoPrimaryKey AutoPrimaryKey BIGINT not null auto_increment primary key; ", TableName);
MySqlHelper.ExecuteNonQuery(sql);
PrimaryKeyName = "AutoPrimaryKey";
}
return PrimaryKeyName;
}
/// <summary>
/// <para>说明:获取表的主键值</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-05-07 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns></returns>
public static string GetPrimaryKey(string TableName)
{
string sqlValue = string.Format("SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{0}'", TableName);
DataTable dtTable = SqlHelper.ExecuteDataTable(sqlValue);
return (dtTable.Rows.Count > 0) ? dtTable.Rows[0]["COLUMN_NAME"] + "" : string.Empty;
}
/// <summary>
/// 暂停方法监测
/// </summary>
public void StopMethod()
{
if (isStop)
{
System.Threading.Thread.Sleep(1000);
StopMethod();
}
}
/// <summary>
/// 主线程刷新数据
/// </summary>
/// <param name="msg"></param>
public void RefreshLog(string msg)
{
txtLog.Text += msg;
txtLog.Select(txtLog.TextLength, 0);
txtLog.ScrollToCaret();
}
/// <summary>
/// 后台线程刷新数据
/// </summary>
/// <param name="msg"></param>
public void RefreshLogUIThread(string msg)
{
Invoke((EventHandler)delegate
{
if (msg.Equals("清空"))
{
txtLog.Clear();
txtLog.Select(txtLog.TextLength, 0);
txtLog.ScrollToCaret();
}
else
{
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.lsSeverId.Text.Trim();//地址
string dbName = this.lsDataBase.Text.Trim();//数据库名
string user = this.lsName.Text.Trim();//用户名
string password = this.lsPassword.Text.Trim();//密码
if (string.IsNullOrWhiteSpace(serverName))
{
MessageUtil.Show("请重新输入朗速数据库地址");
return false;
}
if (string.IsNullOrWhiteSpace(dbName))
{
MessageUtil.Show("请重新输入朗速数据库库名");
return false;
}
if (string.IsNullOrWhiteSpace(user))
{
MessageUtil.Show("请重新输入朗速数据库用户名");
return false;
}
// 测试数据库连接
try
{
if (ConnectingToDatabase())
{
if (isSave)
{
}
else
{
IniHelper.Write("LS", "serverName", serverName);
IniHelper.Write("LS", "dbName", dbName);
IniHelper.Write("LS", "user", user);
IniHelper.Write("LS", "password", password);
RefreshLogUIThread(DateTime.Now + "朗速数据库连接成功.\r\n");
return true;
}
}
else
{
MessageUtil.Show("连接失败,请检查朗速方配置");
return false;
}
}
catch (Exception ex)
{
MessageUtil.Show("连接失败,请检查朗速方配置");
}
return true;
}
/// <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 ConnectServerOther(bool isSave = false)
{
string serverName = this.lsSeverId.Text.Trim();//地址
string dbName = this.lsDataBase.Text.Trim();//数据库名
string user = this.lsName.Text.Trim();//用户名
string password = this.lsPassword.Text.Trim();//密码
if (string.IsNullOrWhiteSpace(serverName))
{
MessageUtil.Show("请重新输入朗速数据库地址");
return false;
}
if (string.IsNullOrWhiteSpace(dbName))
{
MessageUtil.Show("请重新输入朗速数据库库名");
return false;
}
if (string.IsNullOrWhiteSpace(user))
{
MessageUtil.Show("请重新输入朗速数据库用户名");
return false;
}
// 测试数据库连接
try
{
if (ConnectingToDatabaseOther())
{
if (isSave)
{
}
else
{
IniHelper.Write("LS", "serverName", serverName);
IniHelper.Write("LS", "dbName", dbName);
IniHelper.Write("LS", "user", user);
IniHelper.Write("LS", "password", password);
return true;
}
}
else
{
MessageUtil.Show("连接失败,请检查朗速方配置");
return false;
}
}
catch (Exception ex)
{
MessageUtil.Show("连接失败,请检查朗速方配置");
}
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>
/// <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 ConnectingToDatabaseOther()
{
string connStr = GetConnection();
if (SqlHelperOther._connection != null)
{
try
{
SqlHelperOther._connection.Close();
SqlHelperOther._connection.Dispose();
}
catch (Exception)
{
}
SqlHelperOther._connection = null;
}
try
{
SqlHelperOther._connection = new SqlConnection(connStr);
SqlHelperOther._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", lsSeverId.Text + "", lsDataBase.Text + "", lsName.Text + "", lsPassword.Text + "");
}
#endregion
#region 连接Afk服务器
public bool ConnectMySql(bool isSave = false)
{
string connStr = GetConnection2();
string serverName = this.afkSeverId.Text.Trim();//地址
string port = this.afkPortNumber.Text.Trim();//端口
string dbName = this.afkDataBase.Text.Trim();//数据库名
string user = this.afkName.Text.Trim();//用户名
string password = this.afkPassword.Text.Trim();//密码
if (string.IsNullOrWhiteSpace(serverName))
{
MessageUtil.Show("请重新输入Afk数据库地址");
return false;
}
if (string.IsNullOrWhiteSpace(port))
{
MessageUtil.Show("请重新输入Afk数据库端口");
return false;
}
if (string.IsNullOrWhiteSpace(dbName))
{
MessageUtil.Show("请重新输入Afk数据库库名");
return false;
}
if (string.IsNullOrWhiteSpace(user))
{
MessageUtil.Show("请重新输入Afk数据库用户名");
return false;
}
// 测试数据库连接
try
{
if (ConnectingToDatabase2())
{
if (isSave)
{
}
else
{
IniHelper.Write("AFK", "serverName", serverName);
IniHelper.Write("AFK", "port", port);
IniHelper.Write("AFK", "dbName", dbName);
IniHelper.Write("AFK", "user", user);
IniHelper.Write("AFK", "password", password);
RefreshLogUIThread(DateTime.Now + "AFK数据库连接成功.\r\n");
return true;
}
}
else
{
MessageUtil.Show("连接失败,请检查AFK方配置");
return false;
}
}
catch (Exception ex)
{
MessageUtil.Show("连接失败,请检查AFK方配置");
}
return true;
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 ConnectingToDatabase2()
{
string connStr = GetConnection2();
if (MySqlHelper._connection != null)
{
try
{
MySqlHelper._connection.Close();
MySqlHelper._connection.Dispose();
}
catch (Exception)
{
}
MySqlHelper._connection = null;
}
try
{
MySqlHelper._connection = new MySqlConnection(connStr);
MySqlHelper._connection.Open();
return true;
}
catch (Exception ex)
{
// LogHelper.Instance.WriteLog(ex.Message);
}
return false;
}
/// <summary>
/// 获取连接服务器的字符串
/// </summary>
/// <returns></returns>
public string GetConnection2()
{
return string.Format("Data Source={0};Port={1};Database={2};User ID={3};Password={4};Charset=utf8;Convert Zero Datetime=True;", afkSeverId.Text + "", afkPortNumber.Text + "", afkDataBase.Text + "", afkName.Text + "", afkPassword.Text + "");
}
#endregion
#region 按钮浮动事件
private void OnStartBtn_MouseLeave(object sender, EventArgs e)
{
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
btn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
}
private void OnStartBtn_MouseHover(object sender, EventArgs e)
{
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
btn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
}
private void OnStopBtn_MouseLeave(object sender, EventArgs e)
{
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
btn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
}
private void OnStoptBtn_MouseHover(object sender, EventArgs e)
{
if (this.startBtn.Appearance.BackColor != Color.FromArgb(52, 142, 216))
{
this.startBtn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
}
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
btn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
}
#endregion
#region 初始化数据配置页
private void InitializeDataSettings()
{
if (ConnectServerOther())
{
string explainSql = @"SELECT
A.name AS table_name,
B.name AS column_name,
C.value AS column_description
FROM sys.tables A
INNER JOIN sys.columns B ON B.object_id = A.object_id
LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id AND C.minor_id = B.column_id
WHERE A.name = 'P_synchrTab'";
DataTable explainTab = SqlHelperOther.ExecuteDataTable(explainSql);
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
this.gridView.Columns.Clear();
this.gridControl.DataSource = sourceTab;
foreach (GridColumn gridColumn in this.gridView.Columns)
{
DataRow[] captionRows = explainTab.Select(string.Format("{0}='{1}'", "column_name", gridColumn.FieldName));
if (captionRows.Count() > 0)
{
DataRow captionRow = captionRows[0];
gridColumn.Caption = captionRow["column_description"] + "";
}
if (gridColumn.FieldName.Equals("synchroSql") || gridColumn.FieldName.Equals("targetTabSql") || gridColumn.FieldName.Equals("synLogSql") || gridColumn.FieldName.Equals("afterSql") || gridColumn.FieldName.Equals("relevanceSql") || gridColumn.FieldName.Equals("disableField"))
{
RepositoryItemMemoExEdit reEdit = new RepositoryItemMemoExEdit();
reEdit.ScrollBars = ScrollBars.Vertical;
gridControl.RepositoryItems.Add(reEdit);
gridColumn.ColumnEdit = reEdit;
}
if (gridColumn.FieldName.Equals("directionTag"))
{
DataTable directionTab = new DataTable();
directionTab.Columns.Add("dm");
directionTab.Columns.Add("mc");
directionTab.Rows.Add("0", "同步到朗速");
directionTab.Rows.Add("1", "同步到中航");
directionTab.Rows.Add("10", "不同步");
RepositoryItemLookUpEdit comboxEdit = new RepositoryItemLookUpEdit();
comboxEdit.SearchMode = SearchMode.AutoFilter;
comboxEdit.ShowHeader = false;
comboxEdit.ImmediatePopup = false;
comboxEdit.NullText = "";
comboxEdit.PopupBorderStyle = PopupBorderStyles.Flat;
comboxEdit.AllowNullInput = DefaultBoolean.False;
comboxEdit.DisplayMember = "mc";
comboxEdit.ValueMember = "dm";
//comboxEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
LookUpColumnInfo valueColumn = new LookUpColumnInfo();
valueColumn.Caption = "编码";
valueColumn.FieldName = "dm";
valueColumn.Visible = false;
LookUpColumnInfo textColumn = new LookUpColumnInfo();
textColumn.Caption = "名称";
textColumn.FieldName = "mc";
comboxEdit.Columns.AddRange(new LookUpColumnInfo[] { valueColumn, textColumn });
gridControl.RepositoryItems.Add(comboxEdit);
gridColumn.ColumnEdit = comboxEdit;
comboxEdit.DataSource = directionTab;
}
if (gridColumn.FieldName.Equals("disableTag"))
{
RepositoryItemCheckEdit comboxEdit = new RepositoryItemCheckEdit();
comboxEdit.ValueChecked = "false";
comboxEdit.ValueUnchecked = "true";
gridControl.RepositoryItems.Add(comboxEdit);
gridColumn.ColumnEdit = comboxEdit;
}
if (gridColumn.FieldName.Equals("id") || gridColumn.FieldName.Equals("rightKeyTag"))
{
gridColumn.Visible = false;
}
}
this.gridView.BestFitColumns();
//this.gridView.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
this.gridView.OptionsSelection.MultiSelect = false;
this.gridView.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.MouseDownFocused;
this.contextMenuStrip.ItemClicked += new ToolStripItemClickedEventHandler(OnContextMenuStrip_ItemClicked);
}
}
#endregion
/// <summary>
/// 新增按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addBtn_Click(object sender, EventArgs e)
{
DataTable tab = new DataTable();
tab = (this.gridControl.DataSource as DataTable).Copy();
if (tab.Rows.Count > 0)
{
tab.DefaultView.Sort = "ID ASC";
DataRow lastRow = tab.DefaultView.ToTable().Rows[tab.Rows.Count - 1];
if ((lastRow["id"] + "").Equals("9999999"))
{
if (tab.Rows.Count > 1)
{
DataRow NRow = tab.NewRow();
NRow["id"] = Convert.ToInt32(tab.DefaultView.ToTable().Rows[tab.Rows.Count - 2]["id"] + "") + 1;
tab.Rows.Add(NRow);
}
else
{
DataRow NRow = tab.NewRow();
NRow["id"] = 1;
tab.Rows.Add(NRow);
}
}
else
{
DataRow NRow = tab.NewRow();
NRow["id"] = Convert.ToInt32(tab.DefaultView.ToTable().Rows[tab.Rows.Count - 1]["id"] + "") + 1;
tab.Rows.Add(NRow);
}
this.gridControl.DataSource = tab;
}
}
/// <summary>
/// 保存按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void savebtn_Click(object sender, EventArgs e)
{
try
{
if (ConnectServerOther())
{
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
DataTable tab = this.gridControl.DataSource as DataTable;
string allSqlStr = string.Empty;
foreach (DataRow row in tab.Rows)
{
if (row.RowState == DataRowState.Added)
{
string addSqlStr = "insert into P_synchrTab ({0}) values ({1});\r\n";
string sqlKey = string.Empty;
string sqlValues = string.Empty;
foreach (DataColumn col in row.Table.Columns)
{
sqlKey += string.Format("{0},", col.ColumnName);
sqlValues += string.Format("'{0}',", (row[col.ColumnName] + "").Replace("'", "''"));
}
allSqlStr += string.Format(addSqlStr, sqlKey.TrimEnd(','), sqlValues.TrimEnd(','));
}
else if (row.RowState == DataRowState.Modified)
{
string updateSqlStr = "update P_synchrTab set {0} = '{1}' where {2} = '{3}';\r\n";
DataRow[] sourceRows = sourceTab.Select(string.Format("id='{0}'", row["id"] + ""));
if (sourceRows.Count() > 0)
{
DataRow sourceRow = sourceRows[0];
foreach (DataColumn col in row.Table.Columns)
{
if (!(row[col.ColumnName] + "").Equals(sourceRow[col.ColumnName] + ""))
{
allSqlStr += string.Format(updateSqlStr, col.ColumnName, (row[col.ColumnName] + "").Replace("'", "''"), "id", row["id"] + "");
}
}
}
}
}
try
{
DialogResult dialogResult = MessageUtil.Show("是否保存当前数据?", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.OK)
{
if (!string.IsNullOrWhiteSpace(allSqlStr)) SqlHelperOther.ExecuteNonQuery(allSqlStr);
MessageUtil.Show("保存成功");
}
}
catch (Exception ex)
{
MessageUtil.Show(string.Format("保存失败,原因:{0}", ex.Message));
}
}
}
catch (Exception ex)
{
MessageUtil.Show(ex.Message);
}
}
/// <summary>
/// 右键菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
try
{
if (ConnectServerOther())
{
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
DataTable dataTab = this.gridControl.DataSource as DataTable;
DataRow row = this.gridView.GetDataRow(this.gridView.FocusedRowHandle);
switch (e.ClickedItem.Name)
{
case "AbutmentNowRow":
string updateSql = "update P_synchrTab set rightKeyTag = '1' where id = {0}";
int updateResult = SqlHelperOther.ExecuteNonQuery(string.Format(updateSql, row["id"] + ""));
break;
case "disableRowData":
string disableSql = "update P_synchrTab set disableTag = 'false' where id = {0}";
int disableResult = SqlHelperOther.ExecuteNonQuery(string.Format(disableSql, row["id"] + ""));
DataRow[] findDisRows = dataTab.Select(string.Format("id='{0}'", row["id"] + ""));
if (findDisRows.Count() > 0)
{
DataRow findDisRow = findDisRows[0];
findDisRow["disableTag"] = "false";
}
break;
case "disablement":
string disablementSql = "update P_synchrTab set disableTag = 'true' where id = {0}";
int disablementResult = SqlHelperOther.ExecuteNonQuery(string.Format(disablementSql, row["id"] + ""));
DataRow[] findUndisRows = dataTab.Select(string.Format("id='{0}'", row["id"] + ""));
if (findUndisRows.Count() > 0)
{
DataRow findUndisRow = findUndisRows[0];
findUndisRow["disableTag"] = "true";
}
break;
case "deleteNowRow":
DialogResult result = MessageUtil.Show("是否确定删除当前选中行?", MessageBoxButtons.OKCancel);
if (result == DialogResult.OK)
{
DataRow[] selectRows = sourceTab.Select(string.Format("id='{0}'", row["id"] + ""));
if (selectRows.Count() > 0)
{
string deleteSql = "delete P_synchrTab where id ='{0}'";
SqlHelperOther.ExecuteNonQuery(string.Format(deleteSql, row["id"] + ""));
dataTab.Rows.Remove(row);
MessageUtil.Show("删除成功");
}
else
{
dataTab.Rows.Remove(row);
MessageUtil.Show("删除成功");
}
}
break;
case "Refresh":
this.gridControl.DataSource = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
break;
}
}
}
catch (Exception ex)
{
MessageUtil.Show(ex.Message);
}
}
/// <summary>
/// 快捷键
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
ConfigurationTool configurationTool = new ConfigurationTool();
configurationTool.Show();
}
}
private void simpleButton1_Click(object sender, EventArgs e)
{
DataRow dr = gridView.GetFocusedDataRow();
ConfigurationTool configurationTool = new ConfigurationTool();
configurationTool.returnContent += new ConfigurationTool.ReturnContent(returnContent);
if (dr != null)
{
configurationTool.SegmentedContent = dr["synchroSql"] + "";
configurationTool.DirectionTag = dr["directionTag"] + "";
}
configurationTool.ShowDialog();
}
private void returnContent(string value)
{
DataRow dr = gridView.GetFocusedDataRow();
dr["synchroSql"] = value;
this.savebtn_Click(null, null);
}
}
}