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 bcb362d4..9caeb0ec 100644 --- a/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py +++ b/ecs/jskult-batch/src/manager/jskult_batch_status_manager.py @@ -83,7 +83,8 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - COUNT(*) + process_name, + process_date FROM internal07.jskult_batch_status_manage WHERE @@ -93,7 +94,7 @@ class JskultBatchStatusManager: {'process_name': self._process_name} ) - record_count = record[0]['count'] + record_count = len(record) if record_count == 0: raise BatchOperationException("レコードの取得が出来ませんでした。") @@ -137,7 +138,8 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - COUNT(*) + process_name, + process_date FROM internal07.jskult_batch_status_manage WHERE @@ -147,7 +149,7 @@ class JskultBatchStatusManager: {'process_name': self._process_name} ) - record_count = record[0]['count'] + record_count = len(record) if record_count == 0: raise ValueError("レコードの取得が出来ませんでした。") @@ -191,7 +193,8 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - COUNT(*) + process_name, + process_date FROM internal07.jskult_batch_status_manage WHERE @@ -202,7 +205,7 @@ class JskultBatchStatusManager: {'process_name': constants.PROCESS_NAME_ULTMARC_IO} ) - record_count = record[0]['count'] + record_count = len(record) return record_count != 0 except Exception as e: @@ -224,7 +227,8 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - run_count + total_run_count, + process_status FROM internal07.jskult_batch_status_manage WHERE @@ -237,23 +241,25 @@ class JskultBatchStatusManager: if len(record) == 0: raise BatchOperationException("レコードの取得が出来ませんでした。") - run_count = record[0]['run_count'] + total_run_count = record[0]['total_run_count'] + process_status = record[0]['process_status'] self._db.execute( """ CALL internal07.upsert_jskult_batch_status_manage( - :process_name,{self._process_name}, - :process_type,{self._process_type}, - NULL - :run_count, + :process_name, + :process_type, + :process_status, + :total_run_count, NULL ) """, { 'process_name': self._process_name, 'process_type': self._process_type, - 'run_count': run_count + 1, + 'process_status': process_status, + 'total_run_count': total_run_count + 1, } ) @@ -276,28 +282,35 @@ class JskultBatchStatusManager: Returns: bool 後続処理を実行してよい場合はTrue """ - # 自身(後続処理 or 日付テーブル更新)のレコードを取得する - record = self._db.execute_select( - """ - SELECT - COUNT(*) - FROM - internal07.jskult_batch_status_manage - WHERE - process_type = :process_type - AND process_status = :process_status - AND process_date = src07.get_syor_date(); - """, - { - 'process_type': constants.PROCESS_TYPE_DATA_IMPORT, - 'process_status': constants.PROCESS_STATUS_DONE - } - ) + try: + self._db.connect() + # 自身(後続処理 or 日付テーブル更新)のレコードを取得する + record = self._db.execute_select( + """ + SELECT + process_name, + process_date + FROM + internal07.jskult_batch_status_manage + WHERE + process_type = :process_type + AND process_status = :process_status + AND process_date = src07.get_syor_date(); + """, + { + 'process_type': constants.PROCESS_TYPE_DATA_IMPORT, + 'process_status': constants.PROCESS_STATUS_DONE + } + ) - record_count = record[0]['count'] + record_count = len(record) - # データ取込数とデータ登録の件数が一致しているか確認 - return self._receive_file_count == record_count + # データ取込数とデータ登録の件数が一致しているか確認 + return self._receive_file_count == record_count + except Exception as e: + raise BatchOperationException(e) + finally: + self._db.disconnect() def _is_done_post_process(self) -> bool: """後続処理のすべての処理が完了しているかを判定する @@ -342,7 +355,8 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - COUNT(*) + process_name, + process_date FROM internal07.jskult_batch_status_manage WHERE @@ -356,7 +370,7 @@ class JskultBatchStatusManager: } ) - record_count = record[0]['count'] + record_count = len(record) return record_count != 0 @@ -379,20 +393,21 @@ class JskultBatchStatusManager: record = self._db.execute_select( """ SELECT - run_count + total_run_count FROM internal07.jskult_batch_status_manage WHERE - process_name = {self._process_name} + process_name = :process_name AND process_date = src07.get_syor_date(); - """ + """, + {'process_name': self._process_name} ) - run_count = record[0]['run_count'] + total_run_count = record[0]['total_run_count'] # 取得した起動回数とフィールド変数の最大起動回数が一致を確認 - return run_count == self._max_run_count + return total_run_count == self._max_run_count except Exception as e: raise BatchOperationException(e) finally: diff --git a/ecs/jskult-batch/src/system_var/constants.py b/ecs/jskult-batch/src/system_var/constants.py index c9e070cd..2bf1de9a 100644 --- a/ecs/jskult-batch/src/system_var/constants.py +++ b/ecs/jskult-batch/src/system_var/constants.py @@ -29,7 +29,7 @@ PROCESS_TYPE_DATA_IMPORT = 'data_import' # 後続処理 PROCESS_TYPE_POST_PROCESS = 'post_process' # 日付テーブル更新 -PROCESS_TYPE_DATA_IMPORT = 'update_business_day' +PROCESS_TYPE_UPDATE_BUSINESS_DAY = 'update_business_day' # 処理ステータス: # 処理開始 diff --git a/ecs/jskult-batch/tests/manager/test_jskult_batch_status_manager.py b/ecs/jskult-batch/tests/manager/test_jskult_batch_status_manager.py index 948c15cb..3701dddc 100644 --- a/ecs/jskult-batch/tests/manager/test_jskult_batch_status_manager.py +++ b/ecs/jskult-batch/tests/manager/test_jskult_batch_status_manager.py @@ -43,7 +43,8 @@ class TestJskultBatchStatusManager: db.execute('DELETE FROM src07.hdke_tbl') db.execute(""" INSERT INTO src07.hdke_tbl - (syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date) + (syor_date, bch_actf, dump_sts_kbn, + creater, create_date, updater, update_date) VALUES (:syor_date, :bch_actf, :dump_sts_kbn, CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL) """, { @@ -64,7 +65,8 @@ class TestJskultBatchStatusManager: db.connect() db.execute(""" INSERT INTO src07.hdke_tbl - (syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date) + (syor_date, bch_actf, dump_sts_kbn, + creater, create_date, updater, update_date) VALUES ('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL) """) @@ -105,26 +107,21 @@ class TestJskultBatchStatusManager: db.connect() db.execute(""" INSERT INTO src07.hdke_tbl - (syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date) + (syor_date, bch_actf, dump_sts_kbn, + creater, create_date, updater, update_date) VALUES ('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL) """) # バッチステータス管理テーブルを登録 db.execute(""" - INSERT INTO internal07.jskult_batch_status_manage - (process_name,process_date,process_type,process_status,total_run_count,max_run_count_flg) - VALUES - (:process_name,:process_date,:process_type,:process_status,:total_run_count,:max_run_count_flg) - """, - { - 'process_name': 'unittest_process_name', - 'process_date': '2025-05-30', - 'process_type': 'unittest_process_type', - 'process_status': 'retry', - 'total_run_count': '1', - 'max_run_count_flg': '0' - }) + INSERT INTO internal07.jskult_batch_status_manage + (process_name, process_date, process_type, + process_status, total_run_count, max_run_count_flg) + VALUES + ('unittest_process_name', '2025-05-30','unittest_process_type', + 'retry', '1', '0') + """) # Act sut = JskultBatchStatusManager( @@ -151,3 +148,59 @@ class TestJskultBatchStatusManager: actual['process_date'], '%Y/%m/%d') == '2025/05/30' assert actual['process_type'] == 'unittest_process_type' assert actual['process_status'] == 'doing' + + def test_can_run_post_process_success(self): + """ + 完了しているデータ取り込み件数と受信ファイル数が一致している場合、trueが返却されること + 起動回数が+1されていること + """ + # Arrange + # 日付テーブルを登録 + db = Database.get_instance() + db.connect() + db.execute(""" + INSERT INTO src07.hdke_tbl + (syor_date, bch_actf, dump_sts_kbn, + creater, create_date, updater, update_date) + VALUES + ('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL) + """) + + # バッチステータス管理テーブルを登録 + db.execute(""" + INSERT INTO internal07.jskult_batch_status_manage + (process_name, process_date, process_type, + process_status, total_run_count, max_run_count_flg) + VALUES + ('unittest_process_name', '2025-05-30', 'unittest_process_type', + 'start', '0', '0'), + ('data_import_process_1', '2025-05-30','data_import', + 'done', '0', '0'), + ('data_import_process_2', '2025-05-30','data_import', + 'done', '0', '0'), + ('data_import_process_3', '2025-05-30','data_import', + 'done', '0', '0') + """) + + # Act + sut = JskultBatchStatusManager( + 'unittest_process_name', + 'unittest_process_type', + 3, + 3 + ) + actual = sut.can_run_post_process() + + # Assert + assert actual is True + actual_record = db.execute_select(""" + SELECT + total_run_count + FROM + internal07.jskult_batch_status_manage + WHERE + process_name = 'unittest_process_name' + AND process_date = '2025-05-30' + """)[0] + + assert actual_record['total_run_count'] == 1