/// <summary> /// 目的:查詢上傳後的成功筆數 /// Table:VDS_VGR_08_TMP /// 條件:V_CREATEUID /// </summary> public void QueryImportStat(string V_IOTYPE, string V_CREATEUID, out int N_TMP_CNT, out int N_TAB_CNT) { try { DBO.VDS_VGR08_DBO dbo = new VDS_VGR08_DBO(ref USEDB); dbo.doQueryImportStat(V_IOTYPE, V_CREATEUID, out N_TMP_CNT, out N_TAB_CNT); } catch (Exception ex) { throw ex; } }
/// <summary> /// 目的:查詢錯誤訊息資料 /// Table:VDS_VGR_08_LOG /// 條件:[資料型態]=2:錯誤資料、[建立人員]= /// </summary> public DataTable QueryOKByFind(string V_IOTYPE, string V_CREATEUID, DateTime D_CREATEDATE_S, DateTime D_CREATEDATE_E, Int32 N_ROWNUM) { try { DBO.VDS_VGR08_DBO dbo = new VDS_VGR08_DBO(ref USEDB); return dbo.doQueryOK(V_IOTYPE, V_CREATEUID, D_CREATEDATE_S, D_CREATEDATE_E, N_ROWNUM); } catch (Exception ex) { throw ex; } }
/// <summary> /// 目的:將上傳檔案內容,存入暫存檔 /// /// 1.先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。 /// 相關Table:VDS_VGR_08_TMP(匯入暫存檔) /// 2.讀取匯入檔案到暫存DataSet。 /// 3.檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。 /// 『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema) /// * 日期:檢查日期格式。 /// * 數字:檢查內容是否為數字。 /// * 文字:檢查長度是否溢位。 /// * 檔案欄位數是否不足。 /// * 兩個工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。 /// * 匯入表格細節說明請參考:WEB UI SPEC 文件 /// 4. 格式檢查正確無誤後 /// a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP /// b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性 /// 5. 無論CheckData()檢查結果是否為True, /// 皆將上傳檔案內容新增到資料庫Tmp Table:, /// 並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。 /// c)上述匯入需一併Commit,處理期間有任何錯誤,皆視為異常,整批Rollback,並回傳錯誤訊息。 /// 6. 上傳流程完成,回傳處理筆數訊息:上傳總筆數、成功筆數、失敗筆數。 /// </summary> public string FileToTmp(string V_IOTYPE, DataTable dt, DbTransaction RootDBT, string V_DATA_SOURCE, string V_CREATEUID) { bool IsRootTranscation = false; try { DBO.VDS_VGR08_DBO dbo = new VDS_VGR08_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 #region 清空VDS_VGR_08_TMP dbo.doDeleteTmp(V_CREATEUID, DBT); #endregion #region FileToTmp ArrayList ParameterList = new ArrayList(); string V_RESULT = "1"; string V_MSG = ""; string V_TMPTODB = "1"; if (dt != null) { for (int i = 0; i < dt.Rows.Count; i++) { DateTime D_BUS_DATE; DateTime D_SIGN_DATE; string V_PO_SOURCE_NO=""; string V_STORE=""; string V_ITEM; string V_PERIOD; int N_QTY; int N; string V_ERR_MEMO = ""; if (V_IOTYPE == "1")//廠退單 { if (!(DateTime.TryParse(dt.Rows[i]["廠退日期"].ToString().Trim(), out D_BUS_DATE))) { V_ERR_MEMO = "日期格式錯誤;"; } DateTime.TryParse(dt.Rows[i]["廠退日期"].ToString().Trim(), out D_SIGN_DATE); if (dt.Rows[i]["品號"].ToString().Trim().Length != 6) { V_ERR_MEMO += "品號長度不正確;"; V_ITEM = ""; } else if (!(int.TryParse(dt.Rows[i]["品號"].ToString().Trim(), out N))) { V_ERR_MEMO += "品號格式不正確;"; V_ITEM = ""; } else { V_ITEM = dt.Rows[i]["品號"].ToString().Trim(); } if (dt.Rows[i]["期別"].ToString().Trim().Length != 6) { V_ERR_MEMO += "期別長度不正確;"; V_PERIOD = ""; } else if (!(int.TryParse(dt.Rows[i]["期別"].ToString().Trim(), out N))) { V_ERR_MEMO += "期別格式不正確;"; V_PERIOD = ""; } else { V_PERIOD = dt.Rows[i]["期別"].ToString().Trim(); } if (!(int.TryParse(dt.Rows[i]["數量"].ToString().Trim(), out N_QTY))) { V_ERR_MEMO += "數量格式不正確;"; N_QTY = 0; } if (V_ERR_MEMO == "") { DataRow[] drDetlArrs = dt.Select(string.Format("廠退日期 ='{0}' and 品號='{1}' and 期別 = '{2}'", dt.Rows[i]["廠退日期"], dt.Rows[i]["品號"], dt.Rows[i]["期別"])); if (drDetlArrs.Length > 1) { V_ERR_MEMO += "有重複資料;"; } } } else //門退單 門進單 { if (!(DateTime.TryParse(dt.Rows[i]["入帳日"].ToString().Trim(), out D_BUS_DATE))) { V_ERR_MEMO = "入帳日期格式錯誤;"; } if (!(DateTime.TryParse(dt.Rows[i]["簽收日"].ToString().Trim(), out D_SIGN_DATE))) { V_ERR_MEMO = "簽收日期格式錯誤;"; } if (dt.Rows[i]["品號"].ToString().Trim().Length != 6) { V_ERR_MEMO += "品號長度不正確;"; V_ITEM = ""; } else if (!(int.TryParse(dt.Rows[i]["品號"].ToString().Trim(), out N))) { V_ERR_MEMO += "品號格式不正確;"; V_ITEM = ""; } else { V_ITEM = dt.Rows[i]["品號"].ToString().Trim(); } if (dt.Rows[i]["期別"].ToString().Trim().Length != 6) { V_ERR_MEMO += "期別長度不正確;"; V_PERIOD = ""; } else if (!(int.TryParse(dt.Rows[i]["期別"].ToString().Trim(), out N))) { V_ERR_MEMO += "期別格式不正確;"; V_PERIOD = ""; } else { V_PERIOD = dt.Rows[i]["期別"].ToString().Trim(); } Regex regIsWord = new Regex("^[A-Za-z0-9]+$"); if (dt.Rows[i]["店號"].ToString().Trim().Length > 6) { V_ERR_MEMO += "店號長度不正確;"; V_STORE = ""; } else if (!regIsWord.IsMatch(dt.Rows[i]["店號"].ToString().Trim())) { V_ERR_MEMO += "店號格式不正確;"; V_STORE = ""; } else { V_STORE = dt.Rows[i]["店號"].ToString().Trim(); } if (!(int.TryParse(dt.Rows[i]["數量"].ToString().Trim(), out N_QTY))) { V_ERR_MEMO += "數量格式不正確;"; N_QTY = 0; } if (dt.Rows[i]["通路單號"].ToString().Trim() != "") { if (dt.Rows[i]["通路單號"].ToString().Trim().Length >= 20) { V_ERR_MEMO += "通路單號長度過長;"; V_PO_SOURCE_NO = ""; } else if (!regIsWord.IsMatch(dt.Rows[i]["通路單號"].ToString().Trim())) { V_ERR_MEMO += "通路單號格式錯誤;"; V_PO_SOURCE_NO = ""; } else { V_PO_SOURCE_NO = dt.Rows[i]["通路單號"].ToString().Trim(); } } if (V_ERR_MEMO == "") { DataRow[] drDetlArrs = dt.Select(string.Format("入帳日 ='{0}' and 簽收日='{1}' and 品號 = '{2}' and 期別='{3}' and 店號='{4}' and 通路單號='{5}'", dt.Rows[i]["入帳日"], dt.Rows[i]["簽收日"], dt.Rows[i]["品號"], dt.Rows[i]["期別"], dt.Rows[i]["店號"], dt.Rows[i]["通路單號"])); if (drDetlArrs.Length > 1) { V_ERR_MEMO += "有重複資料;"; } } } if (V_ERR_MEMO != "") { V_TMPTODB = "0"; } ParameterList.Clear(); ParameterList.Add(i+1);//rownm 0 ParameterList.Add(D_BUS_DATE);//1 ParameterList.Add(D_SIGN_DATE);//2 ParameterList.Add(V_PO_SOURCE_NO);//3 ParameterList.Add(V_STORE);//4 ParameterList.Add(V_ITEM);//5 ParameterList.Add(V_PERIOD);//6 ParameterList.Add(N_QTY);//7 ParameterList.Add(V_IOTYPE);//8 ParameterList.Add(V_ERR_MEMO);//9 ParameterList.Add(V_CREATEUID);//10 ParameterList.Add(System.DateTime.Now);//11 dbo.FileToTmp(ParameterList, DBT, out V_RESULT, out V_MSG); V_MSG += "(" + dt.Rows[i][0].ToString() + ")"; } } #endregion if (V_RESULT == "1") { if (V_TMPTODB == "1") { #region TmpToDB dbo.TmpToDB(V_IOTYPE, V_CREATEUID, DBT); #endregion } if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); V_MSG = ""; } else DBT.Rollback(); } else { DBT.Rollback(); } return V_MSG; } catch (Exception ex) { #region 交易失敗 DBT.Rollback(); #endregion throw ex; } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } }