From fdabeb9d3dac21c405aaf201cf2032159e45118f Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Fri, 23 May 2025 14:47:49 +0900 Subject: [PATCH] =?UTF-8?q?DB=E3=81=AEconnect=E3=81=AE=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=A8=E6=96=87=E4=BD=93=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/jskult_batch_status_manager.py | 166 +++++++++++++++--- 1 file changed, 137 insertions(+), 29 deletions(-) diff --git a/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py b/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py index 5792570d..766701ff 100644 --- a/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py +++ b/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py @@ -2,12 +2,6 @@ import os from src.error.exceptions import MaxRunCountReachedException from src.db.database import Database -DB_USERNAME = os.environ.get("DB_USERNAME") -DB_PASSWORD = os.environ.get("DB_PASSWORD") -DB_HOST = os.environ.get("DB_HOST") -DB_PORT = os.environ.get("DB_PORT") -DB_SCHEMA = os.environ.get("DB_SCHEMA") - # 実消化&アルトマーク_バッチステータス管理テーブルを管理するクラス @@ -27,21 +21,33 @@ class JskultBatchStatusManager: self._receive_file_count: str = receive_file_count # DB接続モジュール(バッチ)のget_instanceを呼び出し設定 - self._db = Database(DB_USERNAME, DB_PASSWORD, DB_HOST, - DB_PORT, DB_SCHEMA).get_instance() + self._db = Database.get_instance() # 処理ステータスの登録および更新を行う + def set_process_status(self, process_status: str): try: + # DB接続開始 + self._db.connect() self._db.begin() + self._db.to_jst() self._db.execute( - f"CALL upsert_jskult_batch_status_manage({self._process_name}, {self._process_type}, {process_status}, NULL, NULL);" + f""" + CALL + internal07.upsert_jskult_batch_status_manage( + {self._process_name}, + {self._process_type}, + {process_status}, + NULL, + NULL + );""" ) self._db.commit() except Exception as e: # Exceptionをcatchした場合はrollback + print(self._db) self._db.rollback() raise e @@ -49,9 +55,20 @@ class JskultBatchStatusManager: def can_run_post_process(self): # SELECTの結果からレコード数を取得 - record_count = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = {self._process_name} AND process_date = src07.get_syor_date();" - ).count() + record = self._db.execute_select( + f""" + SELECT + COUNT(*) + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = {self._process_name} + AND + process_date = src07.get_syor_date(); + """ + ) + + record_count = record[0]['count'] if record_count == 0: raise ValueError("レコードの取得が出来ませんでした。") @@ -76,9 +93,20 @@ class JskultBatchStatusManager: def can_run_business_day_update(self): # SELECTの結果からレコード数を取得 - record_count = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = {self._process_name} AND process_date = src07.get_syor_date();" - ).count() + record = self._db.execute_select( + f""" + SELECT + COUNT(*) + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = {self._process_name} + AND + process_date = src07.get_syor_date(); + """ + ) + + record_count = record[0]['count'] if record_count == 0: raise ValueError("レコードの取得が出来ませんでした。") @@ -106,10 +134,19 @@ class JskultBatchStatusManager: # SELECTの結果からレコード数を取得 record_count = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = 'jskult-batch-ultmarc-io' AND process_date = src07.get_syor_date();" - ).count() + f""" + SELECT + COUNT(*) + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = 'jskult-batch-ultmarc-io' + AND + process_date = src07.get_syor_date(); + """ + ) # アルトマークデータ連携が無かった場合 - if record_count == 0: + if record_count.pop() == 0: return False return True @@ -117,16 +154,37 @@ class JskultBatchStatusManager: # 起動回数をインクリメントする def _increment_run_count(self): try: + # DB接続開始 + self._db.connect() self._db.begin() + self._db.to_jst() # SELECTの結果からレコードを取得 record = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = {self._process_name} AND process_date = src07.get_syor_date();" + f""" + SELECT + * + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = {self._process_name} + AND + process_date = src07.get_syor_date(); + """ ) run_count += record[0]['run_count'] self._db.execute( - f"CALL upsert_jskult_batch_status_manage({self._process_name}, {self._process_type}, NULL, {run_count}, NULL);") + f""" + CALL + upsert_jskult_batch_status_manage( + {self._process_name}, + {self._process_type}, + NULL, + {run_count}, + NULL); + """ + ) self._db.commit() @@ -140,9 +198,22 @@ class JskultBatchStatusManager: def _is_done_data_import(self): # SELECTの結果からレコード数を取得 - record_count = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_type = {self._process_type} AND process_status = 'done' AND process_date = src07.get_syor_date();" - ).count() + record = self._db.execute_select( + f""" + SELECT + COUNT(*) + FROM + internal07.jskult_batch_status_manage + WHERE + process_type = {self._process_type} + AND + process_status = 'done' + AND + process_date = src07.get_syor_date(); + """ + ) + + record_count = record[0]['count'] # データ取込数が一致している場合 if (self._receive_file_count == record_count): @@ -153,12 +224,15 @@ class JskultBatchStatusManager: # 後続処理のすべての処理が完了しているかを判定する def _is_done_post_process(self): + # 生物由来データロット分解のチェック if not self._is_done_process("jskult-batch-trn-result-data-bio-lot"): return False + # メルク施設マスタ作成のチェック if not self._is_done_process("jskult-batch-mst-inst"): return False + # DCF削除新規マスタ作成のチェック if not self._is_done_process("jskult-batch-dcf-inst-merge-io"): return False @@ -170,9 +244,22 @@ class JskultBatchStatusManager: def _is_done_process(self): # SELECTの結果からレコード数を取得 - record_count = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = {self._process_name} AND process_status = 'done' AND process_date = src07.get_syor_date();" - ).count() + record = self._db.execute_select( + f""" + SELECT + * + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = {self._process_name} + AND + process_status = 'done' + AND + process_date = src07.get_syor_date(); + """ + ) + + record_count = record[0]['count'] if (record_count == 0): return False @@ -183,9 +270,18 @@ class JskultBatchStatusManager: def _is_max_run_count_reached(self): - # SELECTの結果からレコード数を取得 + # SELECTの結果からレコードを取得 record = self._db.execute_select( - f"SELECT * FROM internal07.jskult_batch_status_manage WHERE process_name = {self._process_name} AND process_date = src07.get_syor_date();" + f""" + SELECT + * + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = {self._process_name} + AND + process_date = src07.get_syor_date(); + """ ) run_count = record[0]['run_count'] @@ -198,11 +294,23 @@ class JskultBatchStatusManager: def _activate_max_run_count_flg(self): try: + # DB接続開始 + self._db.connect() self._db.begin() + self._db.to_jst() # 最大起動回数フラグにフラグを立てる self._db.execute( - f"CALL upsert_jskult_batch_status_manage({self._process_name}, {self._process_type}, NULL, NULL, 1);") + f""" + CALL + upsert_jskult_batch_status_manage( + {self._process_name}, + {self._process_type}, + NULL, + NULL, + 1); + """ + ) self._db.commit()