Commit 54093547 LN

屏蔽:料号未配置NG功能

1 个父辈 876e97c3
......@@ -53,6 +53,8 @@
<add key ="CounParamConfig" value ="\XRAY\countParam.csv"/>
<add key ="DataPath" value ="\data\DB.db3"/>
<add key ="ResultMinCount" value ="100"/>
<add key ="ComPath_Config" value ="\XRAY\pnDetailedList.csv"/>
<add key ="LabelWaitMS" value ="1000"/>
</appSettings>
<log4net>
......
......@@ -123,6 +123,12 @@
<Compile Include="FrmAnalyze.Designer.cs">
<DependentUpon>FrmAnalyze.cs</DependentUpon>
</Compile>
<Compile Include="FrmComponentList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmComponentList.Designer.cs">
<DependentUpon>FrmComponentList.cs</DependentUpon>
</Compile>
<Compile Include="FrmLearning.cs">
<SubType>Form</SubType>
</Compile>
......@@ -192,6 +198,9 @@
<EmbeddedResource Include="FrmAnalyze.resx">
<DependentUpon>FrmAnalyze.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmComponentList.resx">
<DependentUpon>FrmComponentList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmLearning.resx">
<DependentUpon>FrmLearning.cs</DependentUpon>
</EmbeddedResource>
......
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file
namespace OnlineStore.AutoCountClient
{
partial class FrmComponentList
{
/// <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(FrmComponentList));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.button1 = new System.Windows.Forms.Button();
this.txtBomFilePath = new System.Windows.Forms.TextBox();
this.btnBomImport = new System.Windows.Forms.Button();
this.btnDownLoad = new System.Windows.Forms.Button();
this.groupInfo = new System.Windows.Forms.GroupBox();
this.txtPartNum = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.txtFengzhuang = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.txtDes = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.btnSave = new System.Windows.Forms.Button();
this.dgvList = new System.Windows.Forms.DataGridView();
this.Column_PN = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column_Name = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column_F = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column_Des = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column_Del = new System.Windows.Forms.DataGridViewLinkColumn();
this.btnBack = new System.Windows.Forms.Button();
this.btnNew = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupInfo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvList)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.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.groupBox1.Controls.Add(this.groupBox2);
this.groupBox1.Controls.Add(this.btnDownLoad);
this.groupBox1.Controls.Add(this.groupInfo);
this.groupBox1.Controls.Add(this.dgvList);
this.groupBox1.Controls.Add(this.btnBack);
this.groupBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.groupBox1.Location = new System.Drawing.Point(3, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(1275, 712);
this.groupBox1.TabIndex = 1;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "元器件库管理";
//
// groupBox2
//
this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.groupBox2.Controls.Add(this.button1);
this.groupBox2.Controls.Add(this.txtBomFilePath);
this.groupBox2.Controls.Add(this.btnBomImport);
this.groupBox2.Location = new System.Drawing.Point(853, 343);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(399, 187);
this.groupBox2.TabIndex = 74;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "上传更新元器件库";
//
// button1
//
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(243, 117);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(130, 45);
this.button1.TabIndex = 12;
this.button1.Text = "保存元器件库";
this.button1.UseVisualStyleBackColor = true;
//
// txtBomFilePath
//
this.txtBomFilePath.Enabled = false;
this.txtBomFilePath.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtBomFilePath.Location = new System.Drawing.Point(18, 37);
this.txtBomFilePath.Multiline = true;
this.txtBomFilePath.Name = "txtBomFilePath";
this.txtBomFilePath.Size = new System.Drawing.Size(355, 61);
this.txtBomFilePath.TabIndex = 10;
//
// btnBomImport
//
this.btnBomImport.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnBomImport.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnBomImport.Location = new System.Drawing.Point(88, 118);
this.btnBomImport.Name = "btnBomImport";
this.btnBomImport.Size = new System.Drawing.Size(130, 45);
this.btnBomImport.TabIndex = 8;
this.btnBomImport.Text = "选择文件";
this.btnBomImport.UseVisualStyleBackColor = true;
//
// btnDownLoad
//
this.btnDownLoad.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnDownLoad.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnDownLoad.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnDownLoad.Location = new System.Drawing.Point(941, 598);
this.btnDownLoad.Name = "btnDownLoad";
this.btnDownLoad.Size = new System.Drawing.Size(130, 45);
this.btnDownLoad.TabIndex = 71;
this.btnDownLoad.Text = "下载模板";
this.btnDownLoad.UseVisualStyleBackColor = true;
this.btnDownLoad.Click += new System.EventHandler(this.btnDownLoad_Click);
//
// groupInfo
//
this.groupInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupInfo.Controls.Add(this.btnNew);
this.groupInfo.Controls.Add(this.txtPartNum);
this.groupInfo.Controls.Add(this.label7);
this.groupInfo.Controls.Add(this.txtFengzhuang);
this.groupInfo.Controls.Add(this.label5);
this.groupInfo.Controls.Add(this.txtDes);
this.groupInfo.Controls.Add(this.label2);
this.groupInfo.Controls.Add(this.txtName);
this.groupInfo.Controls.Add(this.label1);
this.groupInfo.Controls.Add(this.btnSave);
this.groupInfo.Location = new System.Drawing.Point(853, 22);
this.groupInfo.Name = "groupInfo";
this.groupInfo.Size = new System.Drawing.Size(399, 315);
this.groupInfo.TabIndex = 68;
this.groupInfo.TabStop = false;
this.groupInfo.Text = "元器件基本信息";
//
// txtPartNum
//
this.txtPartNum.Enabled = false;
this.txtPartNum.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtPartNum.Location = new System.Drawing.Point(102, 41);
this.txtPartNum.MaxLength = 30;
this.txtPartNum.Name = "txtPartNum";
this.txtPartNum.Size = new System.Drawing.Size(271, 29);
this.txtPartNum.TabIndex = 74;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(28, 48);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(68, 17);
this.label7.TabIndex = 73;
this.label7.Text = "元器件编号:";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtFengzhuang
//
this.txtFengzhuang.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtFengzhuang.Location = new System.Drawing.Point(102, 131);
this.txtFengzhuang.MaxLength = 30;
this.txtFengzhuang.Name = "txtFengzhuang";
this.txtFengzhuang.Size = new System.Drawing.Size(271, 29);
this.txtFengzhuang.TabIndex = 70;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(52, 138);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(44, 17);
this.label5.TabIndex = 69;
this.label5.Text = "封装:";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtDes
//
this.txtDes.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtDes.Location = new System.Drawing.Point(102, 176);
this.txtDes.MaxLength = 30;
this.txtDes.Multiline = true;
this.txtDes.Name = "txtDes";
this.txtDes.Size = new System.Drawing.Size(271, 46);
this.txtDes.TabIndex = 66;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(52, 183);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(44, 17);
this.label2.TabIndex = 34;
this.label2.Text = "描述:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// txtName
//
this.txtName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtName.Location = new System.Drawing.Point(102, 86);
this.txtName.MaxLength = 30;
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(271, 29);
this.txtName.TabIndex = 33;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(52, 93);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(44, 17);
this.label1.TabIndex = 32;
this.label1.Text = "产品:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnSave
//
this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSave.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSave.Location = new System.Drawing.Point(243, 242);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(130, 45);
this.btnSave.TabIndex = 4;
this.btnSave.Text = "保存";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// dgvList
//
this.dgvList.AllowUserToAddRows = false;
this.dgvList.AllowUserToDeleteRows = false;
this.dgvList.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.dgvList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column_PN,
this.Column_Name,
this.Column_F,
this.Column_Des,
this.Column_Del});
this.dgvList.Location = new System.Drawing.Point(7, 22);
this.dgvList.MultiSelect = false;
this.dgvList.Name = "dgvList";
this.dgvList.ReadOnly = true;
this.dgvList.RowHeadersWidth = 10;
this.dgvList.RowTemplate.Height = 23;
this.dgvList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgvList.Size = new System.Drawing.Size(830, 684);
this.dgvList.TabIndex = 32;
this.dgvList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvList_CellContentClick);
this.dgvList.SelectionChanged += new System.EventHandler(this.dgvList_SelectionChanged);
//
// Column_PN
//
this.Column_PN.HeaderText = "元器件编号";
this.Column_PN.Name = "Column_PN";
this.Column_PN.ReadOnly = true;
this.Column_PN.Width = 120;
//
// Column_Name
//
this.Column_Name.HeaderText = "产品名称";
this.Column_Name.Name = "Column_Name";
this.Column_Name.ReadOnly = true;
this.Column_Name.Width = 120;
//
// Column_F
//
this.Column_F.HeaderText = "封装";
this.Column_F.Name = "Column_F";
this.Column_F.ReadOnly = true;
this.Column_F.Width = 150;
//
// Column_Des
//
this.Column_Des.HeaderText = "描述";
this.Column_Des.Name = "Column_Des";
this.Column_Des.ReadOnly = true;
this.Column_Des.Width = 280;
//
// Column_Del
//
this.Column_Del.HeaderText = "删除";
this.Column_Del.Name = "Column_Del";
this.Column_Del.ReadOnly = true;
this.Column_Del.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Column_Del.Text = "删除";
this.Column_Del.ToolTipText = "删除";
this.Column_Del.UseColumnTextForLinkValue = true;
this.Column_Del.Width = 80;
//
// btnBack
//
this.btnBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnBack.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnBack.Location = new System.Drawing.Point(1096, 598);
this.btnBack.Name = "btnBack";
this.btnBack.Size = new System.Drawing.Size(130, 45);
this.btnBack.TabIndex = 6;
this.btnBack.Text = "返回";
this.btnBack.UseVisualStyleBackColor = true;
this.btnBack.Click += new System.EventHandler(this.btnBack_Click);
//
// btnNew
//
this.btnNew.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnNew.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnNew.Location = new System.Drawing.Point(88, 242);
this.btnNew.Name = "btnNew";
this.btnNew.Size = new System.Drawing.Size(130, 45);
this.btnNew.TabIndex = 75;
this.btnNew.Text = "新增";
this.btnNew.UseVisualStyleBackColor = true;
//
// FrmComponentList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1284, 721);
this.Controls.Add(this.groupBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmComponentList";
this.Text = "元器件信息";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmComponentList_FormClosing);
this.Load += new System.EventHandler(this.FrmPointType_Load);
this.Shown += new System.EventHandler(this.FrmComponentList_Shown);
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupInfo.ResumeLayout(false);
this.groupInfo.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvList)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Button btnBack;
private System.Windows.Forms.DataGridView dgvList;
private System.Windows.Forms.GroupBox groupInfo;
private System.Windows.Forms.TextBox txtDes;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnDownLoad;
private System.Windows.Forms.TextBox txtPartNum;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox txtFengzhuang;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox txtBomFilePath;
private System.Windows.Forms.Button btnBomImport;
private System.Windows.Forms.DataGridViewTextBoxColumn Column_PN;
private System.Windows.Forms.DataGridViewTextBoxColumn Column_Name;
private System.Windows.Forms.DataGridViewTextBoxColumn Column_F;
private System.Windows.Forms.DataGridViewTextBoxColumn Column_Des;
private System.Windows.Forms.DataGridViewLinkColumn Column_Del;
private System.Windows.Forms.Button btnNew;
}
}
\ No newline at end of file

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 System.IO;
using OnlineStore.LoadCSVLibrary;
using OnlineStore.Common;
namespace OnlineStore.AutoCountClient
{
internal partial class FrmComponentList : FrmBase
{
public static FrmComponentList instance = new FrmComponentList();
private FrmComponentList()
{
InitializeComponent();
}
private void FrmPointType_Load(object sender, EventArgs e)
{
}
private DataGridViewRow SetRowInfo(DataGridViewRow view, ComponetInfo com)
{
if (view == null)
{
view = new DataGridViewRow();
view.CreateCells(dgvList);
}
view.Cells[Column_PN.Index].Value = com.PartNum.ToString();
view.Cells[this.Column_Name.Index].Value = com.ProductName.ToString();
view.Cells[Column_F.Index].Value = com.Encapsulations.ToString();
view.Cells[this.Column_Des.Index].Value = com.Describe.ToString();
return view;
}
private void btnSave_Click(object sender, EventArgs e)
{
////if (groupInfo.Text.StartsWith("新增"))
////{
//// //AddCom();
////}
////else
//{
// if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0)
// {
// int rowIndex = dgvList.SelectedRows[0].Index;
// DataGridViewRow row = dgvList.Rows[rowIndex];
// ComponetInfo obj = getRowPointInfo(row);
// if (obj == null)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请选择元器件!"));
// return;
// }
// if (cmbPositionNumList.SelectedIndex < 0)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition,"请选择元器件位置!"));
// cmbPositionNumList.Focus();
// return;
// }
// TSAVPosition position = (TSAVPosition)cmbPositionNumList.SelectedItem;
// obj.ComponentName = FormUtil.getValue(txtName);
// obj.ComponentDes = FormUtil.getValue(txtDes);
// obj.ComCount = FormUtil.GetIntValue(txtCount);
// obj.Notes = FormUtil.getValue(txtNotes);
// obj.PartNum = FormUtil.getValue(txtPartNum);
// obj.PositionNum = position.PositionNum;
// if (obj.ComponentName.Equals(""))
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName,"请输入元器件名称!"));
// txtName.Focus();
// return;
// }
// //if (obj.PositionNum.Equals(""))
// //{
// // MessageBox.Show("请输入元器件所在位置!");
// // this.txtPosition.Focus();
// // return;
// //}
// if (obj.ComCount<=0)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum,"请输入元器件数量!"));
// txtCount.Focus();
// return;
// }
// CSVReaderBomManager.SaveComponet(cmbList.Text, obj);
// //ComponentManager.Update(obj);
// SetRowInfo(dgvList.Rows[rowIndex], obj);
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComSaveOk,"元器件【{0}】保存成功!", obj.PartNum + "-" + obj.ComponentName ));
// groupInfo.Text = ResourceCulture.GetString(ResourceCulture.ComInfo,"元器件【{0}】的基本信息",obj.PartNum + "-" + obj.ComponentName);
// }
//}
}
private void btnDel_Click(object sender, EventArgs e)
{
if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0)
{
int rowIndex = dgvList.SelectedRows[0].Index;
DeleteCom(rowIndex);
}
}
private ComponetInfo getRowPointInfo(DataGridViewRow row)
{
ComponetInfo point = new ComponetInfo();
try
{
if (row.Cells[Column_PN.Name].Value == null)
{
return null;
}
point.PartNum = row.Cells[this.Column_PN.Name].Value.ToString();
point.Encapsulations = row.Cells[this.Column_F.Name].Value.ToString();
point.ProductName = row.Cells[this.Column_Name.Name].Value.ToString();
point.Describe = row.Cells[this.Column_Des.Name].Value.ToString();
}
catch (Exception ex)
{
LogUtil.error( "保存数据出错:" + ex.ToString());
return null;
}
return point;
}
private void showDetail(int rowIndex)
{
DataGridViewRow row = dgvList.Rows[rowIndex];
ComponetInfo obj = getRowPointInfo(row);
if (obj == null)
{
MessageBox.Show( "请选择元器件!" );
return;
}
txtPartNum.Tag = obj;
txtName.Text = obj.ProductName;
txtDes.Text = obj.Describe;
txtFengzhuang.Text = obj.Encapsulations.ToString();
txtPartNum.Text = obj.PartNum;
int index = -1;
groupInfo.Text = "元器件【"+ obj.PartNum + "】的基本信息";
}
private void DeleteCom(int rowIndex)
{
DataGridViewRow row = dgvList.Rows[rowIndex];
ComponetInfo obj = getRowPointInfo(row);
if (MessageBox.Show(
"确认要删除元器件【" + obj.PartNum + "】吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
{
return;
}
else
{
CSVBomManager.RemoveCom(obj);
this.dgvList.Rows.RemoveAt(rowIndex);
MessageBox.Show("元器件【" + obj.PartNum + "】删除成功!", "提示");
}
}
private void btnBack_Click(object sender, EventArgs e)
{
//this.Close();
this.Visible = false;
//FrmMenu.frmMain.Visible = true;
}
private void dgvList_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1 && e.ColumnIndex >= 0)
{
string name = this.dgvList.Columns[e.ColumnIndex].Name;
if (name.Equals(this.Column_Del.Name))
{
DeleteCom(e.RowIndex);
}
}
}
private void dgvList_SelectionChanged(object sender, EventArgs e)
{
if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0)
{
int rowIndex = dgvList.SelectedRows[0].Index;
showDetail(rowIndex);
}
}
private void btnDownLoad_Click(object sender, EventArgs e)
{
//SaveFileDialog sfd = new SaveFileDialog();
//sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
//sfd.FileName = ResourceCulture.GetString( "元器件库模板");
//sfd.Filter = @"csv|*.csv";
//DialogResult result = sfd.ShowDialog();
//if (result.Equals(DialogResult.OK))
//{
// string filePath = sfd.FileName;
// //if (Directory.Exists(filePath))
// {
// string sourcePath = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.Componet_Template);
// if (File.Exists(filePath))
// {
// File.Delete(filePath);
// }
// //复制文件
// File.Copy(sourcePath, filePath);
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave,"模板已保存在:" )+ filePath);
// }
//}
}
private void FrmComponentList_FormClosing(object sender, FormClosingEventArgs e)
{
this.Visible = false;
//FrmMenu.frmMain.Visible = true;
e.Cancel = true;
}
private void FrmComponentList_Shown(object sender, EventArgs e)
{
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Column_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_F.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_Des.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_Del.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AABZPT3QWT09/1g8PP9YPDz/WDw8/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8
Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1k9Pf9ZPT3/WT09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WT09/1k9Pf9ZPT3RWT09/lo+Pv9hRkb/Y0hI/2NHRP9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NG
Q/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9eQUD/WT09/1w+
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BA
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BA
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/18/PP9ZPT3/WT09/lg8PP9hRkb/w7m5/9/Z2f/dw6H/3bqI/926
iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926
iv/evIv/l3hh/1U6PP+BTDX/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7pi
K/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7pi
K/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7tiKv+mWi7/Xz88/1k9Pf9YPDz/Y0hI/97Y
2P///////+e7///bnf//3J7//9ye///cnv//3J7//9ye///cnv//3J7//9ye///cnv//3J7//9ye///c
nv//3J7//9ye///cnv//3J7//96f/6eIa/9UOjz/i1Az/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9Rs
Jv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9Rs
Jv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/VbCX/u2Iq/2BA
PP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Z
m//+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7l
u//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////////5rv//9yd///d
n///3J7//tud//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Tayb/02sm/9Jr
Jv/Sayb/1Gwm/9RsJv/Tayb/0Wsm/85qJ//Rayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y
2P//////xa+Z/6yMbP/Do3z/2beI//PQl//+253//9ue///cnv//3Z///9ye//7bnf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/02sm/9NrJv/UbCb/02sm/9JrJv/Tayb/0msm/89q
J//LaCf/xWYp/8VmKP/Rayb/0Wsm/7BeLP+YVTL/jFE0/4JNNf95STf/rV0t/9NsJv/UbCb/umIr/2BA
PP9YPT3/WDw8/2NISP/e2Nj//v7+/4p2d/9vQjT/eko4/2pHP/+yknH//dmc/7qZdf+pim3/waF7/9i2
iP/10pj//tud//7bnf//3J7//92f///cnv/+253//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/9RsJv/UbCb/0msm/9JrJv/Rayb/zGkn/8ZnKP+/ZCr/t2Er/8Zm
KP/UbCb/vGMq/4hPNP99Szb/dkc2/3BEN/93SDf/yGco/8tpJ/9zRzf/ekMq/5BHH/+aSRn/c0Eu/5hV
Mf/UbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9BqJv+KTjH/pYZq//bT
mf97XE//eUc0/31LN/9qSED/w6J7///bnv+6mXX/o4Vp/72def/Vs4b/89CX//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9BqJv/CZSn/uGEr/65eLf+jWS//pVov/81pJ//Qaib/lVQy/3ZI
N/9yRTb/cUQ0/2VAOP+YVTH/1mwl/6RaL/9sQDL/oEoW/6xMEP+jShT/b0Q2/8RmKf/LaCf/dUc2/69N
D//OUwD/zVIA/4ZFJf+YVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RX
K//WbCX/kFAx/6WHa//205n/f15P/7JeKv/Qaib/gEs0/7iYdv/82Jz/g2RV/3RENP97Sjf/aEY+/7iX
dP//3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+0YCz/bEQ4/29CNP9zQjD/dEIv/2hC
Of/AZCn/zmon/3ZIN/+QRh7/s00N/7tPCP+GRST/kVMz/9ZsJf+kWi//fUQq/8tSAf/OUwD/uE4K/3JF
Nf/EZin/y2gn/3VHNv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/e2Nj//v7+/4t3d/+kVyv/1mwl/49QMf+lh2v/9tOZ/39eT/+yXir/02wm/4NMNP+4mXb/+9ic/4Vm
Vf+qWiz/0Wsm/4ZNMv+sjW///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/qlwu/3NC
L/+7Twn/xVED/7lPCf9xRDT/v2Qq/85qJ/94SDb/qksS/85TAP/NUgD/jEYh/5FTM//WbCX/pFov/31E
Kv/JUgH/zFIA/7dOCv9yRTX/xGYp/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bTmf9/Xk//sl4q/9Nr
Jv+DTDT/uJl2//vYnP+FZlX/qlos/9VsJf+KTzL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/1Gwm/6tcLv95Qy3/yFEC/81SAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tG
If+SUzP/1mwl/6RaL/99RCr/yVIB/8xSAP+3Tgr/ckU1/8RmKf/LaCf/dUc2/65MD//NUgD/y1IA/4VF
Jf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RXK//WbCX/j1Ax/6WH
a//205n/f15P/7JeKv/Tayb/g0w0/7iZdv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hI
Nv+oSxL/zVIA/8xSAP+LRiH/klMz/9ZsJf+kWi//fUQq/8lSAf/MUgD/t04K/3JFNf/EZin/y2gn/3VH
Nv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/e2Nj//v7+/4t3
d/+kVyv/1mwl/49QMf+lh2v/9tOZ/39eT/+yXir/02sm/4NMNP+4mXb/+9ic/4VmVf+qWiz/1Wwl/4pO
Mv+sjm///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xP
CP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/pFov/31EKv/JUgH/zFIA/7dO
Cv9yRTX/xGYp/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3tjY//7+/v+Ld3f/pVgr/9ZsJf+PUDH/pYdr//bTmf9/Xk//sl4q/9NrJv+DTDT/uJl2//vY
nP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tc
Lv94Qy3/x1EC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tGIf+SUzP/1mwl/6Ra
L/99RCr/yVIB/8xSAP+3Tgr/ckU1/8RmKf/LaCf/dUc2/69MD//NUgD/zVIA/4ZFJf+YVjL/1Gwm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/inZ2/5xULP/Sayb/kFAx/6WHa//205n/f15P/7Je
Kv/Tayb/g0w0/7iZdv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hINv+oSxL/zVIA/8xS
AP+LRiH/klMz/9ZsJf+kWi//fUQq/8lSAf/NUgD/uE4K/3JFNf/EZin/y2gn/3VHNv+qTBH/wFAG/7NN
DP93Qiz/mFUx/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj//////6SPhv9wTED/fkw3/2xB
Nf+lhmr/9tOZ/35eT/+zXir/1Wwl/4NNNP+4mXb/+9ic/4VmVf+qWiz/1Wwl/4pOMv+sjm///9ye///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xPCP9xRDT/v2Qq/85q
J/94SDb/qEsS/81SAP/NUgD/jEYh/5FTM//WbCX/pFov/3xEKv/GUQP/w1AE/6hLEv9vRDb/xGYp/8xp
J/9zRzj/bkEy/3JDM/9zRTb/ekk2/7FeLP/TbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///33rb/372K/7+fev+cfWX/y6l///bTmf99X1H/hEsx/6tbLP95SDX/uJl2//zYnP+FZlX/qlss/9Vs
Jf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tcLv94Qy3/x1EC/8xS
AP+8Twj/cUQ0/79kKv/Oaif/eEg2/6lLEv/NUgD/x1EC/4dFJP+RUzP/1mwl/6VaL/9lPzf/eUMs/3ND
Mf9wRDX/gEw1/8loKP/Rayb/sV8s/6xdLv+7Yyv/xmco/85pJ//Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////+e8///env//3p///tud//7anf/82Zz/zqyB/55/Zv+BYlP/a01F/8Kh
ev/715v/g2VV/6BWLf/Raib/ik8y/6yNb///3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Rs
Jv+rXC7/eUMt/8lSAv/NUgD/uU8J/3BDNP+/ZCr/zmon/3ZIN/98Qyn/hEUm/3pELf9tQzb/n1gw/9Rs
Jv/BZCn/nFcw/6dbL/+2YSz/wmUp/8xpJ//Sayb/0msm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/02sm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj//////9S9ov/KqH7/6seR//vXm///257//tqd///c
nv/+253/9dKY/+XCjv/00Zf//Nic/6ODaP90UET/fk04/2lBN/+tjW7//9ye///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/UbCb/q1wu/2tAM/+TRx3/h0Uk/3hDLf9wRTj/w2Up/9FrJv+gWC//klMz/6JZ
MP+xXy3/vmQq/81pJ//Sayb/02sm/9RsJv/UbCb/1Gwm/9RsJv/TbCb/0msm/9JrJv/Sayb/zWkn/8Rm
Kf+4YSv/rF0t/8NlKf/Tayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+MeHj/Z0I5/3dV
SP+Ob1z/1bOF///bnv/82Jz//dqd///dn///3Z///tue//7anf/41Zr/5cKP/8enf/+oiGv/1bOF///b
nv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/02sm/7tiKv+ATDX/ilA0/5pWMf+qXC7/vWMq/9Bq
Jv/Sayb/02sm/9NsJv/UbCb/1Gwm/9RsJv/Tayb/0msm/9NrJv/TbCb/0Wsm/8xpJ//DZSj/wWQp/9Fr
Jv/Paif/llQx/3dIN/9xRTb/cUMz/2M/OP+cVzD/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y
2P/+/v7/i3d3/55VLP+6YSr/eUYz/6WGav/82Jz/p4dq/5p7Yf/CoXf/48CN//rWm//+2p3//9ue///d
n///3Z///9ye//7bnf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0Gom/9Jr
Jv/UbCb/1Gwm/9NsJv/Sayb/0msm/9NsJv/UbCb/02sm/89qJ//JaCj/zmkn/9NrJv/CZSn/lVQx/4NN
NP90Rzz/ZkJF/3JGOv/HZyj/y2gn/3JGN/+TRx3/tU4M/79QBv+CRCb/mVYy/9RsJv/UbCb/umIr/2BA
PP9YPT3/WDw8/2NISP/e2Nj//v7+/4t3d/+lWCv/120l/5BRMP+lh2v/9tKY/3lcU/9fSXz/Y0xz/2pP
Uf/KqH7//9ye/+3Kk//syZP//Nic///cnv/+257//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9RsJv/UbCb/1Gwm/9NrJv/Rayb/0msm/9FrJv+3YSv/m1cx/4tQNP99Szb/cEU4/6FY
L//WbCX/plot/1c7Wf9SNaX/UjTB/1I0uf9nQkf/xWYo/8toJ/91Rzb/sE0P/85TAP/MUgD/hUUl/5lW
Mv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bT
mP97Xlf/cGHO/3lu+v9iS3r/uZhy//3Znf+Sc17/clNK/5FzXv+3l3T/68iS///bnf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/85qJ/+7Yir/q10u/5tWMf+KUDT/i1A0/8hnKP/Oaif/eUk3/3VC
Lf+PRx//oEoW/3tDKv+RUzP/1mwl/6ZaK/9XOXf/UTH0/1Ex+f9RM9j/aEJJ/8VmKP/LaCf/dUc2/65M
D//NUgD/y1IA/4VFJf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RX
K//WbCX/j1Ax/6WHa//205j/e15X/3Bhzv96cP//ZE6B/7qZcv/72Jz/hGVV/5JQL/+aVC//a0M4/7KS
cf//3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+yXyz/aUI4/3ZDLv+DRSb/iEUj/2pC
N/+/ZCr/zmon/3hINv+oSxL/zlMA/85TAP+MRiH/kVMz/9ZsJf+mWiv/Vzl2/1Ex8f9RMfb/UTPW/2hC
Sf/FZij/y2gn/3VHNv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/e2Nj//v7+/4t3d/+kVyv/1mwl/49QMf+lh2v/9tOY/3teV/9wYc7/enD//2ROgf+6mXL/+9ic/4Vm
Vf+rWyv/120l/4pOMv+sjW///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/qlwu/3ZD
Lv/DUAT/zFIA/71PCP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/plor/1c5
dv9RMfH/UTH2/1Ez1v9oQkn/xWYo/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bTmP97Xlf/cGHO/3pw
//9kToH/uply//vYnP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/1Gwm/6tcLv94Qy3/yFEC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tG
If+SUzP/1mwl/6ZaK/9XOXb/UTHx/1Ex9v9RM9b/aEJJ/8VmKP/LaCf/dUc2/65MD//NUgD/y1IA/4VF
Jf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6VYK//WbCX/j1Ax/6WH
a//205j/e15X/3Bhzv96cP//ZE6B/7qZcv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hI
Nv+oSxL/zVIA/8xSAP+LRiH/klMz/9ZsJf+mWiv/Vzl2/1Ex8f9RMfb/UTPW/2hCSf/FZij/y2gn/3VH
Nv+uTA//zVIA/8xSAP+GRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/e2Nj//v7+/4p3
d/+iViv/120l/5BRMf+lh2v/9tOY/3teV/9wYc7/enD//2ROgf+6mXL/+9ic/4VmVf+qWiz/1Wwl/4pO
Mv+sjm///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xP
CP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/plor/1c5dv9RMfH/UTH2/1Ez
1v9oQkn/xWYo/8toJ/91Rzb/r00P/8xSAP/CUAT/fkMo/5hVMv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3tjY//////+YhH//b0Q3/5ZTL/9+STP/podq//bTmP97Xlf/cGHO/3pw//9kToH/uply//vY
nP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tc
Lv94Qy3/x1EC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tGIf+SUzP/1mwl/6Za
K/9XOXb/UTHz/1Ex+f9RMtj/aEJJ/8VmKP/LaCf/ckY3/4FEJv+BRCf/dEMw/29FN/+qXC7/1Gwm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P//////7tWx/8CfeP+PcV3/akxG/66Ob//20pj/e15X/29g
y/97cP//ZE6B/7qZcv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hINv+oSxL/zVIA/8xS
AP+MRiH/kVMz/9ZsJf+mWiz/Vzpy/1Ey2v9SNMX/UjaY/2hCQv/FZij/z2on/5FSMv+ITzT/n1gw/7Rg
LP/FZin/0Gom/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj////////mu///3J3/+9eb/+XC
jv/uy5T/99OZ/4VnWP9fSG7/aliu/2BIcP+6mXP//Nic/4VmVf+qWiz/1Wwl/4pOMv+sjm///9ye///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xPCP9xRDT/v2Qq/85q
J/94SDb/qkwS/85TAP/JUgH/h0Uk/5FTM//WbCX/qFst/1w+R/9jQFD/cUY//4RNNP+iWS//zmkn/9Jr
Jv/Rayb/0msm/9RsJv/UbCb/02sm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///+5bv//tmb//7anf//257//9ue//7anf/lwo7/t5Zx/4lrWv9pTUn/waB6//vXm/+FZlX/qlos/9dt
Jf+LTzL/rI1v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tcLv94Qy3/yFEC/81S
AP+9Twj/cUQ0/79kKv/Oaif/dkg3/4dFI/+MRiH/ekMs/2pBN/+eVzD/1Gwm/8dnKP+vXiz/vmMp/8po
J//Rayb/02wm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//9ue///cnv/51Zr/5MKO//PQ
l//615v/imxa/3lHNP+oWiz/gUoz/6yNb///3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Rs
Jv+rXC7/eEMt/8BQBv+5Twn/nkkX/2tCN/+/ZCr/0Gom/4xQM/96Sjf/j1Iz/6VaL/+6Yiv/zWkn/9Jr
Jv/Tayb/1Gwm/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d19j///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd///cnv/+253//tqd/+C+jP+sjW7/g2RU/2ZHQf+zk3H//9ye///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/UbCb/rF0t/2M/OP90QzD/cUQ1/3dINv+QUjP/ymgo/9NrJv/NaSf/zmon/9Nr
Jv/UbCb/02wm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Wwl/7hhK/9gQDz/WT09/1k9Pf9cQED/mYiI/9nS0f/537X//9yd///b
nv/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7//9ye//XSmP/buYn/7MmS///b
nf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/02sm/8VmKf+hWS//r14t/8BkKv/MaSf/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf95STf/Wz49/1k9Pf9ZPT3UWT09/Fc7
O/9jSUn/iW1e/8Ggef/typP//tue///cnv/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+253//9ye//7bnv/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Tayb/1Gwm/9Rs
Jv/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1k9
PfhZPT3KWT09IFk9PWhZPT2+WDw881c7O/9bPz7/dVdN/6iIa//duor/+tab///cnv//257//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1HWT09GVk9PQBZPT0AWT09DVk9PURZPT2aWT094Vc7PP5XOzz/ZklE/49w
XP/HpX3/8c2V///cnv//3J7//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAABZPT0AWT09A1k9
PSZZPT1zWT09xlg8PPdXOzz/XEA//3lcUP+ujm7/4b+M//vYnP//3J7//9ud//7anf/+2p3//tqd//7a
nf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWzs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABZPT0AWT8/AFk9PRFZPT1NWT09o1k9PedXOzz+WDw8/2lMRv+VdmD/zKuA//PQ
l///3J7//9ue//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZPT0AWT09AFk9PQVZPT0tWT09fVk9
Pc5YPDz5Vzs8/15CQP9+YFP/tJRy/+XDj//92Zz//9ye//7bnf//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZXPj4AWzw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAWT09AFo9PQBZPT0VWT09Vlk9Pa1ZPT3sVzs8/1k9Pf9sT0j/m3tj/9Kwg//20pj//96g/6eI
a/9UOjz/i1A0/9RsJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZXPT0AWz09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWz8/AFk9PQBZPT0HWT09NFk9PYZZPT3VWDw8+1c7
PP9gREH/g2VV/7ybd/+YeGH/VTo8/4hPNP/FZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWj09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFk9
PQBZPT0BWT09Glk9PWBZPT22WDw98Fc7PP9aPj7/XkJA/1g9Pf9kQTv/akM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFo+PgBZPT0AWT09Clk9PTxZPT2QWT0921k9Pf1ZPT3/WD09/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZPT0AWT09Alk9
PSBZPT1qWT09oFk9PX5ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABZPT0AWT09AFk9PQFZPDwAWjs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAH8AAAAAAA
AH/+AAAAAAAH//+AAAAAAH///+AAAAAH/////AAAAH//////AAAH///////gAH////////gH////////
/j////////////////////////////////////////////////8=
</value>
</data>
</root>
\ No newline at end of file
......@@ -157,7 +157,7 @@ namespace OnlineStore.AutoCountClient
btnTest.Enabled = isShowBtn;
btnNext.Enabled = isShowBtn;
btnEnd.Enabled = isShowBtn;
btnEnd.Enabled = true ;
}
......@@ -211,12 +211,22 @@ namespace OnlineStore.AutoCountClient
ParamManager.UpdateParam(p);
}
private bool IsSave = false;
private bool IsSave = false;
private void btnSaveParam_Click(object sender, EventArgs e)
{
ParamManager.SaveMapToFile();
IsSave = true;
this.Close();
SaveCurrParam();
DialogResult result = MessageBox.Show("当前第[" + (currIndex + 1) + "]张图片,还剩余[" + (ImageList.Count - currIndex - 1) + "]张图片未选择算法,是否结束学习?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (result.Equals(DialogResult.Yes))
{
ParamManager.SaveMapToFile();
IsSave = true;
this.Close();
}
else
{
return;
}
}
private void btnNext_Click(object sender, EventArgs e)
......
......@@ -884,7 +884,7 @@ namespace OnlineStore.AutoCountClient
private void 元器件学习ToolStripMenuItem_Click(object sender, EventArgs e)
{
string backPath = ParamManager.NoConfigPath;
folderBrowserDialog1.Description = "请选择需要学习的图片文件夹";
if (!Directory.Exists(backPath))
{
Directory.CreateDirectory(backPath);
......
......@@ -95,4 +95,10 @@ data=1,IFneed=需要
20200803
点料接口修改。
去掉取码气缸前进->>后退动作。
IO_Type.TakeCode_Back, IO_Type.TakeCode_Forward
\ No newline at end of file
IO_Type.TakeCode_Back, IO_Type.TakeCode_Forward
20200817
增加学习界面。
吸盘放标签时等待3秒再离开。
未找到配置暂时不NG.
\ No newline at end of file
......@@ -88,5 +88,13 @@ namespace OnlineStore.Common
public static string DataPath = "DataPath";
public static string ResultMinCount = "ResultMinCount";
public static string ComPath_Config = "ComPath_Config";
/// <summary>
/// 贴标签时,放下标签后等待的时间
/// </summary>
public static string LabelWaitMS = "LabelWaitMS";
}
}
......@@ -30,7 +30,7 @@ namespace OnlineStore.DeviceLibrary
public string WorkShelfId = "";
public bool AutoSendShelfOut = false;
private int LabelWaitMS = ConfigAppSettings.GetIntValue(Setting_Init.LabelWaitMS);
public OutputEquip(string cid, OutputEquip_Config config)
{
baseConfig = config;
......@@ -56,6 +56,13 @@ namespace OnlineStore.DeviceLibrary
moveAxisArray = new AxisBean[] {MoveXAxis,MoveZAxis };
labelAxisArray = new AxisBean[] { LabelXAxis,LabelYAxis,LabelZAxis,LabelRAxis};
if (LabelWaitMS < 1000)
{
LabelWaitMS = 3000;
ConfigAppSettings.SaveValue(Setting_Init.LabelWaitMS, LabelWaitMS);
LogUtil.info(Name + " 初始化并保存 LabelWaitMS=" + LabelWaitMS);
}
}
public override bool StartRun()
......
......@@ -489,9 +489,9 @@ namespace OnlineStore.DeviceLibrary
else if (SecMoveInfo.IsStep(StepEnum.OL15_ZToP3))
{
SecMoveInfo.NextMoveStep(StepEnum.OL16_Nozzle_Stop);
SecWorkLog("贴标: 放标签到料盘,等待1S");
SecWorkLog("贴标: 放标签到料盘,等待 "+LabelWaitMS);
IOMove(IO_Type.Nozzle_Work, IO_VALUE.LOW);
SecMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SecMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(LabelWaitMS));
}
else if (SecMoveInfo.IsStep(StepEnum.OL16_Nozzle_Stop))
{
......
......@@ -348,6 +348,10 @@ namespace OnlineStore.DeviceLibrary
string NgMsg = "";
int count = 0;
CountParam lastParam = ParamManager.GetParamByCode(Work_ReelInfo.WareCode);
if (lastParam == null)
{
lastParam = new CountParam("", ThresholdValue, 3);
}
if (lastParam != null)
{
string fileP = path1_tif + @"\" + lastFileName;
......
......@@ -39,6 +39,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
......@@ -55,6 +56,7 @@
<Compile Include="storeConfig\config\XRay_Config.cs" />
<Compile Include="storeConfig\config\AIO_Type.cs" />
<Compile Include="CSVAttribute.cs" />
<Compile Include="storeConfig\CSVBomManager.cs" />
<Compile Include="storeConfig\CSVConfigReader.cs" />
<Compile Include="CSVReaderBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
......
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
namespace OnlineStore.LoadCSVLibrary
{
public class CSVBomManager : CSVReaderBase
{
public static Dictionary<string, ComponetInfo> allComMap = new Dictionary<string, ComponetInfo>();
public static List<ComponetInfo> GetComList()
{
return new List<ComponetInfo>(allComMap.Values);
}
public static bool LoadAllCom()
{
string fileName = getFilePath();
if (!Directory.Exists(fileName))
{
return false;
}
try
{
string bomName = Path.GetFileNameWithoutExtension(fileName); //-->BenXHCMS
List<ComponetInfo> list = ReadFile(fileName);
Dictionary<string, ComponetInfo> map = new Dictionary<string, ComponetInfo>();
foreach (ComponetInfo com in list)
{
if (com == null || com.PartNum == null || com.Encapsulations == null)
{
continue;
}
if (map.ContainsKey(com.PartNum))
{
LogUtil.error("元器件库【" + bomName + "】【" + com.PartNum + "】重复");
}
else
{
map.Add(com.PartNum, com);
}
}
}
catch (Exception ex)
{
LogUtil.error("加载出错:" + ex.ToString());
return false;
}
return true;
}
public static string getFilePath()
{
string appPath = Application.StartupPath;
string fileName = appPath + ConfigAppSettings.GetValue(Setting_Init.ComPath_Config);
return fileName;
}
/// <summary>
/// 添加一个csv文件的数据到位置集合中
/// </summary>
/// <param name="filePath">cvs文件路径+文件名</param>
/// <returns></returns>
public static List<ComponetInfo> ReadFile(string filePath)
{
System.Type type = typeof(ComponetInfo);
List<ComponetInfo> comList = new List<ComponetInfo>();
Dictionary<string, string> proTitleMap = getProAttributeMap(typeof(ComponetInfo));
List<string> cvsTitleList = new List<string>(proTitleMap.Values);
List<string> propertyList = new List<string>(proTitleMap.Keys);
string[] lines = ReadCSVFile(filePath);
int index = 0;
Dictionary<string, int> titleIndex = new Dictionary<string, int>();
foreach (var line in lines)
{
var array = line.Split(Spilt_Char);
if (index == 0)
{
titleIndex = GetTitleIndex(line, cvsTitleList);
}
else
{
try
{
if (array.Length >= titleIndex.Count)
{
if (array.Length > 0 && array[0].Equals(""))
{
continue;
}
var bllIns = type.Assembly.CreateInstance(type.FullName);
//取得属性集合
PropertyInfo[] props = type.GetProperties();
int listIndex = 0;
foreach (string key in cvsTitleList)
{
if (titleIndex.ContainsKey(key))
{
int titIndex = titleIndex[key];
string value = array[titIndex];
string proName = propertyList[listIndex];
PropertyInfo prop = props.First(c => c.Name == proName);//获取同名属性
if (prop != null)
{
string typeName = prop.PropertyType.Name;
//判断值是否为空
if (value.Equals("") && (typeName.ToUpper().Equals("INT32") || typeName.ToUpper().Equals("DOUBLE")))
{
value = "0";
}
//如果属性存在
prop.SetValue(bllIns, Convert.ChangeType(value, prop.PropertyType), null);//赋值****在这里需要考虑类型问题
}
}
listIndex++;
}
comList.Add((ComponetInfo)bllIns);
}
else
{
LogUtil.error("读取csv,index=" + index + ",数据格式不匹配!,line=" + line);
}
}
catch (Exception ex)
{
LogUtil.error("CSV 读取行【" + line + "】行转换失败");
}
}
index++;
}
return comList;
}
public static bool SaveComponet(ComponetInfo com)
{
if (!allComMap.ContainsKey(com.PartNum))
{
return false;
}
System.Type type = typeof(ComponetInfo);
Dictionary<string, string> proTitleMap = getProAttributeMap(typeof(ComponetInfo));
List<string> cvsTitleList = new List<string>(proTitleMap.Values);
List<string> propertyList = new List<string>(proTitleMap.Keys);
int IdIndex = propertyList.IndexOf("PartNum");
int csvIndex = -1;
string filePath = getFilePath();
int idIndex = propertyList.IndexOf("PartNum");
string[] lines = ReadCSVFile(filePath);
int index = 0;
Dictionary<string, int> titleIndex = new Dictionary<string, int>();
foreach (var line in lines)
{
var array = line.Split(',');
if (index == 0)
{
titleIndex = GetTitleIndex(line, cvsTitleList);
}
else
{
if (array.Length == titleIndex.Count)
{
if (csvIndex < 0)
{
csvIndex = titleIndex[cvsTitleList[idIndex]];
}
string value = array[csvIndex];
if (value.Equals(com.PartNum))
{
//更新缓存
allComMap.Remove(com.PartNum);
allComMap.Add(com.PartNum, com);
string newValue = ObjToString(com, titleIndex, proTitleMap);
lines[index] = newValue;
return WriteCSVFile(filePath, lines);
}
}
}
index++;
}
return true;
}
private static string ObjToString(ComponetInfo position, Dictionary<string, int> titleIndex, Dictionary<string, string> proTitleMap)
{
//取得属性集合
PropertyInfo[] props = typeof(ComponetInfo).GetProperties();
List<string> cvsTitleList = new List<string>(proTitleMap.Values);
List<string> propertyList = new List<string>(proTitleMap.Keys);
String[] array = new String[titleIndex.Count];
foreach (string proName in proTitleMap.Keys)
{
PropertyInfo prop = props.First(c => c.Name == proName);//获取同名属性
if (prop != null)
{//如果属性存在
string value = prop.GetValue(position, null).ToString();
int index = titleIndex[proTitleMap[proName]];
array[index] = value;
}
}
string newStr = "";
foreach (string str in array)
{
if (newStr.Equals(""))
{
newStr = str;
}
else
{
newStr = newStr + Spilt_Char + str;
}
}
return newStr;
}
/// <summary>
/// 获取此文件第一行的数据
/// </summary>
private static string GetHeaderString(List<string> cvsValues)
{
string newStr = "";
foreach (string str in cvsValues)
{
if (newStr.Equals(""))
{
newStr = str;
}
else
{
newStr = newStr + Spilt_Char + str;
}
}
return newStr;
}
/// <summary>
/// 增加一个元器件库
/// </summary>
public static bool SaveToFile()
{
try
{
List<ComponetInfo> comList = new List<ComponetInfo>();
string filePath = getFilePath();
System.Type type = typeof(ComponetInfo);
Dictionary<string, string> proTitleMap = getProAttributeMap(typeof(ComponetInfo));
List<string> cvsTitleList = new List<string>(proTitleMap.Values);
List<string> propertyList = new List<string>(proTitleMap.Keys);
Dictionary<string, int> titleIndexMap = new Dictionary<string, int>();
int titleIndex = 0;
foreach (string str in cvsTitleList)
{
titleIndexMap.Add(str, titleIndex);
titleIndex++;
}
string[] lines = new string[comList.Count + 1];
lines[0] = GetHeaderString(cvsTitleList);
int index = 1;
Dictionary<string, ComponetInfo> map = new Dictionary<string, ComponetInfo>();
foreach (ComponetInfo com in comList)
{
map.Add(com.PartNum, com);
lines[index] = ObjToString(com, titleIndexMap, proTitleMap);
index++;
}
bool result = WriteCSVFile(filePath, lines);
LogUtil.info("保存物料库列表到文件 SaveToFile :" + result);
return true;
}
catch (Exception ex)
{
LogUtil.error("SaveToFile 出错" + ex.ToString());
return false;
}
}
public static bool RemoveCom(ComponetInfo obj)
{
if (allComMap.ContainsKey(obj.PartNum))
{
allComMap.Remove(obj.PartNum);
SaveToFile();
return true;
}
return false;
}
public static ComponetInfo GetCom(string partNum)
{
if (allComMap.ContainsKey(partNum))
{
return allComMap[partNum];
}
return null;
}
}
public class ComponetInfo
{
public ComponetInfo()
{
}
/// <summary>
///物料编号
/// </summary>
[CSVAttribute("物料编号")]
public string PartNum { get; set; }
/// <summary>
/// 描述
/// </summary>
[CSVAttribute("描述")]
public string Describe { get; set; }
/// <summary>
///产品
/// </summary>
[CSVAttribute("产品")]
public string ProductName { get; set; }
/// <summary>
///封装
/// </summary>
[CSVAttribute("封装")]
public string Encapsulations { get; set; }
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!