From 540014a7702a9bae7a3b9c00098671a132e869e8 Mon Sep 17 00:00:00 2001 From: ulysseskao <ulysseskao@gmail.com> Date: Thu, 05 May 2016 10:21:11 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/usestp' --- CCSTrace/CCS/ProcessEvent.cs | 602 +++++++++++++++++++++++++++++------------------------- 1 files changed, 321 insertions(+), 281 deletions(-) diff --git a/CCSTrace/CCS/ProcessEvent.cs b/CCSTrace/CCS/ProcessEvent.cs index 6e08771..8e2935d 100644 --- a/CCSTrace/CCS/ProcessEvent.cs +++ b/CCSTrace/CCS/ProcessEvent.cs @@ -10,125 +10,90 @@ namespace CCSTrace.CCS { - public delegate void ThreadEndEventHandler(object sender, ThreadEndEvent e); - public class ProcessEvent { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private readonly OracleConnection _connectionTpc; - private readonly CCSEventRecord _mCcsEventRecord; - - private EOSEventRecord _eosEventRecord; - private readonly string _traceConnectionString; - private OracleTransaction _trx; - - public ProcessEvent(CCSEventRecord eventRecord, OracleConnection conn, string traceConnection) - { - _mCcsEventRecord = eventRecord; - _connectionTpc = conn; - _traceConnectionString = traceConnection; - } - - public event ThreadEndEventHandler ThreadFinish; - - public void Run() + public void Run(CCSEventRecord ccsEventRecord, OracleConnection conn, string traceConnection) { var sendMail = false; + EOSEventRecord eosEventRecord = null; + + // Being Transaction + OracleTransaction trx = conn.BeginTransaction(); try { - var fdrid = GetFdrid(_mCcsEventRecord.Meter); + var fdrid = GetFdrid(conn, ccsEventRecord.Meter); if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理 { - if (CcsMain.Instance.ProcessingFdr.Contains(fdrid)) + if (CcsMain.Instance.ContainProcessingFdr(fdrid)) { - CcsMain.Instance.WaitingCases.Add(new KeyValuePair<string, int>(_mCcsEventRecord.CcsId, fdrid)); + CcsMain.Instance.AddWaitingCases(ccsEventRecord.CcsId, fdrid); return; } else - CcsMain.Instance.ProcessingFdr.Add(fdrid); //將要處理的案件的饋線別加入處理中饋線集合 + CcsMain.Instance.AddProcessingFdr(fdrid); //將要處理的案件的饋線別加入處理中饋線集合 } - /* - int TraceCount = this.getTraceCount(m_CCSRecord.CcsId); - bool TraceError = false; //追蹤次數超過3次,改為非A類不追蹤合併 - - switch (TraceCount) + eosEventRecord = InitialEventRecord(conn, trx, ccsEventRecord); + if (eosEventRecord != null) { - 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; - } - */ - if (InitialEventRecord(_mCcsEventRecord.CcsId)) - { - var mLeach = new Leach(_connectionTpc, _trx, _traceConnectionString); // 案件過濾與合併 + var mLeach = new Leach(conn, trx, GlobalVariable.TraceConnectionString); // 案件過濾與合併 Logger.Info("過濾案件..."); - var returnStatus = mLeach.LeachCase(_eosEventRecord); + var returnStatus = mLeach.LeachCase(eosEventRecord); switch (returnStatus) { case GlobalVariable.Success: Logger.Info("案件過濾完畢...."); - Process(GlobalVariable.Success); + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.Success); break; case GlobalVariable.NoMeter: Logger.Info("案件過濾完畢,用戶無電號...."); - _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; - Process(GlobalVariable.NoMeter); + eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); break; case GlobalVariable.SameCustomer: Logger.Info("相同用戶重複來電...."); - ProcessSameCustomer(_mCcsEventRecord, _eosEventRecord); + ProcessSameCustomer(conn, trx, ccsEventRecord, eosEventRecord); break; case GlobalVariable.NoSupplyElc: Logger.Warn("該饋線未供電,無法作事故案件追蹤合併...."); - _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; - Process(GlobalVariable.NoMeter); + eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); break; case GlobalVariable.NoSxfmr: Logger.Warn("該案件無變壓器...."); - _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; - Process(GlobalVariable.NoMeter); + eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); break; case GlobalVariable.CaseTypeChanged: Logger.Info("變更案件狀態...."); - Process(GlobalVariable.CaseTypeChanged); + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.CaseTypeChanged); break; case GlobalVariable.TraceFailure: Logger.Error("故障追蹤錯誤,以一般無電號案件方式受理...."); - _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; - Process(GlobalVariable.NoMeter); + eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); break; default: - var traceCount = GetTraceCount(_mCcsEventRecord.CcsId); + var traceCount = GetTraceCount(conn, trx, ccsEventRecord.CcsId); if (traceCount < 2) { - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); if (returnStatus == GlobalVariable.CaseTransfer) Logger.Error("案件已移轉,此事故案件暫不被受理...."); @@ -140,166 +105,237 @@ Logger.Error("發生非預期錯誤,此事故案件暫不被受理...."); if (traceCount == 0) - UpdateTraceCount(_mCcsEventRecord.CcsId, true); + UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, true); else - UpdateTraceCount(_mCcsEventRecord.CcsId, false); + UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, false); } else { - UpdateTraceCount(_mCcsEventRecord.CcsId, false); + UpdateTraceCount(conn, trx, ccsEventRecord.CcsId, false); if (returnStatus == GlobalVariable.TraceCounts3) - _eosEventRecord.Note = _eosEventRecord.Note+ "(本案用戶供電資料追蹤失敗)"; + eosEventRecord.Note = eosEventRecord.Note+ "(本案用戶供電資料追蹤失敗)"; Logger.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理...."); - _eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; - Process(GlobalVariable.NoMeter); + eosEventRecord.TraceFinish = GlobalVariable.TraceFinish; + Process(conn, trx, ccsEventRecord, eosEventRecord, GlobalVariable.NoMeter); 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 (fdrid != 0) - CcsMain.Instance.ProcessingFdr.Remove(fdrid); //將處理完的案件的饋線別從處理中饋線集合中移除 + CcsMain.Instance.RemoveProcessingFdr(fdrid); //將處理完的案件的饋線別從處理中饋線集合中移除 } catch (Exception e) { - Logger.Error(e, e.Message + ". CCSID = " + _mCcsEventRecord.CcsId); + Logger.Error(e, e.Message + ". CCSID = " + ccsEventRecord.CcsId); - if (_trx != null) + if (trx != null) { - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); } - if (_eosEventRecord != null && _eosEventRecord.FdrId!= 0) - CcsMain.Instance.ProcessingFdr.Remove(_eosEventRecord.FdrId); //將處理完的案件的饋線別從處理中饋線集合中移除 + if (eosEventRecord != null && eosEventRecord.FdrId!= 0) + CcsMain.Instance.RemoveProcessingFdr(eosEventRecord.FdrId); //將處理完的案件的饋線別從處理中饋線集合中移除 //throw e; } finally { - CcsMain.Instance.ProcessingCases.Remove(_mCcsEventRecord.CcsId); - OnThreadFinish(new ThreadEndEvent(_connectionTpc)); + CcsMain.Instance.RemoveProcessingCases(ccsEventRecord.CcsId); + // OnThreadFinish(new ThreadEndEvent(_connectionTpc)); } if (sendMail) - new MailService(_connectionTpc).SendMail(_mCcsEventRecord.CcsId); + { + var mailService = new MailService(); + mailService.InitialSmtpClient(conn); + mailService.SendMail(ccsEventRecord.CcsId); + } } - private void Process(int kind) + 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; + } + finally + { + CcsMain.Instance.RemoveProcessingCases(ccsEventRecord.CcsId); + // OnThreadFinish(new ThreadEndEvent(_connectionTpc)); + } + + if (sendMail) + { + var mailService = new MailService(); + mailService.InitialSmtpClient(conn); + mailService.SendMail(ccsEventRecord.CcsId); + } + } + + private void Process(OracleConnection conn, OracleTransaction trx, + CCSEventRecord ccsEventRecord, EOSEventRecord eosEventRecord, int kind) { var finishEvent = new FinishEvent(); try { - if (finishEvent.Finish(kind, _eosEventRecord, _connectionTpc, _trx)) + if (finishEvent.Finish(conn, trx, eosEventRecord, kind)) { Logger.Info("OMS資料更新成功!"); - if (UpdateCcsData(_eosEventRecord, _mCcsEventRecord, (int) CCSCaseState.WaitForDespatch)) + if (UpdateCcsData(conn, trx, ccsEventRecord, eosEventRecord, (int)CCSCaseState.WaitForDespatch)) { Logger.Info("CCS資料更新成功!"); } else { - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); Logger.Error("CCS資料更新程序發生錯誤!"); return; } // 須等全部動作都正確做完才可作commit的動作 - _trx.Commit(); - _trx.Dispose(); - AlarmData.Instance.Alarm(_connectionTpc, _trx, _eosEventRecord.AcceptNum, _eosEventRecord.Dept); + trx.Commit(); + trx.Dispose(); + AlarmData.Instance.Alarm(conn, trx, eosEventRecord.AcceptNum, eosEventRecord.Dept); } else { // 有錯誤需要RollBack - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); - ; + trx.Dispose(); Logger.Error("OMS資料更新程序發生錯誤!"); } Logger.Info("CCS 案件受理程序結束."); @@ -311,12 +347,7 @@ } } - protected virtual void OnThreadFinish(ThreadEndEvent e) - { - ThreadFinish?.Invoke(this, e); - } - - private bool UpdateCcsData(EOSEventRecord eosEventRecord, CCSEventRecord ccsEventRecord, int caseStatus) + private bool UpdateCcsData(OracleConnection conn, OracleTransaction trx, CCSEventRecord ccsEventRecord, EOSEventRecord eosEventRecord, int caseStatus) { Logger.Info("進行CCS資料更新程序..."); var ccsEventQuery = new CCSEventQuery(); @@ -334,23 +365,23 @@ // 若母案件已派工,需一併紀錄預計復電時間等資訊 if (eosEventRecord.ParentId!= 0) { - status = GetRealCaseStatus(eosEventRecord.ParentId) == (int) CCSCaseState.WaitForSponsor + status = GetRealCaseStatus(conn, trx, eosEventRecord.ParentId) == (int) CCSCaseState.WaitForSponsor ? (int) CCSCaseState.EventDespatched : (int) CCSCaseState.WaitForDespatch; if (status == (int) CCSCaseState.EventDespatched) { - SetDespatchInfo(eosEventRecord.ParentId, ccsEventQuery); + SetDespatchInfo(conn, trx, eosEventRecord.ParentId, ccsEventQuery); } } // 若此案件為專案案件升級為母案件,則必須判斷原先案件是否已經派工 if ((ccsEventRecord.ImportCase == GlobalVariable.IsImportCase) && eosEventRecord.IsDespatched) { status = (int) CCSCaseState.EventDespatched; - SetDespatchInfo(eosEventRecord.CaseId, ccsEventQuery); + SetDespatchInfo(conn, trx, eosEventRecord.CaseId, ccsEventQuery); } ccsEventQuery.CaseStatus = status; // 更新CCS.CCSEventQuery - if (!ccsEventQuery.Update(_connectionTpc, _trx)) + if (!ccsEventQuery.Update(conn, trx)) { Logger.Error("更新ccs.eventquery失敗!"); return false; @@ -361,7 +392,7 @@ numberContrast.SetCaseId(eosEventRecord.CaseId); numberContrast.SetCcsid(ccsEventRecord.CcsId); // 更新CCS.Num_Contrast - if (!numberContrast.Update(_connectionTpc, _trx)) + if (!numberContrast.Update(conn, trx)) { Logger.Error("更新ccs.num_contrast失敗!"); return false; @@ -370,83 +401,75 @@ return true; } - private bool InitialEventRecord(string ccsid) + private EOSEventRecord InitialEventRecord(OracleConnection conn, OracleTransaction trx, CCSEventRecord ccsEventRecord) { - var initialData = new InitialEventData(_connectionTpc); + var initialData = new InitialEventData(conn); var mContrast = new NumberContrast(); - DeptContrast deptContrast = null; - // Being Transaction - _trx = _connectionTpc.BeginTransaction(); - - deptContrast = new DeptContrast(_connectionTpc, _trx); - _eosEventRecord = new EOSEventRecord(initialData.GetNewCaseId(), _connectionTpc, _trx) + EOSEventRecord eosEventRecord = new EOSEventRecord(initialData.GetNewCaseId(), conn, trx) { AcceptNum = initialData.GetNewAcceptNum() }; - mContrast.SetAcceptNum(_eosEventRecord.AcceptNum); - mContrast.SetCaseId(_eosEventRecord.CaseId); - mContrast.SetCcsid(_mCcsEventRecord.CcsId); + mContrast.SetAcceptNum(eosEventRecord.AcceptNum); + mContrast.SetCaseId(eosEventRecord.CaseId); + mContrast.SetCcsid(ccsEventRecord.CcsId); - if (!mContrast.Insert(_connectionTpc, _trx)) + if (!mContrast.Insert(conn, trx)) { Logger.Error("初始化寫入CCS.Num_Contrast時發生錯誤!"); - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - return false; + return null; } // 設定用戶姓名 - _eosEventRecord.Name = _mCcsEventRecord.CustomerName; + eosEventRecord.Name = ccsEventRecord.CustomerName; - if (_mCcsEventRecord.Meter != null && _mCcsEventRecord.Meter.Length != 0) + if (!string.IsNullOrEmpty(ccsEventRecord.Meter)) { // 需先找出部門代號,再找到該部門屬於哪一個巡修單位 - _eosEventRecord.Meter = _mCcsEventRecord.Meter; - var tmp = deptContrast.getDept_Code(_mCcsEventRecord.Meter); + eosEventRecord.Meter = ccsEventRecord.Meter; + var tmp = DeptContrast.Instance.getDept_Code(ccsEventRecord.Meter); - if (tmp == -1) - _eosEventRecord.Dept = FindoutDeptByAddr(_mCcsEventRecord, _trx); - else - _eosEventRecord.Dept = tmp; + eosEventRecord.Dept = tmp == -1 ? FindoutDeptByAddr(trx, ccsEventRecord) : tmp; - _eosEventRecord.FdrId = GetFdrid(_mCcsEventRecord.Meter); + eosEventRecord.FdrId = GetFdrid(conn, ccsEventRecord.Meter); } else { // 當無用戶電號時,所找出的部門別不需再去找出屬於哪一個巡修股(findoutDeptByAddr會直接找到相對應的巡修股) - var dept = FindoutDeptByAddr(_mCcsEventRecord, _trx); - _eosEventRecord.Dept = dept; + var dept = FindoutDeptByAddr(trx, ccsEventRecord); + eosEventRecord.Dept = dept; } // 設定用戶電話號碼 - if (_mCcsEventRecord.CustomerTel != null) + if (ccsEventRecord.CustomerTel != null) { - _eosEventRecord.Tel = _mCcsEventRecord.CustomerTel; + eosEventRecord.Tel = ccsEventRecord.CustomerTel; } // 檢查並設定用戶地址 - var mAddr = _mCcsEventRecord.AddressCity + _mCcsEventRecord.AddressTown + _mCcsEventRecord.AddressRoad + - _mCcsEventRecord.AddressOther; + var mAddr = ccsEventRecord.AddressCity + ccsEventRecord.AddressTown + ccsEventRecord.AddressRoad + + ccsEventRecord.AddressOther; if (mAddr.Trim().Length == 0) { Logger.Error("CCS 案件受理程序初始化失敗...地址為空白"); - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - return false; + return null; } - _eosEventRecord.Addr = mAddr; + eosEventRecord.Addr = mAddr; // 設定事故原因 - _eosEventRecord.Brief = TransferEventBrief(_mCcsEventRecord.EventBrief); + eosEventRecord.Brief = TransferEventBrief(ccsEventRecord.EventBrief); try { var encoding = new ASCIIEncoding(); - var source = encoding.GetBytes(_eosEventRecord.Brief); + var source = encoding.GetBytes(eosEventRecord.Brief); if (source.Length > 24) { @@ -457,54 +480,54 @@ } var enc = Encoding.ASCII; - _eosEventRecord.Brief = enc.GetString(dest); + eosEventRecord.Brief = enc.GetString(dest); source = dest = null; } } catch (Exception) { - _eosEventRecord.Brief = "其他"; + eosEventRecord.Brief = "其他"; } - if (_mCcsEventRecord.CcsId.StartsWith("A")) - _eosEventRecord.Log = "APP"; - else if (_mCcsEventRecord.CcsId.StartsWith("W")) - _eosEventRecord.Log = "WEB"; + if (ccsEventRecord.CcsId.StartsWith("A")) + eosEventRecord.Log = "APP"; + else if (ccsEventRecord.CcsId.StartsWith("W")) + eosEventRecord.Log = "WEB"; else - _eosEventRecord.Log = "CCS"; + eosEventRecord.Log = "CCS"; - _eosEventRecord.AcceptDate = _mCcsEventRecord.AcceptTime; + eosEventRecord.AcceptDate = ccsEventRecord.AcceptTime; // 設定用戶種類 - if (_mCcsEventRecord.ImportCase == GlobalVariable.IsImportCase) + if (ccsEventRecord.ImportCase == GlobalVariable.IsImportCase) { - _eosEventRecord.ImportCase = GlobalVariable.IsImportCase; - _eosEventRecord.Level = GlobalVariable.ALevel; // default set A level + eosEventRecord.ImportCase = GlobalVariable.IsImportCase; + eosEventRecord.Level = GlobalVariable.ALevel; // default set A level } else { - _eosEventRecord.ImportCase = GlobalVariable.NotImportCase; - _eosEventRecord.Level = GlobalVariable.NoLevel; + eosEventRecord.ImportCase = GlobalVariable.NotImportCase; + eosEventRecord.Level = GlobalVariable.NoLevel; } // 檢查字串中有無特殊字元' ,若有則取代為" - if (_mCcsEventRecord.Note != null) - _eosEventRecord.Note = _mCcsEventRecord.Note.Replace('\'', '\"'); + if (ccsEventRecord.Note != null) + eosEventRecord.Note = ccsEventRecord.Note.Replace('\'', '\"'); // 設定回覆姓名及電話 - if (_mCcsEventRecord.RecallName != null) + if (ccsEventRecord.RecallName != null) { - _eosEventRecord.IsReCall = GlobalVariable.IsReCall; - _eosEventRecord.ReCallName = _mCcsEventRecord.RecallName.Replace('\'', '\"'); - _eosEventRecord.ReCallTel = _mCcsEventRecord.RecallTel; + eosEventRecord.IsReCall = GlobalVariable.IsReCall; + eosEventRecord.ReCallName = ccsEventRecord.RecallName.Replace('\'', '\"'); + eosEventRecord.ReCallTel = ccsEventRecord.RecallTel; } else { - _eosEventRecord.IsReCall = GlobalVariable.NotReCall; + eosEventRecord.IsReCall = GlobalVariable.NotReCall; } Logger.Info("初始化EOS.EVENTRECORD成功!"); - return true; + return eosEventRecord; } //private bool initialCCSInfo(CCS.Object.CCSEventQuery m_EventQuery, CCS.Object.NumberContrast m_Contrast) @@ -523,11 +546,11 @@ // return true; //} - private void CheckCaseAlreadyExits(CCSEventQuery ccsEventQuery) + private void CheckCaseAlreadyExits(OracleConnection conn, OracleTransaction trx, CCSEventQuery ccsEventQuery) { var sqlStmt = "select ccsid from ccs.eventquery where ccsid='" + ccsEventQuery.CcsId + "'"; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn, trx); var reader = command.ExecuteReader(); try @@ -552,7 +575,7 @@ } } - private int FindoutDeptByAddr(CCSEventRecord ccsEventRecord, OracleTransaction trx) + private int FindoutDeptByAddr(OracleTransaction trx, CCSEventRecord ccsEventRecord) { return AddrContrast.Instance.FindDeptId(ccsEventRecord.AddressCity, ccsEventRecord.AddressTown, ccsEventRecord.AddressRoad); } @@ -575,12 +598,12 @@ return GlobalVariable.CcsCodelist.GetKeyId(GlobalVariable.CcsDept, deptCode); } - private int GetRealCaseStatus(int parentId) + private int GetRealCaseStatus(OracleConnection conn, OracleTransaction trx, int parentId) { var status = (int) CCSCaseState.WaitForDespatch; var sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + parentId; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn, trx); var reader = command.ExecuteReader(); try @@ -603,17 +626,17 @@ return status; } - private void SetDespatchInfo(int caseId, CCSEventQuery ccsEventQry) + private void SetDespatchInfo(OracleConnection conn, OracleTransaction trx, int caseId, CCSEventQuery ccsEventQry) { - var sqlStmt = "SELECT DESPATCHTIME,ASSUMEFIXTIME,ASSUMEDTIME_NTH,DELAYTIME,REASON,EVENTLOCATION FROM EOS.EVENTDESPATCH WHERE CASEID=" - + caseId; + var sqlStmt = "SELECT DESPATCHTIME,ASSUMEFIXTIME,ASSUMEDTIME_NTH,DELAYTIME,REASON,EVENTLOCATION " + + "FROM EOS.EVENTDESPATCH WHERE CASEID=" + caseId; OracleCommand command = null; OracleDataReader reader = null; try { - command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + command = new OracleCommand(sqlStmt, conn, trx); reader = command.ExecuteReader(); if (reader.Read()) @@ -639,13 +662,13 @@ } } - private void ProcessSameCustomer(CCSEventRecord ccsEventRecord, EOSEventRecord eosEventRec) + private void ProcessSameCustomer(OracleConnection conn, OracleTransaction trx, CCSEventRecord ccsEventRecord, EOSEventRecord eosEventRec) { Logger.Info("處理相同用戶重複來電..."); StringBuilder note = null; - var sqlStmt = "select note from eos.eventrecord where caseid = " + eosEventRec.TmpCaseId; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var sqlStmt = "SELECT NOTE FROM EOS.EVENTRECORD WHERE CASEID = " + eosEventRec.TmpCaseId; + var command = new OracleCommand(sqlStmt, conn, trx); var reader = command.ExecuteReader(); try @@ -674,9 +697,9 @@ // 判斷重複來電的用戶最初成立的案件是否是由CCS受理 var acceptByCcs = false; - var sqlStmt1 = "select count(*) as count from ccs.num_contrast c,ccs.eventquery q where c.ccsid=q.ccsid and caseid=" + var sqlStmt1 = "SELECT COUNT(*) AS COUNT FROM CCS.NUM_CONTRAST C,CCS.EVENTQUERY Q WHERE C.CCSID=Q.CCSID AND CASEID=" + eosEventRec.TmpCaseId; - var command1 = new OracleCommand(sqlStmt1, _connectionTpc, _trx); + var command1 = new OracleCommand(sqlStmt1, conn, trx); var reader1 = command1.ExecuteReader(); try @@ -725,12 +748,27 @@ try { - var sqlStmt2 = "SELECT 1,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME,TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid=" - + eosEventRec.TmpCaseId + " union " - +"SELECT 2,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME,TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid= (select parentid from eos.mergecase where caseid=" + var sqlStmt2 = "SELECT 1,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME," + + "TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME," + + "TO_CHAR(S.RECONDITIONTIME,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME," + + "E.CASESTATUS,S.HANDLING,TO_CHAR(D.ASSUMEFIXTIME,'YYYY/MM/DD HH24:MI:SS') AS ASSUMEFIXTIME," + + "TO_CHAR(D.ASSUMEDTIME_NTH,'YYYY/MM/DD HH24:MI:SS') AS ASSUMEDTIME_NTH," + + "D.DELAYTIME,D.REASON,D.EVENTLOCATION " + + "FROM EOS.EVENTRECORD R,EOS.EVENTS E,EOS.EVENTDESPATCH D,EOS.EVENTSPONSOR S " + + "WHERE (R.CASEID=E.CASEID) AND (R.CASEID=D.CASEID(+)) AND (R.CASEID=S.CASEID(+)) AND R.CASEID=" + + eosEventRec.TmpCaseId + " UNION " + + "SELECT 2,TO_CHAR(R.ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') AS ACCEPTTIME," + + "TO_CHAR(D.DESPATCHTIME,'YYYY/MM/DD HH24:MI:SS') AS DESPATCHTIME," + + "TO_CHAR(S.RECONDITIONTIME,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME," + + "E.CASESTATUS,S.HANDLING,TO_CHAR(D.ASSUMEFIXTIME,'YYYY/MM/DD HH24:MI:SS') AS ASSUMEFIXTIME," + + "TO_CHAR(D.ASSUMEDTIME_NTH,'YYYY/MM/DD HH24:MI:SS') AS ASSUMEDTIME_NTH," + + "D.DELAYTIME,D.REASON,D.EVENTLOCATION " + + "FROM EOS.EVENTRECORD R,EOS.EVENTS E,EOS.EVENTDESPATCH D,EOS.EVENTSPONSOR S " + + "WHERE (R.CASEID=E.CASEID) AND (R.CASEID=D.CASEID(+)) AND (R.CASEID=S.CASEID(+)) AND R.CASEID= " + + "(SELECT PARENTID FROM EOS.MERGECASE WHERE CASEID=" + eosEventRec.TmpCaseId+ ")"; - command2 = new OracleCommand(sqlStmt2, _connectionTpc, _trx); + command2 = new OracleCommand(sqlStmt2, conn, trx); reader2 = command2.ExecuteReader(); while (reader2.Read()) @@ -782,22 +820,22 @@ } var updEosEventRecord = "UPDATE EOS.EVENTRECORD SET NOTE = '" + TrimToLimit(note.ToString(), 127) - + "' WHERE CASEID = " + _eosEventRecord.TmpCaseId; + + "' WHERE CASEID = " + eosEventRec.TmpCaseId; var updCcsNumContrast = "UPDATE CCS.NUM_CONTRAST SET(acceptnum,caseid) = (SELECT acceptnum," + eosEventRec.TmpCaseId + " FROM EOS.EVENTRECORD WHERE CASEID = " + eosEventRec.TmpCaseId + ") where ccsid='" + ccsEventRecord.CcsId + "'"; - var exeCommand = new OracleCommand(updCcsEventQuery, _connectionTpc, _trx); + var exeCommand = new OracleCommand(updCcsEventQuery, conn, trx); // 將用戶重複來電案件資料寫回CCS.CCSEventQuery if (exeCommand.ExecuteNonQuery() <= 0) { exeCommand.Dispose(); - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); Logger.Error("Fail in write back to ccs.eventquery"); return; } @@ -808,10 +846,10 @@ { exeCommand.Dispose(); - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); Logger.Error("Fail in update eos.eventquery"); return; } @@ -821,17 +859,17 @@ if (exeCommand.ExecuteNonQuery() <= 0) { exeCommand.Dispose(); - if (_trx.Connection.State == ConnectionState.Open) - _trx.Rollback(); + if (trx.Connection.State == ConnectionState.Open) + trx.Rollback(); - _trx.Dispose(); + trx.Dispose(); Logger.Error("Fail in insert into ccs.num_contrast"); return; } exeCommand.Dispose(); - _trx.Commit(); - _trx.Dispose(); + trx.Commit(); + trx.Dispose(); Logger.Info("CCS 案件受理程序結束"); } @@ -857,11 +895,11 @@ } } - private int GetFieldLength(string owner, string tableName, string fieldName) + private int GetFieldLength(OracleConnection conn, OracleTransaction trx, string owner, string tableName, string fieldName) { var sqlStmt = "SELECT DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE OWNER = '" + owner + "' AND TABLE_NAME = '" + tableName + "' AND COLUMN_NAME = '" + fieldName + "'"; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn, trx); var reader = command.ExecuteReader(); var maxLength = -1; @@ -883,14 +921,13 @@ return maxLength; } - private int GetFdrid(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, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn); var reader = command.ExecuteReader(); var tpclid = ""; var fdrid = 0; - var group = ""; try { if (reader.Read()) @@ -901,17 +938,19 @@ 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 = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + + "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = " + + "(SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + tpclid + "' AND GROUP1='" + group + "' AND ROWNUM < 2)"; } else { sqlStmt = - "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + + "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = " + + "(SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + tpclid + "' AND ROWNUM < 2)"; } @@ -924,7 +963,8 @@ else { sqlStmt = - "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 107 AND UFID = (SELECT UFID FROM BASEDB.HICUSTOMER WHERE OWNERTPCLID = '" + + "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 107 AND UFID = " + + "(SELECT UFID FROM BASEDB.HICUSTOMER WHERE OWNERTPCLID = '" + tpclid + "' AND ROWNUM < 2)"; command.CommandText = sqlStmt; @@ -947,10 +987,10 @@ return fdrid; } - private int GetTraceCount(string ccsid) + private int GetTraceCount(OracleConnection conn, OracleTransaction trx, string ccsid) { var sqlStmt = "SELECT TRACECOUNT FROM CCS.TRACECOUNTS WHERE CCSID = '" + ccsid + "'"; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn, trx); var reader = command.ExecuteReader(); var count = 0; @@ -972,7 +1012,7 @@ return count; } - private bool UpdateTraceCount(string ccsid, bool isNew) + private bool UpdateTraceCount(OracleConnection conn, OracleTransaction trx, string ccsid, bool isNew) { string sqlStmt; @@ -980,7 +1020,7 @@ sqlStmt = "INSERT INTO CCS.TRACECOUNTS (CCSID,TRACECOUNT) VALUES ('" + ccsid + "',1)"; else sqlStmt = "UPDATE CCS.TRACECOUNTS SET TRACECOUNT = TRACECOUNT + 1 WHERE CCSID = '" + ccsid + "'"; - var command = new OracleCommand(sqlStmt, _connectionTpc, _trx); + var command = new OracleCommand(sqlStmt, conn, trx); try { -- Gitblit v0.0.0-SNAPSHOT