| using System;  | 
| using System.Data.OracleClient;  | 
| using CCSTrace.CCS.Domain;  | 
| using CCSTrace.CCS.Object;  | 
| using NLog;  | 
|   | 
| namespace CCSTrace.CCS  | 
| {  | 
|     public class FinishEvent  | 
|     {  | 
|         private static readonly Logger Logger = LogManager.GetCurrentClassLogger();  | 
|         private int _originCaseStatus;  | 
|   | 
|   | 
|         public bool Finish(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord, int mKind)  | 
|         {  | 
|             Logger.Info("進行OMS資料更新程序...");  | 
|             if (eosEventRecord.ParentId == 0)  | 
|             {  | 
|                 // Original Case  | 
|                 if (!ProcessSingalCase(conn, trx, eosEventRecord))  | 
|                 {  | 
|                     return false;  | 
|                 }  | 
|                 Logger.Info("更新eos.events成功!");  | 
|             }  | 
|             else  | 
|             {  | 
|                 // Child Case  | 
|                 if (!ProcessMergeCase(conn, trx, eosEventRecord))  | 
|                 {  | 
|                     return false;  | 
|                 }  | 
|                 Logger.Info("更新eos.events成功!");  | 
|             }  | 
|   | 
|             // inert into eos.eventrecord && eos.eventrecord_ex  | 
|             var command = new OracleCommand(eosEventRecord.GetInsertSqlStmt(), conn, trx);  | 
|             OracleCommand command1 = null;  | 
|   | 
|             try  | 
|             {  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 command.CommandText = eosEventRecord.LocateEquipment.GetInsertSqlStmt();  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord_ex");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|                 command.Dispose();  | 
|   | 
|                 if ((mKind == GlobalVariable.Success) || (mKind == GlobalVariable.CaseTypeChanged))  | 
|                 {  | 
|                     /* 當饋線全停時不需注意影響虛擬用戶,影響用戶資料會由實際切開關產生 */  | 
|                     if (eosEventRecord.Fsc != GlobalVariable.Breaker)  | 
|                     {  | 
|                         if (!SetVisualCustomer(conn, trx, eosEventRecord))  | 
|                         {  | 
|                             Logger.Error("新增影響用戶資料錯誤.");  | 
|                             return false;  | 
|                         }  | 
|                         Logger.Info("新增影響用戶成功!");  | 
|                     }  | 
|   | 
|                     var upLevel = false;  | 
|   | 
|                     if (!UpdateImportCase(conn, trx, eosEventRecord, upLevel))  | 
|                     {  | 
|                         Logger.Error("處理案件等級變更時發生錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     Logger.Info("處理案件等級變更成功!");  | 
|   | 
|                     if (!UpdateRecuseOrder(conn, trx, eosEventRecord, upLevel))  | 
|                     {  | 
|                         Logger.Error("新增搶修順序資料時發生錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     Logger.Info("新增搶修順序成功!");  | 
|   | 
|                     if (mKind == GlobalVariable.CaseTypeChanged)  | 
|                     {  | 
|                         if (!DeleteOldCase(conn, trx, eosEventRecord))  | 
|                         {  | 
|                             Logger.Error("案件轉換發生錯誤");  | 
|                             return false;  | 
|                         }  | 
|                         Logger.Info("案件轉換成功!");  | 
|                     }  | 
|   | 
|                     if (!SaveCustomerTel(conn, trx, eosEventRecord))  | 
|                     {  | 
|                         Logger.Error("無法將用戶電話回存回資料庫.");  | 
|                         return false;  | 
|                     }  | 
|                     Logger.Info("將用戶電話回存回資料庫成功!");  | 
|                 }  | 
|                 else if (mKind == GlobalVariable.NoMeter)  | 
|                 {  | 
|                     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, conn, trx);  | 
|                     if (command1.ExecuteNonQuery() <= 0)  | 
|                     {  | 
|                         Logger.Error("新增搶修順序資料時發生錯誤.");  | 
|                         command1.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                     command1.Dispose();  | 
|                     Logger.Info("新增搶修順序成功!");  | 
|                 }  | 
|   | 
|                 if (eosEventRecord.ParentId == 0)  | 
|                 {  | 
|                     if (!InsertIntoSri(conn, trx, eosEventRecord))  | 
|                     {  | 
|                         Logger.Error("新增資料庫(OCSDB.SRI)錯誤.");  | 
|                         return false;  | 
|                     }  | 
|                     Logger.Info("新增資料庫(OCSDB.SRI)成功!");  | 
|                 }  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Warn(e, e.Message);  | 
|                 command.Dispose();  | 
|   | 
|                 command1?.Dispose();  | 
|   | 
|                 throw;  | 
|             }  | 
|   | 
|             /** COMMIT的動作須連外面CCS的資料都正確輸入完才作 */  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool ProcessSingalCase(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             var result = false;  | 
|             var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + eosEventRecord.CaseId + "," + CCSCaseState.WaitForDespatch +  | 
|                           ",1,"  | 
|                           + GlobalVariable.OriginalCase + ",0)";  | 
|   | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|   | 
|             try  | 
|             {  | 
|                 if (command.ExecuteNonQuery() > 0)  | 
|                     result = true;  | 
|                 else  | 
|                     Logger.Error("儲存資料時發生錯誤:  無法insert eos.events");  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, "儲存資料時發生錯誤:  無法insert eos.events. Error = " + e.Message);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 command.Dispose();  | 
|             }  | 
|             return result;  | 
|         }  | 
|   | 
|         private bool ProcessMergeCase(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             // insert eos.events  | 
|             var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + eosEventRecord.CaseId + "," + CCSCaseState.WaitForDespatch +  | 
|                           ",1,"  | 
|                           + GlobalVariable.ChildCase + ",0)";  | 
|   | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|   | 
|             try  | 
|             {  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤:  無法insert eos.events");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // insert into eos.mergecase  | 
|                 sqlStmt = "INSERT INTO EOS.MERGECASE VALUES(" + eosEventRecord.CaseId + ",'" + eosEventRecord.AcceptNum +  | 
|                           "'," +  | 
|                           eosEventRecord.ParentId + ")";  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤:  無法insert eos.mergecase");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // update parent case data(EOS.EVENTS)  | 
|                 sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ParentCase +  | 
|                           ",MERGECASECOUNT = MERGECASECOUNT + 1 " + "WHERE CASEID = "  | 
|                           + eosEventRecord.ParentId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤:  無法更改母案件資料");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 // update parent case data(EOS.EVENTRECORD)  | 
|                 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)  | 
|                 {  | 
|                     Logger.Error("儲存資料時發生錯誤:  無法update eos.eventrecord(FSC,UFID)");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|                 command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, "儲存資料時發生錯誤: " + e.Message);  | 
|                 command.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             return true;  | 
|         }  | 
|   | 
|         private bool SetVisualCustomer(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             var customerKind = "C"; // 高壓用戶or一般用戶  | 
|   | 
|             var sqlStmt = "SELECT COUNT(*) as COUNT FROM BASEDB.HICUSTOMER WHERE METR_NUMB = '" + eosEventRecord.Meter +  | 
|                           "'";  | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|             var reader = command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["COUNT"].ToString()) > 0)  | 
|                     {  | 
|                         customerKind = "H";  | 
|                     }  | 
|                 }  | 
|             }  | 
|             catch (Exception)  | 
|             {  | 
|                 Logger.Error("無法判斷用戶種類.");  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {  | 
|                 reader.Close();  | 
|                 command.Dispose();  | 
|             }  | 
|   | 
|             if (eosEventRecord.ParentId == 0)  | 
|             {  | 
|                 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 + "'";  | 
|   | 
|                 var command1 = new OracleCommand(sqlStmt, conn, trx);  | 
|                 if (command1.ExecuteNonQuery() >= 0)  | 
|                 {  | 
|                     command1.Dispose();  | 
|                     return true;  | 
|                 }  | 
|                 command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|             return InsertMutilCustomer(conn, trx, customerKind, eosEventRecord);  | 
|         }  | 
|   | 
|         private bool InsertMutilCustomer(OracleConnection conn, OracleTransaction trx, string customerKind,  | 
|             EOSEventRecord eosEventRecord)  | 
|         {  | 
|             var sqlStmt = "";  | 
|             var updateCustomer = false;  | 
|             var mTpclidGroupId = "";  | 
|             var mCustomerKind = "C";  | 
|   | 
|             sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " + eosEventRecord.ParentId +  | 
|                       " OR CASEID IN (SELECT CASEID FROM EOS.MERGECASE WHERE PARENTID = " + eosEventRecord.ParentId +  | 
|                       ")";  | 
|   | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|             var reader = command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["COUNT"].ToString()) == 1)  | 
|                     {  | 
|                         updateCustomer = true; // 需重新修改影響用戶資料(原始母案件的影響用戶數)  | 
|                     }  | 
|                 }  | 
|             }  | 
|             catch (Exception)  | 
|             {  | 
|                 Logger.Error("無法確認是否需重新修改原始母案件之影響用戶資料.");  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {  | 
|                 reader.Close();  | 
|                 command.Dispose();  | 
|             }  | 
|   | 
|             OracleCommand command1 = null;  | 
|   | 
|             if (updateCustomer)  | 
|             {  | 
|                 /* 找出原始案件的影響用戶資料 */  | 
|                 sqlStmt = "SELECT TPCLIDGROUPID,CUSTOMERKIND FROM EOS.TMPAFFECTCUSTMS WHERE CASEID = " +  | 
|                           eosEventRecord.ParentId;  | 
|   | 
|                 try  | 
|                 {  | 
|                     command1 = new OracleCommand(sqlStmt, conn, trx);  | 
|                     reader = command1.ExecuteReader();  | 
|   | 
|                     if (reader.Read())  | 
|                     {  | 
|                         mTpclidGroupId = reader["TPCLIDGROUPID"].ToString().Trim();  | 
|                         mCustomerKind = reader["CUSTOMERKIND"].ToString();  | 
|                     }  | 
|                     reader.Close();  | 
|   | 
|                     /* 若為高壓用戶,用戶數本來就為1人..無須再作修正 */  | 
|                     if (mCustomerKind.Equals("C"))  | 
|                     {  | 
|                         /* 刪除原始案件的既有用戶資料 */  | 
|                         sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + eosEventRecord.ParentId;  | 
|   | 
|                         command1.CommandText = sqlStmt;  | 
|                         if (command1.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             Logger.Error("無法刪除原始案件的既有用戶資料.");  | 
|                             command1.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         /* 將原始案件的影響用戶數改為變壓器的全部用戶 */  | 
|                         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)  | 
|                         {  | 
|                             Logger.Error("無法將原始案件的影響用戶數改為變壓器的全部用戶.");  | 
|                             command1.Dispose();  | 
|                             return false;  | 
|                         }  | 
|                     }  | 
|                     command1.Dispose();  | 
|                 }  | 
|                 catch (Exception e)  | 
|                 {  | 
|                     Logger.Error(e, "無法更新原始案件影響用戶資料: " + e.Message);  | 
|                     command1?.Dispose();  | 
|                     return false;  | 
|                 }  | 
|             }  | 
|   | 
|             /* 新受理案件的影響用戶資料 */  | 
|             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(+) ";  | 
|   | 
|             var command2 = new OracleCommand(sqlStmt, conn, trx);  | 
|             if (command2.ExecuteNonQuery() < 0)  | 
|             {  | 
|                 Logger.Error("無法新增新受理案件的影響用戶資料.");  | 
|                 command2.Dispose();  | 
|                 return false;  | 
|             }  | 
|             command2.Dispose();  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool UpdateImportCase(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord, bool upLevel)  | 
|         {  | 
|             /* 該案件不為交辦案件 */  | 
|             if (eosEventRecord.ImportCase != GlobalVariable.IsImportCase)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 該交辦案件為原始案件 */  | 
|             if (eosEventRecord.ParentId == 0)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 若母案件已為交辦案件,則不需再作任何更動 */  | 
|             var sqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + eosEventRecord.ParentId;  | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|             var reader = command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     if (Convert.ToInt32(reader["IMPORTCASE"].ToString()) == GlobalVariable.IsImportCase)  | 
|                         return true;  | 
|                 }  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, "無法取得母案件之等級." + e.Message);  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {  | 
|                 reader.Close();  | 
|                 command.Dispose();  | 
|             }  | 
|   | 
|             /* 開始進行交辦案件升級動作 */  | 
|             upLevel = true;  | 
|   | 
|             /* 將交辦案件改為母案件 */  | 
|             sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ParentCase + ",MERGECASECOUNT = "  | 
|                       + "(SELECT MERGECASECOUNT FROM EOS.EVENTS WHERE CASEID = " + eosEventRecord.ParentId +  | 
|                       ") WHERE CASEID = " + eosEventRecord.CaseId;  | 
|   | 
|             var command1 = new OracleCommand(sqlStmt, conn, trx);  | 
|             if (command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 Logger.Error("無法將交辦案件改為母案件.");  | 
|                 command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             /* 將母案件改為子案件 */  | 
|             sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.ChildCase +  | 
|                       ",MERGECASECOUNT = 0 WHERE CASEID = " + eosEventRecord.ParentId;  | 
|   | 
|             command1.CommandText = sqlStmt;  | 
|             if (command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 Logger.Error("無法將母案件改為子案件.");  | 
|                 command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             // 將EOS.MERGECASE內的資料修正 1.將原先該母案件下的子案件都改掛在交辦案件下 2.將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum)  | 
|             sqlStmt = "UPDATE EOS.MERGECASE SET PARENTID = " + eosEventRecord.CaseId + " WHERE PARENTID = " +  | 
|                       eosEventRecord.ParentId;  | 
|   | 
|             command1.CommandText = sqlStmt;  | 
|             if (command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 Logger.Error("無法將原先該母案件下的子案件都改掛在交辦案件下.");  | 
|                 command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|   | 
|             sqlStmt = "UPDATE EOS.MERGECASE SET (CASEID,ACCEPTNUM) = (SELECT CASEID,ACCEPTNUM FROM EOS.EVENTRECORD WHERE CASEID = "  | 
|                       + eosEventRecord.ParentId + ") WHERE CASEID = " + eosEventRecord.CaseId;  | 
|   | 
|             command1.CommandText = sqlStmt;  | 
|             if (command1.ExecuteNonQuery() <= 0)  | 
|             {  | 
|                 Logger.Error("無法將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum).");  | 
|                 command1.Dispose();  | 
|                 return false;  | 
|             }  | 
|             command1.Dispose();  | 
|   | 
|             return UpdateOtherTable(conn, trx, eosEventRecord);  | 
|         }  | 
|   | 
|         private bool UpdateOtherTable(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             var sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + eosEventRecord.ParentId;  | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|             var reader = command.ExecuteReader();  | 
|   | 
|             try  | 
|             {  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     _originCaseStatus = Convert.ToInt32(reader["CASESTATUS"].ToString());  | 
|                 }  | 
|                 reader.Close();  | 
|   | 
|                 switch (_originCaseStatus)  | 
|                 {  | 
|                     case 0:  | 
|                         Logger.Error("找不到原始母案件之案件狀態.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|   | 
|                     case (int) CCSCaseState.WaitForDespatch:  | 
|                         break;  | 
|   | 
|                     case (int) CCSCaseState.WaitForSponsor:  | 
|                         sqlStmt = "UPDATE EOS.EVENTDESPATCH SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +  | 
|                                   eosEventRecord.ParentId;  | 
|   | 
|                         command.CommandText = sqlStmt;  | 
|                         if (command.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             Logger.Error("無法更新EOS.EVENTDESPATCH.");  | 
|                             command.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         sqlStmt = "update eos.events set casestatus=" + CCSCaseState.WaitForSponsor + " where caseid=" +  | 
|                                   eosEventRecord.CaseId;  | 
|                         command.CommandText = sqlStmt;  | 
|                         if (command.ExecuteNonQuery() < 0)  | 
|                         {  | 
|                             Logger.Error("無法更新EOS.EVENTS.");  | 
|                             command.Dispose();  | 
|                             return false;  | 
|                         }  | 
|   | 
|                         eosEventRecord.IsDespatched = true;  | 
|                         break;  | 
|                 }  | 
|   | 
|                 sqlStmt = "UPDATE EOS.EVENTS SET CASESTATUS = " + CCSCaseState.WaitForDespatch + " WHERE CASEID = " +  | 
|                           eosEventRecord.ParentId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("無法更新EOS.Events的CaseStatus.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "UPDATE OCSDB.SRI SET SCENENAME = '" + eosEventRecord.AcceptNum +  | 
|                           "' WHERE SCENENAME = (SELECT ACCEPTNUM FROM "  | 
|                           + "EOS.EVENTRECORD WHERE CASEID = " + eosEventRecord.ParentId + ")";  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() < 0)  | 
|                 {  | 
|                     Logger.Error("無法更新OCSDB.SRI.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.CRTAPOLOGY WHERE CASEID = " + eosEventRecord.ParentId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 reader = command.ExecuteReader();  | 
|                 var count = 0;  | 
|   | 
|                 if (reader.Read())  | 
|                 {  | 
|                     count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|                 }  | 
|                 reader.Close();  | 
|   | 
|                 // 已有切過開關  | 
|                 if (count > 0)  | 
|                 {  | 
|                     sqlStmt = "UPDATE EOS.EVENTFACILITY SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +  | 
|                               eosEventRecord.ParentId;  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     if (command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         Logger.Error("無法更新EOS.EVENTFACILITY.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     sqlStmt = "UPDATE EOS.CRTAPOLOGY SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +  | 
|                               eosEventRecord.ParentId;  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     if (command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         Logger.Error("無法更新EOS.CRTAPOLOGY.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     sqlStmt = "UPDATE EOS.EVENTAFFECT SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +  | 
|                               eosEventRecord.ParentId;  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     if (command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         Logger.Error("無法更新EOS.EVENTAFFECT.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     //                SqlStmt = "UPDATE EOS.VOICE SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;  | 
|   | 
|                     //                if (CCS.GlobalVariable.Conn.UpdateDB(SqlStmt) < 0) {  | 
|                     //                    Logger.error("無法更新EOS.VOICE.");  | 
|                     //                    return false;  | 
|                     //                }  | 
|   | 
|                     sqlStmt = "UPDATE OCSDB.LOCKFEATURE SET DESCRIPTION = '" + eosEventRecord.AcceptNum +  | 
|                               "' WHERE DESCRIPTION = (SELECT ACCEPTNUM FROM "  | 
|                               + "EOS.EVENTRECORD WHERE CASEID = " + eosEventRecord.ParentId + ")";  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     if (command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         Logger.Error("無法更新OCSDB.LOCKFEATURE");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|                 command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, e.Message);  | 
|                 reader.Close();  | 
|                 command.Dispose();  | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool UpdateRecuseOrder(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord, bool upLevel)  | 
|         {  | 
|             var rank = 999;  | 
|             var priority = 1;  | 
|             OracleCommand command = null;  | 
|   | 
|             /* 單純的子案件或不需升級的交辦案件,不需要更新EOS.RESCUE_ORDER */  | 
|             if ((eosEventRecord.ParentId != 0) && !upLevel)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             /* 該母案件已派工,無搶修順序紀錄 */  | 
|             if (_originCaseStatus > (int) CCSCaseState.WaitForDespatch)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             try  | 
|             {  | 
|                 string sqlStmt;  | 
|                 if (upLevel)  | 
|                 {  | 
|                     /* 將原先母案件的編號改為新的母案件編號 */  | 
|                     sqlStmt = "UPDATE EOS.RESCUE_ORDER SET CASEID = " + eosEventRecord.CaseId + " WHERE CASEID = " +  | 
|                               eosEventRecord.ParentId +  | 
|                               " AND DSUFID = " + eosEventRecord.LocateEquipment.DsUfid;  | 
|   | 
|                     command = new OracleCommand(sqlStmt, conn, trx);  | 
|                     if (command.ExecuteNonQuery() <= 0)  | 
|                     {  | 
|                         Logger.Error("無法更新EOS.RESCUE_ORDER: 無法將原先母案件的編號改為新的母案件編號.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     /* 找出該饋線的等級 */  | 
|                     sqlStmt = "SELECT RANK FROM EOS.IMP_FEEDER WHERE FEEDERID = " + eosEventRecord.FdrId;  | 
|   | 
|                     command = new OracleCommand(sqlStmt, conn, trx);  | 
|                     var 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 = "  | 
|                               + eosEventRecord.LocateEquipment.DsUfid;  | 
|   | 
|                     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 = "  | 
|                                   + eosEventRecord.LocateEquipment.DsUfid + ")";  | 
|   | 
|                         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 = "  | 
|                               + eosEventRecord.LocateEquipment.DsUfid;  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     if (command.ExecuteNonQuery() < 0)  | 
|                     {  | 
|                         Logger.Error("無法更新EOS.RESCUE_ORDER舊的搶修號碼.");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|   | 
|                     /* 將本身資料存入資料庫內 */  | 
|                     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)  | 
|                     {  | 
|                         Logger.Error("無法新增EOS.RESCUE_ORDER的資料");  | 
|                         command.Dispose();  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|   | 
|                 command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, "Problems occue during updating eos.rescue_order: " + e.Message);  | 
|   | 
|                 if (command != null)  | 
|                     command.Dispose();  | 
|   | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         // 當原先同一用戶在事故受理後又報案,不過從一般案件轉為交辦案件所需作的轉換工作  | 
|         private bool DeleteOldCase(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             OracleCommand command = null;  | 
|   | 
|             var 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 = '" +  | 
|                           eosEventRecord.Meter + "' AND R.CASEID <> "  | 
|                           + eosEventRecord.CaseId + " AND E.CASESTATUS <= " + CCSCaseState.WaitForSponsor;  | 
|   | 
|             try  | 
|             {  | 
|                 command = new OracleCommand(sqlStmt, conn, trx);  | 
|                 var reader = command.ExecuteReader();  | 
|   | 
|                 var caseId = 0; // 原先的事故號碼  | 
|                 var count = 0; // 原先的來電次數  | 
|                 if (reader.Read())  | 
|                 {  | 
|                     caseId = Convert.ToInt32(reader["CASEID"].ToString());  | 
|                     count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|                     reader.Close();  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     reader.Close();  | 
|                     command.Dispose();  | 
|                     Logger.Error("無法找到原先舊的案件.");  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "DELETE EOS.EVENTS WHERE CASEID = " + caseId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("刪除原先舊的案件的EOS.EVENTS發生錯誤.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "DELETE EOS.EVENTRECORD WHERE CASEID = " + caseId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("刪除原先舊的案件的EOS.EVENTRECORD發生錯誤.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "DELETE EOS.EVENTRECORD_EX WHERE CASEID = " + caseId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("刪除原先舊的案件的EOS.EVENTRECORD_EX發生錯誤.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CASEID = " + caseId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() < 0)  | 
|                 {  | 
|                     Logger.Error("刪除原先舊的案件的EOS.TMPAFFECTCUSTMS發生錯誤.");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 if (eosEventRecord.ParentId == caseId)  | 
|                 {  | 
|                     // 原本舊案件為母案件  | 
|                     sqlStmt = "SELECT COUNT(*) as COUNT FROM EOS.MERGECASE WHERE PARENTID = " + eosEventRecord.CaseId;  | 
|   | 
|                     command.CommandText = sqlStmt;  | 
|                     reader = command.ExecuteReader();  | 
|   | 
|                     if (reader.Read())  | 
|                     {  | 
|                         switch (Convert.ToInt32(reader["COUNT"].ToString()))  | 
|                         {  | 
|                             case 0:  | 
|                                 Logger.Error("無法找到原先母案件下掛的子案件.");  | 
|                                 reader.Close();  | 
|                                 command.Dispose();  | 
|                                 return false;  | 
|   | 
|                             case 1: // 子案件為之前受理的同一事故案件  | 
|                                 sqlStmt = "UPDATE EOS.EVENTS SET CASETYPE = " + GlobalVariable.OriginalCase +  | 
|                                           ",COUNT = " + (count + 1)  | 
|                                           + ",MERGECASECOUNT = 0 WHERE CASEID = " + eosEventRecord.CaseId;  | 
|   | 
|                                 command.CommandText = sqlStmt;  | 
|                                 if (command.ExecuteNonQuery() <= 0)  | 
|                                 {  | 
|                                     Logger.Error("無法更新原先子案件(要提升為母案件)的資料.");  | 
|                                     reader.Close();  | 
|                                     command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|   | 
|                                 sqlStmt = "DELETE EOS.TMPAFFECTCUSTMS WHERE CUSTOMERMETER <> '" + eosEventRecord.Meter +  | 
|                                           "' AND CASEID = "  | 
|                                           + eosEventRecord.CaseId;  | 
|   | 
|                                 command.CommandText = sqlStmt;  | 
|                                 if (command.ExecuteNonQuery() < 0)  | 
|                                 {  | 
|                                     Logger.Error("無法刪除原先子案件(要提升為母案件)EOS.TMPAFFECTYCUSTMS的資料.");  | 
|                                     reader.Close();  | 
|                                     command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|                                 break;  | 
|   | 
|                             default:  | 
|                                 sqlStmt = "UPDATE EOS.EVENTS SET MERGECASECOUNT = MERGECASECOUNT - 1,COUNT = " +  | 
|                                           (count + 1) + " WHERE CASEID = "  | 
|                                           + eosEventRecord.CaseId;  | 
|   | 
|                                 command.CommandText = sqlStmt;  | 
|                                 if (command.ExecuteNonQuery() < 0)  | 
|                                 {  | 
|                                     Logger.Error("無法更新EOS.EVENTS的資料.");  | 
|                                     reader.Close();  | 
|                                     command.Dispose();  | 
|                                     return false;  | 
|                                 }  | 
|                                 break;  | 
|                         }  | 
|                         reader.Close();  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         reader.Close();  | 
|                         command.Dispose();  | 
|                         Logger.Error("無法找到原先母案件下掛的子案件.");  | 
|                         return false;  | 
|                     }  | 
|                 }  | 
|   | 
|                 sqlStmt = "DELETE EOS.MERGECASE WHERE CASEID = " + caseId;  | 
|   | 
|                 command.CommandText = sqlStmt;  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                 {  | 
|                     Logger.Error("刪除EOS.MERGECASE發生錯誤");  | 
|                     command.Dispose();  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 command.Dispose();  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, e.Message);  | 
|                 command?.Dispose();  | 
|                 return false;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private bool InsertIntoSri(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             var count = 0;  | 
|             OracleCommand command;  | 
|             OracleDataReader reader = null;  | 
|   | 
|             var sqlStmt = "SELECT COUNT(*) AS COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + eosEventRecord.AcceptNum + "'";  | 
|   | 
|             try  | 
|             {  | 
|                 command = new OracleCommand(sqlStmt, conn, trx);  | 
|                 reader = command.ExecuteReader();  | 
|   | 
|                 if (reader.Read())  | 
|                     count = Convert.ToInt32(reader["COUNT"].ToString());  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Error(e, "Problems occur when checking SCENE Data: " + e.Message);  | 
|                 return false;  | 
|             }  | 
|             finally  | 
|             {  | 
|                 reader?.Close();  | 
|             }  | 
|   | 
|             if (count > 0)  | 
|             {  | 
|                 command.Dispose();  | 
|                 return true;  | 
|             }  | 
|   | 
|             sqlStmt = "INSERT INTO OCSDB.SRI VALUES('" + eosEventRecord.AcceptNum + "',2,-1)";  | 
|   | 
|             try  | 
|             {  | 
|                 command.CommandText = sqlStmt;  | 
|   | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                     return false;  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Warn(e, e.Message);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 command.Dispose();  | 
|             }  | 
|   | 
|             return true;  | 
|         }  | 
|   | 
|         private bool SaveCustomerTel(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord)  | 
|         {  | 
|             // 無電號資料  | 
|             /*  | 
|              * if (m_Record.getisReCall() == CCS.GlobalVariable.NotReCall) { return true; }  | 
|              */  | 
|   | 
|             // 沒有回覆電話可供回存  | 
|             if (eosEventRecord.Tel == null || eosEventRecord.Tel.Trim().Length == 0)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|   | 
|             // 電話資料過長  | 
|             if (eosEventRecord.Tel.Trim().Length > 24)  | 
|             {  | 
|                 Logger.Warn("電話過長號碼,無法回存資料庫.");  | 
|                 return true;  | 
|             }  | 
|   | 
|             var sqlStmt = "UPDATE BASEDB.METER SET TELE_NUMB = '" + eosEventRecord.Tel.Trim() + "' WHERE METR_NUMB = '" +  | 
|                           eosEventRecord.Meter + "'";  | 
|   | 
|             var command = new OracleCommand(sqlStmt, conn, trx);  | 
|   | 
|             try  | 
|             {  | 
|                 if (command.ExecuteNonQuery() <= 0)  | 
|                     Logger.Warn("無法將用戶電話回存回資料庫.");  | 
|             }  | 
|             catch (Exception e)  | 
|             {  | 
|                 Logger.Warn(e, e.Message);  | 
|             }  | 
|             finally  | 
|             {  | 
|                 command.Dispose();  | 
|             }  | 
|   | 
|             return true;  | 
|         }  | 
|     }  | 
| } |