public DataTable QuerySwitch(QueryType QT, ArrayList ParameterList) { #region VDS_ALO_STORE_ORDER_TMP_DBO ALOM = new VDS_ALO_STORE_ORDER_TMP_DBO(ref USEDB); DataTable Dt; try { switch (QT) { case QueryType.CheckCurrentItemStatus: Dt = ALOM.doCheckCurrentItemStatus(ParameterList); break; case QueryType.GetStoreOrder_TmpSchema: Dt = ALOM.GetStoreOrder_TmpSchema(ParameterList); break; default: Dt = new DataTable(); break; } return Dt; } catch (Exception ex) { throw GetNewException(ex); } #endregion }
/// <summary> /// 刪除該使用者存在於 ALO_IMPORT_TMP 的舊資料,並將 EXCEL 中新資料匯入 ALO_IMPORT_TMP /// </summary> /// <param name="ParameterList">刪除變數</param> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳影響筆數</returns> public void DELETE_AND_INSERT_TEMP_TABLE(ArrayList ParameterList, DbTransaction RootDBT, DataTable dt_ALO_IMPORT_TMP) { #region bool IsRootTranscation = false; try { VDS_ALO_STORE_ORDER_TMP_DBO ALOM = new VDS_ALO_STORE_ORDER_TMP_DBO(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 //改由檢查前執行 //ALOM.doDelete_StoreOrder_TMP(ParameterList, DBT); foreach (DataRow dRow in dt_ALO_IMPORT_TMP.Rows) { ALOM.doAdd_StoreOrder_TMP(dRow, DBT); } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } #endregion }
/// <summary> /// 將資料由 TEMP TABLE 新增至正式 TABLE /// </summary> /// <param name="ParameterList">變數</param> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳結果</returns> public Int32 TMP_To_STORE_ORDER(ArrayList ParameterList, DbTransaction RootDBT) { #region bool IsRootTranscation = false; Int32 iResult = 0; try { VDS_ALO_STORE_ORDER_TMP_DBO ALOM = new VDS_ALO_STORE_ORDER_TMP_DBO(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 iResult = ALOM.doTMP_To_STORE_ORDER(ParameterList, DBT); // DataTable dt_Return =ALOM.DO_ALO054_TEMP_TO_FORMAL(ParameterList, DBT); #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion return iResult; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } #endregion }
/// <summary> ///1.目的:將上傳檔案內容,存入暫存檔 ///2.傳入參數:@處理檔名、@使用者 /// 回傳參數:@處理筆數、@正確筆數、@錯誤筆數、@錯誤訊息 ///3.處理表格:VDS_ALO_STORESPEC_TMP(T) ///4.處理邏輯: /// 4.1) 先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。 /// 相關Table:VDS_ALO_STORESPEC_TM /// 4.2) 讀取匯入檔案到暫存資料集。 /// 4.3) 檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。 /// 『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema) /// * 日期:檢查日期格式。 /// * 數字:檢查內容是否為數字。 /// * 文字:檢查長度是否溢位。 /// * 檔案欄位數是否不足。 /// * 檢查必填欄位是否有值:通路、店號、品號、數量、原因代碼、設定類別 /// * 工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。 /// * 匯入表格細節說明請參考:Excel文件 /// 4.4) 格式檢查正確無誤後 /// a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP /// b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性 /// 4.5) 無論CheckData()檢查結果是否為True, /// 皆將上傳檔案內容新增到資料庫Tmp Table:, /// 並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。 ///5. 回傳處理結果(@處理筆數、@正確筆數、@錯誤筆數、@錯誤訊息(無錯誤時=null) ) /// </summary> public ArrayList FileToTmp(DataSet ds_Excel, DateTime d_CreateDate, string s_LoginUser, string s_AP_FileName, string V_SESSION_ID) { #region int i_newTable_Count = 0; ArrayList arl_Return = new ArrayList(); ArrayList arr_CheckData_Table = new ArrayList(); ArrayList arr_CheckData = new ArrayList(); int i_FileToTemp_Total_count = 0; int i_FileToTemp_Right_count = 0; int i_FileToTemp_Wrong_count = 0; bool b_Check_Logic = true; ArrayList paramTemp = new ArrayList(); DataTable dtTemp = new DataTable(); string strErrMsg = ""; string strErrMsgDataFormat = ""; Int32 iErrCount = 0; string strTemp = ""; bool bResultTemp = false; try { ParameterList.Clear(); DataTable dt_ALO_IMPORT_TMP = QuerySwitch(QueryType.GetStoreOrder_TmpSchema, ParameterList); VDS_ALO_STORE_ORDER_TMP_DBO ALO_STORE_ORDER_TMP = new VDS_ALO_STORE_ORDER_TMP_DBO(ref USEDB); MaintainStoreOrderItem ALOM = new MaintainStoreOrderItem(ConnectionDB); string strPeriodSt, strPeriodEnd; Int32 iPeriodSt; Int32 iPeriodSt_imp; Int32 iPeriodEnd_imp; //20090704 added VDS_ALO_STORE_ORDER_TMP_DBO DBO = new VDS_ALO_STORE_ORDER_TMP_DBO(ref USEDB); ParameterList.Clear(); ParameterList.Add(s_LoginUser); ParameterList.Add(V_SESSION_ID); DBO.doDelete_StoreOrder_TMP(ParameterList, null); foreach (System.Data.DataRow dRow in ds_Excel.Tables[0].Rows) { #region iErrCount = 0; strErrMsg = ""; if (!CheckRequiredField(dRow, iAryRequiredColumnsCheck, out strErrMsgDataFormat))//檢查必填欄位 { #region 檢查資料格式正確性 arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; } else if (!CheckOverFlow(dRow, iAryOverflowColumnsCheck, out strErrMsgDataFormat))//檢查是否為溢位 { arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; } else if (!CheckInputValueIsInt32(dRow, iAryRequiredColumnsCheck, out strErrMsgDataFormat))//檢查是否為數值 { arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; #endregion } else { #region 檢查資料邏輯正確性 //20130218 純萍新增規則 若匯入資料中出現重複店號及品號資料則顯示錯誤訊息 DataRow[] FindDbls = dt_ALO_IMPORT_TMP.Select("ITEM='" + dRow[3].ToString().Trim() + "' AND STORE='" + dRow[2].ToString().Trim() + "'"); if (FindDbls.Length > 0) { strErrMsgDataFormat = "匯入資料包含相同店號品號資料"; arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; } #region 將資料寫入 TEMP TABLE DataRow dRow_Temp = dt_ALO_IMPORT_TMP.NewRow(); dRow_Temp["CREATEDATE"] = d_CreateDate; dRow_Temp["CREATEUID"] = s_LoginUser; dRow_Temp["ID"] = i_newTable_Count; dRow_Temp["UPDATEDATE"] = d_CreateDate; dRow_Temp["UPDATEUID"] = s_LoginUser; dRow_Temp["CHAN_NO"] = dRow[1].ToString().Trim(); dRow_Temp["STORE"] = dRow[2].ToString().Trim(); dRow_Temp["ITEM"] = dRow[3].ToString().Trim(); dRow_Temp["ORDER_QTY"] = dRow[5].ToString().Trim(); dRow_Temp["REASON"] = dRow[6].ToString().Trim(); //------------------------------------- dRow_Temp["BUY_FLAG"] = 0; dRow_Temp["ADJUST_QTY"] = 0; #region 設定暫存檔非匯入欄位 strPeriodSt = ""; strPeriodEnd = ""; iPeriodSt = 0; ParameterList.Clear(); ParameterList.Add(dRow_Temp["ITEM"]); strPeriodSt = ALOM.GetNextPeriodStByItem(ParameterList); if (dRow[4].ToString().Trim() != "") { if (dRow[4].ToString().Trim().Length != 6) { strErrMsg += "期別格式錯誤,"; strPeriodSt = "X"; } else if (!(Int32.TryParse(dRow[4].ToString(), out iPeriodSt_imp))) { strErrMsg += "期別格式錯誤,"; strPeriodSt = "X"; } } if (strPeriodSt != "X") { Int32.TryParse(strPeriodSt, out iPeriodSt); Int32.TryParse(dRow[4].ToString(), out iPeriodSt_imp); if (dRow[4].ToString() == "") { strPeriodSt = (iPeriodSt + 1000000).ToString().Substring(1, 6); } else { strPeriodSt = dRow[4].ToString(); if (iPeriodSt_imp < iPeriodSt) { strErrMsg += "期別小於最新期別" + (iPeriodSt + 1000000).ToString().Substring(1, 6) + ","; } } } ParameterList2.Clear(); ParameterList2.Add(dRow_Temp["CHAN_NO"]); ParameterList2.Add(dRow_Temp["STORE"]); //dtTempSetting = ALO_STORE_ORDER_TMP.doGetLatestPeriodEndSetting(ParameterList2); //if (dtTempSetting != null && dtTempSetting.Rows.Count > 0) //{ // if (dtTempSetting.Rows[0][0].ToString().Trim() == "999999" || dtTempSetting.Rows[0][0].ToString().Trim() == "") // { // strPeriodEnd = "999999"; // } // else // { // strPeriodEnd = (iPeriodSt + 3 + 1000000).ToString().Substring(1, 6); // } //} //else //{ // strPeriodEnd = (iPeriodSt + 3 + 1000000).ToString().Substring(1, 6); //} if (dRow[8].ToString().Trim() != "") { if (dRow[8].ToString().Trim().Length != 6) { strErrMsg += "期別結束格式錯誤,"; strPeriodEnd = "X"; } else if (!(Int32.TryParse(dRow[8].ToString(), out iPeriodEnd_imp))) { strErrMsg += "期別結束格式錯誤,"; strPeriodEnd = "X"; } } if (strPeriodEnd != "X") { Int32.TryParse(dRow[8].ToString(), out iPeriodEnd_imp); Int32.TryParse(strPeriodSt, out iPeriodSt); if (dRow[8].ToString() == "") { strPeriodEnd = (iPeriodSt + 3 + 1000000).ToString().Substring(1, 6); } else { strPeriodEnd = dRow[8].ToString(); if (iPeriodEnd_imp < iPeriodSt) { strErrMsg += "期別結束小於期別開始,"; } } } #endregion dRow_Temp["PERIOD_ST"] = strPeriodSt; dRow_Temp["PERIOD_END"] = strPeriodEnd; dRow_Temp["SESSION_ID"] = V_SESSION_ID; #endregion //20141119移至轉入正式資料表時判斷 //#region 4.2 判斷是否可新增 //paramTemp.Clear(); //strTemp = ""; //paramTemp.Add(dRow[1].ToString().Trim()); //paramTemp.Add(dRow[2].ToString().Trim()); //paramTemp.Add(dRow[3].ToString().Trim()); //paramTemp.Add(dRow_Temp["PERIOD_ST"].ToString().Trim()); //paramTemp.Add(dRow_Temp["PERIOD_END"].ToString().Trim()); //strTemp = ""; //bResultTemp = ALOM.CheckStoreOrderItemCanAdd(paramTemp, ref strTemp); //if (!bResultTemp) //{ // strErrMsg += strTemp; //} //#endregion #region 4.3 針對MEMO是否為空字串做檢查 if (strErrMsg.Trim() == string.Empty) { dRow_Temp["MEMO"] = System.DBNull.Value; dRow_Temp["DATASOURCE"] = s_AP_FileName; } else { if (strErrMsg.Trim().Length > 0) { if (strErrMsg.Trim().Substring(strErrMsg.Trim().Length - 1) == ",") { strErrMsg = strErrMsg.Trim().Substring(0, strErrMsg.Trim().Length - 1); } } dRow_Temp["MEMO"] = strErrMsg; dRow_Temp["DATASOURCE"] = s_AP_FileName; iErrCount++; } if (iErrCount != 0) { i_FileToTemp_Wrong_count += 1; dRow_Temp["DATATYPE"] = 2; b_Check_Logic = false; } else { i_FileToTemp_Right_count += 1; dRow_Temp["DATATYPE"] = 1; } #endregion dt_ALO_IMPORT_TMP.Rows.Add(dRow_Temp); i_newTable_Count += 1; #endregion } i_FileToTemp_Total_count += 1; #endregion } #region 先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊,並將 Excel 資料匯入 TEMP TABLE ParameterList.Clear(); ParameterList.Add(s_LoginUser); ParameterList.Add(V_SESSION_ID); DELETE_AND_INSERT_TEMP_TABLE(ParameterList, null, dt_ALO_IMPORT_TMP); #endregion arl_Return.Add("TRUE"); arl_Return.Add(b_Check_Logic); arl_Return.Add(i_FileToTemp_Total_count); arl_Return.Add(i_FileToTemp_Right_count); arl_Return.Add(i_FileToTemp_Wrong_count); } catch (Exception ex) { arl_Return.Add("FALSE"); arl_Return.Add(GetNewException(ex).Message); } return arl_Return; #endregion }
public DataTable GetLatestPeriodEndSetting(ArrayList ParameterList) { #region try { VDS_ALO_STORE_ORDER_TMP_DBO ALOM = new VDS_ALO_STORE_ORDER_TMP_DBO(ref USEDB); return ALOM.doGetLatestPeriodEndSetting(ParameterList); } catch (Exception ex) { throw GetNewException(ex); } #endregion }
/// <summary> /// 按下 BUTTON 檢視異常報表 /// </summary> /// <param name="ParameterList">變數"登入人員"</param> /// <returns>回傳查詢結果</returns> public DataTable ALO054_QUERRY_TEMP_TABLE(ArrayList ParameterList) { #region try { VDS_ALO_STORE_ORDER_TMP_DBO ALOM = new VDS_ALO_STORE_ORDER_TMP_DBO(ref USEDB); return ALOM.DO_ALO054_QUERRY_TEMP_TABLE(ParameterList); } catch (Exception ex) { throw GetNewException(ex); } #endregion }