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 ++++++++++++++++++++++++++++++----------------------
CCSTrace/CCS/FinishEvent.cs | 5
CCSTrace/CCS/CCSMain.cs | 5 +
CCSTrace/CCSTrace.csproj | 2
CCSTrace/CCS/Function/Leach.cs | 15 +-
5 files changed, 165 insertions(+), 123 deletions(-)
diff --git a/CCSTrace/CCS/CCSMain.cs b/CCSTrace/CCS/CCSMain.cs
index 783c7e1..81b520d 100644
--- a/CCSTrace/CCS/CCSMain.cs
+++ b/CCSTrace/CCS/CCSMain.cs
@@ -77,6 +77,7 @@
AddrContrast.Instance.Initialize(_mainConn);
AlarmData.Instance.Initialize(_mainConn);
+ DeptContrast.Instance.Initialize(_mainConn);
var stpStartInfo = new STPStartInfo
{
@@ -337,6 +338,10 @@
{
Logger.Error(e, e.Message);
}
+ finally
+ {
+ conn?.Close();
+ }
Logger.Debug("Leave ProcessCase");
}
diff --git a/CCSTrace/CCS/FinishEvent.cs b/CCSTrace/CCS/FinishEvent.cs
index 5fd6565..81eaef5 100644
--- a/CCSTrace/CCS/FinishEvent.cs
+++ b/CCSTrace/CCS/FinishEvent.cs
@@ -12,11 +12,8 @@
private int _originCaseStatus;
- public bool Finish(OracleConnection conn1, OracleTransaction trx1, EOSEventRecord eosEventRecord, int mKind)
+ public bool Finish(OracleConnection conn, OracleTransaction trx, EOSEventRecord eosEventRecord, int mKind)
{
- var conn = conn1;
- var trx = trx1;
-
Logger.Info("進行OMS資料更新程序...");
if (eosEventRecord.ParentId == 0)
{
diff --git a/CCSTrace/CCS/Function/Leach.cs b/CCSTrace/CCS/Function/Leach.cs
index ce7ce16..fa54f4e 100644
--- a/CCSTrace/CCS/Function/Leach.cs
+++ b/CCSTrace/CCS/Function/Leach.cs
@@ -2,6 +2,7 @@
using System.Data.OracleClient;
using CCSTrace.CCS.Domain;
+using CCSTrace.CCS.Object;
using NLog;
namespace CCSTrace.CCS.Function
@@ -22,7 +23,7 @@
_traceConnectionString = traceConnection;
}
- public int LeachCase(Object.EOSEventRecord mNewRec)
+ public int LeachCase(EOSEventRecord mNewRec)
{
switch (SameCase(mNewRec))
{
@@ -51,7 +52,7 @@
return _mergeCase.GetOldEquipment();
}
- private int SameCase(Object.EOSEventRecord mNewRec)
+ private int SameCase(EOSEventRecord mNewRec)
{
string sqlStmt = "SELECT R.ACCEPTNUM,R.CASEID as CASEID,R.IMPORTCASE as IMPORTCASE,E.CASETYPE as CASETYPE FROM EOS.EVENTRECORD R,"
+ "EOS.EVENTS E WHERE ";
@@ -264,7 +265,7 @@
return status;
}
- private int Judge(Object.EOSEventRecord mNewRec, bool changeCaseType)
+ private int Judge(EOSEventRecord mNewRec, bool changeCaseType)
{
int mResult = GlobalVariable.FailureByDb;
@@ -367,7 +368,7 @@
return mResult;
}
- private int GetEquipment(Object.EOSEventRecord mNewRec)
+ private int GetEquipment(EOSEventRecord mNewRec)
{
string temp;
string mOwnerTpclid;
@@ -417,7 +418,7 @@
}
}
- private int GetSxfmr(string mTpclid, string mGroup, Object.EOSEventRecord mNewRec)
+ private int GetSxfmr(string mTpclid, string mGroup, EOSEventRecord mNewRec)
{
string sqlStmt;
int mStatus = GlobalVariable.FailureByDb;
@@ -460,7 +461,7 @@
return mStatus;
}
- private int GetHicustomer(string mTpclid, string mGroup, Object.EOSEventRecord mNewRec)
+ private int GetHicustomer(string mTpclid, string mGroup, EOSEventRecord mNewRec)
{
string sqlStmt;
@@ -502,7 +503,7 @@
}
}
- private void GetLocateEquipment(Object.EOSEventRecord mNewRec)
+ private void GetLocateEquipment(EOSEventRecord mNewRec)
{
var sqlStmt = "SELECT OWNERFSC as FSC,OWNERUFID as UFID,OWNERTPCLID as TPCLID FROM ";
switch (mNewRec.Fsc)
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 = " +
diff --git a/CCSTrace/CCSTrace.csproj b/CCSTrace/CCSTrace.csproj
index 34d5f6e..ef6b445 100644
--- a/CCSTrace/CCSTrace.csproj
+++ b/CCSTrace/CCSTrace.csproj
@@ -178,7 +178,7 @@
<Compile Include="CCS\Object\AlarmData.cs" />
<Compile Include="CCS\Object\CCSCodelist.cs" />
<Compile Include="CCS\Object\CCSEventRecord.cs" />
- <Compile Include="CCS\Object\Dept_Contrast.cs" />
+ <Compile Include="CCS\Object\DeptContrast.cs" />
<Compile Include="CCS\Object\EOSCodelist.cs" />
<Compile Include="CCS\Object\CCSEventQuery.cs" />
<Compile Include="CCS\Object\EOSEventRecord.cs" />
--
Gitblit v0.0.0-SNAPSHOT