ab56a9bcf7
SVN-Revision: r240
577 lines
21 KiB
C#
577 lines
21 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Lskj.Control;
|
|
using System.IO;
|
|
using Lskj.Util;
|
|
using System.Security.Cryptography;
|
|
|
|
using Lskj.Core;
|
|
using ZXing;
|
|
using Lskj.Control.Model;
|
|
using ZXing.Presentation;
|
|
using com.google.zxing.common;
|
|
using com.google.zxing;
|
|
using Lskj.Model;
|
|
|
|
namespace Lskj.ReBurnCode
|
|
{
|
|
public partial class FrmMain : BaseForm
|
|
{
|
|
#region 公有字段
|
|
public int comm;
|
|
public int band;
|
|
public const int WM_DEVICECHANGE = 0x219;
|
|
public const int DBT_DEVICEARRIVAL = 0x8000;
|
|
public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
|
|
public bool IsCopy = false;
|
|
/// <summary>
|
|
/// 选中类型的数据值
|
|
/// </summary>
|
|
public string EquipmentNo;
|
|
/// <summary>
|
|
/// 反写密码
|
|
/// </summary>
|
|
public string Password;
|
|
/// <summary>
|
|
/// 保存版本号
|
|
/// </summary>
|
|
public string VerNum;
|
|
/// <summary>
|
|
/// 序列号
|
|
/// </summary>
|
|
public string SeqNum;
|
|
#endregion
|
|
|
|
public FrmMain()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:初始化设置密码控件</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void BurnCode_Load(object sender, EventArgs e)
|
|
{
|
|
if (DBConfig.Instance.CreateConnection())
|
|
{
|
|
SetCommandBand();
|
|
SetProductBand();
|
|
SetAuthorizationBand();
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show("请检查连接!");
|
|
}
|
|
}
|
|
#region 事件
|
|
#region usb插入拔出事件
|
|
/// <summary>
|
|
/// <para>说明:usb插入拔出事件</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
protected override void WndProc(ref Message m)
|
|
{
|
|
try
|
|
{
|
|
if (m.Msg == WM_DEVICECHANGE)
|
|
{
|
|
switch (m.WParam.ToInt32())
|
|
{
|
|
// USB插上
|
|
case DBT_DEVICEARRIVAL:
|
|
if (!IsCopy) // 如果不用这个判断,会被多次调用,原因不明
|
|
{
|
|
IsCopy = true;
|
|
//WaitForm.ShowForm("正在连接串口请稍后....");
|
|
//if (Program.OpenComm(this.comm, this.band, 8, 0, 1) == 0)
|
|
//{
|
|
// MessageUtil.Show("串口打开失败!");
|
|
// this.label3.Visible = true;
|
|
// this.label3.ForeColor = Color.Red;
|
|
// this.label2.Visible = false;
|
|
// this.label3.Text = "串口打开失败";
|
|
// this.progressBar1.Value = 0;
|
|
// return;
|
|
//}
|
|
//// 其他处理
|
|
//this.Ver.Visible = this.power.Visible = this.days.Visible = true;
|
|
//this.Ver.Text = "版本号:" + Program.GetVer();//获取版本号
|
|
//this.power.Text = "权限:" + Program.GetRun_status(0);//获取权限
|
|
//this.days.Text = "天数:" + Program.GetRun_status(1);//获取天数
|
|
}
|
|
break;
|
|
// USB移除
|
|
case DBT_DEVICEREMOVECOMPLETE:
|
|
IsCopy = false;
|
|
this.Ver.Visible = this.power.Visible = this.days.Visible = false;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageUtil.Show(ex);
|
|
}
|
|
finally
|
|
{
|
|
WaitForm.HideForm();
|
|
}
|
|
base.WndProc(ref m);
|
|
}
|
|
#endregion
|
|
/// <summary>
|
|
/// <para>说明:扫码获取工号</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void OnbtnScanCode(object sender, EventArgs e)
|
|
{
|
|
FrmCamera frmCamera = new FrmCamera();
|
|
// 保存流转步骤
|
|
if (frmCamera.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.FuNumber.Text = frmCamera.resultText;
|
|
this.ScanCodeText.Text = "1";
|
|
}
|
|
}
|
|
|
|
#region
|
|
#endregion
|
|
#region 通过串口保存密码事件
|
|
/// <summary>
|
|
/// <para>说明:通过串口保存密码</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void OnbtnSaveClick(object sender, EventArgs e)
|
|
{
|
|
//if (!IsCopy)
|
|
//{
|
|
// MessageUtil.Show("请检查usb连接!");
|
|
// return;
|
|
//}
|
|
try
|
|
{
|
|
this.label2.Visible = false;
|
|
this.FuNumber.Text = this.ScanCodeText.Text == "1" ? this.FuNumber.Text : string.Empty;
|
|
SeqNum = string.Empty;
|
|
WritebackInformation();
|
|
if (string.IsNullOrEmpty(FuNumber.Text))
|
|
{
|
|
MessageUtil.Show("数据配置不全!请检查");
|
|
return;
|
|
}
|
|
UInt16 num = 998;
|
|
if (this.comboBox1.Text == "")
|
|
{
|
|
MessageBox.Show("授权方式未选择");
|
|
return;
|
|
}
|
|
if (this.comboBox1.Text == "限时运行")
|
|
{
|
|
if (this.textBox1.Text == "")
|
|
{
|
|
MessageBox.Show("授权天数未填");
|
|
return;
|
|
}
|
|
try
|
|
{
|
|
num = Convert.ToUInt16(this.textBox1.Text);
|
|
if (num < 0 || num > 999)
|
|
{
|
|
MessageBox.Show("天数超出范围");
|
|
this.textBox1.Text = "";
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
MessageBox.Show("天数应为数字!");
|
|
this.textBox1.Text = "";
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.label3.BackColor = Color.Transparent;
|
|
this.progressBar1.Minimum = 0;
|
|
this.progressBar1.Maximum = 100;
|
|
string text = this.GeneratePassword(this.FuNumber.Text + this.comboBox1.SelectedValue);
|
|
if (MessageUtil.Show("确定要设置密码为:" + text+"吗?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
|
|
{
|
|
this.label2.Visible = true;
|
|
this.Password = text;
|
|
this.label2.Text = "密码为" + text;
|
|
this.progressBar1.Value = 10;
|
|
if (Program.OpenComm(this.comm, this.band, 8, 0, 1) == 0)
|
|
{
|
|
MessageUtil.Show("串口打开失败!");
|
|
this.label3.Visible = true;
|
|
this.label3.ForeColor = Color.Red;
|
|
this.label2.Visible = false;
|
|
this.label3.Text = "串口打开失败";
|
|
this.progressBar1.Value = 0;
|
|
return;
|
|
}
|
|
VerNum = GetVer(ConvertHex(Program.GetVer() + ""));
|
|
this.Ver.Text = "版本号:" + VerNum;//获取版本号
|
|
for (UInt16 i = 0; i < 6; i++)
|
|
{
|
|
SeqNum += ConvertHex(Program.GetUid(i) + "") + ",";
|
|
}
|
|
SeqNum = SeqNum.TrimEnd(',');
|
|
//this.Ver.Visible = true;
|
|
string text2 = this.comboBox1.Text;
|
|
UInt16 permission = 0;
|
|
//if (!(text2 == "完全授权"))
|
|
//{
|
|
if (text2 == "限时运行")
|
|
{
|
|
permission = 4;
|
|
}
|
|
else if (text2 == "开机管控")
|
|
{
|
|
permission = 2;
|
|
}
|
|
// }
|
|
// else
|
|
//{
|
|
// permission = 2;
|
|
//}
|
|
this.progressBar1.Value = 30;
|
|
int q = Program.SetPassword(Convert.ToUInt32(text) & 0xFFFFF, permission, num);
|
|
if (q == 0)
|
|
{
|
|
WriteAfterInformation();
|
|
}
|
|
else
|
|
{
|
|
this.label3.Visible = true;
|
|
this.label3.ForeColor = Color.Red;
|
|
this.label2.Visible = false;
|
|
this.label3.Text = "写入失败";
|
|
this.btn_Save.Text = "再次写入";
|
|
//SqlHelper.ExecuteNonQuery(string.Format("update MES_SerialNumberInterFaceTab set isok='-1' where EquipmentNo='{0}'", EquipmentNo));
|
|
this.progressBar1.Value = 0;
|
|
this.label3.Text = q + "";
|
|
}
|
|
this.ScanCodeText.Text = "0";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
MessageUtil.Show(ex);
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
#region 授权机器下拉改变时候触发
|
|
/// <summary>
|
|
/// <para>说明:授权机器下拉改变时候触发</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void selectChageProduct(object sender, EventArgs e)
|
|
{
|
|
EquipmentNo = this.product.SelectedValue.ToString();
|
|
if (string.IsNullOrWhiteSpace(EquipmentNo))
|
|
{
|
|
MessageUtil.Show("请选择产品类型!");
|
|
}
|
|
|
|
try
|
|
{
|
|
ByteMatrix byteMatrix = new MultiFormatWriter().encode(EquipmentNo, BarcodeFormat.QR_CODE, 200, 150);
|
|
Bitmap bitmap = toBitmap(byteMatrix);
|
|
pictureBox1.Image = bitmap;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
#endregion
|
|
|
|
#region 方法
|
|
|
|
/// <summary>
|
|
/// 返回版本号分割字符
|
|
/// </summary>
|
|
/// <param name="value">value</param>
|
|
/// <returns></returns>
|
|
public static string GetVer(string value)
|
|
{
|
|
string first = System.Convert.ToInt32(value.Substring(0, 1), 16) + "";
|
|
first = first.Length == 1 ? "0" + first : first;
|
|
string bottom = System.Convert.ToInt32(value.Substring(1, 2), 16) + "";
|
|
bottom = bottom.Length == 1 ? "0" + bottom : bottom;
|
|
bottom = bottom.Length == 2 ? "0" + bottom : bottom;
|
|
string last = System.Convert.ToInt32(value.Substring(3), 16) + "";
|
|
last = last.Length == 1 ? "0" + last : last;
|
|
return first + "," + bottom + "," + last;
|
|
}
|
|
/// <summary>
|
|
/// 返回16进制字符
|
|
/// </summary>
|
|
/// <param name="value">value</param>
|
|
/// <returns></returns>
|
|
public static string GetHexChar(string value)
|
|
{
|
|
string sReturn = string.Empty;
|
|
switch (value)
|
|
{
|
|
case "10":
|
|
sReturn = "A";
|
|
break;
|
|
case "11":
|
|
sReturn = "B";
|
|
break;
|
|
case "12":
|
|
sReturn = "C";
|
|
break;
|
|
case "13":
|
|
sReturn = "D";
|
|
break;
|
|
case "14":
|
|
sReturn = "E";
|
|
break;
|
|
case "15":
|
|
sReturn = "F";
|
|
break;
|
|
default:
|
|
sReturn = value;
|
|
break;
|
|
}
|
|
return sReturn;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回16进制
|
|
/// </summary>
|
|
/// <param name="value">value</param>
|
|
/// <returns></returns>
|
|
|
|
public static string ConvertHex(string value)
|
|
{
|
|
string sReturn = string.Empty;
|
|
try
|
|
{
|
|
while (int.Parse(value) > 16)
|
|
{
|
|
int v = int.Parse(value);
|
|
sReturn = GetHexChar((v % 16).ToString()) + sReturn;
|
|
value = Math.Floor(Convert.ToDouble(v / 16)).ToString();
|
|
}
|
|
sReturn = GetHexChar(value) + sReturn;
|
|
}
|
|
catch
|
|
{
|
|
sReturn = "###Valid Value!###";
|
|
}
|
|
return sReturn;
|
|
}
|
|
#region 通过文本生成二维码
|
|
/// <summary>
|
|
/// <para>说明:通过下拉框生成二维码</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
public static Bitmap toBitmap(ByteMatrix matrix)
|
|
{
|
|
int width = matrix.Width;
|
|
int height = matrix.Height;
|
|
Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
|
for (int x = 0; x < width; x++)
|
|
{
|
|
for (int y = 0; y < height; y++)
|
|
{
|
|
bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
|
|
}
|
|
}
|
|
return bmap;
|
|
}
|
|
#endregion
|
|
#region 初始化设置密码控件
|
|
/// <summary>
|
|
/// <para>说明:初始化设置密码控件</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-05 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private string GeneratePassword(string mac)
|
|
{
|
|
HashAlgorithm hashAlgorithm = new SHA256Managed();
|
|
byte[] array = Encoding.Default.GetBytes(mac);
|
|
array = hashAlgorithm.ComputeHash(array);
|
|
string text = Math.Abs(BitConverter.ToInt32(array, 0) % 999999).ToString();
|
|
if (text.Length < 6)
|
|
{
|
|
text = ("00000" + text).Substring(text.Length - 1, 6);
|
|
}
|
|
return text;
|
|
}
|
|
#endregion
|
|
#region 获取本地存储的串口和波率
|
|
/// <summary>
|
|
/// <para>说明:获取本地存储的串口和波率</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-06 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void SetCommandBand()
|
|
{
|
|
comm = Convert.ToInt32(IniHelper.Read("test.ini", "comm"));
|
|
band = Convert.ToInt32(IniHelper.Read("test.ini", "band"));
|
|
}
|
|
#endregion
|
|
#region 获取本地机器类配置
|
|
/// <summary>
|
|
/// <para>说明:获取本地机器类配置</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-06 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void SetProductBand()
|
|
{
|
|
this.product.ValueMember = "no";
|
|
this.product.DisplayMember = "name";
|
|
DataTable productTable = SqlHelper.ExecuteDataTable(string.Format("select no,name from MES_EquipmentInterFaceTab where computerName='{0}'", ERPInfo.Instance.WindowName));
|
|
if (productTable.Rows.Count > 0)
|
|
{
|
|
this.product.DataSource = productTable;
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show("未配置机器类型表!");
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
#region 获取授权类型配置
|
|
/// <summary>
|
|
/// <para>说明:获取授权类型配置</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-06 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void SetAuthorizationBand()
|
|
{
|
|
this.comboBox1.ValueMember = "CCode";
|
|
this.comboBox1.DisplayMember = "CName";
|
|
DataTable authorizationTable = new DataTable();
|
|
authorizationTable.Columns.Add("CCode");
|
|
authorizationTable.Columns.Add("CName");
|
|
authorizationTable.Rows.Add("2", "开机管控");
|
|
authorizationTable.Rows.Add("4", "限时运行");
|
|
this.comboBox1.DataSource = authorizationTable;
|
|
}
|
|
#endregion
|
|
#region 通过类型反写信息号
|
|
/// <summary>
|
|
/// <para>说明:通过类型反写信息号</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-06 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void WritebackInformation()
|
|
{
|
|
DataTable dt = SqlHelper.ExecuteDataTable(string.Format("select * from MES_SerialNumberInterFaceTab where EquipmentNo='{0}' and isok=0", EquipmentNo));
|
|
|
|
if (dt.Rows.Count > 0 && this.ScanCodeText.Text!="1")
|
|
{
|
|
FuNumber.Text = dt.Rows[0]["barcode"] + "";
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
#region 写入成功后更新数据反写密码
|
|
/// <summary>
|
|
/// <para>说明:写入成功后更新数据反写密码</para>
|
|
/// <para>创建人:王一帆</para>
|
|
/// <para>创建日期:2020-11-06 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
private void WriteAfterInformation()
|
|
{
|
|
this.label3.Visible = true;
|
|
this.label3.ForeColor = Color.Green;
|
|
this.label3.Text = "写入成功";
|
|
this.label2.Visible = true;
|
|
SqlHelper.ExecuteNonQuery(string.Format("update MES_SerialNumberInterFaceTab set password='{0}',isok='1',writeDt='{2}',ismyself='{3}',versionNum='{5}',motherboardNum='{6}' where EquipmentNo='{1}' and barcode='{4}'", Password, EquipmentNo, DateTime.Now.ToString(), this.ScanCodeText.Text, this.FuNumber.Text, VerNum,SeqNum));
|
|
this.progressBar1.Value = 100;
|
|
}
|
|
#endregion
|
|
|
|
private void btn_Close_Click(object sender, EventArgs e)
|
|
{
|
|
// 关闭所有的线程
|
|
System.Environment.Exit(0);
|
|
}
|
|
#endregion
|
|
|
|
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
// 关闭所有的线程
|
|
System.Environment.Exit(0);
|
|
}
|
|
|
|
|
|
}
|
|
}
|