From 533c67339be511fc32e645c450201522ea4d5dfb Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期三, 24 六月 2020 14:56:42 +0800
Subject: [PATCH] 添加 四个项目

---
 src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj                          |   48 +
 src/Bro.M071.Process.DBManager/Properties/AssemblyInfo.cs                 |   36 
 src/Bro.M071.Process.Model/BaseModel.cs                                   |  201 ++++
 src/Bro.M071.Process.Model/Properties/AssemblyInfo.cs                     |   36 
 src/Bro.Process.DBManager/ModelManager.cs                                 |  113 ++
 src/Bro.Process.DBManager/App.config                                      |   36 
 src/Bro.M071.Process.Model/Bro.M071.Process.Model.csproj                  |   95 ++
 src/Bro.M071.Process.Model/packages.config                                |   10 
 src/Bro.Process.DBManager/Properties/AssemblyInfo.cs                      |   36 
 src/Bro.M071.Process.DBManager/ProductionDetectionRecordsDetailManager.cs |  248 +++++
 src/Bro.Device.GTSCard/Properties/AssemblyInfo.cs                         |   36 
 src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj          |  103 ++
 src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs                |   58 +
 src/Bro.M071.Process.Model/Migrations/Configuration.cs                    |   37 
 src/Bro.Process.DBManager/Bro.Process.DBManager.csproj                    |  102 ++
 src/Bro.M071.Process.Model/Model/EventTimeRecords.cs                      |   52 +
 src/Bro.M071.Process.Model/Model/OperationRecords.cs                      |   60 +
 src/Bro.Process.DBManager/packages.config                                 |   10 
 src/Bro.M071.Process.DBManager/App.config                                 |   36 
 M071.sln                                                                  |   56 +
 src/Bro.Process.DBManager/SQLiteHelper.cs                                 |  614 +++++++++++++
 src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs  |  303 ++++++
 src/Bro.Device.GTSCard/Class1.cs                                          |   12 
 src/Bro.M071.Process.Model/App.config                                     |   43 
 src/Bro.M071.Process.DBManager/packages.config                            |   10 
 src/Bro.M071.Process.Model/DBModel.cs                                     |   67 +
 src/Bro.M071.Process.DBManager/ProductionDetectionRecordsManager.cs       |  305 ++++++
 27 files changed, 2,763 insertions(+), 0 deletions(-)

diff --git a/M071.sln b/M071.sln
index e7bed2c..30b6272 100644
--- a/M071.sln
+++ b/M071.sln
@@ -19,6 +19,14 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.UI.Model.Winform", "src\Bro.UI.Model.Winform\Bro.UI.Model.Winform.csproj", "{741F6491-57C7-479A-B391-09BBA9FBA9DC}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Device.GTSCard", "src\Bro.Device.GTSCard\Bro.Device.GTSCard.csproj", "{B536003E-70BA-4701-B8FD-BAFA303AB4E2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Process.DBManager", "src\Bro.M071.Process.DBManager\Bro.M071.Process.DBManager.csproj", "{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.M071.Process.Model", "src\Bro.M071.Process.Model\Bro.M071.Process.Model.csproj", "{AD645C48-5811-4B1E-B81F-D35D5E6B577F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Process.DBManager", "src\Bro.Process.DBManager\Bro.Process.DBManager.csproj", "{65302D6E-9918-4E4C-92B4-75C8830C6BA7}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -125,6 +133,54 @@
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.Build.0 = Release|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.ActiveCfg = Release|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.Build.0 = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.Build.0 = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x86.Build.0 = Debug|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.ActiveCfg = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.Build.0 = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x86.ActiveCfg = Release|Any CPU
+		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x86.Build.0 = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.Build.0 = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x86.Build.0 = Debug|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.Build.0 = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.ActiveCfg = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.Build.0 = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x86.ActiveCfg = Release|Any CPU
+		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x86.Build.0 = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.Build.0 = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x86.Build.0 = Debug|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.ActiveCfg = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.Build.0 = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x86.ActiveCfg = Release|Any CPU
+		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x86.Build.0 = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.Build.0 = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x86.Build.0 = Debug|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.ActiveCfg = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.Build.0 = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x86.ActiveCfg = Release|Any CPU
+		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj b/src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj
new file mode 100644
index 0000000..e68e95c
--- /dev/null
+++ b/src/Bro.Device.GTSCard/Bro.Device.GTSCard.csproj
@@ -0,0 +1,48 @@
+锘�<?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>{B536003E-70BA-4701-B8FD-BAFA303AB4E2}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Bro.Device.GTSCard</RootNamespace>
+    <AssemblyName>Bro.Device.GTSCard</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <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.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/src/Bro.Device.GTSCard/Class1.cs b/src/Bro.Device.GTSCard/Class1.cs
new file mode 100644
index 0000000..4801fad
--- /dev/null
+++ b/src/Bro.Device.GTSCard/Class1.cs
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Bro.Device.GTSCard
+{
+    public class Class1
+    {
+    }
+}
diff --git a/src/Bro.Device.GTSCard/Properties/AssemblyInfo.cs b/src/Bro.Device.GTSCard/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..507b541
--- /dev/null
+++ b/src/Bro.Device.GTSCard/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("Bro.Device.GTSCard")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Bro.Device.GTSCard")]
+[assembly: AssemblyCopyright("Copyright 漏  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("b536003e-70ba-4701-b8fd-bafa303ab4e2")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+//鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Bro.M071.Process.DBManager/App.config b/src/Bro.M071.Process.DBManager/App.config
new file mode 100644
index 0000000..1c8faee
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/App.config
@@ -0,0 +1,36 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+  <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite.EF6" />
+      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
+      <remove invariant="System.Data.SQLite" />
+      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
+    </DbProviderFactories>
+  </system.data>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+    <providers>
+      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+       <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+    </providers>
+  </entityFramework>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite.EF6" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
diff --git a/src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj b/src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj
new file mode 100644
index 0000000..c2cd4ac
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/Bro.M071.Process.DBManager.csproj
@@ -0,0 +1,103 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" />
+  <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>{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Bro.Process.DBManager</RootNamespace>
+    <AssemblyName>Bro.Process.DBManager</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="SQLite.CodeFirst, Version=1.5.3.29, Culture=neutral, PublicKeyToken=eb96ba0a78d831a7, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\SQLite.CodeFirst.1.5.3.29\lib\net45\SQLite.CodeFirst.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net451\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.1.0.112.0\lib\net451\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6.Migrations, Version=1.0.106.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.Migrations.1.0.106\lib\System.Data.SQLite.EF6.Migrations.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Linq.1.0.112.0\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ProductionDetectionImageRecordsManager.cs" />
+    <Compile Include="ProductionDetectionRecordsDetailManager.cs" />
+    <Compile Include="ProductionDetectionRecordsManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
+      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
+      <Name>Bro.Common.Model</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
+      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
+      <Name>Bro.Process.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.Process.Model\Bro.Process.Model.csproj">
+      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
+      <Name>Bro.Process.Model</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
+    <Error Condition="!Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets'))" />
+  </Target>
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />
+  <Import Project="..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" />
+</Project>
\ No newline at end of file
diff --git a/src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs b/src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs
new file mode 100644
index 0000000..49f5e9d
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs
@@ -0,0 +1,303 @@
+锘�////using Bro.Process.Common.Helper;
+//using Bro.Common.Helper;
+//using Bro.Process.Model;
+//using Bro.Process.Model.Model;
+//using System;
+//using System.Collections;
+//using System.Collections.Generic;
+//using System.Configuration;
+//using System.Data;
+//using System.Data.Common;
+//using System.Data.SQLite;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.M071.Process.DBManager
+//{
+//    public class ProductionDetectionImageRecordsManager : ModelManager<ProductionDetectionImageRecords>
+//    {
+//        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+//        protected override void ActionBeforeNewModel(DBModel context, ProductionDetectionImageRecords config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        protected override void ActionBeforeUpdateModel(DBModel context, ProductionDetectionImageRecords config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        private void CheckProductionCodeDuplicate(DBModel context, ProductionDetectionImageRecords config)
+//        {
+//            //if (context.ProductionDetectionImageRecords.Any(u => u.IS_DELETED == 0
+//            //                                    && u.ID != config.ID
+//            //                                    && u.PRODUCTION_CODE == config.PRODUCTION_CODE))
+//            {
+//                //throw new ProcessException("鏂板鎴栦慨鏀圭殑浜у搧閰嶇疆淇℃伅鐨勪骇鍝佷唬鐮佷笉鑳介噸澶�", null);
+//            }
+//        }
+
+//        public List<ProductionDetectionImageRecords> GetProductionDetectionImageRecords(string productionBatchNO, string pid)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                var list = context.ProductionDetectionImageRecords.Where(u => u.IS_DELETED == 0);
+
+//                if (!string.IsNullOrWhiteSpace(productionBatchNO))
+//                {
+//                    list = list.Where(u => u.ProductionBatchNO.Contains(productionBatchNO));
+//                }
+//                if (!string.IsNullOrWhiteSpace(pid))
+//                {
+//                    list = list.Where(u => u.PId.Contains(pid));
+//                }
+
+//                var resultList = list.ToList();
+//                return resultList;
+//            }
+//        }
+//        //public List<ProductionStatistics_Dto> GetOperationRecordsList(OperationRecordsRequest request)
+//        //{
+//        //    using (DBModel context = new DBModel())
+//        //    {
+//        //        var oList = context.OperationRecords.Where(u => u.IS_DELETED == 0);
+//        //        var pList = context.ProductionDetectionRecords.Where(u => u.IS_DELETED == 0);
+//        //        if (!string.IsNullOrWhiteSpace(request.ProductionBatchNO))
+//        //        {
+//        //            oList = oList.Where(u => u.ProductionBatchNO.Contains(request.ProductionBatchNO));
+//        //        }
+//        //        if (!string.IsNullOrWhiteSpace(request.UserNO))
+//        //        {
+//        //            oList = oList.Where(u => u.UserNO.Contains(request.UserNO));
+//        //        }
+//        //        if (request.StartTime != null)
+//        //        {
+//        //            oList = oList.Where(u => u.OperationStartTime >= request.StartTime);
+//        //        }
+//        //        if (request.EndTime != null)
+//        //        {
+//        //            oList = oList.Where(u => u.OperationStartTime <= request.EndTime);
+//        //        }
+
+//        //        var query = from operationRecords in oList
+//        //                    join productionDetectionRecords in pList
+//        //                    on operationRecords.ID equals productionDetectionRecords.OperationRecordsId
+//        //                    into opList
+//        //                    select new ProductionStatistics_Dto
+//        //                    {
+//        //                        OperationRecordsRowData = operationRecords,
+//        //                        BatchProductionTotalCount = opList.Where(u => u.ProductionBatchNO == operationRecords.ProductionBatchNO).Count(),
+//        //                        BatchProductionOKCount = opList.Where(u => u.ProductionBatchNO == operationRecords.ProductionBatchNO && u.Result == "OK").Count(),
+//        //                        BatchProductionNGCount = opList.Where(u => u.ProductionBatchNO == operationRecords.ProductionBatchNO && u.Result == "NG").Count(),
+//        //                        BatchProductionTBDCount = opList.Where(u => u.ProductionBatchNO == operationRecords.ProductionBatchNO && u.Result == "TBD").Count(),
+//        //                        IsSelected = false,
+//        //                    };
+//        //        var pageList = query.OrderBy(u => u.OperationRecordsRowData.OperationStartTime).ToPagedList(request);
+//        //        request.TotalNum = oList.Count();
+//        //        return pageList;
+//        //    }
+//        //}
+//        public List<ProductionDetectionImageRecords_Dto> GetProductionDetectionImageRecordsPagedList(ProductionDetectionImageRecordsRequest request)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                var imageRecordsList = context.ProductionDetectionImageRecords.Where(u => u.IS_DELETED == 0);
+//                var detectionRecordsList = context.ProductionDetectionRecordsDetail.Where(u => u.IS_DELETED == 0);
+//                var manualDetectionRecordsList = context.ManualDetectionRecords.Where(u => u.IS_DELETED == 0);
+//                if (!string.IsNullOrWhiteSpace(request.ProductionBatchNO))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.ProductionBatchNO.Contains(request.ProductionBatchNO));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.PId))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.PId.Contains(request.PId));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.Detection))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.Detection.Contains(request.Detection));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.DefectName))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.DefectNameList.Contains(request.DefectName));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.ManualDefectName))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.ManualDefectNameList.Contains(request.ManualDefectName));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.Result))
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.Result == request.Result);
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.ManualResult))
+//                {
+//                    manualDetectionRecordsList = manualDetectionRecordsList.Where(u => u.ManualResult == request.ManualResult);
+//                }
+//                if (request.StartTime != null)
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.Time >= request.StartTime);
+//                }
+//                if (request.EndTime != null)
+//                {
+//                    imageRecordsList = imageRecordsList.Where(u => u.Time <= request.EndTime);
+//                }
+
+//                var query = from imageRecord in imageRecordsList
+//                            join manualDetectionRecords in manualDetectionRecordsList on imageRecord.OriginalImgPath equals manualDetectionRecords.OriginalImgPath
+//                            join detectionRecords in detectionRecordsList on imageRecord.ID equals detectionRecords.ImageRecordId
+//                            into imageDetectionRecord
+                          
+//                            select new ProductionDetectionImageRecords_Dto
+//                            {
+//                                ProductionDetectionImageRecordsRowData = imageRecord,
+//                                ManualDetectionRecords = manualDetectionRecords,
+//                                ProductionDetectionRecordsDetailList = detectionRecordsList.Where(u => u.ImageRecordId == imageRecord.ID)
+//                            };
+//                var pageList = query.OrderBy(u => u.ProductionDetectionImageRecordsRowData.CREATE_TIME).ToPagedList(request);
+//                request.TotalNum = imageRecordsList.Count();
+
+//                return pageList;
+//            }
+//        }
+
+//        public ProductionDetectionImageRecords GetConfigByProductionCode(string productionCode)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                //ProductionDetectionImageRecords RR= context.ProductionDetectionImageRecords.FirstOrDefault(u => u.IS_DELETED == 0 && u.PRODUCTION_CODE == productionCode);
+//                //return RR;
+//                return new ProductionDetectionImageRecords();
+//            }
+//        }
+//        public void ADOBatchAdd(List<ProductionDetectionImageRecords> records)
+//        {
+//            Hashtable SQLStringList = new Hashtable();
+//            try
+//            {
+//                var idList = records.Select(u => u.ID).ToList();
+//                var disIdList = idList.Distinct().ToList();
+//                if (idList.Count != disIdList.Count)//鏈夐噸澶峣d
+//                {
+//                    throw new ProcessException("寮傚父锛氭湁閲嶅id:" + idList.ToString(), null);
+//                }
+//                //foreach (var record in records)
+//                //{
+//                //    if (IsExistId(record.ID))
+//                //    {
+//                //        throw new ProcessException("寮傚父锛氭湁閲嶅id:" + record.ID, null);
+//                //    }
+//                //    StringBuilder strSql = new StringBuilder();
+//                //    strSql.Append("insert into ProductionDetectionImageRecords (");
+//                //    strSql.Append("ID,ProductionBatchNO,PId,Result,Time,Detection,DefectName,Probability,Uncertainty,DefectX,DefectY,DefectWidth,DefectHeight, RawImgPath,DefectImgPath,ImageTime,PreElapsed,DefectElapsed,AfterElapsed,TotalElapsed,PreTreatedFlag,DetectionType, SpecStandard, SpecActualValue,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+//                //    strSql.Append(")values (");
+//                //    strSql.Append("@ID,@ProductionBatchNO,@PId,@Result,@Time,@Detection,@DefectName,@Probability,@Uncertainty,@DefectX,@DefectY,@DefectWidth,@DefectHeight,@RawImgPath,@DefectImgPath,@ImageTime,@PreElapsed,@DefectElapsed,@AfterElapsed,@TotalElapsed,@PreTreatedFlag,@DetectionType,@SpecStandard,@SpecActualValue,@IS_DISABLED,@IS_DELETED,@CREATE_USER,@CREATE_TIME,@UPDATE_USER,@UPDATE_TIME)");
+//                //    List<SQLiteParameter> parameters = new List<SQLiteParameter>();
+//                //    parameters.Add(new SQLiteParameter("@ID", record.ID));
+//                //    parameters.Add(new SQLiteParameter("@ProductionBatchNO", record.ProductionBatchNO));
+//                //    parameters.Add(new SQLiteParameter("@PId", record.PId));
+//                //    parameters.Add(new SQLiteParameter("@Result", record.Result));
+//                //    parameters.Add(new SQLiteParameter("@Time", record.Time));
+//                //    parameters.Add(new SQLiteParameter("@Detection", record.Detection));
+//                //    parameters.Add(new SQLiteParameter("@DefectName", record.DefectName));
+//                //    parameters.Add(new SQLiteParameter("@Probability", record.Probability));
+//                //    parameters.Add(new SQLiteParameter("@Uncertainty", record.Uncertainty));
+//                //    parameters.Add(new SQLiteParameter("@DefectX", record.DefectX));
+//                //    parameters.Add(new SQLiteParameter("@DefectY", record.DefectY));
+//                //    parameters.Add(new SQLiteParameter("@DefectWidth", record.DefectWidth));
+//                //    parameters.Add(new SQLiteParameter("@DefectHeight", record.DefectHeight));
+//                //    parameters.Add(new SQLiteParameter("@RawImgPath", record.RawImgPath));
+//                //    parameters.Add(new SQLiteParameter("@DefectImgPath", record.DefectImgPath));
+//                //    parameters.Add(new SQLiteParameter("@ImageTime", record.ImageTime));
+//                //    parameters.Add(new SQLiteParameter("@PreElapsed", record.PreElapsed));
+//                //    parameters.Add(new SQLiteParameter("@DefectElapsed", record.DefectElapsed));
+//                //    parameters.Add(new SQLiteParameter("@AfterElapsed", record.AfterElapsed));
+//                //    parameters.Add(new SQLiteParameter("@TotalElapsed", record.TotalElapsed));
+//                //    parameters.Add(new SQLiteParameter("@PreTreatedFlag", record.PreTreatedFlag));
+//                //    parameters.Add(new SQLiteParameter("@DetectionType", record.DetectionType));
+//                //    parameters.Add(new SQLiteParameter("@SpecStandard", record.SpecStandard));
+//                //    parameters.Add(new SQLiteParameter("@SpecActualValue", record.SpecActualValue));
+//                //    parameters.Add(new SQLiteParameter("@IS_DISABLED", record.IS_DISABLED));
+//                //    parameters.Add(new SQLiteParameter("@IS_DELETED", record.IS_DELETED));
+//                //    parameters.Add(new SQLiteParameter("@CREATE_USER", record.CREATE_USER));
+//                //    parameters.Add(new SQLiteParameter("@CREATE_TIME", record.CREATE_TIME));
+//                //    parameters.Add(new SQLiteParameter("@UPDATE_USER", record.UPDATE_USER));
+//                //    parameters.Add(new SQLiteParameter("@UPDATE_TIME", record.UPDATE_TIME));
+
+//                //    SQLStringList.Add(strSql, parameters.ToArray());
+//                //}
+//                SQLiteHelper.ExecuteSqlTran(SQLStringList);    //浣跨敤鏁版嵁搴撲簨鍔�        
+//            }
+//            catch (Exception ex)
+//            {
+//                throw new ProcessException(SQLStringList.ToString() + ex.Message, null);
+//            }
+//        }
+
+//        public void InserPatch(List<ProductionDetectionImageRecords> records)
+//        {
+//            try
+//            {
+//                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+//                {
+//                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+//                    {
+//                        StringBuilder strSql = new StringBuilder();
+//                        strSql.Append("insert into ProductionDetectionImageRecords (");
+//                        strSql.Append("ID,ProductionBatchNO,PId,ManualResult,Result,Time,DetectionSource,Detection,DefectNameList,ManualDefectNameList,RawImgPath,DefectImgPath,ImageTime,PreElapsed,DefectElapsed,AfterElapsed,TotalElapsed,PreTreatedFlag,OriginalImgPath,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+//                        strSql.Append(")values (");
+//                        strSql.Append("@ID,@ProductionBatchNO,@PId,@ManualResult,@Result,@Time,@DetectionSource,@Detection,@DefectNameList,@ManualDefectNameList,@RawImgPath,@DefectImgPath,@ImageTime,@PreElapsed,@DefectElapsed,@AfterElapsed,@TotalElapsed,@PreTreatedFlag,@OriginalImgPath,@IS_DISABLED,@IS_DELETED,@CREATE_USER,@CREATE_TIME,@UPDATE_USER,@UPDATE_TIME)");
+
+//                        insertRngCmd.CommandText = strSql.ToString();
+//                        conn.Open();
+//                        var transaction = conn.BeginTransaction();
+
+//                        foreach (var record in records)
+//                        {
+//                            insertRngCmd.Parameters.AddWithValue("@ID", record.ID);
+//                            insertRngCmd.Parameters.AddWithValue("@ProductionBatchNO", record.ProductionBatchNO);
+//                            insertRngCmd.Parameters.AddWithValue("@PId", record.PId);
+//                            insertRngCmd.Parameters.AddWithValue("@ManualResult", record.ManualResult);
+//                            insertRngCmd.Parameters.AddWithValue("@Result", record.Result);
+//                            insertRngCmd.Parameters.AddWithValue("@Time", record.Time);
+//                            insertRngCmd.Parameters.AddWithValue("@DetectionSource", record.DetectionSource);
+//                            insertRngCmd.Parameters.AddWithValue("@Detection", record.Detection);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectNameList", record.DefectNameList);
+//                            insertRngCmd.Parameters.AddWithValue("@ManualDefectNameList", record.ManualDefectNameList);
+//                            insertRngCmd.Parameters.AddWithValue("@RawImgPath", record.RawImgPath);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectImgPath", record.DefectImgPath);
+//                            insertRngCmd.Parameters.AddWithValue("@ImageTime", record.ImageTime);
+//                            insertRngCmd.Parameters.AddWithValue("@PreElapsed", record.PreElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectElapsed", record.DefectElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@AfterElapsed", record.AfterElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@TotalElapsed", record.TotalElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@PreTreatedFlag", record.PreTreatedFlag);
+//                            insertRngCmd.Parameters.AddWithValue("@OriginalImgPath", record.OriginalImgPath);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DISABLED", record.IS_DISABLED);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DELETED", record.IS_DELETED);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_USER", record.CREATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_TIME", record.CREATE_TIME);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_USER", record.UPDATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_TIME", record.UPDATE_TIME);
+//                            insertRngCmd.ExecuteNonQuery();
+//                        }
+//                        transaction.Commit();
+//                    }
+//                }
+//            }
+//            catch (Exception ex)
+//            {
+//                throw new ProcessException(ex.Message, null);
+//            }
+//        }
+
+//        public bool IsExistId(string id)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ProductionDetectionImageRecords RR = context.ProductionDetectionImageRecords.FirstOrDefault(u => u.ID == id);
+//                return RR != null;
+//            }
+//        }
+//    }
+//}
diff --git a/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsDetailManager.cs b/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsDetailManager.cs
new file mode 100644
index 0000000..d12f104
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsDetailManager.cs
@@ -0,0 +1,248 @@
+锘�////using Bro.Process.Common.Helper;
+//using Bro.Common.Helper;
+//using Bro.Process.Model;
+//using Bro.Process.Model.Model;
+//using System;
+//using System.Collections;
+//using System.Collections.Generic;
+//using System.Configuration;
+//using System.Data;
+//using System.Data.Common;
+//using System.Data.SQLite;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.M071.Process.DBManager
+//{
+//    public class ProductionDetectionRecordsDetailManager : ModelManager<ProductionDetectionRecordsDetail>
+//    {
+//        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+//        protected override void ActionBeforeNewModel(DBModel context, ProductionDetectionRecordsDetail config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        protected override void ActionBeforeUpdateModel(DBModel context, ProductionDetectionRecordsDetail config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        private void CheckProductionCodeDuplicate(DBModel context, ProductionDetectionRecordsDetail config)
+//        {
+//            //if (context.ProductionDetectionRecordsDetail.Any(u => u.IS_DELETED == 0
+//            //                                    && u.ID != config.ID
+//            //                                    && u.PRODUCTION_CODE == config.PRODUCTION_CODE))
+//            {
+//                //throw new ProcessException("鏂板鎴栦慨鏀圭殑浜у搧閰嶇疆淇℃伅鐨勪骇鍝佷唬鐮佷笉鑳介噸澶�", null);
+//            }
+//        }
+
+//        public List<ProductionDetectionRecordsDetail> GetProductionDetectionRecordsDetail(string productionBatchNO, string pid)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                var list = context.ProductionDetectionRecordsDetail.Where(u => u.IS_DELETED == 0 && u.OfflineDetectionId == null);
+
+//                if (!string.IsNullOrWhiteSpace(productionBatchNO))
+//                {
+//                    list = list.Where(u => u.ProductionBatchNO.Contains(productionBatchNO));
+//                }
+//                if (!string.IsNullOrWhiteSpace(pid))
+//                {
+//                    list = list.Where(u => u.PId.Contains(pid));
+//                }
+
+//                var resultList = list.ToList();
+//                return resultList;
+//            }
+//        }
+
+//        public List<ProductionDetectionRecordsDetail> GetProductionDetectionRecordsDetailPagedList(ProductionDetectionRecordsDetailRequest request)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                var list = context.ProductionDetectionRecordsDetail.Where(u => u.IS_DELETED == 0);
+
+//                if (!string.IsNullOrWhiteSpace(request.ProductionBatchNO))
+//                {
+//                    list = list.Where(u => u.ProductionBatchNO.Contains(request.ProductionBatchNO));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.PId))
+//                {
+//                    list = list.Where(u => u.PId.Contains(request.PId));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.Detection))
+//                {
+//                    list = list.Where(u => u.Detection.Contains(request.Detection));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.DefectName))
+//                {
+//                    list = list.Where(u => u.DefectName.Contains(request.DefectName));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.Result))
+//                {
+//                    list = list.Where(u => u.Result == request.Result);
+//                }
+//                if (request.StartTime != null)
+//                {
+//                    list = list.Where(u => u.Time >= request.StartTime);
+//                }
+//                if (request.EndTime != null)
+//                {
+//                    list = list.Where(u => u.Time <= request.EndTime);
+//                }
+//                var pageList = list.OrderBy(u => u.Time).ToPagedList(request);
+//                request.TotalNum = list.Count();
+//                return pageList;
+//            }
+//        }
+
+//        public ProductionDetectionRecordsDetail GetConfigByProductionCode(string productionCode)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                //ProductionDetectionRecordsDetail RR= context.ProductionDetectionRecordsDetail.FirstOrDefault(u => u.IS_DELETED == 0 && u.PRODUCTION_CODE == productionCode);
+//                //return RR;
+//                return new ProductionDetectionRecordsDetail();
+//            }
+//        }
+//        public void ADOBatchAdd(List<ProductionDetectionRecordsDetail> records)
+//        {
+//            Hashtable SQLStringList = new Hashtable();
+//            try
+//            {
+//                var idList = records.Select(u => u.ID).ToList();
+//                var disIdList = idList.Distinct().ToList();
+//                if (idList.Count != disIdList.Count)//鏈夐噸澶峣d
+//                {
+//                    throw new ProcessException("寮傚父锛氭湁閲嶅id:" + idList.ToString(), null);
+//                }
+//                foreach (var record in records)
+//                {
+//                    if (IsExistId(record.ID))
+//                    {
+//                        throw new ProcessException("寮傚父锛氭湁閲嶅id:" + record.ID, null);
+//                    }
+//                    StringBuilder strSql = new StringBuilder();
+//                    strSql.Append("insert into ProductionDetectionRecordsDetail (");
+//                    strSql.Append("ID,ProductionBatchNO,PId,Result,Time,Detection,DefectName,Probability,Uncertainty,DefectX,DefectY,DefectWidth,DefectHeight, RawImgPath,DefectImgPath,ImageTime,PreElapsed,DefectElapsed,AfterElapsed,TotalElapsed,PreTreatedFlag,DetectionType, SpecStandard, SpecActualValue,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+//                    strSql.Append(")values (");
+//                    strSql.Append("@ID,@ProductionBatchNO,@PId,@Result,@Time,@Detection,@DefectName,@Probability,@Uncertainty,@DefectX,@DefectY,@DefectWidth,@DefectHeight,@RawImgPath,@DefectImgPath,@ImageTime,@PreElapsed,@DefectElapsed,@AfterElapsed,@TotalElapsed,@PreTreatedFlag,@DetectionType,@SpecStandard,@SpecActualValue,@IS_DISABLED,@IS_DELETED,@CREATE_USER,@CREATE_TIME,@UPDATE_USER,@UPDATE_TIME)");
+//                    List<SQLiteParameter> parameters = new List<SQLiteParameter>();
+//                    parameters.Add(new SQLiteParameter("@ID", record.ID));
+//                    parameters.Add(new SQLiteParameter("@ProductionBatchNO", record.ProductionBatchNO));
+//                    parameters.Add(new SQLiteParameter("@PId", record.PId));
+//                    parameters.Add(new SQLiteParameter("@Result", record.Result));
+//                    parameters.Add(new SQLiteParameter("@Time", record.Time));
+//                    parameters.Add(new SQLiteParameter("@Detection", record.Detection));
+//                    parameters.Add(new SQLiteParameter("@DefectName", record.DefectName));
+//                    parameters.Add(new SQLiteParameter("@Probability", record.Probability));
+//                    parameters.Add(new SQLiteParameter("@Uncertainty", record.Uncertainty));
+//                    parameters.Add(new SQLiteParameter("@DefectX", record.DefectX));
+//                    parameters.Add(new SQLiteParameter("@DefectY", record.DefectY));
+//                    parameters.Add(new SQLiteParameter("@DefectWidth", record.DefectWidth));
+//                    parameters.Add(new SQLiteParameter("@DefectHeight", record.DefectHeight));
+//                    parameters.Add(new SQLiteParameter("@RawImgPath", record.RawImgPath));
+//                    parameters.Add(new SQLiteParameter("@DefectImgPath", record.DefectImgPath));
+//                    parameters.Add(new SQLiteParameter("@ImageTime", record.ImageTime));
+//                    parameters.Add(new SQLiteParameter("@PreElapsed", record.PreElapsed));
+//                    parameters.Add(new SQLiteParameter("@DefectElapsed", record.DefectElapsed));
+//                    parameters.Add(new SQLiteParameter("@AfterElapsed", record.AfterElapsed));
+//                    parameters.Add(new SQLiteParameter("@TotalElapsed", record.TotalElapsed));
+//                    parameters.Add(new SQLiteParameter("@PreTreatedFlag", record.PreTreatedFlag));
+//                    parameters.Add(new SQLiteParameter("@DetectionType", record.DetectionType));
+//                    parameters.Add(new SQLiteParameter("@SpecStandard", record.SpecStandard));
+//                    parameters.Add(new SQLiteParameter("@SpecActualValue", record.SpecActualValue));
+//                    parameters.Add(new SQLiteParameter("@IS_DISABLED", record.IS_DISABLED));
+//                    parameters.Add(new SQLiteParameter("@IS_DELETED", record.IS_DELETED));
+//                    parameters.Add(new SQLiteParameter("@CREATE_USER", record.CREATE_USER));
+//                    parameters.Add(new SQLiteParameter("@CREATE_TIME", record.CREATE_TIME));
+//                    parameters.Add(new SQLiteParameter("@UPDATE_USER", record.UPDATE_USER));
+//                    parameters.Add(new SQLiteParameter("@UPDATE_TIME", record.UPDATE_TIME));
+
+//                    SQLStringList.Add(strSql, parameters.ToArray());
+//                }
+//                SQLiteHelper.ExecuteSqlTran(SQLStringList);    //浣跨敤鏁版嵁搴撲簨鍔�        
+//            }
+//            catch (Exception ex)
+//            {
+//                throw new ProcessException(SQLStringList.ToString() + ex.Message, null);
+//            }
+//        }
+
+//        public void InserPatch(List<ProductionDetectionRecordsDetail> records)
+//        {
+//            try
+//            {
+//                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+//                {
+//                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+//                    {
+//                        StringBuilder strSql = new StringBuilder();
+//                        strSql.Append("insert into ProductionDetectionRecordsDetail (");
+//                        strSql.Append("ID,ProductionBatchNO,PId,Result,Time,DetectionSource,Detection,DefectName,Probability,Uncertainty,DefectX,DefectY,DefectWidth,DefectHeight, RawImgPath,DefectImgPath,ImageTime,PreElapsed,DefectElapsed,AfterElapsed,TotalElapsed,PreTreatedFlag,DetectionType, SpecStandard, SpecActualValue,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME,ImageRecordId");
+//                        strSql.Append(")values (");
+//                        strSql.Append("@ID,@ProductionBatchNO,@PId,@Result,@Time,@DetectionSource,@Detection,@DefectName,@Probability,@Uncertainty,@DefectX,@DefectY,@DefectWidth,@DefectHeight,@RawImgPath,@DefectImgPath,@ImageTime,@PreElapsed,@DefectElapsed,@AfterElapsed,@TotalElapsed,@PreTreatedFlag,@DetectionType,@SpecStandard,@SpecActualValue,@IS_DISABLED,@IS_DELETED,@CREATE_USER,@CREATE_TIME,@UPDATE_USER,@UPDATE_TIME,@ImageRecordId)");
+
+//                        insertRngCmd.CommandText = strSql.ToString();
+//                        conn.Open();
+//                        var transaction = conn.BeginTransaction();
+
+//                        foreach (var record in records)
+//                        {
+//                            insertRngCmd.Parameters.AddWithValue("@ID", record.ID);
+//                            insertRngCmd.Parameters.AddWithValue("@ProductionBatchNO", record.ProductionBatchNO);
+//                            insertRngCmd.Parameters.AddWithValue("@PId", record.PId);
+//                            insertRngCmd.Parameters.AddWithValue("@Result", record.Result);
+//                            insertRngCmd.Parameters.AddWithValue("@Time", record.Time);
+//                            insertRngCmd.Parameters.AddWithValue("@DetectionSource", record.DetectionSource);
+//                            insertRngCmd.Parameters.AddWithValue("@Detection", record.Detection);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectName", record.DefectName);
+//                            insertRngCmd.Parameters.AddWithValue("@Probability", record.Probability);
+//                            insertRngCmd.Parameters.AddWithValue("@Uncertainty", record.Uncertainty);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectX", record.DefectX);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectY", record.DefectY);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectWidth", record.DefectWidth);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectHeight", record.DefectHeight);
+//                            insertRngCmd.Parameters.AddWithValue("@RawImgPath", record.RawImgPath);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectImgPath", record.DefectImgPath);
+//                            insertRngCmd.Parameters.AddWithValue("@ImageTime", record.ImageTime);
+//                            insertRngCmd.Parameters.AddWithValue("@PreElapsed", record.PreElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@DefectElapsed", record.DefectElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@AfterElapsed", record.AfterElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@TotalElapsed", record.TotalElapsed);
+//                            insertRngCmd.Parameters.AddWithValue("@PreTreatedFlag", record.PreTreatedFlag);
+//                            insertRngCmd.Parameters.AddWithValue("@DetectionType", record.DetectionType);
+//                            insertRngCmd.Parameters.AddWithValue("@SpecStandard", record.SpecStandard);
+//                            insertRngCmd.Parameters.AddWithValue("@SpecActualValue", record.SpecActualValue);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DISABLED", record.IS_DISABLED);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DELETED", record.IS_DELETED);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_USER", record.CREATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_TIME", record.CREATE_TIME);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_USER", record.UPDATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_TIME", record.UPDATE_TIME);
+//                            insertRngCmd.Parameters.AddWithValue("@ImageRecordId", record.ImageRecordId);
+//                            insertRngCmd.ExecuteNonQuery();
+//                        }
+//                        transaction.Commit();
+//                    }
+//                }
+//            }
+//            catch (Exception ex)
+//            {
+//                throw new ProcessException(ex.Message, null);
+//            }
+//        }
+
+//        public bool IsExistId(string id)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ProductionDetectionRecordsDetail RR = context.ProductionDetectionRecordsDetail.FirstOrDefault(u => u.ID == id);
+//                return RR != null;
+//            }
+//        }
+//    }
+//}
diff --git a/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsManager.cs b/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsManager.cs
new file mode 100644
index 0000000..bd25939
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsManager.cs
@@ -0,0 +1,305 @@
+锘�////using Bro.Process.Common.Helper;
+//using Bro.Common.Helper;
+//using Bro.Process.Model;
+//using Bro.Process.Model.Model;
+//using System;
+//using System.Collections;
+//using System.Collections.Generic;
+//using System.Data.Common;
+//using System.Data.SQLite;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.M071.Process.DBManager
+//{
+//    public class ProductionDetectionRecordsManager : ModelManager<ProductionDetectionRecords>
+//    {
+//        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+//        protected override void ActionBeforeNewModel(DBModel context, ProductionDetectionRecords config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        protected override void ActionBeforeUpdateModel(DBModel context, ProductionDetectionRecords config)
+//        {
+//            CheckProductionCodeDuplicate(context, config);
+//        }
+
+//        private void CheckProductionCodeDuplicate(DBModel context, ProductionDetectionRecords config)
+//        {
+//            //if (context.ProductionDetectionRecords.Any(u => u.IS_DELETED == 0
+//            //                                    && u.ID != config.ID
+//            //                                    && u.PRODUCTION_CODE == config.PRODUCTION_CODE))
+//            {
+//                //throw new ProcessException("鏂板鎴栦慨鏀圭殑浜у搧閰嶇疆淇℃伅鐨勪骇鍝佷唬鐮佷笉鑳介噸澶�", null);
+//            }
+//        }
+
+//        //public void ADOBatchAdd(List<ProductionDetectionRecords> records)
+//        //{
+//        //    Hashtable SQLStringList = new Hashtable();
+//        //    try
+//        //    {
+//        //        var idList = records.Select(u => u.ID).ToList();
+//        //        var disIdList = idList.Distinct().ToList();
+//        //        if (idList.Count != disIdList.Count)//鏈夐噸澶峣d
+//        //        {
+//        //            throw new ProcessException("寮傚父锛氭湁閲嶅id:" + idList.ToString(), null);
+//        //        }
+//        //        foreach (var record in records)
+//        //        {
+//        //            if (IsExistId(record.ID))
+//        //            {
+//        //                throw new ProcessException("寮傚父锛氭湁閲嶅id:" + record.ID, null);
+//        //            }
+//        //            StringBuilder strSql = new StringBuilder();
+//        //            strSql.Append("insert into ProductionDetectionRecords (");
+//        //            strSql.Append(@"ID,
+//        //                            ProductionBatchNO,
+//        //                            PId,
+//        //                            Time,
+//        //                            Result,
+//        //                            DetectionTimes,
+//        //                            DetectionDetail,
+//        //                            X,
+//        //                            Y,
+//        //                            UploadTime,
+//        //                            DequeueTime,
+//        //                            UploadResult,
+//        //                            TBDList,
+//        //                            InsideDiameter,
+//        //                            OutsideDiameter,
+//        //                            Thickness,
+//        //                            IS_DISABLED,
+//        //                            IS_DELETED,
+//        //                            CREATE_USER,
+//        //                            CREATE_TIME,
+//        //                            UPDATE_USER,
+//        //                            UPDATE_TIME");
+//        //            strSql.Append(")values (");
+//        //            strSql.Append(@"@ID,
+//        //                            @ProductionBatchNO,
+//        //                            @PId,
+//        //                            @Time,
+//        //                            @Result,
+//        //                            @DetectionTimes,
+//        //                            @DetectionDetail,
+//        //                            @X,
+//        //                            @Y,
+//        //                            @UploadTime,
+//        //                            @DequeueTime,
+//        //                            @UploadResult,
+//        //                            @TBDList,
+//        //                            @InsideDiameter,
+//        //                            @OutsideDiameter,
+//        //                            @Thickness,
+//        //                            @IS_DISABLED,
+//        //                            @IS_DELETED,
+//        //                            @CREATE_USER,
+//        //                            @CREATE_TIME,
+//        //                            @UPDATE_USER,
+//        //                            @UPDATE_TIME)");
+//        //            List<SQLiteParameter> parameters = new List<SQLiteParameter>();
+
+//        //            parameters.Add(new SQLiteParameter("@ID", record.ID));
+//        //            parameters.Add(new SQLiteParameter("@ProductionBatchNO", record.ProductionBatchNO));
+//        //            parameters.Add(new SQLiteParameter("@PId", record.PId));
+//        //            parameters.Add(new SQLiteParameter("@Time", record.Time));
+//        //            parameters.Add(new SQLiteParameter("@Result", record.Result));
+//        //            parameters.Add(new SQLiteParameter("@DetectionTimes", record.DetectionTimes));
+//        //            parameters.Add(new SQLiteParameter("@DetectionDetail", record.DetectionDetail));
+//        //            parameters.Add(new SQLiteParameter("@X", record.X));
+//        //            parameters.Add(new SQLiteParameter("@Y", record.Y));
+//        //            parameters.Add(new SQLiteParameter("@UploadTime", record.UploadTime));
+//        //            parameters.Add(new SQLiteParameter("@DequeueTime", record.DequeueTime));
+//        //            parameters.Add(new SQLiteParameter("@UploadResult", record.UploadResult));
+//        //            parameters.Add(new SQLiteParameter("@TBDList", record.TBDList));
+//        //            parameters.Add(new SQLiteParameter("@InsideDiameter", record.InsideDiameter));
+//        //            parameters.Add(new SQLiteParameter("@OutsideDiameter", record.OutsideDiameter));
+//        //            parameters.Add(new SQLiteParameter("@Thickness", record.Thickness));
+//        //            parameters.Add(new SQLiteParameter("@IS_DISABLED", record.IS_DISABLED));
+//        //            parameters.Add(new SQLiteParameter("@IS_DELETED", record.IS_DELETED));
+//        //            parameters.Add(new SQLiteParameter("@CREATE_USER", record.CREATE_USER));
+//        //            parameters.Add(new SQLiteParameter("@CREATE_TIME", record.CREATE_TIME));
+//        //            parameters.Add(new SQLiteParameter("@UPDATE_USER", record.UPDATE_USER));
+//        //            parameters.Add(new SQLiteParameter("@UPDATE_TIME", record.UPDATE_TIME));
+
+//        //            SQLStringList.Add(strSql, parameters.ToArray());
+//        //        }
+//        //        SQLiteHelper.ExecuteSqlTran(SQLStringList);    //浣跨敤鏁版嵁搴撲簨鍔�        
+
+//        //    }
+//        //    catch (Exception ex)
+//        //    {
+//        //        throw new ProcessException(SQLStringList.ToString() + ex.Message, null);
+//        //    }
+//        //}
+
+//        public void InserPatch(List<ProductionDetectionRecords> records)
+//        {
+//            try
+//            {
+//                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+//                {
+//                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+//                    {
+//                        StringBuilder strSql = new StringBuilder();
+//                        strSql.Append("insert into ProductionDetectionRecords (");
+//                        strSql.Append(@"ID,
+//                                    OperationRecordsId,
+//                                    ProductionBatchNO,
+//                                    PId,
+//                                    Time,
+//                                    Source,
+//                                    Result,
+//                                    DetectionTimes,
+//                                    DetectionDetail,
+//                                    X,
+//                                    Y,
+//                                    UploadTime,
+//                                    DequeueTime,
+//                                    UploadResult,
+//                                    TBDList,
+//                                    InsideDiameter,
+//                                    OutsideDiameter,
+//                                    Thickness,
+//                                    IS_DISABLED,
+//                                    IS_DELETED,
+//                                    CREATE_USER,
+//                                    CREATE_TIME,
+//                                    UPDATE_USER,
+//                                    UPDATE_TIME");
+//                        strSql.Append(")values (");
+//                        strSql.Append(@"@ID,
+//                                    @OperationRecordsId,
+//                                    @ProductionBatchNO,
+//                                    @PId,
+//                                    @Time,
+//                                    @Source,
+//                                    @Result,
+//                                    @DetectionTimes,
+//                                    @DetectionDetail,
+//                                    @X,
+//                                    @Y,
+//                                    @UploadTime,
+//                                    @DequeueTime,
+//                                    @UploadResult,
+//                                    @TBDList,
+//                                    @InsideDiameter,
+//                                    @OutsideDiameter,
+//                                    @Thickness,
+//                                    @IS_DISABLED,
+//                                    @IS_DELETED,
+//                                    @CREATE_USER,
+//                                    @CREATE_TIME,
+//                                    @UPDATE_USER,
+//                                    @UPDATE_TIME)");
+
+//                        insertRngCmd.CommandText = strSql.ToString();
+//                        conn.Open();
+//                        var transaction = conn.BeginTransaction();
+
+//                        foreach (var record in records)
+//                        {
+//                            insertRngCmd.Parameters.AddWithValue("@ID", record.ID);
+//                            insertRngCmd.Parameters.AddWithValue("@OperationRecordsId", record.OperationRecordsId);
+//                            insertRngCmd.Parameters.AddWithValue("@ProductionBatchNO", record.ProductionBatchNO);
+//                            insertRngCmd.Parameters.AddWithValue("@PId", record.PId);
+//                            insertRngCmd.Parameters.AddWithValue("@Time", record.Time);
+//                            insertRngCmd.Parameters.AddWithValue("@Source", record.Source);
+//                            insertRngCmd.Parameters.AddWithValue("@Result", record.Result);
+//                            insertRngCmd.Parameters.AddWithValue("@DetectionTimes", record.DetectionTimes);
+//                            insertRngCmd.Parameters.AddWithValue("@DetectionDetail", record.DetectionDetail);
+//                            insertRngCmd.Parameters.AddWithValue("@X", record.X);
+//                            insertRngCmd.Parameters.AddWithValue("@Y", record.Y);
+//                            insertRngCmd.Parameters.AddWithValue("@UploadTime", record.UploadTime);
+//                            insertRngCmd.Parameters.AddWithValue("@DequeueTime", record.DequeueTime);
+//                            insertRngCmd.Parameters.AddWithValue("@UploadResult", record.UploadResult);
+//                            insertRngCmd.Parameters.AddWithValue("@TBDList", record.TBDList);
+//                            insertRngCmd.Parameters.AddWithValue("@InsideDiameter", record.InsideDiameter);
+//                            insertRngCmd.Parameters.AddWithValue("@OutsideDiameter", record.OutsideDiameter);
+//                            insertRngCmd.Parameters.AddWithValue("@Thickness", record.Thickness);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DISABLED", record.IS_DISABLED);
+//                            insertRngCmd.Parameters.AddWithValue("@IS_DELETED", record.IS_DELETED);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_USER", record.CREATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@CREATE_TIME", record.CREATE_TIME);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_USER", record.UPDATE_USER);
+//                            insertRngCmd.Parameters.AddWithValue("@UPDATE_TIME", record.UPDATE_TIME);
+//                            insertRngCmd.ExecuteNonQuery();
+//                        }
+//                        transaction.Commit();
+//                    }
+//                }
+//            }
+//            catch (Exception ex)
+//            {
+//                throw new ProcessException(ex.Message, null);
+//            }
+//        }
+
+//        public List<ProductionDetectionRecords> GetProductionDetectionRecordsList(ProductionDetectionRecordsRequest request)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                var list = context.ProductionDetectionRecords.Where(u => u.IS_DELETED == 0);
+
+//                if (!string.IsNullOrWhiteSpace(request.ProductionBatchNO))
+//                {
+//                    list = list.Where(u => u.ProductionBatchNO.Contains(request.ProductionBatchNO));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.PId))
+//                {
+//                    list = list.Where(u => u.PId.Contains(request.PId));
+//                }
+//                if (!string.IsNullOrWhiteSpace(request.Result))
+//                {
+//                    list = list.Where(u => u.Result == request.Result);
+//                }
+//                if (request.StartTime != null)
+//                {
+//                    list = list.Where(u => u.Time >= request.StartTime);
+//                }
+//                if (request.EndTime != null)
+//                {
+//                    list = list.Where(u => u.Time <= request.EndTime);
+//                }
+//                var pageList = list.OrderBy(u => u.Time).ToPagedList(request);
+//                request.TotalNum = list.Count();
+//                return pageList;
+//            }
+//        }
+
+//        public ProductionDetectionRecords GetConfigByProductionCode(string productionCode)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                //ProductionDetectionRecords RR= context.ProductionDetectionRecords.FirstOrDefault(u => u.IS_DELETED == 0 && u.PRODUCTION_CODE == productionCode);
+//                //return RR;
+//                return new ProductionDetectionRecords();
+//            }
+//        }
+//        public bool IsExistId(string id)
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ProductionDetectionRecords RR = context.ProductionDetectionRecords.FirstOrDefault(u => u.ID == id);
+//                return RR != null;
+//            }
+//        }
+
+//    }
+
+//    //public class ProductionManagerkey : ModelManager<PRODUCTION_SECRETKEY>
+//    //{
+//    //    public PRODUCTION_SECRETKEY GetConfig()
+//    //    {
+//    //        using (DBModel context = new DBModel())
+//    //        {
+//    //            //return context.PRODUCTION_SECRETKEY.FirstOrDefault(u => u.RUNDAYNUMMAX > 0);
+//    //            return new PRODUCTION_SECRETKEY();
+//    //        }
+//    //    }
+//    //}
+//}
diff --git a/src/Bro.M071.Process.DBManager/Properties/AssemblyInfo.cs b/src/Bro.M071.Process.DBManager/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8895ef9
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("Bro.Process.DBManager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Bro.Process.DBManager")]
+[assembly: AssemblyCopyright("Copyright 漏  2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("230b0fff-f6af-45fe-aaf7-b4b66250dd58")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+// 鍙互鎸囧畾鎵�鏈夊�硷紝涔熷彲浠ヤ娇鐢ㄤ互涓嬫墍绀虹殑 "*" 棰勭疆鐗堟湰鍙峰拰淇鍙�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Bro.M071.Process.DBManager/packages.config b/src/Bro.M071.Process.DBManager/packages.config
new file mode 100644
index 0000000..455fb3e
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/packages.config
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="EntityFramework" version="6.4.0" targetFramework="net452" />
+  <package id="SQLite.CodeFirst" version="1.5.3.29" targetFramework="net452" />
+  <package id="System.Data.SQLite" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6.Migrations" version="1.0.106" targetFramework="net452" />
+  <package id="System.Data.SQLite.Linq" version="1.0.112.0" targetFramework="net452" />
+</packages>
\ No newline at end of file
diff --git a/src/Bro.M071.Process.Model/App.config b/src/Bro.M071.Process.Model/App.config
new file mode 100644
index 0000000..06783b1
--- /dev/null
+++ b/src/Bro.M071.Process.Model/App.config
@@ -0,0 +1,43 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+    <providers>
+      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+      <!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
+    </providers>
+  </entityFramework>
+  <connectionStrings>
+    <!--<add name="DBSet" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=Bro.Process.Model.Model;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />-->
+    <!--<add name="DBModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=Bro.Process.Model.DBModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />-->
+    <add name="DBModel" connectionString="data source=D:\PROJECTS\M071\DataBase\M071.db;BinaryGUID=False" providerName="System.Data.SQLite" />
+  </connectionStrings>
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite.EF6" />
+      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
+      <remove invariant="System.Data.SQLite" />
+      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
+    </DbProviderFactories>
+  </system.data>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite.EF6" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+  </startup>
+</configuration>
\ No newline at end of file
diff --git a/src/Bro.M071.Process.Model/BaseModel.cs b/src/Bro.M071.Process.Model/BaseModel.cs
new file mode 100644
index 0000000..8bcf90b
--- /dev/null
+++ b/src/Bro.M071.Process.Model/BaseModel.cs
@@ -0,0 +1,201 @@
+锘�//using System;
+//using System.Collections.Generic;
+//using System.ComponentModel;
+//using System.ComponentModel.DataAnnotations;
+//using System.Linq;
+//using System.Reflection;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.M071.Process.Model
+//{
+//    public class BaseModel
+//    {
+//        /// <summary>
+//        /// 缂栧彿锛屽敮涓�鍊�,浣跨敤GUID
+//        /// </summary>
+//        [Key]
+//        [Required(ErrorMessage = "缂栧彿涓嶅彲涓虹┖锛�")]
+//        [StringLength(50)]
+//        public string ID { get; set; } = Guid.NewGuid().ToString().ToUpper();
+
+//        /// <summary>
+//        /// 绂佺敤鐘舵�� 0 鏈鐢� 1 宸茬鐢�
+//        /// </summary>
+//        [Required]
+//        public int IS_DISABLED { get; set; } = 0;
+
+//        /// <summary>
+//        /// 鍒犻櫎鐘舵�� 0 鏈垹闄� 1 宸插垹闄�
+//        /// </summary>
+//        [Required]
+//        public int IS_DELETED { get; set; } = 0;
+
+//        /// <summary>
+//        /// 鍒涘缓浜轰俊鎭�
+//        /// </summary>
+//        //[Required]
+//        [StringLength(50)]
+//        public string CREATE_USER { get; set; }
+
+//        /// <summary>
+//        /// 鍒涘缓鏃堕棿
+//        /// </summary>
+//        //[Required]
+//        public DateTime? CREATE_TIME { get; set; } = DateTime.Now;
+
+//        /// <summary>
+//        /// 鏇存柊浜轰俊鎭�
+//        /// </summary>
+//        [StringLength(50)]
+//        public string UPDATE_USER { get; set; }
+
+//        /// <summary>
+//        /// 鏇存柊鏃堕棿
+//        /// </summary>
+//        public DateTime? UPDATE_TIME { get; set; }
+//    }
+
+//    public static class BaseModelHelper
+//    {
+//        public static void SetNew<T>(this T t, string userId) where T : BaseModel
+//        {
+//            //t.ID = Guid.NewGuid().ToString().ToUpper();
+//            t.CREATE_USER = userId;
+//            t.CREATE_TIME = DateTime.Now;
+//        }
+
+//        public static void SetUpdate<T>(this T t, string userId) where T : BaseModel
+//        {
+//            t.UPDATE_USER = userId;
+//            t.UPDATE_TIME = DateTime.Now;
+//        }
+
+//        static List<string> NoTransferProps = new List<string>() { "ID", "CREATE_USER", "CREATE_TIME", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED" };
+//        public static void DataTransfer<T>(this T destT, T sourceT) where T : BaseModel
+//        {
+//            destT.DataFrom(sourceT, NoTransferProps);
+//        }
+
+//        public static void DataFrom<T1, T2>(this T1 destT, T2 sourceT, List<string> exceptionProps = null) where T1 : class where T2 : class
+//        {
+//            PropertyInfo[] propDest = destT.GetType().GetProperties().Where(p => !(p.GetMethod.IsVirtual && !p.GetMethod.IsFinal)).ToArray();
+//            PropertyInfo[] propSource = sourceT.GetType().GetProperties();
+
+//            Array.ForEach(propDest, prop =>
+//            {
+//                if (exceptionProps == null || !exceptionProps.Contains(prop.Name))
+//                {
+//                    if (prop.CanWrite)
+//                    {
+//                        PropertyInfo propS = propSource.FirstOrDefault(p => p.Name == prop.Name);
+//                        if (propS != null && propS.CanRead)
+//                        {
+//                            prop.SetValue(destT, propS.GetValue(sourceT));
+//                        }
+//                    }
+//                }
+//            });
+//        }
+
+//        public static List<T> ToPagedList<T>(this IQueryable<T> orderQuery, BaseRequest request) where T : class
+//        {
+//            return orderQuery.Skip((request.PageNum - 1) * request.PageSize).Take(request.PageSize).ToList();
+//        }
+//    }
+
+//    public class BaseRequest : INotifyPropertyChanged
+//    {
+
+//        private int pageNum = 1;
+//        /// <summary>
+//        /// 鏌ヨ缁撴灉椤垫暟
+//        /// </summary>
+//        public int PageNum
+//        {
+//            get => pageNum;
+//            set
+//            {
+//                if (pageNum != value)
+//                {
+//                    pageNum = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("PageNum"), null, null);
+//                }
+//            }
+//        }
+
+//        private int pageSize = 100;
+//        /// <summary>
+//        /// 姣忛〉鐨勬煡璇㈢粨鏋滄潯鏁�
+//        /// </summary>
+//        public int PageSize
+//        {
+//            get => pageSize;
+//            set
+//            {
+//                if (pageSize != value)
+//                {
+//                    pageSize = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("PageSize"), null, null);
+//                }
+//            }
+//        }
+
+//        /// <summary>
+//        /// 鏌ヨ璧峰鏃堕棿
+//        /// </summary>
+//        public DateTime? StartTime { get; set; }
+
+//        /// <summary>
+//        /// 鏌ヨ缁撴潫鏃堕棿
+//        /// </summary>
+//        public DateTime? EndTime { get; set; }
+
+//        /// <summary>
+//        /// 鍚敤鐘舵�佽繃婊ゅ櫒 1锛氫粎鏈惎鐢� 0锛氫粎鍚敤 -1锛氬叏閮�
+//        /// </summary>
+//        public int DisableFilter { get; set; } = 0;
+
+//        /// <summary>
+//        /// 鏌ヨ瀛楃涓�
+//        /// </summary>
+//        public string SearchTxt { get; set; }
+
+//        private int totalNum = 0;
+//        /// <summary>
+//        /// 鏁版嵁鎬绘暟
+//        /// </summary>
+//        public int TotalNum
+//        {
+//            get => totalNum;
+//            set
+//            {
+//                if (totalNum != value)
+//                {
+//                    totalNum = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("TotalNum"), null, null);
+//                }
+//                TotalPage = (int)Math.Ceiling((double)TotalNum / PageSize);
+//            }
+//        }
+
+//        private int totalPage = 0;
+//        /// <summary>
+//        /// 鎬婚〉鏁�
+//        /// </summary>
+//        public int TotalPage
+//        {
+//            get => totalPage;
+//            set
+//            {
+//                if (totalPage != value)
+//                {
+//                    totalPage = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("TotalPage"), null, null);
+//                }
+//            }
+//        }
+
+//        public event PropertyChangedEventHandler PropertyChanged;
+//    }
+//}
diff --git a/src/Bro.M071.Process.Model/Bro.M071.Process.Model.csproj b/src/Bro.M071.Process.Model/Bro.M071.Process.Model.csproj
new file mode 100644
index 0000000..335fb1c
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Bro.M071.Process.Model.csproj
@@ -0,0 +1,95 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" />
+  <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>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Bro.Process.Model</RootNamespace>
+    <AssemblyName>Bro.Process.Model</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net451\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.1.0.112.0\lib\net451\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6.Migrations, Version=1.0.106.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.Migrations.1.0.106\lib\System.Data.SQLite.EF6.Migrations.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Linq.1.0.112.0\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Security" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BaseModel.cs" />
+    <Compile Include="DBModel.cs" />
+    <Compile Include="Migrations\Configuration.cs" />
+    <Compile Include="Model\ManualDetectionRecords.cs" />
+    <Compile Include="Model\EventTimeRecords.cs" />
+    <Compile Include="Model\OperationRecords.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config">
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
+    <Error Condition="!Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets'))" />
+  </Target>
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />
+  <Import Project="..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" />
+</Project>
\ No newline at end of file
diff --git a/src/Bro.M071.Process.Model/DBModel.cs b/src/Bro.M071.Process.Model/DBModel.cs
new file mode 100644
index 0000000..92ccb4a
--- /dev/null
+++ b/src/Bro.M071.Process.Model/DBModel.cs
@@ -0,0 +1,67 @@
+锘�//using Bro.Process.Model.Migrations;
+//using Bro.Process.Model.Model;
+//using System;
+//using System.Data.Entity;
+//using System.Data.Entity.ModelConfiguration.Conventions;
+//using System.Linq;
+
+//namespace Bro.M071.Process.Model
+//{
+//    public class DBModel : DbContext
+//    {
+//        //鎮ㄧ殑涓婁笅鏂囧凡閰嶇疆涓轰粠鎮ㄧ殑搴旂敤绋嬪簭鐨勯厤缃枃浠�(App.config 鎴� Web.config)
+//        //浣跨敤鈥淒BModel鈥濊繛鎺ュ瓧绗︿覆銆傞粯璁ゆ儏鍐典笅锛屾杩炴帴瀛楃涓查拡瀵规偍鐨� LocalDb 瀹炰緥涓婄殑
+//        //鈥淏ro.Process.Model.DBModel鈥濇暟鎹簱銆�
+//        // 
+//        //濡傛灉鎮ㄦ兂瑕侀拡瀵瑰叾浠栨暟鎹簱鍜�/鎴栨暟鎹簱鎻愪緵绋嬪簭锛岃鍦ㄥ簲鐢ㄧ▼搴忛厤缃枃浠朵腑淇敼鈥淒BModel鈥�
+//        //杩炴帴瀛楃涓层��
+//        public DBModel()
+//            : base("name=DBModel")
+//        {
+//            ////鏁版嵁搴撹縼绉绘鏌ユ殏鏃舵斁鍦ㄦ瀯閫犲嚱鏁颁腑锛屽洖澶翠細鏀惧埌绋嬪簭鍒濆鍖栦腑
+//            //Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
+//        }
+
+//        //涓烘偍瑕佸湪妯″瀷涓寘鍚殑姣忕瀹炰綋绫诲瀷閮芥坊鍔� DbSet銆傛湁鍏抽厤缃拰浣跨敤 Code First  妯″瀷
+//        //鐨勮缁嗕俊鎭紝璇峰弬闃� http://go.microsoft.com/fwlink/?LinkId=390109銆�
+
+//        // public virtual DbSet<MyEntity> MyEntities { get; set; }
+//        //public virtual DbSet<PRODUCTION_SECRETKEY> PRODUCTION_SECRETKEY { get; set; }
+//        //public virtual DbSet<PRODUCTION_CONFIG> PRODUCTION_CONFIG { get; set; }
+
+
+//        public virtual DbSet<ProductionDetectionRecords> ProductionDetectionRecords { get; set; }
+//        public virtual DbSet<ProductionDetectionRecordsDetail> ProductionDetectionRecordsDetail { get; set; }
+//        public virtual DbSet<OperationRecords> OperationRecords { get; set; }
+//        public virtual DbSet<ProductionDetectionImageRecords> ProductionDetectionImageRecords { get; set; }
+//        public virtual DbSet<ManualDetectionRecords> ManualDetectionRecords { get; set; }
+//        public virtual DbSet<EventTimeRecords> EventTimeRecords { get; set; }
+
+//        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+//        {
+//            //base.OnModelCreating(modelBuilder);
+
+//            #region for sqlite db
+//            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
+//            modelBuilder.Configurations.AddFromAssembly(typeof(DBModel).Assembly);
+//            #endregion
+//        }
+//    }
+
+//    public static class DatabaseInitialize
+//    {
+//        public static void Initialize()
+//        {
+//            Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
+//            using (DbContext dbContext = new DBModel())
+//            {
+//                dbContext.Database.Initialize(true);
+//            }
+//        }
+//    }
+//    //public class MyEntity
+//    //{
+//    //    public int Id { get; set; }
+//    //    public string Name { get; set; }
+//    //}
+//}
\ No newline at end of file
diff --git a/src/Bro.M071.Process.Model/Migrations/Configuration.cs b/src/Bro.M071.Process.Model/Migrations/Configuration.cs
new file mode 100644
index 0000000..0f2bb06
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Migrations/Configuration.cs
@@ -0,0 +1,37 @@
+//namespace Bro.M071.Process.Model.Migrations
+//{
+//    using System;
+//    using System.Data.Entity;
+//    using System.Data.Entity.Migrations;
+//    using System.Data.SQLite.EF6.Migrations;
+//    using System.Linq;
+
+//    public sealed class Configuration : DbMigrationsConfiguration<Bro.Process.Model.DBModel>
+//    {
+//        public Configuration()
+//        {
+//            AutomaticMigrationsEnabled = true;
+//            AutomaticMigrationDataLossAllowed = true;
+
+//            #region for sqlite db
+//            SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());
+//            #endregion
+//        }
+
+//        protected override void Seed(Bro.Process.Model.DBModel context)
+//        {
+//            //  This method will be called after migrating to the latest version.
+
+//            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
+//            //  to avoid creating duplicate seed data. E.g.
+//            //
+//            //    context.People.AddOrUpdate(
+//            //      p => p.FullName,
+//            //      new Person { FullName = "Andrew Peters" },
+//            //      new Person { FullName = "Brice Lambson" },
+//            //      new Person { FullName = "Rowan Miller" }
+//            //    );
+//            //
+//        }
+//    }
+//}
diff --git a/src/Bro.M071.Process.Model/Model/EventTimeRecords.cs b/src/Bro.M071.Process.Model/Model/EventTimeRecords.cs
new file mode 100644
index 0000000..c5fb1bc
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/EventTimeRecords.cs
@@ -0,0 +1,52 @@
+锘�
+//using System;
+//using System.ComponentModel.DataAnnotations;
+
+//namespace Bro.M071.Process.Model.Model
+//{
+//    /// <summary>
+//    /// 浜嬩欢鏃堕棿璁板綍
+//    /// </summary>
+//    public class EventTimeRecords : BaseModel
+//    {
+//        /// <summary>
+//        /// 鎿嶄綔鍛樼紪鍙�
+//        /// </summary>
+//        [StringLength(64)]
+//        public string UserNO { get; set; }
+
+//        /// <summary>
+//        ///  鐝
+//        /// </summary>
+//        public int Shift { get; set; }
+
+//        /// <summary>
+//        /// 浜嬩欢绫诲瀷锛堢┖闂� 鏁呴殰 姝e父杩愯锛�
+//        /// </summary>
+//        public int EventType { get; set; }
+
+//        ///// <summary>
+//        ///// 浜嬩欢寮�濮�/缁撴潫
+//        ///// </summary>
+//        //public int EventStatus { get; set; }
+
+//        /// <summary>
+//        /// 浜嬩欢鏃堕棿
+//        /// </summary>
+//        public DateTime EventTime { get; set; }
+
+//        /// <summary>
+//        /// 浜嬩欢澶囨敞
+//        /// </summary>
+//        [StringLength(256)]
+//        public string Remark { get; set; }
+//    }
+
+//    public class EventTimeRecordsRequest : BaseRequest
+//    {
+//        public string UserNO { get; set; }
+//        public int Shift { get; set; }
+//        public int EventType { get; set; }
+//    }
+
+//}
diff --git a/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs b/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs
new file mode 100644
index 0000000..b0f221a
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs
@@ -0,0 +1,58 @@
+锘�//using System;
+//using System.Collections.Generic;
+//using System.ComponentModel;
+//using System.ComponentModel.DataAnnotations;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.M071.Process.Model.Model
+//{
+//    public class ManualDetectionRecords : BaseModel, INotifyPropertyChanged
+//    {
+//        /// <summary>
+//        /// 妫�娴嬪浘鐗囩殑璺緞锛堝師濮嬪浘鐗� 棰勫鐞嗗浘鐗囪矾寰勶級 鍏宠仈鍒版娴嬭褰曡〃锛堜竴寮犲浘鐗囧娆℃娴� 鍘熷璺緞涓嶅彉锛�
+//        /// </summary>
+//        [StringLength(512)]
+//        public string OriginalImgPath { get; set; }
+
+
+//        private string manualResult = null;
+//        /// <summary>
+//        /// 浜哄伐瀵规爣缁撴灉
+//        /// </summary>
+//        [StringLength(64)]
+//        public string ManualResult
+//        {
+//            get => manualResult;
+//            set
+//            {
+//                if (manualResult != value)
+//                {
+//                    manualResult = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("ManualResult"), null, null);
+//                }
+//            }
+//        }
+
+//        private string manualDefectNameList = null;
+//        /// <summary>
+//        /// 浜哄伐瀵规爣缂洪櫡鍚嶇О
+//        /// </summary>
+//        [StringLength(256)]
+//        public string ManualDefectNameList
+//        {
+//            get => manualDefectNameList;
+//            set
+//            {
+//                if (manualDefectNameList != value)
+//                {
+//                    manualDefectNameList = value;
+//                    PropertyChanged?.BeginInvoke(this, new PropertyChangedEventArgs("ManualDefectNameList"), null, null);
+//                }
+//            }
+//        }
+
+//        public event PropertyChangedEventHandler PropertyChanged;
+//    }
+//}
diff --git a/src/Bro.M071.Process.Model/Model/OperationRecords.cs b/src/Bro.M071.Process.Model/Model/OperationRecords.cs
new file mode 100644
index 0000000..aaad5ac
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/OperationRecords.cs
@@ -0,0 +1,60 @@
+锘�
+//using System;
+//using System.ComponentModel.DataAnnotations;
+
+//namespace Bro.M071.Process.Model.Model
+//{
+//    public class OperationRecords : BaseModel
+//    {
+//        /// <summary>
+//        /// 鎿嶄綔鍛樼紪鍙�
+//        /// </summary>
+//        [StringLength(64)]
+//        public string UserNO { get; set; }
+
+//        /// <summary>
+//        ///  鎿嶄綔鍛樼敓浜х殑鎵规鍙�
+//        /// </summary>
+//        [StringLength(64)]
+//        public string ProductionBatchNO { get; set; }
+
+//        /// <summary>
+//        /// 鎿嶄綔寮�濮嬫椂闂�
+//        /// </summary>
+//        public DateTime OperationStartTime { get; set; }
+
+//        /// <summary>
+//        /// 鎿嶄綔缁撴潫鏃堕棿
+//        /// </summary>
+//        public DateTime? OperationEndTime { get; set; }
+
+
+//    }
+
+//    public class OperationRecordsRequest : BaseRequest
+//    {
+//        public string UserNO { get; set; }
+//        public string ProductionBatchNO { get; set; }
+//    }
+
+//    public class ProductionStatistics_Dto
+//    {
+
+//        public OperationRecords OperationRecordsRowData { get; set; }
+
+//        public int BatchProductionTotalCount { get; set; }
+
+//        public int BatchProductionOKCount { get; set; }
+
+//        public int BatchProductionNGCount { get; set; }
+
+//        public int BatchProductionTBDCount { get; set; }
+
+//        public bool IsSelected { get; set; }
+
+//        public ProductionStatistics_Dto()
+//        {
+
+//        }
+//    }
+//}
diff --git a/src/Bro.M071.Process.Model/Properties/AssemblyInfo.cs b/src/Bro.M071.Process.Model/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..719162e
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("Bro.Process.Model")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Bro.Process.Model")]
+[assembly: AssemblyCopyright("Copyright 漏  2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("ad645c48-5811-4b1e-b81f-d35d5e6b577f")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+// 鍙互鎸囧畾鎵�鏈夊�硷紝涔熷彲浠ヤ娇鐢ㄤ互涓嬫墍绀虹殑 "*" 棰勭疆鐗堟湰鍙峰拰淇鍙�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Bro.M071.Process.Model/packages.config b/src/Bro.M071.Process.Model/packages.config
new file mode 100644
index 0000000..455fb3e
--- /dev/null
+++ b/src/Bro.M071.Process.Model/packages.config
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="EntityFramework" version="6.4.0" targetFramework="net452" />
+  <package id="SQLite.CodeFirst" version="1.5.3.29" targetFramework="net452" />
+  <package id="System.Data.SQLite" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6.Migrations" version="1.0.106" targetFramework="net452" />
+  <package id="System.Data.SQLite.Linq" version="1.0.112.0" targetFramework="net452" />
+</packages>
\ No newline at end of file
diff --git a/src/Bro.Process.DBManager/App.config b/src/Bro.Process.DBManager/App.config
new file mode 100644
index 0000000..acbf0ea
--- /dev/null
+++ b/src/Bro.Process.DBManager/App.config
@@ -0,0 +1,36 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+  <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite.EF6" />
+      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
+      <remove invariant="System.Data.SQLite" />
+      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
+    </DbProviderFactories>
+  </system.data>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
+    <providers>
+      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+    </providers>
+  </entityFramework>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Data.SQLite.EF6" publicKeyToken="db937bc2d44ff139" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-1.0.112.0" newVersion="1.0.112.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
diff --git a/src/Bro.Process.DBManager/Bro.Process.DBManager.csproj b/src/Bro.Process.DBManager/Bro.Process.DBManager.csproj
new file mode 100644
index 0000000..9ff3b55
--- /dev/null
+++ b/src/Bro.Process.DBManager/Bro.Process.DBManager.csproj
@@ -0,0 +1,102 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" />
+  <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>{65302D6E-9918-4E4C-92B4-75C8830C6BA7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Bro.Process.DBManager</RootNamespace>
+    <AssemblyName>Bro.Process.DBManager</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="SQLite.CodeFirst, Version=1.5.3.29, Culture=neutral, PublicKeyToken=eb96ba0a78d831a7, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\SQLite.CodeFirst.1.5.3.29\lib\net45\SQLite.CodeFirst.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.SQLite, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Core.1.0.112.0\lib\net451\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.1.0.112.0\lib\net451\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6.Migrations, Version=1.0.106.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.EF6.Migrations.1.0.106\lib\System.Data.SQLite.EF6.Migrations.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq, Version=1.0.112.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\System.Data.SQLite.Linq.1.0.112.0\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ModelManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SQLiteHelper.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
+      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
+      <Name>Bro.Common.Model</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
+      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
+      <Name>Bro.Common.Device</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.M071.Process.Model\Bro.M071.Process.Model.csproj">
+      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
+      <Name>Bro.M071.Process.Model</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
+    <Error Condition="!Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets'))" />
+  </Target>
+  <Import Project="..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />
+  <Import Project="..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core.1.0.112.0\build\net451\System.Data.SQLite.Core.targets')" />
+</Project>
\ No newline at end of file
diff --git a/src/Bro.Process.DBManager/ModelManager.cs b/src/Bro.Process.DBManager/ModelManager.cs
new file mode 100644
index 0000000..9c26540
--- /dev/null
+++ b/src/Bro.Process.DBManager/ModelManager.cs
@@ -0,0 +1,113 @@
+锘�//using Bro.Process.Model;
+//using System;
+//using System.Collections.Generic;
+//using System.Configuration;
+//using System.Data.Common;
+//using System.Data.Entity;
+//using System.Data.SQLite;
+//using System.Linq;
+//using System.Reflection;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace Bro.Process.DBManager
+//{
+//    public class ModelManager<T> where T : BaseModel, new()
+//    {
+//        private PropertyInfo TableProperty = null;
+//        public static string ConnectionString = ConfigurationManager.ConnectionStrings["DBModel"].ConnectionString;
+//        public ModelManager()
+//        {
+//            T t = new T();
+//            using (DBModel db = new DBModel())
+//            {
+//                TableProperty = db.GetType().GetProperties().FirstOrDefault(u => u.Name == t.GetType().Name);
+//            }
+//        }
+
+//        public void NewModel(T t, string userId = "")
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ActionBeforeNewModel(context, t);
+
+//                t.SetNew(userId);
+//                (TableProperty.GetValue(context) as DbSet<T>).Add(t);
+
+//                context.SaveChanges();
+//            }
+//        }
+
+//        public void BatchAdd(List<T> t, string userId = "")
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                (TableProperty.GetValue(context) as DbSet<T>).AddRange(t);
+//                context.SaveChanges();
+//            }
+//        }
+
+//        public void UpdateModel(T t, string userId = "")
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ActionBeforeUpdateModel(context, t);
+
+//                DbSet<T> set = TableProperty.GetValue(context) as DbSet<T>;
+//                T oldT = set.FirstOrDefault(u => u.ID == t.ID);
+
+//                oldT.DataTransfer(t);
+//                oldT.SetUpdate(userId);
+//                context.SaveChanges();
+//            }
+//        }
+
+//        public void DeleteModel(string id, bool isDelete = true, string userId = "")
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ActionBeforeDeleteModel(context, id);
+
+//                DbSet<T> set = TableProperty.GetValue(context) as DbSet<T>;
+//                T oldT = set.FirstOrDefault(u => u.ID == id);
+//                oldT.IS_DELETED = isDelete ? 1 : 0;
+//                oldT.SetUpdate(userId);
+
+//                context.SaveChanges();
+//            }
+//        }
+
+//        public void DisableModel(string id, bool isDisable = true, string userId = "")
+//        {
+//            using (DBModel context = new DBModel())
+//            {
+//                ActionBeforeEnableModel(context, id);
+
+//                DbSet<T> set = TableProperty.GetValue(context) as DbSet<T>;
+//                T oldT = set.FirstOrDefault(u => u.ID == id);
+//                oldT.IS_DISABLED = isDisable ? 1 : 0;
+//                oldT.SetUpdate(userId);
+
+//                context.SaveChanges();
+//            }
+//        }
+
+//        #region ""
+//        protected virtual void ActionBeforeNewModel(DBModel context, T t)
+//        {
+//        }
+
+//        protected virtual void ActionBeforeUpdateModel(DBModel context, T t)
+//        {
+//        }
+
+//        protected virtual void ActionBeforeDeleteModel(DBModel context, string id)
+//        {
+//        }
+
+//        protected virtual void ActionBeforeEnableModel(DBModel context, string id)
+//        {
+//        }
+//        #endregion
+//    }
+//}
diff --git a/src/Bro.Process.DBManager/Properties/AssemblyInfo.cs b/src/Bro.Process.DBManager/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8895ef9
--- /dev/null
+++ b/src/Bro.Process.DBManager/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("Bro.Process.DBManager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Bro.Process.DBManager")]
+[assembly: AssemblyCopyright("Copyright 漏  2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("230b0fff-f6af-45fe-aaf7-b4b66250dd58")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+// 鍙互鎸囧畾鎵�鏈夊�硷紝涔熷彲浠ヤ娇鐢ㄤ互涓嬫墍绀虹殑 "*" 棰勭疆鐗堟湰鍙峰拰淇鍙�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Bro.Process.DBManager/SQLiteHelper.cs b/src/Bro.Process.DBManager/SQLiteHelper.cs
new file mode 100644
index 0000000..b439d60
--- /dev/null
+++ b/src/Bro.Process.DBManager/SQLiteHelper.cs
@@ -0,0 +1,614 @@
+
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Data;
+using System.Data.SQLite;
+using System.Configuration;
+
+namespace Bro.Process.DBManager
+{
+    public class SQLiteHelper
+    {
+        //数据库连接字符串 
+        public static string connectionString = ConfigurationManager.ConnectionStrings["DBModel"].ConnectionString;
+
+        public SQLiteHelper() { }
+
+        #region 公用方法
+
+        public static int GetMaxID(string FieldName, string TableName)
+        {
+            string strsql = "select max(" + FieldName + ")+1 from " + TableName;
+            object obj = GetSingle(strsql);
+            if (obj == null)
+            {
+                return 1;
+            }
+            else
+            {
+                return int.Parse(obj.ToString());
+            }
+        }
+
+        public static bool Exists(string strSql)
+        {
+            object obj = GetSingle(strSql);
+            int cmdresult;
+            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
+            {
+                cmdresult = 0;
+            }
+            else
+            {
+                cmdresult = int.Parse(obj.ToString());
+            }
+            if (cmdresult == 0)
+            {
+                return false;
+            }
+            else
+            {
+                return true;
+            }
+        }
+
+        public static bool Exists(string strSql, params SQLiteParameter[] cmdParms)
+        {
+            object obj = GetSingle(strSql, cmdParms);
+            int cmdresult;
+            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
+            {
+                cmdresult = 0;
+            }
+            else
+            {
+                cmdresult = int.Parse(obj.ToString());
+            }
+            if (cmdresult == 0)
+            {
+                return false;
+            }
+            else
+            {
+                return true;
+            }
+        }
+
+        #endregion
+
+        #region 执行简单SQL语句
+
+        /// <summary>
+        /// 执行SQL语句,返回影响的记录数
+        /// </summary>
+        /// <param name="SQLString">SQL语句</param>
+        /// <returns>影响的记录数</returns>
+        public static int ExecuteSql(string SQLString)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
+                {
+                    try
+                    {
+                        connection.Open();
+                        int rows = cmd.ExecuteNonQuery();
+                        return rows;
+                    }
+                    catch (System.Data.SQLite.SQLiteException E)
+                    {
+                        connection.Close();
+                        throw new Exception(E.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行SQL语句,设置命令的执行等待时间
+        /// </summary>
+        /// <param name="SQLString"></param>
+        /// <param name="Times"></param>
+        /// <returns></returns>
+        public static int ExecuteSqlByTime(string SQLString, int Times)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
+                {
+                    try
+                    {
+                        connection.Open();
+                        cmd.CommandTimeout = Times;
+                        int rows = cmd.ExecuteNonQuery();
+                        return rows;
+                    }
+                    catch (System.Data.SQLite.SQLiteException E)
+                    {
+                        connection.Close();
+                        throw new Exception(E.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行多条SQL语句,实现数据库事务。
+        /// </summary>
+        /// <param name="SQLStringList">多条SQL语句</param> 
+        public static bool ExecuteSqlTran(ArrayList SQLStringList)
+        {
+            bool isSuccess = false;
+            using (SQLiteConnection conn = new SQLiteConnection(connectionString))
+            {
+                conn.Open();
+                SQLiteCommand cmd = new SQLiteCommand();
+                cmd.Connection = conn;
+                cmd.CommandText = "PRAGMA synchronous = OFF;";
+                cmd.ExecuteNonQuery();
+                SQLiteTransaction tx = conn.BeginTransaction();
+                cmd.Transaction = tx;
+                try
+                {
+                    for (int n = 0; n < SQLStringList.Count; n++)
+                    {
+                        string strsql = SQLStringList[n].ToString();
+                        if (strsql.Trim().Length > 1)
+                        {
+                            cmd.CommandText = strsql;
+                            cmd.ExecuteNonQuery();
+                        }
+                    }
+                    tx.Commit();
+                    isSuccess = true;
+                }
+                catch (System.Data.SQLite.SQLiteException E)
+                {
+                    tx.Rollback();
+                    isSuccess = false;
+                    throw new Exception(E.Message);
+                }
+            }
+            return isSuccess;
+        }
+
+        /// <summary>
+        /// 执行带一个存储过程参数的的SQL语句。
+        /// </summary>
+        /// <param name="SQLString">SQL语句</param>
+        /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
+        /// <returns>影响的记录数</returns>
+        public static int ExecuteSql(string SQLString, string content)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                SQLiteCommand cmd = new SQLiteCommand(SQLString, connection);
+                SQLiteParameter myParameter = new SQLiteParameter("@content", DbType.String);
+                myParameter.Value = content;
+                cmd.Parameters.Add(myParameter);
+                try
+                {
+                    connection.Open();
+                    int rows = cmd.ExecuteNonQuery();
+                    return rows;
+                }
+                catch (System.Data.SQLite.SQLiteException E)
+                {
+                    throw new Exception(E.Message);
+                }
+                finally
+                {
+                    cmd.Dispose();
+                    connection.Close();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行带一个存储过程参数的的SQL语句。
+        /// </summary>
+        /// <param name="SQLString">SQL语句</param>
+        /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
+        /// <returns>影响的记录数</returns>
+        public static object ExecuteSqlGet(string SQLString, string content)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                SQLiteCommand cmd = new SQLiteCommand(SQLString, connection);
+                SQLiteParameter myParameter = new SQLiteParameter("@content", DbType.String);
+                myParameter.Value = content;
+                cmd.Parameters.Add(myParameter);
+                try
+                {
+                    connection.Open();
+                    object obj = cmd.ExecuteScalar();
+                    if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
+                    {
+                        return null;
+                    }
+                    else
+                    {
+                        return obj;
+                    }
+                }
+                catch (System.Data.SQLite.SQLiteException E)
+                {
+                    throw new Exception(E.Message);
+                }
+                finally
+                {
+                    cmd.Dispose();
+                    connection.Close();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
+        /// </summary>
+        /// <param name="strSQL">SQL语句</param>
+        /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
+        /// <returns>影响的记录数</returns>
+        public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                SQLiteCommand cmd = new SQLiteCommand(strSQL, connection);
+                SQLiteParameter myParameter = new SQLiteParameter("@fs", DbType.Binary);
+                myParameter.Value = fs;
+                cmd.Parameters.Add(myParameter);
+                try
+                {
+                    connection.Open();
+                    int rows = cmd.ExecuteNonQuery();
+                    return rows;
+                }
+                catch (System.Data.SQLite.SQLiteException E)
+                {
+                    throw new Exception(E.Message);
+                }
+                finally
+                {
+                    cmd.Dispose();
+                    connection.Close();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行一条计算查询结果语句,返回查询结果(object)。
+        /// </summary>
+        /// <param name="SQLString">计算查询结果语句</param>
+        /// <returns>查询结果(object)</returns>
+        public static object GetSingle(string SQLString)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
+                {
+                    try
+                    {
+                        connection.Open();
+                        object obj = cmd.ExecuteScalar();
+                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
+                        {
+                            return null;
+                        }
+                        else
+                        {
+                            return obj;
+                        }
+                    }
+                    catch (System.Data.SQLite.SQLiteException e)
+                    {
+                        connection.Close();
+                        throw new Exception(e.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行查询语句,返回SQLiteDataReader(使用该方法切记要手工关闭SQLiteDataReader和连接)
+        /// </summary>
+        /// <param name="strSQL">查询语句</param>
+        /// <returns>SQLiteDataReader</returns>
+        public static SQLiteDataReader ExecuteReader(string strSQL)
+        {
+            SQLiteConnection connection = new SQLiteConnection(connectionString);
+            SQLiteCommand cmd = new SQLiteCommand(strSQL, connection);
+            try
+            {
+                connection.Open();
+                SQLiteDataReader myReader = cmd.ExecuteReader();
+                return myReader;
+            }
+            catch (System.Data.SQLite.SQLiteException e)
+            {
+                throw new Exception(e.Message);
+            }
+            //finally //不能在此关闭,否则,返回的对象将无法使用
+            //{
+            // cmd.Dispose();
+            // connection.Close();
+            //} 
+        }
+
+        /// <summary>
+        /// 执行查询语句,返回DataSet
+        /// </summary>
+        /// <param name="SQLString">查询语句</param>
+        /// <returns>DataSet</returns>
+        public static DataSet Query(string SQLString)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                DataSet ds = new DataSet();
+                try
+                {
+                    connection.Open();
+                    SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
+                    command.Fill(ds, "ds");
+                }
+                catch (System.Data.SQLite.SQLiteException ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                return ds;
+            }
+        }
+
+        public static DataSet Query(string SQLString, string TableName)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                DataSet ds = new DataSet();
+                try
+                {
+                    connection.Open();
+                    SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
+                    command.Fill(ds, TableName);
+                }
+                catch (System.Data.SQLite.SQLiteException ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                return ds;
+            }
+        }
+
+        /// <summary>
+        /// 执行查询语句,返回DataSet,设置命令的执行等待时间
+        /// </summary>
+        /// <param name="SQLString"></param>
+        /// <param name="Times"></param>
+        /// <returns></returns>
+        public static DataSet Query(string SQLString, int Times)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                DataSet ds = new DataSet();
+                try
+                {
+                    connection.Open();
+                    SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
+                    command.SelectCommand.CommandTimeout = Times;
+                    command.Fill(ds, "ds");
+                }
+                catch (System.Data.SQLite.SQLiteException ex)
+                {
+                    throw new Exception(ex.Message);
+                }
+                return ds;
+            }
+        }
+
+        #endregion
+
+        #region 执行带参数的SQL语句
+
+        /// <summary>
+        /// 执行SQL语句,返回影响的记录数
+        /// </summary>
+        /// <param name="SQLString">SQL语句</param>
+        /// <returns>影响的记录数</returns>
+        public static int ExecuteSql(string SQLString, params SQLiteParameter[] cmdParms)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                using (SQLiteCommand cmd = new SQLiteCommand())
+                {
+                    try
+                    {
+                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
+                        int rows = cmd.ExecuteNonQuery();
+                        cmd.Parameters.Clear();
+                        return rows;
+                    }
+                    catch (System.Data.SQLite.SQLiteException E)
+                    {
+                        throw new Exception(E.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行多条SQL语句,实现数据库事务。
+        /// </summary>
+        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SQLiteParameter[])</param>
+        public static void ExecuteSqlTran(Hashtable SQLStringList)
+        {
+            using (SQLiteConnection conn = new SQLiteConnection(connectionString))
+            {
+                conn.Open();
+                using (SQLiteTransaction trans = conn.BeginTransaction())
+                {
+                    SQLiteCommand cmd = new SQLiteCommand();
+                    try
+                    {
+                        //循环
+                        foreach (DictionaryEntry myDE in SQLStringList)
+                        {
+                            string cmdText = myDE.Key.ToString();
+                            SQLiteParameter[] cmdParms = (SQLiteParameter[])myDE.Value;
+                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
+                            int val = cmd.ExecuteNonQuery();
+                            cmd.Parameters.Clear();
+                        }
+                        trans.Commit();
+                    }
+                    catch (System.Data.SQLite.SQLiteException e)
+                    {
+                        trans.Rollback();
+                        throw new Exception(e.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行一条计算查询结果语句,返回查询结果(object)。
+        /// </summary>
+        /// <param name="SQLString">计算查询结果语句</param>
+        /// <returns>查询结果(object)</returns>
+        public static object GetSingle(string SQLString, params SQLiteParameter[] cmdParms)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                using (SQLiteCommand cmd = new SQLiteCommand())
+                {
+                    try
+                    {
+                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
+                        object obj = cmd.ExecuteScalar();
+                        cmd.Parameters.Clear();
+                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
+                        {
+                            return null;
+                        }
+                        else
+                        {
+                            return obj;
+                        }
+                    }
+                    catch (System.Data.SQLite.SQLiteException e)
+                    {
+                        throw new Exception(e.Message);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行查询语句,返回SQLiteDataReader (使用该方法切记要手工关闭SQLiteDataReader和连接)
+        /// </summary>
+        /// <param name="strSQL">查询语句</param>
+        /// <returns>SQLiteDataReader</returns>
+        public static SQLiteDataReader ExecuteReader(string SQLString, params SQLiteParameter[] cmdParms)
+        {
+            SQLiteConnection connection = new SQLiteConnection(connectionString);
+            SQLiteCommand cmd = new SQLiteCommand();
+            try
+            {
+                PrepareCommand(cmd, connection, null, SQLString, cmdParms);
+                SQLiteDataReader myReader = cmd.ExecuteReader();
+                cmd.Parameters.Clear();
+                return myReader;
+            }
+            catch (System.Data.SQLite.SQLiteException e)
+            {
+                throw new Exception(e.Message);
+            }
+            //finally //不能在此关闭,否则,返回的对象将无法使用
+            //{
+            // cmd.Dispose();
+            // connection.Close();
+            //} 
+
+        }
+
+        /// <summary>
+        /// 执行查询语句,返回DataSet
+        /// </summary>
+        /// <param name="SQLString">查询语句</param>
+        /// <returns>DataSet</returns>
+        public static DataSet Query(string SQLString, params SQLiteParameter[] cmdParms)
+        {
+            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
+            {
+                SQLiteCommand cmd = new SQLiteCommand();
+                PrepareCommand(cmd, connection, null, SQLString, cmdParms);
+                using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd))
+                {
+                    DataSet ds = new DataSet();
+                    try
+                    {
+                        da.Fill(ds, "ds");
+                        cmd.Parameters.Clear();
+                    }
+                    catch (System.Data.SQLite.SQLiteException ex)
+                    {
+                        throw new Exception(ex.Message);
+                    }
+                    return ds;
+                }
+            }
+        }
+
+        public static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn,
+        SQLiteTransaction trans, string cmdText, SQLiteParameter[] cmdParms)
+        {
+            if (conn.State != ConnectionState.Open)
+                conn.Open();
+            cmd.Connection = conn;
+            cmd.CommandText = cmdText;
+            if (trans != null)
+                cmd.Transaction = trans;
+            cmd.CommandType = CommandType.Text;//cmdType;
+            if (cmdParms != null)
+            {
+                foreach (SQLiteParameter parameter in cmdParms)
+                {
+                    if ((parameter.Direction == ParameterDirection.InputOutput
+                    || parameter.Direction == ParameterDirection.Input) &&
+                    (parameter.Value == null))
+                    {
+                        parameter.Value = DBNull.Value;
+                    }
+                    cmd.Parameters.Add(parameter);
+                }
+            }
+        }
+
+        #endregion
+
+        #region 参数转换
+        /// <summary>
+        /// 放回一个SQLiteParameter
+        /// </summary>
+        /// <param name="name">参数名字</param>
+        /// <param name="type">参数类型</param>
+        /// <param name="size">参数大小</param>
+        /// <param name="value">参数值</param>
+        /// <returns>SQLiteParameter的值</returns>
+        public static SQLiteParameter MakeSQLiteParameter(string name,
+        DbType type, int size, object value)
+        {
+            SQLiteParameter parm = new SQLiteParameter(name, type, size);
+            parm.Value = value;
+            return parm;
+        }
+
+        public static SQLiteParameter MakeSQLiteParameter(string name, DbType type, object value)
+        {
+            SQLiteParameter parm = new SQLiteParameter(name, type);
+            parm.Value = value;
+            return parm;
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/src/Bro.Process.DBManager/packages.config b/src/Bro.Process.DBManager/packages.config
new file mode 100644
index 0000000..455fb3e
--- /dev/null
+++ b/src/Bro.Process.DBManager/packages.config
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="EntityFramework" version="6.4.0" targetFramework="net452" />
+  <package id="SQLite.CodeFirst" version="1.5.3.29" targetFramework="net452" />
+  <package id="System.Data.SQLite" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.Core" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6" version="1.0.112.0" targetFramework="net452" />
+  <package id="System.Data.SQLite.EF6.Migrations" version="1.0.106" targetFramework="net452" />
+  <package id="System.Data.SQLite.Linq" version="1.0.112.0" targetFramework="net452" />
+</packages>
\ No newline at end of file

--
Gitblit v1.8.0