using CnasSynchronousCommon;
using CnasSynchronusClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CNAS_Authorize
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
private MachineAuth m_machines;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.LoadData();
}
private void LoadData()
{
m_machines = new MachineAuth();
m_machines.Load();
dataGrid.ItemsSource = m_machines.Page;
this.DataContext = m_machines;
}
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.Width < 500) return;
dataGrid.Width = this.Width - 48;
dataGrid.Height = centerPanel.Height;
//设置列宽
double colWidth = this.Width - 60;// centerPanel.Width;
for (int i = 1; i < dataGrid.Columns.Count; i++)
{
colWidth = colWidth - dataGrid.Columns[i].Width.Value;
}
if (colWidth > 0)
dataGrid.Columns[0].Width = colWidth;
edtMachine.Width = this.Width - lbMachine.Width - btnQuery.Width - 48;
edtFactory.Width = edtMachine.Width;
}
private void refreshBind()
{
this.DataContext = null;
this.DataContext = m_machines;
}
private void PrevPage_Click(object sender, RoutedEventArgs e)
{
bool ok;
List page = m_machines.PrevPage(out ok);
if (ok)
{
dataGrid.ItemsSource = page;
refreshBind();
}
}
private void NextPage_Click(object sender, RoutedEventArgs e)
{
bool ok;
List page = m_machines.NextPage(out ok);
if (ok)
{
dataGrid.ItemsSource = page;
refreshBind();
}
}
private void Query_Click(object sender, RoutedEventArgs e)
{
m_machines.ChangeFilter(edtMachine.Text.Trim(), edtFactory.Text.Trim());
dataGrid.ItemsSource = m_machines.Page;
refreshBind();
}
private void ConfirmImport_Click(object sender, RoutedEventArgs e)
{
//加载CNAS数据库配置
var targetDataBase = FileOperation.GetLocalCnasDB();
if (!CnasDataOperationFact.CnasDataOperation().TestConnect(targetDataBase))
{
MessageBox.Show("CNAS数据库无法正常连接...", "提示");
return;
}
var existData = CnasDataOperationFact.CnasDataOperation().GetTableData(targetDataBase, $"select * from macaddress where MAC_ADDRESS='{edtMachine.Text.Trim()}'");
if(existData!=null&& existData.Rows.Count > 0)
{
MessageBox.Show("已经导入!");
return;
}
StringBuilder sb = new StringBuilder();
sb.AppendFormat($"insert into macaddress(MAC_ADDRESS,PLANTCODE,CREATETIME,FACILITY_STYLE) VALUES('{edtMachine.Text.Trim()}','{edtFactory.Text.Trim()}',now(),'999')");
//1.加载数据
var flag = CnasDataOperationFact.CnasDataOperation().InsertTableData(targetDataBase, sb.ToString());
if (flag)
{
AppLog.ServiceInfo("导入成功");
MessageBox.Show("导入成功...", "提示");
this.LoadData();
}
else
{
MessageBox.Show("导入失败...", "提示");
}
}
private void DownloadActivationCode_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var machine = button.DataContext as Machine;
if (machine != null)
{
try
{
// 生成激活码
string activationCode = GenerateActivationCode(machine.MachineCode);
// 创建保存文件对话框
var saveFileDialog = new Microsoft.Win32.SaveFileDialog
{
FileName = $"激活码_{machine.MachineCode}_{DateTime.Now:yyyyMMdd}",
DefaultExt = ".txt",
Filter = "文本文件|*.txt"
};
if (saveFileDialog.ShowDialog() == true)
{
// 将激活码写入文件
System.IO.File.WriteAllText(saveFileDialog.FileName, activationCode);
MessageBox.Show("激活码已成功保存!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
// 更新状态
machine.IsGenerated = true;
refreshBind();
}
}
catch (Exception ex)
{
MessageBox.Show($"下载激活码失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
private string GenerateActivationCode(string machineCode)
{
// 这里实现激活码生成算法
// 示例:简单的加密算法,实际应用中应该使用更安全的加密方式
using (var md5 = System.Security.Cryptography.MD5.Create())
{
// 加入时间戳使得生成的激活码具有时效性
string input = machineCode + DateTime.Now.ToString("yyyyMMdd");
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// 转换为16进制字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
// 每4个字符添加一个分隔符,提高可读性
if ((i + 1) % 4 == 0 && i != hashBytes.Length - 1)
{
sb.Append("-");
}
}
return sb.ToString();
}
}
}
}