From 4cb676856f0c791ffcbef569c0ca8195bf8b0938 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期六, 04 七月 2020 18:05:47 +0800
Subject: [PATCH] 数据库操作

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs                                |    8 
 src/Bro.M071.Process.Model/BaseModel.cs                                |  338 ++---
 src/Bro.M071.Process.DBManager/ProductionMeasurementRecordsManager.cs  |   96 +
 src/Bro.UI.Config/MenuForms/FrmOperation.resx                          |    4 
 src/Bro.M071.Process.DBManager/MeasurementAndKeyDataRelationManager.cs |   93 +
 src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj               |    9 
 src/Bro.M071.Process.DBManager/MeasurementUnitResultManager.cs         |   96 +
 src/Bro.M071.Process/M071Process.cs                                    |   10 
 src/Bro.M071.Process.DBManager/ModelManager.cs                         |  108 +
 src/Bro.M071.Process.Model/Bro.M071.Model.csproj                       |   14 
 src/Bro.M071.Process.DBManager/SQLiteHelper.cs                         |  614 ++++++++++
 src/Bro.Process.DBManager/BaseModel.cs                                 |  354 +++---
 src/Bro.Common.Model/Model/MotionCardRelated.cs                        |    4 
 src/Bro.M071.Process.Model/Model/MeasurementUnitResult.cs              |   56 
 src/Bro.M071.Process.Model/Migrations/Configuration.cs                 |   65 
 src/Bro.M071.Process.Model/Model/KeyUnitData.cs                        |   41 
 src/Bro.M071.Process.DBManager/KeyUnitDataManager.cs                   |   95 +
 src/Bro.M071.Process.DBManager/App.config                              |    3 
 src/Bro.Common.Model/Helper/EnumHelper.cs                              |    2 
 src/Bro.M071.Process/App.config                                        |   43 
 src/Bro.Process.DBManager/SQLiteHelper.cs                              | 1160 ++++++++++----------
 /dev/null                                                              |   60 -
 src/Bro.M071.Process.Model/Model/ProductionMeasurementRecords.cs       |   61 +
 src/Bro.M071.Process.Model/DBModel.cs                                  |  108 -
 src/Bro.M071.Process/Bro.M071.Process.csproj                           |    8 
 src/Bro.M071.Process/M071Config.cs                                     |    4 
 src/Bro.M071.Process/M071Models.cs                                     |    4 
 src/Bro.M071.Process.Model/Model/MeasurementAndKeyDataRelation.cs      |   22 
 28 files changed, 2,363 insertions(+), 1,117 deletions(-)

diff --git a/src/Bro.Common.Model/Helper/EnumHelper.cs b/src/Bro.Common.Model/Helper/EnumHelper.cs
index 703be4a..a9cf25a 100644
--- a/src/Bro.Common.Model/Helper/EnumHelper.cs
+++ b/src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -447,7 +447,7 @@
         /// <summary>
         /// 椹揪/杩愬姩鏉垮崱杩愯妯″紡
         /// </summary>
-        public enum MotorMoveMode
+        public enum MotionMode
         {
             /// <summary>
             /// 鏅�氱偣浣嶈繍鍔�
diff --git a/src/Bro.Common.Model/Model/MotionCardRelated.cs b/src/Bro.Common.Model/Model/MotionCardRelated.cs
index a285cdc..0e5d746 100644
--- a/src/Bro.Common.Model/Model/MotionCardRelated.cs
+++ b/src/Bro.Common.Model/Model/MotionCardRelated.cs
@@ -216,11 +216,11 @@
             }
         }
 
-        private MotorMoveMode moveMode = MotorMoveMode.Normal;
+        private MotionMode moveMode = MotionMode.Normal;
         [Category("杩愬姩閰嶇疆")]
         [DisplayName("杩愬姩妯″紡")]
         [Description("MoveMode锛氳繍鍔ㄦā寮�")]
-        public MotorMoveMode MoveMode
+        public MotionMode MoveMode
         {
             get => moveMode;
             set
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index f2c0343..3d06c3f 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -323,13 +323,13 @@
                     if (IConfig.AxisSettings.FirstOrDefault(a => a.AxisIndex == optionPara.AxisIndex)?.IsAxisEnabled ?? false)
                     {
                         string _position = "";
-                        string motionType = optionPara.MoveMode == EnumHelper.MotorMoveMode.Normal ? (optionPara.IsAbsolute ? "Abs" : "Rel") : optionPara.MoveMode.ToString();
+                        string motionType = optionPara.MoveMode == EnumHelper.MotionMode.Normal ? (optionPara.IsAbsolute ? "Abs" : "Rel") : optionPara.MoveMode.ToString();
 
                         _position = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff},{optionPara.AxisIndex},{motionType},{GetPosition(optionPara.AxisIndex)},{GetPrfPosition(optionPara.AxisIndex)},{optionPara.Destination},";
 
                         switch (optionPara.MoveMode)
                         {
-                            case MotorMoveMode.Normal:
+                            case MotionMode.Normal:
                                 {
                                     if (_isResetting)
                                     {
@@ -348,12 +348,12 @@
 
                                 }
                                 break;
-                            case MotorMoveMode.FindOri:
+                            case MotionMode.FindOri:
                                 {
                                     isSuccessAndStop = GoHome(optionPara);
                                 }
                                 break;
-                            case MotorMoveMode.Jog:
+                            case MotionMode.Jog:
                                 {
                                     isSuccessAndStop = JogMove(optionPara);
                                 }
diff --git a/src/Bro.M071.Process.DBManager/App.config b/src/Bro.M071.Process.DBManager/App.config
index 1c8faee..a23edd3 100644
--- a/src/Bro.M071.Process.DBManager/App.config
+++ b/src/Bro.M071.Process.DBManager/App.config
@@ -1,9 +1,6 @@
 锘�<?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>
diff --git a/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj b/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
index 5bb2a9a..92dae28 100644
--- a/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
+++ b/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
@@ -107,10 +107,13 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ProductionDetectionImageRecordsManager.cs" />
-    <Compile Include="ProductionDetectionRecordsDetailManager.cs" />
-    <Compile Include="ProductionDetectionRecordsManager.cs" />
+    <Compile Include="KeyUnitDataManager.cs" />
+    <Compile Include="MeasurementAndKeyDataRelationManager.cs" />
+    <Compile Include="ModelManager.cs" />
+    <Compile Include="ProductionMeasurementRecordsManager.cs" />
+    <Compile Include="MeasurementUnitResultManager.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SQLiteHelper.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
diff --git a/src/Bro.M071.Process.DBManager/KeyUnitDataManager.cs b/src/Bro.M071.Process.DBManager/KeyUnitDataManager.cs
new file mode 100644
index 0000000..2b246c7
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/KeyUnitDataManager.cs
@@ -0,0 +1,95 @@
+锘縰sing Bro.Common.Helper;
+using Bro.M071.Model;
+using Bro.M071.Model.Model;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.SQLite;
+using System.Linq;
+using System.Text;
+
+namespace Bro.M071.DBManager
+{
+    public class KeyUnitDataManager : ModelManager<KeyUnitData>
+    {
+        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+        protected override void ActionBeforeNewModel(DBModel context, KeyUnitData config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        protected override void ActionBeforeUpdateModel(DBModel context, KeyUnitData config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        private void CheckProductionCodeDuplicate(DBModel context, KeyUnitData config)
+        {
+        }
+
+        public List<KeyUnitData> GetKeyUnitData()
+        {
+            using (DBModel context = new DBModel())
+            {
+                var list = context.KeyUnitData.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 void BatchAddKeyUnitData(List<KeyUnitData> records)
+        {
+            try
+            {
+                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+                {
+                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+                    {
+                        StringBuilder strSql = new StringBuilder();
+                        strSql.Append("insert into KeyUnitData (");
+                        strSql.Append("ID,ProductionMeasurementRecordsId,Key,MeasurementItem,ItemValue,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+                        strSql.Append(")values (");
+                        strSql.Append("@ID,@ProductionMeasurementRecordsId,@Key,@MeasurementItem,@ItemValue,@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("@ProductionMeasurementRecordsId", record.ProductionMeasurementRecordsId);
+                            insertRngCmd.Parameters.AddWithValue("@Key", record.Key);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementItem", record.MeasurementItem);
+                            insertRngCmd.Parameters.AddWithValue("@ItemValue", record.ItemValue);
+                            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);
+            }
+        }
+    }
+}
diff --git a/src/Bro.M071.Process.DBManager/MeasurementAndKeyDataRelationManager.cs b/src/Bro.M071.Process.DBManager/MeasurementAndKeyDataRelationManager.cs
new file mode 100644
index 0000000..8a368a5
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/MeasurementAndKeyDataRelationManager.cs
@@ -0,0 +1,93 @@
+锘縰sing Bro.Common.Helper;
+using Bro.M071.Model;
+using Bro.M071.Model.Model;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.SQLite;
+using System.Linq;
+using System.Text;
+
+namespace Bro.M071.DBManager
+{
+    public class MeasurementAndKeyDataRelationManager : ModelManager<MeasurementAndKeyDataRelation>
+    {
+        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+        protected override void ActionBeforeNewModel(DBModel context, MeasurementAndKeyDataRelation config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        protected override void ActionBeforeUpdateModel(DBModel context, MeasurementAndKeyDataRelation config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        private void CheckProductionCodeDuplicate(DBModel context, MeasurementAndKeyDataRelation config)
+        {
+        }
+
+        public List<MeasurementAndKeyDataRelation> GetMeasurementAndKeyDataRelation()
+        {
+            using (DBModel context = new DBModel())
+            {
+                var list = context.MeasurementAndKeyDataRelation.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 void BatchAddMeasurementAndKeyDataRelation(List<MeasurementAndKeyDataRelation> records)
+        {
+            try
+            {
+                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+                {
+                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+                    {
+                        StringBuilder strSql = new StringBuilder();
+                        strSql.Append("insert into MeasurementAndKeyDataRelation (");
+                        strSql.Append("ID,KeyUnitDataId,MeasurementUnitResultId,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+                        strSql.Append(")values (");
+                        strSql.Append("@ID,@KeyUnitDataId,@MeasurementUnitResultId,@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("@KeyUnitDataId", record.KeyUnitDataId);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementUnitResultId", record.MeasurementUnitResultId);
+                            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);
+            }
+        }
+    }
+}
diff --git a/src/Bro.M071.Process.DBManager/MeasurementUnitResultManager.cs b/src/Bro.M071.Process.DBManager/MeasurementUnitResultManager.cs
new file mode 100644
index 0000000..6e7a08e
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/MeasurementUnitResultManager.cs
@@ -0,0 +1,96 @@
+锘縰sing Bro.Common.Helper;
+using Bro.M071.Model;
+using Bro.M071.Model.Model;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.SQLite;
+using System.Linq;
+using System.Text;
+
+namespace Bro.M071.DBManager
+{
+    public class MeasurementUnitResultManager : ModelManager<MeasurementUnitResult>
+    {
+        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+        protected override void ActionBeforeNewModel(DBModel context, MeasurementUnitResult config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        protected override void ActionBeforeUpdateModel(DBModel context, MeasurementUnitResult config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        private void CheckProductionCodeDuplicate(DBModel context, MeasurementUnitResult config)
+        {
+        }
+
+        public List<MeasurementUnitResult> GetMeasurementUnitResult()
+        {
+            using (DBModel context = new DBModel())
+            {
+                var list = context.MeasurementUnitResult.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 void BatchAddMeasurementUnitResult(List<MeasurementUnitResult> records)
+        {
+            try
+            {
+                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+                {
+                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+                    {
+                        StringBuilder strSql = new StringBuilder();
+                        strSql.Append("insert into MeasurementUnitResult (");
+                        strSql.Append("ID,ProductionMeasurementRecordsId,MeasurementName,MeasurementType,MeasurementValue,MeasurementResult,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+                        strSql.Append(")values (");
+                        strSql.Append("@ID,@ProductionMeasurementRecordsId,@MeasurementName,@MeasurementType,@MeasurementValue,@MeasurementResult,@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("@ProductionMeasurementRecordsId", record.ProductionMeasurementRecordsId);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementName", record.MeasurementName);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementType", record.MeasurementType);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementValue", record.MeasurementValue);
+                            insertRngCmd.Parameters.AddWithValue("@MeasurementResult", record.MeasurementResult);
+                            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);
+            }
+        }
+    }
+}
diff --git a/src/Bro.M071.Process.DBManager/ModelManager.cs b/src/Bro.M071.Process.DBManager/ModelManager.cs
new file mode 100644
index 0000000..91aa2be
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/ModelManager.cs
@@ -0,0 +1,108 @@
+锘縰sing Bro.M071.Model;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data.Entity;
+using System.Linq;
+using System.Reflection;
+
+namespace Bro.M071.DBManager
+{
+    public class ModelManager<T> where T : BaseModel, new()
+    {
+        private PropertyInfo TableProperty = null;
+        public static string ConnectionString = ConfigurationManager.ConnectionStrings["DataBase"].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 CreateModel(T t, string userId = "")
+        {
+            using (DBModel context = new DBModel())
+            {
+                ActionBeforeNewModel(context, t);
+
+                t.Create(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.Update(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.Update(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.Update(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.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs b/src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs
deleted file mode 100644
index 65e6fa5..0000000
--- a/src/Bro.M071.Process.DBManager/ProductionDetectionImageRecordsManager.cs
+++ /dev/null
@@ -1,303 +0,0 @@
-锘�////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.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
deleted file mode 100644
index bd40c8a..0000000
--- a/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsDetailManager.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-锘�////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.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
deleted file mode 100644
index 9e2876e..0000000
--- a/src/Bro.M071.Process.DBManager/ProductionDetectionRecordsManager.cs
+++ /dev/null
@@ -1,305 +0,0 @@
-锘�////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.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/ProductionMeasurementRecordsManager.cs b/src/Bro.M071.Process.DBManager/ProductionMeasurementRecordsManager.cs
new file mode 100644
index 0000000..0551fda
--- /dev/null
+++ b/src/Bro.M071.Process.DBManager/ProductionMeasurementRecordsManager.cs
@@ -0,0 +1,96 @@
+锘縰sing Bro.Common.Helper;
+using Bro.M071.Model;
+using Bro.M071.Model.Model;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.SQLite;
+using System.Linq;
+using System.Text;
+
+namespace Bro.M071.DBManager
+{
+    public class ProductionMeasurementRecordsManager : ModelManager<ProductionMeasurementRecords>
+    {
+        DbProviderFactory Dbfactory = SQLiteFactory.Instance;
+        protected override void ActionBeforeNewModel(DBModel context, ProductionMeasurementRecords config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        protected override void ActionBeforeUpdateModel(DBModel context, ProductionMeasurementRecords config)
+        {
+            CheckProductionCodeDuplicate(context, config);
+        }
+
+        private void CheckProductionCodeDuplicate(DBModel context, ProductionMeasurementRecords config)
+        {
+        }
+
+        public List<ProductionMeasurementRecords> GetProductionMeasurementRecords()
+        {
+            using (DBModel context = new DBModel())
+            {
+                var list = context.ProductionMeasurementRecords.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 void BatchAddProductionMeasurementRecords(List<ProductionMeasurementRecords> records)
+        {
+            try
+            {
+                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
+                {
+                    using (SQLiteCommand insertRngCmd = (SQLiteCommand)conn.CreateCommand())
+                    {
+                        StringBuilder strSql = new StringBuilder();
+                        strSql.Append("insert into ProductionMeasurementRecords (");
+                        strSql.Append("ID,ProductionCode,ProductionBarcode,ProductionResult,OperationStartTime,OperationEndTime,IS_DISABLED,IS_DELETED,CREATE_USER,CREATE_TIME, UPDATE_USER,UPDATE_TIME");
+                        strSql.Append(")values (");
+                        strSql.Append("@ID,@ProductionCode,@ProductionBarcode,@ProductionResult,@OperationStartTime,@OperationEndTime,@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("@ProductionCode", record.ProductionCode);
+                            insertRngCmd.Parameters.AddWithValue("@ProductionBarcode", record.ProductionBarcode);
+                            insertRngCmd.Parameters.AddWithValue("@ProductionResult", record.ProductionResult);
+                            insertRngCmd.Parameters.AddWithValue("@OperationStartTime", record.OperationStartTime);
+                            insertRngCmd.Parameters.AddWithValue("@OperationEndTime", record.OperationEndTime);
+                            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);
+            }
+        }
+    }
+}
diff --git a/src/Bro.M071.Process.DBManager/SQLiteHelper.cs b/src/Bro.M071.Process.DBManager/SQLiteHelper.cs
new file mode 100644
index 0000000..6da6230
--- /dev/null
+++ b/src/Bro.M071.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.DataBase
+{
+    public class SQLiteHelper
+    {
+        //数据库连接字符串 
+        public static string connectionString = ConfigurationManager.ConnectionStrings["DataBase"].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.M071.Process.Model/BaseModel.cs b/src/Bro.M071.Process.Model/BaseModel.cs
index 8fee642..559cbf4 100644
--- a/src/Bro.M071.Process.Model/BaseModel.cs
+++ b/src/Bro.M071.Process.Model/BaseModel.cs
@@ -1,201 +1,179 @@
-锘�//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;
+锘縰sing Bro.Common.Helper;
+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.Model
-//{
-//    public class BaseModel
-//    {
-//        /// <summary>
-//        /// 缂栧彿锛屽敮涓�鍊�,浣跨敤GUID
-//        /// </summary>
-//        [Key]
-//        [Required(ErrorMessage = "缂栧彿涓嶅彲涓虹┖锛�")]
-//        [StringLength(50)]
-//        public string ID { get; set; } = Guid.NewGuid().ToString().ToUpper();
+namespace Bro.M071.Model
+{
+    public class BaseModel
+    {
+        /// <summary>
+        /// 缂栧彿锛屽敮涓�鍊�,浣跨敤GUID
+        /// </summary>
+        [Key]
+        [Required(ErrorMessage = "缂栧彿涓嶅彲涓虹┖锛�")]
+        [StringLength(64)]
+        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_DISABLED { get; set; } = 0;
 
-//        /// <summary>
-//        /// 鍒犻櫎鐘舵�� 0 鏈垹闄� 1 宸插垹闄�
-//        /// </summary>
-//        [Required]
-//        public int IS_DELETED { 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]
+        [StringLength(64)]
+        public string CREATE_USER { get; set; }
 
-//        /// <summary>
-//        /// 鍒涘缓鏃堕棿
-//        /// </summary>
-//        //[Required]
-//        public DateTime? CREATE_TIME { get; set; } = DateTime.Now;
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CREATE_TIME { get; set; } = DateTime.Now;
 
-//        /// <summary>
-//        /// 鏇存柊浜轰俊鎭�
-//        /// </summary>
-//        [StringLength(50)]
-//        public string UPDATE_USER { get; set; }
+        /// <summary>
+        /// 鏇存柊浜轰俊鎭�
+        /// </summary>
+        [StringLength(64)]
+        public string UPDATE_USER { get; set; }
 
-//        /// <summary>
-//        /// 鏇存柊鏃堕棿
-//        /// </summary>
-//        public DateTime? UPDATE_TIME { 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 class BaseModelHelper
+    {
+        public static void Create<T>(this T t, string userId) where T : BaseModel
+        {
+            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;
-//        }
+        public static void Update<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);
-//        }
+        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();
+        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();
+        }
+    }
 
-//            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 class BaseRequest : INotifyPropertyChanged
+    {
 
-//        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();
-//        }
-//    }
+        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);
+                }
+            }
+        }
 
-//    public class BaseRequest : INotifyPropertyChanged
-//    {
+        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);
+                }
+            }
+        }
 
-//        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);
-//                }
-//            }
-//        }
+        /// <summary>
+        /// 鏌ヨ璧峰鏃堕棿
+        /// </summary>
+        public DateTime? StartTime { get; set; }
 
-//        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? EndTime { get; set; }
 
-//        /// <summary>
-//        /// 鏌ヨ璧峰鏃堕棿
-//        /// </summary>
-//        public DateTime? StartTime { get; set; }
+        /// <summary>
+        /// 鍚敤鐘舵�佽繃婊ゅ櫒 1锛氫粎鏈惎鐢� 0锛氫粎鍚敤 -1锛氬叏閮�
+        /// </summary>
+        public int DisableFilter { get; set; } = 0;
 
-//        /// <summary>
-//        /// 鏌ヨ缁撴潫鏃堕棿
-//        /// </summary>
-//        public DateTime? EndTime { get; set; }
+        /// <summary>
+        /// 鏌ヨ瀛楃涓�
+        /// </summary>
+        public string SearchTxt { get; set; }
 
-//        /// <summary>
-//        /// 鍚敤鐘舵�佽繃婊ゅ櫒 1锛氫粎鏈惎鐢� 0锛氫粎鍚敤 -1锛氬叏閮�
-//        /// </summary>
-//        public int DisableFilter { get; set; } = 0;
+        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);
+            }
+        }
 
-//        /// <summary>
-//        /// 鏌ヨ瀛楃涓�
-//        /// </summary>
-//        public string SearchTxt { get; set; }
+        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);
+                }
+            }
+        }
 
-//        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;
-//    }
-//}
+        public event PropertyChangedEventHandler PropertyChanged;
+    }
+}
diff --git a/src/Bro.M071.Process.Model/Bro.M071.Model.csproj b/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
index 6b7c29c..f867809 100644
--- a/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
+++ b/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
@@ -109,9 +109,10 @@
     <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="Model\KeyUnitData.cs" />
+    <Compile Include="Model\MeasurementUnitResult.cs" />
+    <Compile Include="Model\ProductionMeasurementRecords.cs" />
+    <Compile Include="Model\MeasurementAndKeyDataRelation.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -121,7 +122,12 @@
     </None>
     <None Include="packages.config" />
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
+      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
+      <Name>Bro.Common.Model</Name>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>
diff --git a/src/Bro.M071.Process.Model/DBModel.cs b/src/Bro.M071.Process.Model/DBModel.cs
index d660664..bdf5f07 100644
--- a/src/Bro.M071.Process.Model/DBModel.cs
+++ b/src/Bro.M071.Process.Model/DBModel.cs
@@ -1,67 +1,53 @@
-锘�//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;
+锘縰sing Bro.M071.Model.Migrations;
+using Bro.M071.Model.Model;
+using System.Data.Entity;
+using System.Data.Entity.ModelConfiguration.Conventions;
 
-//namespace Bro.M071.Model
-//{
-//    public class DBModel : DbContext
-//    {
-//        //鎮ㄧ殑涓婁笅鏂囧凡閰嶇疆涓轰粠鎮ㄧ殑搴旂敤绋嬪簭鐨勯厤缃枃浠�(App.config 鎴� Web.config)
-//        //浣跨敤鈥淒BModel鈥濊繛鎺ュ瓧绗︿覆銆傞粯璁ゆ儏鍐典笅锛屾杩炴帴瀛楃涓查拡瀵规偍鐨� LocalDb 瀹炰緥涓婄殑
-//        //鈥淏ro.Process.Model.DBModel鈥濇暟鎹簱銆�
-//        // 
-//        //濡傛灉鎮ㄦ兂瑕侀拡瀵瑰叾浠栨暟鎹簱鍜�/鎴栨暟鎹簱鎻愪緵绋嬪簭锛岃鍦ㄥ簲鐢ㄧ▼搴忛厤缃枃浠朵腑淇敼鈥淒BModel鈥�
-//        //杩炴帴瀛楃涓层��
-//        public DBModel()
-//            : base("name=DataBase")
-//        {
-//            ////鏁版嵁搴撹縼绉绘鏌ユ殏鏃舵斁鍦ㄦ瀯閫犲嚱鏁颁腑锛屽洖澶翠細鏀惧埌绋嬪簭鍒濆鍖栦腑
-//            //Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
-//        }
+namespace Bro.M071.Model
+{
+    public class DBModel : DbContext
+    {
+        //鎮ㄧ殑涓婁笅鏂囧凡閰嶇疆涓轰粠鎮ㄧ殑搴旂敤绋嬪簭鐨勯厤缃枃浠�(App.config 鎴� Web.config)
+        //浣跨敤鈥淒BModel鈥濊繛鎺ュ瓧绗︿覆銆傞粯璁ゆ儏鍐典笅锛屾杩炴帴瀛楃涓查拡瀵规偍鐨� LocalDb 瀹炰緥涓婄殑
+        //鈥淏ro.Process.Model.DBModel鈥濇暟鎹簱銆�
+        // 
+        //濡傛灉鎮ㄦ兂瑕侀拡瀵瑰叾浠栨暟鎹簱鍜�/鎴栨暟鎹簱鎻愪緵绋嬪簭锛岃鍦ㄥ簲鐢ㄧ▼搴忛厤缃枃浠朵腑淇敼鈥淒BModel鈥�
+        //杩炴帴瀛楃涓层��
+        public DBModel()
+            : base("name=DataBase")
+        {
+            ////鏁版嵁搴撹縼绉绘鏌ユ殏鏃舵斁鍦ㄦ瀯閫犲嚱鏁颁腑锛屽洖澶翠細鏀惧埌绋嬪簭鍒濆鍖栦腑
+            //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; }
+        //涓烘偍瑕佸湪妯″瀷涓寘鍚殑姣忕瀹炰綋绫诲瀷閮芥坊鍔� DbSet銆傛湁鍏抽厤缃拰浣跨敤 Code First  妯″瀷
+        //鐨勮缁嗕俊鎭紝璇峰弬闃� http://go.microsoft.com/fwlink/?LinkId=390109銆�
 
 
-//        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; }
+        public virtual DbSet<KeyUnitData> KeyUnitData { get; set; }
+        public virtual DbSet<MeasurementAndKeyDataRelation> MeasurementAndKeyDataRelation { get; set; }
+        public virtual DbSet<MeasurementUnitResult> MeasurementUnitResult { get; set; }
+        public virtual DbSet<ProductionMeasurementRecords> ProductionMeasurementRecords { get; set; }
 
-//        protected override void OnModelCreating(DbModelBuilder modelBuilder)
-//        {
-//            //base.OnModelCreating(modelBuilder);
+        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+        {
+            //base.OnModelCreating(modelBuilder);
+            #region for sqlite db
+            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
+            modelBuilder.Configurations.AddFromAssembly(typeof(DBModel).Assembly);
+            #endregion
+        }
+    }
 
-//            #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
+    public static class DatabaseInitialize
+    {
+        public static void Initialize()
+        {
+            Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBModel, Configuration>());
+            using (DbContext dbContext = new DBModel())
+            {
+                dbContext.Database.Initialize(true);
+            }
+        }
+    }
+}
\ 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
index 7fbf72b..90bcb83 100644
--- a/src/Bro.M071.Process.Model/Migrations/Configuration.cs
+++ b/src/Bro.M071.Process.Model/Migrations/Configuration.cs
@@ -1,37 +1,36 @@
-//namespace Bro.M071.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;
+using System.Data.Entity.Migrations;
+using System.Data.SQLite.EF6.Migrations;
 
-//            #region for sqlite db
-//            SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());
-//            #endregion
-//        }
+namespace Bro.M071.Model.Migrations
+{
 
-//        protected override void Seed(Bro.Process.Model.DBModel context)
-//        {
-//            //  This method will be called after migrating to the latest version.
+    public sealed class Configuration : DbMigrationsConfiguration<DBModel>
+    {
+        public Configuration()
+        {
+            AutomaticMigrationsEnabled = true;
+            AutomaticMigrationDataLossAllowed = true;
 
-//            //  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" }
-//            //    );
-//            //
-//        }
-//    }
-//}
+            #region for sqlite db
+            SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());
+            #endregion
+        }
+
+        protected override void Seed(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
deleted file mode 100644
index 4592699..0000000
--- a/src/Bro.M071.Process.Model/Model/EventTimeRecords.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-锘�
-//using System;
-//using System.ComponentModel.DataAnnotations;
-
-//namespace Bro.M071.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/KeyUnitData.cs b/src/Bro.M071.Process.Model/Model/KeyUnitData.cs
new file mode 100644
index 0000000..ccea504
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/KeyUnitData.cs
@@ -0,0 +1,41 @@
+锘�
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Bro.M071.Model.Model
+{
+    /// <summary>
+    /// 閿崟鍏� 鐨勬娴嬬粨鏋�
+    /// </summary>
+    public class KeyUnitData : BaseModel
+    {
+        /// <summary>
+        /// 浜у搧娴嬮噺璁板綍Id
+        /// </summary>
+        [StringLength(64)]
+        public string ProductionMeasurementRecordsId { get; set; }
+
+        /// <summary>
+        /// 閿崟鍏�
+        /// </summary>
+        [StringLength(64)]
+        public string Key { get; set; }
+
+        /// <summary>
+        /// 妫�娴嬮」
+        /// </summary>
+        [StringLength(64)]
+        public string MeasurementItem { get; set; }
+
+        /// <summary>
+        /// 璇ラ敭 妫�娴嬮」 鐨勫��
+        /// </summary>
+        [StringLength(64)]
+        public string ItemValue { get; set; }
+    }
+
+    public class KeyUnitDataRequest : BaseRequest
+    {
+    }
+
+}
diff --git a/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs b/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs
deleted file mode 100644
index 2cc54a7..0000000
--- a/src/Bro.M071.Process.Model/Model/ManualDetectionRecords.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-锘�//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.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/MeasurementAndKeyDataRelation.cs b/src/Bro.M071.Process.Model/Model/MeasurementAndKeyDataRelation.cs
new file mode 100644
index 0000000..345be66
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/MeasurementAndKeyDataRelation.cs
@@ -0,0 +1,22 @@
+锘�
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Bro.M071.Model.Model
+{
+    public class MeasurementAndKeyDataRelation : BaseModel
+    {
+        /// <summary>
+        /// 閿崟鍏� 鐨勬娴嬬粨鏋� id
+        /// </summary>
+        [StringLength(64)]
+        public string KeyUnitDataId { get; set; }
+
+        /// <summary>
+        ///  妫�娴嬬粨鏋� id
+        /// </summary>
+        [StringLength(64)]
+        public string MeasurementUnitResultId { get; set; }
+    }
+
+}
diff --git a/src/Bro.M071.Process.Model/Model/MeasurementUnitResult.cs b/src/Bro.M071.Process.Model/Model/MeasurementUnitResult.cs
new file mode 100644
index 0000000..955f8a0
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/MeasurementUnitResult.cs
@@ -0,0 +1,56 @@
+锘�
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Bro.M071.Model.Model
+{
+    /// <summary>
+    /// 妫�娴嬬粨鏋�
+    /// </summary>
+    public class MeasurementUnitResult : BaseModel
+    {
+        /// <summary>
+        /// 浜у搧娴嬮噺璁板綍Id
+        /// </summary>
+        [StringLength(64)]
+        public string ProductionMeasurementRecordsId { get; set; }
+
+        /// <summary>
+        /// 妫�娴嬪悕绉�
+        /// </summary>
+        [StringLength(64)]
+        public string MeasurementName { get; set; }
+
+        /// <summary>
+        ///  妫�娴嬬粨鏋滅被鍨� (Slant Alignment... )
+        /// </summary>
+        [StringLength(64)] 
+        public string MeasurementType { get; set; }
+
+        /// <summary>
+        ///  妫�娴嬬粨鏋滃��
+        /// </summary>
+        [StringLength(64)]
+        public string MeasurementValue { get; set; }
+
+        /// <summary>
+        ///  妫�娴嬬粨鏋� ok ng
+        /// </summary>
+        [StringLength(64)]
+        public string MeasurementResult { get; set; }
+    }
+
+    public class MeasurementUnitResultRequest : BaseRequest
+    {
+        /// <summary>
+        /// 妫�娴嬪悕绉�
+        /// </summary>
+        public string MeasurementName { get; set; }
+
+        /// <summary>
+        ///  妫�娴嬪拰鏍囧噯绫诲瀷
+        /// </summary>
+        public string MeasureType { get; set; }
+    }
+
+}
diff --git a/src/Bro.M071.Process.Model/Model/OperationRecords.cs b/src/Bro.M071.Process.Model/Model/OperationRecords.cs
deleted file mode 100644
index ce07827..0000000
--- a/src/Bro.M071.Process.Model/Model/OperationRecords.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-锘�
-//using System;
-//using System.ComponentModel.DataAnnotations;
-
-//namespace Bro.M071.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/Model/ProductionMeasurementRecords.cs b/src/Bro.M071.Process.Model/Model/ProductionMeasurementRecords.cs
new file mode 100644
index 0000000..ab65e8b
--- /dev/null
+++ b/src/Bro.M071.Process.Model/Model/ProductionMeasurementRecords.cs
@@ -0,0 +1,61 @@
+锘�
+using System;
+using System.ComponentModel.DataAnnotations;
+using static Bro.Common.Helper.EnumHelper;
+
+namespace Bro.M071.Model.Model
+{
+    /// <summary>
+    /// 浜у搧娴嬮噺璁板綍
+    /// </summary>
+    public class ProductionMeasurementRecords : BaseModel
+    {
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        [StringLength(64)]
+        public string ProductionCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧鏉$爜
+        /// </summary>
+        [StringLength(64)]
+        public string ProductionBarcode { get; set; }
+
+        /// <summary>
+        ///  浜у搧缁撴灉 ok  ng
+        /// </summary>
+        [StringLength(64)]
+        public string ProductionResult { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime OperationStartTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔缁撴潫鏃堕棿
+        /// </summary>
+        public DateTime OperationEndTime { get; set; }
+
+    }
+
+    public class ProductionMeasurementRecordsRequest : BaseRequest
+    {
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        public string ProductionCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧鏉$爜
+        /// </summary>
+        public string ProductionBarcode { get; set; }
+
+        /// <summary>
+        ///  浜у搧缁撴灉
+        /// </summary>
+        public OutputResult ProductionResult { get; set; }
+    }
+
+}
diff --git a/src/Bro.M071.Process/App.config b/src/Bro.M071.Process/App.config
new file mode 100644
index 0000000..274ca45
--- /dev/null
+++ b/src/Bro.M071.Process/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="DataBase" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=Bro.Process.Model.DBModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />-->
+    <add name="DataBase" 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/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj
index e251945..df07580 100644
--- a/src/Bro.M071.Process/Bro.M071.Process.csproj
+++ b/src/Bro.M071.Process/Bro.M071.Process.csproj
@@ -138,6 +138,10 @@
     <EmbeddedResource Include="UI\M071_MainForm.resx">
       <DependentUpon>M071_MainForm.cs</DependentUpon>
     </EmbeddedResource>
+    <None Include="App.config">
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
@@ -158,6 +162,10 @@
       <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
       <Name>Bro.Common.Model</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Bro.M071.Process.Model\Bro.M071.Model.csproj">
+      <Project>{AD645C48-5811-4B1E-B81F-D35D5E6B577F}</Project>
+      <Name>Bro.M071.Model</Name>
+    </ProjectReference>
     <ProjectReference Include="..\Bro.Process\Bro.Process.csproj">
       <Project>{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}</Project>
       <Name>Bro.Process</Name>
diff --git a/src/Bro.M071.Process/M071Config.cs b/src/Bro.M071.Process/M071Config.cs
index aa06147..cdee3bc 100644
--- a/src/Bro.M071.Process/M071Config.cs
+++ b/src/Bro.M071.Process/M071Config.cs
@@ -64,8 +64,8 @@
         [Category("妫�娴嬭缃�")]
         [Description("妫�娴嬮厤缃泦鍚�")]
         [TypeConverter(typeof(CollectionCountConvert))]
-        [Editor(typeof(ComplexCollectionEditor<MeasurementUint>), typeof(UITypeEditor))]
-        public List<MeasurementUint> MeasurementUnitCollection { get; set; } = new List<MeasurementUint>();
+        [Editor(typeof(ComplexCollectionEditor<MeasurementUnit>), typeof(UITypeEditor))]
+        public List<MeasurementUnit> MeasurementUnitCollection { get; set; } = new List<MeasurementUnit>();
 
         [Category("鍥剧墖淇濆瓨閰嶇疆")]
         [Description("鍗曢敭鍥剧墖淇濆瓨閰嶇疆")]
diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs
index a5c4137..b00d4d8 100644
--- a/src/Bro.M071.Process/M071Models.cs
+++ b/src/Bro.M071.Process/M071Models.cs
@@ -205,7 +205,7 @@
     {
         public string Barcode;
 
-        public List<MeasurementUint> Measurements = new List<MeasurementUint>();
+        public List<MeasurementUnit> Measurements = new List<MeasurementUnit>();
 
         public List<IShapeElement> ElementList = new List<IShapeElement>();
 
@@ -235,7 +235,7 @@
         }
     }
 
-    public class MeasurementUint : IComplexDisplay, INotifyPropertyChanged, IDisposable
+    public class MeasurementUnit : IComplexDisplay, INotifyPropertyChanged, IDisposable
     {
         public string Id = Guid.NewGuid().ToString();
 
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 65f74a9..f76d19a 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -2,6 +2,7 @@
 using Bro.Common.Helper;
 using Bro.Common.Interface;
 using Bro.Common.Model;
+using Bro.M071.Model;
 using Bro.Process;
 using HalconDotNet;
 using System;
@@ -56,6 +57,9 @@
 
         private void InitialSetting()
         {
+            //鏁版嵁搴撹縼绉绘鏌�
+            DatabaseInitialize.Initialize();
+
             Config.SnapshotPointCollection.ForEach(u =>
             {
                 u.GetHalconToolPathList().ForEach(path =>
@@ -335,7 +339,7 @@
             }
         }
 
-        private void SaveKeyImages(string barCode, MeasurementUint measureUnit)
+        private void SaveKeyImages(string barCode, MeasurementUnit measureUnit)
         {
             string measureName = measureUnit.GetDisplayText();
             if (Config.ImageSaveOption.IsSaveOriginImage)
@@ -366,7 +370,7 @@
             }
         }
 
-        private async void SaveKeyImages(MeasurementUint measureUnit, string measureName, string dir)
+        private async void SaveKeyImages(MeasurementUnit measureUnit, string measureName, string dir)
         {
             await Task.Run(() =>
             {
@@ -386,7 +390,7 @@
         }
         #endregion
 
-        private async void RunImageHandle(CameraBase camera, IOperationConfig opConfig, HImage hImage, string snapshotId, string snapshotName, List<MeasurementUint> measureList)
+        private async void RunImageHandle(CameraBase camera, IOperationConfig opConfig, HImage hImage, string snapshotId, string snapshotName, List<MeasurementUnit> measureList)
         {
             await Task.Run(() =>
              {
diff --git a/src/Bro.Process.DBManager/BaseModel.cs b/src/Bro.Process.DBManager/BaseModel.cs
index f827c7c..cc6e86b 100644
--- a/src/Bro.Process.DBManager/BaseModel.cs
+++ b/src/Bro.Process.DBManager/BaseModel.cs
@@ -1,200 +1,200 @@
-锘縰sing 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;
+锘�//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.Process.DataBase
-{
-    public class BaseModel
-    {
-        /// <summary>
-        /// 缂栧彿锛屽敮涓�鍊�,浣跨敤GUID
-        /// </summary>
-        [Key]
-        [Required(ErrorMessage = "缂栧彿涓嶅彲涓虹┖锛�")]
-        [StringLength(64)]
-        public string ID { get; set; } = Guid.NewGuid().ToString().ToUpper();
+//namespace Bro.Process.DataBase
+//{
+//    public class BaseModel
+//    {
+//        /// <summary>
+//        /// 缂栧彿锛屽敮涓�鍊�,浣跨敤GUID
+//        /// </summary>
+//        [Key]
+//        [Required(ErrorMessage = "缂栧彿涓嶅彲涓虹┖锛�")]
+//        [StringLength(64)]
+//        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_DISABLED { get; set; } = 0;
 
-        /// <summary>
-        /// 鍒犻櫎鐘舵�� 0 鏈垹闄� 1 宸插垹闄�
-        /// </summary>
-        [Required]
-        public int IS_DELETED { get; set; } = 0;
+//        /// <summary>
+//        /// 鍒犻櫎鐘舵�� 0 鏈垹闄� 1 宸插垹闄�
+//        /// </summary>
+//        [Required]
+//        public int IS_DELETED { get; set; } = 0;
 
-        /// <summary>
-        /// 鍒涘缓浜轰俊鎭�
-        /// </summary>
-        //[Required]
-        [StringLength(64)]
-        public string CREATE_USER { get; set; }
+//        /// <summary>
+//        /// 鍒涘缓浜轰俊鎭�
+//        /// </summary>
+//        //[Required]
+//        [StringLength(64)]
+//        public string CREATE_USER { get; set; }
 
-        /// <summary>
-        /// 鍒涘缓鏃堕棿
-        /// </summary>
-        //[Required]
-        public DateTime? CREATE_TIME { get; set; } = DateTime.Now;
+//        /// <summary>
+//        /// 鍒涘缓鏃堕棿
+//        /// </summary>
+//        //[Required]
+//        public DateTime? CREATE_TIME { get; set; } = DateTime.Now;
 
-        /// <summary>
-        /// 鏇存柊浜轰俊鎭�
-        /// </summary>
-        [StringLength(64)]
-        public string UPDATE_USER { get; set; }
+//        /// <summary>
+//        /// 鏇存柊浜轰俊鎭�
+//        /// </summary>
+//        [StringLength(64)]
+//        public string UPDATE_USER { get; set; }
 
-        /// <summary>
-        /// 鏇存柊鏃堕棿
-        /// </summary>
-        public DateTime? UPDATE_TIME { 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.CREATE_USER = userId;
-            t.CREATE_TIME = DateTime.Now;
-        }
+//    public static class BaseModelHelper
+//    {
+//        public static void SetNew<T>(this T t, string userId) where T : BaseModel
+//        {
+//            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;
-        }
+//        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);
-        }
+//        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();
+//        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));
-                        }
-                    }
-                }
-            });
-        }
+//            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 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
-    {
+//    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 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);
-                }
-            }
-        }
+//        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? StartTime { get; set; }
 
-        /// <summary>
-        /// 鏌ヨ缁撴潫鏃堕棿
-        /// </summary>
-        public DateTime? EndTime { get; set; }
+//        /// <summary>
+//        /// 鏌ヨ缁撴潫鏃堕棿
+//        /// </summary>
+//        public DateTime? EndTime { get; set; }
 
-        /// <summary>
-        /// 鍚敤鐘舵�佽繃婊ゅ櫒 1锛氫粎鏈惎鐢� 0锛氫粎鍚敤 -1锛氬叏閮�
-        /// </summary>
-        public int DisableFilter { get; set; } = 0;
+//        /// <summary>
+//        /// 鍚敤鐘舵�佽繃婊ゅ櫒 1锛氫粎鏈惎鐢� 0锛氫粎鍚敤 -1锛氬叏閮�
+//        /// </summary>
+//        public int DisableFilter { get; set; } = 0;
 
-        /// <summary>
-        /// 鏌ヨ瀛楃涓�
-        /// </summary>
-        public string SearchTxt { get; set; }
+//        /// <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 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);
-                }
-            }
-        }
+//        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;
-    }
-}
+//        public event PropertyChangedEventHandler PropertyChanged;
+//    }
+//}
diff --git a/src/Bro.Process.DBManager/SQLiteHelper.cs b/src/Bro.Process.DBManager/SQLiteHelper.cs
index 6da6230..dfb07e1 100644
--- a/src/Bro.Process.DBManager/SQLiteHelper.cs
+++ b/src/Bro.Process.DBManager/SQLiteHelper.cs
@@ -1,614 +1,614 @@
 
 
-using System;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Data;
-using System.Data.SQLite;
-using System.Configuration;
+//using System;
+//using System.Collections;
+//using System.Collections.Specialized;
+//using System.Data;
+//using System.Data.SQLite;
+//using System.Configuration;
 
-namespace Bro.Process.DataBase
-{
-    public class SQLiteHelper
-    {
-        //数据库连接字符串 
-        public static string connectionString = ConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;
+//namespace Bro.Process.DataBase
+//{
+//    public class SQLiteHelper
+//    {
+//        //数据库连接字符串 
+//        public static string connectionString = ConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;
 
-        public SQLiteHelper() { }
+//        public SQLiteHelper() { }
 
-        #region 公用方法
+//        #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 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)
+//        {
+//            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;
-            }
-        }
+//        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
+//        #endregion
 
-        #region 执行简单SQL语句
+//        #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">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="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="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 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>
+//        /// 执行带一个存储过程参数的的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>
+//        /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
+//        /// </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>
+//        /// 执行一条计算查询结果语句,返回查询结果(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>
+//        /// 执行查询语句,返回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;
-            }
-        }
+//        /// <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;
-            }
-        }
+//        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;
-            }
-        }
+//        /// <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
+//        #endregion
 
-        #region 执行带参数的SQL语句
+//        #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="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>
+//        /// 执行多条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>
+//        /// 执行一条计算查询结果语句,返回查询结果(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>
+//        /// 执行查询语句,返回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;
-                }
-            }
-        }
+//        /// <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);
-                }
-            }
-        }
+//        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
+//        #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;
-        }
+//        #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;
-        }
+//        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
+//        #endregion
+//    }
+//}
\ No newline at end of file
diff --git a/src/Bro.UI.Config/MenuForms/FrmOperation.resx b/src/Bro.UI.Config/MenuForms/FrmOperation.resx
index b406f47..821dd26 100644
--- a/src/Bro.UI.Config/MenuForms/FrmOperation.resx
+++ b/src/Bro.UI.Config/MenuForms/FrmOperation.resx
@@ -125,7 +125,7 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
-        CgAAAk1TRnQBSQFMAgEBAgEAAeABAAHgAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        CgAAAk1TRnQBSQFMAgEBAgEAAegBAAHoAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
         AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -182,7 +182,7 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4
-        CAAAAk1TRnQBSQFMAwEBAAHgAQAB4AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        CAAAAk1TRnQBSQFMAwEBAAHoAQAB6AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
         AWADAAEYAwABAQEAAQgGAAEJGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
         AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
         AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm

--
Gitblit v1.8.0