バッチステータス管理テーブル管理クラス
This commit is contained in:
parent
e60124bec4
commit
8214de77e4
199
ecs/jskult-batch/src/manager/jskult_batch_status_manager.py
Normal file
199
ecs/jskult-batch/src/manager/jskult_batch_status_manager.py
Normal file
@ -0,0 +1,199 @@
|
||||
from src.error.exceptions import MaxRunCountReachedException
|
||||
from src.db.database import Database
|
||||
|
||||
# 実消化&アルトマーク_バッチステータス管理テーブルを管理するクラス
|
||||
class JskultBatchStatusManager:
|
||||
def __init__(self, process_name : str, process_type : str, max_run_count_flg : int, receive_file_count : int):
|
||||
|
||||
# 処理名
|
||||
self._process_name: str = process_name
|
||||
|
||||
# 管理区分
|
||||
self._process_type: str = process_type
|
||||
|
||||
# 最大起動回数
|
||||
self._max_run_count_flg: str = max_run_count_flg
|
||||
|
||||
# 受信ファイル数
|
||||
self._receive_file_count: str = receive_file_count
|
||||
|
||||
# DB接続モジュール(バッチ)のget_instanceを呼び出し設定
|
||||
self._db = Database().get_instance()
|
||||
|
||||
# 処理ステータスの登録および更新を行う
|
||||
def set_process_status (self, process_status : str):
|
||||
try:
|
||||
self._db.begin()
|
||||
self._db.execute(f"CALL 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
|
||||
self._db.rollback()
|
||||
raise e
|
||||
|
||||
# 後続処理を実行してよいか判定する
|
||||
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()
|
||||
|
||||
if record_count == 0:
|
||||
raise ValueError("レコードの取得が出来ませんでした。")
|
||||
|
||||
# 起動回数のインクリメント
|
||||
self._increment_run_count()
|
||||
|
||||
# データ取込が完了していた場合
|
||||
if self._is_done_data_import():
|
||||
return True
|
||||
|
||||
#最大起動回数に到達していない場合
|
||||
if not self._is_max_run_count_reached:
|
||||
return False
|
||||
|
||||
# 最大起動回数フラグを立てる
|
||||
self._activate_max_run_count_flg()
|
||||
|
||||
return True
|
||||
|
||||
# 日付テーブル更新を実行してよいか判定する
|
||||
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()
|
||||
|
||||
if record_count == 0:
|
||||
raise ValueError("レコードの取得が出来ませんでした。")
|
||||
|
||||
# 起動回数のインクリメント
|
||||
self._increment_run_count()
|
||||
|
||||
# 後続処理が完了していた場合
|
||||
if self._is_done_post_process():
|
||||
return True
|
||||
|
||||
#最大起動回数に到達していない場合
|
||||
if not self._is_max_run_count_reached():
|
||||
return False
|
||||
|
||||
# 最大起動回数フラグを立てる
|
||||
self._activate_max_run_count_flg()
|
||||
|
||||
# 最大起動回数に到達した場合にメッセージをスロー
|
||||
raise MaxRunCountReachedException("最大起動回数に到達しました")
|
||||
|
||||
|
||||
# アルトマークデータ連携があったかを確認する
|
||||
def is_done_ultmarc_import(self):
|
||||
|
||||
# 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()
|
||||
# アルトマークデータ連携が無かった場合
|
||||
if record_count == 0:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
# 起動回数をインクリメントする
|
||||
def _increment_run_count(self):
|
||||
try:
|
||||
self._db.begin()
|
||||
# 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();"
|
||||
)
|
||||
|
||||
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);")
|
||||
|
||||
self._db.commit()
|
||||
|
||||
except Exception as e:
|
||||
|
||||
# Exceptionをcatchした場合はrollbakc
|
||||
self._db.rollback()
|
||||
raise e
|
||||
|
||||
# データ取込処理が完了しているかを判定する
|
||||
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()
|
||||
|
||||
# データ取込数が一致している場合
|
||||
if(self._receive_file_count == record_count):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
# 後続処理のすべての処理が完了しているかを判定する
|
||||
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
|
||||
|
||||
if not self._is_done_process("jskult-batch-dcf-inst-merge-io"):
|
||||
return False
|
||||
|
||||
# 全ての後続処理が完了している場合Trueを返す
|
||||
return True
|
||||
|
||||
|
||||
# データ取込処理が完了しているかを判定する
|
||||
def _is_done_process(self, process_name : str):
|
||||
|
||||
# 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()
|
||||
|
||||
if(record_count == 0):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
# 起動回数が最大回数に到達しているか判定する
|
||||
def _is_max_run_count_reached(self):
|
||||
|
||||
# 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();"
|
||||
)
|
||||
|
||||
run_count = record[0]['run_count']
|
||||
|
||||
# 取得した起動回数とフィールド変数の最大起動回数が一致するか確認
|
||||
if run_count == self._max_run_count_flg:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def _activate_max_run_count_flg(self):
|
||||
try:
|
||||
self._db.begin()
|
||||
|
||||
# 最大起動回数フラグにフラグを立てる
|
||||
self._db.execute(f"CALL upsert_jskult_batch_status_manage({self._process_name} {self._process_type} NULL NULL 1);")
|
||||
|
||||
self._db.commit()
|
||||
|
||||
except Exception as e:
|
||||
|
||||
self._db.rollback()
|
||||
raise e
|
||||
Loading…
x
Reference in New Issue
Block a user