From d4feb8da354b3f4a9c481d1751318751802384f5 Mon Sep 17 00:00:00 2001
From: ulysseskao <ulysseskao@gmail.com>
Date: Thu, 05 May 2016 10:20:39 +0800
Subject: [PATCH] use smartthreadpool
---
CCSTrace/CCS/ProcessEvent.cs | 261 ++++++++++++++++++++++++++++++----------------------
1 files changed, 150 insertions(+), 111 deletions(-)
diff --git a/CCSTrace/CCS/ProcessEvent.cs b/CCSTrace/CCS/ProcessEvent.cs
index 66b1e63..8e2935d 100644
--- a/CCSTrace/CCS/ProcessEvent.cs
+++ b/CCSTrace/CCS/ProcessEvent.cs
@@ -24,7 +24,7 @@
try
{
- var fdrid = GetFdrid(conn, trx, ccsEventRecord.Meter);
+ var fdrid = GetFdrid(conn, ccsEventRecord.Meter);
if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理
{
@@ -36,29 +36,6 @@
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)
@@ -144,82 +121,6 @@
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;
- */
}
}
@@ -239,6 +140,149 @@
}
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;
}
@@ -362,7 +406,6 @@
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()
@@ -389,14 +432,11 @@
{
// 需先找出部門代號,再找到該部門屬於哪一個巡修單位
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
{
@@ -881,14 +921,13 @@
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())
@@ -899,7 +938,7 @@
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 = " +
--
Gitblit v0.0.0-SNAPSHOT