|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var fdrid = GetFdrid(conn, trx, ccsEventRecord.Meter); | 
|---|
|  |  |  | var fdrid = GetFdrid(conn, ccsEventRecord.Meter); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | else | 
|---|
|  |  |  | CcsMain.Instance.AddProcessingFdr(fdrid); //將要處理的案件的饋線別加入處理中饋線集合 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | int TraceCount = this.getTraceCount(m_CCSRecord.CcsId); | 
|---|
|  |  |  | bool TraceError = false;    //追蹤次數超過3次,改為非A類不追蹤合併 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (TraceCount) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId,true); | 
|---|
|  |  |  | TraceError = false; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId,false); | 
|---|
|  |  |  | TraceError = true; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId,false); | 
|---|
|  |  |  | TraceError = false; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | */ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | eosEventRecord = InitialEventRecord(conn, trx, ccsEventRecord); | 
|---|
|  |  |  | if (eosEventRecord != null) | 
|---|
|  |  |  | 
|---|
|  |  |  | sendMail = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | /*                        switch (TraceCount) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | case 0: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if ( Return_Status == CCS.GlobalVariable.CaseTransfer ) | 
|---|
|  |  |  | _PLog.Error("案件已移轉,此事故案件不被受理...."); | 
|---|
|  |  |  | else if ( Return_Status == CCS.GlobalVariable.Failure_By_DB ) | 
|---|
|  |  |  | _PLog.Error("資料庫錯誤,此事故案件不被受理...."); | 
|---|
|  |  |  | else if ( Return_Status == CCS.GlobalVariable.FDRLocked ) | 
|---|
|  |  |  | _PLog.Error("饋線被鎖定,此事故案件不被受理...."); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | _PLog.Error("此事故案件不被受理...."); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId, true); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId, false); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default://追蹤次數超過3次,改為非A類不追蹤合併 | 
|---|
|  |  |  | UpdateTraceCount(m_CCSRecord.CcsId, false); | 
|---|
|  |  |  | if (Return_Status == CCS.GlobalVariable.Trace_Counts_3) | 
|---|
|  |  |  | m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _PLog.Error("追蹤次數3次,無法追蹤到故障設備,以一般無電號案件方式受理...."); | 
|---|
|  |  |  | m_EventRecord.setTrace_Finish(CCS.GlobalVariable.Trace_Finish); | 
|---|
|  |  |  | Process(CCS.GlobalVariable.NoMeter); | 
|---|
|  |  |  | SendMail = true; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case CCS.GlobalVariable.CaseTransfer: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  | _PLog.Error("案件已移轉,此事故案件不被受理...."); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case CCS.GlobalVariable.FDRLocked: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  | _PLog.Error("饋線被鎖定,此事故案件不被受理...."); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case CCS.GlobalVariable.Failure_By_DB: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  | _PLog.Error("資料庫錯誤,此事故案件不被受理...."); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | if (_Trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | _Trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _Trx.Dispose(); | 
|---|
|  |  |  | _PLog.Error("此事故案件不被受理...."); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (eosEventRecord != null && eosEventRecord.FdrId!= 0) | 
|---|
|  |  |  | CcsMain.Instance.RemoveProcessingFdr(eosEventRecord.FdrId); //將處理完的案件的饋線別從處理中饋線集合中移除 | 
|---|
|  |  |  | //throw e; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | finally | 
|---|
|  |  |  | { | 
|---|
|  |  |  | CcsMain.Instance.RemoveProcessingCases(ccsEventRecord.CcsId); | 
|---|
|  |  |  | // OnThreadFinish(new ThreadEndEvent(_connectionTpc)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (sendMail) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var mailService = new MailService(); | 
|---|
|  |  |  | mailService.InitialSmtpClient(conn); | 
|---|
|  |  |  | mailService.SendMail(ccsEventRecord.CcsId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void DoProcessEventRecord(CCSEventRecord ccsEventRecord, OracleConnection conn) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var sendMail = false; | 
|---|
|  |  |  | EOSEventRecord eosEventRecord = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // Being Transaction | 
|---|
|  |  |  | OracleTransaction trx = conn.BeginTransaction(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var fdrid = GetFdrid(conn, ccsEventRecord.Meter); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (CcsMain.Instance.ContainProcessingFdr(fdrid)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | CcsMain.Instance.AddWaitingCases(ccsEventRecord.CcsId, fdrid); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | CcsMain.Instance.AddProcessingFdr(fdrid); //將要處理的案件的饋線別加入處理中饋線集合 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | eosEventRecord = InitialEventRecord(conn, trx, ccsEventRecord); | 
|---|
|  |  |  | if (eosEventRecord != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var mLeach = new Leach(conn, trx, GlobalVariable.TraceConnectionString); // 案件過濾與合併 | 
|---|
|  |  |  | Logger.Info("過濾案件..."); | 
|---|
|  |  |  | var returnStatus = mLeach.LeachCase(eosEventRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (returnStatus) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | case GlobalVariable.Success: | 
|---|
|  |  |  | Logger.Info("案件過濾完畢...."); | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.Success); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.NoMeter: | 
|---|
|  |  |  | Logger.Info("案件過濾完畢,用戶無電號...."); | 
|---|
|  |  |  | eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.SameCustomer: | 
|---|
|  |  |  | Logger.Info("相同用戶重複來電...."); | 
|---|
|  |  |  | ProcessSameCustomer(conn, trx, ccsEventRecord, eosEventRecord); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.NoSupplyElc: | 
|---|
|  |  |  | Logger.Warn("該饋線未供電,無法作事故案件追蹤合併...."); | 
|---|
|  |  |  | eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.NoSxfmr: | 
|---|
|  |  |  | Logger.Warn("該案件無變壓器...."); | 
|---|
|  |  |  | eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.CaseTypeChanged: | 
|---|
|  |  |  | Logger.Info("變更案件狀態...."); | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.CaseTypeChanged); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | case GlobalVariable.TraceFailure: | 
|---|
|  |  |  | Logger.Error("故障追蹤錯誤,以一般無電號案件方式受理...."); | 
|---|
|  |  |  | eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | var traceCount = GetTraceCount(conn, trx, ccsEventRecord.CcsId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (traceCount < 2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | trx.Dispose(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (returnStatus == GlobalVariable.CaseTransfer) | 
|---|
|  |  |  | Logger.Error("案件已移轉,此事故案件暫不被受理...."); | 
|---|
|  |  |  | else if (returnStatus == GlobalVariable.FailureByDb) | 
|---|
|  |  |  | Logger.Error("資料庫錯誤,此事故案件暫不被受理...."); | 
|---|
|  |  |  | else if (returnStatus == GlobalVariable.FdrLocked) | 
|---|
|  |  |  | Logger.Error("饋線被鎖定,此事故案件暫不被受理...."); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | Logger.Error("發生非預期錯誤,此事故案件暫不被受理...."); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (traceCount == 0) | 
|---|
|  |  |  | UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, true); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, false); | 
|---|
|  |  |  | if (returnStatus == GlobalVariable.TraceCounts3) | 
|---|
|  |  |  | eosEventRecord.Note = eosEventRecord.Note + "(本案用戶供電資料追蹤失敗)"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Logger.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理...."); | 
|---|
|  |  |  | eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; | 
|---|
|  |  |  | Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); | 
|---|
|  |  |  | sendMail = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (fdrid != 0) | 
|---|
|  |  |  | CcsMain.Instance.RemoveProcessingFdr(fdrid); //將處理完的案件的饋線別從處理中饋線集合中移除 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Logger.Error(e, e.Message + ". CCSID = " + ccsEventRecord.CcsId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (trx != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (trx.Connection.State == ConnectionState.Open) | 
|---|
|  |  |  | trx.Rollback(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | trx.Dispose(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (eosEventRecord != null && eosEventRecord.FdrId != 0) | 
|---|
|  |  |  | CcsMain.Instance.RemoveProcessingFdr(eosEventRecord.FdrId); //將處理完的案件的饋線別從處理中饋線集合中移除 | 
|---|
|  |  |  | //throw e; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | var initialData = new InitialEventData(conn); | 
|---|
|  |  |  | var mContrast = new NumberContrast(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var deptContrast = new DeptContrast(conn, trx); | 
|---|
|  |  |  | EOSEventRecord eosEventRecord = new EOSEventRecord(initialData.GetNewCaseId(), conn, trx) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | AcceptNum = initialData.GetNewAcceptNum() | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 需先找出部門代號,再找到該部門屬於哪一個巡修單位 | 
|---|
|  |  |  | eosEventRecord.Meter = ccsEventRecord.Meter; | 
|---|
|  |  |  | var tmp = deptContrast.getDept_Code(ccsEventRecord.Meter); | 
|---|
|  |  |  | var tmp = DeptContrast.Instance.getDept_Code(ccsEventRecord.Meter); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (tmp == -1) | 
|---|
|  |  |  | eosEventRecord.Dept = FindoutDeptByAddr(trx, ccsEventRecord); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | eosEventRecord.Dept = tmp; | 
|---|
|  |  |  | eosEventRecord.Dept = tmp == -1 ? FindoutDeptByAddr(trx, ccsEventRecord) : tmp; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | eosEventRecord.FdrId = GetFdrid(conn, trx, ccsEventRecord.Meter); | 
|---|
|  |  |  | eosEventRecord.FdrId = GetFdrid(conn, ccsEventRecord.Meter); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | return maxLength; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private int GetFdrid(OracleConnection conn, OracleTransaction trx, string meter) | 
|---|
|  |  |  | private int GetFdrid(OracleConnection conn, string meter) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var sqlStmt = "SELECT TRAN_CORD FROM BASEDB.METER WHERE METR_NUMB = '" + meter + "'"; | 
|---|
|  |  |  | var command = new OracleCommand(sqlStmt, conn, trx); | 
|---|
|  |  |  | var command = new OracleCommand(sqlStmt, conn); | 
|---|
|  |  |  | var reader = command.ExecuteReader(); | 
|---|
|  |  |  | var tpclid = ""; | 
|---|
|  |  |  | var fdrid = 0; | 
|---|
|  |  |  | var group = ""; | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (reader.Read()) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (tpclid.Length > 11) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | group = tpclid.Substring(tpclid.Length - 3); | 
|---|
|  |  |  | var group = tpclid.Substring(tpclid.Length - 3); | 
|---|
|  |  |  | tpclid = tpclid.Substring(0, 11).Trim(); | 
|---|
|  |  |  | sqlStmt = | 
|---|
|  |  |  | "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = " + | 
|---|