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;
|
|
namespace CCSTrace.CCS
|
{
|
public delegate void ThreadEndEventHandler(object sender, ThreadEndEvent e);
|
|
public class ProcessEvent
|
{
|
public event ThreadEndEventHandler ThreadFinish;
|
|
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;
|
|
public ProcessEvent(Object.CCSRecord _Record, OracleConnection _Conn, String _traceConnection)
|
{
|
m_CCSRecord = _Record;
|
_ConnectionTPC = _Conn;
|
_traceConnectionString = _traceConnection;
|
_PLog = new RecordLog(CCS.LocalVariable.CCS_ListPath + _Record.getCCSID() + ".txt");
|
}
|
|
public void Run()
|
{
|
bool SendMail = false;
|
|
try
|
{
|
int FDRID = getFDRID(m_CCSRecord.getMeter());
|
|
if (FDRID != 0) //有饋線代號資料的案件才需比對同饋線上有無案件正在處理
|
{
|
if (CCSMain.ProcessFDR.ContainsKey(FDRID.ToString()))
|
{
|
CCSMain.WaitingCases.Add(new String[] { m_CCSRecord.getCCSID(), FDRID.ToString() });
|
return;
|
}
|
else
|
CCSMain.ProcessFDR.Add(FDRID.ToString(), null); //將要處理的案件的饋線別加入處理中饋線集合
|
}
|
|
/* int TraceCount = this.getTraceCount(m_CCSRecord.getCCSID());
|
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 ( Return_Status )
|
{
|
case CCS.LocalVariable.Success:
|
_PLog.Info("案件過濾完畢....");
|
Process(CCS.LocalVariable.Success);
|
break;
|
case CCS.LocalVariable.NoMeter:
|
_PLog.Info("案件過濾完畢,用戶無電號....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
break;
|
case CCS.LocalVariable.SameCustomer:
|
_PLog.Info("相同用戶重複來電....");
|
processSameCustomer(this.m_CCSRecord, this.m_EventRecord);
|
break;
|
case CCS.LocalVariable.NoSupplyElc:
|
_PLog.Warn("該饋線未供電,無法作事故案件追蹤合併....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
break;
|
case CCS.LocalVariable.No_Sxfmr:
|
_PLog.Warn("該案件無變壓器....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
break;
|
case CCS.LocalVariable.CaseTypeChanged:
|
_PLog.Info("變更案件狀態....");
|
Process(CCS.LocalVariable.CaseTypeChanged);
|
break;
|
case CCS.LocalVariable.Trace_Failure:
|
_PLog.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
break;
|
default:
|
int TraceCount = this.getTraceCount(m_CCSRecord.getCCSID());
|
|
if ( TraceCount < 2 )
|
{
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_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 (TraceCount == 0)
|
UpdateTraceCount(m_CCSRecord.getCCSID(), true);
|
else
|
UpdateTraceCount(m_CCSRecord.getCCSID(), false);
|
|
}
|
else
|
{
|
UpdateTraceCount(m_CCSRecord.getCCSID(), false);
|
if (Return_Status == CCS.LocalVariable.Trace_Counts_3)
|
m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)");
|
|
_PLog.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
SendMail = true;
|
}
|
break;
|
/* switch (TraceCount)
|
{
|
case 0:
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_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("此事故案件不被受理....");
|
|
|
UpdateTraceCount(m_CCSRecord.getCCSID(), true);
|
break;
|
case 1:
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
|
UpdateTraceCount(m_CCSRecord.getCCSID(), false);
|
|
break;
|
default://追蹤次數超過3次,改為非A類不追蹤合併
|
UpdateTraceCount(m_CCSRecord.getCCSID(), false);
|
if (Return_Status == CCS.LocalVariable.Trace_Counts_3)
|
m_EventRecord.setNote(m_EventRecord.getNote() + "(本案用戶供電資料追蹤失敗)");
|
|
_PLog.Error("追蹤次數3次,無法追蹤到故障設備,以一般無電號案件方式受理....");
|
m_EventRecord.setTrace_Finish(CCS.LocalVariable.Trace_Finish);
|
Process(CCS.LocalVariable.NoMeter);
|
SendMail = true;
|
break;
|
}
|
|
break;
|
case CCS.LocalVariable.CaseTransfer:
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
_PLog.Error("案件已移轉,此事故案件不被受理....");
|
break;
|
case CCS.LocalVariable.FDRLocked:
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
_PLog.Error("饋線被鎖定,此事故案件不被受理....");
|
break;
|
case CCS.LocalVariable.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());//將處理完的案件的饋線別從處理中饋線集合中移除
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine("Error = " + e.Message + ". CCSID = " + m_CCSRecord.getCCSID());
|
_PLog.Error("Error = " + e.Message + ". CCSID = " + m_CCSRecord.getCCSID());
|
|
if (_Trx != null)
|
{
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
}
|
|
if ( m_EventRecord!= null && m_EventRecord.getFdrID() != 0)
|
CCSMain.ProcessFDR.Remove(m_EventRecord.getFdrID().ToString());//將處理完的案件的饋線別從處理中饋線集合中移除
|
//throw e;
|
}
|
finally
|
{
|
_PLog.Close();
|
CCSMain.ProcessCases.Remove(m_CCSRecord.getCCSID());
|
this.OnThreadFinish(new ThreadEndEvent(_ConnectionTPC));
|
}
|
|
if ( SendMail )
|
new CCS.Function.MailService(_ConnectionTPC).SendMail(m_CCSRecord.getCCSID());
|
|
}
|
|
private void Process(int Kind)
|
{
|
CCS.FinishEvent FinishEvent = new CCS.FinishEvent();
|
|
try
|
{
|
if (FinishEvent.Finish(Kind, m_EventRecord, _ConnectionTPC, _Trx, _PLog))
|
{
|
_PLog.Info("OMS資料更新成功!");
|
if (UpdateCCSData(m_EventRecord, m_CCSRecord, CCS.LocalVariable.WaitForDespatch))
|
{
|
_PLog.Info("CCS資料更新成功!");
|
}
|
else
|
{
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_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());
|
}
|
else
|
{
|
// 有錯誤需要RollBack
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose(); ;
|
_PLog.Error("OMS資料更新程序發生錯誤!");
|
}
|
_PLog.Info("CCS 案件受理程序結束.");
|
}
|
catch (Exception e)
|
{
|
throw e;
|
}
|
|
}
|
|
protected virtual void OnThreadFinish(ThreadEndEvent e)
|
{
|
if (ThreadFinish != null)
|
{
|
ThreadFinish(this, e);
|
}
|
}
|
|
private bool UpdateCCSData(CCS.Object.EventRecord m_Record, CCS.Object.CCSRecord m_CCSRecord, int CaseStatus)
|
{
|
_PLog.Info("進行CCS資料更新程序...");
|
CCS.Object.EventQuery EventQuery = new CCS.Object.EventQuery();
|
int Status = CaseStatus;
|
// 設定CCSID
|
EventQuery.setCCSID(m_CCSRecord.getCCSID());
|
// 設定受理時間
|
EventQuery.setChangeTime(m_CCSRecord.getAcceptTime());
|
// 設定用戶電號
|
if (m_CCSRecord.getMeter() != null)
|
{
|
EventQuery.setMeter(m_CCSRecord.getMeter());
|
}
|
// 如果該案件為子案件,需找出母案件的casestatus來insert eos.eventquery
|
// 若母案件已派工,需一併紀錄預計復電時間等資訊
|
if (m_Record.getParentID() != 0)
|
{
|
Status = this.getRealCaseStatus(m_Record.getParentID()) == CCS.LocalVariable.WaitForSponsor ? CCS.LocalVariable.EventDespatched
|
: CCS.LocalVariable.WaitForDespatch;
|
if (Status == CCS.LocalVariable.EventDespatched)
|
{
|
setDespatchInfo(m_Record.getParentID(), EventQuery);
|
}
|
}
|
// 若此案件為專案案件升級為母案件,則必須判斷原先案件是否已經派工
|
if ((m_CCSRecord.getImportCase() == CCS.LocalVariable.isImportCase) && (m_Record.isDespatched()))
|
{
|
Status = CCS.LocalVariable.EventDespatched;
|
setDespatchInfo(m_Record.getCaseID(), EventQuery);
|
}
|
EventQuery.setCaseStatus(Status);
|
// 更新CCS.EventQuery
|
if (!EventQuery.Update(_PLog,_ConnectionTPC,_Trx))
|
{
|
_PLog.Error("更新ccs.eventquery失敗!");
|
return false;
|
}
|
else
|
{
|
_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成功!");
|
}
|
return true;
|
}
|
|
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;
|
|
// Being Transaction
|
_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());
|
|
m_Contrast.setAcceptNum(m_EventRecord.getAcceptNum());
|
m_Contrast.setCaseID(m_EventRecord.getCaseID());
|
m_Contrast.setCCSID(m_CCSRecord.getCCSID());
|
|
if (!m_Contrast.Insert(_ConnectionTPC, _Trx))
|
{
|
_PLog.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
|
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
return false;
|
}
|
|
// 設定用戶姓名
|
m_EventRecord.setName(m_CCSRecord.getCustomerName());
|
|
if (m_CCSRecord.getMeter() != null && m_CCSRecord.getMeter().Length != 0 )
|
{
|
// 需先找出部門代號,再找到該部門屬於哪一個巡修單位
|
m_EventRecord.setMeter(m_CCSRecord.getMeter());
|
int Tmp = Dept_Contrast.getDept_Code(m_CCSRecord.getMeter());
|
|
if ( Tmp == -1 )
|
m_EventRecord.setDept(findoutDeptByAddr(m_CCSRecord, _Trx));
|
else
|
m_EventRecord.setDept(Tmp);
|
|
m_EventRecord.setFdrID(getFDRID(m_CCSRecord.getMeter()));
|
}
|
else
|
{
|
// 當無用戶電號時,所找出的部門別不需再去找出屬於哪一個巡修股(findoutDeptByAddr會直接找到相對應的巡修股)
|
int Dept = this.findoutDeptByAddr(m_CCSRecord, _Trx);
|
m_EventRecord.setDept(Dept);
|
}
|
// 設定用戶電話號碼
|
if (m_CCSRecord.getCustomerTel() != null)
|
{
|
m_EventRecord.setTel(m_CCSRecord.getCustomerTel());
|
}
|
// 檢查並設定用戶地址
|
String m_Addr = m_CCSRecord.getADDR_City() + m_CCSRecord.getADDR_Town() + m_CCSRecord.getADDR_Road() + m_CCSRecord.getADDR_Other();
|
|
if (m_Addr.Trim().Length == 0)
|
{
|
_PLog.Error("CCS 案件受理程序初始化失敗...地址為空白");
|
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback() ;
|
|
return false;
|
}
|
|
m_EventRecord.setAddr(m_Addr);
|
// 設定事故原因
|
m_EventRecord.setBrief(TransferEventBrief(m_CCSRecord.getEventBrief()));
|
try
|
{
|
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
|
byte[] source = encoding.GetBytes(m_EventRecord.getBrief());
|
|
if (source.Length > 24)
|
{
|
byte[] dest = new byte[24];
|
for (int i = 0; i < dest.Length; i++)
|
{
|
dest[i] = source[i];
|
}
|
|
System.Text.Encoding enc = System.Text.Encoding.ASCII;
|
m_EventRecord.setBrief(enc.GetString(dest));
|
source = dest = null;
|
}
|
}
|
catch (Exception)
|
{
|
m_EventRecord.setBrief("其他");
|
}
|
|
if (m_CCSRecord.getCCSID().StartsWith("A"))
|
m_EventRecord.setLog("APP");
|
else if (m_CCSRecord.getCCSID().StartsWith("W"))
|
m_EventRecord.setLog("WEB");
|
else
|
m_EventRecord.setLog("CCS");
|
|
m_EventRecord.setAcceptDate(m_CCSRecord.getAcceptTime());
|
|
// 設定用戶種類
|
if (m_CCSRecord.getImportCase() == CCS.LocalVariable.isImportCase)
|
{
|
m_EventRecord.setImportCase(CCS.LocalVariable.isImportCase);
|
m_EventRecord.setLevel(CCS.LocalVariable.A_Level); // default set A level
|
}
|
else
|
{
|
m_EventRecord.setImportCase(CCS.LocalVariable.NotImportCase);
|
m_EventRecord.setLevel(CCS.LocalVariable.No_Level);
|
}
|
|
// 檢查字串中有無特殊字元' ,若有則取代為"
|
if (m_CCSRecord.getNote() != null)
|
m_EventRecord.setNote(m_CCSRecord.getNote().Replace('\'', '\"'));
|
|
|
// 設定回覆姓名及電話
|
if (m_CCSRecord.getRecallName() != null)
|
{
|
m_EventRecord.setisReCall(CCS.LocalVariable.isReCall);
|
m_EventRecord.setReCallName(m_CCSRecord.getRecallName().Replace('\'', '\"'));
|
m_EventRecord.setReCallTel(m_CCSRecord.getRecallTel());
|
}
|
else
|
{
|
m_EventRecord.setisReCall(CCS.LocalVariable.NotReCall);
|
}
|
|
_PLog.Info("初始化EOS.EVENTRECORD成功!");
|
return true;
|
}
|
|
//private bool initialCCSInfo(CCS.Object.EventQuery m_EventQuery, CCS.Object.NumberContrast m_Contrast)
|
//{
|
// checkCaseAlreadyExits(m_EventQuery);
|
// if (!m_EventQuery.Insert(_PLog, _ConnectionTPC, _Trx))
|
// {
|
// _PLog.Error("初始化寫入CCS.EventQuery時發生錯誤!");
|
// return false;
|
// }
|
// if (!m_Contrast.Insert(_ConnectionTPC, _Trx))
|
// {
|
// _PLog.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
|
// return false;
|
// }
|
// return true;
|
//}
|
|
private void checkCaseAlreadyExits(CCS.Object.EventQuery m_EventQuery)
|
{
|
String SqlStmt = "select ccsid from ccs.eventquery where ccsid='" + m_EventQuery.getCCSID() + "'";
|
|
OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC,_Trx);
|
OracleDataReader 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.num_contrast where ccsid='" + m_EventQuery.getCCSID() + "'";
|
Command.ExecuteNonQuery();
|
}
|
}
|
catch (Exception ex)
|
{
|
_PLog.Warn("Problems occur during checking process: " + ex.Message);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
}
|
|
private int findoutDeptByAddr(CCS.Object.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());
|
}
|
|
private String TransferEventBrief(int Code)
|
{
|
String Result = "";
|
Result = CCS.CCSMain.CCSCodelist.getContent(CCS.LocalVariable.CCSEventBrief, Code);
|
|
// int MaxLength = this.getFieldLength("EOS", "EVENTRECORD", "EVENTBRIEF");
|
|
// if ( Result.ToCharArray().Length > MaxLength )
|
// Result.ToCharArray
|
|
return Result;
|
}
|
|
private int TransferDept(String DeptCode)
|
{
|
// 傳入部門的英文value(CONTENT),傳回相對應的keyid
|
return CCS.CCSMain.CCSCodelist.getKeyID(CCS.LocalVariable.CCSDept, DeptCode);
|
}
|
|
private int getRealCaseStatus(int ParentID)
|
{
|
String SqlStmt;
|
int Status = CCS.LocalVariable.WaitForDespatch;
|
|
SqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + ParentID;
|
OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC, _Trx);
|
OracleDataReader reader = Command.ExecuteReader();
|
|
|
try
|
{
|
if (reader.Read())
|
{
|
Status = Convert.ToInt32(reader["CaseStatus"].ToString());
|
}
|
}
|
catch (Exception)
|
{
|
_PLog.Warn("無法取得正確之母案件狀態.");
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
return Status;
|
}
|
|
private void setDespatchInfo(int m_CaseID, CCS.Object.EventQuery m_EventQry)
|
{
|
String SqlStmt = "select despatchtime,assumefixtime,assumedtime_nth,delaytime,reason,eventlocation from eos.eventdespatch where caseid="
|
+ m_CaseID;
|
|
OracleCommand Command = null;
|
OracleDataReader reader = null;
|
|
try
|
{
|
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());
|
}
|
}
|
catch (Exception)
|
{
|
_PLog.Warn("無法取得母案件派工資訊.");
|
}
|
finally
|
{
|
if (reader != null )
|
reader.Close();
|
|
if (Command != null)
|
Command.Dispose();
|
}
|
}
|
|
private void processSameCustomer(CCS.Object.CCSRecord m_CCSRecord, CCS.Object.EventRecord m_EventRec)
|
{
|
_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();
|
|
try
|
{
|
if (reader.Read())
|
note = new StringBuilder(reader["note"] == null ? "" : reader["note"].ToString().Trim());
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
|
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());
|
else
|
note.Append(m_EventRec.getAcceptDate() + " 用戶再次報案");
|
|
|
// 判斷重複來電的用戶最初成立的案件是否是由CCS受理
|
bool 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();
|
|
try
|
{
|
if (reader1.Read())
|
{
|
if (Convert.ToInt32(reader1["count"].ToString()) != 0)
|
{
|
acceptByCCS = true;
|
}
|
}
|
}
|
catch (Exception)
|
{
|
}
|
finally
|
{
|
reader1.Close();
|
Command1.Dispose();
|
}
|
|
String updCCSEventQuery = null;
|
// 若先前案件由CCS受理,則直接從ccs.eventquery取出先前的案件狀態資料寫入
|
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() + "'";
|
// 若非由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;
|
int casestatus = 0, delaytime = 0;
|
|
OracleCommand Command2 = null;
|
OracleDataReader reader2 = null;
|
|
try
|
{
|
|
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();
|
|
while (reader2.Read())
|
{
|
accepttime = reader2["ACCEPTTIME"].ToString();
|
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();
|
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());
|
eventlocation = reader2["EVENTLOCATION"] == null ? "" : reader2["EVENTLOCATION"].ToString();
|
}
|
|
if (accepttime != null)
|
{
|
changetime = accepttime;
|
}
|
if (despatchtime != null && despatchtime.Length != 0)
|
{
|
changetime = despatchtime;
|
}
|
if (sponsortime != null && sponsortime.Length != 0)
|
{
|
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() + "'";
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
}
|
finally
|
{
|
if (reader2 != null)
|
reader2.Close();
|
|
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() + "'";
|
|
OracleCommand ExeCommand = new OracleCommand(updCCSEventQuery, _ConnectionTPC,_Trx);
|
// 將用戶重複來電案件資料寫回CCS.EventQuery
|
if (ExeCommand.ExecuteNonQuery() <= 0)
|
{
|
ExeCommand.Dispose();
|
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
_PLog.Error("Fail in write back to ccs.eventquery");
|
return;
|
}
|
|
ExeCommand.CommandText = updEOSEventRecord;
|
// 將CCS案件備註資料Append到EOS.EventRecord
|
if (ExeCommand.ExecuteNonQuery() <= 0)
|
{
|
ExeCommand.Dispose();
|
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
_PLog.Error("Fail in update eos.eventquery");
|
return;
|
}
|
|
ExeCommand.CommandText = updCCSNum_Contrast;
|
// 寫入ccsid <=> caseid 到CCS.Num_Contrast
|
if (ExeCommand.ExecuteNonQuery() <= 0)
|
{
|
ExeCommand.Dispose();
|
if (_Trx.Connection.State.ToString().Equals("Open"))
|
_Trx.Rollback();
|
|
_Trx.Dispose();
|
_PLog.Error("Fail in insert into ccs.num_contrast");
|
return;
|
}
|
|
ExeCommand.Dispose();
|
_Trx.Commit();
|
_Trx.Dispose();
|
_PLog.Info("CCS 案件受理程序結束");
|
}
|
|
private String TrimToLimit(String Msg, int MaxLen)
|
{
|
try
|
{
|
if (Msg.Length <= 1)
|
{
|
return "";
|
}
|
if (Msg.Length <= MaxLen)
|
{
|
return Msg;
|
}
|
Msg = Msg.Substring(Msg.IndexOf("|") + 1);
|
return TrimToLimit(Msg, MaxLen);
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine(ex.StackTrace);
|
return "";
|
}
|
}
|
|
|
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;
|
|
try
|
{
|
if (reader.Read())
|
MaxLength = Convert.ToInt32(reader["DATA_LENGTH"].ToString());
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
|
return MaxLength;
|
}
|
|
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 = "";
|
try
|
{
|
if (reader.Read())
|
TPCLID = reader["TRAN_CORD"].ToString();
|
|
if ( TPCLID.Length == 0 )
|
return FDRID;
|
|
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)";
|
}
|
else
|
{
|
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();
|
|
if (reader.Read())
|
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)";
|
|
Command.CommandText = SqlStmt;
|
reader = Command.ExecuteReader();
|
|
if (reader.Read())
|
FDRID = Convert.ToInt32(reader["FDR1"].ToString());
|
}
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
|
return FDRID;
|
}
|
|
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;
|
|
try
|
{
|
if (reader.Read())
|
Count = Convert.ToInt32(reader["TRACECOUNT"].ToString());
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
reader.Close();
|
Command.Dispose();
|
}
|
|
return Count;
|
}
|
|
private bool UpdateTraceCount(String CCSID,bool isNew)
|
{
|
String SqlStmt ;
|
|
if (isNew)
|
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);
|
|
try
|
{
|
int Result = Command.ExecuteNonQuery();
|
|
if (Result == 1)
|
return true;
|
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e.Message);
|
Console.WriteLine(e.StackTrace);
|
}
|
finally
|
{
|
Command.Dispose();
|
}
|
return false;
|
}
|
|
|
}
|
}
|