From 410dc2d04dbecf019129cd8cd65a3be2c62b4d0c Mon Sep 17 00:00:00 2001
From: ulysseskao <ulysseskao@gmail.com>
Date: Tue, 03 May 2016 18:36:41 +0800
Subject: [PATCH] refator code

---
 CCSTrace/CCS/Function/MailService.cs         |    3 
 CCSTrace/CCS/ProcessEvent.cs                 |  366 +++++++-------
 CCSTrace.Tests/CCSTrace.Tests.csproj         |    8 
 CCSTrace.Tests/Properties/AssemblyInfo.cs    |    0 
 CCSTrace/CCS/Object/Dept_Contrast.cs         |   19 
 CCSTrace.Tests/CcsMainTest.cs                |    0 
 CCSTrace.Tests/Properties/PexAssemblyInfo.cs |    0 
 CCSTrace/CCS/Function/MergeCase.cs           |   12 
 CCSTrace/CCS/FinishEvent.cs                  |  237 +++++----
 CCSTrace/CCS/Object/LocateEquipment.cs       |   91 +--
 CCSTrace/CCS/Object/Addr_Contrast.cs         |   82 +-
 CCSTrace/CCS/Object/NumberContrast.cs        |   57 +
 CCSTrace/Global.asax.cs                      |    4 
 CCSTrace/CCS/CCSMain.cs                      |  161 +++---
 CCSTrace/CCS/EventAI/TraceSubject.cs         |   93 +--
 CCSTrace.Tests/Service1Test.cs               |    0 
 CCSTrace/CCS/Domain/CCSCaseState.cs          |    6 
 CCSTrace/CCS/EventAI/JudgeCase.cs            |   39 
 CCSTrace/Service1.asmx.cs                    |    8 
 CCSTrace.Tests/App_Data/DBConfig.xml         |   11 
 CCSTrace/CCS/Function/InitialEventData.cs    |   56 +-
 CCSTrace/CCS/Object/AlarmData.cs             |    1 
 CCSTrace/CCSTrace.csproj                     |   97 ++-
 CCSTrace/CCS/Function/Leach.cs               |   29 
 CCSTrace/CCS/Object/EOSCodelist.cs           |    3 
 25 files changed, 736 insertions(+), 647 deletions(-)

diff --git a/CCSTrace.Tests/App_Data/DBConfig.xml b/CCSTrace.Tests/App_Data/DBConfig.xml
index e446f71..493c63f 100644
--- a/CCSTrace.Tests/App_Data/DBConfig.xml
+++ b/CCSTrace.Tests/App_Data/DBConfig.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="big5" ?>
-  <CCS>
-    <DBSetting DataSource = "NNTPC" UserId = "basedb" Password = "BASEDB000" ConnectionCount = "3" ShowError = "false" />
-    <ThreadSetting maxThreadSize="5" minThreadSize="1" />
-  </CCS>
\ No newline at end of file
+<?xml version="1.0" encoding="big5"?>
+
+<CCS>
+  <DBSetting DataSource="NNTPC" UserId="basedb" Password="BASEDB000" ConnectionCount="3" ShowError="false" />
+  <ThreadSetting maxThreadSize="5" minThreadSize="1" />
+</CCS>
\ No newline at end of file
diff --git a/CCSTrace.Tests/CCSTrace.Tests.csproj b/CCSTrace.Tests/CCSTrace.Tests.csproj
index 8209a91..f1450e4 100644
--- a/CCSTrace.Tests/CCSTrace.Tests.csproj
+++ b/CCSTrace.Tests/CCSTrace.Tests.csproj
@@ -52,7 +52,12 @@
     <Reference Include="Microsoft.Pex.Framework">
       <HintPath>..\..\..\..\..\Dev\Microsoft\VisualStudio-14.0\Common7\IDE\Extensions\Microsoft\Pex\Microsoft.Pex.Framework.dll</HintPath>
     </Reference>
+    <Reference Include="NHibernate, Version=3.4.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\CCSTrace\bin\NHibernate.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
+    <Reference Include="System.Data" />
     <Reference Include="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <Private>True</Private>
     </Reference>
@@ -82,6 +87,9 @@
     <Content Include="App_Data\DBConfig.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <Content Include="DMMSNHibernate.cfg.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <Choose>
     <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
diff --git a/CCSTrace.Tests/CcsMainTest.cs b/CCSTrace.Tests/CcsMainTest.cs
index b5887cb..2b415ff 100644
--- a/CCSTrace.Tests/CcsMainTest.cs
+++ b/CCSTrace.Tests/CcsMainTest.cs
Binary files differ
diff --git a/CCSTrace.Tests/Properties/AssemblyInfo.cs b/CCSTrace.Tests/Properties/AssemblyInfo.cs
index 22a8923..605a588 100644
--- a/CCSTrace.Tests/Properties/AssemblyInfo.cs
+++ b/CCSTrace.Tests/Properties/AssemblyInfo.cs
Binary files differ
diff --git a/CCSTrace.Tests/Properties/PexAssemblyInfo.cs b/CCSTrace.Tests/Properties/PexAssemblyInfo.cs
index 6f7a005..29d7313 100644
--- a/CCSTrace.Tests/Properties/PexAssemblyInfo.cs
+++ b/CCSTrace.Tests/Properties/PexAssemblyInfo.cs
Binary files differ
diff --git a/CCSTrace.Tests/Service1Test.cs b/CCSTrace.Tests/Service1Test.cs
index 438bfca..7c3717c 100644
--- a/CCSTrace.Tests/Service1Test.cs
+++ b/CCSTrace.Tests/Service1Test.cs
Binary files differ
diff --git a/CCSTrace/CCS/CCSMain.cs b/CCSTrace/CCS/CCSMain.cs
index cfff0ca..49b05a5 100644
--- a/CCSTrace/CCS/CCSMain.cs
+++ b/CCSTrace/CCS/CCSMain.cs
@@ -4,6 +4,7 @@
 using System.Data;
 using System.Data.OracleClient;
 using System.IO;
+using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Threading;
 using System.Web;
@@ -11,6 +12,7 @@
 using Amib.Threading;
 using CCSTrace.CCS.Domain;
 using CCSTrace.CCS.Object;
+using Iesi.Collections.Generic;
 using NLog;
 
 namespace CCSTrace.CCS
@@ -22,17 +24,15 @@
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
         private static CcsMain _instance;
 
-        public static ArrayList ProcessCases = new ArrayList();
-        public static Queue<int> ProcessCaseQueue = new Queue<int>();
-        public static Hashtable ProcessFdr = new Hashtable();//Record the processing FDR
-        public static ArrayList WaitingCases = new ArrayList();//Record the case when the case's FDR processed by another
-
-        private int _connectionCount = 1;
+        private readonly int _connectionCount = 1;
         private OracleConnection _mainConn = null;
 
         private SmartThreadPool _mainjobThreadPool = null;
         private readonly object _syncDbQueue = new object();
         private readonly Queue<OracleConnection> _dbQueue = new Queue<OracleConnection>();
+        private readonly List<string> _processingCases = new List<string>();
+        private readonly List<KeyValuePair<string, int>> _waitingCases = new List<KeyValuePair<string, int>>();//Record the case when the case's FDR processed by another
+
 
         public CcsMain()
         {
@@ -42,18 +42,13 @@
 
         public string AppDataPath { get; set; }
 
-        public static CcsMain Instance()
-        {
-            // Uses lazy initialization.
+        public SortedSet<int> ProcessingFdr { get; } = new SortedSet<int>();
 
-            // Note: this is not thread safe.
+        public static CcsMain Instance => _instance ?? (_instance = new CcsMain());
 
-            if (_instance == null)
-            {
-                _instance = new CcsMain();
-            }
-            return _instance;
-        }
+        public List<string> ProcessingCases => _processingCases;
+
+        public List<KeyValuePair<string, int>> WaitingCases => _waitingCases;
 
         public void Startup()
         {
@@ -66,13 +61,12 @@
 
                 if (_mainConn == null)
                     _mainConn = CreateConnection();
-                //MainConn = CreateMainConnection();
                 Logger.Info("CCSMain has been connected database.");
 
                 GlobalVariable.CcsCodelist = new CcsCodelist(_mainConn);
                 GlobalVariable.EosCodelist = new EosCodelist(_mainConn);
 
-                for (int i = 0; i < _connectionCount; i++)
+                for (var i = 0; i < _connectionCount; i++)
                 {
                     lock (_syncDbQueue) _dbQueue.Enqueue(CreateConnection());
                 }
@@ -82,23 +76,25 @@
                 Logger.Error(e, e.Message);
                 throw;
             }
-            finally
-            {
-            }
 
-            CcsRecord mRecord = GetWaitRecord(_mainConn);
+            var addrContrast = AddrContrast.Instance;
+            addrContrast.initialize(_mainConn);
 
-            if (mRecord != null)
+            CCSEventRecord ccsEventRecord = GetWaitRecord(_mainConn);
+
+            if (ccsEventRecord != null)
             {
-                OracleConnection conn = null;
+                OracleConnection conn;
                 lock (_syncDbQueue) conn = _dbQueue.Dequeue();
-                ProcessCase(mRecord, conn);
+                ProcessCase(ccsEventRecord, conn);
             }
 
-            STPStartInfo stpStartInfo = new STPStartInfo();
-            stpStartInfo.IdleTimeout = GlobalVariable.IdleTimeout * 1000;
-            stpStartInfo.MaxWorkerThreads = GlobalVariable.MaxThreadSize;
-            stpStartInfo.MinWorkerThreads = GlobalVariable.MinThreadSize;
+            STPStartInfo stpStartInfo = new STPStartInfo
+            {
+                IdleTimeout = GlobalVariable.IdleTimeout*1000,
+                MaxWorkerThreads = GlobalVariable.MaxThreadSize,
+                MinWorkerThreads = GlobalVariable.MinThreadSize
+            };
             _mainjobThreadPool = new SmartThreadPool(stpStartInfo);
             Logger.Info("Create Thread Pool.");
         }
@@ -112,11 +108,18 @@
             GC.WaitForPendingFinalizers();
         }
 
-        public void AcceptEvent(CcsRecord record)
+        public void AcceptEvent(CCSEventRecord ccsEventRecord)
         {
             /*
             WorkItemCallback workItemCallback = new WorkItemCallback(this.DoWork);
-            _mainjobThreadPool.QueueWorkItem(workItemCallback, record);
+            _mainjobThreadPool.QueueWorkItem(workItemCallback, ccsEventRecord);
+            WIGStartInfo wigStartInfo = new WIGStartInfo()
+            {
+                FillStateWithArgs = true,
+            };
+            _wig1 = _smartThreadPool.CreateWorkItemsGroup((int)spinCon1.Value, wigStartInfo);
+            _wig2 = _smartThreadPool.CreateWorkItemsGroup((int)spinCon2.Value, wigStartInfo);
+
             */
 
             int i = 0;
@@ -126,18 +129,18 @@
             {
                 try
                 {
-                    if (InsertEventRecord(record, _mainConn))
+                    if (InsertCCSEventRecord(ccsEventRecord, _mainConn))
                     {
                         if (_dbQueue.Count > 0)
                         {
                             //將EVETNQUERY的案件狀態改為開始處理
-                            CcsRecord mRecord = GetWaitRecord(_mainConn);
+                            CCSEventRecord waitCcsEventRecord = GetWaitRecord(_mainConn);
 
-                            if (mRecord != null)
+                            if (waitCcsEventRecord != null)
                             {
                                 OracleConnection conn = null;
                                 lock (_syncDbQueue) conn = _dbQueue.Dequeue();
-                                ProcessCase(mRecord, conn);
+                                ProcessCase(waitCcsEventRecord, conn);
                             }
                         }
 
@@ -226,7 +229,15 @@
 
         private OracleConnection CreateConnection()
         {
-            OracleConnection dbConn = new OracleConnection(GlobalVariable.ConnectionString);
+            OracleConnectionStringBuilder builder = new OracleConnectionStringBuilder(GlobalVariable.ConnectionString)
+            {
+                MaxPoolSize = 20,
+                MinPoolSize = 5,
+                Pooling = true
+            };
+            string connectstring = builder.ToString();
+
+            OracleConnection dbConn = new OracleConnection(connectstring);
 
             dbConn.Open();
 
@@ -234,7 +245,7 @@
         }
 
         [MethodImpl(MethodImplOptions.Synchronized)]
-        private bool InsertEventRecord(CcsRecord record, OracleConnection conn)
+        private bool InsertCCSEventRecord(CCSEventRecord ccsEventRecord, OracleConnection conn)
         {
             OracleTransaction transaction = null;
 
@@ -245,18 +256,18 @@
 
                 transaction = conn.BeginTransaction();
 
-                if (record.InsertDb(conn, transaction))
+                if (ccsEventRecord.InsertDb(conn, transaction))
                 {
-                    var eventQuery = new EventQuery
+                    var ccsEventQuery = new CCSEventQuery
                     {
-                        CcsId = record.CcsId,
-                        Meter = record.Meter,
+                        CcsId = ccsEventRecord.CcsId,
+                        Meter = ccsEventRecord.Meter,
                         CaseStatus = (int) CCSCaseState.EventInitial,
-                        ChangeTime = record.AcceptTime
+                        ChangeTime = ccsEventRecord.AcceptTime
                     };
 
 
-                    if (eventQuery.Insert(conn, transaction))
+                    if (ccsEventQuery.Insert(conn, transaction))
                         transaction.Commit();
                     else
                     {
@@ -298,14 +309,14 @@
 
         private delegate void WorkerThreadHandler();
 
-        private void ProcessCase(CcsRecord record, OracleConnection conn)
+        private void ProcessCase(CCSEventRecord ccsEventRecord, OracleConnection conn)
         {
             try
             {
-                if (conn.State.ToString().Equals("Closed"))
+                if (conn.State == ConnectionState.Closed)
                     conn.Open();
 
-                ProcessEvent processEvent = new ProcessEvent(record, conn, GlobalVariable.TraceConnectionString);
+                ProcessEvent processEvent = new ProcessEvent(ccsEventRecord, conn, GlobalVariable.TraceConnectionString);
                 processEvent.ThreadFinish += ThreadEndEventProcess;
 
                 ThreadStart threadStart = processEvent.Run;
@@ -321,12 +332,12 @@
         private void ThreadEndEventProcess(object sender, ThreadEndEvent e)
         {
             //將EVETNQUERY的案件狀態改為開始處理
-            CcsRecord mRecord = GetWaitRecord(e.GetConnection());
+            CCSEventRecord waitCcsEventRecord = GetWaitRecord(e.GetConnection());
 
             try
             {
-                if (mRecord != null)
-                    ProcessCase(mRecord, e.GetConnection());
+                if (waitCcsEventRecord != null)
+                    ProcessCase(waitCcsEventRecord, e.GetConnection());
             }
             finally 
             {
@@ -335,39 +346,39 @@
         }
 
         [MethodImpl(MethodImplOptions.Synchronized)]
-        private CcsRecord GetWaitRecord(OracleConnection conn)
+        private CCSEventRecord GetWaitRecord(OracleConnection conn)
         {
             string processCcsid = "";
             string ccsid = "";
-            CcsRecord record = null;
+            CCSEventRecord ccsEventRecord = null;
 
-            foreach (string[] obj in WaitingCases)
+            foreach (var obj in _waitingCases)
             {
-                string ccsId = obj[0];
-                string fdrid = obj[1];
+                var ccsId = obj.Key;
+                var fdrid = obj.Value;
 
-                if (ProcessFdr.ContainsKey(fdrid)) //該條饋線仍有案件在處理中
+                if (ProcessingFdr.Contains(fdrid)) //該條饋線仍有案件在處理中
                     processCcsid = processCcsid + "'" + ccsid + "',";
                 else
                 {
                     ccsid = ccsId;
-                    WaitingCases.Remove(obj);
+                    _waitingCases.Remove(obj);
                     break;
                 }
             }
 
             if (ccsid.Length == 0)  //沒有因同饋線而在等候中的案件
             {
-                string sqlStmt = "SELECT Q.CCSID AS CCSID FROM CCS.EVENTQUERY Q,CCS.EVENTRECORD R WHERE Q.CASESTATUS IN (" + (int) CCSCaseState.EventInitial + "," + (int) CCSCaseState.EventProcess + ")";
-                IEnumerator Enum = ProcessCases.GetEnumerator();
+                var sqlStmt = "SELECT Q.CCSID AS CCSID FROM CCS.EVENTQUERY Q,CCS.EVENTRECORD R WHERE Q.CASESTATUS IN (" + 
+                    (int) CCSCaseState.EventInitial + "," + 
+                    (int) CCSCaseState.EventProcess + ")";
 
-                while (Enum.MoveNext())
-                    if (Enum.Current != null) processCcsid = processCcsid + "'" + Enum.Current + "',";
+                processCcsid = _processingCases.Aggregate(processCcsid, (current, item) => current + "'" + item + "',");
 
                 if (processCcsid.Length != 0)
                     sqlStmt = sqlStmt + " AND Q.CCSID NOT IN (" + processCcsid.Substring(0, processCcsid.Length - 1) + ")";
 
-                sqlStmt = sqlStmt + " AND Q.CCSID = R.CCSID AND ROWNUM < 2 ORDER BY Q.ChangeTime";
+                sqlStmt = sqlStmt + " AND Q.CCSID = R.CCSID AND ROWNUM < 2 ORDER BY Q.CHANGETIME";
                 OracleCommand command = new OracleCommand(sqlStmt, conn);
                 OracleDataReader reader = command.ExecuteReader();
 
@@ -388,44 +399,46 @@
             }
 
             if (ccsid.Length != 0)
-                record = new CcsRecord(ccsid, conn);
+                ccsEventRecord = new CCSEventRecord(ccsid, conn);
 
-            if (record != null)
+            if (ccsEventRecord != null)
             {
-                EventQuery eventQuery = new EventQuery();
+                CCSEventQuery ccsEventQuery = new CCSEventQuery
+                {
+                    CcsId = ccsEventRecord.CcsId,
+                    CaseStatus = (int) CCSCaseState.EventProcess
+                };
                 //先將EVETNQUERY的案件狀態改為開始處理
-                eventQuery.CcsId = record.CcsId;
-                eventQuery.CaseStatus = (int) CCSCaseState.EventProcess;
 
                 OracleTransaction transaction = conn.BeginTransaction();
 
                 try
                 {
-                    if (eventQuery.UpdateCaseStatus(conn, transaction))
+                    if (ccsEventQuery.UpdateCaseStatus(conn, transaction))
                     {
-                        Logger.Info("更新EVENTQUERY的案件狀態為處理中.(CCSID = " + record.CcsId + ")");
+                        Logger.Info("更新EVENTQUERY的案件狀態為處理中.(CCSID = " + ccsEventRecord.CcsId + ")");
                         transaction.Commit();
-                        ProcessCases.Add(record.CcsId);
+                        _processingCases.Add(ccsEventRecord.CcsId);
                     }
                     else
                     {
-                        Logger.Error("無法更新EVENTQUERY的案件狀態.(CCSID = " + record.CcsId + ")");
+                        Logger.Error("無法更新EVENTQUERY的案件狀態.(CCSID = " + ccsEventRecord.CcsId + ")");
 
-                        if (transaction.Connection.State.ToString().Equals("Open"))
+                        if (transaction.Connection.State == ConnectionState.Open)
                             transaction.Rollback();
                     }
                 }
                 catch (Exception e)
                 {
-                    if (transaction.Connection.State.ToString().Equals("Open"))
+                    if (transaction.Connection.State == ConnectionState.Open)
                         transaction.Rollback();
 
                     Logger.Error(e, e.Message);
-                    record = null;
+                    ccsEventRecord = null;
                 }
             }
 
-            return record;
+            return ccsEventRecord;
         }
     }
 }
\ No newline at end of file
diff --git a/CCSTrace/CCS/Domain/CCSCaseState.cs b/CCSTrace/CCS/Domain/CCSCaseState.cs
index 1f46eec..db872c5 100644
--- a/CCSTrace/CCS/Domain/CCSCaseState.cs
+++ b/CCSTrace/CCS/Domain/CCSCaseState.cs
@@ -12,8 +12,8 @@
         EventFinsh = 1007, // with no RepairRecord
         EventComplete = 1008, // with RepairRecord
         EventOver = 1009, // with RepairRecord but not upload
-        EventReturn = 2001, // Return the EventRecord
-        AlarmFailure = 2002, // EventRecord AlarmFailure
-        EventTrasnfer = 2003 // EventRecord Transfer to Process
+        EventReturn = 2001, // Return the EOSEventRecord
+        AlarmFailure = 2002, // EOSEventRecord AlarmFailure
+        EventTrasnfer = 2003 // EOSEventRecord Transfer to Process
     }
 }
\ No newline at end of file
diff --git a/CCSTrace/CCS/EventAI/JudgeCase.cs b/CCSTrace/CCS/EventAI/JudgeCase.cs
index 447c7d3..c7d92ca 100644
--- a/CCSTrace/CCS/EventAI/JudgeCase.cs
+++ b/CCSTrace/CCS/EventAI/JudgeCase.cs
@@ -22,7 +22,7 @@
         private int _inferFsc; // 推測出可能受損的設備種類
         private int _inferUfid; // 推測出可能受損的設備編號
         private int _parentCaseId = 0;
-        private Equipment _mEquip;
+        private Equipment _equip;
 
         private readonly OracleConnection _connectionTpc;
         private readonly OracleTransaction _transaction;
@@ -30,13 +30,13 @@
 
         // int Range = 360; //比事故案件還早多久時間內的案件才作合併 單位:分
 
-        public JudgeCase(int mFdrId, int mFsc, int mUfid, int mCaseId, string mAcceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection)
+        public JudgeCase(int fdrId, int fsc, int ufid, int caseId, string acceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection)
         {
-            _damageFdrId = mFdrId;
-            _damageFsc = mFsc;
-            _damageUfid = mUfid;
-            _newCaseId = mCaseId;
-            _acceptDate = mAcceptDate;
+            _damageFdrId = fdrId;
+            _damageFsc = fsc;
+            _damageUfid = ufid;
+            _newCaseId = caseId;
+            _acceptDate = acceptDate;
 
             _connectionTpc = connection;
             _transaction = trx;
@@ -82,18 +82,15 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 Logger.Error("尋找母案件時發生錯誤.");
-                throw e;
+                throw ;
             }
             finally
             {
-                if (command != null)
-                    command.Dispose();
+                command?.Dispose();
 
-                if (reader != null)
-                    reader.Close();
+                reader?.Close();
             }
 
             // 若事故案件為該饋線上的第一件事故案件時,無須再作追蹤比較
@@ -129,7 +126,7 @@
             catch (Exception ex)
             {
                 Logger.Error(ex.Message);
-                throw ex;
+                throw;
             }
             Logger.Info("不同變壓器,開始追蹤(New Version)...");
 
@@ -185,7 +182,7 @@
                                     _parentCaseId = Convert.ToInt32(((ArrayList)_mCase[i])[0].ToString());
                                     _inferFsc = ((Equipment)_newCase[j]).Fsc;
                                     _inferUfid = ((Equipment)_newCase[j]).Ufid;
-                                    _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
+                                    _equip = (Equipment)((ArrayList)_mCase[i])[5];
                                     Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
                                     return;
                                 }
@@ -217,7 +214,7 @@
                                     _parentCaseId = Convert.ToInt32(((ArrayList)_mCase[i])[0].ToString());
                                     _inferFsc = damageEquipment.Fsc;
                                     _inferUfid = damageEquipment.Ufid;
-                                    _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
+                                    _equip = (Equipment)((ArrayList)_mCase[i])[5];
                                     Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
                                     return;
                                 }
@@ -250,7 +247,7 @@
 
         public Equipment GetOldrEquipment()
         {
-            return _mEquip;
+            return _equip;
         }
 
         public int GetParentCaseId()
@@ -287,8 +284,7 @@
             }
             catch (Exception e)
             {
-                Logger.Error("Problems occur: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "Problems occur: " + e.Message);
             }
             finally
             {
@@ -322,8 +318,7 @@
             catch (Exception e)
             {
                 // CCS.GlobalVariable.ErrorLog.setErrorLog("Error in JudgeCase(RealDamageEquipment) :" + e.getMessage());
-                Logger.Error("Problems occur: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "Problems occur: " + e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/EventAI/TraceSubject.cs b/CCSTrace/CCS/EventAI/TraceSubject.cs
index 701dcf3..3a89c5e 100644
--- a/CCSTrace/CCS/EventAI/TraceSubject.cs
+++ b/CCSTrace/CCS/EventAI/TraceSubject.cs
@@ -10,15 +10,15 @@
     {
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
-        private string _mDbConnectionString;
+        private string _dbConnectionString;
         private static bool _isNewCase;
-        private static ArrayList _mLinkList;								// store the switch of the new case path
-        private static TraceEngine _mTEngine;
-        private static Hashtable _mTreeMap;                             // store the switch of the old case path
+        private static ArrayList _linkList;								// store the switch of the new case path
+        private static TraceEngine _traceEngine;
+        private static Hashtable _treeMap;                             // store the switch of the old case path
         private static int _sFsc;
         private static int _sUfid;
-        private readonly ArrayList _mTmp = new ArrayList();
-        private NetworkContext _mPContext;
+        private readonly ArrayList _tmp = new ArrayList();
+        private NetworkContext _context;
 
         private readonly OracleConnection _connectionTpc;
         private readonly OracleTransaction _transaction;
@@ -27,35 +27,35 @@
         {
             _connectionTpc = conn;
             _transaction = trx;
-            _mDbConnectionString = traceConnectionString;
+            _dbConnectionString = traceConnectionString;
 
             try
             {
-                if (_mTEngine == null)
+                if (_traceEngine == null)
                 {
-                    _mTEngine = new TraceEngine();
+                    _traceEngine = new TraceEngine();
                 }
             }
             catch (Exception ex)
             {
                 Logger.Error(ex, ex.Message);
-                throw ex;
+                throw;
             }
         }
 
         public void DiscardEngine()
         {
-            _mTEngine = null;
+            _traceEngine = null;
         }
 
         public ArrayList GetNewResult()
         {
-            return _mLinkList;
+            return _linkList;
         }
 
         public Hashtable GetOldResult()
         {
-            return _mTreeMap;
+            return _treeMap;
         }
 
         // for EOS(only get the reverse tree)
@@ -64,8 +64,8 @@
             _sFsc = startFsc;
             _sUfid = startUfid;
             _isNewCase = mIsNew;
-            _mTreeMap = new Hashtable();
-            _mLinkList = new ArrayList();
+            _treeMap = new Hashtable();
+            _linkList = new ArrayList();
 
             try
             {
@@ -173,11 +173,11 @@
                             Equipment equip = new Equipment(node.ClassID, node.ObjectID);
 
                             if (_isNewCase)
-                                _mLinkList.Add(equip);
+                                _linkList.Add(equip);
                             else
                             {
-                                _mTreeMap.Add(node.ObjectID, equip);
-                                _mTmp.Add(equip);
+                                _treeMap.Add(node.ObjectID, equip);
+                                _tmp.Add(equip);
                             }
                             i++;
 
@@ -188,7 +188,6 @@
                             */
                         }
 
-                        Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
                         Logger.Info(node.ClassID + "----->" + node.ObjectID);
 
                         iti.MoveDescent((short)0);
@@ -208,11 +207,11 @@
                         Equipment equip = new Equipment(node.ClassID, node.ObjectID);
 
                         if (_isNewCase)
-                            _mLinkList.Add(equip);
+                            _linkList.Add(equip);
                         else
                         {
-                            _mTreeMap.Add(node.ObjectID, equip);
-                            _mTmp.Add(equip);
+                            _treeMap.Add(node.ObjectID, equip);
+                            _tmp.Add(equip);
                         }
                         i++;    //後面直接就FINISH,所以就不用判斷tracecount
 
@@ -231,11 +230,11 @@
                         if (IsEndEquip(equip))
                         {
                             if (_isNewCase)
-                                _mLinkList.Add(equip);
+                                _linkList.Add(equip);
                             else
                             {
-                                _mTreeMap.Add(node.ObjectID, equip);
-                                _mTmp.Add(equip);
+                                _treeMap.Add(node.ObjectID, equip);
+                                _tmp.Add(equip);
                             }
                             i++;    //後面直接就FINISH,所以就不用判斷tracecount
 
@@ -294,11 +293,11 @@
                             {
                                 case 108:
                                     if (_isNewCase)
-                                        _mLinkList.Add(equip);
+                                        _linkList.Add(equip);
                                     else
                                     {
-                                        _mTreeMap.Add(node.ObjectID, equip);
-                                        _mTmp.Add(equip);
+                                        _treeMap.Add(node.ObjectID, equip);
+                                        _tmp.Add(equip);
                                     }
 
                                     Logger.Info(node.ClassID + "----->" + node.ObjectID);
@@ -328,11 +327,11 @@
                                     if (!ostatus)
                                     {
                                         if (_isNewCase)
-                                            _mLinkList.Add(equip);
+                                            _linkList.Add(equip);
                                         else
                                         {
-                                            _mTreeMap.Add(node.ObjectID, equip);
-                                            _mTmp.Add(equip);
+                                            _treeMap.Add(node.ObjectID, equip);
+                                            _tmp.Add(equip);
                                         }
 
                                         Logger.Info(node.ClassID + "----->" + node.ObjectID);
@@ -380,9 +379,8 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
-                return tree;
+                Logger.Error(e, e.Message);
+                return null;
             }
 
             try
@@ -391,8 +389,7 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
 
             return tree;
@@ -400,17 +397,17 @@
 
         private void ConfigTrace()
         {
-            if (_mDbConnectionString == null)
+            if (_dbConnectionString == null)
             {
-                _mDbConnectionString = "basedb/basedb000@nntpc";
+                _dbConnectionString = "basedb/basedb000@nntpc";
             }
             try
             {
-                if (_mPContext == null) _mPContext = _mTEngine.teoCreateContext();
+                if (_context == null) _context = _traceEngine.teoCreateContext();
 
-                if (_mPContext.IsConnected == 0)
+                if (_context.IsConnected == 0)
                 {
-                    _mPContext.Connect("", _mDbConnectionString);
+                    _context.Connect("", _dbConnectionString);
                 }
             }
             catch (Exception ex)
@@ -445,10 +442,10 @@
             tContext.addCriterion(sCriterion);
             tContext.addCriterion(eCriterion);
 
-            _mPContext.ResetContext();
+            _context.ResetContext();
 
             Logger.Info("Set ModeTrace OK.");
-            ResultTreeBuilder trBuilder = _mPContext.CreateTreeBuilder();
+            ResultTreeBuilder trBuilder = _context.CreateTreeBuilder();
             if (!trBuilder.constructResultTree(tContext, TRAVELTHREADMODE.CONMODE_SYNCHRONOUS)) { return null; }
             Logger.Info("ConstructResultTree OK.");
             ResultTree result = trBuilder.ResultTree;
@@ -460,12 +457,11 @@
         //判斷是否為最終設備(逆向追到已經無child的設備時,檢查該設備是否為最終設備(查驗該設備的同層設備,是否仍有可繼續逆向追蹤的設備,若無,則該設備為最終設備
         private bool IsEndEquip(Equipment selfEquip)
         {
-            string sqlStmt;
             OracleCommand command = null;
             OracleDataReader reader = null;
             long nValue = 0;
 
-            sqlStmt = "SELECT DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE FSC = " + selfEquip.Fsc+ " AND UFID = " + selfEquip.Ufid;
+            var sqlStmt = "SELECT DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE FSC = " + selfEquip.Fsc+ " AND UFID = " + selfEquip.Ufid;
 
             try
             {
@@ -539,11 +535,8 @@
             }
             finally
             {
-                if (command != null)
-                    command.Dispose();
-
-                if (reader != null)
-                    reader.Close();
+                command?.Dispose();
+                reader?.Close();
             }
 
             return true;
diff --git a/CCSTrace/CCS/FinishEvent.cs b/CCSTrace/CCS/FinishEvent.cs
index f90b05e..011554a 100644
--- a/CCSTrace/CCS/FinishEvent.cs
+++ b/CCSTrace/CCS/FinishEvent.cs
@@ -1,5 +1,4 @@
 using System;
-
 using System.Data.OracleClient;
 using CCSTrace.CCS.Domain;
 using NLog;
@@ -12,7 +11,7 @@
 
         private bool _upLevel;
         private int _originCaseStatus = 0;
-        private Object.EventRecord _mEventRec = null;
+        private Object.EOSEventRecord _eosEventRecord = null;
         private OracleConnection _connectionTpc;
         private OracleTransaction _transaction;
 
@@ -20,24 +19,26 @@
         {
         }
 
-        public bool Finish(int mKind, Object.EventRecord mRecord, OracleConnection conn, OracleTransaction trx)
+        public bool Finish(int mKind, Object.EOSEventRecord eosEventRecord, OracleConnection conn, OracleTransaction trx)
         {
-            _mEventRec = mRecord;
+            _eosEventRecord = eosEventRecord;
             _connectionTpc = conn;
             _transaction = trx;
 
             Logger.Info("進行OMS資料更新程序...");
-            if (mRecord.ParentId== 0)
-            { // Original Case
-                if (!(ProcessSingalCase(mRecord)))
+            if (eosEventRecord.ParentId == 0)
+            {
+                // Original Case
+                if (!(ProcessSingalCase(eosEventRecord)))
                 {
                     return false;
                 }
                 Logger.Info("更新eos.events成功!");
             }
             else
-            { // Child Case
-                if (!(ProcessMergeCase(mRecord)))
+            {
+                // Child Case
+                if (!(ProcessMergeCase(eosEventRecord)))
                 {
                     return false;
                 }
@@ -45,7 +46,7 @@
             }
 
             // inert into eos.eventrecord && eos.eventrecord_ex
-            OracleCommand command = new OracleCommand(mRecord.GetSqlStmt(), _connectionTpc, _transaction);
+            OracleCommand command = new OracleCommand(eosEventRecord.GetInsertSqlStmt(), _connectionTpc, _transaction);
             OracleCommand command1 = null;
 
             try
@@ -57,7 +58,7 @@
                     return false;
                 }
 
-                command.CommandText = mRecord.LocateEquipment.GetSqlStmt();
+                command.CommandText = eosEventRecord.LocateEquipment.GetInsertSqlStmt();
                 if (command.ExecuteNonQuery() <= 0)
                 {
                     Logger.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord_ex");
@@ -69,9 +70,9 @@
                 if ((mKind == GlobalVariable.Success) || (mKind == GlobalVariable.CaseTypeChanged))
                 {
                     /* 當饋線全停時不需注意影響虛擬用戶,影響用戶資料會由實際切開關產生 */
-                    if (mRecord.Fsc!= GlobalVariable.Breaker)
+                    if (eosEventRecord.Fsc != GlobalVariable.Breaker)
                     {
-                        if (!SetVisualCustomer(mRecord))
+                        if (!SetVisualCustomer(eosEventRecord))
                         {
                             Logger.Error("新增影響用戶資料錯誤.");
                             return false;
@@ -81,14 +82,14 @@
 
                     _upLevel = false; /* 判斷交辦案件是否升級為母案件 */
 
-                    if (!(UpdateImportCase(mRecord)))
+                    if (!(UpdateImportCase(eosEventRecord)))
                     {
                         Logger.Error("處理案件等級變更時發生錯誤.");
                         return false;
                     }
                     Logger.Info("處理案件等級變更成功!");
 
-                    if (!(UpdateRecuseOrder(mRecord)))
+                    if (!(UpdateRecuseOrder(eosEventRecord)))
                     {
                         Logger.Error("新增搶修順序資料時發生錯誤.");
                         return false;
@@ -97,7 +98,7 @@
 
                     if (mKind == GlobalVariable.CaseTypeChanged)
                     {
-                        if (!DeleteOldCase(mRecord))
+                        if (!DeleteOldCase(eosEventRecord))
                         {
                             Logger.Error("案件轉換發生錯誤");
                             return false;
@@ -105,7 +106,7 @@
                         Logger.Info("案件轉換成功!");
                     }
 
-                    if (!SaveCustomerTel(mRecord))
+                    if (!SaveCustomerTel(eosEventRecord))
                     {
                         Logger.Error("無法將用戶電話回存回資料庫.");
                         return false;
@@ -114,9 +115,9 @@
                 }
                 else if (mKind == GlobalVariable.NoMeter)
                 {
-                    var sqlStmt = "INSERT INTO EOS.RESCUE_ORDER SELECT " + mRecord.CaseId+ ",999,COUNT(*) + 1,'',"
-                                     + mRecord.LocateEquipment.GetDsufid() + " FROM EOS.RESCUE_ORDER WHERE DSUFID = "
-                                     + mRecord.LocateEquipment.GetDsufid();
+                    var sqlStmt = "INSERT INTO EOS.RESCUE_ORDER SELECT " + eosEventRecord.CaseId + ",999,COUNT(*) + 1,'',"
+                                  + eosEventRecord.LocateEquipment.DsUfid + " FROM EOS.RESCUE_ORDER WHERE DSUFID = "
+                                  + eosEventRecord.LocateEquipment.DsUfid;
 
                     command1 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                     if (command1.ExecuteNonQuery() <= 0)
@@ -129,9 +130,9 @@
                     Logger.Info("新增搶修順序成功!");
                 }
 
-                if (mRecord.ParentId== 0)
+                if (eosEventRecord.ParentId == 0)
                 {
-                    if (!InsertIntoSri(mRecord))
+                    if (!InsertIntoSri(eosEventRecord))
                     {
                         Logger.Error("新增資料庫(OCSDB.SRI)錯誤.");
                         return false;
@@ -153,11 +154,11 @@
             return true;
         }
 
-        private bool ProcessSingalCase(Object.EventRecord mRecord)
+        private bool ProcessSingalCase(Object.EOSEventRecord eosEventRecord)
         {
             var result = false;
-            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
-                             + GlobalVariable.OriginalCase + ",0)";
+            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + eosEventRecord.CaseId + "," + CCSCaseState.WaitForDespatch + ",1,"
+                          + GlobalVariable.OriginalCase + ",0)";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
@@ -179,11 +180,11 @@
             return result;
         }
 
-        private bool ProcessMergeCase(Object.EventRecord mRecord)
+        private bool ProcessMergeCase(Object.EOSEventRecord eosEventRecord)
         {
             // insert eos.events
-            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
-                             + GlobalVariable.ChildCase + ",0)";
+            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + eosEventRecord.CaseId + "," + CCSCaseState.WaitForDespatch + ",1,"
+                          + GlobalVariable.ChildCase + ",0)";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
@@ -197,7 +198,8 @@
                 }
 
                 // insert into eos.mergecase
-                sqlStmt = "INSERT INTO EOS.MERGECASE VALUES(" + mRecord.CaseId+ ",'" + mRecord.AcceptNum+ "'," + mRecord.ParentId+ ")";
+                sqlStmt = "INSERT INTO EOS.MERGECASE VALUES(" + eosEventRecord.CaseId + ",'" + eosEventRecord.AcceptNum + "'," +
+                          eosEventRecord.ParentId + ")";
 
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
@@ -208,8 +210,9 @@
                 }
 
                 // update parent case data(EOS.EVENTS)
-                sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ParentCase + ",MERGECASECOUNT = MERGECASECOUNT + 1 " + "WHERE CASEID = "
-                        + mRecord.ParentId;
+                sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ParentCase +
+                          ",MERGECASECOUNT = MERGECASECOUNT + 1 " + "WHERE CASEID = "
+                          + eosEventRecord.ParentId;
 
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
@@ -220,8 +223,10 @@
                 }
 
                 // update parent case data(EOS.EVENTRECORD)
-                sqlStmt = "UPDATE EOS.EVENTRECORD SET FSC = " + mRecord.Fsc+ ",UFID = " + mRecord.Ufid                        + " WHERE CASEID in (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + mRecord.ParentId+ ") OR CASEID = "
-                        + mRecord.ParentId;
+                sqlStmt = "UPDATE EOS.EVENTRECORD SET FSC = " + eosEventRecord.Fsc + ",UFID = " + eosEventRecord.Ufid +
+                          " WHERE CASEID in (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + eosEventRecord.ParentId +
+                          ") OR CASEID = "
+                          + eosEventRecord.ParentId;
 
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
@@ -242,12 +247,12 @@
             return true;
         }
 
-        private bool SetVisualCustomer(Object.EventRecord mRecord)
+        private bool SetVisualCustomer(Object.EOSEventRecord eosEventRecord)
         {
-            string sqlStmt = "";
-            string customerKind = "C"; // 高壓用戶or一般用戶
+            var sqlStmt = "";
+            var customerKind = "C"; // 高壓用戶or一般用戶
 
-            sqlStmt = "SELECT COUNT(*) as COUNT FROM BASEDB.HICUSTOMER WHERE METR_NUMB = '" + mRecord.Meter+ "'";
+            sqlStmt = "SELECT COUNT(*) as COUNT FROM BASEDB.HICUSTOMER WHERE METR_NUMB = '" + eosEventRecord.Meter + "'";
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -272,11 +277,13 @@
                 command.Dispose();
             }
 
-            if (mRecord.ParentId== 0)
+            if (eosEventRecord.ParentId == 0)
             {
-                sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + mRecord.CaseId+ ",A.M_NAME,"
-                        + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TRAN_CORD,M.CUST_TYPE,'" + customerKind + "' "
-                        + "FROM BASEDB.METER M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) AND M.METR_NUMB = '" + mRecord.Meter+ "'";
+                sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + eosEventRecord.CaseId + ",A.M_NAME,"
+                          + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TRAN_CORD,M.CUST_TYPE,'" + customerKind + "' "
+                          +
+                          "FROM BASEDB.METER M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) AND M.METR_NUMB = '" +
+                          eosEventRecord.Meter + "'";
 
                 OracleCommand command1 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                 if (command1.ExecuteNonQuery() >= 0)
@@ -289,18 +296,19 @@
             }
             else
             {
-                return InsertMutilCustomer(customerKind, mRecord);
+                return InsertMutilCustomer(customerKind, eosEventRecord);
             }
         }
 
-        private bool InsertMutilCustomer(string customerKind, Object.EventRecord mRecord)
+        private bool InsertMutilCustomer(string customerKind, Object.EOSEventRecord eosEventRecord)
         {
             string sqlStmt = "";
             bool updateCustomer = false;
             string mTpclidGroupId = "";
             string mCustomerKind = "C";
 
-            sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + mRecord.ParentId                    + " OR CASEID IN (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + mRecord.ParentId+ ")";
+            sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + eosEventRecord.ParentId +
+                      " OR CASEID IN (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + eosEventRecord.ParentId + ")";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
@@ -331,7 +339,8 @@
             if (updateCustomer)
             {
                 /* 找出原始案件的影響用戶資料 */
-                sqlStmt = "SELECT TPCLIDGROUPID,CUSTOMERKIND FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + mRecord.ParentId;
+                sqlStmt = "SELECT TPCLIDGROUPID,CUSTOMERKIND FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " +
+                          eosEventRecord.ParentId;
 
                 try
                 {
@@ -349,7 +358,7 @@
                     if (mCustomerKind.Equals("C"))
                     {
                         /* 刪除原始案件的既有用戶資料 */
-                        sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + mRecord.ParentId;
+                        sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + eosEventRecord.ParentId;
 
                         command1.CommandText = sqlStmt;
                         if (command1.ExecuteNonQuery() < 0)
@@ -360,10 +369,13 @@
                         }
 
                         /* 將原始案件的影響用戶數改為變壓器的全部用戶 */
-                        sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + mRecord.ParentId+ ",A.M_NAME,"
-                                + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TPCLIDGROUPID,M.CUST_TYPE,'" + mCustomerKind + "' "
-                                + "FROM (SELECT TELE_NUMB,METR_NUMB,TRAN_CORD as TPCLIDGROUPID,CUST_TYPE FROM BASEDB.METER " + "WHERE TRAN_CORD = '"
-                                + mTpclidGroupId + "') M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";
+                        sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + eosEventRecord.ParentId + ",A.M_NAME,"
+                                  + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TPCLIDGROUPID,M.CUST_TYPE,'" + mCustomerKind +
+                                  "' "
+                                  +
+                                  "FROM (SELECT TELE_NUMB,METR_NUMB,TRAN_CORD as TPCLIDGROUPID,CUST_TYPE FROM BASEDB.METER " +
+                                  "WHERE TRAN_CORD = '"
+                                  + mTpclidGroupId + "') M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";
 
                         command1.CommandText = sqlStmt;
                         if (command1.ExecuteNonQuery() <= 0)
@@ -384,10 +396,11 @@
             }
 
             /* 新受理案件的影響用戶資料 */
-            sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + mRecord.CaseId+ ",A.M_NAME,"
-                    + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TPCLIDGROUPID,M.CUST_TYPE,'" + customerKind + "' "
-                    + "FROM (SELECT TELE_NUMB,METR_NUMB,TRAN_CORD as TPCLIDGROUPID,CUST_TYPE FROM BASEDB.METER "
-                    + "WHERE TRAN_CORD = (SELECT TRAN_CORD FROM BASEDB.METER WHERE METR_NUMB = '" + mRecord.Meter                    + "')) M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";
+            sqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + eosEventRecord.CaseId + ",A.M_NAME,"
+                      + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TPCLIDGROUPID,M.CUST_TYPE,'" + customerKind + "' "
+                      + "FROM (SELECT TELE_NUMB,METR_NUMB,TRAN_CORD as TPCLIDGROUPID,CUST_TYPE FROM BASEDB.METER "
+                      + "WHERE TRAN_CORD = (SELECT TRAN_CORD FROM BASEDB.METER WHERE METR_NUMB = '" + eosEventRecord.Meter +
+                      "')) M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";
 
             OracleCommand command2 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             if (command2.ExecuteNonQuery() < 0)
@@ -400,22 +413,22 @@
             return true;
         }
 
-        private bool UpdateImportCase(Object.EventRecord mRecord)
+        private bool UpdateImportCase(Object.EOSEventRecord eosEventRecord)
         {
             /* 該案件不為交辦案件 */
-            if (mRecord.ImportCase!= GlobalVariable.IsImportCase)
+            if (eosEventRecord.ImportCase != GlobalVariable.IsImportCase)
             {
                 return true;
             }
 
             /* 該交辦案件為原始案件 */
-            if (mRecord.ParentId== 0)
+            if (eosEventRecord.ParentId == 0)
             {
                 return true;
             }
 
             /* 若母案件已為交辦案件,則不需再作任何更動 */
-            var sqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + mRecord.ParentId;
+            var sqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + eosEventRecord.ParentId;
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -443,7 +456,8 @@
 
             /* 將交辦案件改為母案件 */
             sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ParentCase + ",MERGECASECOUNT = "
-                    + "(SELECT MERGECASECOUNT FROM EOS.EVENTS WHERE CASEID = " + mRecord.ParentId+ ") WHERE CASEID = " + mRecord.CaseId;
+                      + "(SELECT MERGECASECOUNT FROM EOS.EVENTS WHERE CASEID = " + eosEventRecord.ParentId +
+                      ") WHERE CASEID = " + eosEventRecord.CaseId;
 
             OracleCommand command1 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             if (command1.ExecuteNonQuery() <= 0)
@@ -454,7 +468,8 @@
             }
 
             /* 將母案件改為子案件 */
-            sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ChildCase + ",MERGECASECOUNT = 0 WHERE CASEID = " + mRecord.ParentId;
+            sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ChildCase +
+                      ",MERGECASECOUNT = 0 WHERE CASEID = " + eosEventRecord.ParentId;
 
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
@@ -465,7 +480,7 @@
             }
 
             // 將EOS.MERGECASE內的資料修正 1.將原先該母案件下的子案件都改掛在交辦案件下 2.將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum)
-            sqlStmt = "UPDATE EOS.MERGECASE SET PARENTID = " + mRecord.CaseId+ " WHERE PARENTID = " + mRecord.ParentId;
+            sqlStmt = "UPDATE EOS.MERGECASE SET PARENTID = " + eosEventRecord.CaseId + " WHERE PARENTID = " + eosEventRecord.ParentId;
 
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
@@ -476,7 +491,7 @@
             }
 
             sqlStmt = "UPDATE EOS.MERGECASE SET (CASEID,ACCEPTNUM) = (SELECT CASEID,ACCEPTNUM FROM EOS.EVENTRECORD WHERE CASEID = "
-                    + mRecord.ParentId+ ") WHERE CASEID = " + mRecord.CaseId;
+                      + eosEventRecord.ParentId + ") WHERE CASEID = " + eosEventRecord.CaseId;
 
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
@@ -487,7 +502,7 @@
             }
             command1.Dispose();
 
-            return UpdateOtherTable(mRecord.ParentId, mRecord.CaseId, mRecord.AcceptNum);
+            return UpdateOtherTable(eosEventRecord.ParentId, eosEventRecord.CaseId, eosEventRecord.AcceptNum);
         }
 
         private bool UpdateOtherTable(int oldCaseId, int newCaseId, string newAcceptNum)
@@ -525,7 +540,8 @@
                             return false;
                         }
 
-                        sqlStmt = "update eos.events set casestatus=" + CCSCaseState.WaitForSponsor + " where caseid=" + newCaseId;
+                        sqlStmt = "update eos.events set casestatus=" + CCSCaseState.WaitForSponsor + " where caseid=" +
+                                  newCaseId;
                         command.CommandText = sqlStmt;
                         if (command.ExecuteNonQuery() < 0)
                         {
@@ -534,11 +550,12 @@
                             return false;
                         }
 
-                        _mEventRec.IsDespatched = true;
+                        _eosEventRecord.IsDespatched = true;
                         break;
                 }
 
-                sqlStmt = "UPDATE EOS.EVENTS SET CASESTATUS = " + CCSCaseState.WaitForDespatch + " WHERE CASEID = " + oldCaseId;
+                sqlStmt = "UPDATE EOS.EVENTS SET CASESTATUS = " + CCSCaseState.WaitForDespatch + " WHERE CASEID = " +
+                          oldCaseId;
 
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
@@ -548,8 +565,9 @@
                     return false;
                 }
 
-                sqlStmt = "UPDATE OCSDB.SRI SET SCENENAME = '" + newAcceptNum + "' WHERE SCENENAME = (SELECT ACCEPTNUM FROM "
-                        + "EOS.EVENTRECORD WHERE CASEID = " + oldCaseId + ")";
+                sqlStmt = "UPDATE OCSDB.SRI SET SCENENAME = '" + newAcceptNum +
+                          "' WHERE SCENENAME = (SELECT ACCEPTNUM FROM "
+                          + "EOS.EVENTRECORD WHERE CASEID = " + oldCaseId + ")";
 
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() < 0)
@@ -611,8 +629,9 @@
                     //                    return false;
                     //                }
 
-                    sqlStmt = "UPDATE OCSDB.LOCKFEATURE SET DESCRIPTION = '" + newAcceptNum + "' WHERE DESCRIPTION = (SELECT ACCEPTNUM FROM "
-                            + "EOS.EVENTRECORD WHERE CASEID = " + oldCaseId + ")";
+                    sqlStmt = "UPDATE OCSDB.LOCKFEATURE SET DESCRIPTION = '" + newAcceptNum +
+                              "' WHERE DESCRIPTION = (SELECT ACCEPTNUM FROM "
+                              + "EOS.EVENTRECORD WHERE CASEID = " + oldCaseId + ")";
 
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
@@ -634,14 +653,14 @@
             return true;
         }
 
-        private bool UpdateRecuseOrder(Object.EventRecord mRecord)
+        private bool UpdateRecuseOrder(Object.EOSEventRecord eosEventRecord)
         {
             int rank = 999;
             int priority = 1;
             OracleCommand command = null;
 
             /* 單純的子案件或不需升級的交辦案件,不需要更新EOS.RESCUE_ORDER */
-            if ((mRecord.ParentId!= 0) && !(_upLevel))
+            if ((eosEventRecord.ParentId != 0) && !(_upLevel))
             {
                 return true;
             }
@@ -658,7 +677,9 @@
                 if (_upLevel)
                 {
                     /* 將原先母案件的編號改為新的母案件編號 */
-                    sqlStmt = "UPDATE EOS.RESCUE_ORDER SET CASEID = " + mRecord.CaseId+ " WHERE CASEID = " + mRecord.ParentId                            + " AND DSUFID = " + mRecord.LocateEquipment.GetDsufid();
+                    sqlStmt = "UPDATE EOS.RESCUE_ORDER SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +
+                              eosEventRecord.ParentId +
+                              " AND DSUFID = " + eosEventRecord.LocateEquipment.DsUfid;
 
                     command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                     if (command.ExecuteNonQuery() <= 0)
@@ -671,7 +692,7 @@
                 else
                 {
                     /* 找出該饋線的等級 */
-                    sqlStmt = "SELECT RANK FROM EOS.IMP_FEEDER WHERE FEEDERID = " + mRecord.FdrId;
+                    sqlStmt = "SELECT RANK FROM EOS.IMP_FEEDER WHERE FEEDERID = " + eosEventRecord.FdrId;
 
                     command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                     OracleDataReader reader = command.ExecuteReader();
@@ -683,8 +704,9 @@
                     reader.Close();
 
                     /* 找出同等級饋線中的最大搶修順序號碼 */
-                    sqlStmt = "SELECT MAX(PRIORITY) as PRIORITY FROM EOS.RESCUE_ORDER WHERE RANK = " + rank + " AND DSUFID = "
-                            + mRecord.LocateEquipment.GetDsufid();
+                    sqlStmt = "SELECT MAX(PRIORITY) as PRIORITY FROM EOS.RESCUE_ORDER WHERE RANK = " + rank +
+                              " AND DSUFID = "
+                              + eosEventRecord.LocateEquipment.DsUfid;
 
                     command.CommandText = sqlStmt;
                     reader = command.ExecuteReader();
@@ -699,8 +721,8 @@
                     if (priority == 0 && rank > 0)
                     {
                         sqlStmt = "SELECT MAX(PRIORITY) as PRIORITY FROM EOS.RESCUE_ORDER WHERE RANK = "
-                                + "(SELECT MAX(RANK) FROM EOS.RESCUE_ORDER WHERE RANK < " + rank + " AND DSUFID = "
-                                + mRecord.LocateEquipment.GetDsufid() + ")";
+                                  + "(SELECT MAX(RANK) FROM EOS.RESCUE_ORDER WHERE RANK < " + rank + " AND DSUFID = "
+                                  + eosEventRecord.LocateEquipment.DsUfid + ")";
 
                         command.CommandText = sqlStmt;
                         reader = command.ExecuteReader();
@@ -715,13 +737,15 @@
 
                     /* 如果還是沒找到,就設Priority = 0 (只有當新增案件的Rank為最小時或第一筆案件才可能發生) */
                     if (priority == 0)
-                    { // 若不寫清楚會看不懂
+                    {
+                        // 若不寫清楚會看不懂
                         priority = 0;
 
                         /* 將搶修順序號碼大於等於找出來號碼的都加1 */
                     }
-                    sqlStmt = "UPDATE EOS.RESCUE_ORDER SET PRIORITY = PRIORITY + 1 WHERE PRIORITY > " + priority + " AND DSUFID = "
-                            + mRecord.LocateEquipment.GetDsufid();
+                    sqlStmt = "UPDATE EOS.RESCUE_ORDER SET PRIORITY = PRIORITY + 1 WHERE PRIORITY > " + priority +
+                              " AND DSUFID = "
+                              + eosEventRecord.LocateEquipment.DsUfid;
 
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
@@ -732,8 +756,9 @@
                     }
 
                     /* 將本身資料存入資料庫內 */
-                    sqlStmt = "INSERT INTO EOS.RESCUE_ORDER (CASEID,RANK,PRIORITY,DSUFID) VALUES (" + mRecord.CaseId+ "," + rank + ","
-                            + (priority + 1) + "," + mRecord.LocateEquipment.GetDsufid() + ")";
+                    sqlStmt = "INSERT INTO EOS.RESCUE_ORDER (CASEID,RANK,PRIORITY,DSUFID) VALUES (" + eosEventRecord.CaseId +
+                              "," + rank + ","
+                              + (priority + 1) + "," + eosEventRecord.LocateEquipment.DsUfid + ")";
 
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() <= 0)
@@ -759,7 +784,7 @@
         }
 
         // 當原先同一用戶在事故受理後又報案,不過從一般案件轉為交辦案件所需作的轉換工作
-        private bool DeleteOldCase(Object.EventRecord mRecord)
+        private bool DeleteOldCase(Object.EOSEventRecord eosEventRecord)
         {
             string sqlStmt;
             int caseId = 0; // 原先的事故號碼
@@ -769,8 +794,9 @@
             OracleCommand command = null;
 
             sqlStmt = "SELECT R.CASEID as CASEID,E.CASETYPE as CASETYPE,E.CASESTATUS as CASESTATUS,E.COUNT as COUNT FROM "
-                    + "EOS.EVENTRECORD R,EOS.EVENTS E WHERE R.CASEID = E.CASEID AND R.CUSTOMERMETER = '" + mRecord.Meter+ "' AND R.CASEID <> "
-                    + mRecord.CaseId+ " AND E.CASESTATUS <= " + CCSCaseState.WaitForSponsor;
+                      + "EOS.EVENTRECORD R,EOS.EVENTS E WHERE R.CASEID = E.CASEID AND R.CUSTOMERMETER = '" +
+                      eosEventRecord.Meter + "' AND R.CASEID <> "
+                      + eosEventRecord.CaseId + " AND E.CASESTATUS <= " + CCSCaseState.WaitForSponsor;
 
             try
             {
@@ -833,9 +859,10 @@
                     return false;
                 }
 
-                if (mRecord.ParentId== caseId)
-                { // 原本舊案件為母案件
-                    sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.MERGECASE WHERE PARENTID = " + mRecord.CaseId;
+                if (eosEventRecord.ParentId == caseId)
+                {
+                    // 原本舊案件為母案件
+                    sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.MERGECASE WHERE PARENTID = " + eosEventRecord.CaseId;
 
                     command.CommandText = sqlStmt;
                     reader = command.ExecuteReader();
@@ -851,8 +878,9 @@
                                 return false;
 
                             case 1: // 子案件為之前受理的同一事故案件
-                                sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.OriginalCase + ",COUNT = " + (count + 1)
-                                        + ",MERGECASECOUNT = 0 WHERE CASEID = " + mRecord.CaseId;
+                                sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.OriginalCase +
+                                          ",COUNT = " + (count + 1)
+                                          + ",MERGECASECOUNT = 0 WHERE CASEID = " + eosEventRecord.CaseId;
 
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() <= 0)
@@ -863,8 +891,9 @@
                                     return false;
                                 }
 
-                                sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CUSTOMERMETER <> '" + mRecord.Meter+ "' AND CASEID = "
-                                        + mRecord.CaseId;
+                                sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CUSTOMERMETER <> '" + eosEventRecord.Meter +
+                                          "' AND CASEID = "
+                                          + eosEventRecord.CaseId;
 
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() < 0)
@@ -877,8 +906,9 @@
                                 break;
 
                             default:
-                                sqlStmt = "UPDATE EOS.EVENTS SET MERGECASECOUNT = MERGECASECOUNT - 1,COUNT = " + (count + 1) + " WHERE CASEID = "
-                                        + mRecord.CaseId;
+                                sqlStmt = "UPDATE EOS.EVENTS SET MERGECASECOUNT = MERGECASECOUNT - 1,COUNT = " +
+                                          (count + 1) + " WHERE CASEID = "
+                                          + eosEventRecord.CaseId;
 
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() < 0)
@@ -925,13 +955,13 @@
             return true;
         }
 
-        private bool InsertIntoSri(Object.EventRecord mRecord)
+        private bool InsertIntoSri(Object.EOSEventRecord eosEventRecord)
         {
             int count = 0;
             OracleCommand command = null;
             OracleDataReader reader = null;
 
-            var sqlStmt = "SELECT COUNT(*) as COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + mRecord.AcceptNum+ "'";
+            var sqlStmt = "SELECT COUNT(*) AS COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + eosEventRecord.AcceptNum + "'";
 
             try
             {
@@ -957,7 +987,7 @@
                 return true;
             }
 
-            sqlStmt = "INSERT INTO OCSDB.SRI VALUES('" + mRecord.AcceptNum+ "',2,-1)";
+            sqlStmt = "INSERT INTO OCSDB.SRI VALUES('" + eosEventRecord.AcceptNum + "',2,-1)";
 
             try
             {
@@ -978,29 +1008,28 @@
             return true;
         }
 
-        private bool SaveCustomerTel(Object.EventRecord mRecord)
+        private bool SaveCustomerTel(Object.EOSEventRecord eosEventRecord)
         {
-            string sqlStmt;
-
             // 無電號資料
             /*
              * if (m_Record.getisReCall() == CCS.GlobalVariable.NotReCall) { return true; }
              */
 
             // 沒有回覆電話可供回存
-            if (mRecord.Tel== null || mRecord.Tel.Trim().Length == 0)
+            if (eosEventRecord.Tel == null || eosEventRecord.Tel.Trim().Length == 0)
             {
                 return true;
             }
 
             // 電話資料過長
-            if (mRecord.Tel.Trim().Length > 24)
+            if (eosEventRecord.Tel.Trim().Length > 24)
             {
                 Logger.Warn("電話過長號碼,無法回存資料庫.");
                 return true;
             }
 
-            sqlStmt = "UPDATE BASEDB.METER SET TELE_NUMB = '" + mRecord.Tel.Trim() + "' WHERE METR_NUMB = '" + mRecord.Meter+ "'";
+            var sqlStmt = "UPDATE BASEDB.METER SET TELE_NUMB = '" + eosEventRecord.Tel.Trim() + "' WHERE METR_NUMB = '" +
+                          eosEventRecord.Meter + "'";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
diff --git a/CCSTrace/CCS/Function/InitialEventData.cs b/CCSTrace/CCS/Function/InitialEventData.cs
index e2c0e96..f31064c 100644
--- a/CCSTrace/CCS/Function/InitialEventData.cs
+++ b/CCSTrace/CCS/Function/InitialEventData.cs
@@ -9,12 +9,12 @@
     {
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
-        private string _mAcceptNum = "";
-        private int _mCaseId = 0;
+        private string _acceptNum = "";
+        private int _caseId = 0;
         private int _mYear = 0;
-        private bool _mChangeYear = false;
-        private string _mNowYear = string.Empty;
-        private readonly string _mAcceptTime = "";
+        private bool _isChangeYear = false;
+        private string _nowYear = string.Empty;
+        private readonly string _acceptTime = "";
         private readonly OracleConnection _connectionTpc;
 
         //New CaseID and New AcceptNum must be seen by others,so it need not controled by transaction
@@ -32,10 +32,10 @@
             {
                 if (reader.Read())
                 {
-                    _mAcceptNum = reader["ACCEPTNUM"].ToString();
-                    _mCaseId = Convert.ToInt32(reader["CASEID"].ToString());
+                    _acceptNum = reader["ACCEPTNUM"].ToString();
+                    _caseId = Convert.ToInt32(reader["CASEID"].ToString());
                     _mYear = Convert.ToInt32(reader["YEAR"].ToString());
-                    _mAcceptTime = reader["ACCEPTTIME"].ToString();
+                    _acceptTime = reader["ACCEPTTIME"].ToString();
                 }
                 else
                 {
@@ -46,7 +46,6 @@
             catch (Exception e)
             {
                 Logger.Error(e, "Problems occur when Initializing EventData: " + e.Message);
-                Console.WriteLine(e.StackTrace);
                 return;
             }
             finally
@@ -57,7 +56,7 @@
 
             CheckAcceptNum();
 
-            while (!UpdateDataBase(_mChangeYear))
+            while (!UpdateDataBase(_isChangeYear))
             {
                 RegetNumber();
                 CheckAcceptNum();
@@ -66,12 +65,12 @@
 
         public int GetNewCaseId()
         {
-            return _mCaseId;
+            return _caseId;
         }
 
         public string GetNewAcceptNum()
         {
-            return _mAcceptNum;
+            return _acceptNum;
         }
 
         private bool UpdateDataBase(bool mChangeYear)
@@ -80,11 +79,11 @@
             bool mResult = false;
 
             if (mChangeYear)
-                sqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(_mAcceptNum) + 1).ToString() + "',CASEID = "
-                        + (_mCaseId + 1) + ",YEAR = " + _mNowYear + " WHERE CASEID = " + _mCaseId;
+                sqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(_acceptNum) + 1) + "',CASEID = "
+                        + (_caseId + 1) + ",YEAR = " + _nowYear + " WHERE CASEID = " + _caseId;
             else
-                sqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(_mAcceptNum) + 1).ToString() + "',CASEID = "
-                        + (_mCaseId + 1) + " WHERE CASEID = " + _mCaseId + " AND ACCEPTNUM = '" + _mAcceptNum + "'";
+                sqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(_acceptNum) + 1) + "',CASEID = "
+                        + (_caseId + 1) + " WHERE CASEID = " + _caseId + " AND ACCEPTNUM = '" + _acceptNum + "'";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc);
 
@@ -108,9 +107,9 @@
 
         private void CheckAcceptNum()
         {
-            int nowYear = Convert.ToInt32(_mAcceptTime.Substring(0, 4)) - 1911;
-            int nowMonth = Convert.ToInt32(_mAcceptTime.Substring(5, 2));
-            string tmp = _mAcceptNum;
+            int nowYear = Convert.ToInt32(_acceptTime.Substring(0, 4)) - 1911;
+            int nowMonth = Convert.ToInt32(_acceptTime.Substring(5, 2));
+            string tmp = _acceptNum;
 
             if (Convert.ToInt32(tmp.Substring(0, 3)) == nowYear)
             {
@@ -118,19 +117,19 @@
                 {
                     // 新月份
                     if (nowMonth < 10)
-                        _mAcceptNum = nowYear.ToString() + "0" + nowMonth.ToString() + "0001";
+                        _acceptNum = nowYear + "0" + nowMonth + "0001";
                     else
-                        _mAcceptNum = nowYear.ToString() + nowMonth.ToString() + "0001";
+                        _acceptNum = nowYear + nowMonth.ToString() + "0001";
                 }
             }
             else
             {
-                _mAcceptNum = nowYear.ToString() + "010001"; // 新年度
-                _mNowYear = nowYear.ToString();
-                _mChangeYear = true;
+                _acceptNum = nowYear + "010001"; // 新年度
+                _nowYear = nowYear.ToString();
+                _isChangeYear = true;
             }
 
-            if (!_mChangeYear)
+            if (!_isChangeYear)
             {
             }
         }
@@ -145,15 +144,14 @@
             {
                 if (reader.Read())
                 {
-                    _mAcceptNum = reader["ACCEPTNUM"].ToString();
-                    _mCaseId = Convert.ToInt32(reader["CASEID"].ToString());
+                    _acceptNum = reader["ACCEPTNUM"].ToString();
+                    _caseId = Convert.ToInt32(reader["CASEID"].ToString());
                     _mYear = Convert.ToInt32(reader["YEAR"].ToString());
                 }
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Function/Leach.cs b/CCSTrace/CCS/Function/Leach.cs
index 21312e1..ce7ce16 100644
--- a/CCSTrace/CCS/Function/Leach.cs
+++ b/CCSTrace/CCS/Function/Leach.cs
@@ -22,7 +22,7 @@
             _traceConnectionString = traceConnection;
         }
 
-        public int LeachCase(Object.EventRecord mNewRec)
+        public int LeachCase(Object.EOSEventRecord mNewRec)
         {
             switch (SameCase(mNewRec))
             {
@@ -51,7 +51,7 @@
             return _mergeCase.GetOldEquipment();
         }
 
-        private int SameCase(Object.EventRecord mNewRec)
+        private int SameCase(Object.EOSEventRecord mNewRec)
         {
             string sqlStmt = "SELECT R.ACCEPTNUM,R.CASEID as CASEID,R.IMPORTCASE as IMPORTCASE,E.CASETYPE as CASETYPE FROM EOS.EVENTRECORD R,"
                            + "EOS.EVENTS E WHERE ";
@@ -89,7 +89,7 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
+                Logger.Error(e, e.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -264,7 +264,7 @@
             return status;
         }
 
-        private int Judge(Object.EventRecord mNewRec, bool changeCaseType)
+        private int Judge(Object.EOSEventRecord mNewRec, bool changeCaseType)
         {
             int mResult = GlobalVariable.FailureByDb;
 
@@ -278,8 +278,8 @@
             {
                 if (mNewRec.Fsc!= 0)
                 {
-                    mNewRec.LocateEquipment.SetFsc(GlobalVariable.Breaker);
-                    mNewRec.LocateEquipment.SetUfid(mNewRec.Ufid);
+                    mNewRec.LocateEquipment.Fsc = (GlobalVariable.Breaker);
+                    mNewRec.LocateEquipment.Ufid = (mNewRec.Ufid);
                     Logger.Info("饋線全停:" + mNewRec.Fsc+ ", " + mNewRec.Ufid);
                     _mergeCase.Merge(mNewRec, _connectionTpc, _transaction, _traceConnectionString);
                     return GlobalVariable.Success;
@@ -367,7 +367,7 @@
             return mResult;
         }
 
-        private int GetEquipment(Object.EventRecord mNewRec)
+        private int GetEquipment(Object.EOSEventRecord mNewRec)
         {
             string temp;
             string mOwnerTpclid;
@@ -407,8 +407,7 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -418,7 +417,7 @@
             }
         }
 
-        private int GetSxfmr(string mTpclid, string mGroup, Object.EventRecord mNewRec)
+        private int GetSxfmr(string mTpclid, string mGroup, Object.EOSEventRecord mNewRec)
         {
             string sqlStmt;
             int mStatus = GlobalVariable.FailureByDb;
@@ -461,7 +460,7 @@
             return mStatus;
         }
 
-        private int GetHicustomer(string mTpclid, string mGroup, Object.EventRecord mNewRec)
+        private int GetHicustomer(string mTpclid, string mGroup, Object.EOSEventRecord mNewRec)
         {
             string sqlStmt;
 
@@ -503,7 +502,7 @@
             }
         }
 
-        private void GetLocateEquipment(Object.EventRecord mNewRec)
+        private void GetLocateEquipment(Object.EOSEventRecord mNewRec)
         {
             var sqlStmt = "SELECT OWNERFSC as FSC,OWNERUFID as UFID,OWNERTPCLID as TPCLID FROM ";
             switch (mNewRec.Fsc)
@@ -524,9 +523,9 @@
             {
                 if (reader.Read())
                 {
-                    mNewRec.LocateEquipment.SetFsc(Convert.ToInt32(reader["FSC"].ToString()));
-                    mNewRec.LocateEquipment.SetUfid(Convert.ToInt32(reader["UFID"].ToString()));
-                    mNewRec.LocateEquipment.SetTpclid(reader["TPCLID"].ToString());
+                    mNewRec.LocateEquipment.Fsc = (Convert.ToInt32(reader["FSC"].ToString()));
+                    mNewRec.LocateEquipment.Ufid = (Convert.ToInt32(reader["UFID"].ToString()));
+                    mNewRec.LocateEquipment.Tpclid = (reader["TPCLID"].ToString());
                 }
             }
             catch (Exception e)
diff --git a/CCSTrace/CCS/Function/MailService.cs b/CCSTrace/CCS/Function/MailService.cs
index 719d8d3..405297b 100644
--- a/CCSTrace/CCS/Function/MailService.cs
+++ b/CCSTrace/CCS/Function/MailService.cs
@@ -79,8 +79,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Function/MergeCase.cs b/CCSTrace/CCS/Function/MergeCase.cs
index b501ce9..5a588f3 100644
--- a/CCSTrace/CCS/Function/MergeCase.cs
+++ b/CCSTrace/CCS/Function/MergeCase.cs
@@ -10,20 +10,20 @@
     {
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
-        private EventRecord _lEventrecord;
+        private EOSEventRecord _lEventrecord;
         private EventAI.JudgeCase _mJudgeCase;
 
         public MergeCase()
         {
         }
 
-        public void Merge(EventRecord mEventrecord, OracleConnection conn, OracleTransaction trx, string traceConnection)
+        public void Merge(EOSEventRecord eosEventRecord, OracleConnection conn, OracleTransaction trx, string traceConnection)
         {
             try
             {
-                _mJudgeCase = new EventAI.JudgeCase(mEventrecord.FdrId, mEventrecord.Fsc, mEventrecord.Ufid,
-                                                        mEventrecord.CaseId, mEventrecord.AcceptDate, conn, trx, traceConnection);
-                _lEventrecord = mEventrecord;
+                _mJudgeCase = new EventAI.JudgeCase(eosEventRecord.FdrId, eosEventRecord.Fsc, eosEventRecord.Ufid,
+                                                        eosEventRecord.CaseId, eosEventRecord.AcceptDate, conn, trx, traceConnection);
+                _lEventrecord = eosEventRecord;
                 _mJudgeCase.AiBegin();
                 _lEventrecord.ParentId = _mJudgeCase.GetParentCaseId();
                 _lEventrecord.Fsc = _mJudgeCase.GetInferEquipment().Fsc;
@@ -36,7 +36,7 @@
             }
             catch (Exception e)
             {
-                Logger.Error(e.Message);
+                Logger.Error(e, e.Message);
                 throw;
             }
         }
diff --git a/CCSTrace/CCS/Object/Addr_Contrast.cs b/CCSTrace/CCS/Object/Addr_Contrast.cs
index 9d18779..2e60d5b 100644
--- a/CCSTrace/CCS/Object/Addr_Contrast.cs
+++ b/CCSTrace/CCS/Object/Addr_Contrast.cs
@@ -1,7 +1,9 @@
 using System;
 
 using System.Collections;
+using System.Collections.Generic;
 using System.Data.OracleClient;
+using CCSTrace.TPower.DMMS.Model.CCS;
 using NLog;
 
 namespace CCSTrace.CCS.Object
@@ -10,79 +12,85 @@
     {
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
-        public static Hashtable MTotalData = null;
-        public static string DefaultDept = "市區巡修課";
-        private OracleConnection _connectionTpc;
+        public const string DefaultDept = "市區巡修課";
 
-        public AddrContrast(OracleConnection conn, OracleTransaction trx)
+        public static AddrContrast Instance { get; } = new AddrContrast();
+
+        private Dictionary<string, List<ADDRCONTRAST>> totalAddrData = null;
+
+        private AddrContrast()
         {
-            _connectionTpc = conn;
+        }
 
-            ArrayList mData = new ArrayList();
-            string tmp = "";
+        public void initialize(OracleConnection conn)
+        {
 
-            if (MTotalData != null)
+            if (totalAddrData != null)
                 return;
 
-            MTotalData = new Hashtable();
+            totalAddrData = new Dictionary<string, List<ADDRCONTRAST>>();
+
             var sqlStmt = "SELECT DEPTID,CITY,TOWN,ROAD FROM CCS.ADDR_CONTRAST ORDER BY CITY,TOWN,ROAD";
 
             OracleCommand command = null;
             OracleDataReader reader = null;
             try
             {
-                command = new OracleCommand(sqlStmt, _connectionTpc, trx);
+                command = new OracleCommand(sqlStmt, conn);
                 reader = command.ExecuteReader();
+
+                List<ADDRCONTRAST> addrcontrasts = new List<ADDRCONTRAST>();
+                string tmp = "";
 
                 while (reader.Read())
                 {
                     ArrayList mRecord = new ArrayList();
-                    var city = reader["CITY"].ToString();
-                    mRecord.Add(city);
-                    mRecord.Add(reader["TOWN"].ToString());
-                    mRecord.Add(reader["ROAD"].ToString());
-                    mRecord.Add(Convert.ToInt32(reader["DEPTID"].ToString()));
+                    ADDRCONTRAST item = new ADDRCONTRAST
+                    {
+                        CITY = reader["CITY"].ToString(),
+                        TOWN = reader["TOWN"].ToString(),
+                        ROAD = reader["ROAD"].ToString(),
+                        DEPTID = Convert.ToInt32(reader["DEPTID"].ToString())
+                    };
 
-                    if (tmp.Equals(city))
-                        mData.Add(mRecord);
+
+                    if (tmp.Equals(item.CITY))
+                    {
+                        addrcontrasts.Add(item);
+                    }
                     else
                     {
-                        MTotalData.Add(tmp, mData);
-                        tmp = city;
-                        mData = new ArrayList();
-                        mData.Add(mRecord);
+                        totalAddrData.Add(tmp, addrcontrasts);
+                        tmp = item.CITY;
+                        addrcontrasts = new List<ADDRCONTRAST> { item };
                     }
                 }
-                MTotalData.Add(tmp, mData);
+                totalAddrData.Add(tmp, addrcontrasts);
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.StackTrace);
-                MTotalData = null;
+                Logger.Warn(e, e.Message);
+                totalAddrData = null;
             }
             finally
             {
-                reader.Close();
-                command.Dispose();
+                reader?.Close();
+                command?.Dispose();
             }
         }
 
         public int FindDeptId(string city, string region, string road)
         {
-            int dept = 0;
-            ArrayList mData = (ArrayList)MTotalData[city];
+            var addrcontrasts = totalAddrData[city];
 
             try
             {
-                for (int i = 0; i < mData.Count; i++)
+                foreach (ADDRCONTRAST tmp in addrcontrasts)
                 {
-                    ArrayList tmp = (ArrayList)mData[i];
-                    string mRegion = tmp[1].ToString().Trim();
-                    string mRoad = tmp[2].ToString().Trim();
-                    int deptId = Convert.ToInt32(tmp[3].ToString());
-
-                    if ((region.Trim().Equals(mRegion)) && (road.Trim().Equals(mRoad)))
-                        return deptId;
+                    if (region.Trim().Equals(tmp.TOWN) && road.Trim().Equals(tmp.ROAD))
+                    {
+                        return tmp.DEPTID;
+                    }
                 }
             }
             catch (Exception e)
@@ -91,7 +99,7 @@
                 Logger.Warn("無法取得所屬巡修部門代號,預設案件所屬巡修部門為市區巡修課!");
             }
             // 當找不到部門別時,Default 設定為市巡
-            dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
+            var dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
             return dept;
         }
     }
diff --git a/CCSTrace/CCS/Object/AlarmData.cs b/CCSTrace/CCS/Object/AlarmData.cs
index fa1a977..6ea8f2c 100644
--- a/CCSTrace/CCS/Object/AlarmData.cs
+++ b/CCSTrace/CCS/Object/AlarmData.cs
@@ -40,7 +40,6 @@
             catch (Exception e)
             {
                 Logger.Error(e, "Problems occur when fetch alarm data: (" + e.Message + ")");
-                Console.WriteLine(e.StackTrace);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Object/Dept_Contrast.cs b/CCSTrace/CCS/Object/Dept_Contrast.cs
index ecf4ac1..af2a35e 100644
--- a/CCSTrace/CCS/Object/Dept_Contrast.cs
+++ b/CCSTrace/CCS/Object/Dept_Contrast.cs
@@ -37,9 +37,9 @@
                     }
                     else
                     {// 一對多(需作比對)
-                        long minMeter = Convert.ToInt64(tmpData[3].ToString());
-                        long maxMeter = Convert.ToInt64(tmpData[2].ToString());
-                        long custMeter = Convert.ToInt64(mMeter);
+                        var minMeter = Convert.ToInt64(tmpData[3].ToString());
+                        var maxMeter = Convert.ToInt64(tmpData[2].ToString());
+                        var custMeter = Convert.ToInt64(mMeter);
 
                         if ((custMeter > minMeter) && (custMeter < maxMeter))
                         {
@@ -51,7 +51,7 @@
             }
             catch (Exception ex)
             {
-                Console.WriteLine(ex.Message);
+                Logger.Warn(ex, ex.Message);
             }
             return result;
         }
@@ -91,7 +91,7 @@
             }
             catch (Exception ex)
             {
-                Console.WriteLine(ex.Message);
+                Logger.Warn(ex, ex.Message);
             }
 
             return result;
@@ -99,10 +99,9 @@
 
         private void Initial(OracleConnection connectionTpc, OracleTransaction trx)
         {
-            string sqlStmt;
             _mTotalData = new ArrayList();
 
-            sqlStmt = "SELECT SC_CODE,DEPT_CODE,MAX_METER,MIN_METER FROM CCS.DEPT_CONTRAST";
+            var sqlStmt = "SELECT SC_CODE,DEPT_CODE,MAX_METER,MIN_METER FROM CCS.DEPT_CONTRAST";
             OracleCommand command = new OracleCommand(sqlStmt, connectionTpc, trx);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -122,12 +121,12 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, e.Message);
             }
             finally
             {
-                reader.Close();
-                command.Dispose();
+                reader?.Close();
+                command?.Dispose();
             }
         }
     }
diff --git a/CCSTrace/CCS/Object/EOSCodelist.cs b/CCSTrace/CCS/Object/EOSCodelist.cs
index f622132..f400a24 100644
--- a/CCSTrace/CCS/Object/EOSCodelist.cs
+++ b/CCSTrace/CCS/Object/EOSCodelist.cs
@@ -44,8 +44,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine("Error on Startup EOSCodelist: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, "Error on Startup EOSCodelist: " + e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Object/LocateEquipment.cs b/CCSTrace/CCS/Object/LocateEquipment.cs
index 6f798e7..ae38d64 100644
--- a/CCSTrace/CCS/Object/LocateEquipment.cs
+++ b/CCSTrace/CCS/Object/LocateEquipment.cs
@@ -18,14 +18,14 @@
 
         public LocateEquipment(int mCaseId, bool hasData, OracleConnection conn, OracleTransaction transaction)
         {
-            string sqlStmt;
             OracleCommand command = null;
             OracleDataReader reader = null;
 
-            SetCaseId(mCaseId);
+            CaseId = mCaseId;
 
             try
             {
+                string sqlStmt;
                 if (hasData)
                 {
                     sqlStmt = "SELECT DSUFID,FSC,UFID,FDR,TPCLID FROM EOS.EVENTRECORD_EX WHERE CASEID = " + mCaseId;
@@ -35,11 +35,11 @@
 
                     if (reader.Read())
                     {
-                        SetDsufid(Convert.ToInt32(reader["DSUFID"].ToString()));
-                        SetFsc(Convert.ToInt32(reader["FSC"].ToString()));
-                        SetUfid(Convert.ToInt32(reader["UFID"].ToString()));
-                        SetFdr(reader["FDR"].ToString());
-                        SetTpclid(reader["TPCLID"].ToString());
+                        DsUfid =Convert.ToInt32(reader["DSUFID"].ToString());
+                        Fsc = Convert.ToInt32(reader["FSC"].ToString());
+                        Ufid = Convert.ToInt32(reader["UFID"].ToString());
+                        Fdr = reader["FDR"].ToString();
+                        Tpclid = reader["TPCLID"].ToString();
                     }
                 }
                 else
@@ -50,87 +50,60 @@
                     reader = command.ExecuteReader();
 
                     if (reader.Read())
-                        SetDsufid(Convert.ToInt32(reader["UFID"].ToString()));
+                        DsUfid = Convert.ToInt32(reader["UFID"].ToString());
                 }
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, e.Message);
             }
             finally
             {
-                reader.Close();
-                command.Dispose();
+                reader?.Close();
+                command?.Dispose();
             }
         }
 
-        public int GetCaseId()
+        public int CaseId
         {
-            return _caseId;
+            get { return _caseId; }
+            set { _caseId = value; }
         }
 
-        public void SetCaseId(int mCaseId)
+        public int DsUfid
         {
-            _caseId = mCaseId;
+            get { return _dsUfid; }
+            set { _dsUfid = value; }
         }
 
-        public int GetDsufid()
+        public int Fsc
         {
-            return _dsUfid;
+            get { return _fsc; }
+            set { _fsc = value; }
         }
 
-        public void SetDsufid(int mDsUfid)
+        public int Ufid
         {
-            _dsUfid = mDsUfid;
+            get { return _ufid; }
+            set { _ufid = value; }
         }
 
-        public int GetFsc()
+        public string Fdr
         {
-            return _fsc;
+            get { return _fdr; }
+            set { _fdr = value; }
         }
 
-        public void SetFsc(int mFsc)
+        public string Tpclid
         {
-            _fsc = mFsc;
+            get { return _tpclid; }
+            set { _tpclid = value; }
         }
 
-        public int GetUfid()
+        public string GetInsertSqlStmt()
         {
-            return _ufid;
-        }
-
-        public void SetUfid(int mUfid)
-        {
-            _ufid = mUfid;
-        }
-
-        public string GetFdr()
-        {
-            return _fdr;
-        }
-
-        public void SetFdr(string mFdr)
-        {
-            _fdr = mFdr;
-        }
-
-        public string GetTpclid()
-        {
-            return _tpclid;
-        }
-
-        public void SetTpclid(string mTpclid)
-        {
-            _tpclid = mTpclid;
-        }
-
-        public string GetSqlStmt()
-        {
-            string sqlStmt;
-
-            sqlStmt = "INSERT INTO EOS.EVENTRECORD_EX (CASEID,DSUFID,FSC,UFID,TPCLID,FDR) VALUES(" + GetCaseId() + "," + GetDsufid() + "," + GetFsc()
-                    + "," + GetUfid() + ",'" + GetTpclid() + "','" + GetFdr() + "')";
+            var sqlStmt = "INSERT INTO EOS.EVENTRECORD_EX (CASEID,DSUFID,FSC,UFID,TPCLID,FDR) VALUES(" + CaseId + "," + DsUfid + "," + Fsc
+                             + "," + Ufid + ",'" + Tpclid + "','" + Fdr + "')";
             return sqlStmt;
         }
 
diff --git a/CCSTrace/CCS/Object/NumberContrast.cs b/CCSTrace/CCS/Object/NumberContrast.cs
index 14e9684..8829f5d 100644
--- a/CCSTrace/CCS/Object/NumberContrast.cs
+++ b/CCSTrace/CCS/Object/NumberContrast.cs
@@ -17,6 +17,24 @@
         {
         }
 
+        public string Ccsid
+        {
+            get { return _ccsid; }
+            set { _ccsid = value; }
+        }
+
+        public string AcceptNum
+        {
+            get { return _acceptNum; }
+            set { _acceptNum = value; }
+        }
+
+        public int CaseId
+        {
+            get { return _caseId; }
+            set { _caseId = value; }
+        }
+
         public void SetCcsid(string mCcsid)
         {
             _ccsid = mCcsid;
@@ -49,24 +67,31 @@
 
         public bool Insert(OracleConnection conn, OracleTransaction transaction)
         {
-            string sqlStmt;
-
             if (!Check())
             {
                 return false;
             }
 
-            sqlStmt = "INSERT INTO CCS.NUM_CONTRAST (CCSID,ACCEPTNUM,CASEID) VALUES ('" + _ccsid + "','" + _acceptNum + "'," + _caseId + ")";
+            var sqlStmt = "INSERT INTO CCS.NUM_CONTRAST (CCSID,ACCEPTNUM,CASEID) VALUES ('" + _ccsid + "','" + _acceptNum + "'," + _caseId + ")";
 
             OracleCommand command = new OracleCommand(sqlStmt, conn, transaction);
 
-            if (command.ExecuteNonQuery() > 0)
+            try
             {
-                command.Dispose();
-                return true;
+                if (command.ExecuteNonQuery() > 0)
+                {
+                    return true;
+                }
+            }
+            catch (Exception e)
+            {
+                Logger.Warn(e, e.Message);
+            }
+            finally
+            {
+                command?.Dispose();
             }
 
-            command.Dispose();
             return false;
         }
 
@@ -76,17 +101,25 @@
             {
                 return false;
             }
-            string sqlStmt = "UPDATE CCS.NUM_CONTRAST SET ACCEPTNUM='" + _acceptNum + "',CASEID=" + _caseId + " WHERE CCSID='" + _ccsid + "'";
+            var sqlStmt = "UPDATE CCS.NUM_CONTRAST SET ACCEPTNUM='" + _acceptNum + "',CASEID=" + _caseId + " WHERE CCSID='" + _ccsid + "'";
 
             OracleCommand command = new OracleCommand(sqlStmt, conn, transaction);
 
-            if (command.ExecuteNonQuery() <= 0)
+            try { 
+                if (command.ExecuteNonQuery() <= 0)
+                {
+                    return false;
+                }
+            }
+            catch (Exception e)
             {
-                command.Dispose();
-                return false;
+                Logger.Warn(e, e.Message);
+            }
+            finally
+            {
+                command?.Dispose();
             }
 
-            command.Dispose();
             return true;
         }
 
diff --git a/CCSTrace/CCS/ProcessEvent.cs b/CCSTrace/CCS/ProcessEvent.cs
index 6dad3c0..e4bbbde 100644
--- a/CCSTrace/CCS/ProcessEvent.cs
+++ b/CCSTrace/CCS/ProcessEvent.cs
@@ -1,4 +1,6 @@
 using System;
+using System.Collections.Generic;
+using System.Data;
 using System.Data.OracleClient;
 using System.Text;
 using CCSTrace.CCS.Domain;
@@ -15,15 +17,15 @@
         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
         private readonly OracleConnection _connectionTpc;
-        private readonly CcsRecord _mCcsRecord;
+        private readonly CCSEventRecord _mCcsEventRecord;
 
-        private EventRecord _mEventRecord;
-        private readonly string _traceConnectionString = string.Empty;
+        private EOSEventRecord _eosEventRecord;
+        private readonly string _traceConnectionString;
         private OracleTransaction _trx;
 
-        public ProcessEvent(CcsRecord record, OracleConnection conn, string traceConnection)
+        public ProcessEvent(CCSEventRecord eventRecord, OracleConnection conn, string traceConnection)
         {
-            _mCcsRecord = record;
+            _mCcsEventRecord = eventRecord;
             _connectionTpc = conn;
             _traceConnectionString = traceConnection;
         }
@@ -36,45 +38,46 @@
 
             try
             {
-                var fdrid = GetFdrid(_mCcsRecord.Meter);
+                var fdrid = GetFdrid(_mCcsEventRecord.Meter);
 
                 if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理
                 {
-                    if (CcsMain.ProcessFdr.ContainsKey(fdrid.ToString()))
+                    if (CcsMain.Instance.ProcessingFdr.Contains(fdrid))
                     {
-                        CcsMain.WaitingCases.Add(new[] {_mCcsRecord.CcsId, fdrid.ToString()});
+                        CcsMain.Instance.WaitingCases.Add(new KeyValuePair<string, int>(_mCcsEventRecord.CcsId, fdrid));
                         return;
                     }
                     else
-                        CcsMain.ProcessFdr.Add(fdrid.ToString(), null); //將要處理的案件的饋線別加入處理中饋線集合
+                        CcsMain.Instance.ProcessingFdr.Add(fdrid); //將要處理的案件的饋線別加入處理中饋線集合
                 }
 
-                /*                int TraceCount = this.getTraceCount(m_CCSRecord.CcsId);
-                                bool TraceError = false;    //追蹤次數超過3次,改為非A類不追蹤合併
+                /* 
+                int TraceCount = this.getTraceCount(m_CCSRecord.CcsId);
+                bool TraceError = false;    //追蹤次數超過3次,改為非A類不追蹤合併
 
-                                switch (TraceCount)
-                                {
-                                    case 0:
-                                        UpdateTraceCount(m_CCSRecord.CcsId,true);
-                                        TraceError = false;
-                                        break;
+                switch (TraceCount)
+                {
+                    case 0:
+                        UpdateTraceCount(m_CCSRecord.CcsId,true);
+                        TraceError = false;
+                        break;
 
-                                    case 2:
-                                        UpdateTraceCount(m_CCSRecord.CcsId,false);
-                                        TraceError = true;
-                                        break;
+                    case 2:
+                        UpdateTraceCount(m_CCSRecord.CcsId,false);
+                        TraceError = true;
+                        break;
 
-                                    default:
-                                        UpdateTraceCount(m_CCSRecord.CcsId,false);
-                                        TraceError = false;
-                                        break;
-                                }
+                    default:
+                        UpdateTraceCount(m_CCSRecord.CcsId,false);
+                        TraceError = false;
+                        break;
+                }
                 */
-                if (InitialEventRecord(_mCcsRecord.CcsId))
+                if (InitialEventRecord(_mCcsEventRecord.CcsId))
                 {
                     var mLeach = new Leach(_connectionTpc, _trx, _traceConnectionString); // 案件過濾與合併
                     Logger.Info("過濾案件...");
-                    var returnStatus = mLeach.LeachCase(_mEventRecord);
+                    var returnStatus = mLeach.LeachCase(_eosEventRecord);
 
                     switch (returnStatus)
                     {
@@ -85,24 +88,24 @@
 
                         case GlobalVariable.NoMeter:
                             Logger.Info("案件過濾完畢,用戶無電號....");
-                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
+                            _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         case GlobalVariable.SameCustomer:
                             Logger.Info("相同用戶重複來電....");
-                            ProcessSameCustomer(_mCcsRecord, _mEventRecord);
+                            ProcessSameCustomer(_mCcsEventRecord, _eosEventRecord);
                             break;
 
                         case GlobalVariable.NoSupplyElc:
                             Logger.Warn("該饋線未供電,無法作事故案件追蹤合併....");
-                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
+                            _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         case GlobalVariable.NoSxfmr:
                             Logger.Warn("該案件無變壓器....");
-                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
+                            _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
@@ -113,16 +116,16 @@
 
                         case GlobalVariable.TraceFailure:
                             Logger.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
-                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
+                            _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         default:
-                            var traceCount = GetTraceCount(_mCcsRecord.CcsId);
+                            var traceCount = GetTraceCount(_mCcsEventRecord.CcsId);
 
                             if (traceCount < 2)
                             {
-                                if (_trx.Connection.State.ToString().Equals("Open"))
+                                if (_trx.Connection.State == ConnectionState.Open)
                                     _trx.Rollback();
 
                                 _trx.Dispose();
@@ -137,18 +140,18 @@
                                     Logger.Error("發生非預期錯誤,此事故案件暫不被受理....");
 
                                 if (traceCount == 0)
-                                    UpdateTraceCount(_mCcsRecord.CcsId, true);
+                                    UpdateTraceCount(_mCcsEventRecord.CcsId, true);
                                 else
-                                    UpdateTraceCount(_mCcsRecord.CcsId, false);
+                                    UpdateTraceCount(_mCcsEventRecord.CcsId, false);
                             }
                             else
                             {
-                                UpdateTraceCount(_mCcsRecord.CcsId, false);
+                                UpdateTraceCount(_mCcsEventRecord.CcsId, false);
                                 if (returnStatus == GlobalVariable.TraceCounts3)
-                                    _mEventRecord.Note = _mEventRecord.Note+ "(本案用戶供電資料追蹤失敗)";
+                                    _eosEventRecord.Note = _eosEventRecord.Note+ "(本案用戶供電資料追蹤失敗)";
 
                                 Logger.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
-                                _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
+                                _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                                 Process(GlobalVariable.NoMeter);
                                 sendMail = true;
                             }
@@ -156,7 +159,7 @@
                         /*                        switch (TraceCount)
                                                         {
                                                             case 0:
-                                                                if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                                if (_Trx.Connection.State == ConnectionState.Open)
                                                                     _Trx.Rollback();
 
                                                                 _Trx.Dispose();
@@ -174,7 +177,7 @@
                                                                 break;
 
                                                             case 1:
-                                                                if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                                if (_Trx.Connection.State == ConnectionState.Open)
                                                                     _Trx.Rollback();
 
                                                                 _Trx.Dispose();
@@ -198,7 +201,7 @@
                                                         break;
 
                                                     case CCS.GlobalVariable.CaseTransfer:
-                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                        if (_Trx.Connection.State == ConnectionState.Open)
                                                             _Trx.Rollback();
 
                                                         _Trx.Dispose();
@@ -206,7 +209,7 @@
                                                         break;
 
                                                     case CCS.GlobalVariable.FDRLocked:
-                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                        if (_Trx.Connection.State == ConnectionState.Open)
                                                             _Trx.Rollback();
 
                                                         _Trx.Dispose();
@@ -214,7 +217,7 @@
                                                         break;
 
                                                     case CCS.GlobalVariable.Failure_By_DB:
-                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                        if (_Trx.Connection.State == ConnectionState.Open)
                                                             _Trx.Rollback();
 
                                                         _Trx.Dispose();
@@ -222,7 +225,7 @@
                                                         break;
 
                                                     default:
-                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
+                                                        if (_Trx.Connection.State == ConnectionState.Open)
                                                             _Trx.Rollback();
 
                                                         _Trx.Dispose();
@@ -233,32 +236,32 @@
                 }
 
                 if (fdrid != 0)
-                    CcsMain.ProcessFdr.Remove(fdrid.ToString()); //將處理完的案件的饋線別從處理中饋線集合中移除
+                    CcsMain.Instance.ProcessingFdr.Remove(fdrid); //將處理完的案件的饋線別從處理中饋線集合中移除
             }
             catch (Exception e)
             {
-                Logger.Error(e, e.Message + ". CCSID = " + _mCcsRecord.CcsId);
+                Logger.Error(e, e.Message + ". CCSID = " + _mCcsEventRecord.CcsId);
 
                 if (_trx != null)
                 {
-                    if (_trx.Connection.State.ToString().Equals("Open"))
+                    if (_trx.Connection.State == ConnectionState.Open)
                         _trx.Rollback();
 
                     _trx.Dispose();
                 }
 
-                if (_mEventRecord != null && _mEventRecord.FdrId!= 0)
-                    CcsMain.ProcessFdr.Remove(_mEventRecord.FdrId.ToString()); //將處理完的案件的饋線別從處理中饋線集合中移除
+                if (_eosEventRecord != null && _eosEventRecord.FdrId!= 0)
+                    CcsMain.Instance.ProcessingFdr.Remove(_eosEventRecord.FdrId); //將處理完的案件的饋線別從處理中饋線集合中移除
                 //throw e;
             }
             finally
             {
-                CcsMain.ProcessCases.Remove(_mCcsRecord.CcsId);
+                CcsMain.Instance.ProcessingCases.Remove(_mCcsEventRecord.CcsId);
                 OnThreadFinish(new ThreadEndEvent(_connectionTpc));
             }
 
             if (sendMail)
-                new MailService(_connectionTpc).SendMail(_mCcsRecord.CcsId);
+                new MailService(_connectionTpc).SendMail(_mCcsEventRecord.CcsId);
         }
 
         private void Process(int kind)
@@ -267,16 +270,16 @@
 
             try
             {
-                if (finishEvent.Finish(kind, _mEventRecord, _connectionTpc, _trx))
+                if (finishEvent.Finish(kind, _eosEventRecord, _connectionTpc, _trx))
                 {
                     Logger.Info("OMS資料更新成功!");
-                    if (UpdateCcsData(_mEventRecord, _mCcsRecord, (int) CCSCaseState.WaitForDespatch))
+                    if (UpdateCcsData(_eosEventRecord, _mCcsEventRecord, (int) CCSCaseState.WaitForDespatch))
                     {
                         Logger.Info("CCS資料更新成功!");
                     }
                     else
                     {
-                        if (_trx.Connection.State.ToString().Equals("Open"))
+                        if (_trx.Connection.State == ConnectionState.Open)
                             _trx.Rollback();
 
                         _trx.Dispose();
@@ -287,14 +290,13 @@
                     // 須等全部動作都正確做完才可作commit的動作
                     _trx.Commit();
                     _trx.Dispose();
-                    ;
                     var alarmClient = new AlarmData(_connectionTpc, _trx);
-                    alarmClient.Alarm(_mEventRecord.AcceptNum, _mEventRecord.Dept);
+                    alarmClient.Alarm(_eosEventRecord.AcceptNum, _eosEventRecord.Dept);
                 }
                 else
                 {
                     // 有錯誤需要RollBack
-                    if (_trx.Connection.State.ToString().Equals("Open"))
+                    if (_trx.Connection.State == ConnectionState.Open)
                         _trx.Rollback();
 
                     _trx.Dispose();
@@ -305,62 +307,60 @@
             }
             catch (Exception e)
             {
-                throw e;
+                Logger.Warn(e, e.Message);
+                throw;
             }
         }
 
         protected virtual void OnThreadFinish(ThreadEndEvent e)
         {
-            if (ThreadFinish != null)
-            {
-                ThreadFinish(this, e);
-            }
+            ThreadFinish?.Invoke(this, e);
         }
 
-        private bool UpdateCcsData(EventRecord mRecord, CcsRecord mCcsRecord, int caseStatus)
+        private bool UpdateCcsData(EOSEventRecord eosEventRecord, CCSEventRecord ccsEventRecord, int caseStatus)
         {
             Logger.Info("進行CCS資料更新程序...");
-            var eventQuery = new EventQuery();
+            var ccsEventQuery = new CCSEventQuery();
             var status = caseStatus;
             // 設定CCSID
-            eventQuery.CcsId = mCcsRecord.CcsId;
+            ccsEventQuery.CcsId = ccsEventRecord.CcsId;
             // 設定受理時間
-            eventQuery.ChangeTime = mCcsRecord.AcceptTime;
+            ccsEventQuery.ChangeTime = ccsEventRecord.AcceptTime;
             // 設定用戶電號
-            if (mCcsRecord.Meter != null)
+            if (ccsEventRecord.Meter != null)
             {
-                eventQuery.Meter = mCcsRecord.Meter;
+                ccsEventQuery.Meter = ccsEventRecord.Meter;
             }
             // 如果該案件為子案件,需找出母案件的casestatus來insert eos.eventquery
             // 若母案件已派工,需一併紀錄預計復電時間等資訊
-            if (mRecord.ParentId!= 0)
+            if (eosEventRecord.ParentId!= 0)
             {
-                status = GetRealCaseStatus(mRecord.ParentId) == (int) CCSCaseState.WaitForSponsor
+                status = GetRealCaseStatus(eosEventRecord.ParentId) == (int) CCSCaseState.WaitForSponsor
                     ? (int) CCSCaseState.EventDespatched
                     : (int) CCSCaseState.WaitForDespatch;
                 if (status == (int) CCSCaseState.EventDespatched)
                 {
-                    SetDespatchInfo(mRecord.ParentId, eventQuery);
+                    SetDespatchInfo(eosEventRecord.ParentId, ccsEventQuery);
                 }
             }
             // 若此案件為專案案件升級為母案件,則必須判斷原先案件是否已經派工
-            if ((mCcsRecord.ImportCase == GlobalVariable.IsImportCase) && mRecord.IsDespatched)
+            if ((ccsEventRecord.ImportCase == GlobalVariable.IsImportCase) && eosEventRecord.IsDespatched)
             {
                 status = (int) CCSCaseState.EventDespatched;
-                SetDespatchInfo(mRecord.CaseId, eventQuery);
+                SetDespatchInfo(eosEventRecord.CaseId, ccsEventQuery);
             }
-            eventQuery.CaseStatus = status;
-            // 更新CCS.EventQuery
-            if (!eventQuery.Update(_connectionTpc, _trx))
+            ccsEventQuery.CaseStatus = status;
+            // 更新CCS.CCSEventQuery
+            if (!ccsEventQuery.Update(_connectionTpc, _trx))
             {
                 Logger.Error("更新ccs.eventquery失敗!");
                 return false;
             }
             Logger.Info("更新ccs.eventquery成功!");
             var numberContrast = new NumberContrast();
-            numberContrast.SetAcceptNum(mRecord.AcceptNum);
-            numberContrast.SetCaseId(mRecord.CaseId);
-            numberContrast.SetCcsid(mCcsRecord.CcsId);
+            numberContrast.SetAcceptNum(eosEventRecord.AcceptNum);
+            numberContrast.SetCaseId(eosEventRecord.CaseId);
+            numberContrast.SetCcsid(ccsEventRecord.CcsId);
             // 更新CCS.Num_Contrast
             if (!numberContrast.Update(_connectionTpc, _trx))
             {
@@ -381,71 +381,73 @@
             _trx = _connectionTpc.BeginTransaction();
 
             deptContrast = new DeptContrast(_connectionTpc, _trx);
-            _mEventRecord = new EventRecord(initialData.GetNewCaseId(), _connectionTpc, _trx);
-            _mEventRecord.AcceptNum = initialData.GetNewAcceptNum();
+            _eosEventRecord = new EOSEventRecord(initialData.GetNewCaseId(), _connectionTpc, _trx)
+            {
+                AcceptNum = initialData.GetNewAcceptNum()
+            };
 
-            mContrast.SetAcceptNum(_mEventRecord.AcceptNum);
-            mContrast.SetCaseId(_mEventRecord.CaseId);
-            mContrast.SetCcsid(_mCcsRecord.CcsId);
+            mContrast.SetAcceptNum(_eosEventRecord.AcceptNum);
+            mContrast.SetCaseId(_eosEventRecord.CaseId);
+            mContrast.SetCcsid(_mCcsEventRecord.CcsId);
 
             if (!mContrast.Insert(_connectionTpc, _trx))
             {
                 Logger.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
 
-                if (_trx.Connection.State.ToString().Equals("Open"))
+                if (_trx.Connection.State == ConnectionState.Open)
                     _trx.Rollback();
 
                 return false;
             }
 
             // 設定用戶姓名
-            _mEventRecord.Name = _mCcsRecord.CustomerName;
+            _eosEventRecord.Name = _mCcsEventRecord.CustomerName;
 
-            if (_mCcsRecord.Meter != null && _mCcsRecord.Meter.Length != 0)
+            if (_mCcsEventRecord.Meter != null && _mCcsEventRecord.Meter.Length != 0)
             {
                 // 需先找出部門代號,再找到該部門屬於哪一個巡修單位
-                _mEventRecord.Meter = _mCcsRecord.Meter;
-                var tmp = deptContrast.getDept_Code(_mCcsRecord.Meter);
+                _eosEventRecord.Meter = _mCcsEventRecord.Meter;
+                var tmp = deptContrast.getDept_Code(_mCcsEventRecord.Meter);
 
                 if (tmp == -1)
-                    _mEventRecord.Dept = FindoutDeptByAddr(_mCcsRecord, _trx);
+                    _eosEventRecord.Dept = FindoutDeptByAddr(_mCcsEventRecord, _trx);
                 else
-                    _mEventRecord.Dept = tmp;
+                    _eosEventRecord.Dept = tmp;
 
-                _mEventRecord.FdrId = GetFdrid(_mCcsRecord.Meter);
+                _eosEventRecord.FdrId = GetFdrid(_mCcsEventRecord.Meter);
             }
             else
             {
                 // 當無用戶電號時,所找出的部門別不需再去找出屬於哪一個巡修股(findoutDeptByAddr會直接找到相對應的巡修股)
-                var dept = FindoutDeptByAddr(_mCcsRecord, _trx);
-                _mEventRecord.Dept = dept;
+                var dept = FindoutDeptByAddr(_mCcsEventRecord, _trx);
+                _eosEventRecord.Dept = dept;
             }
             // 設定用戶電話號碼
-            if (_mCcsRecord.CustomerTel != null)
+            if (_mCcsEventRecord.CustomerTel != null)
             {
-                _mEventRecord.Tel = _mCcsRecord.CustomerTel;
+                _eosEventRecord.Tel = _mCcsEventRecord.CustomerTel;
             }
             // 檢查並設定用戶地址
-            var mAddr = _mCcsRecord.AddressCity + _mCcsRecord.AddressTown + _mCcsRecord.AddressRoad +
-                        _mCcsRecord.AddressOther;
+            var mAddr = _mCcsEventRecord.AddressCity + _mCcsEventRecord.AddressTown + _mCcsEventRecord.AddressRoad +
+                        _mCcsEventRecord.AddressOther;
 
             if (mAddr.Trim().Length == 0)
             {
                 Logger.Error("CCS 案件受理程序初始化失敗...地址為空白");
 
-                if (_trx.Connection.State.ToString().Equals("Open"))
+                if (_trx.Connection.State == ConnectionState.Open)
                     _trx.Rollback();
 
                 return false;
             }
 
-            _mEventRecord.Addr = mAddr;
+            _eosEventRecord.Addr = mAddr;
             // 設定事故原因
-            _mEventRecord.Brief = TransferEventBrief(_mCcsRecord.EventBrief);
+            _eosEventRecord.Brief = TransferEventBrief(_mCcsEventRecord.EventBrief);
             try
             {
                 var encoding = new ASCIIEncoding();
-                var source = encoding.GetBytes(_mEventRecord.Brief);
+                var source = encoding.GetBytes(_eosEventRecord.Brief);
 
                 if (source.Length > 24)
                 {
@@ -456,57 +458,57 @@
                     }
 
                     var enc = Encoding.ASCII;
-                    _mEventRecord.Brief = enc.GetString(dest);
+                    _eosEventRecord.Brief = enc.GetString(dest);
                     source = dest = null;
                 }
             }
             catch (Exception)
             {
-                _mEventRecord.Brief = "其他";
+                _eosEventRecord.Brief = "其他";
             }
 
-            if (_mCcsRecord.CcsId.StartsWith("A"))
-                _mEventRecord.Log = "APP";
-            else if (_mCcsRecord.CcsId.StartsWith("W"))
-                _mEventRecord.Log = "WEB";
+            if (_mCcsEventRecord.CcsId.StartsWith("A"))
+                _eosEventRecord.Log = "APP";
+            else if (_mCcsEventRecord.CcsId.StartsWith("W"))
+                _eosEventRecord.Log = "WEB";
             else
-                _mEventRecord.Log = "CCS";
+                _eosEventRecord.Log = "CCS";
 
-            _mEventRecord.AcceptDate = _mCcsRecord.AcceptTime;
+            _eosEventRecord.AcceptDate = _mCcsEventRecord.AcceptTime;
 
             // 設定用戶種類
-            if (_mCcsRecord.ImportCase == GlobalVariable.IsImportCase)
+            if (_mCcsEventRecord.ImportCase == GlobalVariable.IsImportCase)
             {
-                _mEventRecord.ImportCase = GlobalVariable.IsImportCase;
-                _mEventRecord.Level = GlobalVariable.ALevel; // default set A level
+                _eosEventRecord.ImportCase = GlobalVariable.IsImportCase;
+                _eosEventRecord.Level = GlobalVariable.ALevel; // default set A level
             }
             else
             {
-                _mEventRecord.ImportCase = GlobalVariable.NotImportCase;
-                _mEventRecord.Level = GlobalVariable.NoLevel;
+                _eosEventRecord.ImportCase = GlobalVariable.NotImportCase;
+                _eosEventRecord.Level = GlobalVariable.NoLevel;
             }
 
             // 檢查字串中有無特殊字元' ,若有則取代為"
-            if (_mCcsRecord.Note != null)
-                _mEventRecord.Note = _mCcsRecord.Note.Replace('\'', '\"');
+            if (_mCcsEventRecord.Note != null)
+                _eosEventRecord.Note = _mCcsEventRecord.Note.Replace('\'', '\"');
 
             // 設定回覆姓名及電話
-            if (_mCcsRecord.RecallName != null)
+            if (_mCcsEventRecord.RecallName != null)
             {
-                _mEventRecord.IsReCall = GlobalVariable.IsReCall;
-                _mEventRecord.ReCallName = _mCcsRecord.RecallName.Replace('\'', '\"');
-                _mEventRecord.ReCallTel = _mCcsRecord.RecallTel;
+                _eosEventRecord.IsReCall = GlobalVariable.IsReCall;
+                _eosEventRecord.ReCallName = _mCcsEventRecord.RecallName.Replace('\'', '\"');
+                _eosEventRecord.ReCallTel = _mCcsEventRecord.RecallTel;
             }
             else
             {
-                _mEventRecord.IsReCall = GlobalVariable.NotReCall;
+                _eosEventRecord.IsReCall = GlobalVariable.NotReCall;
             }
 
             Logger.Info("初始化EOS.EVENTRECORD成功!");
             return true;
         }
 
-        //private bool initialCCSInfo(CCS.Object.EventQuery m_EventQuery, CCS.Object.NumberContrast m_Contrast)
+        //private bool initialCCSInfo(CCS.Object.CCSEventQuery m_EventQuery, CCS.Object.NumberContrast m_Contrast)
         //{
         //    checkCaseAlreadyExits(m_EventQuery);
         //    if (!m_EventQuery.Insert(_PLog, _ConnectionTPC, _Trx))
@@ -522,9 +524,9 @@
         //    return true;
         //}
 
-        private void CheckCaseAlreadyExits(EventQuery mEventQuery)
+        private void CheckCaseAlreadyExits(CCSEventQuery ccsEventQuery)
         {
-            var sqlStmt = "select ccsid from ccs.eventquery where ccsid='" + mEventQuery.CcsId + "'";
+            var sqlStmt = "select ccsid from ccs.eventquery where ccsid='" + ccsEventQuery.CcsId + "'";
 
             var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
             var reader = command.ExecuteReader();
@@ -533,10 +535,10 @@
             {
                 if (reader.Read())
                 {
-                    command.CommandText = "delete from ccs.eventquery where ccsid='" + mEventQuery.CcsId + "'";
+                    command.CommandText = "delete from ccs.eventquery where ccsid='" + ccsEventQuery.CcsId + "'";
                     command.ExecuteNonQuery();
 
-                    command.CommandText = "delete from ccs.num_contrast where ccsid='" + mEventQuery.CcsId + "'";
+                    command.CommandText = "delete from ccs.num_contrast where ccsid='" + ccsEventQuery.CcsId + "'";
                     command.ExecuteNonQuery();
                 }
             }
@@ -551,16 +553,14 @@
             }
         }
 
-        private int FindoutDeptByAddr(CcsRecord ccsRecord, OracleTransaction trx)
+        private int FindoutDeptByAddr(CCSEventRecord ccsEventRecord, OracleTransaction trx)
         {
-            var addrContrast = new AddrContrast(_connectionTpc, trx);
-            return addrContrast.FindDeptId(ccsRecord.AddressCity, ccsRecord.AddressTown, ccsRecord.AddressRoad);
+            return AddrContrast.Instance.FindDeptId(ccsEventRecord.AddressCity, ccsEventRecord.AddressTown, ccsEventRecord.AddressRoad);
         }
 
         private string TransferEventBrief(int code)
         {
-            var result = "";
-            result = GlobalVariable.CcsCodelist.GetContent(GlobalVariable.CcsEventBrief, code);
+            var result = GlobalVariable.CcsCodelist.GetContent(GlobalVariable.CcsEventBrief, code);
 
             //            int MaxLength = this.getFieldLength("EOS", "EVENTRECORD", "EVENTBRIEF");
 
@@ -578,10 +578,9 @@
 
         private int GetRealCaseStatus(int parentId)
         {
-            string sqlStmt;
             var status = (int) CCSCaseState.WaitForDespatch;
 
-            sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + parentId;
+            var sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + parentId;
             var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
             var reader = command.ExecuteReader();
 
@@ -605,10 +604,10 @@
             return status;
         }
 
-        private void SetDespatchInfo(int mCaseId, EventQuery mEventQry)
+        private void SetDespatchInfo(int caseId, CCSEventQuery ccsEventQry)
         {
-            var sqlStmt = "select despatchtime,assumefixtime,assumedtime_nth,delaytime,reason,eventlocation from eos.eventdespatch where caseid="
-                          + mCaseId;
+            var sqlStmt = "SELECT DESPATCHTIME,ASSUMEFIXTIME,ASSUMEDTIME_NTH,DELAYTIME,REASON,EVENTLOCATION FROM EOS.EVENTDESPATCH WHERE CASEID="
+                          + caseId;
 
             OracleCommand command = null;
             OracleDataReader reader = null;
@@ -620,13 +619,13 @@
 
                 if (reader.Read())
                 {
-                    mEventQry.ChangeTime = Convert.ToDateTime(reader["despatchtime"]).ToString("yyy/MM/dd HH:mm:ss");
-                    mEventQry.AssumedTime = Convert.ToDateTime(reader["assumefixtime"]).ToString("yyy/MM/dd HH:mm:ss");
-                    mEventQry.AssumedTimeNth =
+                    ccsEventQry.ChangeTime = Convert.ToDateTime(reader["despatchtime"]).ToString("yyy/MM/dd HH:mm:ss");
+                    ccsEventQry.AssumedTime = Convert.ToDateTime(reader["assumefixtime"]).ToString("yyy/MM/dd HH:mm:ss");
+                    ccsEventQry.AssumedTimeNth =
                         Convert.ToDateTime(reader["assumedtime_nth"]).ToString("yyy/MM/dd HH:mm:ss");
-                    mEventQry.DelayTimes = Convert.ToInt32(reader["delaytime"].ToString());
-                    mEventQry.Reason = reader["reason"].ToString();
-                    mEventQry.EventLocation = reader["eventlocation"].ToString();
+                    ccsEventQry.DelayTimes = Convert.ToInt32(reader["delaytime"].ToString());
+                    ccsEventQry.Reason = reader["reason"].ToString();
+                    ccsEventQry.EventLocation = reader["eventlocation"].ToString();
                 }
             }
             catch (Exception e)
@@ -636,27 +635,24 @@
             }
             finally
             {
-                if (reader != null)
-                    reader.Close();
-
-                if (command != null)
-                    command.Dispose();
+                reader?.Close();
+                command?.Dispose();
             }
         }
 
-        private void ProcessSameCustomer(CcsRecord mCcsRecord, EventRecord mEventRec)
+        private void ProcessSameCustomer(CCSEventRecord ccsEventRecord, EOSEventRecord eosEventRec)
         {
             Logger.Info("處理相同用戶重複來電...");
             StringBuilder note = null;
 
-            var sqlStmt = "select note from eos.eventrecord where caseid = " + mEventRec.TmpCaseId;
+            var sqlStmt = "select note from eos.eventrecord where caseid = " + eosEventRec.TmpCaseId;
             var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
             var reader = command.ExecuteReader();
 
             try
             {
                 if (reader.Read())
-                    note = new StringBuilder(reader["note"] == null ? "" : reader["note"].ToString().Trim());
+                    note = new StringBuilder(reader["note"]?.ToString().Trim() ?? "");
             }
             catch (Exception e)
             {
@@ -671,16 +667,16 @@
             if (!note.ToString().EndsWith("|") && !note.ToString().Trim().Equals(""))
                 note.Append(" | ");
 
-            if ((mEventRec.Note!= null) && (mEventRec.Note.Length != 0))
-                note.Append(mEventRec.AcceptDate+ " " + mEventRec.Note);
+            if (!string.IsNullOrEmpty(eosEventRec.Note))
+                note.Append(eosEventRec.AcceptDate+ " " + eosEventRec.Note);
             else
-                note.Append(mEventRec.AcceptDate+ " 用戶再次報案");
+                note.Append(eosEventRec.AcceptDate+ " 用戶再次報案");
 
             // 判斷重複來電的用戶最初成立的案件是否是由CCS受理
             var acceptByCcs = false;
 
             var sqlStmt1 = "select count(*) as count from ccs.num_contrast c,ccs.eventquery q where c.ccsid=q.ccsid and caseid="
-                           + mEventRec.TmpCaseId;
+                           + eosEventRec.TmpCaseId;
             var command1 = new OracleCommand(sqlStmt1, _connectionTpc, _trx);
             var reader1 = command1.ExecuteReader();
 
@@ -694,8 +690,9 @@
                     }
                 }
             }
-            catch (Exception)
+            catch (Exception e)
             {
+                Logger.Warn(e, e.Message);
             }
             finally
             {
@@ -707,8 +704,8 @@
             // 若先前案件由CCS受理,則直接從ccs.eventquery取出先前的案件狀態資料寫入
             if (acceptByCcs)
             {
-                updCcsEventQuery = "update ccs.eventquery set (casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation) = (select casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation from ccs.eventquery where ccsid=(select ccsid from ccs.num_contrast where caseid="
-                                   + mEventRec.TmpCaseId+ " and rownum<2)) where CCSID='" + mCcsRecord.CcsId + "'";
+                updCcsEventQuery = "UPDATE CCS.EVENTQUERY SET (CASESTATUS,CHANGETIME,HANDLINGSUMMARY,ASSUMEDTIME,ASSUMEDTIME_NTH,DELAYTIMES,REASON,EVENTLOCATION) = (select casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation from ccs.eventquery where ccsid=(select ccsid from ccs.num_contrast where caseid="
+                                   + eosEventRec.TmpCaseId+ " AND ROWNUM<2)) WHERE CCSID='" + ccsEventRecord.CcsId + "'";
                 // 若非由CCS受理(OMS,Web)則從EOS的table中尋找先前案件的狀態資料
             }
             else
@@ -729,11 +726,10 @@
 
                 try
                 {
-                    var sqlStmt2 = "select  1,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid="
-                                   + mEventRec.TmpCaseId                                   + " union "
-                                   +
-                                   "select  2,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid= (select parentid from eos.mergecase where caseid="
-                                   + mEventRec.TmpCaseId+ ")";
+                    var sqlStmt2 = "SELECT  1,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME,TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid="
+                                   + eosEventRec.TmpCaseId                                   + " union "
+                                   +"SELECT  2,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME,TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid= (select parentid from eos.mergecase where caseid="
+                                   + eosEventRec.TmpCaseId+ ")";
 
                     command2 = new OracleCommand(sqlStmt2, _connectionTpc, _trx);
                     reader2 = command2.ExecuteReader();
@@ -743,15 +739,15 @@
                         accepttime = reader2["ACCEPTTIME"].ToString();
                         despatchtime = reader2["DESPATCHTIME"].ToString();
                         sponsortime = reader2["SPONSORTIME"].ToString();
-                        assumefixtime = reader2["ASSUMEFIXTIME"] == null ? "" : reader2["ASSUMEFIXTIME"].ToString();
-                        assumedtimeNth = reader2["ASSUMEDTIME_NTH"] == null ? "" : reader2["ASSUMEDTIME_NTH"].ToString();
-                        handling = reader2["HANDLING"] == null ? "" : reader2["HANDLING"].ToString();
-                        reason = reader2["REASON"] == null ? "" : reader2["REASON"].ToString();
+                        assumefixtime = reader2["ASSUMEFIXTIME"]?.ToString() ?? "";
+                        assumedtimeNth = reader2["ASSUMEDTIME_NTH"]?.ToString() ?? "";
+                        handling = reader2["HANDLING"]?.ToString() ?? "";
+                        reason = reader2["REASON"]?.ToString() ?? "";
                         casestatus = Convert.ToInt32(reader2["CASESTATUS"].ToString());
                         delaytime = reader2["DELAYTIME"].ToString().Length == 0
                             ? 0
                             : Convert.ToInt32(reader2["DELAYTIME"].ToString());
-                        eventlocation = reader2["EVENTLOCATION"] == null ? "" : reader2["EVENTLOCATION"].ToString();
+                        eventlocation = reader2["EVENTLOCATION"]?.ToString() ?? "";
                     }
 
                     if (accepttime != null)
@@ -766,14 +762,14 @@
                     {
                         changetime = sponsortime;
                     }
-                    updCcsEventQuery = "update ccs.eventquery set casestatus=" + casestatus + ",changetime=to_date('" +
+                    updCcsEventQuery = "UPDATE CCS.EVENTQUERY SET CASESTATUS=" + casestatus + ",changetime=to_date('" +
                                        changetime
                                        + "','YYYY/MM/DD HH24:MI:SS'),handlingsummary='" + handling +
                                        "',assumedtime=to_date('" + assumefixtime
                                        + "','YYYY/MM/DD HH24:MI:SS'),assumedtime_nth=to_date('" + assumedtimeNth +
                                        "','YYYY/MM/DD HH24:MI:SS'),delaytimes="
-                                       + delaytime + ",reason='" + reason + "',eventlocation='" + eventlocation +
-                                       "' where ccsid='" + mCcsRecord.CcsId + "'";
+                                       + delaytime + ",REASON='" + reason + "',EVENTLOCATION='" + eventlocation +
+                                       "' WHERE CCSID='" + ccsEventRecord.CcsId + "'";
                 }
                 catch (Exception e)
                 {
@@ -781,27 +777,25 @@
                 }
                 finally
                 {
-                    if (reader2 != null)
-                        reader2.Close();
-
-                    if (command2 != null)
-                        command2.Dispose();
+                    reader2?.Close();
+                    command2?.Dispose();
                 }
             }
 
             var updEosEventRecord = "UPDATE EOS.EVENTRECORD SET NOTE = '" + TrimToLimit(note.ToString(), 127)
-                                    + "' where caseid = " + _mEventRecord.TmpCaseId;
+                                    + "' WHERE CASEID = " + _eosEventRecord.TmpCaseId;
             var updCcsNumContrast = "UPDATE CCS.NUM_CONTRAST SET(acceptnum,caseid) = (SELECT acceptnum," +
-                                    mEventRec.TmpCaseId                                    + " FROM eos.eventrecord WHERE caseid = " + mEventRec.TmpCaseId+
-                                    ") where ccsid='" + mCcsRecord.CcsId + "'";
+                                    eosEventRec.TmpCaseId                                    
+                                    + " FROM EOS.EVENTRECORD WHERE CASEID = " + eosEventRec.TmpCaseId +
+                                    ") where ccsid='" + ccsEventRecord.CcsId + "'";
 
             var exeCommand = new OracleCommand(updCcsEventQuery, _connectionTpc, _trx);
-            // 將用戶重複來電案件資料寫回CCS.EventQuery
+            // 將用戶重複來電案件資料寫回CCS.CCSEventQuery
             if (exeCommand.ExecuteNonQuery() <= 0)
             {
                 exeCommand.Dispose();
 
-                if (_trx.Connection.State.ToString().Equals("Open"))
+                if (_trx.Connection.State == ConnectionState.Open)
                     _trx.Rollback();
 
                 _trx.Dispose();
@@ -810,12 +804,12 @@
             }
 
             exeCommand.CommandText = updEosEventRecord;
-            // 將CCS案件備註資料Append到EOS.EventRecord
+            // 將CCS案件備註資料Append到EOS.EOSEventRecord
             if (exeCommand.ExecuteNonQuery() <= 0)
             {
                 exeCommand.Dispose();
 
-                if (_trx.Connection.State.ToString().Equals("Open"))
+                if (_trx.Connection.State == ConnectionState.Open)
                     _trx.Rollback();
 
                 _trx.Dispose();
@@ -828,7 +822,7 @@
             if (exeCommand.ExecuteNonQuery() <= 0)
             {
                 exeCommand.Dispose();
-                if (_trx.Connection.State.ToString().Equals("Open"))
+                if (_trx.Connection.State == ConnectionState.Open)
                     _trx.Rollback();
 
                 _trx.Dispose();
diff --git a/CCSTrace/CCSTrace.csproj b/CCSTrace/CCSTrace.csproj
index 2d25265..2a67135 100644
--- a/CCSTrace/CCSTrace.csproj
+++ b/CCSTrace/CCSTrace.csproj
@@ -88,30 +88,75 @@
       <SubType>Designer</SubType>
     </Content>
     <Content Include="DBConfig.xml" />
+    <Content Include="DMMSNHibernate.cfg.xml" />
     <Content Include="Global.asax" />
     <Content Include="Service1.asmx" />
-    <Content Include="TPower\DMMS\Model\BaseDB\CONNECTIVITY.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\BaseDB\HICUSTOMER.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\BaseDB\METER.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\BaseDB\MSTADDR.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\BaseDB\SXFMR.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\ADDRCONTRAST.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\ALARMIP.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\CODELIST.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\DEPTCONTRAST.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\EVENTQUERY.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\EVENTRECORD.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\NUMCONTRAST.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\SCGROUP.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\SCGROUPTIME.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\CCS\TMP.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\CODELIST.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\CRTAPOLOGY.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\EVENT.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\EVENTFACILITY.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\EVENTRECORD.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\EVENTRECORDEX.hbm.xml" />
-    <Content Include="TPower\DMMS\Model\EOS\TMPAFFECTCUSTM.hbm.xml" />
+    <Content Include="TPower\DMMS\Model\BaseDB\CONNECTIVITY.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\BaseDB\HICUSTOMER.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\BaseDB\METER.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\BaseDB\MSTADDR.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\BaseDB\SXFMR.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\ADDRCONTRAST.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\ALARMIP.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\CODELIST.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\DEPTCONTRAST.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\EVENTQUERY.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\EVENTRECORD.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\NUMCONTRAST.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\SCGROUP.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\SCGROUPTIME.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\CCS\TMP.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\CODELIST.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\CRTAPOLOGY.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\EVENT.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\EVENTFACILITY.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\EVENTRECORD.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\EVENTRECORDEX.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TPower\DMMS\Model\EOS\TMPAFFECTCUSTM.hbm.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="Web.config">
       <SubType>Designer</SubType>
     </Content>
@@ -128,18 +173,18 @@
     <Compile Include="CCS\Function\InitialEventData.cs" />
     <Compile Include="CCS\Function\Leach.cs" />
     <Compile Include="CCS\Function\MergeCase.cs" />
+    <Compile Include="CCS\NHibertnateSession.cs" />
     <Compile Include="CCS\Object\Addr_Contrast.cs" />
     <Compile Include="CCS\Object\AlarmData.cs" />
     <Compile Include="CCS\Object\CCSCodelist.cs" />
-    <Compile Include="CCS\Object\CCSRecord.cs" />
+    <Compile Include="CCS\Object\CCSEventRecord.cs" />
     <Compile Include="CCS\Object\Dept_Contrast.cs" />
     <Compile Include="CCS\Object\EOSCodelist.cs" />
-    <Compile Include="CCS\Object\EventQuery.cs" />
-    <Compile Include="CCS\Object\EventRecord.cs" />
+    <Compile Include="CCS\Object\CCSEventQuery.cs" />
+    <Compile Include="CCS\Object\EOSEventRecord.cs" />
     <Compile Include="CCS\Object\LocateEquipment.cs" />
     <Compile Include="CCS\Object\NumberContrast.cs" />
     <Compile Include="CCS\ProcessEvent.cs" />
-    <Compile Include="CCS\RecordLog.cs" />
     <Compile Include="CCS\ThreadEndEvent.cs" />
     <Compile Include="Global.asax.cs">
       <DependentUpon>Global.asax</DependentUpon>
diff --git a/CCSTrace/Global.asax.cs b/CCSTrace/Global.asax.cs
index e7dae74..dcf3f17 100644
--- a/CCSTrace/Global.asax.cs
+++ b/CCSTrace/Global.asax.cs
@@ -16,7 +16,7 @@
         protected void Application_Start(object sender, EventArgs e)
         {
             Logger.Info("CCSTrace WebService Application Startup.");
-            CcsMain appMain = CcsMain.Instance();
+            CcsMain appMain = CcsMain.Instance;
             string path = HttpContext.Current.Server.MapPath("~/App_Data");
             appMain.AppDataPath = path;
             appMain.Startup();
@@ -50,7 +50,7 @@
         protected void Application_End(object sender, EventArgs e)
         {
             Logger.Info("CCSTrace WebService Application Shutdown.");
-            CcsMain appMain = CcsMain.Instance();
+            CcsMain appMain = CcsMain.Instance;
             appMain.Shutdown();
         }
     }
diff --git a/CCSTrace/Service1.asmx.cs b/CCSTrace/Service1.asmx.cs
index 146a13d..2f54c50 100644
--- a/CCSTrace/Service1.asmx.cs
+++ b/CCSTrace/Service1.asmx.cs
@@ -27,11 +27,15 @@
                          string addrOther, string recallname, string recalltel, int eventbrief, string accepttime, int importcase, string dept,
                          int partHicustomer, string note)
         {
-            CCS.Object.CcsRecord record = new CCS.Object.CcsRecord(ccsid, meter, customername, customertel, addrCity, addrTown, addrRoad,
+            if (ccsid == null)
+            {
+                return;
+            }
+            CCS.Object.CCSEventRecord ccsEventRecord = new CCS.Object.CCSEventRecord(ccsid, meter, customername, customertel, addrCity, addrTown, addrRoad,
                                                                              addrOther, recallname, recalltel, eventbrief, accepttime, importcase, dept,
                                                                              partHicustomer, note);
             //_CCSMain.AcceptEvent(_Record);
-            CCS.CcsMain.Instance()?.AcceptEvent(record);
+            CCS.CcsMain.Instance?.AcceptEvent(ccsEventRecord);
         }
 
 

--
Gitblit v0.0.0-SNAPSHOT