Procházet zdrojové kódy

添加体温枪生产打码相关

DESKTOP-34DQRNR\TJK před 2 roky
rodič
revize
08f1868604
32 změnil soubory, kde provedl 11310 přidání a 21 odebrání
  1. 4361 0
      .gitignore
  2. 35 0
      WDProduceTool/CNPrintTemplateData/ThermometerQCData.cs
  3. 32 0
      WDProduceTool/CNPrintTemplateData/ThermometerSecurityData.cs
  4. 3 0
      WDProduceTool/Common/Constants.cs
  5. 7 0
      WDProduceTool/Context/WdSqliteDbContext.cs
  6. 1 1
      WDProduceTool/Forms/FrmCarePackage.cs
  7. 30 4
      WDProduceTool/Forms/FrmSetting.Designer.cs
  8. 7 0
      WDProduceTool/Forms/FrmSetting.cs
  9. 4 0
      WDProduceTool/Forms/FrmSync.cs
  10. 437 0
      WDProduceTool/Forms/FrmThermometerCoding.Designer.cs
  11. 399 0
      WDProduceTool/Forms/FrmThermometerCoding.cs
  12. 1193 0
      WDProduceTool/Forms/FrmThermometerCoding.resx
  13. 23 12
      WDProduceTool/Forms/MDIMain.Designer.cs
  14. 14 0
      WDProduceTool/Forms/MDIMain.cs
  15. 26 0
      WDProduceTool/Forms/MDIMain.resx
  16. 57 0
      WDProduceTool/Model/WdThermometerCategory.cs
  17. 110 0
      WDProduceTool/Model/WdThermometerProduced.cs
  18. 42 0
      WDProduceTool/Model/WdThermometerSchedual.cs
  19. 255 4
      WDProduceTool/Service/ProduceService.cs
  20. 2 0
      WDProduceTool/Utils/RestHelper.cs
  21. 3 0
      WDProduceTool/WDProduceTool.csproj.user
  22. binární
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/net6.0-windows10.0.22000.0.zip
  23. binární
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F030_CREATE.bin
  24. 1049 0
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F072_HSI_HV20_SV91_200320_T_ZH_FJ.hex
  25. 2100 0
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F072_MKI_L10_RK3128_HV22_SV21_200820.hex
  26. binární
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/can_mcu.bin
  27. 779 0
      WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/wdkl_gnb_no_mac.hex
  28. binární
      WDProduceTool/db/wd_pdm.db
  29. binární
      WDProduceTool/obj/Debug/net6.0-windows10.0.22000.0/WDProduceTool.Forms.FrmThermometerCoding.resources
  30. binární
      WDProduceTool/obj/Release/net6.0-windows10.0.22000.0/WDProduceTool.Forms.FrmThermometerCoding.resources
  31. 257 0
      thermometer_qc.xml
  32. 84 0
      thermometer_security.xml

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4361 - 0
.gitignore


+ 35 - 0
WDProduceTool/CNPrintTemplateData/ThermometerQCData.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WDProduceTool.Model;
+
+namespace WDProduceTool.CNPrintTemplateData
+{
+    public class ThermometerQCData
+    {
+        public string model { get; set; }
+        public string batch_number { get; set; }
+        public string produce_date { get; set; }
+
+        public string expiration { get; set; }
+        public string name { get; set; }
+
+        public string checker { get; set; }
+
+
+        public ThermometerQCData(WdThermometerProduced wdThermometerProduced)
+        {
+            this.model = wdThermometerProduced.model;
+            this.batch_number = wdThermometerProduced.batch_number;
+            var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+            dtDateTime = dtDateTime.AddMilliseconds(long.Parse(wdThermometerProduced.produce_date.ToString()) * 1000);
+            this.produce_date  = dtDateTime.ToString("yyyy/MM/dd");
+            this.expiration = wdThermometerProduced.expiration;
+            this.name = wdThermometerProduced.name;
+            this.checker = wdThermometerProduced.schedual_code + "001";
+
+        }
+    }
+}

+ 32 - 0
WDProduceTool/CNPrintTemplateData/ThermometerSecurityData.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WDProduceTool.Model;
+
+namespace WDProduceTool.CNPrintTemplateData
+{
+    public class ThermometerSecurityData
+    {
+        public string security_code { get; set; }
+        public string produce_date { get; set; }
+
+        public string batch_number { get; set; }
+
+        public string serial_no { get; set; }
+
+        public string number { get; set; }
+
+        public ThermometerSecurityData(WdThermometerProduced wdThermometerProduced)
+        {
+            this.batch_number = wdThermometerProduced.batch_number;
+            this.serial_no = wdThermometerProduced.serial_no;
+            this.number = wdThermometerProduced.number;
+            var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+            dtDateTime = dtDateTime.AddMilliseconds(long.Parse(wdThermometerProduced.produce_date.ToString()) * 1000);
+            this.produce_date = dtDateTime.ToString("yyyy/MM/dd");            
+            this.security_code = "http://m.wdklian.com/care/thermometer/" + wdThermometerProduced.security_code;
+        }
+    }
+}

+ 3 - 0
WDProduceTool/Common/Constants.cs

@@ -36,5 +36,8 @@ namespace WDProduceTool.Common
         public static WebsocketClient clientSocket;
         //产品出库上传接口
         public const string PRODUCT_UPLOAD_SERVER = "PRODUCT_UPLOAD_SERVER";
+
+        //体温枪防伪码生成地址
+        public const string THERMOMETER_SECURITY_CODE_SERVER = "THERMOMETER_SECURITY_CODE_SERVER";
     }
 }

+ 7 - 0
WDProduceTool/Context/WdSqliteDbContext.cs

@@ -69,5 +69,12 @@ namespace WDProduceTool.Context
         public DbSet<CareDeviceCategory> CareDeviceCategorieSet { get; set; }
 
         public DbSet<CareDeviceDetail> CareDeviceDetailSet { get; set; }
+
+        public DbSet<WdThermometerCategory> WdThermometerCategorySet { get; set; }
+
+        public DbSet<WdThermometerSchedual> WdThermometerSchedualSet { get; set; }
+
+
+        public DbSet<WdThermometerProduced> WdThermometerProducedSet { get; set; }
     }
 }

+ 1 - 1
WDProduceTool/Forms/FrmCarePackage.cs

@@ -863,7 +863,7 @@ e.KeyChar != 1 && e.KeyChar != 3 && e.KeyChar != 22)
             }
             if (checkIds.Count == 0)
             {
-                MessageBox.Show("请勾选要重打的数据行!");
+                MessageBox.Show("请勾选要删除的数据行!");
                 return;
             }
             service.deleteCareDeviceDetail(checkIds);

+ 30 - 4
WDProduceTool/Forms/FrmSetting.Designer.cs

@@ -45,6 +45,8 @@
             this.txt_product_out_server = new System.Windows.Forms.TextBox();
             this.init_mac_record = new System.Windows.Forms.Button();
             this.clear_produce_product = new System.Windows.Forms.Button();
+            this.label4 = new System.Windows.Forms.Label();
+            this.txt_thermometer_server = new System.Windows.Forms.TextBox();
             this.SuspendLayout();
             // 
             // lb_server_url
@@ -75,6 +77,7 @@
             this.txt_server_url.Name = "txt_server_url";
             this.txt_server_url.Size = new System.Drawing.Size(561, 25);
             this.txt_server_url.TabIndex = 0;
+            this.txt_server_url.Text = "http://119.23.151.229";
             // 
             // txt_server_port
             // 
@@ -84,11 +87,12 @@
             this.txt_server_port.Name = "txt_server_port";
             this.txt_server_port.Size = new System.Drawing.Size(561, 25);
             this.txt_server_port.TabIndex = 1;
+            this.txt_server_port.Text = "8086";
             // 
             // btn_save
             // 
             this.btn_save.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
-            this.btn_save.Location = new System.Drawing.Point(141, 395);
+            this.btn_save.Location = new System.Drawing.Point(137, 406);
             this.btn_save.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.btn_save.Name = "btn_save";
             this.btn_save.Size = new System.Drawing.Size(131, 38);
@@ -131,7 +135,7 @@
             // btn_server_test
             // 
             this.btn_server_test.BackColor = System.Drawing.Color.DodgerBlue;
-            this.btn_server_test.Location = new System.Drawing.Point(302, 395);
+            this.btn_server_test.Location = new System.Drawing.Point(298, 406);
             this.btn_server_test.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.btn_server_test.Name = "btn_server_test";
             this.btn_server_test.Size = new System.Drawing.Size(127, 38);
@@ -183,10 +187,11 @@
             this.txt_product_out_server.PlaceholderText = "请输入产品出口上传接口地址";
             this.txt_product_out_server.Size = new System.Drawing.Size(564, 25);
             this.txt_product_out_server.TabIndex = 12;
+            this.txt_product_out_server.Text = "http://api.base.wdklian.com";
             // 
             // init_mac_record
             // 
-            this.init_mac_record.Location = new System.Drawing.Point(455, 395);
+            this.init_mac_record.Location = new System.Drawing.Point(454, 406);
             this.init_mac_record.Name = "init_mac_record";
             this.init_mac_record.Size = new System.Drawing.Size(160, 38);
             this.init_mac_record.TabIndex = 13;
@@ -196,7 +201,7 @@
             // 
             // clear_produce_product
             // 
-            this.clear_produce_product.Location = new System.Drawing.Point(641, 397);
+            this.clear_produce_product.Location = new System.Drawing.Point(641, 408);
             this.clear_produce_product.Name = "clear_produce_product";
             this.clear_produce_product.Size = new System.Drawing.Size(136, 36);
             this.clear_produce_product.TabIndex = 14;
@@ -204,6 +209,23 @@
             this.clear_produce_product.UseVisualStyleBackColor = true;
             this.clear_produce_product.Click += new System.EventHandler(this.clear_produce_product_Click);
             // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(3, 357);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(149, 20);
+            this.label4.TabIndex = 15;
+            this.label4.Text = "体温枪防伪码生成地址";
+            // 
+            // txt_thermometer_server
+            // 
+            this.txt_thermometer_server.Location = new System.Drawing.Point(206, 359);
+            this.txt_thermometer_server.Name = "txt_thermometer_server";
+            this.txt_thermometer_server.Size = new System.Drawing.Size(564, 25);
+            this.txt_thermometer_server.TabIndex = 16;
+            this.txt_thermometer_server.Text = "http://api.buyer.wdklian.com";
+            // 
             // FrmSetting
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
@@ -211,6 +233,8 @@
             this.BackColor = System.Drawing.SystemColors.Control;
             this.ClientSize = new System.Drawing.Size(914, 529);
             this.ControlBox = false;
+            this.Controls.Add(this.txt_thermometer_server);
+            this.Controls.Add(this.label4);
             this.Controls.Add(this.clear_produce_product);
             this.Controls.Add(this.init_mac_record);
             this.Controls.Add(this.txt_product_out_server);
@@ -258,5 +282,7 @@
         private TextBox txt_product_out_server;
         private Button init_mac_record;
         private Button clear_produce_product;
+        private Label label4;
+        private TextBox txt_thermometer_server;
     }
 }

+ 7 - 0
WDProduceTool/Forms/FrmSetting.cs

@@ -56,6 +56,12 @@ namespace WDProduceTool.Forms
                 return;
             }
 
+            if (String.IsNullOrEmpty(txt_thermometer_server.Text))
+            {
+                MessageBox.Show("请输入体温枪防伪码生成地址", "系统提示");
+                return;
+            }
+
             //保存配置
             ParamConfigHelper.SaveParamer(Constants.SERVER_URL, txt_server_url.Text);
             ParamConfigHelper.SaveParamer(Constants.SERVER_PORT, txt_server_port.Text);
@@ -63,6 +69,7 @@ namespace WDProduceTool.Forms
             ParamConfigHelper.SaveParamer(Constants.MAC_DISPATCH_QUANTITY, txt_dispatch_qty.Text);
             ParamConfigHelper.SaveParamer(Constants.OPEN_DEBUG_LOG, cb_debug.Checked.ToString());
             ParamConfigHelper.SaveParamer(Constants.PRODUCT_UPLOAD_SERVER, txt_product_out_server.Text);
+            ParamConfigHelper.SaveParamer(Constants.THERMOMETER_SECURITY_CODE_SERVER, txt_thermometer_server.Text);
             Constants.serverUrl = txt_server_url.Text + ":" + txt_server_port.Text;
             MessageBox.Show("保存成功!", "系统提示");
 

+ 4 - 0
WDProduceTool/Forms/FrmSync.cs

@@ -55,6 +55,10 @@ namespace WDProduceTool.Forms
                 Thread.Sleep(1000);
                 service.SyncProductCategoryLabelPrefix();
                 Thread.Sleep(1000);
+                service.SyncThemometerCategory();
+                Thread.Sleep(1000);
+                service.SyncThemometerSchedual();
+                Thread.Sleep(1000);
                 service.DownLoadFile();
 
 

+ 437 - 0
WDProduceTool/Forms/FrmThermometerCoding.Designer.cs

@@ -0,0 +1,437 @@
+namespace WDProduceTool.Forms
+{
+    partial class FrmThermometerCoding
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmThermometerCoding));
+            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.cb_model = new System.Windows.Forms.ComboBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel3 = new System.Windows.Forms.Panel();
+            this.cb_schedual = new System.Windows.Forms.ComboBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.panel4 = new System.Windows.Forms.Panel();
+            this.txt_qty = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.panel5 = new System.Windows.Forms.Panel();
+            this.date_time_picker = new System.Windows.Forms.DateTimePicker();
+            this.label4 = new System.Windows.Forms.Label();
+            this.panel6 = new System.Windows.Forms.Panel();
+            this.cb_printer = new System.Windows.Forms.ComboBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.panel7 = new System.Windows.Forms.Panel();
+            this.cb_operate = new System.Windows.Forms.ComboBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.dataGridView1 = new System.Windows.Forms.DataGridView();
+            this.btn_choose_unprint = new System.Windows.Forms.Button();
+            this.btn_generate = new System.Windows.Forms.Button();
+            this.btn_upload_choosed = new System.Windows.Forms.Button();
+            this.btn_print_choosed = new System.Windows.Forms.Button();
+            this.btn_delete_choosed = new System.Windows.Forms.Button();
+            this.tableLayoutPanel1.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.panel3.SuspendLayout();
+            this.panel4.SuspendLayout();
+            this.panel5.SuspendLayout();
+            this.panel6.SuspendLayout();
+            this.panel7.SuspendLayout();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // tableLayoutPanel1
+            // 
+            this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.tableLayoutPanel1.ColumnCount = 3;
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
+            this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 0);
+            this.tableLayoutPanel1.Controls.Add(this.panel3, 1, 0);
+            this.tableLayoutPanel1.Controls.Add(this.panel4, 2, 0);
+            this.tableLayoutPanel1.Controls.Add(this.panel5, 0, 1);
+            this.tableLayoutPanel1.Controls.Add(this.panel6, 1, 1);
+            this.tableLayoutPanel1.Controls.Add(this.panel7, 2, 1);
+            this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
+            this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+            this.tableLayoutPanel1.RowCount = 2;
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(913, 89);
+            this.tableLayoutPanel1.TabIndex = 0;
+            // 
+            // panel2
+            // 
+            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel2.Controls.Add(this.cb_model);
+            this.panel2.Controls.Add(this.label1);
+            this.panel2.Location = new System.Drawing.Point(3, 3);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(298, 38);
+            this.panel2.TabIndex = 0;
+            // 
+            // cb_model
+            // 
+            this.cb_model.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.cb_model.FormattingEnabled = true;
+            this.cb_model.Location = new System.Drawing.Point(79, 6);
+            this.cb_model.Name = "cb_model";
+            this.cb_model.Size = new System.Drawing.Size(206, 25);
+            this.cb_model.TabIndex = 1;
+            // 
+            // label1
+            // 
+            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(9, 9);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(68, 17);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "体温枪型号";
+            // 
+            // panel3
+            // 
+            this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel3.Controls.Add(this.cb_schedual);
+            this.panel3.Controls.Add(this.label2);
+            this.panel3.Location = new System.Drawing.Point(307, 3);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(298, 38);
+            this.panel3.TabIndex = 1;
+            // 
+            // cb_schedual
+            // 
+            this.cb_schedual.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.cb_schedual.FormattingEnabled = true;
+            this.cb_schedual.Location = new System.Drawing.Point(80, 6);
+            this.cb_schedual.Name = "cb_schedual";
+            this.cb_schedual.Size = new System.Drawing.Size(204, 25);
+            this.cb_schedual.TabIndex = 1;
+            // 
+            // label2
+            // 
+            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(14, 9);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(56, 17);
+            this.label2.TabIndex = 0;
+            this.label2.Text = "生产班次";
+            // 
+            // panel4
+            // 
+            this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel4.Controls.Add(this.txt_qty);
+            this.panel4.Controls.Add(this.label3);
+            this.panel4.Location = new System.Drawing.Point(611, 3);
+            this.panel4.Name = "panel4";
+            this.panel4.Size = new System.Drawing.Size(299, 38);
+            this.panel4.TabIndex = 2;
+            // 
+            // txt_qty
+            // 
+            this.txt_qty.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txt_qty.Location = new System.Drawing.Point(74, 7);
+            this.txt_qty.Name = "txt_qty";
+            this.txt_qty.Size = new System.Drawing.Size(214, 23);
+            this.txt_qty.TabIndex = 1;
+            this.txt_qty.Text = "100";
+            this.txt_qty.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txt_qty_KeyPress);
+            // 
+            // label3
+            // 
+            this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(12, 9);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(56, 17);
+            this.label3.TabIndex = 0;
+            this.label3.Text = "生产数量";
+            // 
+            // panel5
+            // 
+            this.panel5.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel5.Controls.Add(this.date_time_picker);
+            this.panel5.Controls.Add(this.label4);
+            this.panel5.Location = new System.Drawing.Point(3, 47);
+            this.panel5.Name = "panel5";
+            this.panel5.Size = new System.Drawing.Size(298, 39);
+            this.panel5.TabIndex = 3;
+            // 
+            // date_time_picker
+            // 
+            this.date_time_picker.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.date_time_picker.Location = new System.Drawing.Point(79, 6);
+            this.date_time_picker.Name = "date_time_picker";
+            this.date_time_picker.Size = new System.Drawing.Size(206, 23);
+            this.date_time_picker.TabIndex = 1;
+            // 
+            // label4
+            // 
+            this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(9, 11);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(56, 17);
+            this.label4.TabIndex = 0;
+            this.label4.Text = "生产日期";
+            // 
+            // panel6
+            // 
+            this.panel6.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel6.Controls.Add(this.cb_printer);
+            this.panel6.Controls.Add(this.label5);
+            this.panel6.Location = new System.Drawing.Point(307, 47);
+            this.panel6.Name = "panel6";
+            this.panel6.Size = new System.Drawing.Size(298, 39);
+            this.panel6.TabIndex = 4;
+            // 
+            // cb_printer
+            // 
+            this.cb_printer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.cb_printer.FormattingEnabled = true;
+            this.cb_printer.Location = new System.Drawing.Point(80, 6);
+            this.cb_printer.Name = "cb_printer";
+            this.cb_printer.Size = new System.Drawing.Size(204, 25);
+            this.cb_printer.TabIndex = 1;
+            // 
+            // label5
+            // 
+            this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(16, 10);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(44, 17);
+            this.label5.TabIndex = 0;
+            this.label5.Text = "打印机";
+            // 
+            // panel7
+            // 
+            this.panel7.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel7.Controls.Add(this.cb_operate);
+            this.panel7.Controls.Add(this.label6);
+            this.panel7.Location = new System.Drawing.Point(611, 47);
+            this.panel7.Name = "panel7";
+            this.panel7.Size = new System.Drawing.Size(299, 39);
+            this.panel7.TabIndex = 5;
+            // 
+            // cb_operate
+            // 
+            this.cb_operate.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.cb_operate.FormattingEnabled = true;
+            this.cb_operate.Items.AddRange(new object[] {
+            "防伪标贴",
+            "合格证"});
+            this.cb_operate.Location = new System.Drawing.Point(72, 8);
+            this.cb_operate.Name = "cb_operate";
+            this.cb_operate.Size = new System.Drawing.Size(216, 25);
+            this.cb_operate.TabIndex = 1;
+            // 
+            // label6
+            // 
+            this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(12, 10);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(56, 17);
+            this.label6.TabIndex = 0;
+            this.label6.Text = "打印类型";
+            // 
+            // panel1
+            // 
+            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.panel1.Controls.Add(this.tableLayoutPanel1);
+            this.panel1.Location = new System.Drawing.Point(3, 3);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(919, 95);
+            this.panel1.TabIndex = 0;
+            // 
+            // dataGridView1
+            // 
+            this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
+            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridView1.Location = new System.Drawing.Point(6, 152);
+            this.dataGridView1.Name = "dataGridView1";
+            this.dataGridView1.RowTemplate.Height = 25;
+            this.dataGridView1.Size = new System.Drawing.Size(916, 372);
+            this.dataGridView1.TabIndex = 1;
+            this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting);
+            // 
+            // btn_choose_unprint
+            // 
+            this.btn_choose_unprint.Location = new System.Drawing.Point(131, 116);
+            this.btn_choose_unprint.Name = "btn_choose_unprint";
+            this.btn_choose_unprint.Size = new System.Drawing.Size(106, 23);
+            this.btn_choose_unprint.TabIndex = 2;
+            this.btn_choose_unprint.Text = "选择未打印数据";
+            this.btn_choose_unprint.UseVisualStyleBackColor = true;
+            this.btn_choose_unprint.Click += new System.EventHandler(this.btn_choose_unprint_Click);
+            // 
+            // btn_generate
+            // 
+            this.btn_generate.Location = new System.Drawing.Point(12, 116);
+            this.btn_generate.Name = "btn_generate";
+            this.btn_generate.Size = new System.Drawing.Size(100, 23);
+            this.btn_generate.TabIndex = 3;
+            this.btn_generate.Text = "生成数据";
+            this.btn_generate.UseVisualStyleBackColor = true;
+            this.btn_generate.Click += new System.EventHandler(this.btn_generate_Click);
+            // 
+            // btn_upload_choosed
+            // 
+            this.btn_upload_choosed.Location = new System.Drawing.Point(393, 116);
+            this.btn_upload_choosed.Name = "btn_upload_choosed";
+            this.btn_upload_choosed.Size = new System.Drawing.Size(105, 23);
+            this.btn_upload_choosed.TabIndex = 4;
+            this.btn_upload_choosed.Text = "上传数据";
+            this.btn_upload_choosed.UseVisualStyleBackColor = true;
+            this.btn_upload_choosed.Click += new System.EventHandler(this.btn_upload_choosed_Click);
+            // 
+            // btn_print_choosed
+            // 
+            this.btn_print_choosed.Location = new System.Drawing.Point(257, 116);
+            this.btn_print_choosed.Name = "btn_print_choosed";
+            this.btn_print_choosed.Size = new System.Drawing.Size(116, 23);
+            this.btn_print_choosed.TabIndex = 5;
+            this.btn_print_choosed.Text = "打印选中数据";
+            this.btn_print_choosed.UseVisualStyleBackColor = true;
+            this.btn_print_choosed.Click += new System.EventHandler(this.btn_print_choosed_Click);
+            // 
+            // btn_delete_choosed
+            // 
+            this.btn_delete_choosed.Location = new System.Drawing.Point(522, 116);
+            this.btn_delete_choosed.Name = "btn_delete_choosed";
+            this.btn_delete_choosed.Size = new System.Drawing.Size(116, 23);
+            this.btn_delete_choosed.TabIndex = 6;
+            this.btn_delete_choosed.Text = "删除选中数据";
+            this.btn_delete_choosed.UseVisualStyleBackColor = true;
+            this.btn_delete_choosed.Click += new System.EventHandler(this.btn_delete_choosed_Click);
+            // 
+            // FrmThermometerCoding
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(926, 536);
+            this.ControlBox = false;
+            this.Controls.Add(this.btn_delete_choosed);
+            this.Controls.Add(this.btn_print_choosed);
+            this.Controls.Add(this.btn_upload_choosed);
+            this.Controls.Add(this.btn_generate);
+            this.Controls.Add(this.btn_choose_unprint);
+            this.Controls.Add(this.dataGridView1);
+            this.Controls.Add(this.panel1);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.Name = "FrmThermometerCoding";
+            this.Text = "体温枪生产配套";
+            this.tableLayoutPanel1.ResumeLayout(false);
+            this.panel2.ResumeLayout(false);
+            this.panel2.PerformLayout();
+            this.panel3.ResumeLayout(false);
+            this.panel3.PerformLayout();
+            this.panel4.ResumeLayout(false);
+            this.panel4.PerformLayout();
+            this.panel5.ResumeLayout(false);
+            this.panel5.PerformLayout();
+            this.panel6.ResumeLayout(false);
+            this.panel6.PerformLayout();
+            this.panel7.ResumeLayout(false);
+            this.panel7.PerformLayout();
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private TableLayoutPanel tableLayoutPanel1;
+        private Panel panel2;
+        private ComboBox cb_model;
+        private Label label1;
+        private Panel panel3;
+        private ComboBox cb_schedual;
+        private Label label2;
+        private Panel panel4;
+        private TextBox txt_qty;
+        private Label label3;
+        private Panel panel5;
+        private DateTimePicker date_time_picker;
+        private Label label4;
+        private Panel panel6;
+        private ComboBox cb_printer;
+        private Label label5;
+        private Panel panel1;
+        private Panel panel7;
+        private DataGridView dataGridView1;
+        private ComboBox cb_operate;
+        private Label label6;
+        private Button btn_choose_unprint;
+        private Button btn_generate;
+        private Button btn_upload_choosed;
+        private Button btn_print_choosed;
+        private Button btn_delete_choosed;
+    }
+}

+ 399 - 0
WDProduceTool/Forms/FrmThermometerCoding.cs

@@ -0,0 +1,399 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using WDProduceTool.CNPrintTemplateData;
+using WDProduceTool.Common;
+using WDProduceTool.Context;
+using WDProduceTool.controls;
+using WDProduceTool.Model;
+using WDProduceTool.Service;
+using WDProduceTool.Utils;
+
+namespace WDProduceTool.Forms
+{
+    public partial class FrmThermometerCoding : Form
+    {
+        ProduceService service = null;
+        private List<WdThermometerCategory> categories = new List<WdThermometerCategory>();
+        private List<WdThermometerSchedual> scheduals = new List<WdThermometerSchedual>();
+        private List<WdPrinterSolution> thermometerSolution = new List<WdPrinterSolution>();
+        public FrmThermometerCoding()
+        {
+            InitializeComponent();
+            service = new ProduceService();
+            initComponents();
+        }
+
+        private void initComponents()
+        {
+
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+                categories = context.WdThermometerCategorySet.ToList();
+                scheduals = context.WdThermometerSchedualSet.ToList();
+                cb_model.DataSource = categories;
+                cb_model.DisplayMember = "name";
+                cb_model.ValueMember = "union_id";
+                cb_model.AutoCompleteMode = AutoCompleteMode.None;
+                if (categories.Count > 0)
+                {
+                    cb_model.SelectedIndex = 0;
+                }
+                
+                cb_schedual.DataSource = scheduals;
+                cb_schedual.DisplayMember = "schedual_name";
+                cb_schedual.ValueMember = "union_id";
+                cb_schedual.AutoCompleteMode = AutoCompleteMode.None;
+                if (scheduals.Count > 0)
+                {
+                    cb_schedual.SelectedIndex = 0;
+                }
+               
+                string printName = ParamConfigHelper.GetParamByName(Constants.PRINTER_NAME);
+                List<string> prints = PrintHelper.GetLocalPrinters();
+                string defaultPrint = PrintHelper.GetDefaultPrinter();
+                cb_printer.DataSource = prints;
+                if (!string.IsNullOrEmpty(printName))
+                {
+                    int pindex = prints.IndexOf(printName);
+                    cb_printer.SelectedIndex = pindex;
+                }
+                cb_operate.SelectedIndex = 0;
+
+                this.dataGridView1.AutoGenerateColumns = false; // 防止自由生成所有数据列
+                this.dataGridView1.AllowUserToAddRows = false;
+                DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell();
+                cbHeader.Value = "全选";
+                cbHeader.OnCheckBoxClicked += new CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked);
+                DataGridViewCheckBoxColumn checkbox = new DataGridViewCheckBoxColumn();
+
+                checkbox.Name = "IsChecked";
+                checkbox.TrueValue = true;
+                checkbox.FalseValue = false;
+                checkbox.DataPropertyName = "IsChecked";
+
+                dataGridView1.Columns.Insert(0, checkbox);
+                // 防止自由生成所有数据列
+                dataGridView1.Columns.Add("name", "体温枪名称");              // 手动添加某列
+                dataGridView1.Columns.Add("model", "体温枪型号");
+                dataGridView1.Columns.Add("serial_no", "出厂编号");
+                dataGridView1.Columns.Add("security_code", "防伪码");
+                dataGridView1.Columns.Add("batch_number", "生产批号");
+                dataGridView1.Columns.Add("schedual_code", "生产班次");
+                dataGridView1.Columns.Add("number", "批次序号");
+                dataGridView1.Columns.Add("produce_date", "生产日期");                
+                dataGridView1.Columns.Add("uploaded", "是否已上传");
+                dataGridView1.Columns.Add("security_printed", "已打印防伪标贴");
+                dataGridView1.Columns.Add("qc_printed", "已打印合格证");
+                dataGridView1.Columns.Add("union_id", "union_id");
+                dataGridView1.Columns.Add("expiration", "使用期限");
+                dataGridView1.Columns[0].HeaderCell = cbHeader;
+                dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
+                dataGridView1.Columns[0].Width = 100;
+                dataGridView1.Columns[1].DataPropertyName = "name";
+                dataGridView1.Columns[2].DataPropertyName = "model";
+                dataGridView1.Columns[3].DataPropertyName = "serial_no";
+                dataGridView1.Columns[4].DataPropertyName = "security_code";
+                dataGridView1.Columns[5].DataPropertyName = "batch_number";
+                dataGridView1.Columns[6].DataPropertyName = "schedual_code";
+                dataGridView1.Columns[7].DataPropertyName = "number";
+                dataGridView1.Columns[8].DataPropertyName = "produce_date";
+                dataGridView1.Columns[9].DataPropertyName = "uploaded";
+                dataGridView1.Columns[10].DataPropertyName = "security_printed";
+                dataGridView1.Columns[10].Width = 130;
+                dataGridView1.Columns[11].DataPropertyName = "qc_printed";
+                dataGridView1.Columns[11].Width = 130;
+                dataGridView1.Columns[12].DataPropertyName = "union_id";
+                dataGridView1.Columns[12].Visible = false;
+                dataGridView1.Columns[13].DataPropertyName = "expiration";
+                dataGridView1.Columns[13].Width = 120;
+                BindData();
+                thermometerSolution = context.WdPrinterSolutionSet.Where(p=>p.dev_value==10 || p.dev_value==11).ToList();
+
+
+
+            }
+        }
+
+
+        private void cbHeader_OnCheckBoxClicked(bool state)
+        {
+            //这一句很重要结束编辑状态
+            dataGridView1.EndEdit();
+            if (dataGridView1.Rows.Count > 0)
+            {
+                for (int i = 0; i < dataGridView1.Rows.Count; i++)
+                {
+                    dataGridView1.Rows[i].Cells[0].Value = state;
+                }
+            }
+        }
+
+        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
+        {
+            switch (e.ColumnIndex)
+            {
+                case 9:
+                case 10:
+                case 11:
+                    if (e.Value != null && e.Value.ToString() == "True")
+                    {
+                        e.Value = "是";
+                        e.CellStyle.ForeColor = Color.DarkTurquoise;
+                    }
+                    else
+                    {
+                        e.Value = "否";
+                        e.CellStyle.ForeColor = Color.Red;
+                    }
+                    break;
+                case 8:
+                    if (e.Value != null && !String.IsNullOrEmpty(e.Value.ToString()))
+                    {
+                        var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+                        dtDateTime = dtDateTime.AddMilliseconds(long.Parse(e.Value.ToString()) * 1000);
+                        e.Value = dtDateTime.ToString("yyyy/MM/dd");
+                    }
+                    break;
+            }
+        }
+        private void BindData()
+        {
+            List<WdThermometerProduced> source = service.GetWdThemometerProduceds();
+            dataGridView1.DataSource = source;
+        }
+
+        private void txt_qty_KeyPress(object sender, KeyPressEventArgs e)
+        {
+
+            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8 &&
+e.KeyChar != 1 && e.KeyChar != 3 && e.KeyChar != 22)
+            {
+                e.Handled = true;
+            }
+        }
+
+        private void btn_generate_Click(object sender, EventArgs e)
+        {
+            if (cb_model.SelectedItem == null)
+            {
+                MessageBox.Show("请选择体温枪型号", "系统提示");
+                return;
+            }
+            if (cb_schedual.SelectedItem == null)
+            {
+                MessageBox.Show("请选择生产班次", "系统提示");
+                return;
+            }
+            if (String.IsNullOrEmpty(txt_qty.Text))
+            {
+                MessageBox.Show("请输入生产数量", "系统提示");
+                return;
+            }
+            if (cb_operate.SelectedItem==null)
+            {
+                MessageBox.Show("请选择操作类型", "系统提示");
+                return;
+            }
+
+           
+            WdThermometerCategory wdThermometerCategory =(WdThermometerCategory)cb_model.SelectedItem;
+            WdThermometerSchedual wdThermometerSchedual = (WdThermometerSchedual)cb_schedual.SelectedItem;
+            int qty = int.Parse(txt_qty.Text);
+            DateTime date = date_time_picker.Value;
+            JObject result  = service.GenerateCodes(wdThermometerCategory, wdThermometerSchedual, qty,date);
+            if(result.Value<Boolean>("success"))
+            {
+                BindData();
+            }
+            else
+            {
+                MessageBox.Show(result.Value<String>("message"), "系统提示");
+            }
+           
+        }
+
+        private void btn_choose_unprint_Click(object sender, EventArgs e)
+        {
+
+           String operate = cb_operate.SelectedItem.ToString();
+            int cellIndex = 10;
+            if (operate == "合格证")
+            {
+                cellIndex = 11;
+            }
+            else
+            {
+                cellIndex = 10;
+            }
+
+            if (dataGridView1.Rows.Count > 0)
+            {
+                for (int i = 0; i < dataGridView1.Rows.Count; i++)
+                {
+                    if (!(bool)dataGridView1.Rows[i].Cells[cellIndex].Value)
+                    {
+                        dataGridView1.Rows[i].Cells[0].Value = true;
+                    }
+                    else
+                    {
+                        dataGridView1.Rows[i].Cells[0].Value = false;
+                    }
+                    
+                }
+            }
+
+        }
+
+        private void btn_delete_choosed_Click(object sender, EventArgs e)
+        {
+            List<string> checkIds = new List<string>();
+            //取得选中的行
+            for (int i = 0; i < dataGridView1.Rows.Count; i++)
+            {
+                if (dataGridView1.Rows[i].Cells[0].Value != null && (bool)dataGridView1.Rows[i].Cells[0].Value == true)
+                {
+                    checkIds.Add(dataGridView1.Rows[i].Cells[12].Value.ToString());
+
+                }
+            }
+            if (checkIds.Count == 0)
+            {
+                MessageBox.Show("请勾选要删除的数据行!");
+                return;
+            }
+            service.deleteThermometerProduced(checkIds);
+            BindData();
+        }
+
+        private void btn_print_choosed_Click(object sender, EventArgs e)
+        {
+            List<string> checkIds = new List<string>();
+            //取得选中的行
+            for (int i = 0; i < dataGridView1.Rows.Count; i++)
+            {
+                if (dataGridView1.Rows[i].Cells[0].Value != null && (bool)dataGridView1.Rows[i].Cells[0].Value == true)
+                {
+                    checkIds.Add(dataGridView1.Rows[i].Cells[12].Value.ToString());
+
+                }
+            }
+            if (checkIds.Count == 0)
+            {
+                MessageBox.Show("请勾选要打印的数据行!");
+                return;
+            }
+
+            List<WdThermometerProduced> checkThermometerProduced = (dataGridView1.DataSource as List<WdThermometerProduced>).Where(p => checkIds.Contains(p.union_id)).ToList();
+            if(checkThermometerProduced.Count >0)
+            {
+                foreach(var wdThermometerProduced in checkThermometerProduced)
+                {
+                    printLabel(wdThermometerProduced);
+                }
+                
+            }
+
+        }
+
+        private void btn_upload_choosed_Click(object sender, EventArgs e)
+        {
+           
+            JObject result = service.UploadThermometerProduced();
+            if ((bool)result["success"])
+            {
+                MessageBox.Show("上传成功!", "系统提示");
+                BindData();
+            }
+            else
+            {
+                MessageBox.Show("上传失败!", "系统提示");
+                return;
+            }
+           
+        }
+
+        private void printLabel(WdThermometerProduced wdThermometerProduced)
+        {
+            try
+            {
+                String operate = cb_operate.SelectedItem.ToString();
+                WdPrinterSolution printerSolution = null;
+                if (thermometerSolution.Count == 0)
+                {
+                    MessageBox.Show("没有打印模板,请联系管理员设置", "系统提示");
+                    return;
+                }
+                object printData = null;
+                if (operate == "合格证")
+                {
+                    printData = new ThermometerQCData(wdThermometerProduced);
+                    printerSolution = thermometerSolution.FirstOrDefault(p => p.dev_value == 11);
+                }
+                else
+                {
+                    printData = new ThermometerSecurityData(wdThermometerProduced);
+                    printerSolution = thermometerSolution.FirstOrDefault(p => p.dev_value == 10);
+                }
+                if(printerSolution == null)
+                {
+                    MessageBox.Show("没有打印模板,请联系管理员设置", "系统提示");
+                    return;
+                }
+
+
+                string serverUrl = Constants.serverUrl + "/";
+                    //打印标签
+                    if (wdThermometerProduced != null)
+                    {
+                        
+
+                        var doc = CNPrintCommandHelper.getPrintDocument(
+                                       printData,
+                                       serverUrl + printerSolution.template_url);
+                    int qty = 1;
+                        CNPrint.PrintDocument[] documents = new CNPrint.PrintDocument[qty];
+                        for (int i = 0; i < qty; i++)
+                        {
+                            CNPrint.PrintDocument copydoc = doc.Clone() as CNPrint.PrintDocument;
+                            copydoc.documentID = MongoDB.Bson.ObjectId.GenerateNewId().ToString();
+                            documents[i] = copydoc;
+                        }
+
+                        var printTask = CNPrintCommandHelper.getPrintTaskCommand(cb_printer.SelectedItem.ToString(), false, "pdf", 1, 1, documents);
+                        //发送打印指令
+                        WebsocketClient.Instance.SendMessageAsync(JsonConvert.SerializeObject(printTask));
+                    if(operate == "合格证")
+                    {
+                        wdThermometerProduced.qc_printed = true;
+                    }
+                    else
+                    {
+                        wdThermometerProduced.security_printed = true;
+                    }
+                   
+
+                    service.updateWdThermomoeterProduced(wdThermometerProduced);
+
+                    }
+                
+            }
+            catch (Exception e)
+            {
+
+            }
+
+
+        }
+
+
+    }
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1193 - 0
WDProduceTool/Forms/FrmThermometerCoding.resx


+ 23 - 12
WDProduceTool/Forms/MDIMain.Designer.cs

@@ -39,6 +39,7 @@
             this.carePackage_ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.productCodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.lora_button_ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.thermometerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
             this.printSetupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
@@ -102,6 +103,7 @@
             this.carePackage_ToolStripMenuItem,
             this.productCodeToolStripMenuItem,
             this.lora_button_ToolStripMenuItem,
+            this.thermometerToolStripMenuItem,
             this.toolStripSeparator4,
             this.printSetupToolStripMenuItem,
             this.toolStripSeparator5,
@@ -117,7 +119,7 @@
             this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
             this.newToolStripMenuItem.Name = "newToolStripMenuItem";
             this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
-            this.newToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.newToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.newToolStripMenuItem.Text = "生产产品(&N)";
             this.newToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm);
             // 
@@ -127,7 +129,7 @@
             this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black;
             this.openToolStripMenuItem.Name = "openToolStripMenuItem";
             this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y)));
-            this.openToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.openToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.openToolStripMenuItem.Text = "同步数据(&Y)";
             this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenFile);
             // 
@@ -135,7 +137,7 @@
             // 
             this.templateLabelToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("templateLabelToolStripMenuItem.Image")));
             this.templateLabelToolStripMenuItem.Name = "templateLabelToolStripMenuItem";
-            this.templateLabelToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.templateLabelToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.templateLabelToolStripMenuItem.Text = "模板标签打印";
             this.templateLabelToolStripMenuItem.Click += new System.EventHandler(this.templateLabelToolStripMenuItem_Click);
             // 
@@ -143,7 +145,7 @@
             // 
             this.cusotmToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("cusotmToolStripMenuItem.Image")));
             this.cusotmToolStripMenuItem.Name = "cusotmToolStripMenuItem";
-            this.cusotmToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.cusotmToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.cusotmToolStripMenuItem.Text = "自定义标签打印";
             this.cusotmToolStripMenuItem.Click += new System.EventHandler(this.cusotmToolStripMenuItem_Click);
             // 
@@ -151,7 +153,7 @@
             // 
             this.carePackage_ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("carePackage_ToolStripMenuItem.Image")));
             this.carePackage_ToolStripMenuItem.Name = "carePackage_ToolStripMenuItem";
-            this.carePackage_ToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.carePackage_ToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.carePackage_ToolStripMenuItem.Text = "健康包出厂";
             this.carePackage_ToolStripMenuItem.Click += new System.EventHandler(this.carePackage_ToolStripMenuItem_Click);
             // 
@@ -159,7 +161,7 @@
             // 
             this.productCodeToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("productCodeToolStripMenuItem.Image")));
             this.productCodeToolStripMenuItem.Name = "productCodeToolStripMenuItem";
-            this.productCodeToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.productCodeToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.productCodeToolStripMenuItem.Text = "产品出厂编号";
             this.productCodeToolStripMenuItem.Click += new System.EventHandler(this.productCodeToolStripMenuItem_Click);
             // 
@@ -167,34 +169,42 @@
             // 
             this.lora_button_ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("lora_button_ToolStripMenuItem.Image")));
             this.lora_button_ToolStripMenuItem.Name = "lora_button_ToolStripMenuItem";
-            this.lora_button_ToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.lora_button_ToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.lora_button_ToolStripMenuItem.Text = "433按钮打码";
             this.lora_button_ToolStripMenuItem.Click += new System.EventHandler(this.lora_button_ToolStripMenuItem_Click);
             // 
+            // thermometerToolStripMenuItem
+            // 
+            this.thermometerToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("thermometerToolStripMenuItem.Image")));
+            this.thermometerToolStripMenuItem.Name = "thermometerToolStripMenuItem";
+            this.thermometerToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
+            this.thermometerToolStripMenuItem.Text = "体温枪生成配套";
+            this.thermometerToolStripMenuItem.Click += new System.EventHandler(this.thermometerToolStripMenuItem_Click);
+            // 
             // toolStripSeparator4
             // 
             this.toolStripSeparator4.Name = "toolStripSeparator4";
-            this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6);
+            this.toolStripSeparator4.Size = new System.Drawing.Size(190, 6);
             // 
             // printSetupToolStripMenuItem
             // 
             this.printSetupToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printSetupToolStripMenuItem.Image")));
             this.printSetupToolStripMenuItem.Name = "printSetupToolStripMenuItem";
             this.printSetupToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
-            this.printSetupToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.printSetupToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.printSetupToolStripMenuItem.Text = "系统设置(&S)";
             this.printSetupToolStripMenuItem.Click += new System.EventHandler(this.printSetupToolStripMenuItem_Click);
             // 
             // toolStripSeparator5
             // 
             this.toolStripSeparator5.Name = "toolStripSeparator5";
-            this.toolStripSeparator5.Size = new System.Drawing.Size(186, 6);
+            this.toolStripSeparator5.Size = new System.Drawing.Size(190, 6);
             // 
             // exitToolStripMenuItem
             // 
             this.exitToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("exitToolStripMenuItem.Image")));
             this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
-            this.exitToolStripMenuItem.Size = new System.Drawing.Size(189, 22);
+            this.exitToolStripMenuItem.Size = new System.Drawing.Size(193, 26);
             this.exitToolStripMenuItem.Text = "退出(&X)";
             this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click);
             // 
@@ -306,7 +316,7 @@
             // 
             this.android_remoteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("android_remoteToolStripMenuItem.Image")));
             this.android_remoteToolStripMenuItem.Name = "android_remoteToolStripMenuItem";
-            this.android_remoteToolStripMenuItem.Size = new System.Drawing.Size(184, 26);
+            this.android_remoteToolStripMenuItem.Size = new System.Drawing.Size(171, 22);
             this.android_remoteToolStripMenuItem.Text = "Android远程桌面";
             this.android_remoteToolStripMenuItem.Click += new System.EventHandler(this.android_remoteToolStripMenuItem_Click);
             // 
@@ -485,6 +495,7 @@
         private ToolStripMenuItem lora_button_ToolStripMenuItem;
         private ToolStripMenuItem 工具ToolStripMenuItem;
         private ToolStripMenuItem android_remoteToolStripMenuItem;
+        private ToolStripMenuItem thermometerToolStripMenuItem;
     }
 }
 

+ 14 - 0
WDProduceTool/Forms/MDIMain.cs

@@ -7,6 +7,7 @@ using System.Data;
 using System.Diagnostics;
 using System.Drawing;
 using System.Linq;
+using System.Net;
 using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading.Tasks;
@@ -28,6 +29,7 @@ namespace WDProduceTool.Forms
             InitializeComponent();
             //初始化菜鸟打印websocket连接
             WebsocketClient.Instance.init();
+          
         }
 
         private bool CheckSystem()
@@ -462,5 +464,17 @@ namespace WDProduceTool.Forms
 
             });
         }
+
+        private void thermometerToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (!CheckSystem())
+            {
+                RunForm(this, typeof(FrmSetting), new Type[] { }, new object[] { });
+            }
+            else
+            {
+                RunForm(this, typeof(FrmThermometerCoding), new Type[] { }, new object[] { });
+            }
+        }
     }
 }

+ 26 - 0
WDProduceTool/Forms/MDIMain.resx

@@ -176,6 +176,32 @@
         G42BE+vB/3g6T7SbJp/Pt+4jFV3JmVX9Hn4+PzLyF/Bu9w33JvUjAAAAAElFTkSuQmCC
 </value>
   </data>
+  <data name="thermometerToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAABLhJREFUaEPt
+        mM9zFFUQx/MPeLSsEi9cPVhePHnx4NGDN09WaenZf0EuUh4oPVq6yUAAJWpZlPwoMQgRWMzObDYJQgj5
+        ISEhkQgkgQDBmJ1put98e/N25u3u7K61a5X7qera2fe6+3XP63nvzfT16NHjfwTl/H3kBSM0EFDnpFjg
+        3wPkjb+MMJqHDgavsZNN4/BoqUynp6ljMjS5YyXzMUJqDjaeMQ7Gl6kryLiaxOBvexBWbWgg/xx5xU9Z
+        vuOSuWYMz8/DW5e4cVdn4XOE6YYGS6+w4molY5Wba/DUJR48jePwggmEmoZyhRc04HV/mW6vPKGtk1yH
+        0nZnE54sNrbi6R2eISosEq08RAcQm9/vxDq15NY6lMH0X0S//kF0/wkaLBAbwk3DnQc0+Hm2F6mZwAUe
+        BA6rZGoVCsyMTnsDefQ30UPcYZFjE/Hv5VtwBNCPcNNgyaKlP7fqJ7DMdxrOjOiAKhKMsMB39+vx6r6k
+        iK0gieu1cPEm0ZES/gDYINw0qqDB10xAHmhp++Eq0b3HcZsMCPuqWXBR4tJRXbkWRtjnj1PxtTB7L+6X
+        2ldgg3DTqELDBORa1ujH22hgdECRZF3blMNdPZkd9SGzNTgWP0dSUj/zczU8G/cpsEO4aVShYQI2mzyY
+        PIywpe+vEG2X0elglOtadYu30ciIzU83dvu+ZT9LG+gE6EO4aVShqQRO8LTDjg4ViRYTg9ps/bOrK/Ut
+        ySfZ4JKR2XQBW4SbRhWaSkBKCXZGkqVlk1/Y1fOX0NgEsEW4aVShqQR2uKalfi9ZwZ2bQ6eFbkQiUuv2
+        w5kV2CPcNKrQMAFZee5i9VGe7lQvmfLfxr77o7zptQLsEW4aVaibgF3H9s6bTEBWEkUS1vaD/Jys8w7e
+        CvCBcNNk2shkGTzMDyCcmaOC9ElNa5s82Db23U/urs0AHwg3DXdmO0rYy6ZLVh9BkRE7u891xskKfCDc
+        NE0d5q7zoWtosuLUlI/cad2ZbVRHZqsd4Afhuql5nJaDWZJyxOcervVkci7W2rjzgthLHPWO04rzhUbW
+        925SKdsGLzQu2DB+pZQSseu7E+g7hwmeJcsrZZKql/puSs7fh5BaoxufVSI51FX+519EKO1jkhGnMr02
+        Ot1e6S3qL75uguCVrDyz1rJEQ0ii338bw7dPzQR+4XOQtOf8vUZPrllcgWWV6BSO2V6w3wz+b+BMQI4W
+        JuDiWahJAl9KW8j7iiu4LBJe1J3cPwe37eNM4Pg1vVPvQ61Ppl3aojOzzuCySDjBG6BJIHgAt+1TlYC8
+        mGjpeMEYVAxmT5H2byadwWUVOsRHcOO/0Po3UpuqBOQ3ljy6q+CSOib9YXHFGVwWieQDQjzGe3DbHpUE
+        RLxgnuvzE3SlIG/sQ9GLhuecwWURsY3H87+A2/ag3OgbRrzx59FUEzp8Za9JgNf08vR9Z4CNJBytHNfP
+        wG1n4Yf5M5PE2dZmIQy0VP1+uOwsfFR/iQefkyDC/KIzyHoSjuDDGZcuXHYeKbloINg2M3F8ygQld7au
+        XFig6LT1veir4FW46w7miOEFJyoBZZc16i+8Czfdh9813uTl9QOzmtUTL/iI5R150YJpjx49evxn6Ot7
+        BsS2/pL+I69iAAAAAElFTkSuQmCC
+</value>
+  </data>
   <data name="printSetupToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAQZJREFUOE+d

+ 57 - 0
WDProduceTool/Model/WdThermometerCategory.cs

@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WDProduceTool.Model
+{
+    [Table("wd_thermometer_category")]
+    [Serializable]
+    public class WdThermometerCategory
+    {
+
+        [Column(name: "id", TypeName = "INTEGER")]
+        [Key]
+        public int id { get; set; }
+
+        /// <summary>
+        /// 统一标识
+        /// </summary>
+        [Column(name: "union_id", TypeName = "NVARCHAR")]
+        public string union_id { get; set; }
+
+        /// <summary>
+        /// 体温枪名称
+        /// </summary>
+        [Column(name: "name", TypeName = "NVARCHAR")]
+        public string name { get; set; }
+
+        /// <summary>
+        /// 体温枪型号
+        /// </summary>
+        [Column(name: "model", TypeName = "NVARCHAR")]
+        public string model { get; set; }
+
+        /// <summary>
+        /// 批号前缀
+        /// </summary>
+        [Column(name: "batch_number_prefix", TypeName = "NVARCHAR")]
+        public string batch_number_prefix { get; set; }
+
+        /// <summary>
+        /// 代号
+        /// </summary>
+        [Column(name: "code", TypeName = "NVARCHAR")]
+        public string code { get; set; }
+
+        /// <summary>
+        /// 使用期限
+        /// </summary>
+        [Column(name: "expiration", TypeName = "NVARCHAR")]
+        public string expiration { get; set; }
+
+    }
+}

+ 110 - 0
WDProduceTool/Model/WdThermometerProduced.cs

@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WDProduceTool.Model
+{
+    [Table("wd_thermometer_produced")]
+    [Serializable]
+    public class WdThermometerProduced
+    {
+        [Column(name: "id", TypeName = "INTEGER")]
+        [Key]
+        public int id { get; set; }
+
+        /// <summary>
+        /// 统一标识
+        /// </summary>
+        [Column(name: "union_id", TypeName = "NVARCHAR")]
+        public string union_id { get; set; }
+
+        /// <summary>
+        /// 体温枪名称
+        /// </summary>
+        [Column(name: "name", TypeName = "NVARCHAR")]
+        public string name { get; set; }
+
+        /// <summary>
+        /// 体温枪型号
+        /// </summary>
+        [Column(name: "model", TypeName = "NVARCHAR")]
+        public string model { get; set; }
+
+        /// <summary>
+        /// 出厂编号
+        /// </summary>
+        [Column(name: "serial_no", TypeName = "NVARCHAR")]
+        public string serial_no { get; set; }
+
+        /// <summary>
+        /// 防伪码
+        /// </summary>
+        [Column(name: "security_code", TypeName = "NVARCHAR")]
+        public string security_code { get; set; }
+
+
+        /// <summary>
+        /// 生产批号
+        /// </summary>
+        [Column(name: "batch_number", TypeName = "NVARCHAR")]
+        public string batch_number { get; set; }
+
+
+        /// <summary>
+        /// 生产班次
+        /// </summary>
+        [Column(name: "schedual_code", TypeName = "NVARCHAR")]
+        public string schedual_code { get; set; }
+
+        /// <summary>
+        /// 批次内序号
+        /// </summary>
+        [Column(name: "number", TypeName = "NVARCHAR")]
+        public string number { get; set; }
+
+
+
+        /// <summary>
+        /// 生产日期
+        /// </summary>
+        [Column(name: "produce_date", TypeName = "INTEGER")]
+        public long produce_date { get; set; }
+
+        /// <summary>
+        /// 上传日期
+        /// </summary>
+        [Column(name: "upload_date", TypeName = "INTEGER")]
+        public long upload_date { get; set; }
+
+
+        /// <summary>
+        /// 是否已上传
+        /// </summary>
+        [Column(name: "uploaded", TypeName = "BIT")]
+        public bool uploaded { get; set; }
+
+
+        /// <summary>
+        /// 合格证是否已打印
+        /// </summary>
+        [Column(name: "qc_printed", TypeName = "BIT")]
+        public bool qc_printed { get; set; }
+
+        /// <summary>
+        /// 防伪码是否已打印
+        /// </summary>
+        [Column(name: "security_printed", TypeName = "BIT")]
+        public bool security_printed { get; set; }
+
+        /// <summary>
+        /// 使用期限
+        /// </summary>
+        [Column(name: "expiration", TypeName = "NVARCHAR")]
+        public string expiration { get; set; }
+
+    }
+}

+ 42 - 0
WDProduceTool/Model/WdThermometerSchedual.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WDProduceTool.Model
+{
+    [Table("wd_thermometer_schedual")]
+    [Serializable]
+    public class WdThermometerSchedual
+    {
+
+        [Column(name: "id", TypeName = "INTEGER")]
+        [Key]
+        public int id { get; set; }
+
+        /// <summary>
+        /// 统一标识
+        /// </summary>
+        [Column(name: "union_id", TypeName = "NVARCHAR")]
+        public string union_id { get; set; }
+
+        /// <summary>
+        /// 班次名称
+        /// </summary>
+        [Column(name: "schedual_name", TypeName = "NVARCHAR")]
+        public string schedual_name { get; set; }
+
+        /// <summary>
+        /// 班次代号
+        /// </summary>
+        [Column(name: "schedual_code", TypeName = "NVARCHAR")]
+        public string schedual_code { get; set; }
+
+
+
+
+    }
+}

+ 255 - 4
WDProduceTool/Service/ProduceService.cs

@@ -7,6 +7,7 @@ using System.Collections.Generic;
 using System.Data.Entity;
 using System.Diagnostics;
 using System.Linq;
+using System.Net;
 using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading.Tasks;
@@ -26,6 +27,7 @@ namespace WDProduceTool.Service
         private StringBuilder cmdResultContent = new StringBuilder();
         private DataReceivedEventHandler dataReceivehandler;
         string productUploadServer = ParamConfigHelper.GetParamByName(Constants.PRODUCT_UPLOAD_SERVER);
+        string thermometerCodeServer = ParamConfigHelper.GetParamByName(Constants.THERMOMETER_SECURITY_CODE_SERVER);
         public ProduceService()
         {
 
@@ -170,7 +172,7 @@ namespace WDProduceTool.Service
 
             using (WdSqliteDbContext context = new WdSqliteDbContext())
             {
-                return context.CareDeviceDetailSet.ToList();
+                return context.CareDeviceDetailSet.OrderByDescending(p=>p.id).ToList();
             }
         }
 
@@ -183,7 +185,7 @@ namespace WDProduceTool.Service
         {
             using (WdSqliteDbContext context = new WdSqliteDbContext())
             {
-                WdProducedProduct wdProducedProduct = context.WdProducedProductSet.FirstOrDefault(p => !string.IsNullOrEmpty(p.mac)&&p.mac.ToLower() == mac.ToLower());
+                WdProducedProduct wdProducedProduct = context.WdProducedProductSet.FirstOrDefault(p => !string.IsNullOrEmpty(p.mac) && p.mac.ToLower() == mac.ToLower());
                 if (wdProducedProduct != null)
                 {
                     return false;
@@ -207,6 +209,119 @@ namespace WDProduceTool.Service
 
         }
 
+        public JObject GenerateCodes(WdThermometerCategory wdThermometerCategory, WdThermometerSchedual wdThermometerSchedual, int qty, DateTime date)
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+                //System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+                JObject result = new JObject();
+                var response = RestHelper.Instance.InitRestClient(new RestClientOptions()
+                {
+                    Timeout = 20000,
+                    BaseUrl = new Uri(thermometerCodeServer)
+
+                }).Get<List<String>>("/thermometer/gencodes?qty=" + qty);
+                if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                    List<String> ls = response.Result.Data;
+                    String batchNumber = wdThermometerCategory.batch_number_prefix + date.ToString("yyMMdd") + wdThermometerSchedual.schedual_code + wdThermometerCategory.code;
+                    List<WdThermometerProduced> exists = context.WdThermometerProducedSet.Where(p => p.batch_number == batchNumber).ToList();
+                    int number = 1;
+                    if (exists != null && exists.Count > 0)
+                    {
+                        number = exists.Max(p => int.Parse(p.number)) + 1;
+                    }
+
+
+
+                    if (ls != null && ls.Count > 0)
+                    {
+                        foreach (String code in ls)
+                        {
+                            WdThermometerProduced wdThemometerProduced = new WdThermometerProduced();
+                            wdThemometerProduced.security_code = code;
+                            wdThemometerProduced.model = wdThermometerCategory.model;
+                            wdThemometerProduced.name = wdThermometerCategory.name;
+                            wdThemometerProduced.schedual_code = wdThermometerSchedual.schedual_code;
+                            wdThemometerProduced.batch_number = batchNumber;
+                            wdThemometerProduced.number = number.ToString().PadLeft(4, '0');
+                            wdThemometerProduced.serial_no = date.ToString("yyyyMMdd") + wdThemometerProduced.number;
+                            wdThemometerProduced.union_id = ObjectId.GenerateNewId().ToString();
+                            TimeSpan ts = date - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+                            wdThemometerProduced.produce_date = Convert.ToInt64(ts.TotalSeconds);
+                            wdThemometerProduced.uploaded = false;
+                            wdThemometerProduced.qc_printed = false;
+                            wdThemometerProduced.security_printed = false;
+                            wdThemometerProduced.expiration = wdThermometerCategory.expiration;
+                            context.WdThermometerProducedSet.Add(wdThemometerProduced);
+                            number++;
+                        }
+                    }
+                    context.SaveChanges();
+                    result.Add("success", true);
+                    result.Add("message", "生成数据成功!");
+                }
+                else
+                {
+                    result.Add("sucess", false);
+                    result.Add("message", "网络错误!");
+                }
+                return result;
+
+            }
+        }
+
+        public void deleteThermometerProduced(List<string> checkIds)
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+                List<WdThermometerProduced> thermometerProduceds = context.WdThermometerProducedSet.Where(p => checkIds.Contains(p.union_id)).ToList();
+                if (thermometerProduceds.Count() > 0)
+                {
+                    foreach (var cdd in thermometerProduceds)
+                    {
+                        context.WdThermometerProducedSet.Remove(cdd);
+                    }
+                    context.SaveChanges();
+                }
+            }
+        }
+
+        public JObject UploadThermometerProduced()
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+                JObject result = new JObject();
+                List<WdThermometerProduced> thermometerProduceds = context.WdThermometerProducedSet.Where(p => !p.uploaded).ToList();
+                var response = RestHelper.Instance.InitRestClient(new RestClientOptions()
+                {
+                    Timeout = 5000,
+                    BaseUrl = new Uri(Constants.serverUrl)
+                }).Post<Object>("/pdm/thermometerproduced/upload", thermometerProduceds);
+                if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                     result = JsonConvert.DeserializeObject<JObject>(response.Result.Data.ToString());
+                    if ((bool)result["success"])
+                    {
+                        foreach (var device in thermometerProduceds)
+                        {
+                            device.uploaded = true;
+                        }
+                        context.SaveChanges();
+                    }
+
+                    return result;
+
+                }
+                else
+                {
+                    result.Add("success", false);
+                    result.Add("message", "网络错误");
+                    return result;
+                }
+            }
+        }
+
         public void SyncProduct()
         {
             using (WdSqliteDbContext context = new WdSqliteDbContext())
@@ -320,6 +435,20 @@ namespace WDProduceTool.Service
             }
         }
 
+        public void updateWdThermomoeterProduced(WdThermometerProduced wdThermometerProduced)
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+                WdThermometerProduced wdThermometerProduced1 = context.WdThermometerProducedSet.Where(p => !String.IsNullOrEmpty(p.union_id) && p.union_id == wdThermometerProduced.union_id).FirstOrDefault();
+                if (wdThermometerProduced1 != null)
+                {
+                    wdThermometerProduced1.Update(wdThermometerProduced, "union_id");
+                    context.SaveChanges();
+                }
+               
+            }
+        }
+
         public void SyncPrintTemplateParamGroup()
         {
             using (WdSqliteDbContext context = new WdSqliteDbContext())
@@ -457,6 +586,121 @@ namespace WDProduceTool.Service
             }
         }
 
+
+        public void SyncThemometerCategory()
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+
+                if (txthandler != null)
+                {
+                    txthandler("开始同步体温枪产品...\n");
+                }
+                var response = RestHelper.Instance.InitRestClient(new RestClientOptions()
+                {
+                    Timeout = 5000,
+                    BaseUrl = new Uri(Constants.serverUrl)
+                }).Get<List<WdThermometerCategory>>("/pdm/thermometercategory/all");
+                if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                    List<WdThermometerCategory> ls = response.Result.Data;
+                    if (ls.Count > 0)
+                    {
+                        foreach (WdThermometerCategory item in ls)
+                        {
+                            WdThermometerCategory item1 = context.WdThermometerCategorySet.Where(p => !String.IsNullOrEmpty(p.union_id) && p.union_id == item.union_id).FirstOrDefault();
+                            if (item1 == null)
+                            {
+                                item1 = item;
+                                context.WdThermometerCategorySet.Add(item1);
+                            }
+                            else //更新
+                            {
+                                item1.Update(item, "union_id");
+                            }
+
+
+                        }
+                    }
+                    context.SaveChanges();
+                    if (txthandler != null)
+                    {
+                        txthandler("体温枪产品同步成功...\n");
+                    }
+
+                }
+                else
+                {
+
+                    if (txthandler != null)
+                    {
+                        txthandler("同步体温枪产品失败,网络错误...\n");
+                    }
+
+                }
+
+
+            }
+        }
+
+
+        public void SyncThemometerSchedual()
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
+
+                if (txthandler != null)
+                {
+                    txthandler("开始同步体温枪生产班次...\n");
+                }
+                var response = RestHelper.Instance.InitRestClient(new RestClientOptions()
+                {
+                    Timeout = 5000,
+                    BaseUrl = new Uri(Constants.serverUrl)
+                }).Get<List<WdThermometerSchedual>>("/pdm/thermometerschedual/all");
+                if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                    List<WdThermometerSchedual> ls = response.Result.Data;
+                    if (ls.Count > 0)
+                    {
+                        foreach (WdThermometerSchedual item in ls)
+                        {
+                            WdThermometerSchedual item1 = context.WdThermometerSchedualSet.Where(p => !String.IsNullOrEmpty(p.union_id) && p.union_id == item.union_id).FirstOrDefault();
+                            if (item1 == null)
+                            {
+                                item1 = item;
+                                context.WdThermometerSchedualSet.Add(item1);
+                            }
+                            else //更新
+                            {
+                                item1.Update(item, "union_id");
+                            }
+
+
+                        }
+                    }
+                    context.SaveChanges();
+                    if (txthandler != null)
+                    {
+                        txthandler("体温枪生产班次同步成功...\n");
+                    }
+
+                }
+                else
+                {
+
+                    if (txthandler != null)
+                    {
+                        txthandler("同步体温枪生产班次失败,网络错误...\n");
+                    }
+
+                }
+
+
+            }
+        }
+
+
         public void SyncCustomPrint()
         {
             using (WdSqliteDbContext context = new WdSqliteDbContext())
@@ -1664,7 +1908,14 @@ namespace WDProduceTool.Service
             }
         }
 
+        public List<WdThermometerProduced> GetWdThemometerProduceds()
+        {
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
+            {
 
+                return context.WdThermometerProducedSet.ToList();
+            }
+        }
         public WdPrinterSolution GetPrinterSolutionByUnionId(string union_id)
         {
             using (WdSqliteDbContext context = new WdSqliteDbContext())
@@ -1936,7 +2187,7 @@ namespace WDProduceTool.Service
                 {
                     Timeout = 5000,
                     BaseUrl = new Uri(productUploadServer)
-                }).Post<Object>("/ncs_sync/device/batch_add", partDevices);
+                }).Post<Object>("/ncs_sync/device/batch_add", partDevices); //api.base.wdklian.com
                 if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
                 {
                     JObject result = JsonConvert.DeserializeObject<JObject>(response.Result.Data.ToString());
@@ -1968,7 +2219,7 @@ namespace WDProduceTool.Service
 
         public bool ClearProducedProduct()
         {
-            using(WdSqliteDbContext context = new WdSqliteDbContext())
+            using (WdSqliteDbContext context = new WdSqliteDbContext())
             {
                 context.Database.ExecuteSqlCommand("update sqlite_sequence SET seq = 0 where name ='wd_produced_product'", new object[] { });
                 return context.Database.ExecuteSqlCommand("delete from wd_produced_product", new object[] { }) > 0;

+ 2 - 0
WDProduceTool/Utils/RestHelper.cs

@@ -124,6 +124,8 @@ namespace WDProduceTool.Utils
             try
             {
                 var request = new RestRequest(resource, Method.Get);
+                request.AddHeader("Content-Type", "application/json;charset=UTF-8");
+                request.Timeout = 100000;
                 Task<RestResponse<T>> response = _restClient.ExecuteAsync<T>(request);
 
                 if (response.Result.StatusCode != HttpStatusCode.OK)

+ 3 - 0
WDProduceTool/WDProduceTool.csproj.user

@@ -58,6 +58,9 @@
     <Compile Update="Forms\FrmTcpServer.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="Forms\FrmThermometerCoding.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="Forms\FrmUpdate.cs">
       <SubType>Form</SubType>
     </Compile>

binární
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/net6.0-windows10.0.22000.0.zip


binární
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F030_CREATE.bin


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1049 - 0
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F072_HSI_HV20_SV91_200320_T_ZH_FJ.hex


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2100 - 0
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/MCU_STM32F072_MKI_L10_RK3128_HV22_SV21_200820.hex


binární
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/can_mcu.bin


+ 779 - 0
WDProduceTool/bin/Release/net6.0-windows10.0.22000.0/temp/wdkl_gnb_no_mac.hex

@@ -0,0 +1,779 @@
+:020000040800F2
+:10000000400D0020650100081B0E0008E10B0008F0
+:1000100000000000000000000000000000000000E0
+:100020000000000000000000000000003D15000876
+:100030000000000000000000111100084517000832
+:1000400077010008770100087701000877010008B0
+:10005000770100080D070008770100083107000844
+:10006000770100087701000877010008890500087A
+:100070007701000877010008770100087701000880
+:1000800077010008770100080000000077010008F0
+:100090007701000877010008770100087701000860
+:1000A000770100087701000877010008E9170008C8
+:1000B0007701000800000000770100080000000040
+:1000C00000F002F800F03EF80CA030C80838241800
+:1000D0002D18A246671EAB4654465D46AC4201D180
+:1000E00000F030F87E460F3E0FCCB6460126334274
+:1000F00000D0FB1AA246AB4633431847D02300007A
+:10010000F0230000103A02D378C878C1FAD8520719
+:1001100001D330C830C101D504680C6070470000BD
+:100120000023002400250026103A01D378C1FBD813
+:10013000520700D330C100D50B6070471FB51FBDFB
+:1001400010B510BD00F01CF91146FFF7F7FF01F0E4
+:10015000ADFD00F034F903B4FFF7F2FF03BC00F08B
+:100160003BF900000748804707480047FEE7FEE7E5
+:10017000FEE7FEE7FEE7FEE704480549054A064BB1
+:10018000704700006D170008C100000840070020FC
+:10019000400D0020400900204009002030B5441CDB
+:1001A00003E00178401C00290DD08107F9D10B4BE9
+:1001B000DD0104C8D11A91432940FAD0001B0A0678
+:1001C00003D0C01E30BD001B30BD0A0401D0801E0C
+:1001D00030BD0902FCD0401E30BD0000010101010C
+:1001E00001E004C0091F0429FBD28B0701D502805E
+:1001F000801CC90700D00270704700290BD0C307CC
+:1002000002D00270401C491E022904D3830702D584
+:100210000280801C891EE3E70022EEE70022DFE770
+:10022000002203098B422CD3030A8B4211D30023F3
+:100230009C464EE003460B433CD4002243088B42CD
+:1002400031D303098B421CD3030A8B4201D394465A
+:100250003FE0C3098B4201D3CB01C01A524183094D
+:100260008B4201D38B01C01A524143098B4201D307
+:100270004B01C01A524103098B4201D30B01C01A32
+:100280005241C3088B4201D3CB00C01A52418308AC
+:100290008B4201D38B00C01A524143088B4201D3D9
+:1002A0004B00C01A5241411A00D201465241104639
+:1002B00070475DE0CA0F00D04942031000D34042AE
+:1002C000534000229C4603098B422DD3030A8B42E4
+:1002D00012D3FC22890112BA030A8B420CD3890182
+:1002E00092118B4208D3890192118B4204D3890168
+:1002F0003AD0921100E08909C3098B4201D3CB01A6
+:10030000C01A524183098B4201D38B01C01A52415A
+:1003100043098B4201D34B01C01A524103098B425E
+:1003200001D30B01C01A5241C3088B4201D3CB0049
+:10033000C01A524183088B4201D38B00C01A52412C
+:10034000D9D243088B4201D34B00C01A5241411A03
+:1003500000D20146634652415B10104601D3404231
+:10036000002B00D54942704763465B1000D34042E2
+:1003700001B50020C046C04602BD704770477047B7
+:10038000754600F025F8AE46050069465346C0089C
+:10039000C000854618B020B5FFF7EEFE60BC002710
+:1003A0004908B6460026C0C5C0C5C0C5C0C5C0C541
+:1003B000C0C5C0C5C0C5403D49008D46704710B599
+:1003C0000446C046C0462046FFF7C5FE10BD0000EB
+:1003D00000487047E006002001491820ABBEFEE748
+:1003E000260002007047000038B50021009100246B
+:1003F0006A460F4801F010FB68460078002815D1C6
+:1004000001F098FC002811D000BF0CE0204601F05C
+:100410009DFC002805D0E100064A891848688047FD
+:1004200003E0601CC4B20E2CF0DB00BF38BD00003E
+:100430004C060020E0230008054800880549884252
+:1004400004D003480088401C014908807047000020
+:1004500044000020FFFF000010B5002000F09CFDCC
+:1004600004462078042805DA608822789200064B3A
+:1004700099588847054800887D210901884202DB98
+:1004800000200249088010BD5024000844000020CC
+:1004900010B54C220021024800F0B4FC10BD000051
+:1004A0009406002010B53448C079012822D1334881
+:1004B0000078401C3149087008460078052804DAA5
+:1004C00010212F4800F056FA21E02C480078092826
+:1004D00007DB0020294908701021294800F048FA5C
+:1004E00015E026480078052811DD1021244800F089
+:1004F0003FFA0CE02048C079022804D1102120489E
+:1005000000F038FA03E010211D4800F031FA1A48D3
+:10051000007A012822D11B480078401C1949087034
+:1005200008460078052804DA0821154800F022FA68
+:1005300021E014480078092807DB002011490870E1
+:1005400008210F4800F014FA15E00E48007805283D
+:1005500011DD08210A4800F00BFA0CE00648007A89
+:10056000022804D10821064800F004FA03E008211B
+:10057000034800F0FDF910BDD40600203C00002027
+:10058000000400483D00002010B50120800300F069
+:10059000D7F8002803D00120800300F0CBF810BD6D
+:1005A00010B55748807D002804D18021554800F0BF
+:1005B000DFF92EE05248807D012804D18021514886
+:1005C00000F0D8F925E04E48807D022821D14E4820
+:1005D0000078401C4C49087008460078052804DA69
+:1005E0008021484800F0C6F913E047480078092800
+:1005F00007DB0020444908708021424800F0B8F928
+:1006000007E041480078052803DD80213D4800F0DF
+:10061000AFF93B4816304078002804D140213948D2
+:1006200000F0A6F930E0364816304078012804D1B1
+:100630004021344800F09EF926E0314816304078D9
+:10064000022821D130484078401C2F494870084684
+:100650004078052804DA40212A4800F08BF913E09D
+:1006600029484078092807DB0020274948704021A5
+:10067000244800F07DF907E023484078052803DD91
+:100680004021204800F074F91D4816308078002879
+:1006900004D120211B4800F06BF930E018481630D7
+:1006A0008078012804D12021164800F063F926E063
+:1006B000134816308078022821D113488078401CD6
+:1006C0001149887008468078052804DA20210D48F1
+:1006D00000F050F913E00C488078092807DB00206F
+:1006E000094988702021074800F042F907E00648D0
+:1006F0008078052803DD2021024800F039F910BD7B
+:10070000B4060020000400483800002010B5012085
+:1007100000F016F8002802D0012000F00BF80220AB
+:1007200000F00EF8002802D0022000F003F810BDFF
+:100730007047000001494861704700000004014013
+:1007400001460020044A52690A40002A01D00120D3
+:1007500000E0002070470000000401400021204913
+:100760008279002A35D00A46126803689A430B46FC
+:100770001A600A46526803689A430B465A60027927
+:1007800051180A6803681A430A60154A9268036898
+:100790009A43134B9A601A46D26803689A43104BE7
+:1007A000DA604279102A0CD11A46926803681A431B
+:1007B0000B4B9A601A46D26803681A43084BDA60FA
+:1007C0000DE00749427951180A6803681A430A6024
+:1007D00005E0027951180A6803689A430A60704775
+:1007E0000004014000B585B00121480400F052FD2D
+:1007F0000121880500F04EFD0121084600F06AFD48
+:100800000120800200900121684601710021817160
+:100810000121C17169460920C00600F035F80121A7
+:1008200089020920C00600F0A5F8012000900021EF
+:100830006846017101218171032141710121C1715A
+:1008400069460F4800F020F80021052000F078FEEE
+:10085000012003900021684601740C21417401219C
+:10086000817403A8FFF77AFF052168460172002111
+:1008700041720121817202A800F0D0FA05B000BDDA
+:100880000014004870477047F0B50A460021002365
+:10089000002400BF3DE001258D402B4615681D401A
+:1008A0002C469C4234D11579012D02D01579022DA8
+:1008B00016D185684F000326BE40B5438560557943
+:1008C0004E00B540866835438560858801268E4098
+:1008D000B5438580858896798E40B6B2354385804C
+:1008E00005684F000326BE40B543056015794E00EC
+:1008F000B540066835430560C5684F000326BE4015
+:10090000B543C560D5794E00B540C6683543C5606E
+:10091000491C1029BFD3F0BDF0B5002300244D07BA
+:10092000EE0E1546B5402B46CD10AE0005462035DF
+:10093000AD594E07F70E0F26BE40B543CE10B60098
+:1009400007462037BD51CD10AE003D46AD591D4381
+:100950002C46CD10AD003E467451F0BD024600203D
+:10096000138A0B40002B01D0012000E000207047CB
+:1009700001857047816170471CB501210720400443
+:1009800000F088FC0121880500F084FC0121084664
+:1009900000F0A0FC012000900121684601710321B4
+:1009A0004171002181710121C17169460920C00690
+:1009B000FFF76AFF102000900121684601710321B2
+:1009C0004171002181710121C17169460920C00670
+:1009D000FFF75AFF10210920C006FFF7C9FF40208A
+:1009E000009001216846017103214171002181714C
+:1009F0000121C17169460920C006FFF745FF40216A
+:100A00000920C006FFF7B6FF80200090002168464D
+:100A1000017101218171032141710121C171694677
+:100A20000920C006FFF730FF012000900021684632
+:100A3000017101218171032141710121C171694657
+:100A40006648FFF721FF02200090002168460171EF
+:100A500001218171032141710121C17169465F4802
+:100A6000FFF712FF0120400200900021684601714B
+:100A700001218171032141710121C1716946092060
+:100A8000C006FFF701FF01208002009000216846A8
+:100A9000017101218171032141710121C1716946F7
+:100AA0000920C006FFF7F0FE0120C00200900021DF
+:100AB0006846017101218171032141710121C171D8
+:100AC00069460920C006FFF7DFFE01200003009001
+:100AD00000216846017101218171032141710121C9
+:100AE000C17169460920C006FFF7CEFE0120C00390
+:100AF000009001216846017103214171002181713B
+:100B00000121C17169460920C006FFF7BDFE012120
+:100B1000C9030920C006FFF72BFF08200090012120
+:100B20006846017103214171002181710121C17168
+:100B300069462A48FFF7A8FE08212848FFF718FF52
+:100B400010200090012168460171032141710021AC
+:100B500081710121C17169462048FFF795FE10217E
+:100B60001E48FFF705FF2020009001216846017113
+:100B700003214171002181710121C171694617482A
+:100B8000FFF782FE20211548FFF7F2FE402000907B
+:100B90000121684601710321417100218171012108
+:100BA000C17169460D48FFF76FFE40210B48FFF702
+:100BB000DFFE802000900121684601710321417110
+:100BC000002181710121C17169460448FFF75CFE73
+:100BD00080210248FFF7CCFE1CBD00000004004845
+:100BE00000BFFEE70148024908607047CCCC000016
+:100BF000003000400148024908607047AAAA00007E
+:100C0000003000400149486070470000003000405B
+:100C100001498860704700000030004001490860C9
+:100C200070470000003000401CB5002400200090F8
+:100C30000190012189020920C006FFF78FFE0028DC
+:100C400001D1012000E000206946087001215F48C1
+:100C5000FFF784FE002801D1012000E00020694652
+:100C6000487080210920C006FFF778FE6946887029
+:100C7000012109030920C006FFF770FE002801D1F9
+:100C8000012000E000206946C8700121C902092046
+:100C9000C006FFF763FE002801D1012000E000201C
+:100CA0006946087102214948FFF758FE002801D122
+:100CB000012000E000206946487101214902092015
+:100CC000C006FFF74BFE002801D1012000E0002004
+:100CD00069468871002475E06846005D002839D1B6
+:100CE0003B48C07F0121A14088433949C877002093
+:100CF000384908553848005D401C374908550020E0
+:100D00006100364A50523448005D032858DD002007
+:100D1000314908553248005D6946095D88424FD027
+:100D20002F48005D022808D1601D0002801C82B29D
+:100D30000121002000F07CF907E0601D0002401C4A
+:100D400082B20121002000F073F96846005D244959
+:100D5000085535E01E48C07F0121A1400843C1B2BB
+:100D60001B48C1771B48005D401C1A4908550020EC
+:100D7000194908551748005D032821DD0020154951
+:100D8000085560001549085A1649884207DD14487D
+:100D9000005D022814D002201149085510E01048C7
+:100DA000005D6946095D88420AD0601D0006020C9C
+:100DB0000121002000F03CF96846005D0849085513
+:100DC000601CC4B2072C87DB1CBD00000004004877
+:100DD000B40600201B000020220000206C00002030
+:100DE00014000020DC0500007047000010B5044925
+:100DF000887C00F031FCFFF7D3FBFFF753FB10BDFD
+:100E0000B406002030B50446002303E02170641CC2
+:100E10005D1CABB29342F9DB30BD70470021827894
+:100E2000002A27D0184A03231B02D21803789B10EC
+:100E30009B00D15802789207D30EFF229A400B46AE
+:100E40009343194642789207120E03789B07DB0EF4
+:100E50009A4011430C4A03231B02D21803789B10BB
+:100E60009B00D1500278D306DB0E01229A40064B3C
+:100E70001A6007E00278D306DB0E01229A40024B8B
+:100E800080331A607047000000E100E010B50028D0
+:100E900019DA1A4A03071B0F083B9B089B00D2581C
+:100EA0008307DC0EFF23A3409A438B071B0E8407A6
+:100EB000E40EA3401A43114B0407240F083CA40876
+:100EC000A4001A5118E00E4A03231B02D21883080B
+:100ED0009B00D2588307DC0EFF23A3409A438B0765
+:100EE0001B0E8407E40EA3401A43054B032424027F
+:100EF0001B198408A4001A5110BD00001CED00E06D
+:100F000000E100E010B5002819DA1A4A03071B0FA8
+:100F1000083B9B089B00D2588307DC0EFF23A340AD
+:100F20009A438B071B0E8407E40EA3401A43114B10
+:100F30000407240F083CA408A4001A5118E00E4A24
+:100F400003231B02D21883089B00D2588307DC0EB0
+:100F5000FF23A3409A438B071B0E8407E40EA34094
+:100F60001A43054B032424021B198408A4001A51B8
+:100F700010BD00001CED00E000E100E00022522165
+:100F80004143044B5A54802252214143C9184A70AC
+:100F9000704700007A00002070B5014600201C4D0B
+:100FA0002870522048431B4D285C43065B0E52209C
+:100FB0004843401940784206520E52204843401997
+:100FC0004078802528400446002C13D15220484305
+:100FD000104D4019801C950040190D4D06882E803B
+:100FE00040886880501CC2B2142A00DB0022934261
+:100FF00000D10124002C01D080200243522048431C
+:10100000044D2B545220484340194270004870BD93
+:101010002A0000207A00002010B5002404E02046B9
+:10102000FFF7ACFF601CC4B2072CF8DB10BD00005A
+:10103000F8B50B466E4633707280522646431A4FFF
+:10104000BE5D7106490E52264643BE5D80273E4076
+:10105000354652264643144FF61976787406640EC8
+:10106000002D13D152264643F619B61C8F00F719EE
+:101070006E4636883E806E4676887E804E1CF1B283
+:10108000142900DB0021A14200D10125002D01D04F
+:101090008026314352264643034FB95552264643D4
+:1010A000F6197470F8BD00007A00002010B50246F1
+:1010B0000020154B1868800880000346134318462B
+:1010C000114B1860114B1B69042423430F4C2361FF
+:1010D000012907D130BF23461B690424A3430B4CCD
+:1010E00023610FE0022907D120BF084B1B690424AC
+:1010F000A343064C236105E0044B1B6902242343F0
+:10110000024C236110BD00000070004000ED00E0C3
+:101110007047000010B547480078030000F0B8FDA4
+:1011200009060E1D2A323B47485587004148007882
+:10113000401C404908700020488079E03D484088C4
+:101140007D21C900884200DC72E0002039494880D6
+:1011500008460078401C08706AE0364840887D21C7
+:101160000901884200DC63E032480078401C3149C4
+:1011700008705DE000202F49488008460078401C38
+:10118000087055E000202B49C88048800846007848
+:10119000401C08704CE0274840882749884200DC02
+:1011A00046E024480078401C2249087040E03FE0B7
+:1011B000204840887D21C900884200DC38E00020BA
+:1011C0001C4948800820087032E01A48408864288A
+:1011D00000DA2DE0FFF706FB00F0B8FA00F0C6FADF
+:1011E0000120164948707D21C90015480068FFF7A5
+:1011F00017F80446601E1349884201D901200CE00B
+:10120000601E114948610321081FFFF73FFE0020BF
+:101210000D498861072008610020002801D000BF27
+:10122000FEE70520034908700020488000E000BF69
+:1012300000BF10BDB80200208813000094060020F3
+:1012400000000020FFFFFF0000E000E00A484088A7
+:101250000A49884204D008484088401C0649488012
+:101260000548C0880549884204D00348C088401C0E
+:101270000149C88070470000B8020020FFFF00004D
+:10128000002003490870488008718860C880704752
+:10129000B8020020002905D0054A52690243044BD8
+:1012A0005A6104E0024A52698243014B5A61704715
+:1012B00000100240002905D0054AD2690243044BC0
+:1012C000DA6104E0024AD2698243014BDA61704775
+:1012D00000100240002905D0054A92690243044BE0
+:1012E0009A6104E0024A92698243014B9A61704715
+:1012F00000100240FEB504460025002600200290A2
+:10130000019000900027864840680C21084005465F
+:10131000002D06D0042D07D0082D08D00C2D2CD17F
+:1013200028E0804820602BE07E48206028E07C4850
+:1013300040680F2189040840064679484068032127
+:10134000C90308400290B00C861C0298002803D103
+:101350007548374647430BE07148C06A0007000FE5
+:10136000401C01906F480199FEF75AFF70430746F1
+:10137000276005E06D48206002E06A48206000BFF9
+:1013800000BF67484068F021084005462D096848BD
+:10139000405D009020680099C840606060484068E7
+:1013A00007210902084005462D0A6148405D00906A
+:1013B00061680098C140A1605948006BFF2101316C
+:1013C0000840884202D05B48E0600DE05448406825
+:1013D000012189030840884203D0A0684008E060EA
+:1013E00002E0A0688008E0604D48006B40210840A2
+:1013F000402802D05048206102E00120C003206153
+:101400004748006B10210840102802D04548606111
+:1014100001E0206860614248006B8007800F00286F
+:1014200002D1A068A06119E03D48006B8007800FE1
+:10143000012802D12068A06110E03948006B8007C4
+:10144000800F022802D18003A06107E03448006BBE
+:101450008007800F032801D13248A0613048006B1B
+:10146000032109040840002802D1A068E06120E0BF
+:101470002B48006B0321090408400121090488421C
+:1014800002D12068E06114E02548006B03210904C3
+:10149000084001214904884202D18010E06108E03F
+:1014A0001F48006B032109040840884201D11D48F0
+:1014B000E0611B48006B032189040840002802D129
+:1014C000A068206220E01648006B032189040840D0
+:1014D00001218904884202D12068206214E010486A
+:1014E000006B0321890408400121C904884202D10C
+:1014F0000011206208E00A48006B032189040840BB
+:10150000884201D1074820620548006B80210840CD
+:10151000802802D00548606200E06762FEBD0000DE
+:101520000010024000127A0000093D00006CDC024D
+:101530005A000020809FD5001280000070470000F4
+:1015400030B500228B071C0F0F23A3401A460B4B0C
+:101550008C10A4001B599343084C8D10AD006351AF
+:1015600023468C10A4001B598C07250F0446AC4061
+:101570002343024C8D10AD00635130BD0800014083
+:101580000CB500200190009030480068012109044A
+:1015900008432E49086000BF2C4800680121490417
+:1015A000084000900198401C01900098002803D149
+:1015B000274901988842EFD1244800680121490455
+:1015C0000840002802D00120009001E00020009097
+:1015D0000098012839D111201E4908601B48406835
+:1015E0001A494860084640684860084640687F21BC
+:1015F000C903884315494860084640681121090419
+:10160000084312494860084600680121090608435A
+:101610000E49086000BF0D480068012149060840D6
+:101620000028F8D0094840688008800007494860D1
+:1016300008464068022108430449486000BF034847
+:1016400040680C2108400828F9D10CBD0010024068
+:10165000FFFF00000020024010B50446002C05D119
+:1016600040210920C006FFF783F92EE0012C05D1A7
+:1016700040210920C006FFF77DF926E0022C24D185
+:1016800012480078401C1149087008460078052867
+:1016900005DA40210920C006FFF76CF915E00B4878
+:1016A0000078092808DB40210920C006FFF760F90F
+:1016B00000200649087008E004480078052804DD89
+:1016C00040210920C006FFF753F910BD3700002064
+:1016D00010B517480078FF2804D015480078401C42
+:1016E0001349087013480078FF2804D01148007887
+:1016F000401C1049087010480078FF2804D00E489C
+:101700000078401C0C4908700C480078FF2804D071
+:101710000A480078401C09490870FFF797FDFEF75A
+:101720008BFE07480078401C0549087010BD00007A
+:10173000320000203300002034000020350000205B
+:101740003600002010B5FFF7C3FF10BD10B5002014
+:1017500005490861886101210807FFF7ABFD0121F8
+:101760000846FFF7A3FC10BD00E000E010B51B48E1
+:101770000068012108431949086008464068184973
+:101780000840164948600846006816490840134951
+:101790000860084600680121890488430F490860F1
+:1017A000084640683F21090488430C4948600846C0
+:1017B000C06A00090001C8620846006BFF2154316D
+:1017C0008843064908630846406B40084000486368
+:1017D00000208860FFF7D4FE10BD0000001002401A
+:1017E0000CB8FFF8FFFFF6FE10B500F047F910BD8A
+:1017F00001627047002904D0026801231A43026085
+:1018000003E002685208520002607047024600205E
+:10181000D3690B40002B01D0012000E0002070476D
+:10182000F8B503460024002600960025002018463F
+:101830000E04340ECEB200960127009EB7403D46FE
+:10184000022C01D1001D02E0032C00D10830002A37
+:1018500003D006682E43066002E00668AE430660C9
+:10186000F8BD0000F0B58BB004460D4600270020FF
+:101870000A90002620684008400020606668032126
+:101880000903304688430646A86806436660266812
+:101890002D480640E96868680843296908430643FB
+:1018A0002660A66803210902304688430646686917
+:1018B0000643A6606846FFF71DFD2448844202D116
+:1018C00006980A900DE02248844202D107980A90B7
+:1018D00007E02048844202D108980A9001E002986B
+:1018E0000A9020680121C903084000280CD029680B
+:1018F0000A9A5000FEF794FC074629680A9A50009D
+:10190000FEF78EFC0E4609E029680A98FEF788FC6F
+:10191000074629680A98FEF783FC0E4628684008A7
+:10192000B04200D87F1C20680121C903084000286C
+:1019300006D03807460F3846074908403043074667
+:10194000A7810BB0F0BD0000F3E9FFFF00380140B4
+:101950000044004000480040F0FF00000146888C31
+:10196000C005C00D7047CA05D20D02857047000042
+:1019700000B589B0182101A8FEF750FC00F080FAEC
+:1019800001214804FFF786FC01218803FFF7A2FC30
+:10199000012202210920C006FEF7BEFF0122032119
+:1019A0000920C006FEF7B8FF0C200790022108A806
+:1019B00001700321417001218170C17007A90920C4
+:1019C000C006FEF761FFE120400201900020029076
+:1019D0000390049006900C20059001A90B48FFF796
+:1019E00041FF01210948FFF705FF01220849074887
+:1019F000FFF716FF012207490448FFF711FF4021B6
+:101A00000248FFF7F5FE09B000BD000000380140B4
+:101A10000501050006010600F7B50546164C00F065
+:101A200023FA002824D160784101201D465C1E2E37
+:101A300000DD1E262E706D1C701CC6B2002709E04A
+:101A400060784101201D0918781C085C28706D1C05
+:101A5000781CC7B2B742F3DB6078401C60706078D6
+:101A6000142801DB0020607000210298017002E060
+:101A7000022102980170FEBDC802002070B5002549
+:101A8000464C40214648FFF7C1FE002839D00520CA
+:101A9000C00120180079002827DD0520C00120188A
+:101AA0000079401E0521C901611808710520C00197
+:101AB00020188079FA2804DB00200521C90161186B
+:101AC00088710520C001201882790520C0012018E6
+:101AD0008079401C0523DB01E318987131482018F8
+:101AE000815C2F48FFF73FFF07E00520C001201869
+:101AF00040790521C9016118887140212848FFF704
+:101B000077FE20212648FFF781FE002844D0244894
+:101B1000FFF724FFC5B224480078002802D001282E
+:101B200031D107E0242D02D101201F490870012086
+:101B3000E0702CE0232D17D1232120784201201DB5
+:101B40001018E2788154E17820784201201D8154F8
+:101B50002078401C20702078142801DB00202070A1
+:101B60000020114908700DE0242D02D10120E07001
+:101B700008E020784101201D0818E1784554E078FC
+:101B8000401CE07003E000200749087000BF00BF60
+:101B900020210348FFF72CFE70BD0000C802002082
+:101BA000003801408702000042000020F8B50546D9
+:101BB0000E46344C002E01D10420F8BD00F054F93B
+:101BC000074625E00520C00120180079401C0521AA
+:101BD000C901611808710520C00120184079FA2850
+:101BE00004DB00200521C90161184871287805210E
+:101BF000C901611849790522D201A2185279521CF3
+:101C00000523DB01E3185A711F4AA21850546D1CBA
+:101C10003046711ECEB20028D4D1002F30D005201E
+:101C2000C00120180079002808D00520C001201824
+:101C30000079401E0521C901611808710520C00105
+:101C400020188079FA2804DB00200521C9016118D9
+:101C500088710520C001201880790522D201A218C0
+:101C60009279521C0523DB01E3189A71064AA218E7
+:101C7000115C0648FFF777FE08210448FFF7B8FD1E
+:101C800000209AE7C80200208702000000380140C7
+:101C900030B47446641E2578641CAB4204D3635D83
+:101CA0005B00E31830BC18471D46F8E700F0BEF8AB
+:101CB00000F096F800F08EF800F07CF800F068F87C
+:101CC0002EE0FEF797FF174800780F2805DB00206D
+:101CD00014490870FEF7C0FB22E01348007823285F
+:101CE00007DB002010490870FEF77EFBFEF79CFF23
+:101CF00016E00E480078642809DB00200B490870C4
+:101D0000FFF708FAFEF7BEFDFFF770F808E0084895
+:101D10000078232803DB00200549087000E000BF9D
+:101D2000CFE7000032000020330000203400002004
+:101D300035000020002104480178405C232801D1AF
+:101D4000012070470020FCE74C06002070B50546D6
+:101D500000240026E9000C4A5058FEF71FFAC6B2CC
+:101D600000BF0CE0E80008490858015D601C074A04
+:101D7000105C814201D0002070BD601CC4B2B4422E
+:101D8000F0DB0120F8E70000E02300084C0600200B
+:101D900010B50748FEF742FF0520FEF733FF7D2010
+:101DA000C000FEF735FFFEF725FFFEF71BFF10BD55
+:101DB0005555000000B58BB001A8FFF79BFA012133
+:101DC000684641701B21017001218170FFF726F8E0
+:101DD0000BB000BD10B5FEF7CFFDFFF7C9FD10BD7C
+:101DE00010B57D21C9000E480068FEF719FA0446B7
+:101DF000601E0C49884201D901200CE0601E0A498E
+:101E000048610321081FFFF77DF80020064988611B
+:101E1000072008610020002801D000BFFEE710BDA8
+:101E200000000020FFFFFF0000E000E010B50020F0
+:101E3000094908700949087009490870094908707A
+:101E4000FFF71EFAFEF7D0FFFEF722FBFEF71BFDA1
+:101E5000FFF7E2F810BD0000320000203300002040
+:101E600034000020350000200448007803494978F8
+:101E7000884201D1012070470020FCE7C802002001
+:101E800003480021017041708170C17070470000EB
+:101E9000C802002010B50A484079492805D100221F
+:101EA00002211046FFF7C4F808E00548407956289B
+:101EB00004D1002203211046FFF7BAF810BD00003C
+:101EC0004C0600200648407A3038C1B20548C1713E
+:101ED0000348807A3038C1B202480172704700006E
+:101EE0004C060020D40600200A48407A3038C1B29F
+:101EF000094881750748807A3038C1B206481630E3
+:101F000041700448C07A3038C1B20348163081703D
+:101F1000704700004C060020B4060020704710B542
+:101F2000002202211046FFF783F810BD7047000021
+:101F300010B50A48807A302805D110210920C00642
+:101F4000FEF716FD08E00548807A312804D11021FB
+:101F50000920C006FEF70EFD10BD00004C06002053
+:101F600010B58D48407930380300FFF791FE050425
+:101F70003A70A6DC39008849C97930390A225143C0
+:101F8000854A127A303A891808026421FEF752F91C
+:101F9000C1B28248C1728049497A30390A2251431C
+:101FA0007D4A927A303A891808026421FEF742F994
+:101FB000C1B27A4801737849C97A30390A2251434B
+:101FC000754A127B303A891808026421FEF732F90B
+:101FD000C1B272488172007C012108436F490874C4
+:101FE000D7E06D49C97930390A2251436A4A127AD9
+:101FF000303A891808026421FEF71CF9C1B267481B
+:1020000081736549497A30390A225143624A927A8A
+:10201000303A891808026421FEF70CF9C1B25F4812
+:10202000C1735D49C97A30390A2251435A4A127B39
+:10203000303A891808026421FEF7FCF8C1B257480B
+:102040004173007C0221084354490874A1E05249BD
+:10205000C97930390A2251434F4A127A303A8918E5
+:1020600008026421FEF7E6F8C1B24C4881704A4983
+:10207000497A30390A225143474A927A303A8918CC
+:1020800008026421FEF7D6F8C1B24448C170424943
+:10209000C97A30390A2251433F4A127B303A8918B3
+:1020A00008026421FEF7C6F8C1B23C484170007CCA
+:1020B00004210843394908746BE03749C97930393C
+:1020C0000A225143344A127A303A891808026421AC
+:1020D000FEF7B0F8C1B2314841712F49497A303921
+:1020E0000A2251432C4A927A303A89180802642114
+:1020F000FEF7A0F8C1B2294881712749C97A303961
+:102100000A225143244A127B303A8918080264217A
+:10211000FEF790F8C1B221480171007C0821084304
+:102120001E49087435E01C49C97930390A225143E7
+:10213000194A127A303A891808026421FEF77AF8AF
+:10214000C1B2164801721449497A30390A22514302
+:10215000114A927A303A891808026421FEF76AF827
+:10216000C1B20E4841720C49C97A30390A22514332
+:10217000094A127B303A891808026421FEF75AF89E
+:10218000C1B20648C171007C10210843034908749C
+:1021900000BF00BF10BD00004C060020B4060020A8
+:1021A00010B50024164880793038C4B2002C18D1FC
+:1021B0001348017A1348C174C07C302806D101212C
+:1021C000C9030920C006FEF7D3FB17E00D48C07C09
+:1021D000312813D10121C9030920C006FEF7CAFB2B
+:1021E0000CE0012C05D10648017A064813304170F5
+:1021F00004E00348017A03481330817010BD0000E9
+:102200004C060020B40600200B484079302803D14A
+:1022100000210A4841740EE007484079312803D173
+:1022200001210648417406E003484079322802D172
+:1022300002210248417470474C060020B406002079
+:10224000002002490870024948707047B802002017
+:102250009406002000200249087002494870704727
+:10226000B802002094060020002005498979303901
+:10227000C8B2022800DD02200249887470470000BD
+:102280004C060020B406002070B506460024002548
+:102290000E4C24202070641C49202070641C4420B3
+:1022A0002070641C2C202070641C00BF01E0681C9E
+:1022B000C5B20F2DFBDB31202070641C2320207061
+:1022C000641C15210148FFF771FC70BD6A060020EF
+:1022D00070B505460024254C24202070641C4B203A
+:1022E0002070641C45202070641C59202070641CE0
+:1022F0002812082803D13B202070641C18E0281203
+:10230000092803D13C202070641C11E028120A28FF
+:1023100003D13D202070641C0AE028120B2803D151
+:102320003E202070641C03E0281230302070641CB2
+:102330002C202070641C01210D48417228120528B0
+:1023400007DAE8B2022804D1FF200002054001208C
+:102350000543284630302070641C23202070641C04
+:1023600009210248FFF722FC70BD00006A06002028
+:10237000D406002000BF704770B506460024002533
+:102380000F4C24202070641C56202070641C2C20CC
+:102390002070641C00BF05E00A48405D2070641C8A
+:1023A000681CC5B20F2DF7DB46202070641C23206B
+:1023B0002070641C14210248FFF7F8FB70BD000078
+:1023C0006A060020C8230008535A443130313031A6
+:1023D000323231313230300024484541525400000D
+:1023E000BC2400081D1F0008A42400084122000886
+:1023F0008824000855220008602400082D1F0008CA
+:102400006C240008611F00087C2400086922000871
+:10241000C4240008A1210008A02400080922000803
+:10242000842400081F1F000874240008E91E000807
+:1024300064240008C51E000894240008951E0008A6
+:10244000B0240008311F0008982400081D1F000850
+:1024500075230008D122000889220008792300088A
+:102460004D49430043414C4C4C4544004E4C45447F
+:1024700000000000444F4F524C454400554C454429
+:102480000000000049440000535953555044415442
+:102490004500000041534B0043414C4C00000000FC
+:1024A00053495000535953524553455400000000BE
+:1024B0004E45545245534554000000004845415292
+:1024C0005400000052454C415900000008300008FB
+:1024D000000000206C0000000401000874300008B7
+:1024E0006C000020D40C0000200100080000000057
+:1024F00000000000000000000000000000000000DC
+:1025000000000000000000000000000000000000CB
+:1025100000000000000000000000000000000000BB
+:1025200000000000000000000000000000000000AB
+:10253000000000000000000000000000000000009B
+:10254000000000000000000000000000000000008B
+:10255000000000000000000000000000000000007B
+:10256000000000000000000000000000000000006B
+:10257000000000000000000000000000000000005B
+:10258000000000000000000000000000000000004B
+:10259000000000000000000000000000000000003B
+:1025A000000000000000000000000000000000002B
+:1025B000000000000000000000000000000000001B
+:1025C000000000000000000000000000000000000B
+:1025D00000000000000000000000000000000000FB
+:1025E00000000000000000000000000000000000EB
+:1025F00000000000000000000000000000000000DB
+:1026000000000000000000000000000000000000CA
+:1026100000000000000000000000000000000000BA
+:1026200000000000000000000000000000000000AA
+:10263000000000000000000000000000000000009A
+:10264000000000000000000000000000000000008A
+:10265000000000000000000000000000000000007A
+:10266000000000000000000000000000000000006A
+:10267000000000000000000000000000000000005A
+:10268000000000000000000000000000000000004A
+:10269000000000000000000000000000000000003A
+:1026A000000000000000000000000000000000002A
+:1026B000000000000000000000000000000000001A
+:1026C000000000000000000000000000000000000A
+:1026D00000000000000000000000000000000000FA
+:1026E00000000000000000000000000000000000EA
+:1026F00000000000000000000000000000000000DA
+:1027000000000000000000000000000000000000C9
+:1027100000000000000000000000000000000000B9
+:1027200000000000000000000000000000000000A9
+:102730000000000000000000000000000000000099
+:102740000000000000000000000000000000000089
+:102750000000000000000000000000000000000079
+:102760000000000000000000000000000000000069
+:102770000000000000000000000000000000000059
+:102780000000000000000000000000000000000049
+:102790000000000000000000000000000000000039
+:1027A0000000000000000000000000000000000029
+:1027B0000000000000000000000000000000000019
+:1027C0000000000000000000000000000000000009
+:1027D00000000000000000000000000000000000F9
+:1027E00000000000000000000000000000000000E9
+:1027F00000000000000000000000000000000000D9
+:1028000000000000000000000000000000000000C8
+:1028100000000000000000000000000000000000B8
+:1028200000000000000000000000000000000000A8
+:102830000000000000000000000000000000000098
+:102840000000000000000000000000000000000088
+:102850000000000000000000000000000000000078
+:102860000000000000000000000000000000000068
+:102870000000000000000000000000000000000058
+:102880000000000000000000000000000000000048
+:102890000000000000000000000000000000000038
+:1028A0000000000000000000000000000000000028
+:1028B0000000000000000000000000000000000018
+:1028C0000000000000000000000000000000000008
+:1028D00000000000000000000000000000000000F8
+:1028E00000000000000000000000000000000000E8
+:1028F00000000000000000000000000000000000D8
+:1029000000000000000000000000000000000000C7
+:1029100000000000000000000000000000000000B7
+:1029200000000000000000000000000000000000A7
+:102930000000000000000000000000000000000097
+:102940000000000000000000000000000000000087
+:102950000000000000000000000000000000000077
+:102960000000000000000000000000000000000067
+:102970000000000000000000000000000000000057
+:102980000000000000000000000000000000000047
+:102990000000000000000000000000000000000037
+:1029A0000000000000000000000000000000000027
+:1029B0000000000000000000000000000000000017
+:1029C0000000000000000000000000000000000007
+:1029D00000000000000000000000000000000000F7
+:1029E00000000000000000000000000000000000E7
+:1029F00000000000000000000000000000000000D7
+:102A000000000000000000000000000000000000C6
+:102A100000000000000000000000000000000000B6
+:102A200000000000000000000000000000000000A6
+:102A30000000000000000000000000000000000096
+:102A40000000000000000000000000000000000086
+:102A50000000000000000000000000000000000076
+:102A60000000000000000000000000000000000066
+:102A70000000000000000000000000000000000056
+:102A80000000000000000000000000000000000046
+:102A90000000000000000000000000000000000036
+:102AA0000000000000000000000000000000000026
+:102AB0000000000000000000000000000000000016
+:102AC0000000000000000000000000000000000006
+:102AD00000000000000000000000000000000000F6
+:102AE00000000000000000000000000000000000E6
+:102AF00000000000000000000000000000000000D6
+:102B000000000000000000000000000000000000C5
+:102B100000000000000000000000000000000000B5
+:102B200000000000000000000000000000000000A5
+:102B30000000000000000000000000000000000095
+:102B40000000000000000000000000000000000085
+:102B50000000000000000000000000000000000075
+:102B60000000000000000000000000000000000065
+:102B70000000000000000000000000000000000055
+:102B80000000000000000000000000000000000045
+:102B90000000000000000000000000000000000035
+:102BA0000000000000000000000000000000000025
+:102BB0000000000000000000000000000000000015
+:102BC0000000000000000000000000000000000005
+:102BD00000000000000000000000000000000000F5
+:102BE00000000000000000000000000000000000E5
+:102BF00000000000000000000000000000000000D5
+:102C000000000000000000000000000000000000C4
+:102C100000000000000000000000000000000000B4
+:102C200000000000000000000000000000000000A4
+:102C30000000000000000000000000000000000094
+:102C40000000000000000000000000000000000084
+:102C50000000000000000000000000000000000074
+:102C60000000000000000000000000000000000064
+:102C70000000000000000000000000000000000054
+:102C80000000000000000000000000000000000044
+:102C90000000000000000000000000000000000034
+:102CA0000000000000000000000000000000000024
+:102CB0000000000000000000000000000000000014
+:102CC0000000000000000000000000000000000004
+:102CD00000000000000000000000000000000000F4
+:102CE00000000000000000000000000000000000E4
+:102CF00000000000000000000000000000000000D4
+:102D000000000000000000000000000000000000C3
+:102D100000000000000000000000000000000000B3
+:102D200000000000000000000000000000000000A3
+:102D30000000000000000000000000000000000093
+:102D40000000000000000000000000000000000083
+:102D50000000000000000000000000000000000073
+:102D60000000000000000000000000000000000063
+:102D70000000000000000000000000000000000053
+:102D80000000000000000000000000000000000043
+:102D90000000000000000000000000000000000033
+:102DA0000000000000000000000000000000000023
+:102DB0000000000000000000000000000000000013
+:102DC0000000000000000000000000000000000003
+:102DD00000000000000000000000000000000000F3
+:102DE00000000000000000000000000000000000E3
+:102DF00000000000000000000000000000000000D3
+:102E000000000000000000000000000000000000C2
+:102E100000000000000000000000000000000000B2
+:102E200000000000000000000000000000000000A2
+:102E30000000000000000000000000000000000092
+:102E40000000000000000000000000000000000082
+:102E50000000000000000000000000000000000072
+:102E60000000000000000000000000000000000062
+:102E70000000000000000000000000000000000052
+:102E80000000000000000000000000000000000042
+:102E90000000000000000000000000000000000032
+:102EA0000000000000000000000000000000000022
+:102EB0000000000000000000000000000000000012
+:102EC0000000000000000000000000000000000002
+:102ED00000000000000000000000000000000000F2
+:102EE00000000000000000000000000000000000E2
+:102EF00000000000000000000000000000000000D2
+:102F000000000000000000000000000000000000C1
+:102F100000000000000000000000000000000000B1
+:102F200000000000000000000000000000000000A1
+:102F30000000000000000000000000000000000091
+:102F40000000000000000000000000000000000081
+:102F50000000000000000000000000000000000071
+:102F60000000000000000000000000000000000061
+:102F70000000000000000000000000000000000051
+:102F80000000000000000000000000000000000041
+:102F90000000000000000000000000000000000031
+:102FA0000000000000000000000000000000000021
+:102FB0000000000000000000000000000000000011
+:102FC0000000000000000000000000000000000001
+:102FD00000000000000000000000000000000000F1
+:102FE00000000000000000000000000000000000E1
+:102FF00000000000000000000000000000000000D1
+:103000004632303800000000006CDC020000000096
+:103010000000000001020304060708090000000088
+:1030200000000000000000000000000000000000A0
+:103030000000000000000000000000000000000090
+:103040000000000000000000000000000000C0A818
+:1030500001D3C0A801010000C0A801AA000000001F
+:10306000000000000000010203040102030406073F
+:04307000080900004B
+:04000005080000C12E
+:00000001FF

binární
WDProduceTool/db/wd_pdm.db


binární
WDProduceTool/obj/Debug/net6.0-windows10.0.22000.0/WDProduceTool.Forms.FrmThermometerCoding.resources


binární
WDProduceTool/obj/Release/net6.0-windows10.0.22000.0/WDProduceTool.Forms.FrmThermometerCoding.resources


+ 257 - 0
thermometer_qc.xml

@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<page
+        xmlns="http://cloudprint.cainiao.com/print"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://cloudprint.cainiao.com/print http://cloudprint-docs-resource.oss-cn-shanghai.aliyuncs.com/lpml_schema.xsd"
+        xmlns:editor="http://cloudprint.cainiao.com/schema/editor"
+        width="40" height="80"  splitable="false" >
+	<header height="0" >
+	</header>
+	<footer height="0" >
+	</footer>
+
+	<layout
+		editor:_for_="1651139527254690"
+            
+		id="1651139527254798" width="40" height="6" left="0" top="12"  style="zIndex:3;">
+		<text
+			style="fontFamily:SimHei;fontSize:12;letterSpacing:3;lineHeight:5;align:center;fontWeight:bold;">
+			<![CDATA[产 品 合 格 证]]>
+		</text>       
+	</layout>
+
+<layout
+		editor:_for_="1651139527254691"
+            
+		id="165113952725479" width="40" height="2" left="0" top="16"  style="zIndex:3;">
+		 <text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[QUALIFIED CERTIFICATE]]>
+		</text>     
+	</layout>
+
+	
+
+	<!--产品名称 -->
+	<layout
+		editor:_for_="1651139527254623"
+            
+		id="1651139527254724" width="16" height="5.00" left="1" top="22"  style="zIndex:3;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[产品名称:]]>
+		</text>
+
+	</layout>
+	<layout
+		editor:_for_="1651139527254656"
+            
+		id="1651139527254765" width="22" height="5.00" left="17" top="21"  style="zIndex:3;borderBottom:1;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.name%>]]>
+		</text>
+
+	</layout>
+<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="26" 
+                    endX="38"
+                    endY="26"
+                   >
+                </line>
+<!--规格型号 -->
+	<layout
+		editor:_for_="1651139527254689"
+            
+		id="1651139527254792" width="16" height="5.00" left="1" top="27"  style="zIndex:3;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[规格型号:]]>
+		</text>
+
+	</layout>
+	<layout
+		editor:_for_="1651139527254659"
+            
+		id="1651139527254732" width="22" height="5.00" left="17" top="26"  style="zIndex:3;borderBottom:1;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.model%>]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="31" 
+                    endX="38"
+                    endY="31"
+                   >
+                </line>
+	<!--生产批次-->
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="16" height="5.00" left="1" top="32"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[生产批次:]]>
+		</text>
+
+	</layout>
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="5.00" left="17" top="31"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.batch_number%>]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="36" 
+                    endX="38"
+                    endY="36"
+                   >
+                </line>
+	<!-- 生产日期-->
+	<layout
+		editor:_for_="1651139691989189"
+            
+		id="1651139691989927" width="16" height="5.00" left="1" top="37"  style="zIndex:5;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[生产日期:]]>
+		</text>
+		</layout>
+
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="5.00" left="17" top="36"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.produce_date%>]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="41" 
+                    endX="38"
+                    endY="41"
+                   >
+                </line>
+
+<!-- 检验员-->
+	
+
+		<layout
+		editor:_for_="1651139691989125"
+            
+		id="1651139691989926" width="16" height="5.00" left="1" top="42"  style="zIndex:5;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[检 验 员:]]>
+		</text>
+
+	</layout>
+
+<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="5.00" left="17" top="41"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.checker%>]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="46" 
+                    endX="38"
+                    endY="46"
+                   >
+                </line>
+
+	<!-- 生产厂家-->
+	
+
+		<layout
+		editor:_for_="1651139691989126"
+            
+		id="1651139691989927" width="16" height="5.00" left="1" top="47"  style="zIndex:5;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[生产厂家:]]>
+		</text>
+	</layout>
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="5.00" left="17" top="45"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:5;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[湖南维鼎信息技术有限公司]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="51" 
+                    endX="38"
+                    endY="51"
+                   >
+                </line>
+    <!-- 使用年限-->
+	<layout
+		editor:_for_="165113974700417"
+            
+		id="1651139747005484" width="16" height="5.00" left="1" top="52"  style="zIndex:6;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[使用期限:]]>
+		</text>
+
+	</layout>
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="5.00" left="17" top="51"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;align:center;fontWeight:bold">
+			<![CDATA[<%=_data.expiration%>]]>
+		</text>
+
+	</layout>
+	<line
+                    style="lineType:solid;lineColor:#000;"
+                    startX="17" 
+                    startY="56" 
+                    endX="38"
+                    endY="56"
+                   >
+                </line>
+
+  <!-- 执行标准-->
+	<layout
+		editor:_for_="165113974700418"
+            
+		id="1651139747005485" width="36" height="25.00" left="2" top="58"  style="zIndex:6;">
+		<text
+			style="fontFamily:SimHei;fontSize:7;align:left;fontWeight:bold">
+			<![CDATA[本产品执行GB/T21417.1-2008;GB/T21417.2-2008;GB9706.1-2007;GB/T14710-2009;YY0505-2012标准。经检验合格,准予出厂。]]>
+		</text>
+		
+	</layout>
+
+</page>

+ 84 - 0
thermometer_security.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<page
+        xmlns="http://cloudprint.cainiao.com/print"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://cloudprint.cainiao.com/print http://cloudprint-docs-resource.oss-cn-shanghai.aliyuncs.com/lpml_schema.xsd"
+        xmlns:editor="http://cloudprint.cainiao.com/schema/editor"
+        width="40" height="50"  splitable="false" >
+	<header height="0" >
+	</header>
+	<footer height="0" >
+	</footer>
+   <!-- 二维码 -->
+    <layout
+		editor:_for_="1651141263320802"
+            
+		id="1651141263331813" width="14" height="14" left="2" top="2"  style="zIndex:50;">
+		<barcode type="qrcode" ratioMode="keepRatio" ><![CDATA[<%=_data.security_code%>]]></barcode>
+	</layout>
+
+	<layout
+		editor:_for_="1651139527254689"
+            
+		id="1651139527254792" width="22" height="10" left="16" top="2"  style="zIndex:3;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;letterSpacing:1;lineHeight:5;align:center;">
+			<![CDATA[维鼎康联正品防伪标贴]]>
+		</text>
+
+	</layout>
+    <!-- 生产日期-->
+	<layout
+		editor:_for_="1651139640794637"
+            
+		id="1651139640795922" width="22" height="4.00" left="17" top="10"  style="zIndex:4;">
+		<text
+			style="fontFamily:SimHei;fontSize:5;lineHeight:5;">
+			<![CDATA[生产日期:<%=_data.produce_date%>]]>
+		</text>
+
+	</layout>
+    <!--生产批号-->
+	<layout
+		editor:_for_="1651139691989189"
+            
+		id="1651139691989927" width="22" height="4.00" left="17" top="13"  style="zIndex:5;">
+		<text
+			style="fontFamily:SimHei;fontSize:5;lineHeight:5;">
+			<![CDATA[生产批号:<%=_data.batch_number%>]]>
+		</text>
+
+	</layout>
+    <!-- 出厂编号-->
+	<layout
+		editor:_for_="165113974700417"
+            
+		id="1651139747005484" width="38" height="5" left="2" top="17"  style="zIndex:6;">
+		<text
+			style="fontFamily:SimHei;fontSize:8;lineHeight:5;">
+			<![CDATA[出厂编号 :<%=_data.serial_no%>]]>
+		</text>
+
+	</layout>
+<!--批次序号 -->
+	<layout
+		editor:_for_="1651139773783290"
+            
+		id="1651139773783738" width="38" height="5" left="2" top="30"  style="zIndex:7;">
+		<text
+			style="fontFamily:SimHei;fontSize:10;lineHeight:5;align:center;">
+			<![CDATA[<%=_data.number%>]]>
+		</text>
+	</layout>
+    
+<!--扫码提示 -->
+	<layout
+		editor:_for_="1651139773783289"
+            
+		id="1651139773783737" width="38" height="5" left="2" top="45"  style="zIndex:7;">
+		<text
+			style="fontFamily:SimHei;fontSize:10;lineHeight:5;align:center;fontWeight:bold;">
+			<![CDATA[手机扫一扫辨别真伪]]>
+		</text>
+	</layout>
+</page>