///-------------------------------------------------------------------- /// <summary> /// 伝票番号テーブル全行削除 </summary> ///-------------------------------------------------------------------- public void dataDelete() { DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); adp.Fill(dts.伝票番号); for (int i = 0; i < dts.伝票番号.Rows.Count; i++) { dts.伝票番号.Rows[i].Delete(); } adp.Update(dts.伝票番号); }
private void dataVerifi() { // 件数確認 DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); adp.Fill(dts.伝票番号); int g = dts.伝票番号.Count(a => a.照合ステータス == global.STATUS_UNVERI); //if (g == 0) //{ // MessageBox.Show("照合する物品受領書データがありません。", "確認", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); // return; //} // 照合処理 clsMakeCsvfile c = new clsMakeCsvfile(this); //c.getHaishaCsv(); // 配車データロード c.importHaishaCsv(); // 配車CSVインポート int v = c.findDenOverlap(); // 伝票№重複チェック int p = c.findPastData(); // 過去データ照合(重複チェック) int j = c.findHaishaData(); // 配車データ照合 c.pastDataUpdate(); // 照合済みデータで過去データ更新 int ok = c.haishaDataUpdate(); // 配車データ更新 int un = c.unmDataUpdate(); // 未照合伝票テーブル更新 c.ngToUnmData(); // NGデータ未照合伝票テーブル更新 // 終了メッセージ StringBuilder sb = new StringBuilder(); sb.Append("物品受領書の伝票番号の配車データ照合処理が終了しました。 "); sb.Append(DateTime.Now.ToShortDateString()).Append(" "); sb.Append(DateTime.Now.ToLongTimeString()); sb.Append(Environment.NewLine + Environment.NewLine); sb.Append("伝票件数:" + g.ToString() + "件").Append(Environment.NewLine); sb.Append("照合完了:" + ok.ToString() + "件").Append(Environment.NewLine); sb.Append("照合未完了").Append(Environment.NewLine); sb.Append(">伝票番号重複:" + v.ToString() + "件").Append(Environment.NewLine); sb.Append(">過去データ登録済:" + p.ToString() + "件").Append(Environment.NewLine); sb.Append(">配車データ未登録:" + j.ToString() + "件").Append(Environment.NewLine + Environment.NewLine); sb.Append("照合未完了の伝票は修正確認画面で確認してください。"); MessageBox.Show(sb.ToString(), "照合結果", MessageBoxButtons.OK, MessageBoxIcon.Information); // ログ出力 Utility.logOutput(sb.ToString(), "OCR照合"); }
/// ------------------------------------------------------------------------------- /// <summary> /// 未照合データを未照合伝票データに登録し伝票番号データから削除する </summary> /// <returns> /// 件数</returns> /// ------------------------------------------------------------------------------- public int unmDataUpdate() { // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); DSLGDataSetTableAdapters.未照合伝票TableAdapter pAdp = new DSLGDataSetTableAdapters.未照合伝票TableAdapter(); adp.Fill(dts.伝票番号); pAdp.Fill(dts.未照合伝票); // 未照合件数 int dNum = 0; // 未照合データを抽出 foreach (var t in dts.伝票番号.Where(a => a.照合ステータス != global.STATUS_VERIFI && a.照合ステータス != global.STATUS_UNVERI)) { // 未照合伝票テーブルに追加する DSLGDataSet.未照合伝票Row r = dts.未照合伝票.New未照合伝票Row(); r.伝票番号 = t.伝票番号; r.画像名 = t.画像名; r.日付 = t.日付; r.メーカー名 = t.メーカー名; r.照合ステータス = t.照合ステータス; r.更新年月日 = DateTime.Now; dts.未照合伝票.Add未照合伝票Row(r); dNum++; // 伝票番号データ削除 t.Delete(); } // データベースを更新 pAdp.Update(dts.未照合伝票); adp.Update(dts.伝票番号); // 後片付け adp.Dispose(); pAdp.Dispose(); // 未照合件数を返す return(dNum); }
/// ---------------------------------------------------------- /// <summary> /// 照合済み伝票番号データで配車テーブルを更新する </summary> /// <returns> /// 照合済み件数</returns> /// ---------------------------------------------------------- public int haishaDataUpdate() { // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); DSLGDataSetTableAdapters.配車TableAdapter hAdp = new DSLGDataSetTableAdapters.配車TableAdapter(); adp.Fill(dts.伝票番号); hAdp.Fill(dts.配車); // 照合件数 int dNum = 0; // 照合済みデータを抽出 foreach (var t in dts.伝票番号.Where(a => a.照合ステータス == global.STATUS_VERIFI)) { // 配車データの照合結果を更新する if (dts.配車.Any(a => a.伝票番号 == t.伝票番号 && a.日付 == t.日付)) { DSLGDataSet.配車Row r = dts.配車.Single(a => a.伝票番号 == t.伝票番号 && a.日付 == t.日付); r.画像名 = t.画像名; r.照合ステータス = t.照合ステータス; r.更新年月日 = DateTime.Now; dNum++; // 伝票番号データを削除 t.Delete(); } } // データベースを更新 hAdp.Update(dts.配車); adp.Update(dts.伝票番号); // 後片付け adp.Dispose(); hAdp.Dispose(); // 照合件数を返す return(dNum); }
/// ---------------------------------------------------------- /// <summary> /// 照合済み伝票データを過去データに登録する </summary> /// <returns> /// 照合済み件数</returns> /// ---------------------------------------------------------- public int pastDataUpdate() { // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); DSLGDataSetTableAdapters.過去データTableAdapter pAdp = new DSLGDataSetTableAdapters.過去データTableAdapter(); adp.Fill(dts.伝票番号); pAdp.Fill(dts.過去データ); // 照合件数 int dNum = 0; // 照合済みデータを抽出 if (dts.伝票番号.Any(a => a.照合ステータス == global.STATUS_VERIFI)) { foreach (var t in dts.伝票番号.Where(a => a.照合ステータス == global.STATUS_VERIFI)) { // 過去データに未登録の伝票番号を追加する if (!dts.過去データ.Any(a => a.伝票番号 == t.伝票番号)) { DSLGDataSet.過去データRow r = dts.過去データ.New過去データRow(); r.伝票番号 = t.伝票番号; r.更新年月日 = DateTime.Now; dts.過去データ.Add過去データRow(r); dNum++; } } pAdp.Update(dts.過去データ); } // 後片付け adp.Dispose(); // 照合件数を返す return(dNum); }
/// ------------------------------------------------------------ /// <summary> /// 配車データ照合 </summary> /// ------------------------------------------------------------ public int findHaishaData() { // 新画像名 string newImgNm = string.Empty; // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); DSLGDataSetTableAdapters.配車TableAdapter adpH = new DSLGDataSetTableAdapters.配車TableAdapter(); adp.Fill(dts.伝票番号); adpH.Fill(dts.配車); // 未照合件数 int dNum = 0; // OCR認識日付取得 DateTime dt = getOcrDate(); string sDt = dt.Year.ToString() + dt.Month.ToString().PadLeft(2, '0') + dt.Day.ToString().PadLeft(2, '0'); // 未照合画像連番取得 int unNum = getUnNumber(dt); int cNum = unNum; // 伝票データを順次読む if (dts.伝票番号.Any(a => a.照合ステータス == global.STATUS_UNVERI)) { foreach (var t in dts.伝票番号.Where(a => a.照合ステータス == global.STATUS_UNVERI).OrderBy(a => a.ID)) { bool md = false; string hDate = string.Empty; string hMaker = string.Empty; // 配車データを検索 2016/08/03 照合条件に日付を追加 // 配車データを検索 2016/08/10 照合条件の日付はOCR認識日付に変更 foreach (var it in dts.配車.Where(a => a.伝票番号 == t.伝票番号 && a.日付 == DateTime.Parse(dt.ToShortDateString()))) { md = true; hDate = it.日付.ToShortDateString(); // 日付 hMaker = it.メーカー名; // メーカー名 break; } DSLGDataSet.伝票番号Row d = dts.伝票番号.Single(a => a.ID == t.ID); if (md) { // 配車データに該当あり // 画像を処理済フォルダへ移動する newImgNm = global.cnfTifPath + hDate.Replace("/", "") + hMaker + "_" + t.伝票番号.ToString() + ".tif"; // 再度読み込んだとき等、登録済みのときは削除する if (System.IO.File.Exists(newImgNm)) { System.IO.File.Delete(newImgNm); } System.IO.File.Move(Properties.Settings.Default.imgOutPath + t.画像名, newImgNm); // 伝票番号テーブル情報更新 d.日付 = DateTime.Parse(hDate); d.メーカー名 = hMaker; d.照合ステータス = global.STATUS_VERIFI; d.画像名 = newImgNm; d.更新年月日 = DateTime.Now; } else { // 画像を未処理フォルダへ移動する cNum++; newImgNm = global.cnfUnmImgPath + sDt + global.UNMARK + cNum.ToString().PadLeft(4, '0') + "_" + t.伝票番号.ToString() + ".tif"; System.IO.File.Move(Properties.Settings.Default.imgOutPath + t.画像名, newImgNm); // 伝票番号テーブルの照合ステータス更新 d.日付 = DateTime.Parse(dt.ToShortDateString()); d.照合ステータス = global.STATUS_UNFIND; d.画像名 = newImgNm; d.更新年月日 = DateTime.Now; dNum++; } } // データ更新 adp.Update(dts.伝票番号); // 配車データ未登録があったとき if (unNum != cNum) { // 未処理連番テーブル更新 setUnNumber(dt, cNum); } } // 後片付け adp.Dispose(); // 未処理件数を返す return(dNum); }
/// ------------------------------------------------------------ /// <summary> /// 過去データ突合</summary> /// <returns> /// 件数</returns> /// ------------------------------------------------------------ public int findPastData() { // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); DSLGDataSetTableAdapters.過去データTableAdapter padp = new DSLGDataSetTableAdapters.過去データTableAdapter(); adp.Fill(dts.伝票番号); padp.Fill(dts.過去データ); // 結果件数 int dNum = 0; // OCR認識日付取得 DateTime dt = getOcrDate(); string sDt = dt.Year.ToString() + dt.Month.ToString().PadLeft(2, '0') + dt.Day.ToString().PadLeft(2, '0'); // 未照合画像連番取得 int unNum = getUnNumber(dt); int cNum = unNum; // 未照合伝票を順次読む if (dts.伝票番号.Any(a => a.照合ステータス == global.STATUS_UNVERI)) { foreach (var t in dts.伝票番号.Where(a => a.照合ステータス == global.STATUS_UNVERI).OrderBy(a => a.ID)) { // 過去データを検索 if (dts.過去データ.Any(a => a.伝票番号 == t.伝票番号)) { // 画像を未処理フォルダへ移動する cNum++; string newImgNm = global.cnfUnmImgPath + sDt + global.UNMARK + cNum.ToString().PadLeft(4, '0') + "_" + t.伝票番号.ToString() + ".tif"; System.IO.File.Move(Properties.Settings.Default.imgOutPath + t.画像名, newImgNm); // 伝票番号テーブルの照合ステータス更新 DSLGDataSet.伝票番号Row d = dts.伝票番号.Single(a => a.ID == t.ID); d.日付 = DateTime.Parse(dt.ToShortDateString()); d.照合ステータス = global.STATUS_PASTOVERLAP; d.更新年月日 = DateTime.Now; d.画像名 = newImgNm; dNum++; } } // 過去データとの重複があったとき if (unNum != cNum) { // データ更新 adp.Update(dts.伝票番号); // 未処理連番テーブル更新 setUnNumber(dt, cNum); } } // 後片付け adp.Dispose(); padp.Dispose(); // 件数を返す return(dNum); }
/// ------------------------------------------------------------ /// <summary> /// 伝票番号重複チェック </summary> /// <returns> /// 件数</returns> /// ------------------------------------------------------------ public int findDenOverlap() { // データセット DSLGDataSet dts = new DSLGDataSet(); DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); adp.Fill(dts.伝票番号); // 結果件数 int dNum = 0; // 未処理伝票が存在するか if (dts.伝票番号.Any(a => a.照合ステータス == global.STATUS_UNVERI)) { // 重複している伝票番号を抽出 var fff = dts.伝票番号.Where(a => a.照合ステータス == global.STATUS_UNVERI) .GroupBy(a => a.伝票番号) .Where(a => a.Count() > 1) .Select(a => a.Key) .ToArray(); if (fff.Length > 0) { // OCR認識日付取得 DateTime dt = getOcrDate(); string sDt = dt.Year.ToString() + dt.Month.ToString().PadLeft(2, '0') + dt.Day.ToString().PadLeft(2, '0'); // 未照合画像連番取得 int unNum = getUnNumber(dt); for (int i = 0; i < fff.Length; i++) { // 伝票番号テーブルの照合ステータス更新 foreach (var t in dts.伝票番号.Where(a => a.伝票番号 == Utility.StrtoInt(fff[i].ToString()) && a.照合ステータス == global.STATUS_UNVERI)) { // 画像を未処理フォルダへ移動する unNum++; string newImgNm = global.cnfUnmImgPath + sDt + global.UNMARK + unNum.ToString().PadLeft(4, '0') + "_" + fff[i].ToString() + ".tif"; System.IO.File.Move(Properties.Settings.Default.imgOutPath + t.画像名, newImgNm); // 伝票番号テーブル書き換え t.日付 = DateTime.Parse(dt.ToShortDateString()); t.画像名 = newImgNm; t.照合ステータス = global.STATUS_DENOVERLAP; t.更新年月日 = DateTime.Now; dNum++; } } // データベース更新 adp.Update(dts.伝票番号); // 未処理連番テーブル更新 setUnNumber(dt, unNum); } } // 後片付け adp.Dispose(); // 件数を返す return(dNum); }
/// ----------------------------------------------------------------------------- /// <summary> /// 物品受領書・伝票番号をMDBへ読み込み </summary> /// ----------------------------------------------------------------------------- public int getCSVFile() { // 対象CSVファイル数を取得 string _inPath = Properties.Settings.Default.imgOutPath; denCnt = System.IO.Directory.GetFiles(_inPath, "*.csv").Count(); // 読込件数 int dCnt = 0; // CSVファイルがなければ終了 if (denCnt == 0) { return(0); } // オーナーフォームを無効にする _Owner.Enabled = false; //プログレスバーを表示する frmPrg frmP = new frmPrg(); frmP.Owner = _Owner; frmP.Show(); // データセット DSLGDataSet dts = new DSLGDataSet(); // テーブルアダプタ DSLGDataSetTableAdapters.伝票番号TableAdapter adp = new DSLGDataSetTableAdapters.伝票番号TableAdapter(); // テーブルアダプタに読み取りデータを読み込む adp.Fill(dts.伝票番号); try { // CSVデータをMDBへ取込 int cCnt = 0; foreach (string files in System.IO.Directory.GetFiles(_inPath, "*.csv")) { // 件数カウント cCnt++; //プログレスバー表示 frmP.Text = "物品受領書画像ロード中 " + cCnt.ToString() + "/" + denCnt.ToString(); frmP.progressValue = cCnt * 100 / denCnt; frmP.ProgressStep(); ////////OCR処理対象のCSVファイルかファイル名の文字数を検証する //////string fn = Path.GetFileName(files); int denNum = 0; string imgName = string.Empty; // CSVファイルインポート var s = System.IO.File.ReadAllLines(files, Encoding.Default); foreach (var stBuffer in s) { // カンマ区切りで分割して配列に格納する string[] stCSV = stBuffer.Split(','); // 伝票番号 if (stCSV[2] != string.Empty) { denNum = Utility.StrtoInt(Utility.GetStringSubMax(stCSV[2], 6)); } else if (stCSV[3] != string.Empty) { denNum = Utility.StrtoInt(Utility.GetStringSubMax(stCSV[3], 6)); } else { continue; } // 画像名 imgName = Utility.GetStringSubMax(stCSV[1].Trim(), 21); // 読込件数 dCnt++; // データセットに読み取りデータを追加する dts.伝票番号.Add伝票番号Row(denNum, imgName, DateTime.Today, "", global.STATUS_UNVERI, DateTime.Now); } } // データベースへ反映 adp.Update(dts); //CSVファイルを削除する foreach (string files in System.IO.Directory.GetFiles(_inPath, "*.csv")) { System.IO.File.Delete(files); } // いったんオーナーをアクティブにする _Owner.Activate(); // 進行状況ダイアログを閉じる frmP.Close(); // オーナーのフォームを有効に戻す _Owner.Enabled = true; // 戻り値 return(dCnt); } catch (Exception ex) { MessageBox.Show(ex.Message, "物品受領書伝票№読み込み処理", MessageBoxButtons.OK); return(dCnt); } finally { } }