整体调整了功能
This commit is contained in:
@@ -89,6 +89,42 @@ namespace FATrace.OEMApp
|
||||
private void LogWarn(string msg) => AppendLog("WARN", msg, Color.DarkOrange);
|
||||
private void LogError(string msg) => AppendLog("ERROR", msg, Color.DarkRed);
|
||||
|
||||
private void BtnNavMain_Click(object? sender, EventArgs e)
|
||||
{
|
||||
materialTabControl1.SelectedIndex = 0;
|
||||
UpdateNavButtonStyles(0);
|
||||
}
|
||||
|
||||
private void BtnNavHistory_Click(object? sender, EventArgs e)
|
||||
{
|
||||
materialTabControl1.SelectedIndex = 1;
|
||||
UpdateNavButtonStyles(1);
|
||||
}
|
||||
|
||||
private void BtnNavSettings_Click(object? sender, EventArgs e)
|
||||
{
|
||||
materialTabControl1.SelectedIndex = 2;
|
||||
UpdateNavButtonStyles(2);
|
||||
}
|
||||
|
||||
private void UpdateNavButtonStyles(int selectedIndex)
|
||||
{
|
||||
var buttons = new[] { btnNavMain, btnNavHistory, btnNavSettings };
|
||||
for (int i = 0; i < buttons.Length; i++)
|
||||
{
|
||||
if (i == selectedIndex)
|
||||
{
|
||||
buttons[i].BackColor = Color.FromArgb(63, 81, 181);
|
||||
buttons[i].ForeColor = Color.White;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttons[i].BackColor = Color.FromArgb(240, 240, 240);
|
||||
buttons[i].ForeColor = Color.FromArgb(64, 64, 64);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MainApp()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -100,7 +136,11 @@ namespace FATrace.OEMApp
|
||||
private PLCDataService PLCDataService { get; set; }
|
||||
private TimeClearDataService TimeClearService { get; set; }
|
||||
private System.Windows.Forms.Timer _statusTimer;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// TouchSocket Server
|
||||
/// </summary>
|
||||
private TouchSocketServer TouchSocketServer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 主窗体加载:
|
||||
@@ -109,7 +149,7 @@ namespace FATrace.OEMApp
|
||||
/// - 启动后台任务服务(顺序下载队列 + Jellyfin 批量监听)
|
||||
/// - 初始化并启动 gridRULog(DataGridView)定时刷新,实时展示下载/监听任务状态
|
||||
/// </summary>
|
||||
private void MainApp_Load(object sender, EventArgs e)
|
||||
private async void MainApp_Load(object sender, EventArgs e)
|
||||
{
|
||||
InitLvLog();
|
||||
LogInfo("主界面初始化");
|
||||
@@ -129,12 +169,32 @@ namespace FATrace.OEMApp
|
||||
//HkCameraClient.NVR_Port = ConfigHelper.GetValue("NVRPort");
|
||||
//HkCameraClient.NVR_UserName = ConfigHelper.GetValue("NVRUserName");
|
||||
|
||||
PLCDataService = new PLCDataService();
|
||||
PLCDataService.PlcConnectedEventHandler += PLCDataService_PlcConnectedEventHandler;
|
||||
PLCDataService.ScanCodeEventHandler += PLCDataService_ScanCodeEventHandler;
|
||||
//PLC时间读取
|
||||
//PLCDataService = new PLCDataService();
|
||||
//PLCDataService.PlcConnectedEventHandler += PLCDataService_PlcConnectedEventHandler;
|
||||
//PLCDataService.ScanCodeEventHandler += PLCDataService_ScanCodeEventHandler;
|
||||
|
||||
HkCameraClient.NVRVideoSavePath = ConfigHelper.GetValue("NVRVideoSavePath");
|
||||
|
||||
var TcpServerIp = ConfigHelper.GetValue("TcpServerIp");
|
||||
var TcpServerPort = int.Parse(ConfigHelper.GetValue("TcpServerPort"));
|
||||
TouchSocketServer = new TouchSocketServer(TcpServerIp, TcpServerPort, 30000, 30000);
|
||||
|
||||
TouchSocketServer.ClientConnected += TouchSocketServer_ClientConnected;
|
||||
TouchSocketServer.ClientDisconnected += TouchSocketServer_ClientDisconnected;
|
||||
TouchSocketServer.DataReceived += TouchSocketServer_DataReceived;
|
||||
TouchSocketServer.ServerError += TouchSocketServer_ServerError;
|
||||
|
||||
var serverStarted = await TouchSocketServer.StartAsync();
|
||||
if (serverStarted)
|
||||
{
|
||||
LogInfo($"TouchSocket Server 已启动,监听 {TcpServerIp}:{TcpServerPort}");
|
||||
}
|
||||
else
|
||||
{
|
||||
LogError($"TouchSocket Server 启动失败,监听 {TcpServerIp}:{TcpServerPort}");
|
||||
}
|
||||
|
||||
//NVR登录
|
||||
NVRLogin();
|
||||
|
||||
@@ -175,11 +235,11 @@ namespace FATrace.OEMApp
|
||||
_ = UpdateNasStatusAsync();
|
||||
_ = UpdateNvrStatusAsync();
|
||||
StartStatusTimer();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var systemName = Program.SystemName;
|
||||
var authText = Program.IsActive ? "(已授权)" : "(未授权)";
|
||||
var authText = Program.IsActive ? "(添加剂追溯系统)" : "(OEM)";
|
||||
this.Text = string.IsNullOrWhiteSpace(systemName)
|
||||
? $"添加剂追溯系统 {authText}"
|
||||
: $"{systemName} {authText}";
|
||||
@@ -213,7 +273,7 @@ namespace FATrace.OEMApp
|
||||
BeginInvoke(new Action(() =>
|
||||
{
|
||||
txtRUInBagCode.Text = CurParsedCodeInfo.Code;
|
||||
txtRURawName.Text= CurParsedCodeInfo.RawName;
|
||||
txtRURawName.Text = CurParsedCodeInfo.RawName;
|
||||
txtRURawCode.Text = CurParsedCodeInfo.RawCode;
|
||||
}));
|
||||
|
||||
@@ -573,7 +633,7 @@ namespace FATrace.OEMApp
|
||||
foreach (DataGridViewColumn col in dataGridView1.Columns)
|
||||
{
|
||||
var propName = col.DataPropertyName;
|
||||
|
||||
|
||||
// 设置列头中文
|
||||
if (!string.IsNullOrWhiteSpace(propName) && _historyHeaderMap.TryGetValue(propName, out var headerText))
|
||||
{
|
||||
@@ -645,10 +705,8 @@ namespace FATrace.OEMApp
|
||||
dataGridView1.AllowUserToAddRows = false;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 测试/结束操作按钮:同样仅入队一条下载任务,方便快速验证下载->监听全流程。
|
||||
/// </summary>
|
||||
@@ -656,8 +714,8 @@ namespace FATrace.OEMApp
|
||||
/// <param name="e"></param>
|
||||
private void btnTestAction_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CurParsedCodeInfo==null) return ;
|
||||
|
||||
if (CurParsedCodeInfo == null) return;
|
||||
|
||||
var taskId = DownloadTaskWorker.Instance.Enqueue(
|
||||
CurParsedCodeInfo,
|
||||
user: CurUserName,
|
||||
@@ -1065,7 +1123,7 @@ namespace FATrace.OEMApp
|
||||
HkCameraClient.Sdk_NET_DVR_StopGetFile();
|
||||
}
|
||||
|
||||
protected override void OnFormClosing(FormClosingEventArgs e)
|
||||
protected async override void OnFormClosing(FormClosingEventArgs e)
|
||||
{
|
||||
try { DownloadTaskWorker.Instance.DownloadFileNameChanged -= OnDownloadFileNameChanged; } catch { }
|
||||
try { DownloadTaskWorker.Instance.TaskStarted -= OnTaskStatusChanged; } catch { }
|
||||
@@ -1073,6 +1131,18 @@ namespace FATrace.OEMApp
|
||||
try { DownloadTaskWorker.Instance.TaskFailed -= OnTaskFailed; } catch { }
|
||||
try { _statusTimer?.Stop(); _statusTimer?.Dispose(); _statusTimer = null; } catch { }
|
||||
try { TimeClearService?.Stop(); } catch { }
|
||||
try
|
||||
{
|
||||
if (TouchSocketServer != null && TouchSocketServer.IsRunning)
|
||||
{
|
||||
await TouchSocketServer.StopAsync();
|
||||
LogInfo("TouchSocket Server 已停止");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogError($"TouchSocket Server 停止失败: {ex.Message}");
|
||||
}
|
||||
base.OnFormClosing(e);
|
||||
}
|
||||
|
||||
@@ -1098,6 +1168,68 @@ namespace FATrace.OEMApp
|
||||
catch { }
|
||||
}
|
||||
|
||||
private void TouchSocketServer_ClientConnected(object? sender, TouchSocketServer.ClientConnectedEventArgs e)
|
||||
{
|
||||
LogInfo($"[TCP] 客户端连接: {e.ClientId} {e.RemoteIp}:{e.RemotePort}");
|
||||
}
|
||||
|
||||
private void TouchSocketServer_ClientDisconnected(object? sender, TouchSocketServer.ClientDisconnectedEventArgs e)
|
||||
{
|
||||
LogInfo($"[TCP] 客户端断开: {e.ClientId} {e.RemoteIp}:{e.RemotePort} 原因={e.Reason}");
|
||||
}
|
||||
|
||||
private void TouchSocketServer_DataReceived(object? sender, TouchSocketServer.DataReceivedEventArgs e)
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} : - IP : {e.RemoteIp} {e.Data}");
|
||||
|
||||
// 解析二维码为 QRModel
|
||||
try
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(e.Data))
|
||||
{
|
||||
//解析Code条码数据,内包条码数据
|
||||
CurParsedCodeInfo = NVRCom.ParseCodeFull(e.Data!.Trim());
|
||||
|
||||
BeginInvoke(new Action(() =>
|
||||
{
|
||||
txtRUInBagCode.Text = CurParsedCodeInfo.Code;
|
||||
txtRURawCode.Text = CurParsedCodeInfo.RawCode;
|
||||
|
||||
}));
|
||||
|
||||
try
|
||||
{
|
||||
if (CurParsedCodeInfo == null) return;
|
||||
|
||||
var taskId = DownloadTaskWorker.Instance.Enqueue(
|
||||
CurParsedCodeInfo,
|
||||
user: CurUserName,
|
||||
start: DateTime.Now,
|
||||
end: DateTime.Now
|
||||
);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 解析失败仅记录错误,不影响后续逻辑
|
||||
LogError($"[TCP] QR 解析失败: {ex.Message}");
|
||||
}
|
||||
|
||||
|
||||
|
||||
TouchSocketServer.SendToClient(e.ClientId, "OK");
|
||||
}
|
||||
|
||||
private void TouchSocketServer_ServerError(object? sender, Exception ex)
|
||||
{
|
||||
LogError($"[TCP] 服务器错误: {ex.Message}");
|
||||
}
|
||||
|
||||
#region 底部状态栏(PLC/DB/NAS/NVR)
|
||||
private void StartStatusTimer()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user