| using System;  | 
| using System.Data;  | 
| using System.Configuration;  | 
| using System.Web;  | 
| using System.Web.Security;  | 
| using System.Web.UI;  | 
| using System.Web.UI.HtmlControls;  | 
| using System.Web.UI.WebControls;  | 
| using System.Web.UI.WebControls.WebParts;  | 
|   | 
| using System.Data.OracleClient;  | 
|   | 
| namespace CCSTrace.CCS  | 
| {  | 
|     public class FinishEvent  | 
|     {  | 
|         private bool upLevel;  | 
|         private int OriginCaseStatus = 0;  | 
|         private CCS.Object.EventRecord m_EventRec = null;  | 
|         private RecordLog _PLog;  | 
|         private OracleConnection _ConnectionTPC;  | 
|         private OracleTransaction _Transaction;  | 
|   | 
|         public FinishEvent()  | 
|         {  | 
|         }  | 
|   | 
|         public bool Finish(int m_Kind, CCS.Object.EventRecord m_Record, OracleConnection _Conn, OracleTransaction _Trx, RecordLog _Log)  | 
|         {  | 
|             this.m_EventRec = m_Record;  | 
|             _PLog = _Log;  | 
|             _ConnectionTPC = _Conn;  | 
|             _Transaction = _Trx;  | 
|   | 
|             _PLog.Info("進行OMS資料更新程序...");  | 
|             if (m_Record.getParentID() == 0)  | 
|             { // Original Case  | 
|                 if (!(this.ProcessSingalCase(m_Record)))  | 
|                 {  | 
|                     return false;  | 
|                 }  | 
|                 _PLog.Info("更新eos.events成功!");  | 
|             }  | 
|             else  | 
|             { // Child Case  | 
|                 if (!(this.ProcessMergeCase(m_Record)))  | 
|                 {  | 
|                     return false;  | 
|                 }  | 
|                 _PLog.Info("更新eos.events成功!");  | 
|             }  | 
|   | 
|             // inert into eos.eventrecord && eos.eventrecord_ex  | 
|             OracleCommand Command = new OracleCommand(m_Record.getSqlStmt(), _ConnectionTPC,_Transaction);  | 
|             OracleCommand Command1 = null;  | 
|   | 
|             try  | 
|             {  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 Command.CommandText = m_Record.getLocateEquipment().getSqlStmt();  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord_ex");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|                 Command.Dispose();  | 
|   | 
|                 if ((m_Kind == CCS.LocalVariable.Success) || (m_Kind == CCS.LocalVariable.CaseTypeChanged))  | 
|                 {  | 
|                     /* 當饋線全停時不需注意影響虛擬用戶,影響用戶資料會由實際切開關產生 */  | 
|                     if (m_Record.getFsc() != CCS.LocalVariable.Breaker)  | 
|                     {  | 
|                         if (!SetVisualCustomer(m_Record))  | 
|                         {  | 
|                             _PLog.Error("新增影響用戶資料錯誤.");  | 
|                             return false;  | 
|                         }  | 
|                         _PLog.Info("新增影響用戶成功!");  | 
|                     }  | 
|   | 
|                     upLevel = false; /* 判斷交辦案件是否升級為母案件 */  | 
|   | 
|                     if (!(UpdateImportCase(m_Record)))  | 
|                     {  | 
|                         _PLog.Error("處理案件等級變更時發生錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     _PLog.Info("處理案件等級變更成功!");  | 
|   | 
|                     if (!(UpdateRecuseOrder(m_Record)))  | 
|                     {  | 
|                         _PLog.Error("新增搶修順序資料時發生錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     _PLog.Info("新增搶修順序成功!");  | 
|   | 
|                     if (m_Kind == CCS.LocalVariable.CaseTypeChanged)  | 
|                     {  | 
|                         if (!DeleteOldCase(m_Record))  | 
|                         {  | 
|                             _PLog.Error("案件轉換發生錯誤");  | 
|                             return false;  | 
|                         }  | 
|                         _PLog.Info("案件轉換成功!");  | 
|                     }  | 
|   | 
|                     if (!this.SaveCustomerTel(m_Record))  | 
|                     {  | 
|                         _PLog.Error("無法將用戶電話回存回資料庫.");  | 
|                         return false;  | 
|                     }  | 
|                     _PLog.Info("將用戶電話回存回資料庫成功!");  | 
|   | 
|                 }  | 
|                 else if (m_Kind == CCS.LocalVariable.NoMeter)  | 
|                 {  | 
|                     String SqlStmt;  | 
|                     SqlStmt = "INSERT INTO EOS.RESCUE_ORDER SELECT " + m_Record.getCaseID() + ",999,COUNT(*) + 1,'',"  | 
|                             + m_Record.getLocateEquipment().getDSUFID() + " FROM EOS.RESCUE_ORDER WHERE DSUFID = "  | 
|                             + m_Record.getLocateEquipment().getDSUFID();  | 
|   | 
|                     Command1 = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|                     if (Command1.ExecuteNonQuery() <= 0)  | 
|                     {  | 
|                         _PLog.Error("新增搶修順序資料時發生錯誤.");  | 
|                         Command1.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                     Command1.Dispose();  | 
|                     _PLog.Info("新增搶修順序成功!");  | 
|                 }  | 
|   | 
|                 if (m_Record.getParentID() == 0)  | 
|                 {  | 
|                     if (!InsertIntoSri(m_Record))  | 
|                     {  | 
|                         _PLog.Error("新增資料庫(OCSDB.SRI)錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     _PLog.Info("新增資料庫(OCSDB.SRI)成功!");  | 
|                 }  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Command.Dispose();  | 
|   | 
|                 if (Command1 != null)  | 
|                     Command1.Dispose();  | 
|   | 
|                 throw e;  | 
|             }  | 
|   | 
|             /** COMMIT的動作須連外面CCS的資料都正確輸入完才作 */  | 
|             return true;  | 
|           | 
|   | 
|         }  | 
|   | 
|         private bool ProcessSingalCase(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|             bool Result = false;  | 
|             SqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + m_Record.getCaseID() + "," + CCS.LocalVariable.WaitForDespatch + ",1,"  | 
|                     + CCS.LocalVariable.OriginalCase + ",0)";  | 
|   | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|   | 
|             try  | 
|             {  | 
|                 if (Command.ExecuteNonQuery() > 0)  | 
|                     Result = true;  | 
|                 else  | 
|                     _PLog.Error("儲存資料時發生錯誤:  無法insert eos.events");  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error("儲存資料時發生錯誤:  無法insert eos.events. Error = " + e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 Command.Dispose();  | 
|             }  | 
|             return Result;  | 
|         }  | 
|   | 
|         private bool ProcessMergeCase(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|             // insert eos.events  | 
|             SqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + m_Record.getCaseID() + "," + CCS.LocalVariable.WaitForDespatch + ",1,"  | 
|                     + CCS.LocalVariable.ChildCase + ",0)";  | 
|   | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|   | 
|             try  | 
|             {  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤:  無法insert eos.events");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // insert into eos.mergecase  | 
|                 SqlStmt = "INSERT INTO EOS.MERGECASE VALUES(" + m_Record.getCaseID() + ",'" + m_Record.getAcceptNum() + "'," + m_Record.getParentID() + ")";  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤:  無法insert eos.mergecase");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // update parent case data(EOS.EVENTS)  | 
|                 SqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + CCS.LocalVariable.ParentCase + ",MERGECASECOUNT = MERGECASECOUNT + 1 " + "WHERE CASEID = "  | 
|                         + m_Record.getParentID();  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤:  無法更改母案件資料");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // update parent case data(EOS.EVENTRECORD)  | 
|                 SqlStmt = "UPDATE EOS.EVENTRECORD SET FSC = " + m_Record.getFsc() + ",UFID = " + m_Record.getUfid()  | 
|                         + " WHERE CASEID in (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + m_Record.getParentID() + ") OR CASEID = "  | 
|                         + m_Record.getParentID();  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("儲存資料時發生錯誤:  無法update eos.eventrecord(FSC,UFID)");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|                 Command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error("儲存資料時發生錯誤: " + e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|                 Command.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             return true;  | 
|         }  | 
|   | 
|         private bool SetVisualCustomer(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt = "";  | 
|             String CustomerKind = "C"; // 高壓用戶or一般用戶  | 
|   | 
|             SqlStmt = "SELECT COUNT(*) as COUNT FROM BASEDB.HICUSTOMER WHERE METR_NUMB = '" + m_Record.getMeter() + "'";  | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|             OracleDataReader reader = Command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|   | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["COUNT"].ToString()) > 0)  | 
|                     {  | 
|                         CustomerKind = "H";  | 
|                     }  | 
|                 }  | 
|             }  | 
|             catch (Exception)  | 
|             {  | 
|                 _PLog.Error("無法判斷用戶種類.");  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {   | 
|                 reader.Close();  | 
|                 Command.Dispose();  | 
|             }  | 
|   | 
|             if (m_Record.getParentID() == 0)  | 
|             {  | 
|                 SqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + m_Record.getCaseID() + ",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 = '" + m_Record.getMeter() + "'";  | 
|   | 
|                 OracleCommand Command1 = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|                 if (Command1.ExecuteNonQuery() >= 0)  | 
|                 {  | 
|                     Command1.Dispose();  | 
|                     return true;  | 
|                 }  | 
|                 Command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|             else  | 
|             {  | 
|                 return InsertMutilCustomer(CustomerKind, m_Record);  | 
|             }  | 
|         }  | 
|   | 
|         private bool InsertMutilCustomer(String CustomerKind, CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt = "";  | 
|             bool updateCustomer = false;  | 
|             String m_TpclidGroupID = "";  | 
|             String m_CustomerKind = "C";  | 
|   | 
|             SqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + m_Record.getParentID()  | 
|                     + " OR CASEID IN (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + m_Record.getParentID() + ")";  | 
|   | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|             OracleDataReader reader = Command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["COUNT"].ToString()) == 1)  | 
|                     {  | 
|                         updateCustomer = true; // 需重新修改影響用戶資料(原始母案件的影響用戶數)  | 
|                     }  | 
|                 }  | 
|             }  | 
|             catch (Exception)  | 
|             {  | 
|                 _PLog.Error("無法確認是否需重新修改原始母案件之影響用戶資料.");  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {   | 
|                 reader.Close();  | 
|                 Command.Dispose();  | 
|             }  | 
|   | 
|             OracleCommand Command1 = null;  | 
|   | 
|             if (updateCustomer)  | 
|             {  | 
|                 /* 找出原始案件的影響用戶資料 */  | 
|                 SqlStmt = "SELECT TPCLIDGROUPID,CUSTOMERKIND FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + m_Record.getParentID();  | 
|   | 
|                 try  | 
|                 {  | 
|                     Command1 = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|                     reader = Command1.ExecuteReader();  | 
|                       | 
|                     if (reader.Read())  | 
|                     {  | 
|                         m_TpclidGroupID = reader["TPCLIDGROUPID"].ToString().Trim();  | 
|                         m_CustomerKind = reader["CUSTOMERKIND"].ToString();  | 
|                     }  | 
|                     reader.Close();  | 
|   | 
|                     /* 若為高壓用戶,用戶數本來就為1人..無須再作修正 */  | 
|                     if (m_CustomerKind.Equals("C"))  | 
|                     {  | 
|                         /* 刪除原始案件的既有用戶資料 */  | 
|                         SqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + m_Record.getParentID();  | 
|   | 
|                         Command1.CommandText = SqlStmt;  | 
|                         if (Command1.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             _PLog.Error("無法刪除原始案件的既有用戶資料.");  | 
|                             Command1.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         /* 將原始案件的影響用戶數改為變壓器的全部用戶 */  | 
|                         SqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + m_Record.getParentID() + ",A.M_NAME,"  | 
|                                 + "M.TELE_NUMB,M.METR_NUMB,A.M_ADDR,M.TPCLIDGROUPID,M.CUST_TYPE,'" + m_CustomerKind + "' "  | 
|                                 + "FROM (SELECT TELE_NUMB,METR_NUMB,TRAN_CORD as TPCLIDGROUPID,CUST_TYPE FROM BASEDB.METER " + "WHERE TRAN_CORD = '"  | 
|                                 + m_TpclidGroupID + "') M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";  | 
|   | 
|                         Command1.CommandText = SqlStmt;  | 
|                         if (Command1.ExecuteNonQuery() <= 0)  | 
|                         {  | 
|                             _PLog.Error("無法將原始案件的影響用戶數改為變壓器的全部用戶.");  | 
|                             Command1.Dispose();  | 
|                             return false;  | 
|                         }  | 
|                     }  | 
|                     Command1.Dispose();  | 
|                 }  | 
|                 catch (Exception e)  | 
|                 {  | 
|                     _PLog.Error("無法更新原始案件影響用戶資料: " + e.Message);  | 
|                     Console.WriteLine(e.StackTrace);  | 
|                     Command1.Dispose();  | 
|                     return false;  | 
|                 }  | 
|             }  | 
|   | 
|             /* 新受理案件的影響用戶資料 */  | 
|             SqlStmt = "INSERT INTO EOS.TMPAFFECTCUSTMS SELECT " + m_Record.getCaseID() + ",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 = '" + m_Record.getMeter()  | 
|                     + "')) M,BASEDB.MSTADDR A WHERE M.METR_NUMB = A.M_CUST_NO(+) ";  | 
|   | 
|             OracleCommand Command2 = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|             if (Command2.ExecuteNonQuery() < 0)  | 
|             {  | 
|                 _PLog.Error("無法新增新受理案件的影響用戶資料.");  | 
|                 Command2.Dispose();  | 
|                 return false;  | 
|             }  | 
|             Command2.Dispose();  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool UpdateImportCase(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|   | 
|             /* 該案件不為交辦案件 */  | 
|             if (m_Record.getImportCase() != CCS.LocalVariable.isImportCase)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 該交辦案件為原始案件 */  | 
|             if (m_Record.getParentID() == 0)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 若母案件已為交辦案件,則不需再作任何更動 */  | 
|             SqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + m_Record.getParentID();  | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|             OracleDataReader reader = Command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["IMPORTCASE"].ToString()) == CCS.LocalVariable.isImportCase)  | 
|                         return true;  | 
|                 }  | 
|             }  | 
|             catch (Exception)  | 
|             {  | 
|                 _PLog.Error("無法取得母案件之等級.");  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {   | 
|                 reader.Close();  | 
|                 Command.Dispose();  | 
|             }  | 
|   | 
|             /* 開始進行交辦案件升級動作 */  | 
|             upLevel = true;  | 
|   | 
|             /* 將交辦案件改為母案件 */  | 
|             SqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + CCS.LocalVariable.ParentCase + ",MERGECASECOUNT = "  | 
|                     + "(SELECT MERGECASECOUNT FROM EOS.EVENTS WHERE CASEID = " + m_Record.getParentID() + ") WHERE CASEID = " + m_Record.getCaseID();  | 
|   | 
|             OracleCommand Command1 = new OracleCommand(SqlStmt, _ConnectionTPC,_Transaction);  | 
|             if (Command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 _PLog.Error("無法將交辦案件改為母案件.");  | 
|                 Command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             /* 將母案件改為子案件 */  | 
|             SqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + CCS.LocalVariable.ChildCase + ",MERGECASECOUNT = 0 WHERE CASEID = " + m_Record.getParentID();  | 
|   | 
|             Command1.CommandText = SqlStmt;  | 
|             if (Command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 _PLog.Error("無法將母案件改為子案件.");  | 
|                 Command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             // 將EOS.MERGECASE內的資料修正 1.將原先該母案件下的子案件都改掛在交辦案件下 2.將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum)  | 
|             SqlStmt = "UPDATE EOS.MERGECASE SET PARENTID = " + m_Record.getCaseID() + " WHERE PARENTID = " + m_Record.getParentID();  | 
|   | 
|             Command1.CommandText = SqlStmt;  | 
|             if (Command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 _PLog.Error("無法將原先該母案件下的子案件都改掛在交辦案件下.");  | 
|                 Command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             SqlStmt = "UPDATE EOS.MERGECASE SET (CASEID,ACCEPTNUM) = (SELECT CASEID,ACCEPTNUM FROM EOS.EVENTRECORD WHERE CASEID = "  | 
|                     + m_Record.getParentID() + ") WHERE CASEID = " + m_Record.getCaseID();  | 
|   | 
|             Command1.CommandText = SqlStmt;  | 
|             if (Command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 _PLog.Error("無法將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum).");  | 
|                 Command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|             Command1.Dispose();  | 
|   | 
|             return UpdateOtherTable(m_Record.getParentID(), m_Record.getCaseID(), m_Record.getAcceptNum());  | 
|         }  | 
|   | 
|         private bool UpdateOtherTable(int OldCaseID, int NewCaseID, String NewAcceptNum)  | 
|         {  | 
|             String SqlStmt;  | 
|   | 
|             SqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + OldCaseID;  | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Transaction);  | 
|             OracleDataReader reader = Command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|   | 
|                 if (reader.Read())  | 
|                 {  | 
|                     OriginCaseStatus = Convert.ToInt32(reader["CASESTATUS"].ToString());  | 
|                 }  | 
|                 reader.Close();  | 
|   | 
|                 switch (OriginCaseStatus)  | 
|                 {  | 
|                     case 0:  | 
|                         _PLog.Error("找不到原始母案件之案件狀態.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     case CCS.LocalVariable.WaitForDespatch:  | 
|                         break;  | 
|                     case CCS.LocalVariable.WaitForSponsor:  | 
|                         SqlStmt = "UPDATE EOS.EVENTDESPATCH SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                         Command.CommandText = SqlStmt;  | 
|                         if (Command.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             _PLog.Error("無法更新EOS.EVENTDESPATCH.");  | 
|                             Command.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         SqlStmt = "update eos.events set casestatus=" + CCS.LocalVariable.WaitForSponsor + " where caseid=" + NewCaseID;  | 
|                         Command.CommandText = SqlStmt;  | 
|                         if (Command.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             _PLog.Error("無法更新EOS.EVENTS.");  | 
|                             Command.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         this.m_EventRec.setDespatched(true);  | 
|                         break;  | 
|                 }  | 
|   | 
|                 SqlStmt = "UPDATE EOS.EVENTS SET CASESTATUS = " + CCS.LocalVariable.WaitForDespatch + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("無法更新EOS.Events的CaseStatus.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "UPDATE OCSDB.SRI SET SCENENAME = '" + NewAcceptNum + "' WHERE SCENENAME = (SELECT ACCEPTNUM FROM "  | 
|                         + "EOS.EVENTRECORD WHERE CASEID = " + OldCaseID + ")";  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() < 0)  | 
|                 {  | 
|                     _PLog.Error("無法更新OCSDB.SRI.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.CRTAPOLOGY WHERE CASEID = " + OldCaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 reader = Command.ExecuteReader();  | 
|                 int Count = 0;  | 
|   | 
|                 if (reader.Read())  | 
|                 {  | 
|                     Count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|                 }  | 
|                 reader.Close();  | 
|   | 
|                 // 已有切過開關  | 
|                 if (Count > 0)  | 
|                 {  | 
|                     SqlStmt = "UPDATE EOS.EVENTFACILITY SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新EOS.EVENTFACILITY.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     SqlStmt = "UPDATE EOS.CRTAPOLOGY SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新EOS.CRTAPOLOGY.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     SqlStmt = "UPDATE EOS.EVENTAFFECT SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新EOS.EVENTAFFECT.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     //                SqlStmt = "UPDATE EOS.VOICE SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                     //                if (CCS.LocalVariable.Conn.UpdateDB(SqlStmt) < 0) {  | 
|                     //                    _PLog.error("無法更新EOS.VOICE.");  | 
|                     //                    return false;  | 
|                     //                }  | 
|   | 
|                     SqlStmt = "UPDATE OCSDB.LOCKFEATURE SET DESCRIPTION = '" + NewAcceptNum + "' WHERE DESCRIPTION = (SELECT ACCEPTNUM FROM "  | 
|                             + "EOS.EVENTRECORD WHERE CASEID = " + OldCaseID + ")";  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新OCSDB.LOCKFEATURE");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|                 Command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error(e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|                 reader.Close();  | 
|                 Command.Dispose();  | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool UpdateRecuseOrder(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|             int Rank = 999;  | 
|             int Priority = 1;  | 
|             OracleCommand Command = null;  | 
|   | 
|             /* 單純的子案件或不需升級的交辦案件,不需要更新EOS.RESCUE_ORDER */  | 
|             if ((m_Record.getParentID() != 0) && !(upLevel))  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 該母案件已派工,無搶修順序紀錄 */  | 
|             if (OriginCaseStatus > CCS.LocalVariable.WaitForDespatch)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             try  | 
|             {  | 
|                 if (upLevel)  | 
|                 {  | 
|                     /* 將原先母案件的編號改為新的母案件編號 */  | 
|                     SqlStmt = "UPDATE EOS.RESCUE_ORDER SET CASEID = " + m_Record.getCaseID() + " WHERE CASEID = " + m_Record.getParentID()  | 
|                             + " AND DSUFID = " + m_Record.getLocateEquipment().getDSUFID();  | 
|   | 
|                     Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Transaction);  | 
|                     if (Command.ExecuteNonQuery() <= 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新EOS.RESCUE_ORDER: 無法將原先母案件的編號改為新的母案件編號.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     /* 找出該饋線的等級 */  | 
|                     SqlStmt = "SELECT RANK FROM EOS.IMP_FEEDER WHERE FEEDERID = " + m_Record.getFdrID();  | 
|   | 
|                     Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|                     OracleDataReader reader = Command.ExecuteReader();  | 
|                       | 
|                     if (reader.Read())  | 
|                     {  | 
|                         Rank = Convert.ToInt32(reader["RANK"].ToString());  | 
|                     }  | 
|                     reader.Close();  | 
|   | 
|                     /* 找出同等級饋線中的最大搶修順序號碼 */  | 
|                     SqlStmt = "SELECT MAX(PRIORITY) as PRIORITY FROM EOS.RESCUE_ORDER WHERE RANK = " + Rank + " AND DSUFID = "  | 
|                             + m_Record.getLocateEquipment().getDSUFID();  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     reader = Command.ExecuteReader();  | 
|                     if (reader.Read())  | 
|                     {  | 
|                         if ( reader["PRIORITY"].ToString().Length != 0 )  | 
|                             Priority = Convert.ToInt32(reader["PRIORITY"].ToString());  | 
|                     }  | 
|                     reader.Close();  | 
|   | 
|                     /* 如果沒找到,找前一RANK的最大的Priority */  | 
|                     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 = "  | 
|                                 + m_Record.getLocateEquipment().getDSUFID() + ")";  | 
|   | 
|                         Command.CommandText = SqlStmt;  | 
|                         reader = Command.ExecuteReader();  | 
|   | 
|                         if (reader.Read())  | 
|                         {  | 
|                             if ( reader["PRIORITY"].ToString().Length != 0 )  | 
|                                 Priority = Convert.ToInt32(reader["PRIORITY"].ToString());  | 
|                         }  | 
|                         reader.Close();  | 
|                     }  | 
|   | 
|                     /* 如果還是沒找到,就設Priority = 0 (只有當新增案件的Rank為最小時或第一筆案件才可能發生) */  | 
|                     if (Priority == 0)  | 
|                     { // 若不寫清楚會看不懂  | 
|                         Priority = 0;  | 
|   | 
|                         /* 將搶修順序號碼大於等於找出來號碼的都加1 */  | 
|                     }  | 
|                     SqlStmt = "UPDATE EOS.RESCUE_ORDER SET PRIORITY = PRIORITY + 1 WHERE PRIORITY > " + Priority + " AND DSUFID = "  | 
|                             + m_Record.getLocateEquipment().getDSUFID();  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         _PLog.Error("無法更新EOS.RESCUE_ORDER舊的搶修號碼.");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     /* 將本身資料存入資料庫內 */  | 
|                     SqlStmt = "INSERT INTO EOS.RESCUE_ORDER (CASEID,RANK,PRIORITY,DSUFID) VALUES (" + m_Record.getCaseID() + "," + Rank + ","  | 
|                             + (Priority + 1) + "," + m_Record.getLocateEquipment().getDSUFID() + ")";  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     if (Command.ExecuteNonQuery() <= 0)  | 
|                     {  | 
|                         _PLog.Error("無法新增EOS.RESCUE_ORDER的資料");  | 
|                         Command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|   | 
|                 Command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error("Problems occue during updating eos.rescue_order: " + e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|   | 
|                 if ( Command != null)  | 
|                     Command.Dispose();  | 
|   | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         // 當原先同一用戶在事故受理後又報案,不過從一般案件轉為交辦案件所需作的轉換工作  | 
|         private bool DeleteOldCase(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|             int CaseID = 0; // 原先的事故號碼  | 
|             int CaseType = CCS.LocalVariable.ChildCase; // 原先的種類  | 
|             int Count = 0; // 原先的來電次數  | 
|             int CaseStatus = 0; // 原先的案件狀態  | 
|             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 = '" + m_Record.getMeter() + "' AND R.CASEID <> "  | 
|                     + m_Record.getCaseID() + " AND E.CASESTATUS <= " + CCS.LocalVariable.WaitForSponsor;  | 
|   | 
|             try  | 
|             {  | 
|                 Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Transaction);  | 
|                 OracleDataReader reader = Command.ExecuteReader();  | 
|   | 
|                 if (reader.Read())  | 
|                 {  | 
|                     CaseID = Convert.ToInt32(reader["CASEID"].ToString());  | 
|                     CaseType = Convert.ToInt32(reader["CASETYPE"].ToString());  | 
|                     CaseStatus = Convert.ToInt32(reader["CASESTATUS"].ToString());  | 
|                     Count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|                     reader.Close();  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     reader.Close();  | 
|                     Command.Dispose();  | 
|                     _PLog.Error("無法找到原先舊的案件.");  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "DELETE EOS.EVENTS WHERE CASEID = " + CaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("刪除原先舊的案件的EOS.EVENTS發生錯誤.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "DELETE EOS.EVENTRECORD WHERE CASEID = " + CaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("刪除原先舊的案件的EOS.EVENTRECORD發生錯誤.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "DELETE EOS.EVENTRECORD_EX WHERE CASEID = " + CaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("刪除原先舊的案件的EOS.EVENTRECORD_EX發生錯誤.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 SqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + CaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() < 0)  | 
|                 {  | 
|                     _PLog.Error("刪除原先舊的案件的EOS.TMPAFFECTCUSTMS發生錯誤.");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 if (m_Record.getParentID() == CaseID)  | 
|                 { // 原本舊案件為母案件  | 
|                     SqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.MERGECASE WHERE PARENTID = " + m_Record.getCaseID();  | 
|   | 
|                     Command.CommandText = SqlStmt;  | 
|                     reader = Command.ExecuteReader();  | 
|   | 
|                     if (reader.Read())  | 
|                     {  | 
|                         switch (Convert.ToInt32(reader["COUNT"].ToString()))  | 
|                         {  | 
|                             case 0:  | 
|                                 _PLog.Error("無法找到原先母案件下掛的子案件.");  | 
|                                 reader.Close();  | 
|                                 Command.Dispose();  | 
|                                 return false;  | 
|                             case 1: // 子案件為之前受理的同一事故案件  | 
|                                 SqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + CCS.LocalVariable.OriginalCase + ",COUNT = " + (Count + 1)  | 
|                                         + ",MERGECASECOUNT = 0 WHERE CASEID = " + m_Record.getCaseID();  | 
|   | 
|                                 Command.CommandText = SqlStmt;  | 
|                                 if (Command.ExecuteNonQuery() <= 0)  | 
|                                 {  | 
|                                     _PLog.Error("無法更新原先子案件(要提升為母案件)的資料.");  | 
|                                     reader.Close();  | 
|                                     Command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|   | 
|                                 SqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CUSTOMERMETER <> '" + m_Record.getMeter() + "' AND CASEID = "  | 
|                                         + m_Record.getCaseID();  | 
|   | 
|                                 Command.CommandText = SqlStmt;  | 
|                                 if (Command.ExecuteNonQuery() < 0)  | 
|                                 {  | 
|                                     _PLog.Error("無法刪除原先子案件(要提升為母案件)EOS.TMPAFFECTYCUSTMS的資料.");  | 
|                                     reader.Close();  | 
|                                     Command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|                                 break;  | 
|                             default:  | 
|                                 SqlStmt = "UPDATE EOS.EVENTS SET MERGECASECOUNT = MERGECASECOUNT - 1,COUNT = " + (Count + 1) + " WHERE CASEID = "  | 
|                                         + m_Record.getCaseID();  | 
|   | 
|                                 Command.CommandText = SqlStmt;  | 
|                                 if (Command.ExecuteNonQuery() < 0)  | 
|                                 {  | 
|                                     _PLog.Error("無法更新EOS.EVENTS的資料.");  | 
|                                     reader.Close();  | 
|                                     Command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|                                 break;  | 
|                         }  | 
|                         reader.Close();  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         reader.Close();  | 
|                         Command.Dispose();  | 
|                         _PLog.Error("無法找到原先母案件下掛的子案件.");  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|   | 
|                 SqlStmt = "DELETE EOS.MERGECASE WHERE CASEID = " + CaseID;  | 
|   | 
|                 Command.CommandText = SqlStmt;  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     _PLog.Error("刪除EOS.MERGECASE發生錯誤");  | 
|                     Command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 Command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error(e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|   | 
|                 if (Command != null)  | 
|                     Command.Dispose();  | 
|   | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool InsertIntoSri(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|             int Count = 0;  | 
|             OracleCommand Command = null;  | 
|             OracleDataReader reader = null;  | 
|   | 
|             SqlStmt = "SELECT COUNT(*) as COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + m_Record.getAcceptNum() + "'";  | 
|   | 
|             try  | 
|             {  | 
|                 Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);  | 
|                 reader = Command.ExecuteReader();  | 
|   | 
|                 if (reader.Read())  | 
|                     Count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 _PLog.Error("Problems occur when checking SCENE Data: " + e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {   | 
|                 if ( reader != null )  | 
|                     reader.Close();  | 
|             }  | 
|   | 
|             if (Count > 0)  | 
|             {  | 
|                 Command.Dispose();  | 
|                 return true;  | 
|             }  | 
|   | 
|             SqlStmt = "INSERT INTO OCSDB.SRI VALUES('" + m_Record.getAcceptNum() + "',2,-1)";  | 
|   | 
|             try  | 
|             {  | 
|                 Command.CommandText = SqlStmt;  | 
|                   | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                     return false;  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Console.WriteLine(e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 Command.Dispose();  | 
|             }  | 
|               | 
|             return true;  | 
|         }  | 
|   | 
|         private bool SaveCustomerTel(CCS.Object.EventRecord m_Record)  | 
|         {  | 
|             String SqlStmt;  | 
|   | 
|             // 無電號資料  | 
|             /*  | 
|              * if (m_Record.getisReCall() == CCS.LocalVariable.NotReCall) { return true; }  | 
|              */  | 
|   | 
|             // 沒有回覆電話可供回存  | 
|             if (m_Record.getTel() == null || m_Record.getTel().Trim().Length == 0 )  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             // 電話資料過長  | 
|             if (m_Record.getTel().Trim().Length > 24)  | 
|             {  | 
|                 _PLog.Warn("電話過長號碼,無法回存資料庫.");  | 
|                 return true;  | 
|             }  | 
|   | 
|             SqlStmt = "UPDATE BASEDB.METER SET TELE_NUMB = '" + m_Record.getTel().Trim() + "' WHERE METR_NUMB = '" + m_Record.getMeter() + "'";  | 
|   | 
|             OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Transaction);  | 
|   | 
|             try  | 
|             {  | 
|                 if (Command.ExecuteNonQuery() <= 0)  | 
|                     _PLog.Warn("無法將用戶電話回存回資料庫.");  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Console.WriteLine(e.Message);  | 
|                 Console.WriteLine(e.StackTrace);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 Command.Dispose();  | 
|             }  | 
|   | 
|             return true;  | 
|         }  | 
|   | 
|     }  | 
| }  |