ulysseskao
2016-04-29 b0c18d369abd06075c83759b0e19823c2a11d716
CCSTrace/CCS/ProcessEvent.cs
@@ -1,306 +1,316 @@
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.Data.OracleClient;
using System.Text;
using CCSTrace.CCS.Domain;
using CCSTrace.CCS.Function;
using CCSTrace.CCS.Object;
using NLog;
namespace CCSTrace.CCS
{
    public delegate void ThreadEndEventHandler(object sender, ThreadEndEvent e);
    public class ProcessEvent
    public class ProcessEvent
    {
        public event ThreadEndEventHandler ThreadFinish;
        private static Logger logger = LogManager.GetCurrentClassLogger();
        private CCS.Object.EventRecord m_EventRecord;
        private CCS.Object.CCSRecord m_CCSRecord;
        private RecordLog _PLog;
        private OracleConnection _ConnectionTPC;
        private OracleTransaction _Trx;
        private String _traceConnectionString = String.Empty;
        private readonly OracleConnection _connectionTpc;
        private readonly CcsRecord _mCcsRecord;
        public ProcessEvent(Object.CCSRecord _Record, OracleConnection _Conn, String _traceConnection)
        private EventRecord _mEventRecord;
        private readonly RecordLog _pLog;
        private readonly string _traceConnectionString = string.Empty;
        private OracleTransaction _trx;
        public ProcessEvent(CcsRecord record, OracleConnection conn, string traceConnection)
        {
            m_CCSRecord = _Record;
            _ConnectionTPC = _Conn;
            _traceConnectionString = _traceConnection;
            _PLog = new RecordLog(CCS.LocalVariable.CCS_ListPath + _Record.getCCSID() + ".txt");
            _mCcsRecord = record;
            _connectionTpc = conn;
            _traceConnectionString = traceConnection;
            _pLog = new RecordLog(GlobalVariable.CcsListPath + record.CcsId + ".txt");
        }
        public event ThreadEndEventHandler ThreadFinish;
        public void Run()
        {
            bool SendMail = false;
            var sendMail = false;
            try
            {
                int FDRID = getFDRID(m_CCSRecord.getMeter());
                var fdrid = GetFdrid(_mCcsRecord.Meter);
                if (FDRID != 0)  //有饋線代號資料的案件才需比對同饋線上有無案件正在處理
                if (fdrid != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理
                {
                    if (CCSMain.ProcessFDR.ContainsKey(FDRID.ToString()))
                    if (CcsMain.ProcessFdr.ContainsKey(fdrid.ToString()))
                    {
                        CCSMain.WaitingCases.Add(new String[] { m_CCSRecord.getCCSID(), FDRID.ToString() });
                        CcsMain.WaitingCases.Add(new[] {_mCcsRecord.CcsId, fdrid.ToString()});
                        return;
                    }
                    else
                        CCSMain.ProcessFDR.Add(FDRID.ToString(), null); //將要處理的案件的饋線別加入處理中饋線集合
                        CcsMain.ProcessFdr.Add(fdrid.ToString(), null); //將要處理的案件的饋線別加入處理中饋線集合
                }
/*                int TraceCount = this.getTraceCount(m_CCSRecord.getCCSID());
                bool TraceError = false;    //追蹤次數超過3次,改為非A類不追蹤合併
                /*                int TraceCount = this.getTraceCount(m_CCSRecord.CcsId);
                                bool TraceError = false;    //追蹤次數超過3次,改為非A類不追蹤合併
                switch (TraceCount)
                {
                    case 0:
                        UpdateTraceCount(m_CCSRecord.getCCSID(),true);
                        TraceError = false;
                        break;
                    case 2:
                        UpdateTraceCount(m_CCSRecord.getCCSID(),false);
                        TraceError = true;
                        break;
                    default:
                        UpdateTraceCount(m_CCSRecord.getCCSID(),false);
                        TraceError = false;
                        break;
                }
*/
                if (this.initialEventRecord(m_CCSRecord.getCCSID()))
                {
                    CCS.Function.Leach m_Leach = new CCS.Function.Leach(_ConnectionTPC, _Trx, _traceConnectionString, _PLog); // 案件過濾與合併
                    _PLog.Info("過濾案件...");
                    int Return_Status = m_Leach.LeachCase(m_EventRecord);
                                switch (TraceCount)
                                {
                                    case 0:
                                        UpdateTraceCount(m_CCSRecord.CcsId,true);
                                        TraceError = false;
                                        break;
                    switch ( Return_Status )
                                    case 2:
                                        UpdateTraceCount(m_CCSRecord.CcsId,false);
                                        TraceError = true;
                                        break;
                                    default:
                                        UpdateTraceCount(m_CCSRecord.CcsId,false);
                                        TraceError = false;
                                        break;
                                }
                */
                if (InitialEventRecord(_mCcsRecord.CcsId))
                {
                    var mLeach = new Leach(_connectionTpc, _trx, _traceConnectionString, _pLog); // 案件過濾與合併
                    _pLog.Info("過濾案件...");
                    var returnStatus = mLeach.LeachCase(_mEventRecord);
                    switch (returnStatus)
                    {
                        case CCS.LocalVariable.Success:
                            _PLog.Info("案件過濾完畢....");
                            Process(CCS.LocalVariable.Success);
                        case GlobalVariable.Success:
                            _pLog.Info("案件過濾完畢....");
                            Process(GlobalVariable.Success);
                            break;
                        case CCS.LocalVariable.NoMeter:
                            _PLog.Info("案件過濾完畢,用戶無電號....");
                            m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                            Process(CCS.LocalVariable.NoMeter);
                        case GlobalVariable.NoMeter:
                            _pLog.Info("案件過濾完畢,用戶無電號....");
                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                            Process(GlobalVariable.NoMeter);
                            break;
                        case CCS.LocalVariable.SameCustomer:
                            _PLog.Info("相同用戶重複來電....");
                            processSameCustomer(this.m_CCSRecord, this.m_EventRecord);
                        case GlobalVariable.SameCustomer:
                            _pLog.Info("相同用戶重複來電....");
                            ProcessSameCustomer(_mCcsRecord, _mEventRecord);
                            break;
                        case CCS.LocalVariable.NoSupplyElc:
                            _PLog.Warn("該饋線未供電,無法作事故案件追蹤合併....");
                            m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                            Process(CCS.LocalVariable.NoMeter);
                        case GlobalVariable.NoSupplyElc:
                            _pLog.Warn("該饋線未供電,無法作事故案件追蹤合併....");
                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                            Process(GlobalVariable.NoMeter);
                            break;
                        case CCS.LocalVariable.No_Sxfmr:
                            _PLog.Warn("該案件無變壓器....");
                            m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                            Process(CCS.LocalVariable.NoMeter);
                        case GlobalVariable.NoSxfmr:
                            _pLog.Warn("該案件無變壓器....");
                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                            Process(GlobalVariable.NoMeter);
                            break;
                        case CCS.LocalVariable.CaseTypeChanged:
                            _PLog.Info("變更案件狀態....");
                            Process(CCS.LocalVariable.CaseTypeChanged);
                        case GlobalVariable.CaseTypeChanged:
                            _pLog.Info("變更案件狀態....");
                            Process(GlobalVariable.CaseTypeChanged);
                            break;
                        case CCS.LocalVariable.Trace_Failure:
                            _PLog.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
                            m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                            Process(CCS.LocalVariable.NoMeter);
                        case GlobalVariable.TraceFailure:
                            _pLog.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
                            _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                            Process(GlobalVariable.NoMeter);
                            break;
                        default:
                            int TraceCount = this.getTraceCount(m_CCSRecord.getCCSID());
                            var traceCount = GetTraceCount(_mCcsRecord.CcsId);
                            if ( TraceCount < 2 )
                            if (traceCount < 2)
                            {
                                if (_Trx.Connection.State.ToString().Equals("Open"))
                                    _Trx.Rollback();
                                if (_trx.Connection.State.ToString().Equals("Open"))
                                    _trx.Rollback();
                                _Trx.Dispose();
                                _trx.Dispose();
                                if (Return_Status == CCS.LocalVariable.CaseTransfer)
                                    _PLog.Error("案件已移轉,此事故案件暫不被受理....");
                                else if (Return_Status == CCS.LocalVariable.Failure_By_DB)
                                    _PLog.Error("資料庫錯誤,此事故案件暫不被受理....");
                                else if (Return_Status == CCS.LocalVariable.FDRLocked)
                                    _PLog.Error("饋線被鎖定,此事故案件暫不被受理....");
                                if (returnStatus == GlobalVariable.CaseTransfer)
                                    _pLog.Error("案件已移轉,此事故案件暫不被受理....");
                                else if (returnStatus == GlobalVariable.FailureByDb)
                                    _pLog.Error("資料庫錯誤,此事故案件暫不被受理....");
                                else if (returnStatus == GlobalVariable.FdrLocked)
                                    _pLog.Error("饋線被鎖定,此事故案件暫不被受理....");
                                else
                                    _PLog.Error("發生非預期錯誤,此事故案件暫不被受理....");
                                    _pLog.Error("發生非預期錯誤,此事故案件暫不被受理....");
                                if (TraceCount == 0)
                                    UpdateTraceCount(m_CCSRecord.getCCSID(), true);
                                if (traceCount == 0)
                                    UpdateTraceCount(_mCcsRecord.CcsId, true);
                                else
                                    UpdateTraceCount(m_CCSRecord.getCCSID(), false);
                                    UpdateTraceCount(_mCcsRecord.CcsId, false);
                            }
                            else
                            {
                                UpdateTraceCount(m_CCSRecord.getCCSID(), false);
                                if (Return_Status == CCS.LocalVariable.Trace_Counts_3)
                                    m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)");
                                UpdateTraceCount(_mCcsRecord.CcsId, false);
                                if (returnStatus == GlobalVariable.TraceCounts3)
                                    _mEventRecord.Note = _mEventRecord.Note+ "(本案用戶供電資料追蹤失敗)";
                                _PLog.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
                                m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                                Process(CCS.LocalVariable.NoMeter);
                                SendMail = true;
                                _pLog.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
                                _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                                Process(GlobalVariable.NoMeter);
                                sendMail = true;
                            }
                            break;
/*                        switch (TraceCount)
                            {
                                case 0:
                                    if (_Trx.Connection.State.ToString().Equals("Open"))
                                        _Trx.Rollback();
                        /*                        switch (TraceCount)
                                                        {
                                                            case 0:
                                                                if (_Trx.Connection.State.ToString().Equals("Open"))
                                                                    _Trx.Rollback();
                                    _Trx.Dispose();
                                                                _Trx.Dispose();
                                    if ( Return_Status == CCS.LocalVariable.CaseTransfer )
                                        _PLog.Error("案件已移轉,此事故案件不被受理....");
                                    else if ( Return_Status == CCS.LocalVariable.Failure_By_DB )
                                        _PLog.Error("資料庫錯誤,此事故案件不被受理....");
                                    else if ( Return_Status == CCS.LocalVariable.FDRLocked )
                                        _PLog.Error("饋線被鎖定,此事故案件不被受理....");
                                    else
                                        _PLog.Error("此事故案件不被受理....");
                                                                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.getCCSID(), true);
                                    break;
                                case 1:
                                    if (_Trx.Connection.State.ToString().Equals("Open"))
                                        _Trx.Rollback();
                                                                UpdateTraceCount(m_CCSRecord.CcsId, true);
                                                                break;
                                    _Trx.Dispose();
                                                            case 1:
                                                                if (_Trx.Connection.State.ToString().Equals("Open"))
                                                                    _Trx.Rollback();
                                    UpdateTraceCount(m_CCSRecord.getCCSID(), false);
                                                                _Trx.Dispose();
                                    break;
                                default://追蹤次數超過3次,改為非A類不追蹤合併
                                    UpdateTraceCount(m_CCSRecord.getCCSID(), false);
                                    if (Return_Status == CCS.LocalVariable.Trace_Counts_3)
                                        m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)");
                                                                UpdateTraceCount(m_CCSRecord.CcsId, false);
                                    _PLog.Error("追蹤次數3次,無法追蹤到故障設備,以一般無電號案件方式受理....");
                                    m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
                                    Process(CCS.LocalVariable.NoMeter);
                                    SendMail = true;
                                    break;
                            }
                                                                break;
                            break;
                        case CCS.LocalVariable.CaseTransfer:
                            if (_Trx.Connection.State.ToString().Equals("Open"))
                                _Trx.Rollback();
                                                            default://追蹤次數超過3次,改為非A類不追蹤合併
                                                                UpdateTraceCount(m_CCSRecord.CcsId, false);
                                                                if (Return_Status == CCS.GlobalVariable.Trace_Counts_3)
                                                                    m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)");
                            _Trx.Dispose();
                            _PLog.Error("案件已移轉,此事故案件不被受理....");
                            break;
                        case CCS.LocalVariable.FDRLocked:
                            if (_Trx.Connection.State.ToString().Equals("Open"))
                                _Trx.Rollback();
                                                                _PLog.Error("追蹤次數3次,無法追蹤到故障設備,以一般無電號案件方式受理....");
                                                                m_EventRecord.setTrace_Finish(CCS.GlobalVariable.Trace_Finish);
                                                                Process(CCS.GlobalVariable.NoMeter);
                                                                SendMail = true;
                                                                break;
                                                        }
                            _Trx.Dispose();
                            _PLog.Error("饋線被鎖定,此事故案件不被受理....");
                            break;
                        case CCS.LocalVariable.Failure_By_DB:
                            if (_Trx.Connection.State.ToString().Equals("Open"))
                                _Trx.Rollback();
                                                        break;
                            _Trx.Dispose();
                            _PLog.Error("資料庫錯誤,此事故案件不被受理....");
                            break;
                        default:
                            if (_Trx.Connection.State.ToString().Equals("Open"))
                                _Trx.Rollback();
                                                    case CCS.GlobalVariable.CaseTransfer:
                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
                                                            _Trx.Rollback();
                            _Trx.Dispose();
                            _PLog.Error("此事故案件不被受理....");
                            break;
*/
                                                        _Trx.Dispose();
                                                        _PLog.Error("案件已移轉,此事故案件不被受理....");
                                                        break;
                                                    case CCS.GlobalVariable.FDRLocked:
                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
                                                            _Trx.Rollback();
                                                        _Trx.Dispose();
                                                        _PLog.Error("饋線被鎖定,此事故案件不被受理....");
                                                        break;
                                                    case CCS.GlobalVariable.Failure_By_DB:
                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
                                                            _Trx.Rollback();
                                                        _Trx.Dispose();
                                                        _PLog.Error("資料庫錯誤,此事故案件不被受理....");
                                                        break;
                                                    default:
                                                        if (_Trx.Connection.State.ToString().Equals("Open"))
                                                            _Trx.Rollback();
                                                        _Trx.Dispose();
                                                        _PLog.Error("此事故案件不被受理....");
                                                        break;
                            */
                    }
                }
                if ( FDRID != 0 )
                    CCSMain.ProcessFDR.Remove(FDRID.ToString());//將處理完的案件的饋線別從處理中饋線集合中移除
                if (fdrid != 0)
                    CcsMain.ProcessFdr.Remove(fdrid.ToString()); //將處理完的案件的饋線別從處理中饋線集合中移除
            }
            catch (Exception e)
            {
                Console.WriteLine("Error = " + e.Message + ". CCSID = " + m_CCSRecord.getCCSID());
                _PLog.Error("Error = " + e.Message + ". CCSID = " + m_CCSRecord.getCCSID());
                Console.WriteLine("Error = " + e.Message + ". CCSID = " + _mCcsRecord.CcsId);
                _pLog.Error("Error = " + e.Message + ". CCSID = " + _mCcsRecord.CcsId);
                if (_Trx != null)
                if (_trx != null)
                {
                    if (_Trx.Connection.State.ToString().Equals("Open"))
                        _Trx.Rollback();
                    if (_trx.Connection.State.ToString().Equals("Open"))
                        _trx.Rollback();
                    _Trx.Dispose();
                    _trx.Dispose();
                }
                if ( m_EventRecord!= null && m_EventRecord.getFdrID() != 0)
                    CCSMain.ProcessFDR.Remove(m_EventRecord.getFdrID().ToString());//將處理完的案件的饋線別從處理中饋線集合中移除
                if (_mEventRecord != null && _mEventRecord.FdrId!= 0)
                    CcsMain.ProcessFdr.Remove(_mEventRecord.FdrId.ToString()); //將處理完的案件的饋線別從處理中饋線集合中移除
                //throw e;
            }
            finally
            {
                _PLog.Close();
                CCSMain.ProcessCases.Remove(m_CCSRecord.getCCSID());
                this.OnThreadFinish(new ThreadEndEvent(_ConnectionTPC));
                _pLog.Close();
                CcsMain.ProcessCases.Remove(_mCcsRecord.CcsId);
                OnThreadFinish(new ThreadEndEvent(_connectionTpc));
            }
            if ( SendMail )
                new CCS.Function.MailService(_ConnectionTPC).SendMail(m_CCSRecord.getCCSID());
            if (sendMail)
                new MailService(_connectionTpc).SendMail(_mCcsRecord.CcsId);
        }
        private void Process(int Kind)
        private void Process(int kind)
        {
            CCS.FinishEvent FinishEvent = new CCS.FinishEvent();
            var finishEvent = new FinishEvent();
            try
            {
                if (FinishEvent.Finish(Kind, m_EventRecord, _ConnectionTPC, _Trx, _PLog))
                if (finishEvent.Finish(kind, _mEventRecord, _connectionTpc, _trx, _pLog))
                {
                    _PLog.Info("OMS資料更新成功!");
                    if (UpdateCCSData(m_EventRecord, m_CCSRecord, CCS.LocalVariable.WaitForDespatch))
                    _pLog.Info("OMS資料更新成功!");
                    if (UpdateCcsData(_mEventRecord, _mCcsRecord, (int) CCSCaseState.WaitForDespatch))
                    {
                        _PLog.Info("CCS資料更新成功!");
                        _pLog.Info("CCS資料更新成功!");
                    }
                    else
                    {
                        if (_Trx.Connection.State.ToString().Equals("Open"))
                            _Trx.Rollback();
                        if (_trx.Connection.State.ToString().Equals("Open"))
                            _trx.Rollback();
                        _Trx.Dispose();
                        _PLog.Error("CCS資料更新程序發生錯誤!");
                        _trx.Dispose();
                        _pLog.Error("CCS資料更新程序發生錯誤!");
                        return;
                    }
                    // 須等全部動作都正確做完才可作commit的動作
                    _Trx.Commit();
                    _Trx.Dispose(); ;
                    CCS.Object.AlarmData alarmClient = new CCS.Object.AlarmData(_ConnectionTPC, _Trx, _PLog);
                    alarmClient.alarm(m_EventRecord.getAcceptNum(), m_EventRecord.getDept());
                    _trx.Commit();
                    _trx.Dispose();
                    ;
                    var alarmClient = new AlarmData(_connectionTpc, _trx, _pLog);
                    alarmClient.Alarm(_mEventRecord.AcceptNum, _mEventRecord.Dept);
                }
                else
                {
                    // 有錯誤需要RollBack
                    if (_Trx.Connection.State.ToString().Equals("Open"))
                        _Trx.Rollback();
                    if (_trx.Connection.State.ToString().Equals("Open"))
                        _trx.Rollback();
                    _Trx.Dispose(); ;
                    _PLog.Error("OMS資料更新程序發生錯誤!");
                    _trx.Dispose();
                    ;
                    _pLog.Error("OMS資料更新程序發生錯誤!");
                }
                _PLog.Info("CCS 案件受理程序結束.");
                _pLog.Info("CCS 案件受理程序結束.");
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        protected virtual void OnThreadFinish(ThreadEndEvent e)
@@ -311,194 +321,192 @@
            }
        }
        private bool UpdateCCSData(CCS.Object.EventRecord m_Record, CCS.Object.CCSRecord m_CCSRecord, int CaseStatus)
        private bool UpdateCcsData(EventRecord mRecord, CcsRecord mCcsRecord, int caseStatus)
        {
            _PLog.Info("進行CCS資料更新程序...");
            CCS.Object.EventQuery EventQuery = new CCS.Object.EventQuery();
            int Status = CaseStatus;
            _pLog.Info("進行CCS資料更新程序...");
            var eventQuery = new EventQuery();
            var status = caseStatus;
            // 設定CCSID
            EventQuery.setCCSID(m_CCSRecord.getCCSID());
            eventQuery.CcsId = mCcsRecord.CcsId;
            // 設定受理時間
            EventQuery.setChangeTime(m_CCSRecord.getAcceptTime());
            eventQuery.ChangeTime = mCcsRecord.AcceptTime;
            // 設定用戶電號
            if (m_CCSRecord.getMeter() != null)
            if (mCcsRecord.Meter != null)
            {
                EventQuery.setMeter(m_CCSRecord.getMeter());
                eventQuery.Meter = mCcsRecord.Meter;
            }
            // 如果該案件為子案件,需找出母案件的casestatus來insert eos.eventquery
            // 若母案件已派工,需一併紀錄預計復電時間等資訊
            if (m_Record.getParentID() != 0)
            if (mRecord.ParentId!= 0)
            {
                Status = this.getRealCaseStatus(m_Record.getParentID()) == CCS.LocalVariable.WaitForSponsor ? CCS.LocalVariable.EventDespatched
                        : CCS.LocalVariable.WaitForDespatch;
                if (Status == CCS.LocalVariable.EventDespatched)
                status = GetRealCaseStatus(mRecord.ParentId) == (int) CCSCaseState.WaitForSponsor
                    ? (int) CCSCaseState.EventDespatched
                    : (int) CCSCaseState.WaitForDespatch;
                if (status == (int) CCSCaseState.EventDespatched)
                {
                    setDespatchInfo(m_Record.getParentID(), EventQuery);
                    SetDespatchInfo(mRecord.ParentId, eventQuery);
                }
            }
            // 若此案件為專案案件升級為母案件,則必須判斷原先案件是否已經派工
            if ((m_CCSRecord.getImportCase() == CCS.LocalVariable.isImportCase) && (m_Record.isDespatched()))
            if ((mCcsRecord.ImportCase == GlobalVariable.IsImportCase) && mRecord.IsDespatched)
            {
                Status = CCS.LocalVariable.EventDespatched;
                setDespatchInfo(m_Record.getCaseID(), EventQuery);
                status = (int) CCSCaseState.EventDespatched;
                SetDespatchInfo(mRecord.CaseId, eventQuery);
            }
            EventQuery.setCaseStatus(Status);
            eventQuery.CaseStatus = status;
            // 更新CCS.EventQuery
            if (!EventQuery.Update(_PLog,_ConnectionTPC,_Trx))
            if (!eventQuery.Update(_pLog, _connectionTpc, _trx))
            {
                _PLog.Error("更新ccs.eventquery失敗!");
                _pLog.Error("更新ccs.eventquery失敗!");
                return false;
            }
            else
            _pLog.Info("更新ccs.eventquery成功!");
            var numberContrast = new NumberContrast();
            numberContrast.SetAcceptNum(mRecord.AcceptNum);
            numberContrast.SetCaseId(mRecord.CaseId);
            numberContrast.SetCcsid(mCcsRecord.CcsId);
            // 更新CCS.Num_Contrast
            if (!numberContrast.Update(_connectionTpc, _trx))
            {
                _PLog.Info("更新ccs.eventquery成功!");
                CCS.Object.NumberContrast NumberContrast = new CCS.Object.NumberContrast();
                NumberContrast.setAcceptNum(m_Record.getAcceptNum());
                NumberContrast.setCaseID(m_Record.getCaseID());
                NumberContrast.setCCSID(m_CCSRecord.getCCSID());
                // 更新CCS.Num_Contrast
                if (!NumberContrast.Update(_ConnectionTPC,_Trx))
                {
                    _PLog.Error("更新ccs.num_contrast失敗!");
                    return false;
                }
                _PLog.Info("更新ccs.num_contrast成功!");
                _pLog.Error("更新ccs.num_contrast失敗!");
                return false;
            }
            _pLog.Info("更新ccs.num_contrast成功!");
            return true;
        }
        private bool initialEventRecord(String CCSID)
        private bool InitialEventRecord(string ccsid)
        {
            CCS.Function.InitialEventData InitialData = new CCS.Function.InitialEventData(_ConnectionTPC,_PLog);
            CCS.Object.NumberContrast m_Contrast = new CCS.Object.NumberContrast();
            CCS.Object.Dept_Contrast Dept_Contrast = null;
            var initialData = new InitialEventData(_connectionTpc, _pLog);
            var mContrast = new NumberContrast();
            DeptContrast deptContrast = null;
            // Being Transaction
            _Trx = _ConnectionTPC.BeginTransaction();
            _trx = _connectionTpc.BeginTransaction();
            Dept_Contrast = new CCS.Object.Dept_Contrast(_ConnectionTPC, _Trx);
            m_EventRecord = new CCS.Object.EventRecord(InitialData.getNewCaseID(), _ConnectionTPC, _Trx);
            m_EventRecord.setAcceptNum(InitialData.getNewAcceptNum());
            deptContrast = new DeptContrast(_connectionTpc, _trx);
            _mEventRecord = new EventRecord(initialData.GetNewCaseId(), _connectionTpc, _trx);
            _mEventRecord.AcceptNum = initialData.GetNewAcceptNum();
            m_Contrast.setAcceptNum(m_EventRecord.getAcceptNum());
            m_Contrast.setCaseID(m_EventRecord.getCaseID());
            m_Contrast.setCCSID(m_CCSRecord.getCCSID());
            if (!m_Contrast.Insert(_ConnectionTPC, _Trx))
            mContrast.SetAcceptNum(_mEventRecord.AcceptNum);
            mContrast.SetCaseId(_mEventRecord.CaseId);
            mContrast.SetCcsid(_mCcsRecord.CcsId);
            if (!mContrast.Insert(_connectionTpc, _trx))
            {
                _PLog.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
                _pLog.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
                if (_Trx.Connection.State.ToString().Equals("Open"))
                    _Trx.Rollback();
                if (_trx.Connection.State.ToString().Equals("Open"))
                    _trx.Rollback();
                return false;
            }
            // 設定用戶姓名
            m_EventRecord.setName(m_CCSRecord.getCustomerName());
            _mEventRecord.Name = _mCcsRecord.CustomerName;
            if (m_CCSRecord.getMeter() != null && m_CCSRecord.getMeter().Length != 0 )
            if (_mCcsRecord.Meter != null && _mCcsRecord.Meter.Length != 0)
            {
                // 需先找出部門代號,再找到該部門屬於哪一個巡修單位
                m_EventRecord.setMeter(m_CCSRecord.getMeter());
                int Tmp = Dept_Contrast.getDept_Code(m_CCSRecord.getMeter());
                _mEventRecord.Meter = _mCcsRecord.Meter;
                var tmp = deptContrast.getDept_Code(_mCcsRecord.Meter);
                if ( Tmp == -1 )
                    m_EventRecord.setDept(findoutDeptByAddr(m_CCSRecord, _Trx));
                if (tmp == -1)
                    _mEventRecord.Dept = FindoutDeptByAddr(_mCcsRecord, _trx);
                else
                    m_EventRecord.setDept(Tmp);
                    _mEventRecord.Dept = tmp;
                m_EventRecord.setFdrID(getFDRID(m_CCSRecord.getMeter()));
                _mEventRecord.FdrId = GetFdrid(_mCcsRecord.Meter);
            }
            else
            {
                // 當無用戶電號時,所找出的部門別不需再去找出屬於哪一個巡修股(findoutDeptByAddr會直接找到相對應的巡修股)
                int Dept = this.findoutDeptByAddr(m_CCSRecord, _Trx);
                m_EventRecord.setDept(Dept);
                var dept = FindoutDeptByAddr(_mCcsRecord, _trx);
                _mEventRecord.Dept = dept;
            }
            // 設定用戶電話號碼
            if (m_CCSRecord.getCustomerTel() != null)
            if (_mCcsRecord.CustomerTel != null)
            {
                m_EventRecord.setTel(m_CCSRecord.getCustomerTel());
                _mEventRecord.Tel = _mCcsRecord.CustomerTel;
            }
            // 檢查並設定用戶地址
            String m_Addr = m_CCSRecord.getADDR_City() + m_CCSRecord.getADDR_Town() + m_CCSRecord.getADDR_Road() + m_CCSRecord.getADDR_Other();
            var mAddr = _mCcsRecord.AddressCity + _mCcsRecord.AddressTown + _mCcsRecord.AddressRoad +
                        _mCcsRecord.AddressOther;
            if (m_Addr.Trim().Length == 0)
            if (mAddr.Trim().Length == 0)
            {
                _PLog.Error("CCS 案件受理程序初始化失敗...地址為空白");
                _pLog.Error("CCS 案件受理程序初始化失敗...地址為空白");
                if (_Trx.Connection.State.ToString().Equals("Open"))
                    _Trx.Rollback() ;
                if (_trx.Connection.State.ToString().Equals("Open"))
                    _trx.Rollback();
                return false;
            }
            m_EventRecord.setAddr(m_Addr);
            _mEventRecord.Addr = mAddr;
            // 設定事故原因
            m_EventRecord.setBrief(TransferEventBrief(m_CCSRecord.getEventBrief()));
            _mEventRecord.Brief = TransferEventBrief(_mCcsRecord.EventBrief);
            try
            {
                System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
                byte[] source = encoding.GetBytes(m_EventRecord.getBrief());
                var encoding = new ASCIIEncoding();
                var source = encoding.GetBytes(_mEventRecord.Brief);
                if (source.Length > 24)
                {
                    byte[] dest = new byte[24];
                    for (int i = 0; i < dest.Length; i++)
                    var dest = new byte[24];
                    for (var i = 0; i < dest.Length; i++)
                    {
                        dest[i] = source[i];
                    }
                    System.Text.Encoding enc = System.Text.Encoding.ASCII;
                    m_EventRecord.setBrief(enc.GetString(dest));
                    var enc = Encoding.ASCII;
                    _mEventRecord.Brief = enc.GetString(dest);
                    source = dest = null;
                }
            }
            catch (Exception)
            {
                m_EventRecord.setBrief("其他");
                _mEventRecord.Brief = "其他";
            }
            if (m_CCSRecord.getCCSID().StartsWith("A"))
                m_EventRecord.setLog("APP");
            else if (m_CCSRecord.getCCSID().StartsWith("W"))
                m_EventRecord.setLog("WEB");
            if (_mCcsRecord.CcsId.StartsWith("A"))
                _mEventRecord.Log = "APP";
            else if (_mCcsRecord.CcsId.StartsWith("W"))
                _mEventRecord.Log = "WEB";
            else
                m_EventRecord.setLog("CCS");
            m_EventRecord.setAcceptDate(m_CCSRecord.getAcceptTime());
                _mEventRecord.Log = "CCS";
            _mEventRecord.AcceptDate = _mCcsRecord.AcceptTime;
            // 設定用戶種類
            if (m_CCSRecord.getImportCase() == CCS.LocalVariable.isImportCase)
            if (_mCcsRecord.ImportCase == GlobalVariable.IsImportCase)
            {
                m_EventRecord.setImportCase(CCS.LocalVariable.isImportCase);
                m_EventRecord.setLevel(CCS.LocalVariable.A_Level); // default set A level
                _mEventRecord.ImportCase = GlobalVariable.IsImportCase;
                _mEventRecord.Level = GlobalVariable.ALevel; // default set A level
            }
            else
            {
                m_EventRecord.setImportCase(CCS.LocalVariable.NotImportCase);
                m_EventRecord.setLevel(CCS.LocalVariable.No_Level);
                _mEventRecord.ImportCase = GlobalVariable.NotImportCase;
                _mEventRecord.Level = GlobalVariable.NoLevel;
            }
            // 檢查字串中有無特殊字元' ,若有則取代為"
            if (m_CCSRecord.getNote() != null)
                m_EventRecord.setNote(m_CCSRecord.getNote().Replace('\'', '\"'));
            if (_mCcsRecord.Note != null)
                _mEventRecord.Note = _mCcsRecord.Note.Replace('\'', '\"');
            // 設定回覆姓名及電話
            if (m_CCSRecord.getRecallName() != null)
            if (_mCcsRecord.RecallName != null)
            {
                m_EventRecord.setisReCall(CCS.LocalVariable.isReCall);
                m_EventRecord.setReCallName(m_CCSRecord.getRecallName().Replace('\'', '\"'));
                m_EventRecord.setReCallTel(m_CCSRecord.getRecallTel());
                _mEventRecord.IsReCall = GlobalVariable.IsReCall;
                _mEventRecord.ReCallName = _mCcsRecord.RecallName.Replace('\'', '\"');
                _mEventRecord.ReCallTel = _mCcsRecord.RecallTel;
            }
            else
            {
                m_EventRecord.setisReCall(CCS.LocalVariable.NotReCall);
                _mEventRecord.IsReCall = GlobalVariable.NotReCall;
            }
            _PLog.Info("初始化EOS.EVENTRECORD成功!");
            _pLog.Info("初始化EOS.EVENTRECORD成功!");
            return true;
        }
@@ -518,134 +526,134 @@
        //    return true;
        //}
        private void checkCaseAlreadyExits(CCS.Object.EventQuery m_EventQuery)
        private void CheckCaseAlreadyExits(EventQuery mEventQuery)
        {
            String SqlStmt = "select ccsid from ccs.eventquery where ccsid='" + m_EventQuery.getCCSID() + "'";
            var sqlStmt = "select ccsid from ccs.eventquery where ccsid='" + mEventQuery.CcsId + "'";
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Trx);
            OracleDataReader reader = Command.ExecuteReader();
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            try
            {
                if (reader.Read())
                {
                    Command.CommandText = "delete from ccs.eventquery where ccsid='" + m_EventQuery.getCCSID() + "'";
                    Command.ExecuteNonQuery();
                    command.CommandText = "delete from ccs.eventquery where ccsid='" + mEventQuery.CcsId + "'";
                    command.ExecuteNonQuery();
                    Command.CommandText = "delete from ccs.num_contrast where ccsid='" + m_EventQuery.getCCSID() + "'";
                    Command.ExecuteNonQuery();
                    command.CommandText = "delete from ccs.num_contrast where ccsid='" + mEventQuery.CcsId + "'";
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                _PLog.Warn("Problems occur during checking process: " + ex.Message);
                _pLog.Warn("Problems occur during checking process: " + ex.Message);
            }
            finally
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
        }
        private int findoutDeptByAddr(CCS.Object.CCSRecord CCSRecord, OracleTransaction _Trx)
        private int FindoutDeptByAddr(CcsRecord ccsRecord, OracleTransaction trx)
        {
            CCS.Object.Addr_Contrast Addr_Contrast = new CCS.Object.Addr_Contrast(_ConnectionTPC, _Trx, _PLog);
            return Addr_Contrast.findDeptID(CCSRecord.getADDR_City(), CCSRecord.getADDR_Town(), CCSRecord.getADDR_Road());
            var addrContrast = new AddrContrast(_connectionTpc, trx, _pLog);
            return addrContrast.FindDeptId(ccsRecord.AddressCity, ccsRecord.AddressTown, ccsRecord.AddressRoad);
        }
        private String TransferEventBrief(int Code)
        private string TransferEventBrief(int code)
        {
            String Result = "";
            Result = CCS.CCSMain.CCSCodelist.getContent(CCS.LocalVariable.CCSEventBrief, Code);
            var result = "";
            result = GlobalVariable.CcsCodelist.GetContent(GlobalVariable.CcsEventBrief, code);
//            int MaxLength = this.getFieldLength("EOS", "EVENTRECORD", "EVENTBRIEF");
            //            int MaxLength = this.getFieldLength("EOS", "EVENTRECORD", "EVENTBRIEF");
//            if ( Result.ToCharArray().Length > MaxLength )
//                Result.ToCharArray
            //            if ( Result.ToCharArray().Length > MaxLength )
            //                Result.ToCharArray
            return Result;
            return result;
        }
        private int TransferDept(String DeptCode)
        private int TransferDept(string deptCode)
        {
            // 傳入部門的英文value(CONTENT),傳回相對應的keyid
            return CCS.CCSMain.CCSCodelist.getKeyID(CCS.LocalVariable.CCSDept, DeptCode);
            return GlobalVariable.CcsCodelist.GetKeyId(GlobalVariable.CcsDept, deptCode);
        }
        private int getRealCaseStatus(int ParentID)
        private int GetRealCaseStatus(int parentId)
        {
            String SqlStmt;
            int Status = CCS.LocalVariable.WaitForDespatch;
            string sqlStmt;
            var status = (int) CCSCaseState.WaitForDespatch;
            SqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + ParentID;
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
            OracleDataReader reader = Command.ExecuteReader();
            sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + parentId;
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            try
            {
                if (reader.Read())
                {
                    Status = Convert.ToInt32(reader["CaseStatus"].ToString());
                    status = Convert.ToInt32(reader["CaseStatus"].ToString());
                }
            }
            catch (Exception)
            {
                _PLog.Warn("無法取得正確之母案件狀態.");
                _pLog.Warn("無法取得正確之母案件狀態.");
            }
            finally
            {
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
            return Status;
            return status;
        }
        private void setDespatchInfo(int m_CaseID, CCS.Object.EventQuery m_EventQry)
        private void SetDespatchInfo(int mCaseId, EventQuery mEventQry)
        {
            String SqlStmt = "select despatchtime,assumefixtime,assumedtime_nth,delaytime,reason,eventlocation from eos.eventdespatch where caseid="
                    + m_CaseID;
            var sqlStmt = "select despatchtime,assumefixtime,assumedtime_nth,delaytime,reason,eventlocation from eos.eventdespatch where caseid="
                          + mCaseId;
            OracleCommand Command = null;
            OracleCommand command = null;
            OracleDataReader reader = null;
            try
            {
                Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Trx);
                reader = Command.ExecuteReader();
                command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    m_EventQry.setChangeTime(Convert.ToDateTime(reader["despatchtime"]).ToString("yyy/MM/dd HH:mm:ss"));
                    m_EventQry.setAssumedTime(Convert.ToDateTime(reader["assumefixtime"]).ToString("yyy/MM/dd HH:mm:ss"));
                    m_EventQry.setAssumedTime_Nth(Convert.ToDateTime(reader["assumedtime_nth"]).ToString("yyy/MM/dd HH:mm:ss"));
                    m_EventQry.setDelayTimes(Convert.ToInt32(reader["delaytime"].ToString()));
                    m_EventQry.setReason(reader["reason"].ToString());
                    m_EventQry.setEventLocation(reader["eventlocation"].ToString());
                    mEventQry.ChangeTime = Convert.ToDateTime(reader["despatchtime"]).ToString("yyy/MM/dd HH:mm:ss");
                    mEventQry.AssumedTime = Convert.ToDateTime(reader["assumefixtime"]).ToString("yyy/MM/dd HH:mm:ss");
                    mEventQry.AssumedTimeNth =
                        Convert.ToDateTime(reader["assumedtime_nth"]).ToString("yyy/MM/dd HH:mm:ss");
                    mEventQry.DelayTimes = Convert.ToInt32(reader["delaytime"].ToString());
                    mEventQry.Reason = reader["reason"].ToString();
                    mEventQry.EventLocation = reader["eventlocation"].ToString();
                }
            }
            catch (Exception)
            {
                _PLog.Warn("無法取得母案件派工資訊.");
                _pLog.Warn("無法取得母案件派工資訊.");
            }
            finally
            {
                if (reader != null )
                if (reader != null)
                    reader.Close();
                if (Command != null)
                    Command.Dispose();
                if (command != null)
                    command.Dispose();
            }
        }
        private void processSameCustomer(CCS.Object.CCSRecord m_CCSRecord, CCS.Object.EventRecord m_EventRec)
        private void ProcessSameCustomer(CcsRecord mCcsRecord, EventRecord mEventRec)
        {
            _PLog.Info("處理相同用戶重複來電...");
            _pLog.Info("處理相同用戶重複來電...");
            StringBuilder note = null;
            String SqlStmt = "select note from eos.eventrecord where caseid = " + m_EventRec.getTmpCaseID();
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
            OracleDataReader reader = Command.ExecuteReader();
            var sqlStmt = "select note from eos.eventrecord where caseid = " + mEventRec.TmpCaseId;
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            try
            {
@@ -658,27 +666,26 @@
                Console.WriteLine(e.StackTrace);
            }
            finally
            {
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
            if ((!note.ToString().EndsWith("|")) && (!note.ToString().Trim().Equals("")))
            if (!note.ToString().EndsWith("|") && !note.ToString().Trim().Equals(""))
                note.Append(" | ");
            if ((m_EventRec.getNote() != null) && (m_EventRec.getNote().Length != 0))
                note.Append(m_EventRec.getAcceptDate() + " " + m_EventRec.getNote());
            if ((mEventRec.Note!= null) && (mEventRec.Note.Length != 0))
                note.Append(mEventRec.AcceptDate+ " " + mEventRec.Note);
            else
                note.Append(m_EventRec.getAcceptDate() + " 用戶再次報案");
                note.Append(mEventRec.AcceptDate+ " 用戶再次報案");
            // 判斷重複來電的用戶最初成立的案件是否是由CCS受理
            bool acceptByCCS = false;
            var acceptByCcs = false;
            String SqlStmt1 = "select count(*) as count from ccs.num_contrast c,ccs.eventquery q where c.ccsid=q.ccsid and caseid="
                           + m_EventRec.getTmpCaseID();
            OracleCommand Command1 = new OracleCommand(SqlStmt1, _ConnectionTPC,_Trx);
            OracleDataReader reader1 = Command1.ExecuteReader();
            var sqlStmt1 = "select count(*) as count from ccs.num_contrast c,ccs.eventquery q where c.ccsid=q.ccsid and caseid="
                           + mEventRec.TmpCaseId;
            var command1 = new OracleCommand(sqlStmt1, _connectionTpc, _trx);
            var reader1 = command1.ExecuteReader();
            try
            {
@@ -686,7 +693,7 @@
                {
                    if (Convert.ToInt32(reader1["count"].ToString()) != 0)
                    {
                        acceptByCCS = true;
                        acceptByCcs = true;
                    }
                }
            }
@@ -696,36 +703,43 @@
            finally
            {
                reader1.Close();
                Command1.Dispose();
                command1.Dispose();
            }
            String updCCSEventQuery = null;
            string updCcsEventQuery = null;
            // 若先前案件由CCS受理,則直接從ccs.eventquery取出先前的案件狀態資料寫入
            if (acceptByCCS)
            if (acceptByCcs)
            {
                updCCSEventQuery = "update ccs.eventquery set (casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation) = (select casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation from ccs.eventquery where ccsid=(select ccsid from ccs.num_contrast where caseid="
                        + m_EventRec.getTmpCaseID() + " and rownum<2)) where CCSID='" + m_CCSRecord.getCCSID() + "'";
                updCcsEventQuery = "update ccs.eventquery set (casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation) = (select casestatus,changetime,handlingsummary,assumedtime,assumedtime_nth,delaytimes,reason,eventlocation from ccs.eventquery where ccsid=(select ccsid from ccs.num_contrast where caseid="
                                   + mEventRec.TmpCaseId+ " and rownum<2)) where CCSID='" + mCcsRecord.CcsId + "'";
                // 若非由CCS受理(OMS,Web)則從EOS的table中尋找先前案件的狀態資料
            }
            else
            {
                String accepttime = null, despatchtime = null, sponsortime = null, assumefixtime = null, assumedtime_nth = null, changetime = null, handling = null, reason = null, eventlocation = null;
                string accepttime = null,
                    despatchtime = null,
                    sponsortime = null,
                    assumefixtime = null,
                    assumedtimeNth = null,
                    changetime = null,
                    handling = null,
                    reason = null,
                    eventlocation = null;
                int casestatus = 0, delaytime = 0;
                OracleCommand Command2 = null;
                OracleCommand command2 = null;
                OracleDataReader reader2 = null;
                try
                {
                    var sqlStmt2 = "select  1,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid="
                                   + mEventRec.TmpCaseId                                   + " union "
                                   +
                                   "select  2,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid= (select parentid from eos.mergecase where caseid="
                                   + mEventRec.TmpCaseId+ ")";
                    String SqlStmt2 = "select  1,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid="
                                    + m_EventRec.getTmpCaseID()
                                    + " union "
                                    + "select  2,to_char(r.accepttime,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,to_char(d.despatchtime,'YYYY/MM/DD HH24:MI:SS') as DESPATCHTIME,to_char(s.reconditiontime,'YYYY/MM/DD HH24:MI:SS')SPONSORTIME,e.casestatus,s.handling,to_char(d.assumefixtime,'YYYY/MM/DD HH24:MI:SS') as assumefixtime,to_char(d.assumedtime_nth,'YYYY/MM/DD HH24:MI:SS') as assumedtime_nth,d.delaytime,d.reason,d.eventlocation from eos.eventrecord r,eos.events e,eos.eventdespatch d,eos.eventsponsor s where (r.caseid=e.caseid) and (r.caseid=d.caseid(+)) and (r.caseid=s.caseid(+)) and r.caseid= (select parentid from eos.mergecase where caseid="
                                    + m_EventRec.getTmpCaseID() + ")";
                    Command2 = new OracleCommand(SqlStmt2, _ConnectionTPC, _Trx);
                    reader2 = Command2.ExecuteReader();
                    command2 = new OracleCommand(sqlStmt2, _connectionTpc, _trx);
                    reader2 = command2.ExecuteReader();
                    while (reader2.Read())
                    {
@@ -733,11 +747,13 @@
                        despatchtime = reader2["DESPATCHTIME"].ToString();
                        sponsortime = reader2["SPONSORTIME"].ToString();
                        assumefixtime = reader2["ASSUMEFIXTIME"] == null ? "" : reader2["ASSUMEFIXTIME"].ToString();
                        assumedtime_nth = reader2["ASSUMEDTIME_NTH"] == null ? "" : reader2["ASSUMEDTIME_NTH"].ToString();
                        assumedtimeNth = reader2["ASSUMEDTIME_NTH"] == null ? "" : reader2["ASSUMEDTIME_NTH"].ToString();
                        handling = reader2["HANDLING"] == null ? "" : reader2["HANDLING"].ToString();
                        reason = reader2["REASON"] == null ? "" : reader2["REASON"].ToString();
                        casestatus = Convert.ToInt32(reader2["CASESTATUS"].ToString());
                        delaytime = reader2["DELAYTIME"].ToString().Length == 0 ? 0 : Convert.ToInt32(reader2["DELAYTIME"].ToString());
                        delaytime = reader2["DELAYTIME"].ToString().Length == 0
                            ? 0
                            : Convert.ToInt32(reader2["DELAYTIME"].ToString());
                        eventlocation = reader2["EVENTLOCATION"] == null ? "" : reader2["EVENTLOCATION"].ToString();
                    }
@@ -745,99 +761,104 @@
                    {
                        changetime = accepttime;
                    }
                    if (despatchtime != null && despatchtime.Length != 0)
                    if (!string.IsNullOrEmpty(despatchtime))
                    {
                        changetime = despatchtime;
                    }
                    if (sponsortime != null && sponsortime.Length != 0)
                    if (!string.IsNullOrEmpty(sponsortime))
                    {
                        changetime = sponsortime;
                    }
                    updCCSEventQuery = "update ccs.eventquery set casestatus=" + casestatus + ",changetime=to_date('" + changetime
                            + "','YYYY/MM/DD HH24:MI:SS'),handlingsummary='" + handling + "',assumedtime=to_date('" + assumefixtime
                            + "','YYYY/MM/DD HH24:MI:SS'),assumedtime_nth=to_date('" + assumedtime_nth + "','YYYY/MM/DD HH24:MI:SS'),delaytimes="
                            + delaytime + ",reason='" + reason + "',eventlocation='" + eventlocation + "' where ccsid='" + m_CCSRecord.getCCSID() + "'";
                    updCcsEventQuery = "update ccs.eventquery set casestatus=" + casestatus + ",changetime=to_date('" +
                                       changetime
                                       + "','YYYY/MM/DD HH24:MI:SS'),handlingsummary='" + handling +
                                       "',assumedtime=to_date('" + assumefixtime
                                       + "','YYYY/MM/DD HH24:MI:SS'),assumedtime_nth=to_date('" + assumedtimeNth +
                                       "','YYYY/MM/DD HH24:MI:SS'),delaytimes="
                                       + delaytime + ",reason='" + reason + "',eventlocation='" + eventlocation +
                                       "' where ccsid='" + mCcsRecord.CcsId + "'";
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                {
                    if (reader2 != null)
                        reader2.Close();
                    if (Command2 != null)
                        Command2.Dispose();
                    if (command2 != null)
                        command2.Dispose();
                }
            }
            String updEOSEventRecord = "update eos.eventrecord set note = '" + TrimToLimit(note.ToString(), 127)
                    + "' where caseid = " + m_EventRecord.getTmpCaseID();
            String updCCSNum_Contrast = "update ccs.num_contrast set(acceptnum,caseid) = (select acceptnum," + m_EventRec.getTmpCaseID()
                    + " from eos.eventrecord where caseid = " + m_EventRec.getTmpCaseID() + ") where ccsid='" + m_CCSRecord.getCCSID() + "'";
            var updEosEventRecord = "update eos.eventrecord set note = '" + TrimToLimit(note.ToString(), 127)
                                    + "' where caseid = " + _mEventRecord.TmpCaseId;
            var updCcsNumContrast = "update ccs.num_contrast set(acceptnum,caseid) = (select acceptnum," +
                                    mEventRec.TmpCaseId                                    + " from eos.eventrecord where caseid = " + mEventRec.TmpCaseId+
                                    ") where ccsid='" + mCcsRecord.CcsId + "'";
            OracleCommand ExeCommand = new OracleCommand(updCCSEventQuery, _ConnectionTPC,_Trx);
            var exeCommand = new OracleCommand(updCcsEventQuery, _connectionTpc, _trx);
            // 將用戶重複來電案件資料寫回CCS.EventQuery
            if (ExeCommand.ExecuteNonQuery() <= 0)
            if (exeCommand.ExecuteNonQuery() <= 0)
            {
                ExeCommand.Dispose();
                exeCommand.Dispose();
                if (_Trx.Connection.State.ToString().Equals("Open"))
                    _Trx.Rollback();
                if (_trx.Connection.State.ToString().Equals("Open"))
                    _trx.Rollback();
                _Trx.Dispose();
                _PLog.Error("Fail in write back to ccs.eventquery");
                _trx.Dispose();
                _pLog.Error("Fail in write back to ccs.eventquery");
                return;
            }
            ExeCommand.CommandText = updEOSEventRecord;
            exeCommand.CommandText = updEosEventRecord;
            // 將CCS案件備註資料Append到EOS.EventRecord
            if (ExeCommand.ExecuteNonQuery() <= 0)
            if (exeCommand.ExecuteNonQuery() <= 0)
            {
                ExeCommand.Dispose();
                exeCommand.Dispose();
                if (_Trx.Connection.State.ToString().Equals("Open"))
                    _Trx.Rollback();
                if (_trx.Connection.State.ToString().Equals("Open"))
                    _trx.Rollback();
                _Trx.Dispose();
                _PLog.Error("Fail in update eos.eventquery");
                _trx.Dispose();
                _pLog.Error("Fail in update eos.eventquery");
                return;
            }
            ExeCommand.CommandText = updCCSNum_Contrast;
            exeCommand.CommandText = updCcsNumContrast;
            // 寫入ccsid <=> caseid 到CCS.Num_Contrast
            if (ExeCommand.ExecuteNonQuery() <= 0)
            if (exeCommand.ExecuteNonQuery() <= 0)
            {
                ExeCommand.Dispose();
                if (_Trx.Connection.State.ToString().Equals("Open"))
                    _Trx.Rollback();
                exeCommand.Dispose();
                if (_trx.Connection.State.ToString().Equals("Open"))
                    _trx.Rollback();
                _Trx.Dispose();
                _PLog.Error("Fail in insert into ccs.num_contrast");
                _trx.Dispose();
                _pLog.Error("Fail in insert into ccs.num_contrast");
                return;
            }
            ExeCommand.Dispose();
            _Trx.Commit();
            _Trx.Dispose();
            _PLog.Info("CCS 案件受理程序結束");
            exeCommand.Dispose();
            _trx.Commit();
            _trx.Dispose();
            _pLog.Info("CCS 案件受理程序結束");
        }
        private String TrimToLimit(String Msg, int MaxLen)
        private string TrimToLimit(string msg, int maxLen)
        {
            try
            {
                if (Msg.Length <= 1)
                if (msg.Length <= 1)
                {
                    return "";
                }
                if (Msg.Length <= MaxLen)
                if (msg.Length <= maxLen)
                {
                    return Msg;
                    return msg;
                }
                Msg = Msg.Substring(Msg.IndexOf("|") + 1);
                return TrimToLimit(Msg, MaxLen);
                msg = msg.Substring(msg.IndexOf("|") + 1);
                return TrimToLimit(msg, maxLen);
            }
            catch (Exception ex)
            {
@@ -846,18 +867,18 @@
            }
        }
        private int getFieldLength(String Owner, String TableName, String FieldName)
        private int GetFieldLength(string owner, string tableName, string fieldName)
        {
            String SqlStmt = "SELECT DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE OWNER = '" + Owner + "' AND TABLE_NAME = '" + TableName + "' AND COLUMN_NAME = '" + FieldName + "'";
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
            OracleDataReader reader = Command.ExecuteReader();
            int MaxLength = -1;
            var sqlStmt = "SELECT DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE OWNER = '" + owner + "' AND TABLE_NAME = '" +
                          tableName + "' AND COLUMN_NAME = '" + fieldName + "'";
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            var maxLength = -1;
            try
            {
                if (reader.Read())
                    MaxLength = Convert.ToInt32(reader["DATA_LENGTH"].ToString());
                    maxLength = Convert.ToInt32(reader["DATA_LENGTH"].ToString());
            }
            catch (Exception e)
            {
@@ -867,55 +888,61 @@
            finally
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
            return MaxLength;
            return maxLength;
        }
        private int getFDRID(string Meter)
        private int GetFdrid(string meter)
        {
            string SqlStmt = "SELECT TRAN_CORD FROM BASEDB.METER WHERE METR_NUMB = '" + Meter + "'";
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
            OracleDataReader reader = Command.ExecuteReader();
            string TPCLID = "";
            int FDRID = 0;
            String group = "";
            var sqlStmt = "SELECT TRAN_CORD FROM BASEDB.METER WHERE METR_NUMB = '" + meter + "'";
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            var tpclid = "";
            var fdrid = 0;
            var group = "";
            try
            {
                if (reader.Read())
                    TPCLID = reader["TRAN_CORD"].ToString();
                    tpclid = reader["TRAN_CORD"].ToString();
                if ( TPCLID.Length == 0 )
                    return FDRID;
                if (tpclid.Length == 0)
                    return fdrid;
                if (TPCLID.Length > 11)
                if (tpclid.Length > 11)
                {
                    group = TPCLID.Substring(TPCLID.Length - 3);
                    TPCLID = TPCLID.Substring(0, 11).Trim();
                    SqlStmt = "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + TPCLID
                            + "' AND GROUP1='" + group + "' AND ROWNUM < 2)";
                    group = tpclid.Substring(tpclid.Length - 3);
                    tpclid = tpclid.Substring(0, 11).Trim();
                    sqlStmt =
                        "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" +
                        tpclid
                        + "' AND GROUP1='" + group + "' AND ROWNUM < 2)";
                }
                else
                {
                    SqlStmt = "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" + TPCLID
                            + "' AND ROWNUM < 2)";
                    sqlStmt =
                        "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 115 AND UFID = (SELECT UFID FROM BASEDB.SXFMR WHERE OWNERTPCLID = '" +
                        tpclid
                        + "' AND ROWNUM < 2)";
                }
                Command.CommandText = SqlStmt;
                reader = Command.ExecuteReader();
                command.CommandText = sqlStmt;
                reader = command.ExecuteReader();
                if (reader.Read())
                    FDRID = Convert.ToInt32(reader["FDR1"].ToString());
                    fdrid = Convert.ToInt32(reader["FDR1"].ToString());
                else
                {
                    SqlStmt = "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 107 AND UFID = (SELECT UFID FROM BASEDB.HICUSTOMER WHERE OWNERTPCLID = '" + TPCLID + "' AND ROWNUM < 2)";
                    sqlStmt =
                        "SELECT FDR1 FROM BASEDB.CONNECTIVITY WHERE FSC = 107 AND UFID = (SELECT UFID FROM BASEDB.HICUSTOMER WHERE OWNERTPCLID = '" +
                        tpclid + "' AND ROWNUM < 2)";
                    Command.CommandText = SqlStmt;
                    reader = Command.ExecuteReader();
                    command.CommandText = sqlStmt;
                    reader = command.ExecuteReader();
                    if (reader.Read())
                        FDRID = Convert.ToInt32(reader["FDR1"].ToString());
                        fdrid = Convert.ToInt32(reader["FDR1"].ToString());
                }
            }
            catch (Exception e)
@@ -926,23 +953,23 @@
            finally
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
            return FDRID;
            return fdrid;
        }
        private int getTraceCount(String CCSID)
        private int GetTraceCount(string ccsid)
        {
            String SqlStmt = "SELECT TRACECOUNT FROM CCS.TRACECOUNTS WHERE CCSID = '" + CCSID + "'";
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
            OracleDataReader reader = Command.ExecuteReader();
            int Count = 0;
            var sqlStmt = "SELECT TRACECOUNT FROM CCS.TRACECOUNTS WHERE CCSID = '" + ccsid + "'";
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            var reader = command.ExecuteReader();
            var count = 0;
            try
            {
                if (reader.Read())
                    Count = Convert.ToInt32(reader["TRACECOUNT"].ToString());
                    count = Convert.ToInt32(reader["TRACECOUNT"].ToString());
            }
            catch (Exception e)
            {
@@ -952,29 +979,28 @@
            finally
            {
                reader.Close();
                Command.Dispose();
                command.Dispose();
            }
            return Count;
            return count;
        }
        private bool UpdateTraceCount(String CCSID,bool isNew)
        private bool UpdateTraceCount(string ccsid, bool isNew)
        {
            String SqlStmt ;
            string sqlStmt;
            if (isNew)
                SqlStmt = "INSERT INTO CCS.TRACECOUNTS (CCSID,TRACECOUNT) VALUES ('" + CCSID + "',1)";
                sqlStmt = "INSERT INTO CCS.TRACECOUNTS (CCSID,TRACECOUNT) VALUES ('" + ccsid + "',1)";
            else
                SqlStmt = "UPDATE CCS.TRACECOUNTS SET TRACECOUNT = TRACECOUNT + 1 WHERE CCSID = '" + CCSID + "'";
            OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
                sqlStmt = "UPDATE CCS.TRACECOUNTS SET TRACECOUNT = TRACECOUNT + 1 WHERE CCSID = '" + ccsid + "'";
            var command = new OracleCommand(sqlStmt, _connectionTpc, _trx);
            try
            {
                int Result = Command.ExecuteNonQuery();
                var result = command.ExecuteNonQuery();
                if (Result == 1)
                if (result == 1)
                    return true;
            }
            catch (Exception e)
            {
@@ -983,11 +1009,9 @@
            }
            finally
            {
                Command.Dispose();
                command.Dispose();
            }
            return false;
        }
    }
}
}