using Panuon.WPF.UI; using Plugin.SNGenerateTool.Entity; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Windows; using System.Windows.Controls; namespace Plugin.SNGenerateTool { /// /// UserControl1.xaml 的交互逻辑 /// public partial class UserControl1 : UserControl, INotifyPropertyChanged { #region ... public virtual event PropertyChangedEventHandler PropertyChanged; protected virtual void Set(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } protected void Set(ref T old, T @new, [CallerMemberName] string propertyName = null) { old = @new; if (propertyName != null) { Set(propertyName); } } #endregion private string iniFile = Path.Combine(Environment.CurrentDirectory, "Config", "UserSettings.ini"); private string[] years = new string[30] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y" }; private string[] months = new string[12] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C" }; private string[] days = new string[31] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y", "Z" }; private string[] F18CY = new string[10] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; private ObservableCollection datasource = new ObservableCollection(); public ObservableCollection Datasource { get => datasource; set { Set(ref datasource, value); } } public UserControl1() { this.DataContext = this; InitializeComponent(); } [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); private void SaveSettings(string section, string file) { if (!File.Exists(file)) { MessageBox.Show("配置文件不存在,保存失败", "错误提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } WritePrivateProfileString(section, "OrderId", tbx_OrderID.Text, file); WritePrivateProfileString(section, "SNPrefix", txt_SNPrefix.Text, file); WritePrivateProfileString(section, "MESStartSN", txt_StartSN.Text, file); WritePrivateProfileString(section, "MESEndSN", txt_EndSN.Text, file); WritePrivateProfileString(section, "XDSNDate", txt_Date1.Text, file); WritePrivateProfileString(section, "XDSNDaySN", txt_StartDaySN.Text, file); WritePrivateProfileString(section, "XDSNSpecialSN", txt_MinSpecialSN.Text, file); WritePrivateProfileString(section, "PartNo", txt_PN.Text, file); WritePrivateProfileString(section, "HW", txt_HW.Text, file); WritePrivateProfileString(section, "SW", txt_SW.Text, file); WritePrivateProfileString(section, "GeelyDU", txt_GeelyDU.Text, file); WritePrivateProfileString(section, "GeelyHWSD", txt_GeelyHWSD.Text, file); WritePrivateProfileString(section, "SXBL", txt_SXBL.Text, file); WritePrivateProfileString(section, "SXDISXBL", txt_SXDISXBL.Text, file); WritePrivateProfileString(section, "VolvoDU", txt_VolvoDU.Text, file); WritePrivateProfileString(section, "VolvoHWSD", txt_VolvoHWSD.Text, file); } public void CreateSN() { Datasource.Clear(); try { int num = Convert.ToInt32(txt_StartSN.Text); int num2 = Convert.ToInt32(txt_EndSN.Text); int num3 = Convert.ToInt32(txt_StartDaySN.Text); int num4 = Convert.ToInt32(txt_MinSpecialSN.Text); int num5 = Convert.ToInt32(txt_StartDHUIDSN.Text); int num6 = Convert.ToInt32(txt_Date1.Text.Substring(0, 4)) % 2001; int num7 = Convert.ToInt32(txt_Date1.Text.Substring(4, 2)) - 1; int num8 = Convert.ToInt32(txt_Date1.Text.Substring(6, 2)) - 1; if (Convert.ToInt32(txt_Date1.Text.Substring(0, 4)) < 2020) { MessageBox.Show("生产日期中的年份早于当前年份!", "错误提示", MessageBoxButton.OK, MessageBoxImage.Hand); return; } int num9 = Convert.ToInt32(txt_Date1.Text.Substring(0, 4)) % 2020; GregorianCalendar gregorianCalendar = new GregorianCalendar(); DateTime time = DateTime.ParseExact(txt_Date1.Text, "yyyyMMdd", CultureInfo.CurrentCulture); int weekOfYear = gregorianCalendar.GetWeekOfYear(time, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday); int num10 = 0; switch (time.DayOfWeek.ToString()) { case "Monday": num10 = 1; break; case "Tuesday": num10 = 2; break; case "Wednesday": num10 = 3; break; case "Thursday": num10 = 4; break; case "Friday": num10 = 5; break; case "Saturday": num10 = 6; break; case "Sunday": num10 = 7; break; } if (txt_StartSN.Text != null && txt_EndSN.Text != null && num <= num2 && txt_EndSN.Text.Length < 5) { int num11 = num; int num12 = num3; int num13 = num4; int num14 = num5; while (num11 <= num2) { DataRow dataRow = null; DataInfo di = new DataInfo(); if (num12.ToString().Length < 5 && num13.ToString().Length < 8 && num14.ToString().Length < 5) { string text = txt_PCODE.Text.Trim() + years[num6] + num13.ToString().PadLeft(7, '0'); string text2 = HashPlus.GetHashMD5(text).ToUpper(); text2 = text2.Substring(0, 8) + "-" + text2.Substring(8, 4) + "-" + text2.Substring(12, 4) + "-" + text2.Substring(16, 4) + "-" + text2.Substring(20, 12); string text3 = txt_SNPrefix.Text + num11.ToString().PadLeft(4, '0'); string text4 = txt_PCODE.Text + txt_MachineCode.Text + txt_FactoryCode.Text + txt_LineNo1.Text + years[num6] + months[num7] + days[num8] + num12.ToString().PadLeft(4, '0') + num13.ToString().PadLeft(7, '0'); string text5 = txt_VendorCode.Text + txt_PN.Text + years[num6] + months[num7] + days[num8] + txt_ShiftsNo.Text + num14.ToString().PadLeft(4, '0'); string empty = string.Empty; empty = F18CY[num9] + weekOfYear.ToString().PadLeft(2, '0') + num10 + num12.ToString().PadLeft(4, '0'); if (text3.Length != 14 && text4.Length != 24 && text5.Length != 24) { MessageBox.Show("MESSN / XDSN / DHUID长度有误,请检查输入的数据是否有误!", "Error", MessageBoxButton.OK, MessageBoxImage.Hand); return; } //dataRow["GUID"] = text2; //dataRow["Orderid"] = tbx_OrderID.Text.Trim(); //dataRow["Model"] = cbox_Model.Text.Trim(); //dataRow["MESSN"] = text3.Trim(); //dataRow["XDSN"] = text4.Trim(); //dataRow["DHUID"] = text5.Trim(); //dataRow["ProductSN"] = empty.Trim(); //dataRow["HW"] = txt_HW.Text.PadRight(16, '0').Trim(); //dataRow["SW"] = txt_SW.Text.Trim(); //dataRow["SXBL"] = txt_SXBL.Text.Trim(); //dataRow["SXDI_SXBL"] = txt_SXDISXBL.Text.Trim(); //dataRow["GeelyDU"] = txt_GeelyDU.Text.Trim(); //dataRow["GeelyHWSD"] = txt_GeelyHWSD.Text.Trim(); //dataRow["ECUDAPN"] = txt_VolvoDU.Text.Trim(); //dataRow["ECUCAPN"] = txt_VolvoHWSD.Text.Trim(); //dataRow["Status"] = 0; //dataRow["CreateTime"] = Convert.ToDateTime(DateTime.Now.ToString("G")); di.GUID = text2; di.OrderID = tbx_OrderID.Text.Trim(); di.Model = cbox_Model.Text.Trim(); di.MESSN = text3.Trim(); di.XDSN = text4.Trim(); di.DHUID = text5.Trim(); di.ProductSN = empty.Trim(); di.HW = txt_HW.Text.PadRight(16, '0').Trim(); di.SW = txt_SW.Text.Trim(); di.SXBL = txt_SXBL.Text.Trim(); di.SXDI_SXBL = txt_SXDISXBL.Text.Trim(); di.GeelyDU = txt_GeelyDU.Text.Trim(); di.GeelyHWSD = txt_GeelyHWSD.Text.Trim(); di.ECUDAPN = txt_VolvoDU.Text.Trim(); di.ECUCAPN = txt_VolvoHWSD.Text.Trim(); di.Status = 0; di.CreateTime = Convert.ToDateTime(DateTime.Now.ToString("G")); Datasource.Add(di); num11++; num12++; num13++; num14++; continue; } MessageBox.Show("日流水号或连续号位数超出范围", "错误提示", MessageBoxButton.OK, MessageBoxImage.Hand); break; } //toolStripStatusLabel8.Text = $"{table.Rows.Count}行"; } else { MessageBox.Show("请检查所有文本框是否有填写,并确认SN的流水号及位数是否有误", "错误提示", MessageBoxButton.OK, MessageBoxImage.Hand); } } catch (Exception ex) { MessageBox.Show(ex.Message, "错误提示", MessageBoxButton.OK, MessageBoxImage.Hand); } } private void Button_Click(object sender, RoutedEventArgs e) { SaveSettings(cbox_Model.Text, iniFile); CreateSN(); } } }