| | |
| | |
|
| | | using System.Collections;
|
| | | using System.Data.OracleClient;
|
| | | using NLog;
|
| | |
|
| | | namespace CCSTrace.CCS.EventAI
|
| | | {
|
| | | public class JudgeCase
|
| | | {
|
| | | private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
| | |
|
| | | private TraceSubject _mTraceSubject;
|
| | | private readonly ArrayList _mCase = new ArrayList();
|
| | | private readonly int _damageFdrId;
|
| | |
| | |
|
| | | private readonly OracleConnection _connectionTpc;
|
| | | private readonly OracleTransaction _transaction;
|
| | | private readonly RecordLog _pLog;
|
| | | private readonly string _traceConnectionString;
|
| | |
|
| | | // int Range = 360; //比事故案件還早多久時間內的案件才作合併 單位:分
|
| | |
|
| | | public JudgeCase(int mFdrId, int mFsc, int mUfid, int mCaseId, string mAcceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection, RecordLog log)
|
| | | public JudgeCase(int mFdrId, int mFsc, int mUfid, int mCaseId, string mAcceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection)
|
| | | {
|
| | | _damageFdrId = mFdrId;
|
| | | _damageFsc = mFsc;
|
| | |
| | | _connectionTpc = connection;
|
| | | _transaction = trx;
|
| | | _traceConnectionString = traceConnection;
|
| | | _pLog = log;
|
| | | }
|
| | |
|
| | | public void AiBegin()
|
| | | {
|
| | | _pLog.Info("進行案件追蹤合併.");
|
| | | Logger.Info("進行案件追蹤合併.");
|
| | | // String ToTime = AcceptDate;
|
| | |
|
| | | var sqlStmt = "SELECT R.ACCEPTNUM,R.CASEID as CASEID,R.FDRID as FDRID,R.FSC as FSC,R.UFID as UFID,E.CASESTATUS as CASESTATUS,R.EVENTBRIEF as BRIEF "
|
| | |
| | |
|
| | | try
|
| | | {
|
| | | _pLog.Info("搜尋同一饋線上可供合併之母案件.");
|
| | | Logger.Info("搜尋同一饋線上可供合併之母案件.");
|
| | | command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
|
| | | reader = command.ExecuteReader();
|
| | |
|
| | |
| | | record.Add(reader["BRIEF"].ToString());
|
| | | record.Add(reader["ACCEPTNUM"].ToString());
|
| | | _mCase.Add(record);
|
| | | _pLog.Info(record[7].ToString() + ", " + record[0]);
|
| | | Logger.Info(record[7].ToString() + ", " + record[0]);
|
| | | }
|
| | | reader.Close();
|
| | | }
|
| | | catch (Exception e)
|
| | | {
|
| | | _pLog.Error(e.Message);
|
| | | Logger.Error(e.Message);
|
| | | Console.WriteLine(e.StackTrace);
|
| | | _pLog.Error("尋找母案件時發生錯誤.");
|
| | | Logger.Error("尋找母案件時發生錯誤.");
|
| | | throw e;
|
| | | }
|
| | | finally
|
| | |
| | | {
|
| | | _inferFsc = _damageFsc;
|
| | | _inferUfid = _damageUfid;
|
| | | _pLog.Info("此案件為饋線上第一件案件");
|
| | | _pLog.Info("追蹤合併結束.");
|
| | | Logger.Info("此案件為饋線上第一件案件");
|
| | | Logger.Info("追蹤合併結束.");
|
| | | return;
|
| | | }
|
| | |
|
| | |
| | | _parentCaseId = Convert.ToInt32(((ArrayList)_mCase[i])[0].ToString());
|
| | | _inferFsc = Convert.ToInt32(((ArrayList)_mCase[i])[2].ToString());
|
| | | _inferUfid = Convert.ToInt32(((ArrayList)_mCase[i])[3].ToString());
|
| | | _pLog.Info("相同變壓器");
|
| | | _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | Logger.Info("相同變壓器");
|
| | | Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | return;
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | _pLog.Error(ex.Message);
|
| | | Logger.Error(ex.Message);
|
| | | throw ex;
|
| | | }
|
| | | _pLog.Info("不同變壓器,開始追蹤(New Version)...");
|
| | | Logger.Info("不同變壓器,開始追蹤(New Version)...");
|
| | |
|
| | | TraceCase();
|
| | | _pLog.Warn("追蹤合併結束");
|
| | | Logger.Warn("追蹤合併結束");
|
| | | }
|
| | |
|
| | | private void TraceCase()
|
| | |
| | |
|
| | | try
|
| | | {
|
| | | _mTraceSubject = new TraceSubject(_connectionTpc, _transaction, _traceConnectionString, _pLog);
|
| | | _pLog.Info("TraceSubject Startup....");
|
| | | _mTraceSubject = new TraceSubject(_connectionTpc, _transaction, _traceConnectionString);
|
| | | Logger.Info("TraceSubject Startup....");
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | _pLog.Error("TraceObject.dll無法初始化,請確認該元件是否存在或jre是否為 1.4 版,並確認是否註冊.");
|
| | | Logger.Error("TraceObject.dll無法初始化,請確認該元件是否存在或jre是否為 1.4 版,並確認是否註冊.");
|
| | | throw ex;
|
| | | }
|
| | |
|
| | |
| | | {
|
| | | _mTraceSubject.StartTrace(_damageFsc, _damageUfid, true);
|
| | | _newCase = _mTraceSubject.GetNewResult(); // 新案件所建出來的linkedlist(往上追到breaker)
|
| | | _pLog.Info("追蹤新案件完成");
|
| | | Logger.Info("追蹤新案件完成");
|
| | |
|
| | | for (int i = 0; i < _mCase.Count; i++)
|
| | | {
|
| | |
| | | _mTraceSubject.StartTrace(Convert.ToInt32(((ArrayList)_mCase[i])[2].ToString()),
|
| | | Convert.ToInt32(((ArrayList)_mCase[i])[3].ToString()), false);
|
| | | _oldCase = _mTraceSubject.GetOldResult(); // 母案件所建出來的TreeMap(往上追到breaker)
|
| | | _pLog.Info("追蹤母案件完成");
|
| | | Logger.Info("追蹤母案件完成");
|
| | |
|
| | | for (int j = 0; j < _newCase.Count; j++)
|
| | | {
|
| | |
| | | _inferFsc = ((Equipment)_newCase[j]).Fsc;
|
| | | _inferUfid = ((Equipment)_newCase[j]).Ufid;
|
| | | _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
|
| | | _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | return;
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | | else
|
| | | {
|
| | | for (int k = 0; k < facilitySet.Count; k++)
|
| | | foreach (object t1 in facilitySet)
|
| | | {
|
| | | bool merge = false; // 損壞設備是否在所切開的設備下游
|
| | | Equipment damageEquipment = (Equipment)facilitySet[k]; // 切開的設備
|
| | | Equipment damageEquipment = (Equipment)t1; // 切開的設備
|
| | |
|
| | | for (int z = 0; z < _newCase.Count; z++)
|
| | | foreach (object t in _newCase)
|
| | | {
|
| | | if ((((Equipment)_newCase[z]).Fsc== damageEquipment.Fsc) &&
|
| | | (((Equipment)_newCase[z]).Ufid== damageEquipment.Ufid))
|
| | | if ((((Equipment)t).Fsc== damageEquipment.Fsc) &&
|
| | | (((Equipment)t).Ufid== damageEquipment.Ufid))
|
| | | {
|
| | | merge = true;
|
| | | break;
|
| | |
| | | _inferFsc = damageEquipment.Fsc;
|
| | | _inferUfid = damageEquipment.Ufid;
|
| | | _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
|
| | | _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
|
| | | return;
|
| | | }
|
| | | }
|
| | | } // for loop(k)
|
| | | }
|
| | | } // else
|
| | | } // for loop(i)
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | | _pLog.Error(ex.Message);
|
| | | _pLog.Error("追蹤時發生錯誤.");
|
| | | Logger.Error(ex, ex.Message);
|
| | | Logger.Error("追蹤時發生錯誤.");
|
| | | throw;
|
| | | }
|
| | | finally
|
| | |
| | | }
|
| | | catch (Exception e)
|
| | | {
|
| | | _pLog.Error("Problems occur: " + e.Message);
|
| | | Logger.Error("Problems occur: " + e.Message);
|
| | | Console.WriteLine(e.StackTrace);
|
| | | }
|
| | | finally
|
| | |
| | | catch (Exception e)
|
| | | {
|
| | | // CCS.GlobalVariable.ErrorLog.setErrorLog("Error in JudgeCase(RealDamageEquipment) :" + e.getMessage());
|
| | | _pLog.Error("Problems occur: " + e.Message);
|
| | | Logger.Error("Problems occur: " + e.Message);
|
| | | Console.WriteLine(e.StackTrace);
|
| | | }
|
| | | finally
|