ulysseskao
2016-05-01 8f5c8891aba521570fa63c4baf616e3a3c8d9526
CCSTrace/CCS/EventAI/JudgeCase.cs
@@ -2,11 +2,14 @@
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;
@@ -23,12 +26,11 @@
        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;
@@ -39,12 +41,11 @@
            _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 "
@@ -56,7 +57,7 @@
            try
            {
                _pLog.Info("搜尋同一饋線上可供合併之母案件.");
                Logger.Info("搜尋同一饋線上可供合併之母案件.");
                command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                reader = command.ExecuteReader();
@@ -75,15 +76,15 @@
                    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
@@ -100,8 +101,8 @@
            {
                _inferFsc = _damageFsc;
                _inferUfid = _damageUfid;
                _pLog.Info("此案件為饋線上第一件案件");
                _pLog.Info("追蹤合併結束.");
                Logger.Info("此案件為饋線上第一件案件");
                Logger.Info("追蹤合併結束.");
                return;
            }
@@ -118,8 +119,8 @@
                            _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;
                        }
                    }
@@ -127,13 +128,13 @@
            }
            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()
@@ -142,12 +143,12 @@
            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;
            }
@@ -155,7 +156,7 @@
            {
                _mTraceSubject.StartTrace(_damageFsc, _damageUfid, true);
                _newCase = _mTraceSubject.GetNewResult(); // 新案件所建出來的linkedlist(往上追到breaker)
                _pLog.Info("追蹤新案件完成");
                Logger.Info("追蹤新案件完成");
                for (int i = 0; i < _mCase.Count; i++)
                {
@@ -171,7 +172,7 @@
                        _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++)
                        {
@@ -185,7 +186,7 @@
                                    _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;
                                }
                            }
@@ -193,15 +194,15 @@
                    }
                    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;
@@ -217,18 +218,18 @@
                                    _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
@@ -286,7 +287,7 @@
            }
            catch (Exception e)
            {
                _pLog.Error("Problems occur: " + e.Message);
                Logger.Error("Problems occur: " + e.Message);
                Console.WriteLine(e.StackTrace);
            }
            finally
@@ -321,7 +322,7 @@
            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