diff --git a/ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py b/ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py index ff0ca12e..4d0bbec1 100644 --- a/ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py +++ b/ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py @@ -23,13 +23,16 @@ class TrnResultDataBioLotEnvironment(JskultBatchEnvironment): Raises: EnvironmentVariableNotSetException: 環境変数の設定ミス """ - super()._assert_variable_not_empty(self.JSKULT_BACKUP_BUCKET, 'JSKULT_BACKUP_BUCKET') - super()._assert_variable_not_empty(self.BATCH_MANAGE_DYNAMODB_TABLE_NAME, 'BATCH_MANAGE_DYNAMODB_TABLE_NAME') + super()._assert_variable_not_empty( + self.JSKULT_BACKUP_BUCKET, 'JSKULT_BACKUP_BUCKET') + super()._assert_variable_not_empty( + self.BATCH_MANAGE_DYNAMODB_TABLE_NAME, 'BATCH_MANAGE_DYNAMODB_TABLE_NAME') super()._assert_variable_not_empty(self.BATCH_EXECUTION_ID, 'BATCH_EXECUTION_ID') super()._assert_variable_is_int(self.MAX_RUN_COUNT, 'MAX_RUN_COUNT') # MAX_RUN_COUNTは数値として扱うため、検査後に変換 self.MAX_RUN_COUNT = int(self.MAX_RUN_COUNT) super()._assert_variable_not_empty(self.PROCESS_NAME, 'PROCESS_NAME') - super()._assert_variable_not_empty(self.TRANSFER_RESULT_FOLDER, 'TRANSFER_RESULT_FOLDER') - super()._assert_variable_not_empty(self.TRANSFER_RESULT_FILE_NAME, 'TRANSFER_RESULT_FILE_NAME') - + super()._assert_variable_not_empty( + self.TRANSFER_RESULT_FOLDER, 'TRANSFER_RESULT_FOLDER') + super()._assert_variable_not_empty( + self.TRANSFER_RESULT_FILE_NAME, 'TRANSFER_RESULT_FILE_NAME') diff --git a/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py b/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py index 65e7408a..b8c3329d 100644 --- a/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py +++ b/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py @@ -1,25 +1,22 @@ import json + from src.aws.s3 import JskTransferListBucket from src.batch.environment.trn_result_data_bio_lot_environment import \ TrnResultDataBioLotEnvironment from src.batch.jskult_batch_entrypoint import JskultBatchEntrypoint -from src.manager.jskult_batch_run_manager import JskultBatchRunManager -from src.manager.jskult_batch_status_manager import JskultBatchStatusManager -from src.manager.jskult_hdke_tbl_manager import JskultHdkeTblManager from src.db.database import Database from src.error.exceptions import (BatchOperationException, EnvironmentVariableNotSetException, MaxRunCountReachedException) from src.logging.get_logger import get_logger +from src.manager.jskult_batch_run_manager import JskultBatchRunManager +from src.manager.jskult_batch_status_manager import JskultBatchStatusManager +from src.manager.jskult_hdke_tbl_manager import JskultHdkeTblManager from src.system_var import constants +logger = get_logger('生物由来ロット分解') - - - -logger = get_logger('生物由来卸販売ロット分解') - class TrnResultDataBioLot(JskultBatchEntrypoint): def __init__(self): super().__init__() @@ -33,9 +30,8 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): return def execute(self): - """生物由来卸販売ロット分解""" - logger.info('生物由来卸販売ロット分解処理開始') - + """生物由来ロット分解""" + logger.info('生物由来ロット分解処理開始') jskult_hdke_tbl_manager = JskultHdkeTblManager() jskult_batch_run_manager = JskultBatchRunManager( @@ -43,7 +39,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): self.environment.BATCH_EXECUTION_ID) if not jskult_hdke_tbl_manager.can_run_process(): logger.error( - '日次バッチ処理中またはdump取得が正常終了していないため、生物由来卸販売ロット分解処理を終了します。') + '日次バッチ処理中またはdump取得が正常終了していないため、生物由来ロット分解処理を終了します。') # バッチ実行管理テーブルをfailedで登録 jskult_batch_run_manager.batch_failed() return @@ -61,6 +57,8 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): # バッチ実行管理テーブルをfailedで登録 jskult_batch_run_manager.batch_failed() + return + with open(transfer_list_file_path) as f: transfer_list = json.load(f) @@ -70,28 +68,31 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): jskult_batch_status_manager = JskultBatchStatusManager( self.environment.PROCESS_NAME, - # TODO チケットNEWDWH2021-1847の実装で作成した定数に置き換え - 'post_process', + constants.PROCESS_TYPE_POST_PROCESS, self.environment.MAX_RUN_COUNT, receive_file_count ) try: - jskult_batch_status_manager.set_process_status(constants.BATCH_ACTF_BATCH_START) + jskult_batch_status_manager.set_process_status( + constants.BATCH_ACTF_BATCH_START) try: if not jskult_batch_status_manager.can_run_post_process(): # 後続処理の起動条件を満たしていない場合 # 処理ステータスを「処理待」に設定 - jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_WAITING) + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_WAITING) # バッチ実行管理テーブルに「retry」で登録 jskult_batch_run_manager.batch_retry() + logger.info('起動条件を満たしていないため、生物由来ロット分解処理を終了します。') return except MaxRunCountReachedException: - logger.info('最大起動回数に到達したため、生物由来卸販売ロット分解処理を実行します。') + logger.info('最大起動回数に到達したため、生物由来ロット分解処理を実行します。') - jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_DOING) + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_DOING) db = Database.get_instance() try: db.connect() @@ -102,18 +103,20 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): self._insert_trn_result_data_bio_lot(db) # 生物由来ロット分解データの不要レコードを削除する self._delete_empty_lot_record(db) - # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする - self._set_expr_dt_from_lot_num_mst(db) # 施設情報を生物由来ロット分解データにセットする - self._set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(db) + self._set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck( + db) + # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする + self._set_expr_dt_from_customer_lotno_all(db) db.commit() - logger.info('生物由来卸販売ロット分解処理終了') + logger.info('生物由来ロット分解処理終了') # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 - logger.info("生物由来卸販売ロット分解処理を正常終了します。") + logger.info("生物由来ロット分解処理を正常終了します。") jskult_batch_run_manager.batch_success() - jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_DONE) + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_DONE) return - + except Exception as e: db.rollback() raise BatchOperationException(e) @@ -121,10 +124,10 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): db.disconnect() except Exception as e: # 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録 - logger.exception(f'予期せぬエラーが発生したため、生物由来卸販売ロット分解処理を終了します。{e}') + logger.exception(f'予期せぬエラーが発生したため、生物由来ロット分解処理を終了します。{e}') jskult_batch_run_manager.batch_failed() - jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_ERROR) - + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_ERROR) def _delete_not_confirm_data_in_trn_result_data_bio_lot(self, db: Database): logger.info('生物由来ロット分解データの未確定データ削除開始') @@ -136,13 +139,12 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): AND bio.seq_no = lot.seq_no AND IFNULL(bio.upd_date, bio.ins_date) >= src07.get_syor_date() """ - res = db.execute(sql) + db.execute(sql) except Exception as e: logger.info('生物由来ロット分解データの未確定データ削除に失敗') raise e logger.info('生物由来ロット分解データの未確定データ削除に成功') - def _insert_trn_result_data_bio_lot(self, db: Database): logger.info('生物由来ロット分解データの作成開始') try: @@ -157,7 +159,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.edit_whlslr_org_cd AS edit_whlslr_org_cd, bio.orig_univ_product_cd AS orig_univ_product_cd, bio.edit_deal_div_cd AS edit_deal_div_cd, - bio.cnvs_sales_dt AS cnvs_sales_dt, + bio.cnvs_sales_dt AS cnvs_sales_dt, -- datetime → date bio.orig_slip_no AS orig_slip_no, bio.orig_prod_nm AS orig_prod_nm, bio.edit_endusr_cd AS edit_endusr_cd, @@ -169,7 +171,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): WHEN 2 THEN bio.cnvs_lot_no_2 WHEN 3 THEN bio.cnvs_lot_no_3 END AS cnvs_lot_no, - bio.load_dt AS load_dt, + bio.load_dt AS load_dt, -- datetime → date bio.cnvs_deal_div_cd AS cnvs_deal_div_cd, bio.cls_deal_div_nm AS cls_deal_div_nm, bio.cnvs_depo_cd AS cnvs_depo_cd, @@ -187,8 +189,8 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.cnvs_inst_cd AS cnvs_inst_cd, bio.cls_inst_nm AS cls_inst_nm, -- COM_施設 or COM_薬局 or メルク独自施設マスタから後ほどセット - NULL AS inst_addr, - NULL AS inst_tel, + NULL AS address, + NULL AS tel_num, bio.result_cd AS result_cd, bio.src_cd AS src_cd, -- 判定結果CDより値を設定する @@ -200,14 +202,14 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): WHEN 'Z' THEN 'エラー(想定外)' END AS data_kbn, -- SRC_種類より値を設定する - CASE bio.result_cd + CASE bio.src_cd WHEN '1' THEN 'VAN' WHEN '2' THEN '手入力' WHEN '3' THEN 'VAN-Web' WHEN 'S' THEN 'SCSK-VAN' END AS if_kind, -- 製品コード、ロット番号でロットマスタより後ほどセット - NULL AS ck_last_dt_txt + NULL AS expr_dt FROM src07.trn_result_data_bio bio -- 生物由来変換マスタ @@ -222,7 +224,6 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): raise e logger.info('生物由来ロット分解データの作成に成功') - def _delete_empty_lot_record(self, db: Database): logger.info('生物由来ロット分解データのロット番号が空のレコードを削除開始') try: @@ -232,13 +233,12 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): -- 空白15桁のデータはロット情報が空とみなして削除する lot.cnvs_lot_no = REPEAT(' ', 15) OR lot.cnvs_lot_no IS NULL """ - res = db.execute(sql) + db.execute(sql) except Exception as e: logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に失敗') raise e logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に成功') - def _set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(self, db: Database): logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') try: @@ -257,7 +257,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): AND DATE_FORMAT(bio.cnvs_sales_dt, '%Y%m') BETWEEN mim.eff_start_ym AND mim.eff_end_ym -- 施設住所 - SET bio.inst_addr = ( + SET bio.address = ( CASE LEFT(bio.cnvs_inst_cd, 2) WHEN '00' THEN ci.inst_addr WHEN '03' THEN cp.inst_addr @@ -265,22 +265,22 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): END ), -- 施設電話番号 - bio.inst_tel = ( + bio.tel_num = ( CASE LEFT(bio.cnvs_inst_cd, 2) WHEN '00' THEN ci.inst_phone_number - WHEN '03' THEN cm.inst_phone_number + WHEN '03' THEN cp.inst_phone_number ELSE mim.tel_no END ) """ - res = db.execute(sql) + db.execute(sql) except Exception as e: - logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット失敗') + logger.info( + 'COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット失敗') raise e logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット成功') - - def _set_ck_last_dt_txt_from_customer_lotno_all(self, db: Database): + def _set_expr_dt_from_customer_lotno_all(self, db: Database): # ロットマスタから有効期限をセット logger.info('ロットマスタから有効期限をセット開始') try: @@ -291,9 +291,9 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): ON bio.cnvs_prod_cd = cla.material_cd AND bio.cnvs_lot_no = cla.lot_no_txt SET - bio.ck_last_dt_txt = cla.ck_last_dt_txt + bio.expr_dt = STR_TO_DATE(cla.ck_last_dt_txt, '%Y%m%d') """ - res = db.execute(sql) + db.execute(sql) except Exception as e: logger.info('ロットマスタから有効期限をセット失敗') raise e