From 175c9b9969c1d1fbb21d052ea133717b50dae3cf Mon Sep 17 00:00:00 2001
From: Jack.Peng <jack.peng@broconcentric.com>
Date: 星期五, 12 三月 2021 13:35:24 +0800
Subject: [PATCH] 新增设备输出OK也输出白点信息。

---
 P066.Data/P066数据分析程序.csproj                |   83 ++
 P066.Data/P066.Data.csproj                 |   83 ++
 .gitignore                                 |  340 +++++++++
 P066.Data/Program.cs                       |   22 
 P066.Data/Properties/Resources.resx        |  117 +++
 P066.Data/Properties/Settings.Designer.cs  |   30 
 P066.Data/Properties/Settings.settings     |    7 
 P066.Data.sln                              |   25 
 P066.Data/App.config                       |    6 
 P066.Data/Form1.resx                       |  123 +++
 P066.Data/Properties/Resources.Designer.cs |   71 +
 P066.Data/Form1.Designer.cs                |   93 ++
 P066数据分析程序.sln                             |   25 
 P066.Data/Form1.cs                         | 1131 ++++++++++++++++++++++++++++++
 P066.Data/Properties/AssemblyInfo.cs       |   36 
 15 files changed, 2,192 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4ce6fdd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,340 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- Backup*.rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
\ No newline at end of file
diff --git a/P066.Data.sln b/P066.Data.sln
new file mode 100644
index 0000000..195a719
--- /dev/null
+++ b/P066.Data.sln
@@ -0,0 +1,25 @@
+锘�
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.1259
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P066.Data", "P066.Data\P066.Data.csproj", "{8B8F7749-8823-48C6-B12A-54979E28C10C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {9015AB30-DC50-4705-A9A7-45C14C06313E}
+	EndGlobalSection
+EndGlobal
diff --git a/P066.Data/App.config b/P066.Data/App.config
new file mode 100644
index 0000000..731f6de
--- /dev/null
+++ b/P066.Data/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/P066.Data/Form1.Designer.cs b/P066.Data/Form1.Designer.cs
new file mode 100644
index 0000000..f399a82
--- /dev/null
+++ b/P066.Data/Form1.Designer.cs
@@ -0,0 +1,93 @@
+锘縩amespace P066.Data
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆�
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 娓呯悊鎵�鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆�
+        /// </summary>
+        /// <param name="disposing">濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓� true锛涘惁鍒欎负 false銆�</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+        /// <summary>
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.btnLoadData1 = new System.Windows.Forms.Button();
+            this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
+            this.btnAnalyze = new System.Windows.Forms.Button();
+            this.btnLoadData2 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // btnLoadData1
+            // 
+            this.btnLoadData1.Location = new System.Drawing.Point(16, 15);
+            this.btnLoadData1.Margin = new System.Windows.Forms.Padding(4);
+            this.btnLoadData1.Name = "btnLoadData1";
+            this.btnLoadData1.Size = new System.Drawing.Size(176, 29);
+            this.btnLoadData1.TabIndex = 0;
+            this.btnLoadData1.Text = "鍔犺浇鏂囦欢澶�1";
+            this.btnLoadData1.UseVisualStyleBackColor = true;
+            this.btnLoadData1.Click += new System.EventHandler(this.btnLoadData1_Click);
+            // 
+            // btnAnalyze
+            // 
+            this.btnAnalyze.Location = new System.Drawing.Point(16, 88);
+            this.btnAnalyze.Margin = new System.Windows.Forms.Padding(4);
+            this.btnAnalyze.Name = "btnAnalyze";
+            this.btnAnalyze.Size = new System.Drawing.Size(176, 29);
+            this.btnAnalyze.TabIndex = 1;
+            this.btnAnalyze.Text = "寮�濮嬪垎鏋�";
+            this.btnAnalyze.UseVisualStyleBackColor = true;
+            this.btnAnalyze.Click += new System.EventHandler(this.btnAnalyze_Click);
+            // 
+            // btnLoadData2
+            // 
+            this.btnLoadData2.Location = new System.Drawing.Point(16, 51);
+            this.btnLoadData2.Margin = new System.Windows.Forms.Padding(4);
+            this.btnLoadData2.Name = "btnLoadData2";
+            this.btnLoadData2.Size = new System.Drawing.Size(176, 29);
+            this.btnLoadData2.TabIndex = 1;
+            this.btnLoadData2.Text = "鍔犺浇鏂囦欢澶�2";
+            this.btnLoadData2.UseVisualStyleBackColor = true;
+            this.btnLoadData2.Click += new System.EventHandler(this.btnLoadData2_Click);
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1067, 562);
+            this.Controls.Add(this.btnAnalyze);
+            this.Controls.Add(this.btnLoadData2);
+            this.Controls.Add(this.btnLoadData1);
+            this.Margin = new System.Windows.Forms.Padding(4);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button btnLoadData1;
+        private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
+        private System.Windows.Forms.Button btnAnalyze;
+        private System.Windows.Forms.Button btnLoadData2;
+    }
+}
+
diff --git a/P066.Data/Form1.cs b/P066.Data/Form1.cs
new file mode 100644
index 0000000..d531351
--- /dev/null
+++ b/P066.Data/Form1.cs
@@ -0,0 +1,1131 @@
+锘縰sing 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;
+
+namespace P066.Data
+{
+    public partial class Form1 : Form
+    {
+        DirectoryInfo directoryInfo1;
+        DirectoryInfo directoryInfo2;
+
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        private void btnLoadData1_Click(object sender, EventArgs e)
+        {
+            if (folderBrowserDialog1.ShowDialog() != DialogResult.OK)
+                return;
+            directoryInfo1 = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
+        }
+
+        private void btnLoadData2_Click(object sender, EventArgs e)
+        {
+            if (folderBrowserDialog1.ShowDialog() != DialogResult.OK)
+                return;
+
+            directoryInfo2 = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
+        }
+
+
+
+        private void btnAnalyze_Click(object sender, EventArgs e)
+        {
+
+            var fileinfos1 = directoryInfo1.GetFiles();
+            var fileinfos2 = directoryInfo2.GetFiles();
+            var listSum = new List<ResultData>();
+            var JudgeListSum = new List<ResultData>();
+            string filename = "";
+            int WhiteI = 0;
+            int WhiteningI = 0;
+            for (int i = 0; i < fileinfos1.Length; i++)
+            {
+                var list = CompareFile(fileinfos1[i], fileinfos2[i]);
+                var judgeList = JudgeCompareFile(fileinfos1[i], fileinfos2[i]);
+
+                if (fileinfos1[i].Name.Contains("鐧界偣"))
+                {
+                    WhiteI++;
+                    list.ForEach(a => a.Lensnumber = WhiteI);
+                    listSum.AddRange(list);
+                    judgeList.ForEach(a => a.Lensnumber = WhiteI);
+                    JudgeListSum.AddRange(judgeList);
+                }
+                if (fileinfos1[i].Name.Contains("鍒櫧"))
+                {
+                    WhiteningI++;
+                    list.ForEach(a => a.Lensnumber = WhiteningI);
+                    listSum.AddRange(list);
+                    judgeList.ForEach(a => a.Lensnumber = WhiteningI);
+                    JudgeListSum.AddRange(judgeList);
+
+                }
+
+                var group = judgeList.GroupBy(a => a.TimeTip);
+   
+                foreach (var item in group)
+                {
+                    //璁$畻闀滃ご1缂洪櫡浣嶇疆鍙婅搴�
+                    var listLensnumber1 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
+                    for (int k = 0; k < listLensnumber1.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber1[k].X, listLensnumber1[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber1[k].angle = lenAngle;
+
+                        var distance = GetDistance(1050, 1050, listLensnumber1[k].X, listLensnumber1[k].Y);
+
+                        if (distance <= 539.87)
+                        {
+                            listLensnumber1[k].location = "闀滃ご";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else if (539.87 < distance && distance <= 777.11)
+                        {
+                            listLensnumber1[k].location = "鏂滈潰";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else if (777.11 < distance && distance <= 919.88)
+                        {
+                            listLensnumber1[k].location = "骞抽潰";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber1[k].location = "鍖哄煙澶�";
+                            listLensnumber1[k].R = distance;
+                        }
+
+                    }
+                    //璁$畻闀滃ご2浣嶇疆鍙婅搴�
+                    var listLensnumber2 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
+                    for (int k = 0; k < listLensnumber2.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber2[k].X, listLensnumber2[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber2[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber2[k].X, listLensnumber2[k].Y);
+                        if (distance <= 400)
+                        {
+                            listLensnumber2[k].location = "闀滃ご";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else if (400 < distance && distance <= 772.18)
+                        {
+                            listLensnumber2[k].location = "鏂滈潰";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else if (772.18 < distance && distance <= 873.38)
+                        {
+                            listLensnumber2[k].location = "骞抽潰";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber2[k].location = "鍖哄煙澶�";
+                            listLensnumber2[k].R = distance;
+                        }
+                    }
+                    //璁$畻闀滃ご3浣嶇疆鍙婅搴�
+                    var listLensnumber3 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
+                    for (int k = 0; k < listLensnumber3.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber3[k].X, listLensnumber3[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber3[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber3[k].X, listLensnumber3[k].Y);
+                        if (distance <= 105.63)
+                        {
+                            listLensnumber3[k].location = "闀滃ご";
+                            listLensnumber3[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber3[k].location = "鏂滈潰";
+                            listLensnumber3[k].R = distance;
+                        }
+                    }
+                    //璁$畻闀滃ご4浣嶇疆鍙婅搴�
+                    var listLensnumber4 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
+                    for (int k = 0; k < listLensnumber4.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber4[k].X, listLensnumber4[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber4[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber4[k].X, listLensnumber4[k].Y);
+                        if (distance <= 339.88)
+                        {
+                            listLensnumber4[k].location = "闀滃ご";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else if (339.88 < distance && distance <= 547.02)
+                        {
+                            listLensnumber4[k].location = "鏂滈潰";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else if (547.02 < distance && distance <= 614.73)
+                        {
+                            listLensnumber4[k].location = "骞抽潰";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber4[k].location = "鍖哄煙澶�";
+                            listLensnumber4[k].R = distance;
+                        }
+                    }
+
+                }
+
+
+
+                #region//缁欓暅澶村尯鍒嗕綅缃強瑙掑害
+                var group11 = list.GroupBy(a => a.TimeTip);
+                string currPath = "";
+                foreach (var item in group11)
+                {
+                    //璁$畻闀滃ご1缂洪櫡浣嶇疆鍙婅搴�
+                    var listLensnumber1 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
+                    for (int k = 0; k < listLensnumber1.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber1[k].X, listLensnumber1[k].Y);
+                        if (lenAngle<0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber1[k].angle = lenAngle;
+
+                        var distance = GetDistance(1050, 1050, listLensnumber1[k].X, listLensnumber1[k].Y);
+
+                        if (distance <= 539.87)
+                        {
+                            listLensnumber1[k].location = "闀滃ご";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else if (539.87 < distance && distance <= 777.11)
+                        {
+                            listLensnumber1[k].location = "鏂滈潰";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else if (777.11 < distance && distance <= 919.88)
+                        {
+                            listLensnumber1[k].location = "骞抽潰";
+                            listLensnumber1[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber1[k].location = "鍖哄煙澶�";
+                            listLensnumber1[k].R = distance;
+                        }
+
+                    }
+                    //璁$畻闀滃ご2浣嶇疆鍙婅搴�
+                    var listLensnumber2 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
+                    for (int k = 0; k < listLensnumber2.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber2[k].X, listLensnumber2[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber2[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber2[k].X, listLensnumber2[k].Y);
+                        if (distance <= 400)
+                        {
+                            listLensnumber2[k].location = "闀滃ご";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else if (400 < distance && distance <= 772.18)
+                        {
+                            listLensnumber2[k].location = "鏂滈潰";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else if (772.18 < distance && distance <= 873.38)
+                        {
+                            listLensnumber2[k].location = "骞抽潰";
+                            listLensnumber2[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber2[k].location = "鍖哄煙澶�";
+                            listLensnumber2[k].R = distance;
+                        }
+                    }
+                    //璁$畻闀滃ご3浣嶇疆鍙婅搴�
+                    var listLensnumber3 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
+                    for (int k = 0; k < listLensnumber3.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber3[k].X, listLensnumber3[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber3[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber3[k].X, listLensnumber3[k].Y);
+                        if (distance <= 105.63)
+                        {
+                            listLensnumber3[k].location = "闀滃ご";
+                            listLensnumber3[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber3[k].location = "鏂滈潰";
+                            listLensnumber3[k].R = distance;
+                        }
+                    }
+                    //璁$畻闀滃ご4浣嶇疆鍙婅搴�
+                    var listLensnumber4 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
+                    for (int k = 0; k < listLensnumber4.Count; k++)
+                    {
+                        var lenAngle = GetAngle(listLensnumber4[k].X, listLensnumber4[k].Y);
+                        if (lenAngle < 0)
+                        {
+                            lenAngle = 360 + lenAngle;
+                        }
+                        listLensnumber4[k].angle = lenAngle;
+                        var distance = GetDistance(1050, 1050, listLensnumber4[k].X, listLensnumber4[k].Y);
+                        if (distance <= 339.88)
+                        {
+                            listLensnumber4[k].location = "闀滃ご";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else if (339.88 < distance && distance <= 547.02)
+                        {
+                            listLensnumber4[k].location = "鏂滈潰";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else if (547.02 < distance && distance <= 614.73)
+                        {
+                            listLensnumber4[k].location = "骞抽潰";
+                            listLensnumber4[k].R = distance;
+                        }
+                        else
+                        {
+                            listLensnumber4[k].location = "鍖哄煙澶�";
+                            listLensnumber4[k].R = distance;
+                        }
+                    }
+
+                }
+                #endregion
+                #region//鍒ゆ柇鏄垵妫�鏂囦欢澶硅繕鏄妫�鏂囦欢澶�
+                if (fileinfos1[i].Name.Contains("鍒濇"))
+                {
+                    filename = "鍒濇";
+                }
+                if (fileinfos1[i].Name.Contains("澶嶆"))
+                {
+                    filename = "澶嶆";
+                }
+                if (fileinfos1[i].Name.Contains("鍒櫧"))
+                {
+                    filename = "鍒櫧";
+                }
+                currPath = directoryInfo1.Parent.Parent.FullName;
+                string subPath = currPath + "/" + filename + "鍚堝苟鍚�" + "/";
+                if (false==Directory.Exists(subPath))
+                {
+                    Directory.CreateDirectory(subPath);
+                }
+
+                #endregion  
+                #region//娴嬭瘯杈撳嚭璁惧鍒ゆ柇缁撴灉
+
+                //var title12 = $"鏃堕棿鎴�,璁惧鍒ゆ柇缁撴灉";
+                //var file12 = $"{directoryInfo1.Parent.FullName}\\{filename + (i + 111)}.csv";
+                //File.AppendAllText(file12, title12, Encoding.UTF8);
+                //File.AppendAllText(file12, "\r\n");
+
+                //foreach (var item in JudgeListSum)
+                //{
+          
+                //    var conrent12 = $"{item.TimeTip},{item.JudgmentResult}";
+                //    File.AppendAllText(file12, conrent12, Encoding.UTF8);
+                //    File.AppendAllText(file12, "\r\n");
+                //}
+
+                #endregion  
+
+                var title1 = $"鏃堕棿鎴�,鏂囦欢鍚�,鍒ゆ柇,鍙兘鎬�,涓嶇‘瀹氭��,楂�,瀹�,X,Y,鏈�澶у昂瀵�,浣嶇疆,R,瑙掑害,缂洪櫡绫诲瀷";
+                var file1 = $"{subPath}\\{filename + (i+1)}.csv";
+                File.AppendAllText(file1, title1, Encoding.UTF8);
+                File.AppendAllText(file1, "\r\n");
+
+                #region//璁$畻鎬绘暟
+
+                //var group1 = list.GroupBy(a => a.TimeTip);
+
+                //var title2 = $"鏃堕棿鎴�,鎬绘暟";
+                //var file2 = $"{directoryInfo1.Parent.FullName}\\{ "鎬绘暟" +( i+1)}.csv";
+                //File.AppendAllText(file2, title2, Encoding.UTF8);
+                //File.AppendAllText(file2, "\r\n");
+                //foreach (var item in group1)
+                //{
+                //    var content = $"{item.Key},{item.ToList().Count}";
+
+                //    File.AppendAllText(file2, content, Encoding.UTF8);
+                //    File.AppendAllText(file2, "\r\n");
+                //}
+                #endregion
+                foreach (var item in list)
+                {
+                    string result = item.Result ? "OK" : "NG";
+
+                    var content = $"{item.TimeTip},{item.ImageFileName},{result},{item.Probability},{item.Uncertainty},{item.Height},{item.Width},{item.X},{item.Y},{item.ex},{item.location},{ Convert.ToInt32(item.R)},{ Convert.ToInt32(item.angle)},{item.DefectType}";
+
+                    File.AppendAllText(file1, content, Encoding.UTF8);
+                    File.AppendAllText(file1, "\r\n");
+                }
+            }
+
+
+            var dataGroup1 = listSum.GroupBy(a => a.TimeTip);
+            var dataListSum = new List<string>();
+
+            foreach (var item in dataGroup1)
+            {
+                dataListSum.Add(item.Key);
+            }
+            dataListSum = dataListSum.Distinct().ToList();
+            dataListSum.Sort();
+            var dataList = new List<ResultData>();
+
+            var title12 = $"鏃堕棿鎴�,鐩告満搴忓彿,璁惧鍒ゆ柇缁撴灉,缂洪櫡绫诲瀷,X,Y,鏈�澶у昂瀵�,R,浣嶇疆,瑙掑害";
+            var file12 = $"{directoryInfo1.Parent.FullName}\\{filename+"璁惧鍒ゆ柇缁撴灉"}.csv";
+
+            File.AppendAllText(file12, title12, Encoding.UTF8);
+            File.AppendAllText(file12, "\r\n");
+ 
+            foreach (var item in dataListSum)
+            {
+                var test11 = JudgeListSum.FindAll(a => a.TimeTip == item&&a.Lensnumber==1);
+                if (test11.Count==0)
+                {
+
+                    var content11 = $"{item},{1},{"OK"}";
+                    File.AppendAllText(file12, content11, Encoding.UTF8);
+                    File.AppendAllText(file12, "\r\n");
+                }
+                else
+                {
+                    if (test11[0].DefectType=="鍒櫧")
+                    {
+                        var content11 = $"{item},{1},{test11[0].JudgmentResult},{test11[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test11.Count; i++)
+                        {
+                            if (test11[i].DefectType=="鍒櫧")
+                            {
+                                var content111 = $"{""},{""},{""},{""},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+                            else
+                            {
+                                var content111 = $"{""},{""},{""},{test11[i].DefectType},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+
+                        }
+                    }
+                    else
+                    {
+                        var content11 = $"{item},{1},{test11[0].JudgmentResult},{test11[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test11.Count; i++)
+                        {
+                            var content111 = $"{""},{""},{""},{""},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
+                            File.AppendAllText(file12, content111, Encoding.UTF8);
+                            File.AppendAllText(file12, "\r\n");
+                        }
+                    }
+
+                }
+                var test12 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 2);
+                if (test12.Count == 0)
+                {
+
+                    var content11 = $"{""},{2},{"OK"}";
+                    File.AppendAllText(file12, content11, Encoding.UTF8);
+                    File.AppendAllText(file12, "\r\n");
+                }
+                else
+                {
+                    if (test12[0].DefectType == "鍒櫧")
+                    {
+                        var content11 = $"{""},{2},{test12[0].JudgmentResult},{test12[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test12.Count; i++)
+                        {
+                            if (test12[i].DefectType == "鍒櫧")
+                            {
+                                var content111 = $"{""},{""},{""},{""},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+                            else
+                            {
+                                var content111 = $"{""},{""},{""},{test12[i].DefectType},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+
+                        }
+
+
+                    }
+                    else
+                    {
+                        var content11 = $"{""},{2},{test12[0].JudgmentResult},{test12[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test12.Count; i++)
+                        {
+                            var content111 = $"{""},{""},{""},{""},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
+                            File.AppendAllText(file12, content111, Encoding.UTF8);
+                            File.AppendAllText(file12, "\r\n");
+                        }
+                    }
+                }
+                var test13 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 3);
+                if (test13.Count == 0)
+                {
+
+                    var content11 = $"{""},{3},{"OK"}";
+                    File.AppendAllText(file12, content11, Encoding.UTF8);
+                    File.AppendAllText(file12, "\r\n");
+                }
+                else
+                {
+                    if (test13[0].DefectType == "鍒櫧")
+                    {
+                        var content11 = $"{""},{3},{test13[0].JudgmentResult},{test13[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test13.Count; i++)
+                        {
+                            if (test13[i].DefectType == "鍒櫧")
+                            {
+                                var content111 = $"{""},{""},{""},{""},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+                            else
+                            {
+                                var content111 = $"{""},{""},{""},{test13[i].DefectType},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+
+                        }
+
+                        }
+                    else
+                    {
+                        var content11 = $"{""},{3},{test13[0].JudgmentResult},{test13[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test13.Count; i++)
+                        {
+                            var content111 = $"{""},{""},{""},{""},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
+                            File.AppendAllText(file12, content111, Encoding.UTF8);
+                            File.AppendAllText(file12, "\r\n");
+                        }
+                    }
+                }
+                var test14 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 4);
+                if (test14.Count == 0)
+                {
+
+                    var content11 = $"{""},{4},{"OK"}";
+                    File.AppendAllText(file12, content11, Encoding.UTF8);
+                    File.AppendAllText(file12, "\r\n");
+                }
+                else
+                {
+                    if (test14[0].DefectType == "鍒櫧")
+                    {
+                        var content11 = $"{""},{4},{test14[0].JudgmentResult},{test14[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test14.Count; i++)
+                        {
+                            if (test14[i].DefectType == "鍒櫧")
+                            {
+                                var content111 = $"{""},{""},{""},{""},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+                            else
+                            {
+                                var content111 = $"{""},{""},{""},{test14[i].DefectType},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
+                                File.AppendAllText(file12, content111, Encoding.UTF8);
+                                File.AppendAllText(file12, "\r\n");
+                            }
+
+                        }
+                    }
+                    else
+                    {
+                        var content11 = $"{""},{4},{test14[0].JudgmentResult},{test14[0].DefectType}";
+                        File.AppendAllText(file12, content11, Encoding.UTF8);
+                        File.AppendAllText(file12, "\r\n");
+                        for (int i = 0; i < test14.Count; i++)
+                        {
+                            var content111 = $"{""},{""},{""},{""},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
+                            File.AppendAllText(file12, content111, Encoding.UTF8);
+                            File.AppendAllText(file12, "\r\n");
+                        }
+                    }
+                }
+                //var conrent12 = $"{item},{item}";
+                //File.AppendAllText(file12, conrent12, Encoding.UTF8);
+                //File.AppendAllText(file12, "\r\n");
+            }
+
+
+
+
+
+
+
+
+
+
+
+
+            #region//鏍规嵁浜у搧缂栧彿杈撳嚭鎬荤己闄锋姤琛�
+            var title = $"浜у搧缂栧彿,闀滃ご缂栧彿,鎬荤己闄锋暟閲�";
+            var file = $"{directoryInfo1.Parent.FullName}\\{filename+ "缂洪櫡鎬绘暟鎶ヨ〃"}.csv";
+            File.AppendAllText(file, title, Encoding.UTF8);
+            File.AppendAllText(file, "\r\n");
+            var listSumGroup = listSum.GroupBy(a => a.TimeTip);
+            foreach (var item in listSumGroup)
+            {
+                var listLensnumber1 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
+                var listLensnumberCount1 = listLensnumber1.Count;
+                var listLensnumber2 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
+                var listLensnumberCount2 = listLensnumber2.Count;
+                var listLensnumber3 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
+                var listLensnumberCount3 = listLensnumber3.Count;
+                var listLensnumber4 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
+                var listLensnumberCount4 = listLensnumber4.Count;
+                //绗竴琛�
+                var content1 = $"{item.Key},{1},{listLensnumberCount1}";
+                File.AppendAllText(file, content1, Encoding.UTF8);
+                File.AppendAllText(file, "\r\n");
+                //绗簩琛�
+                var content2 = $"{""},{2},{listLensnumberCount2}";
+                File.AppendAllText(file, content2, Encoding.UTF8);
+                File.AppendAllText(file, "\r\n");
+                //绗笁琛�
+                var content3 = $"{""},{3},{listLensnumberCount3}";
+                File.AppendAllText(file, content3, Encoding.UTF8);
+                File.AppendAllText(file, "\r\n");
+                //绗洓琛�
+                var content4 = $"{""},{4},{listLensnumberCount4}";
+                File.AppendAllText(file, content4, Encoding.UTF8);
+                File.AppendAllText(file, "\r\n");
+
+            }
+            #endregion
+
+
+        }
+
+
+        private List<ResultData> CompareFile(FileInfo fileInfo1, FileInfo fileInfo2)
+        {
+            var allLines1 = File.ReadAllLines(fileInfo1.FullName, Encoding.Default);
+            var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
+            List<ResultData> dataList1 = new List<ResultData>();
+            List<ResultData> dataList2 = new List<ResultData>();
+            if (allLines1.Length>1)
+            {
+                dataList1 = GetData(allLines1);
+            }
+            if (allLines2.Length > 1)
+            {
+                dataList2 = GetData(allLines2);
+            }
+
+
+
+            #region //灏嗘椂闂存埑鐩稿悓鐨勫垎涓轰竴缁勫苟鎺掑簭
+
+            var dataGroup1 = dataList1.GroupBy(a => a.TimeTip);
+            var dataGroup2 = dataList2.GroupBy(a => a.TimeTip);
+            var dataListSum = new List<string>();
+
+            foreach (var item in dataGroup1)
+            {
+                dataListSum.Add(item.Key);
+            }
+            foreach (var item in dataGroup2)
+            {
+                dataListSum.Add(item.Key);
+            }
+            dataListSum = dataListSum.Distinct().ToList();
+            dataListSum.Sort();
+            #endregion
+
+            var dataList = new List<ResultData>();
+            var dataList11 = new List<ResultData>();
+            var dataList22 = new List<ResultData>();
+            foreach (var item in dataListSum)
+            {
+                var list1 = dataList1.FindAll(a => a.TimeTip == item && !a.Result);
+                var list2 = dataList2.FindAll(a => a.TimeTip == item && !a.Result);
+                var itemToRemove = new List<ResultData>();
+                #region//璁$畻琛ㄦ牸2鏈�澶у昂瀵�
+                for (int ii = 0; ii < list2.Count; ii++)
+                {
+                    if (list2[ii].Width > list2[ii].Height)
+                    {
+                        list2[ii].ex = list2[ii].Width * 0.0042;
+                    }
+                    else
+                    {
+                        list2[ii].ex = list2[ii].Height * 0.0042;
+                    }
+                    var distance = GetDistance(1050, 1050, list2[ii].X, list2[ii].Y);
+                    list2[ii].R = distance;
+                }
+                #endregion  
+                for (int i = 0; i < list1.Count; i++)
+                {
+                    #region//璁$畻琛ㄦ牸1鏈�澶у昂瀵�
+                    if (list1[i].Width > list1[i].Height)
+                    {
+                        list1[i].ex = list1[i].Width * 0.0042;
+                    }
+                    else
+                    {
+                        list1[i].ex = list1[i].Height * 0.0042;
+                    }
+                    var distance1 = GetDistance(1050, 1050, list1[i].X, list1[i].Y);
+                    list1[i].R = distance1;
+
+                    #endregion
+                    for (int j = 0; j < list2.Count; j++)
+                    {
+
+                        var distance = GetDistance(list1[i].X, list1[i].Y, list2[j].X, list2[j].Y);
+                        if (distance < 20)
+                        {
+                            itemToRemove.Add(list2[j]);
+                        }
+                    }
+                }
+
+                for (int i = 0; i < itemToRemove.Count; i++)
+                {
+                    list2.Remove(itemToRemove[i]);
+                }
+
+                dataList11.AddRange(list1);
+                dataList22.AddRange(list2);
+            }
+
+
+            dataList.AddRange(dataList1);
+            dataList.AddRange(dataList2);
+            return dataList;
+        }
+        //缁熻璁惧鍒ゆ柇缁撴灉
+        private List<ResultData> JudgeCompareFile(FileInfo fileInfo1, FileInfo fileInfo2)
+        {
+
+            #region  //灞忚斀
+            //var allLines1 = File.ReadAllLines(fileInfo1.FullName,Encoding.Default);
+            //var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
+            ////var dataJudgeList1 = GetJudgeData(allLines1);
+            ////var dataJudgeList2 = GetJudgeData(allLines2);
+            //List<ResultData> dataJudgeList1 = new List<ResultData>();
+            //List<ResultData> dataJudgeList2 = new List<ResultData>();
+            //if (allLines1.Length > 1)
+            //{
+            //    dataJudgeList1 = GetData(allLines1);
+            //}
+            //if (allLines2.Length > 1)
+            //{
+
+            //     dataJudgeList2 = GetData(allLines2);
+            //}
+
+            //var dataGroup1 = dataJudgeList1.GroupBy(a => a.TimeTip);
+            //var dataGroup2 = dataJudgeList2.GroupBy(a => a.TimeTip);
+            //var dataListSum = new List<string>();
+
+            //foreach (var item in dataGroup1)
+            //{
+            //    dataListSum.Add(item.Key);
+            //}
+            //foreach (var item in dataGroup2)
+            //{
+            //    dataListSum.Add(item.Key);
+            //}
+            //dataListSum = dataListSum.Distinct().ToList();
+            //dataListSum.Sort();
+            //var dataList = new List<ResultData>();
+            //var itemToRemove = new List<ResultData>();
+            //foreach (var item in dataListSum)
+            //{
+
+            //        var list1 = dataJudgeList1.FindAll(a => a.TimeTip == item && a.JudgmentResult=="NG"&&!a.Result);
+            //        var list2 = dataJudgeList2.FindAll(a => a.TimeTip == item && a.JudgmentResult == "NG"&&!a.Result);
+            //    for (int i = 0; i < list1.Count; i++)
+            //    {
+            //        for (int j = 0; j < list2.Count; j++)
+            //        {
+            //            if (list1[i].JudgmentResult != list2[j].JudgmentResult)
+            //            {
+            //                list1[i].JudgmentResult = "NG";
+            //                list2[j].JudgmentResult = "NG";
+            //                itemToRemove.Add(list2[j]);
+            //            }
+            //            if (list1[i].JudgmentResult == list2[j].JudgmentResult)
+            //            {
+            //                itemToRemove.Add(list2[j]);
+            //            }
+            //        }
+            //    } 
+            //    //if (list1.Count ==0&&list2.Count==0)
+            //    //{
+            //    //    dataList.Add(new ResultData()
+            //    //    {
+            //    //        TimeTip = item,
+            //    //        JudgmentResult = "OK",
+
+            //    //         }); ; ;
+            //    //}
+            //    dataList.AddRange(list1);
+            //    dataList.AddRange(list2);
+            //}
+            //for (int i = 0; i < itemToRemove.Count; i++)
+            //{
+            //    dataList.Remove(itemToRemove[i]);
+            //}
+            #endregion  
+
+            var allLines1 = File.ReadAllLines(fileInfo1.FullName, Encoding.Default);
+            var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
+            List<ResultData> dataList1 = new List<ResultData>();
+            List<ResultData> dataList2 = new List<ResultData>();
+            if (allLines1.Length > 1)
+            {
+                dataList1 = GetData(allLines1);
+            }
+            if (allLines2.Length > 1)
+            {
+                dataList2 = GetData(allLines2);
+            }
+
+
+
+            #region //灏嗘椂闂存埑鐩稿悓鐨勫垎涓轰竴缁勫苟鎺掑簭
+
+            var dataGroup1 = dataList1.GroupBy(a => a.TimeTip);
+            var dataGroup2 = dataList2.GroupBy(a => a.TimeTip);
+            var dataListSum = new List<string>();
+
+            foreach (var item in dataGroup1)
+            {
+                dataListSum.Add(item.Key);
+            }
+            foreach (var item in dataGroup2)
+            {
+                dataListSum.Add(item.Key);
+            }
+            dataListSum = dataListSum.Distinct().ToList();
+            dataListSum.Sort();
+            #endregion
+
+            var dataList = new List<ResultData>();
+            var dataList11 = new List<ResultData>();
+            var dataList22 = new List<ResultData>();
+            foreach (var item in dataListSum)
+            {
+                var list1 = dataList1.FindAll(a => a.TimeTip == item && !a.Result);
+                var list2 = dataList2.FindAll(a => a.TimeTip == item && !a.Result);
+                var itemToRemove1 = new List<ResultData>();
+                #region//璁$畻琛ㄦ牸2鏈�澶у昂瀵�
+                for (int ii = 0; ii < list2.Count; ii++)
+                {
+                    if (list2[ii].Width > list2[ii].Height)
+                    {
+                        list2[ii].ex = list2[ii].Width * 0.0042;
+                    }
+                    else
+                    {
+                        list2[ii].ex = list2[ii].Height * 0.0042;
+                    }
+                    var distance = GetDistance(1050, 1050, list2[ii].X, list2[ii].Y);
+                    list2[ii].R = distance;
+                }
+                #endregion  
+                for (int i = 0; i < list1.Count; i++)
+                {
+                    #region//璁$畻琛ㄦ牸1鏈�澶у昂瀵�
+                    if (list1[i].Width > list1[i].Height)
+                    {
+                        list1[i].ex = list1[i].Width * 0.0042;
+                    }
+                    else
+                    {
+                        list1[i].ex = list1[i].Height * 0.0042;
+                    }
+                    var distance1 = GetDistance(1050, 1050, list1[i].X, list1[i].Y);
+                    list1[i].R = distance1;
+
+                    #endregion
+                    for (int j = 0; j < list2.Count; j++)
+                    {
+
+                        var distance = GetDistance(list1[i].X, list1[i].Y, list2[j].X, list2[j].Y);
+                        if (distance < 20)
+                        {
+                            itemToRemove1.Add(list2[j]);
+                            if (list1[i].JudgmentResult!=list2[j].JudgmentResult)
+                            {
+                                list1[i].JudgmentResult = "NG";
+                                list2[j].JudgmentResult = "NG";
+                            }
+
+                        }
+                    }
+                }
+
+                for (int i = 0; i < itemToRemove1.Count; i++)
+                {
+                    list2.Remove(itemToRemove1[i]);
+                }
+
+                dataList11.AddRange(list1);
+                dataList22.AddRange(list2);
+            }
+
+            //var itemToRemove = new List<ResultData>();
+            foreach (var item in dataListSum)
+            {
+
+                var list1 = dataList11.FindAll(a => a.TimeTip == item/* && a.JudgmentResult == "NG"*/ );        //涓嶇OK銆丯G閮借杈撳嚭
+                var list2 = dataList22.FindAll(a => a.TimeTip == item /*&& a.JudgmentResult == "NG"*/);         //涓嶇OK銆丯G閮借杈撳嚭
+                //for (int i = 0; i < list1.Count; i++)
+                //{
+                //    for (int j = 0; j < list2.Count; j++)
+                //    {
+                //        if (list1[i].JudgmentResult != list2[j].JudgmentResult)
+                //        {
+                //            list1[i].JudgmentResult = "NG";
+                //            list2[j].JudgmentResult = "NG";
+                //            itemToRemove.Add(list2[j]);
+                //        }
+                //        if (list1[i].JudgmentResult == list2[j].JudgmentResult)
+                //        {
+                //            itemToRemove.Add(list2[j]);
+                //        }
+                //    }
+                //}
+
+                dataList.AddRange(list1);
+                dataList.AddRange(list2);
+            }
+            //for (int i = 0; i < itemToRemove.Count; i++)
+            //{
+            //    dataList.Remove(itemToRemove[i]);
+            //}
+
+            return dataList;
+
+        }
+
+        private List<ResultData> GetData(string[] allLines)
+        {
+            var dataList = new List<ResultData>();
+            var nametemp = allLines[1].Split(',')[0];
+            var resulttemp = allLines[1].Split(',')[1];
+            //var Ptr = allLines[1].Split(',')[10];
+            for (int i = 1; i < allLines.Length; i++)
+            {
+
+
+                var data = allLines[i].Split(',');
+
+                if (data[6]=="-")
+                {
+                    continue;
+                }
+
+                string defectType = "";
+                string bbb = "";
+                string Ptr = "";
+                if (data[0] == "")
+                {
+                    data[0] = nametemp;
+                    data[1] = resulttemp;
+                    //data[10] = Ptr;
+
+                }
+                if (data[1]== "鍒櫧")
+                {
+                    defectType = "鍒櫧";
+                    bbb = "NG";
+                    Ptr = "";
+                }
+                else
+                {
+                    defectType = "鐧界偣";
+                    bbb = data[1];
+                    
+                    if (data.Length>10)
+                    {
+                        Ptr = data[10];
+                    }
+                }
+                var data6 = data[6].Split('#').ToList();
+                data6.Remove("");
+                var temp6 = Convert.ToInt32(data6[0]);
+                for (int a6 = 0; a6 < data6.Count; a6++)
+                {
+                    if (Convert.ToInt32(data6[a6]) > temp6)
+                    {
+                        temp6 = Convert.ToInt32(data6[a6]);
+                    }
+                }
+                data[6] = Convert.ToString(temp6);
+
+                var data7 = data[7].Split('#').ToList();
+                data7.Remove("");
+                var temp7 = Convert.ToInt32(data7[0]);
+                for (int a7 = 0; a7 < data7.Count; a7++)
+                {
+                    if (Convert.ToInt32(data7[a7]) > temp7)
+                    {
+                        temp7 = Convert.ToInt32(data7[a7]);
+                    }
+                }
+                data[7] = Convert.ToString(temp7);
+
+                dataList.Add(new ResultData()
+                {
+                    TimeTip = data[0].Split('-')[0],
+                    ImageFileName = data[0],
+                    JudgmentResult = bbb,
+                    Result = data[3] == "OK",
+                    Probability = Convert.ToDouble(data[4]),
+                    Uncertainty = Convert.ToDouble(data[5]),
+                    //Height = Convert.ToDouble(data[6].Replace("#", "").Replace("-", "")),
+                    //Width = Convert.ToDouble(data[7].Replace("#", "").Replace("-", "")),
+                    Height = Convert.ToDouble(data[6]),
+                    Width = Convert.ToDouble(data[7]),
+                    X = Convert.ToDouble(data[8].Replace("#", "").Replace("-", "")),
+                    Y = Convert.ToDouble(data[9].Replace("#", "").Replace("-", "")),
+                    DefectType = defectType,
+                    PostTreatmentResults = Ptr,
+
+                }) ; ; ;
+
+                nametemp = data[0];
+                resulttemp= data[1];
+             
+            }
+
+            return dataList;
+        }
+        //private List<ResultData> GetJudgeData(string[] allLines)
+        //{
+        //    var dataList = new List<ResultData>();
+        //    for (int i = 1; i < allLines.Length; i++)
+        //    {
+        //        var data = allLines[i].Split(',');
+        //        string defectType = "";
+        //        string aaa = "";
+        //        if (data[0] != "")
+        //        {
+        //            try
+        //            {
+        //                defectType = data[10];
+        //            }
+        //            catch (Exception)
+        //            {
+
+        //                defectType = "鍒櫧";
+        //                aaa = "NG";
+        //            }
+                    
+        //            dataList.Add(new ResultData()
+        //            {
+        //                TimeTip = data[0].Split('-')[0],
+        //                JudgmentResult = aaa,
+        //                DefectType= defectType,
+                      
+        //            }); ; ;
+        //        }
+
+        //    }
+        //    return dataList;
+        //}
+
+        private double GetDistance(double x1, double y1, double x2, double y2)
+        {
+            return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
+        }
+        private double GetAngle(double x1, double y1)
+        {
+            return Math.Atan2((y1 - 1050), (x1 - 1050)) * (180 / Math.PI);
+        }
+
+    }
+
+    public class ResultData
+    {
+        public string TimeTip = "";
+        public string JudgmentResult = "";
+        public string ImageFileName = "";
+        public bool Result = true;
+        public int Lensnumber = 0;
+        public double Probability = 0;
+        public double Uncertainty = 0;
+        public double Height = 0;
+        public double Width = 0;
+        public double X = 0;
+        public double Y = 0;
+        public double ex = 0;
+        public string location = "";
+        public double angle = 0;
+        public double R = 0;
+        public string DefectType = "";
+        public string PostTreatmentResults = "";
+
+
+    }
+
+
+}
diff --git a/P066.Data/Form1.resx b/P066.Data/Form1.resx
new file mode 100644
index 0000000..69f943d
--- /dev/null
+++ b/P066.Data/Form1.resx
@@ -0,0 +1,123 @@
+锘�<?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="folderBrowserDialog1.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
diff --git a/P066.Data/P066.Data.csproj b/P066.Data/P066.Data.csproj
new file mode 100644
index 0000000..bb373e6
--- /dev/null
+++ b/P066.Data/P066.Data.csproj
@@ -0,0 +1,83 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{8B8F7749-8823-48C6-B12A-54979E28C10C}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>P066.Data</RootNamespace>
+    <AssemblyName>P066.Data</AssemblyName>
+    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git "a/P066.Data/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.csproj" "b/P066.Data/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.csproj"
new file mode 100644
index 0000000..bb373e6
--- /dev/null
+++ "b/P066.Data/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.csproj"
@@ -0,0 +1,83 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{8B8F7749-8823-48C6-B12A-54979E28C10C}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>P066.Data</RootNamespace>
+    <AssemblyName>P066.Data</AssemblyName>
+    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/P066.Data/Program.cs b/P066.Data/Program.cs
new file mode 100644
index 0000000..69a8b5d
--- /dev/null
+++ b/P066.Data/Program.cs
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace P066.Data
+{
+    static class Program
+    {
+        /// <summary>
+        /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广��
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}
diff --git a/P066.Data/Properties/AssemblyInfo.cs b/P066.Data/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8aed378
--- /dev/null
+++ b/P066.Data/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("P066.Data")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("P066.Data")]
+[assembly: AssemblyCopyright("Copyright 漏  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("8b8f7749-8823-48c6-b12a-54979e28c10c")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+// 鍙互鎸囧畾鎵�鏈夊�硷紝涔熷彲浠ヤ娇鐢ㄤ互涓嬫墍绀虹殑 "*" 棰勭疆鐗堟湰鍙峰拰淇鍙�
+// 鏂规硶鏄寜濡備笅鎵�绀轰娇鐢ㄢ��*鈥�: :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/P066.Data/Properties/Resources.Designer.cs b/P066.Data/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..dd60e96
--- /dev/null
+++ b/P066.Data/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace P066.Data.Properties
+{
+
+
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栧垹闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("P066.Data.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   瑕嗙洊褰撳墠绾跨▼鐨� CurrentUICulture 灞炴��
+        ///   浣跨敤姝ゅ己绫诲瀷鐨勮祫婧愮被鐨勮祫婧愭煡鎵俱��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/P066.Data/Properties/Resources.resx b/P066.Data/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/P066.Data/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?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.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: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" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </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" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/P066.Data/Properties/Settings.Designer.cs b/P066.Data/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..444fee0
--- /dev/null
+++ b/P066.Data/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace P066.Data.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/P066.Data/Properties/Settings.settings b/P066.Data/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/P066.Data/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
diff --git "a/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.sln" "b/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.sln"
new file mode 100644
index 0000000..303c51c
--- /dev/null
+++ "b/P066\346\225\260\346\215\256\345\210\206\346\236\220\347\250\213\345\272\217.sln"
@@ -0,0 +1,25 @@
+锘�
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30225.117
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P066鏁版嵁鍒嗘瀽绋嬪簭", "P066.Data\P066鏁版嵁鍒嗘瀽绋嬪簭.csproj", "{8B8F7749-8823-48C6-B12A-54979E28C10C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {9015AB30-DC50-4705-A9A7-45C14C06313E}
+	EndGlobalSection
+EndGlobal

--
Gitblit v1.8.0