From b0c18d369abd06075c83759b0e19823c2a11d716 Mon Sep 17 00:00:00 2001
From: ulysseskao <ulysseskao@gmail.com>
Date: Fri, 29 Apr 2016 18:45:41 +0800
Subject: [PATCH] update for new model
---
CCSTrace/CCS/EventAI/TraceSubject.cs | 695 +++++++++++++++++++++++++++++----------------------------
1 files changed, 356 insertions(+), 339 deletions(-)
diff --git a/CCSTrace/CCS/EventAI/TraceSubject.cs b/CCSTrace/CCS/EventAI/TraceSubject.cs
index 29f3acd..1f621b3 100644
--- a/CCSTrace/CCS/EventAI/TraceSubject.cs
+++ b/CCSTrace/CCS/EventAI/TraceSubject.cs
@@ -1,99 +1,95 @@
using System;
-using System.Data;
-using System.Configuration;
-using System.Web;
-using System.Web.Security;
-using System.Web.UI;
-using System.Web.UI.HtmlControls;
-using System.Web.UI.WebControls;
-using System.Web.UI.WebControls.WebParts;
using System.Collections;
-using TRACEROBJECTLib;
using System.Data.OracleClient;
+using TRACEROBJECTLib;
namespace CCSTrace.CCS.EventAI
{
public class TraceSubject
{
- private String m_dbConnectionString;
- static bool IsNewCase;
- static ArrayList m_LinkList; // store the switch of the new case path
- static TraceEngine m_tEngine;
- static Hashtable m_TreeMap; // store the switch of the old case path
- static int s_Fsc;
- static int s_Ufid;
- private RecordLog _Plogger;
- private ArrayList m_Tmp = new ArrayList();
- private NetworkContext m_pContext;
+ private string _mDbConnectionString;
+ private static bool _isNewCase;
+ private static ArrayList _mLinkList; // store the switch of the new case path
+ private static TraceEngine _mTEngine;
+ private static Hashtable _mTreeMap; // store the switch of the old case path
+ private static int _sFsc;
+ private static int _sUfid;
+ private readonly RecordLog _plogger;
+ private readonly ArrayList _mTmp = new ArrayList();
+ private NetworkContext _mPContext;
- private OracleConnection _ConnectionTPC = null;
- private OracleTransaction _Transaction;
+ private readonly OracleConnection _connectionTpc;
+ private readonly OracleTransaction _transaction;
- public TraceSubject(OracleConnection _Conn, OracleTransaction _Trx, String traceConnectionString, RecordLog _Log)
+ public TraceSubject(OracleConnection conn, OracleTransaction trx, string traceConnectionString, RecordLog log)
{
- _ConnectionTPC = _Conn;
- _Transaction = _Trx;
- _Plogger = _Log;
- m_dbConnectionString = traceConnectionString;
-
- try
- {
- if (m_tEngine == null) {
- m_tEngine = new TraceEngine();
- }
- }
- catch (Exception ex) {
- _Plogger.Error(ex.Message);
- throw ex;
- }
- }
-
- public void discardEngine() {
- if (m_tEngine != null) {
- m_tEngine = null;
- }
- }
-
- public ArrayList getNewResult() {
- return m_LinkList;
- }
-
- public Hashtable getOldResult() {
- return m_TreeMap;
- }
-
- // for EOS(only get the reverse tree)
- public void startTrace(int Start_Fsc, int Start_Ufid, bool m_IsNew) {
- s_Fsc = Start_Fsc;
- s_Ufid = Start_Ufid;
- IsNewCase = m_IsNew;
- m_TreeMap = new Hashtable();
- m_LinkList = new ArrayList();
+ _connectionTpc = conn;
+ _transaction = trx;
+ _plogger = log;
+ _mDbConnectionString = traceConnectionString;
try
{
- this.setReverseTree(Trace(true));
+ if (_mTEngine == null)
+ {
+ _mTEngine = new TraceEngine();
+ }
}
- catch (Exception e) {
- _Plogger.Error(e.Message);
+ catch (Exception ex)
+ {
+ _plogger.Error(ex.Message);
+ throw ex;
+ }
+ }
+
+ public void DiscardEngine()
+ {
+ _mTEngine = null;
+ }
+
+ public ArrayList GetNewResult()
+ {
+ return _mLinkList;
+ }
+
+ public Hashtable GetOldResult()
+ {
+ return _mTreeMap;
+ }
+
+ // for EOS(only get the reverse tree)
+ public void StartTrace(int startFsc, int startUfid, bool mIsNew)
+ {
+ _sFsc = startFsc;
+ _sUfid = startUfid;
+ _isNewCase = mIsNew;
+ _mTreeMap = new Hashtable();
+ _mLinkList = new ArrayList();
+
+ try
+ {
+ SetReverseTree(Trace(true));
+ }
+ catch (Exception e)
+ {
+ _plogger.Error(e.Message);
Console.WriteLine(e.StackTrace);
throw e;
}
- }
+ }
- private bool getSwitchOn(int UFID) {
- String SqlStmt;
+ private bool GetSwitchOn(int ufid)
+ {
+ var sqlStmt = "SELECT M.OSTATUS as OSTATUS FROM (SELECT UFID,OSTATUS FROM BASEDB.CONNECTIVITY WHERE FSC = 114) M,"
+ + "BASEDB.SWITCH S WHERE M.UFID = S.UFID AND S.NSTATUS <> 0 AND M.UFID = " + ufid;
- SqlStmt = "SELECT M.OSTATUS as OSTATUS FROM (SELECT UFID,OSTATUS FROM BASEDB.CONNECTIVITY WHERE FSC = 114) M,"
- + "BASEDB.SWITCH S WHERE M.UFID = S.UFID AND S.NSTATUS <> 0 AND M.UFID = " + UFID;
-
- OracleCommand Command = null;
+ OracleCommand command = null;
OracleDataReader reader = null;
try
{
- Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);
- reader = Command.ExecuteReader();
+ command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
+ reader = command.ExecuteReader();
if (reader.Read())
{
@@ -104,32 +100,29 @@
}
catch (Exception e)
{
- _Plogger.Error(e.Message);
+ _plogger.Error(e.Message);
Console.WriteLine(e.StackTrace);
}
finally
{
- if (Command != null)
- Command.Dispose();
+ command?.Dispose();
- if (reader != null)
- reader.Close();
+ reader?.Close();
}
- return false;
- }
+ return false;
+ }
- private bool getJumperOn(int UFID) {
- String SqlStmt;
+ private bool GetJumperOn(int ufid)
+ {
+ var sqlStmt = "SELECT OSTATUS FROM BASEDB.CONNECTIVITY WHERE FSC = 109 AND UFID = " + ufid;
- SqlStmt = "SELECT OSTATUS FROM BASEDB.CONNECTIVITY WHERE FSC = 109 AND UFID = " + UFID;
-
- OracleCommand Command = null;
+ OracleCommand command = null;
OracleDataReader reader = null;
try
{
- Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);
- reader = Command.ExecuteReader();
+ command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
+ reader = command.ExecuteReader();
if (reader.Read())
{
@@ -140,13 +133,13 @@
}
catch (Exception e)
{
- _Plogger.Error(e.Message);
+ _plogger.Error(e.Message);
Console.WriteLine(e.StackTrace);
}
finally
{
- if (Command != null)
- Command.Dispose();
+ if (command != null)
+ command.Dispose();
if (reader != null)
reader.Close();
@@ -154,102 +147,108 @@
return false;
}
- private Hashtable TraceCounts = new Hashtable();
+ private readonly Hashtable _traceCounts = new Hashtable();
- private void setReverseTree(ResultTree tree) {
- int i = 0;
+ private void SetReverseTree(ResultTree tree)
+ {
+ int i = 0;
TreeIterator iti = null;
bool ostatus = true;
- if (tree != null) {
- i = 0;
- iti = tree.CreateTreeIterator();
- bool isNotEnd = true;
+ if (tree != null)
+ {
+ i = 0;
+ iti = tree.CreateTreeIterator();
+ bool isNotEnd = true;
- while (isNotEnd) {
-
- if (getTraceCount(iti.Value.ClassID, iti.Value.ObjectID) > 5)
+ while (isNotEnd)
+ {
+ if (GetTraceCount(iti.Value.ClassID, iti.Value.ObjectID) > 5)
throw new TraceLoopException("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + iti.Value.ClassID + "," + iti.Value.ObjectID + ")");
else
AddTraceCount(iti.Value.ClassID, iti.Value.ObjectID);
while (iti.IsLeaf == 0)
{
- TRACEROBJECTLib.TreeNode node = iti.Value;
+ TreeNode node = iti.Value;
if ((node.ClassID == 114) || (node.ClassID == 108) || (node.ClassID == 109))
{
- Equipment Equip = new Equipment(node.ClassID, node.ObjectID);
+ Equipment equip = new Equipment(node.ClassID, node.ObjectID);
- if (IsNewCase)
- m_LinkList.Add(Equip);
- else {
- m_TreeMap.Add(node.ObjectID, Equip);
- m_Tmp.Add(Equip);
- }
- i++;
-
-/* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
- throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
+ if (_isNewCase)
+ _mLinkList.Add(equip);
else
- AddTraceCount(node.ClassID, node.ObjectID);
-*/ }
+ {
+ _mTreeMap.Add(node.ObjectID, equip);
+ _mTmp.Add(equip);
+ }
+ i++;
+
+ /* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
+ throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
+ else
+ AddTraceCount(node.ClassID, node.ObjectID);
+ */
+ }
Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
- _Plogger.Info(node.ClassID + "----->" + node.ObjectID);
+ _plogger.Info(node.ClassID + "----->" + node.ObjectID);
- iti.MoveDescent((short) 0);
- }
+ iti.MoveDescent((short)0);
+ }
- // 當從breaker出來的導線不只一條時,breaker可能會不被add(因為breaker是leaf但其parent的DescentCount > 1,所以被忽略)
- /*
- * if ( ((com.origo.TraceModel.ITreeNode)iti.get_Value()).get_ClassID() == EOS.LocalVariable.Breaker ) {
+ // 當從breaker出來的導線不只一條時,breaker可能會不被add(因為breaker是leaf但其parent的DescentCount > 1,所以被忽略)
+ /*
+ * if ( ((com.origo.TraceModel.ITreeNode)iti.get_Value()).get_ClassID() == EOS.GlobalVariable.Breaker ) {
* com.origo.TraceModel.ITreeNode node = iti.get_Value(); Equipment Equip = new Equipment(node.get_ClassID(),node.get_ObjectID()); if (
* IsNewCase ) m_LinkList.add(i,Equip); else { m_TreeMap.put(new Integer(node.get_ObjectID()),Equip); m_Tmp.add(Equip); }
* System.out.println(node.get_ClassID() + "----->" + node.get_ObjectID()); System.out.println("Trace Finish...."); i++; break; }
*/
- if ((iti.Value).ClassID == CCS.LocalVariable.Breaker) {
- TRACEROBJECTLib.TreeNode node = iti.Value;
- Equipment Equip = new Equipment(node.ClassID, node.ObjectID);
+ if ((iti.Value).ClassID == GlobalVariable.Breaker)
+ {
+ TreeNode node = iti.Value;
+ Equipment equip = new Equipment(node.ClassID, node.ObjectID);
- if (IsNewCase)
- m_LinkList.Add(Equip);
- else
+ if (_isNewCase)
+ _mLinkList.Add(equip);
+ else
{
- m_TreeMap.Add(node.ObjectID, Equip);
- m_Tmp.Add(Equip);
- }
+ _mTreeMap.Add(node.ObjectID, equip);
+ _mTmp.Add(equip);
+ }
i++; //後面直接就FINISH,所以就不用判斷tracecount
- Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
- _Plogger.Info(node.ClassID + "----->" + node.ObjectID);
- Console.WriteLine("Trace Finish....");
- _Plogger.Info("Trace Finish....");
- break;
- }
- // 當追蹤到被切開的開關且該上一層設備只有該開關一個child)
- else if (iti.Value.ClassID == CCS.LocalVariable.Switch || iti.Value.ClassID == CCS.LocalVariable.Jumper ) {
- TRACEROBJECTLib.TreeNode node = iti.Value;
- iti.MoveAscent();
+ Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
+ _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+ Console.WriteLine("Trace Finish....");
+ _plogger.Info("Trace Finish....");
+ break;
+ }
+ // 當追蹤到被切開的開關且該上一層設備只有該開關一個child)
+ else if (iti.Value.ClassID == GlobalVariable.Switch || iti.Value.ClassID == GlobalVariable.Jumper)
+ {
+ TreeNode node = iti.Value;
+ iti.MoveAscent();
- Equipment Equip = new Equipment(node.ClassID, node.ObjectID);
+ Equipment equip = new Equipment(node.ClassID, node.ObjectID);
- if (isEndEquip(Equip))
+ if (IsEndEquip(equip))
{
- if (IsNewCase)
- m_LinkList.Add(Equip);
+ if (_isNewCase)
+ _mLinkList.Add(equip);
else
{
- m_TreeMap.Add(node.ObjectID, Equip);
- m_Tmp.Add(Equip);
+ _mTreeMap.Add(node.ObjectID, equip);
+ _mTmp.Add(equip);
}
i++; //後面直接就FINISH,所以就不用判斷tracecount
Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
- _Plogger.Info(node.ClassID + "----->" + node.ObjectID);
+ _plogger.Info(node.ClassID + "----->" + node.ObjectID);
Console.WriteLine("Trace Finish....");
- _Plogger.Info("Trace Finish....");
+ _plogger.Info("Trace Finish....");
break;
}
@@ -280,189 +279,210 @@
// _Plogger.Info("Trace Finish....");
// break;
//}
- }
+ }
else
- {
- TRACEROBJECTLib.TreeNode node = iti.Value;
+ {
+ TreeNode node = iti.Value;
iti.MoveAscent();
if (iti.DescentCount == 1)
- throw new Exception("追蹤到非開關類斷開之設備(Fsc = " + node.ClassID + ",Ufid = " + node.ObjectID);
+ throw new Exception("追蹤到非開關類斷開之設備(Fsc = " + node.ClassID + ",Ufid = " + node.ObjectID);
}
- for (int j = 1; j < iti.DescentCount; j++) {
- iti.MoveDescent((short) j);
+ for (int j = 1; j < iti.DescentCount; j++)
+ {
+ iti.MoveDescent((short)j);
- if (iti.IsLeaf == 1) {
- TRACEROBJECTLib.TreeNode node = iti.Value;
- Equipment Equip = new Equipment(node.ClassID, node.ObjectID);
+ if (iti.IsLeaf == 1)
+ {
+ TreeNode node = iti.Value;
+ Equipment equip = new Equipment(node.ClassID, node.ObjectID);
- switch (node.ClassID) {
- case 108:
- if (IsNewCase)
- m_LinkList.Add(Equip);
- else
- {
- m_TreeMap.Add(node.ObjectID, Equip);
- m_Tmp.Add(Equip);
- }
-
- Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
- _Plogger.Info(node.ClassID + "----->" + node.ObjectID);
- i++;
-
-/* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
- throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
- else
- AddTraceCount(node.ClassID, node.ObjectID);
-*/
- break;
- case 109:
- case 114:
- switch (node.ClassID)
- {
- case 114:
- ostatus = getSwitchOn(node.ObjectID);
- break;
- case 109:
- ostatus = getJumperOn(node.ObjectID);
- break;
- }
-
- // Only for switch because the breaker only has one node to descent
- if (!ostatus) {
- if (IsNewCase)
- m_LinkList.Add(Equip);
- else {
- m_TreeMap.Add(node.ObjectID, Equip);
- m_Tmp.Add(Equip);
- }
-
- Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
- _Plogger.Info(node.ClassID + "----->" + node.ObjectID);
- i++;
-
-/* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
- throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
+ switch (node.ClassID)
+ {
+ case 108:
+ if (_isNewCase)
+ _mLinkList.Add(equip);
else
- AddTraceCount(node.ClassID, node.ObjectID);
-*/
- }
- break;
- default:
- break;
- } // switch
+ {
+ _mTreeMap.Add(node.ObjectID, equip);
+ _mTmp.Add(equip);
+ }
- iti.MoveAscent();
- isNotEnd = false;
- } else {
- isNotEnd = true;
- break;
- }
- } // for
- } // while
- Console.WriteLine("Tree Node Count = " + i);
- _Plogger.Info("Tree Node Count = " + i);
- } else
- {
- Console.WriteLine("Tree is null");
- _Plogger.Info("Tree is null");
- throw new Exception("無法追蹤到任何設備,可能是該用戶所在變壓器設備連結性有問題。");
+ Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
+ _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+ i++;
+
+ /* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
+ throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
+ else
+ AddTraceCount(node.ClassID, node.ObjectID);
+ */
+ break;
+
+ case 109:
+ case 114:
+ switch (node.ClassID)
+ {
+ case 114:
+ ostatus = GetSwitchOn(node.ObjectID);
+ break;
+
+ case 109:
+ ostatus = GetJumperOn(node.ObjectID);
+ break;
+ }
+
+ // Only for switch because the breaker only has one node to descent
+ if (!ostatus)
+ {
+ if (_isNewCase)
+ _mLinkList.Add(equip);
+ else
+ {
+ _mTreeMap.Add(node.ObjectID, equip);
+ _mTmp.Add(equip);
+ }
+
+ Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
+ _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+ i++;
+
+ /* if (getTraceCount(node.ClassID, node.ObjectID) > 2)
+ throw new Exception("追蹤產生迴圈狀況。(Fsc,Ufid) = (" + node.ClassID + "," + node.ObjectID + ")");
+ else
+ AddTraceCount(node.ClassID, node.ObjectID);
+ */
+ }
+ break;
+
+ default:
+ break;
+ } // switch
+
+ iti.MoveAscent();
+ isNotEnd = false;
+ }
+ else
+ {
+ isNotEnd = true;
+ break;
+ }
+ } // for
+ } // while
+ Console.WriteLine("Tree Node Count = " + i);
+ _plogger.Info("Tree Node Count = " + i);
}
-
- }
-
- private ResultTree Trace(bool Reverse) {
- ResultTree tree = null;
-
- try {
- configTrace();
- _Plogger.Info("configTrace OK.");
- }
- catch (Exception e)
+ else
{
- _Plogger.Error(e.Message);
- Console.WriteLine(e.StackTrace);
- return tree;
- }
-
- try {
- tree = ModeTrace(Reverse);
- }
- catch (Exception e) {
- _Plogger.Error(e.Message);
- Console.WriteLine(e.StackTrace);
+ Console.WriteLine("Tree is null");
+ _plogger.Info("Tree is null");
+ throw new Exception("無法追蹤到任何設備,可能是該用戶所在變壓器設備連結性有問題。");
}
+ }
- return tree;
- }
-
- void configTrace() {
- if (m_dbConnectionString == null) {
- m_dbConnectionString = "basedb/basedb000@nntpc";
- }
- try {
- if (m_pContext == null) m_pContext = m_tEngine.teoCreateContext();
-
- if (m_pContext.IsConnected == 0) {
- m_pContext.Connect("", m_dbConnectionString);
- }
- }
- catch (Exception ex) {
- _Plogger.Error(ex.Message);
- }
- }
-
- private ResultTree ModeTrace(bool Reverse) {
- TravelContext tContext = new TravelContext();
- TravelStartCriterion sCriterion = new TravelStartCriterion();
- TravelTerminateCriterion eCriterion = new TravelTerminateCriterion();
-
- sCriterion.ClsID = (short) s_Fsc;
- sCriterion.ObjID = s_Ufid;
-
- if (Reverse) // 反向上追
- {
- sCriterion.StartMode = (TRAVELSTARTCRITERIONTYPE)(Convert.ToInt32(TRAVELSTARTCRITERIONTYPE.TRAVELBYNEGDIR) + Convert.ToInt32(TRAVELSTARTCRITERIONTYPE.TRAVELWITHFOLLOW));
-
- eCriterion.ClsID = (short)CCS.LocalVariable.Breaker;
- eCriterion.EndMode = TRAVELTERMCRITERIONTYPE.TRAVELTOTHISCLASS;
- } else // 順向追蹤
- {
- sCriterion.StartMode = TRAVELSTARTCRITERIONTYPE.TRAVELBYCURDIR;
-
- eCriterion.EndMode = TRAVELTERMCRITERIONTYPE.TRAVELTOTHISCLASS;
- }
-
- tContext.addCriterion(sCriterion);
- tContext.addCriterion(eCriterion);
-
- m_pContext.ResetContext();
-
- _Plogger.Info("Set ModeTrace OK.");
- ResultTreeBuilder trBuilder = m_pContext.CreateTreeBuilder();
- if (!trBuilder.constructResultTree(tContext, TRAVELTHREADMODE.CONMODE_SYNCHRONOUS)) { return null; }
- _Plogger.Info("ConstructResultTree OK.");
- ResultTree result = trBuilder.ResultTree;
-
- _Plogger.Info("getResultTree OK.");
- return result;
- }
-
- //判斷是否為最終設備(逆向追到已經無child的設備時,檢查該設備是否為最終設備(查驗該設備的同層設備,是否仍有可繼續逆向追蹤的設備,若無,則該設備為最終設備
- private bool isEndEquip(Equipment SelfEquip)
+ private ResultTree Trace(bool reverse)
{
- String SqlStmt;
- OracleCommand Command = null;
- OracleDataReader reader = null;
- long N_Value = 0;
-
- SqlStmt = "SELECT DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE FSC = " + SelfEquip.getFSC() + " AND UFID = " + SelfEquip.getUFID();
+ ResultTree tree = null;
try
{
- Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Transaction);
- reader = Command.ExecuteReader();
+ ConfigTrace();
+ _plogger.Info("configTrace OK.");
+ }
+ catch (Exception e)
+ {
+ _plogger.Error(e.Message);
+ Console.WriteLine(e.StackTrace);
+ return tree;
+ }
+
+ try
+ {
+ tree = ModeTrace(reverse);
+ }
+ catch (Exception e)
+ {
+ _plogger.Error(e.Message);
+ Console.WriteLine(e.StackTrace);
+ }
+
+ return tree;
+ }
+
+ private void ConfigTrace()
+ {
+ if (_mDbConnectionString == null)
+ {
+ _mDbConnectionString = "basedb/basedb000@nntpc";
+ }
+ try
+ {
+ if (_mPContext == null) _mPContext = _mTEngine.teoCreateContext();
+
+ if (_mPContext.IsConnected == 0)
+ {
+ _mPContext.Connect("", _mDbConnectionString);
+ }
+ }
+ catch (Exception ex)
+ {
+ _plogger.Error(ex.Message);
+ }
+ }
+
+ private ResultTree ModeTrace(bool reverse)
+ {
+ TravelContext tContext = new TravelContext();
+ TravelStartCriterion sCriterion = new TravelStartCriterion();
+ TravelTerminateCriterion eCriterion = new TravelTerminateCriterion();
+
+ sCriterion.ClsID = (short)_sFsc;
+ sCriterion.ObjID = _sUfid;
+
+ if (reverse) // 反向上追
+ {
+ sCriterion.StartMode = (TRAVELSTARTCRITERIONTYPE)(Convert.ToInt32(TRAVELSTARTCRITERIONTYPE.TRAVELBYNEGDIR) + Convert.ToInt32(TRAVELSTARTCRITERIONTYPE.TRAVELWITHFOLLOW));
+
+ eCriterion.ClsID = (short)GlobalVariable.Breaker;
+ eCriterion.EndMode = TRAVELTERMCRITERIONTYPE.TRAVELTOTHISCLASS;
+ }
+ else // 順向追蹤
+ {
+ sCriterion.StartMode = TRAVELSTARTCRITERIONTYPE.TRAVELBYCURDIR;
+
+ eCriterion.EndMode = TRAVELTERMCRITERIONTYPE.TRAVELTOTHISCLASS;
+ }
+
+ tContext.addCriterion(sCriterion);
+ tContext.addCriterion(eCriterion);
+
+ _mPContext.ResetContext();
+
+ _plogger.Info("Set ModeTrace OK.");
+ ResultTreeBuilder trBuilder = _mPContext.CreateTreeBuilder();
+ if (!trBuilder.constructResultTree(tContext, TRAVELTHREADMODE.CONMODE_SYNCHRONOUS)) { return null; }
+ _plogger.Info("ConstructResultTree OK.");
+ ResultTree result = trBuilder.ResultTree;
+
+ _plogger.Info("getResultTree OK.");
+ return result;
+ }
+
+ //判斷是否為最終設備(逆向追到已經無child的設備時,檢查該設備是否為最終設備(查驗該設備的同層設備,是否仍有可繼續逆向追蹤的設備,若無,則該設備為最終設備
+ private bool IsEndEquip(Equipment selfEquip)
+ {
+ string sqlStmt;
+ OracleCommand command = null;
+ OracleDataReader reader = null;
+ long nValue = 0;
+
+ sqlStmt = "SELECT DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE FSC = " + selfEquip.Fsc+ " AND UFID = " + selfEquip.Ufid;
+
+ try
+ {
+ command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
+ reader = command.ExecuteReader();
if (reader.Read())
{
@@ -471,33 +491,34 @@
else
{
if (Convert.ToInt32(reader["DIR"]) == 3) //順向無電 N1-->N2,所以逆向的上游N值抓N2
- N_Value = Convert.ToInt32(reader["N2"]);
+ nValue = Convert.ToInt32(reader["N2"]);
else
- N_Value = Convert.ToInt32(reader["N1"]);
+ nValue = Convert.ToInt32(reader["N1"]);
}
}
reader.Close();
- SqlStmt = "SELECT FSC,UFID,DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE N1 <> N2 AND ( N1 = " + N_Value + " OR N2 = " + N_Value + ")";
- Command.CommandText = SqlStmt;
+ sqlStmt = "SELECT FSC,UFID,DIR,OSTATUS,N1,N2 FROM BASEDB.CONNECTIVITY WHERE N1 <> N2 AND ( N1 = " + nValue + " OR N2 = " + nValue + ")";
+ command.CommandText = sqlStmt;
- reader = Command.ExecuteReader();
+ reader = command.ExecuteReader();
while (reader.Read())
{
- if (Convert.ToInt32(reader["FSC"]) == SelfEquip.getFSC() && Convert.ToInt32(reader["UFID"]) == SelfEquip.getUFID())
+ if (Convert.ToInt32(reader["FSC"]) == selfEquip.Fsc&& Convert.ToInt32(reader["UFID"]) == selfEquip.Ufid)
continue;
if (Convert.ToInt32(reader["OSTATUS"]) == 0) //切開的設備不可能為逆向的上游
continue;
- if (Convert.ToInt32(reader["N1"]) == N_Value)
+ if (Convert.ToInt32(reader["N1"]) == nValue)
{
switch (Convert.ToInt32(reader["DIR"]))
{
case 1:
case 3:
break;
+
case 2:
case 4:
return false; //如果逆向的上游連接點為N1,一定要N2-->N1才可能還有需要逆向追蹤設備
@@ -505,7 +526,7 @@
break; //未供電設備不可能是逆向上游
}
}
- else if (Convert.ToInt32(reader["N2"]) == N_Value)
+ else if (Convert.ToInt32(reader["N2"]) == nValue)
{
switch (Convert.ToInt32(reader["DIR"]))
{
@@ -515,6 +536,7 @@
case 2:
case 4:
break;
+
case 99:
return false; //未供電設備不可能是逆向上游
}
@@ -524,54 +546,49 @@
}
catch (Exception e)
{
- _Plogger.Error(e.Message);
+ _plogger.Error(e.Message);
Console.WriteLine(e.StackTrace);
return false;
}
finally
{
- if (Command != null)
- Command.Dispose();
+ if (command != null)
+ command.Dispose();
if (reader != null)
reader.Close();
}
-
return true;
}
- private int getTraceCount(int Fsc, int Ufid)
+ private int GetTraceCount(int fsc, int ufid)
{
- if (TraceCounts.ContainsKey(Fsc + "|" + Ufid))
- return Int32.Parse(TraceCounts[Fsc + "|" + Ufid].ToString());
+ if (_traceCounts.ContainsKey(fsc + "|" + ufid))
+ return int.Parse(_traceCounts[fsc + "|" + ufid].ToString());
else
return 0;
}
- private void AddTraceCount(int Fsc, int Ufid)
+ private void AddTraceCount(int fsc, int ufid)
{
- int Count = 1;
+ int count = 1;
- if (TraceCounts.ContainsKey(Fsc + "|" + Ufid))
+ if (_traceCounts.ContainsKey(fsc + "|" + ufid))
{
- Count = Int32.Parse(TraceCounts[Fsc + "|" + Ufid].ToString());
- Count++;
- TraceCounts.Remove(Fsc + "|" + Ufid);
+ count = int.Parse(_traceCounts[fsc + "|" + ufid].ToString());
+ count++;
+ _traceCounts.Remove(fsc + "|" + ufid);
}
- TraceCounts.Add(Fsc + "|" + Ufid, Count.ToString());
+ _traceCounts.Add(fsc + "|" + ufid, count.ToString());
}
-
}
public class TraceLoopException : Exception
{
- public String Message = "";
-
- public TraceLoopException(String _Message)
+ public TraceLoopException(string message) : base(message)
{
- Message = _Message;
}
}
-}
+}
\ No newline at end of file
--
Gitblit v0.0.0-SNAPSHOT