428 lines
18 KiB
C#
428 lines
18 KiB
C#
namespace MesWork
|
|
{
|
|
using DT_YQJF_DC_SLN;
|
|
using System;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Newtonsoft.Json;
|
|
using System.Security.Cryptography;
|
|
using ABB.Robotics.Controllers.Configuration;
|
|
using Newtonsoft.Json.Linq;
|
|
using System.Net.Http.Headers;
|
|
using System.Web;
|
|
using System.Collections.Generic;
|
|
using NPOI.SS.Formula.Functions;
|
|
using System.Security.Policy;
|
|
using System.Data.SqlClient;
|
|
using MW_Log;
|
|
|
|
public partial class MesWorkForm
|
|
{
|
|
InitServer initServer = null;
|
|
|
|
public static int msgCount = 0;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public MesWorkForm()
|
|
{
|
|
InitializeComponent();
|
|
CheckForIllegalCrossThreadCalls = false;
|
|
this.WindowState = FormWindowState.Minimized;
|
|
LoggerHelper.ShowMsg += MyLogHelper_LogCommit;
|
|
|
|
// panel_Menu.Visible = true;
|
|
|
|
}
|
|
private void MesWorkForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
|
|
{
|
|
e.Cancel = true;
|
|
}
|
|
private void label_Monitor_Robot_Click(object sender, EventArgs e)
|
|
{
|
|
new F_RobotMonitor().Show(this);
|
|
}
|
|
private void label_Monitor_PLC_Click(object sender, EventArgs e)
|
|
{
|
|
new OpcForm(IsDemoMesServer).Show(this);
|
|
}
|
|
private async void label_ExitSys_Click(object sender, EventArgs e)
|
|
{
|
|
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
|
|
{
|
|
CloseDeviceConn();
|
|
DisConnect();
|
|
await DisConnectService();
|
|
System.Diagnostics.Process.GetCurrentProcess().Kill();
|
|
}
|
|
}
|
|
private void panel_Btn_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
panel_Menu.Visible = !!!panel_Menu.Visible;
|
|
}
|
|
|
|
private void timer_Status_Tick(object sender, EventArgs e)
|
|
{
|
|
timer_Status.Enabled = false;
|
|
Show_OnLineState();
|
|
timer_Status.Enabled = true;
|
|
}
|
|
|
|
private void Show_OnLineState()
|
|
{
|
|
|
|
OnLineState_C(pb_OnLine_PLC_1, MesWorkForm.OnLine_PLC_1);
|
|
OnLineState_C(pb_OnLine_SQL, MesWorkForm.OnLine_SQL);
|
|
OnLineState_C(pb_OnLine_MQTT, MesWorkForm.OnLine_Mqtt);
|
|
|
|
}
|
|
|
|
private void OnLineState_C(PictureBox pb, bool onLine)
|
|
{
|
|
pb.Image = onLine ? global::SCADA_JG.Properties.Resources.连接状态
|
|
: global::SCADA_JG.Properties.Resources.断开状态;
|
|
}
|
|
|
|
private void timer_ShowCount_Tick(object sender, EventArgs e)
|
|
{
|
|
timer_ShowCount.Enabled = false;
|
|
label_Count.Text = MesWorkForm.taskSql.Count.ToString();
|
|
timer_ShowCount.Enabled = true;
|
|
}
|
|
public static void getCharDataToken()
|
|
{
|
|
//while (true)
|
|
//{
|
|
|
|
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
|
long timestamp1 = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
|
|
//if (charDataTokenTime < timestamp1)
|
|
//{
|
|
try
|
|
{
|
|
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
string newGuid = Guid.NewGuid().ToString("N").Substring(0, 5);
|
|
long timestamp = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
|
|
string reqId = "req_AMES001 _" + time + "_" + newGuid;
|
|
string authKeyStr = GetMd5Hash(SK + salt + timestamp);
|
|
|
|
object reqParams = new { authKey = authKeyStr };
|
|
//准备请求的数据 反序列化
|
|
string bodydata = JsonConvert.SerializeObject(reqParams);
|
|
|
|
string retString;
|
|
string url = Url_WebApi_Char + "/openApi/auth/getAuthToken/";
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
|
|
request.Headers.Add("reqId", reqId);
|
|
request.Headers.Add("timestamp", timestamp.ToString());
|
|
request.Headers.Add("appKey", AK);
|
|
//request.Headers.Add("lmt-auth-token", GetMd5Hash(originalString));
|
|
|
|
request.Method = "POST";
|
|
byte[] bytes = Encoding.UTF8.GetBytes(bodydata);
|
|
request.Accept = "*/*";
|
|
request.ContentType = "application/json";
|
|
request.ContentLength = bytes.Length;
|
|
request.Timeout = 10000;
|
|
// 准备请求体
|
|
Stream myResponseStream = request.GetRequestStream();
|
|
myResponseStream.Write(bytes, 0, bytes.Length);
|
|
//发送webapi请求 等待相应
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
|
retString = myStreamReader.ReadToEnd();
|
|
MW_Log.LoggerHelper.Info("获取_Token", retString);
|
|
// 序列化响应内容
|
|
CharData_Token mrh = JsonConvert.DeserializeObject<CharData_Token>(retString);
|
|
int statusCode = (int)response.StatusCode;
|
|
|
|
// 对响应内容进行处理 更新数据库标志
|
|
if (statusCode == 200)
|
|
{
|
|
myStreamReader.Close();
|
|
myResponseStream.Close();
|
|
if (response != null)
|
|
{
|
|
// 成功
|
|
if (mrh.code == "0")
|
|
{
|
|
charDataToken = mrh.data.token;
|
|
charDataTokenTime = mrh.data.expireTime;
|
|
MW_Log.LoggerHelper.Info("获取_Token", charDataToken);
|
|
}
|
|
else
|
|
{
|
|
MW_Log.LoggerHelper.Info("error_Token", mrh.errorDetail);
|
|
}
|
|
response.Close();
|
|
}
|
|
if (request != null)
|
|
{
|
|
request.Abort();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
MW_Log.LoggerHelper.Info("error_Token", "", err);
|
|
}
|
|
//}
|
|
// Thread.Sleep(TokenSyncTime);
|
|
//}
|
|
}
|
|
public void getCharData()
|
|
{
|
|
while (true)
|
|
{
|
|
//if (charDataToken == "")
|
|
//{
|
|
// MyLogHelper_LogCommit("error_charData", "未获取到Token");
|
|
// MW_Log.LoggerHelper.Info("error_charData", "未获取到Token");
|
|
// continue;
|
|
//}
|
|
|
|
string beginDateStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
string endDateStr = DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
|
|
CharDataSearchPrams charDataSearchPrams = new CharDataSearchPrams();
|
|
charDataSearchPrams.beginDate = beginDateStr;
|
|
charDataSearchPrams.endDate = endDateStr;
|
|
List<TestResult> testResultList = GetCharData_Details(charDataSearchPrams, out string code, out string errorDetail);
|
|
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
try
|
|
{
|
|
for (int i = 0; i < testResultList.Count; i++)
|
|
{
|
|
string vin = testResultList[i].vin; // deviceId
|
|
string testCode = testResultList[i].testCode;
|
|
string testStatus = testResultList[i].testStatus;
|
|
string testBeginTime = testResultList[i].testBeginTime;
|
|
string testEndTime = testResultList[i].testEndTime;
|
|
string faultInfo = testResultList[i].faultInfo;
|
|
B_DB_Opera.BaseData_tagTable_CharData_Insert(vin, testCode, testStatus, testBeginTime, testEndTime, faultInfo, syncTime, out string errMsg);
|
|
}
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
MyLogHelper_LogCommit("error_charData10", err.Message);
|
|
MW_Log.LoggerHelper.Info("error_charData11", "", err);
|
|
}
|
|
Thread.Sleep(SyncTime);
|
|
}
|
|
}
|
|
static string GetMd5Hash(string input)
|
|
{
|
|
using (MD5 md5 = MD5.Create())
|
|
{
|
|
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
|
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
|
|
|
// Convert the byte array to hexadecimal string
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < hashBytes.Length; i++)
|
|
{
|
|
sb.Append(hashBytes[i].ToString("X2"));
|
|
}
|
|
return sb.ToString().ToLower();
|
|
}
|
|
}
|
|
|
|
private void MyLogHelper_LogCommit(string type, string msg)
|
|
{
|
|
var log = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " " + type + " " + msg + "\r\n";
|
|
|
|
msgCount++;
|
|
|
|
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new Action(() =>
|
|
{
|
|
if (msgCount > 100)
|
|
{
|
|
this.richTextBox1_log.Text = "";
|
|
}
|
|
this.richTextBox1_log.AppendText(log);
|
|
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (msgCount > 100)
|
|
{
|
|
this.richTextBox1_log.Text = "";
|
|
}
|
|
this.richTextBox1_log.AppendText(log);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public static List<TestResult> GetCharData_Details(CharDataSearchPrams charDataSearchPrams, out string code, out string errorDetail)
|
|
{
|
|
List<TestResult> testResultList = new List<TestResult>();
|
|
code = "0";
|
|
errorDetail = "";
|
|
try
|
|
{
|
|
|
|
|
|
//准备请求的数据 反序列化
|
|
string bodydata = JsonConvert.SerializeObject(charDataSearchPrams);
|
|
|
|
string retString;
|
|
string url = Url_WebApi_Char + "/openApi/thirdData/selectBatteryTestResult";
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
|
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
string newGuid = Guid.NewGuid().ToString("N").Substring(0, 5);
|
|
|
|
long timestamp = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
|
|
string reqId = "req_AMES001 _" + time + "_" + newGuid;
|
|
string lmt_auth_token = GetMd5Hash(charDataToken + SK + timestamp);
|
|
|
|
request.Headers.Add("reqId", reqId);
|
|
request.Headers.Add("timestamp", timestamp.ToString());
|
|
request.Headers.Add("appKey", AK);
|
|
request.Headers.Add("lmt-auth-token", lmt_auth_token);
|
|
MW_Log.LoggerHelper.Info("selectBatteryTestResultHeaders", $"【reqId】{reqId}【timestamp】{timestamp.ToString()}【appKey】{AK}【lmt-auth-token】{lmt_auth_token}");
|
|
request.Timeout = 10000;
|
|
request.Method = "Post";
|
|
byte[] bytes = Encoding.UTF8.GetBytes(bodydata);
|
|
request.ContentType = "application/json;charset=utf-8";
|
|
request.ContentLength = bytes.Length;
|
|
//MW_Log.LoggerHelper.Info("请求参数_charData_reqId", reqId);
|
|
//MW_Log.LoggerHelper.Info("请求参数_charData_timestamp", timestamp.ToString());
|
|
//MW_Log.LoggerHelper.Info("请求参数_charData_appKey", AK);
|
|
//MW_Log.LoggerHelper.Info("请求参数_charData_lmt-auth-token", lmt_auth_token);
|
|
// 准备请求体
|
|
Stream myResponseStream = request.GetRequestStream();
|
|
myResponseStream.Write(bytes, 0, bytes.Length);
|
|
//发送webapi请求 等待相应
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
|
retString = myStreamReader.ReadToEnd();
|
|
MW_Log.LoggerHelper.Info("返回参数_charData", retString);
|
|
// 序列化响应内容
|
|
CharData mrh = JsonConvert.DeserializeObject<CharData>(retString);
|
|
int statusCode = (int)response.StatusCode;
|
|
|
|
// 对响应内容进行处理 更新数据库标志
|
|
if (statusCode == 200)
|
|
{
|
|
myStreamReader.Close();
|
|
myResponseStream.Close();
|
|
if (response != null)
|
|
{
|
|
code = mrh.code;
|
|
errorDetail = mrh.msg + mrh.errorDetail;
|
|
// 成功
|
|
if (mrh.code == "0")
|
|
{
|
|
try
|
|
{
|
|
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
testResultList = mrh.data;
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
MW_Log.LoggerHelper.Info("error_charData2", "", err);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(mrh.code == "603")
|
|
{
|
|
getCharDataToken();
|
|
}
|
|
|
|
MW_Log.LoggerHelper.Info("error_charData3", errorDetail);
|
|
}
|
|
|
|
response.Close();
|
|
}
|
|
if (request != null)
|
|
{
|
|
request.Abort();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
code = "500";
|
|
errorDetail = err.Message;
|
|
MW_Log.LoggerHelper.Info("error_charData4", "", err);
|
|
}
|
|
return testResultList;
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
new TaskFactory().StartNew(delegate ()
|
|
{
|
|
|
|
string beginDateStr = dateTimePicker1_start.Text.ToString();
|
|
string endDateStr = dateTimePicker1_end.Text.ToString();
|
|
CharDataSearchPrams charDataSearchPrams = new CharDataSearchPrams();
|
|
charDataSearchPrams.beginDate = beginDateStr;
|
|
charDataSearchPrams.endDate = endDateStr;
|
|
List<TestResult> testResultList = GetCharData_Details(charDataSearchPrams, out string code, out string errorDetail);
|
|
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
try
|
|
{
|
|
if (testResultList != null)
|
|
{
|
|
for (int i = 0; i < testResultList.Count; i++)
|
|
{
|
|
string vin = testResultList[i].vin; //deviceId
|
|
string testCode = testResultList[i].testCode;
|
|
string testStatus = testResultList[i].testStatus;
|
|
string testBeginTime = testResultList[i].testBeginTime;
|
|
string testEndTime = testResultList[i].testEndTime;
|
|
string faultInfo = testResultList[i].faultInfo;
|
|
B_DB_Opera.BaseData_tagTable_CharData_Insert(vin, testCode, testStatus, testBeginTime, testEndTime, faultInfo, syncTime, out string errMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MyLogHelper_LogCommit("error_charData6", "不存在数据!");
|
|
}
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
|
|
MyLogHelper_LogCommit("error_charData7", err.Message);
|
|
MW_Log.LoggerHelper.Info("error_charData8", "", err);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
this.richTextBox1_log.Text = "";
|
|
}
|
|
|
|
private void button3_Click(object sender, EventArgs e)
|
|
{
|
|
getCharDataToken();
|
|
}
|
|
|
|
private void panel_Menu_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void MesWorkForm_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|