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.Runtime.CompilerServices; using System.Data.OracleClient; namespace CCSTrace.CCS.Function { public class InitialEventData { private String m_AcceptNum = ""; private int m_CaseID = 0; private int m_Year = 0; private bool m_ChangeYear = false; private String m_AcceptTime = ""; private RecordLog _PLog; private OracleConnection _ConnectionTPC; //New CaseID and New AcceptNum must be seen by others,so it need not controled by transaction [MethodImpl(MethodImplOptions.Synchronized)] public InitialEventData(OracleConnection _Conn, RecordLog _Log) { _ConnectionTPC = _Conn; _PLog = _Log; String SqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR,TO_CHAR(SYSDATE,'YYYY/MM/DD') as ACCEPTTIME FROM EOS.EVENTNUM"; OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC); OracleDataReader reader = Command.ExecuteReader(); try { if (reader.Read()) { m_AcceptNum = reader["ACCEPTNUM"].ToString(); m_CaseID = Convert.ToInt32(reader["CASEID"].ToString()); m_Year = Convert.ToInt32(reader["YEAR"].ToString()); m_AcceptTime = reader["ACCEPTTIME"].ToString(); } else { _PLog.Error("起始號碼資料遺失!"); return; } } catch (Exception e) { _PLog.Error("Problems occur when Initializing EventData: " + e.Message); Console.WriteLine(e.StackTrace); return; } finally { reader.Close(); Command.Dispose(); } CheckAcceptNum(); while (!UpdateDataBase(m_ChangeYear)) { this.RegetNumber(); CheckAcceptNum(); } } public int getNewCaseID() { return this.m_CaseID; } public String getNewAcceptNum() { return this.m_AcceptNum; } private bool UpdateDataBase(bool m_ChangeYear) { String SqlStmt; bool m_Result = false; if (m_ChangeYear) SqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(m_AcceptNum) + 1).ToString() + "',CASEID = " + (m_CaseID + 1) + ",YEAR = " + (m_Year + 1) + " WHERE CASEID = " + this.m_CaseID; else SqlStmt = "UPDATE EOS.EVENTNUM SET ACCEPTNUM = '" + (Convert.ToInt32(m_AcceptNum) + 1).ToString() + "',CASEID = " + (m_CaseID + 1) + " WHERE CASEID = " + this.m_CaseID; OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC); try { if (Command.ExecuteNonQuery() > 0) m_Result = true; } catch (Exception e) { _PLog.Error("Problems occur during EventNumCreating: " + e.Message); Console.WriteLine(e.StackTrace); throw e; } finally { Command.Dispose(); } return m_Result; } private void CheckAcceptNum() { int NowYear = Convert.ToInt32(m_AcceptTime.Substring(0, 4)) - 1911; int NowMonth = Convert.ToInt32(m_AcceptTime.Substring(5, 2)); String Tmp = this.m_AcceptNum; if (Convert.ToInt32(Tmp.Substring(0, 3)) == NowYear) { if (Convert.ToInt32(Tmp.Substring(3, 2)) != NowMonth) { // 新月份 if (NowMonth < 10) m_AcceptNum = NowYear.ToString() + "0" + NowMonth.ToString() + "0001"; else m_AcceptNum = NowYear.ToString() + NowMonth.ToString() + "0001"; } } else { m_AcceptNum = NowYear.ToString() + "010001"; // 新年度 this.m_ChangeYear = true; } if ( !m_ChangeYear) { } } private void RegetNumber() { String SqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR FROM EOS.EVENTNUM"; OracleCommand Command = new OracleCommand(SqlStmt, _ConnectionTPC); OracleDataReader reader = Command.ExecuteReader(); try { if (reader.Read()) { m_AcceptNum = reader["ACCEPTNUM"].ToString(); m_CaseID = Convert.ToInt32(reader["CASEID"].ToString()); m_Year = Convert.ToInt32(reader["YEAR"].ToString()); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } finally { reader.Close(); Command.Dispose(); } } } }