chore: 初始化平芝126KV总装线 WebApi

This commit is contained in:
yexingqiang
2026-06-08 17:19:25 +08:00
commit 437c251f58
126 changed files with 5439 additions and 0 deletions

292
MainView.cs Normal file
View File

@@ -0,0 +1,292 @@
using AntdUI;
using Logger;
using MQTTnet.Server;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WebApi.Helpers;
using static WebApi.MainView;
namespace WebApi
{
public partial class MainView : Form
{
InitServer initServer = null;
static BindingList<msgTableClass> msgTableList = new BindingList<msgTableClass>();
static BindingList<tightenTableClass> tightenTableList = new BindingList<tightenTableClass>();
public MainView()
{
InitializeComponent();
InitUI();
AddMessage("程序启动--------------------------");
initServer = new WebApi.InitServer(Convert.ToInt32(Tools.AppConfigManage.ReadConfig("WebApiPort")));
MqttServer.StartMqttServer();
ServerController.ShowMsg += AddMessage;
MqttServer.ShowMsg += AddMessage;
Show_OnLineStateAsync();
Tighten.TightenServer tighten = new Tighten.TightenServer();
Task.Run(() => tighten.InitTightenList());
Tighten.TightenServer.ShowMsg += AddMessage;
Log.ShowMsg += AddMessage;
// 添加关闭程序的二次确认
this.FormClosing += MainView_FormClosing;
}
private void InitUI()
{
MessageTable.Columns = new AntdUI.ColumnCollection {
new AntdUI.Column("dateTime","消息时间"){ Fixed=false,Width="140"},
new AntdUI.Column("msg","消息内容"){ Fixed=false,Width="440",LineBreak=true},
};
MessageTable.Binding(msgTableList);
TightenTable.Columns = new AntdUI.ColumnCollection {
new AntdUI.Column("name","名称"){ Fixed=true},
new AntdUI.Column("ip","IP"){ Fixed=true},
new AntdUI.Column("isConnect","状态",AntdUI.ColumnAlign.Center),
};
TightenTable.Binding(tightenTableList);
}
private void AddMessage(string message)
{
// 如果大于1000条删除最后一条
if (msgTableList.Count > 1000)
{
msgTableList.RemoveAt(msgTableList.Count - 1);
}
msgTableList.Insert(0, new msgTableClass(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message));
logCountLab.Text = msgTableList.Count.ToString() + "条";
}
public class msgTableClass : AntdUI.NotifyProperty
{
public msgTableClass(string dateTime, string msg)
{
_dateTime = dateTime;
_msg = msg;
}
string _dateTime;
public string dateTime
{ get => _dateTime; set { if (_dateTime == value) return; _dateTime = value; OnPropertyChanged("dateTime"); } }
string _msg;
public string msg
{ get => _msg; set { if (_msg == value) return; _msg = value; OnPropertyChanged("msg"); } }
}
public class tightenTableClass : AntdUI.NotifyProperty
{
public tightenTableClass(string name,string ip, bool isConnect)
{
_name = name;
_ip = ip;
if (isConnect) _isConnect = new AntdUI.CellBadge(AntdUI.TState.Success, "在线");
else _isConnect = new AntdUI.CellBadge(AntdUI.TState.Error, "离线");
}
string _name;
public string name
{ get => _name; set { if (_name == value) return; _name = value; OnPropertyChanged("name"); } }
string _ip;
public string ip
{ get => _ip; set { if (_ip == value) return; _ip = value; OnPropertyChanged("ip"); } }
AntdUI.CellBadge _isConnect;
public AntdUI.CellBadge isConnect
{
get => _isConnect; set { _isConnect = value; OnPropertyChanged("isConnect"); }
}
}
private async void timer1_Tick(object sender, EventArgs e)
{
timer_OnLine_Show.Enabled = false;
await Show_OnLineStateAsync();
RefreshTightenStatus();
timer_OnLine_Show.Enabled = true;
}
private async Task Show_OnLineStateAsync()
{
await OnLineStatus_CheckAsync();
// UI更新需要在主线程执行
this.Invoke((MethodInvoker)delegate
{
OnLineState_C(pb_OnLine_Sql, Gl.OnLine_Sql);
OnLineState_C(pb_OnLine_AGV, Gl.OnLine_AGV);
OnLineState_C(pb_OnLine_MQTT, Gl.OnLine_MQTT);
});
}
/// <summary>
/// 显示通讯状态
/// </summary>
/// <param name="pb"></param>
/// <param name="onLine"></param>
private void OnLineState_C(PictureBox pb, bool onLine)
{
pb.Image = onLine ? global::WebApi.Properties.Resources.
: global::WebApi.Properties.Resources.;
}
public static async Task OnLineStatus_CheckAsync()
{
// 并行检查所有连接状态
var tasks = new List<Task>
{
CheckSqlConnectionAsync(),
CheckAgvConnectionAsync(),
CheckMqttConnectionAsync()
};
await Task.WhenAll(tasks);
}
private static async Task CheckSqlConnectionAsync()
{
try
{
await Task.Run(() =>
{
SqlServer.ExecuteSql("select getdate()", out DataTable dt, out string err);
Gl.OnLine_Sql = string.IsNullOrEmpty(err);
});
}
catch (Exception)
{
Gl.OnLine_Sql = false;
}
}
private static async Task CheckAgvConnectionAsync()
{
try
{
await Task.Run(() =>
{
Gl.OnLine_AGV = Ping(Tools.AppConfigManage.ReadConfig("AGVIP"));
});
}
catch (Exception)
{
Gl.OnLine_AGV = false;
}
}
private static async Task CheckMqttConnectionAsync()
{
try
{
await Task.Run(() =>
{
Gl.OnLine_MQTT = MqttServer.IsConnected();
});
}
catch (Exception)
{
Gl.OnLine_MQTT = false;
}
}
private static bool Ping(string ip)
{
try
{
using (var ping = new Ping())
{
return ping.Send(ip, 1000).Status == IPStatus.Success;
}
}
catch
{
return false;
}
}
private void RefreshTightenStatus()
{
tightenTableList.Clear();
var sortedList = WebApi.Helpers.Gl.TightenList.Values.OrderBy(tool => tool.IP);
foreach (var tool in sortedList)
{
tightenTableList.Add(new tightenTableClass(tool.Name, tool.IP, tool.TcpClient != null && tool.TcpClient.Connected));
}
}
private void ClearLog_Click(object sender, EventArgs e)
{
msgTableList.Clear();
logCountLab.Text = msgTableList.Count.ToString() + "条";
}
/// <summary>
/// 窗体关闭时的确认处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainView_FormClosing(object sender, FormClosingEventArgs e)
{
// 显示确认对话框
DialogResult result = MessageBox.Show(
"确定要关闭程序吗?\n\n关闭程序将停止所有服务WebAPI、MQTT等。",
"关闭确认",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2
);
// 如果用户点击"否",则取消关闭
if (result == DialogResult.No)
{
e.Cancel = true;
AddMessage("用户取消关闭程序");
return;
}
// 用户确认关闭,记录日志并执行清理工作
AddMessage("程序正在关闭...");
try
{
// 停止定时器
if (timer_OnLine_Show != null)
{
timer_OnLine_Show.Stop();
timer_OnLine_Show.Dispose();
}
// 停止MQTT服务器异步方法使用Wait()等待完成)
Task.Run(async () => await MqttServer.StopMqttServer()).Wait();
// 停止WebAPI服务器
if (initServer != null)
{
initServer.Close();
}
AddMessage("程序关闭完成");
}
catch (Exception ex)
{
AddMessage($"关闭程序时发生错误: {ex.Message}");
}
}
}
}