public DataTable QuerySchema() { try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); return dbo.doQuerySchema(); } catch (Exception ex) { throw ex; } }
/// <summary> /// 查詢類別及日期是否已存在 /// </summary> /// <param name="ParameterList"></param> /// <returns></returns> public Boolean QueryExistDB(ArrayList ParameterList) { try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); return dbo.doQueryExistDB(ParameterList); } catch (Exception ex) { throw ex; } }
/// <summary> /// 查詢日期資料 /// </summary> /// <param name="ParameterList"></param> /// <param name="RowCountLimit"></param> /// <returns></returns> public DataTable QueryByFind(ArrayList ParameterList, int RowCountLimit) { try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); return dbo.doQueryByFind(ParameterList, RowCountLimit); } catch (Exception ex) { throw ex; } }
/// <summary> /// 處理存檔BCO /// </summary> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳更新成功與否</returns> public bool doSave(DataTable newDt, DataTable oldDt, DbTransaction RootDBT) { #region bool IsRootTranscation = false; bool bResult = true; try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion if (oldDt == null || oldDt.Rows.Count == 0) { foreach (DataRow dRow in newDt.Rows) { #region 在舊來源無資料,所以要呼叫 insert 明細 dbo.doCreate(dRow, DBT); #endregion } } else { if (newDt != null) { #region 在newDt逐筆檢查資料,判斷是否有新增、修改的項目 foreach (DataRow dRow in newDt.Rows) { try { if (Convert.ToString(dRow.RowState) != Convert.ToString("Deleted")) { bool storeExistFlag = false; foreach (DataRow dRow_Oringinal in oldDt.Rows) { if (dRow["ID"].ToString() == dRow_Oringinal["ID"].ToString()) { if (dRow["STORE_TYPE"].ToString() != dRow_Oringinal["STORE_TYPE"].ToString() || dRow["STORE_HOLIDAY"].ToString() != dRow_Oringinal["STORE_HOLIDAY"].ToString() ) { if (!dbo.doQueryExistDB(dRow)) { dbo.doUpdate(dRow, DBT); } } storeExistFlag = true; break; } } if (!storeExistFlag) { if (!dbo.doQueryExistDB(dRow)) { dbo.doCreate(dRow, DBT); } } } } catch (Exception ex) { throw ex; } } #endregion } #region 在oldDt逐筆檢查資料,判斷是否存在newDt中,如無則刪除的項目 foreach (DataRow dRow_Oringinal in oldDt.Rows) { try { bool storeExistFlag = false; foreach (DataRow dRow in newDt.Rows) { if (Convert.ToString(dRow.RowState) != Convert.ToString("Deleted")) { if (dRow["ID"].ToString() == dRow_Oringinal["ID"].ToString()) { storeExistFlag = true; break; } } } if (!storeExistFlag) { #region 在新來源找不到此筆資料,所以要呼叫 delete 明細 dbo.doDelete(dRow_Oringinal, DBT); #endregion } } catch (Exception ex) { throw ex; } } #endregion } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion return bResult; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw ex; } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } #endregion }
/// <summary> /// 目的:查詢上傳後的成功筆數 /// Table:VDS_STM_STORE_HOLIDAY_TMP /// 條件:V_CREATEUID /// </summary> //public void QueryStoreHolidayTmpImportStat(string V_CREATEUID, out int N_TMP_CNT, out int N_TAB_CNT) //{ // try // { // DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); // //dbo.doQueryStoreHolidayTmpImportStat(V_CREATEUID, DBT, out N_TMP_CNT, out N_TAB_CNT); // } // catch (Exception ex) // { // throw ex; // } //} /// <summary> /// 目的:查詢錯誤訊息資料 /// Table: /// B=VDS_STM_STORE_HOLIDAY_TMP /// 條件:[資料型態]=2:錯誤資料、[建立人員]= /// </summary> public DataTable QueryErrorByFind(string V_CREATEUID, DateTime D_CREATEDATE_S, DateTime D_CREATEDATE_E) { try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); return dbo.doQueryStoreHolidayTmpError(V_CREATEUID, D_CREATEDATE_S, D_CREATEDATE_E); } catch (Exception ex) { throw ex; } }
/// <summary> /// 目的:將上傳檔案內容,存入暫存檔 /// 傳入參數: /// 〔@啟用日〕 /// 1.先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。 /// 相關Table: /// B=VDS_STM_STORE_HOLIDAY_TMP /// 2.讀取匯入檔案到暫存DataSet。 /// B.STORE_TYPE=〔@類別〕,其他欄位參照檔案格式。 /// 3.檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。 /// 『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema) /// * 日期:檢查日期格式。 /// * 數字:檢查內容是否為數字。 /// * 文字:檢查長度是否溢位。 /// * 檔案欄位數是否不足。 /// * 兩個工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。 /// * 匯入表格細節說明請參考:WEB UI SPEC 文件 /// 4. 格式檢查正確無誤後 /// a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP /// b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性 /// 5. 無論CheckData()檢查結果是否為True, /// 皆將上傳檔案內容新增到資料庫Tmp Table:, /// 並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。 /// c)上述匯入需一併Commit,處理期間有任何錯誤,皆視為異常,整批Rollback,並回傳錯誤訊息。 /// 6. 上傳流程完成,回傳處理筆數訊息:上傳總筆數、成功筆數、失敗筆數。 /// 7.如果CheckData()檢查結果=True,呼叫 [ProcessImportHoliday.TmpToDB],處理匯入正式表單。 /// * 匯入檔案對應,請參考工作表:STM32 假日設定匯入(檔案格式)。 /// </summary> public ArrayList FileToTmp(DataTable dt, DbTransaction RootDBT, string V_DATA_SOURCE, string V_CREATEUID, string V_STORE_TYPE) { bool IsRootTranscation = false; ArrayList arl_Return = new ArrayList(); try { DBO.STM_StoreHolidayDBO dbo = new STM_StoreHolidayDBO(ref USEDB); //ErrorMsg = ""; //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion #region 清空VDS_STM_STORE_HOLIDAY_TMP dbo.doDeleteStoreHolidayTmp(V_CREATEUID, DBT); #endregion #region FileToTmp ArrayList ParameterList = new ArrayList(); string V_RESULT = "1"; if (dt != null) { for (int i = 0; i < dt.Rows.Count; i++) { if (V_RESULT == "1") { ParameterList.Clear(); ParameterList.Add(V_DATA_SOURCE); ParameterList.Add(V_STORE_TYPE); ParameterList.Add(Convert.ToDateTime(dt.Rows[i][0].ToString())); ParameterList.Add(V_CREATEUID); ParameterList.Add(System.DateTime.Now); dbo.doCreateStoreHolidayTmp(ParameterList, DBT, out V_RESULT); } } } int N_TMP_CNT = 0; int N_TAB_CNT = 0; dbo.doQueryStoreHolidayTmpImportStat(V_CREATEUID, DBT, out N_TMP_CNT, out N_TAB_CNT); #endregion #region TmpToDB DataTable dt_Return = dbo.doCreateStoreHoliday(V_CREATEUID, DBT); char[] delimiterChars = { '@' }; string[] s_Return = dt_Return.Rows[0][0].ToString().Split(delimiterChars); for (int i = 0; i < s_Return.Length; i++) { arl_Return.Add(s_Return[i].ToString()); } arl_Return.Add(N_TMP_CNT.ToString()); arl_Return.Add(N_TAB_CNT.ToString()); #endregion #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion } catch (Exception ex) { #region 交易失敗 DBT.Rollback(); #endregion arl_Return.Add("程式錯誤"); arl_Return.Add(ex.Message); throw ex; } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } return arl_Return; }