From a49a6162354471801af7f961de7434323ad8798a Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Wed, 28 May 2025 17:52:59 +0900 Subject: [PATCH 01/15] =?UTF-8?q?=E5=85=B1=E9=80=9A=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=81=A8=E5=8F=82=E8=80=83=E5=85=83=E3=81=AE=E3=82=BD=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AE=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 446 +++++++++++++++++- 1 file changed, 444 insertions(+), 2 deletions(-) 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 d0142cbc..df122320 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,10 +1,452 @@ +import json +from src.aws.s3 import JskTransferListBucket +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.batch.jskult_batch_entrypoint import JskultBatchEntrypoint +from src.db.database import Database +from src.error.exceptions import (BatchOperationException, + MaxRunCountReachedException) +from src.system_var import environment +from src.logging.get_logger import get_logger + + + +logger = get_logger('生物由来卸販売ロット分解') + class TrnResultDataBioLot(JskultBatchEntrypoint): def __init__(self): super().__init__() def execute(self): - # TODO: ここで生物由来ロット分解処理を実行する - pass + """生物由来卸販売ロット分解""" + logger.info('生物由来卸販売ロット分解処理開始') + + + jskult_hdke_tbl_manager = JskultHdkeTblManager() + jskult_batch_run_manager = JskultBatchRunManager( + environment.BATCH_EXECUTION_ID) + if not jskult_hdke_tbl_manager.can_run_process(): + logger.error( + '日次バッチ処理中またはdump取得が正常終了していないため、生物由来卸販売ロット分解処理を終了します。') + # バッチ実行管理テーブルをfailedで登録 + jskult_batch_run_manager.batch_failed() + return + + # 業務日付を取得 + _, _, process_date = jskult_hdke_tbl_manager.get_batch_statuses() + + # 転送ファイル一覧を取得し、転送件数を取得 + try: + transfer_list_bucket = JskTransferListBucket() + transfer_list_file_path = transfer_list_bucket.download_transfer_result_file( + process_date) + except Exception as e: + logger.exception(f'転送ファイル一覧の取得に失敗しました。 {e}') + # バッチ実行管理テーブルをfailedで登録 + jskult_batch_run_manager.batch_failed() + + with open(transfer_list_file_path) as f: + transfer_list = json.load(f) + + # 実消化データ + アルトマークデータの転送件数を合算し、受信ファイル件数とする + receive_file_count = len( + transfer_list['jsk_transfer_list']) + len(transfer_list['ult_transfer_list']) + + jskult_batch_status_manager = JskultBatchStatusManager( + environment.PROCESS_NAME, + # TODO チケットNEWDWH2021-1847の実装で作成した定数に置き換え + 'post_process', + environment.MAX_RUN_COUNT, + receive_file_count + ) + try: + + jskult_batch_status_manager.set_process_status("start") + try: + if not jskult_batch_status_manager.can_run_post_process(): + # 後続処理の起動条件を満たしていない場合 + # 処理ステータスを「処理待」に設定 + jskult_batch_status_manager.set_process_status("waiting") + + # バッチ実行管理テーブルに「retry」で登録 + jskult_batch_run_manager.batch_retry() + + return + except MaxRunCountReachedException: + logger.info('最大起動回数に到達したため、生物由来卸販売ロット分解処理を実行します。') + + jskult_batch_status_manager.set_process_status("doing") + db = Database.get_instance() + try: + db.connect() + db.begin() + # 生物由来ロット分解データの未確定データを削除する + self._delete_not_confirm_data_in_bio_sales_lot(db) + # 生物由来ロット分解データを作成する + self._insert_bio_sales_lot(db) + # 生物由来ロット分解データの不要レコードを削除する + self._delete_empty_lot_record(db) + # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする + self._set_expr_dt_from_lot_num_mst(db) + db.commit() + logger.info('生物由来卸販売ロット分解処理終了') + return + except Exception as e: + db.rollback() + raise BatchOperationException(e) + finally: + db.disconnect() + + # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 + logger.info("生物由来卸販売ロット分解処理を正常終了します。") + jskult_batch_run_manager.batch_success() + jskult_batch_status_manager.set_process_status("done") + + return + + except Exception as e: + # 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録 + logger.exception(f'予期せぬエラーが発生したため、生物由来卸販売ロット分解処理を終了します。{e}') + jskult_batch_run_manager.batch_failed() + jskult_batch_status_manager.set_process_status("failed") + + + def _delete_not_confirm_data_in_bio_sales_lot(self, db: Database): + logger.info('生物由来ロット分解データの未確定データ削除開始') + try: + sql = """ + DELETE lot FROM src07.trn_result_data_bio_lot AS lot + INNER JOIN src07.trn_result_data_bio AS bio + ON bio.slip_mgt_num = lot.slip_mgt_num + AND DATE(bio.dwh_upd_dt) >= src07.get_syor_date() + """ + res = db.execute(sql) + except Exception as e: + logger.info('生物由来ロット分解データの未確定データ削除に失敗') + raise e + logger.info('生物由来ロット分解データの未確定データ削除に成功') + + + def _insert_bio_sales_lot(self, db: Database): + logger.info('生物由来ロット分解データの作成開始') + try: + sql = """ + INSERT INTO src07.bio_sales_lot + SELECT + bio.slip_mgt_num AS slip_mgt_num, + conv.conv_cd AS conv_cd, + bio.rec_whs_cd AS rec_whs_cd, + bio.rec_whs_sub_cd AS rec_whs_sub_cd, + bio.rec_whs_org_cd AS rec_whs_org_cd, + bio.rec_comm_cd AS rec_comm_cd, + bio.rec_tran_kbn AS rec_tran_kbn, + bio.rev_hsdnymd_srk AS rev_hsdnymd_srk, + bio.rec_urag_num AS rec_urag_num, + bio.rec_comm_name AS rec_comm_name, + bio.rec_nonyu_fcl_name AS rec_nonyu_fcl_name, + bio.rec_nonyu_fcl_addr AS rec_nonyu_fcl_addr, + -- 3レコードに分解する + CASE conv.conv_cd + WHEN 1 THEN bio.rec_lot_num1 + WHEN 2 THEN bio.rec_lot_num2 + WHEN 3 THEN bio.rec_lot_num3 + END AS rec_lot_num, + bio.rec_ymd AS rec_ymd, + bio.v_tran_cd AS v_tran_cd, + bio.tran_kbn_name AS tran_kbn_name, + bio.whs_org_cd AS whs_org_cd, + bio.v_whsorg_cd AS v_whsorg_cd, + bio.whs_org_name AS whs_org_name, + bio.v_whs_cd AS v_whs_cd, + bio.whs_name AS whs_name, + bio.nonyu_fcl_cd AS nonyu_fcl_cd, + bio.v_inst_cd AS v_inst_cd, + bio.v_inst_kn AS v_inst_kn, + bio.v_inst_name AS v_inst_name, + bio.v_inst_addr AS v_inst_addr, + bio.comm_cd AS comm_cd, + bio.product_name AS product_name, + bio.whs_rep_comm_name AS whs_rep_comm_name, + bio.whs_rep_nonyu_fcl_name AS whs_rep_nonyu_fcl_name, + bio.whs_rep_nonyu_fcl_addr AS whs_rep_nonyu_fcl_addr, + /* 製品名と製品コードは後ほどV製品マスタからセットする */ + -- 製品名 + NULL AS mkr_inf_1, + -- 製品コード + NULL AS mkr_cd, + -- 数量 + -- Veeva取引区分の先頭が「2」の場合、マイナス表示にする + CASE conv.conv_cd + WHEN 1 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty1 >= 1) THEN -bio.qty1 + ELSE bio.qty1 + END + WHEN 2 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty2 >= 1) THEN -bio.qty2 + ELSE bio.qty2 + END + WHEN 3 THEN + CASE + WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty3 >= 1) THEN -bio.qty3 + ELSE bio.qty3 + END + END AS qty, + bio.slip_org_kbn AS slip_org_kbn, + bio.bef_slip_mgt_num AS bef_slip_mgt_num, + CASE conv.conv_cd + WHEN 1 THEN bio.err_flg11 + WHEN 2 THEN bio.err_flg12 + WHEN 3 THEN bio.err_flg13 + END AS lot_no_err_flg, + CASE bio.err_flg20 + WHEN 'M' THEN '*' + ELSE NULL + END AS iko_flg, + CASE bio.rec_sts_kbn + WHEN '0' THEN bio.rec_sts_kbn + WHEN '1' THEN + CASE conv.conv_cd + WHEN 1 THEN bio.err_flg11 + WHEN 2 THEN bio.err_flg12 + WHEN 3 THEN bio.err_flg13 + END + END AS rec_sts_kbn, + CASE + WHEN bio.bef_slip_mgt_num IS NOT NULL THEN bio.ins_dt + ELSE NULL + END AS ins_dt, + CASE + WHEN bio.bef_slip_mgt_num IS NOT NULL THEN bio.ins_usr + ELSE NULL + END AS ins_usr, + bio.dwh_upd_dt AS dwh_upd_dt, + /* 施設情報は後ほどセットする */ + -- 施設コード + NULL AS inst_cd, + -- 正式施設名(漢字) + NULL AS inst_name_form, + -- 施設住所 + NULL AS address, + -- 施設電話番号 + NULL AS tel_num, + CASE conv.conv_cd + WHEN 1 THEN + CASE bio.err_flg11 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済)' + WHEN '6' THEN 'ロット不明' + WHEN '7' THEN '除外' + WHEN '8' THEN '除外' + WHEN 'Z' THEN '除外' + END + WHEN 2 THEN + CASE bio.err_flg12 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済)' + WHEN '6' THEN 'ロット不明' + WHEN '7' THEN '除外' + WHEN '8' THEN '除外' + WHEN 'Z' THEN '除外' + END + WHEN 3 THEN + CASE bio.err_flg13 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN 'ロットエラー' + WHEN '3' THEN 'エラー(解消済)' + WHEN '4' THEN 'ロット不明' + WHEN '5' THEN 'エラー(解消済)' + WHEN '6' THEN 'ロット不明' + WHEN '7' THEN '除外' + WHEN '8' THEN '除外' + WHEN 'Z' THEN '除外' + END + END AS data_kbn, + CASE bio.slip_org_kbn + WHEN 'J' THEN 'JD-NET' + WHEN 'N' THEN 'NHI' + WHEN 'H' THEN '手入力' + END AS data_kind, + CASE conv.conv_cd + WHEN 1 THEN + CASE bio.err_flg11 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + WHEN 2 THEN + CASE bio.err_flg12 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + WHEN 3 THEN + CASE bio.err_flg13 + WHEN '0' THEN '正常' + WHEN '1' THEN 'ロットエラー' + WHEN '2' THEN '日付エラー' + WHEN '3' THEN 'ロットエラー(解消済)' + WHEN '4' THEN 'ロットエラー(調査不能)' + WHEN '5' THEN '日付エラー(解消済)' + WHEN '6' THEN '日付エラー(調査不能)' + WHEN '7' THEN '除外(卸都合)' + WHEN '8' THEN '除外(再送信)' + WHEN 'Z' THEN '過去データ' + END + END AS err_dtl_kind, + NULL AS expr_dt + FROM + src05.bio_sales bio + -- 生物由来変換マスタ + CROSS JOIN src07.bio_conv conv + WHERE + bio.err_flg1 = '0' + AND bio.err_flg2 = '0' + AND bio.err_flg3 = '0' + AND bio.err_flg4 = '0' + AND bio.err_flg5 = '0' + AND bio.err_flg6 = '0' + AND bio.err_flg7 = '0' + AND bio.err_flg8 = '0' + AND bio.err_flg9 = '0' + AND bio.err_flg10 = '0' + AND bio.rec_sts_kbn <> '99' + AND DATE(bio.dwh_upd_dt) >= src05.get_syor_date() + """ + res = db.execute(sql) + + except Exception as e: + logger.info('生物由来ロット分解データの作成に失敗') + raise e + logger.info('生物由来ロット分解データの作成に成功') + + + def _delete_empty_lot_record(self, db: Database): + logger.info('生物由来ロット分解データの製造番号が空のレコードを削除開始') + try: + sql = """ + DELETE FROM src07.bio_sales_lot lot + WHERE + -- 空白15桁のデータはロット情報が空とみなして削除する + lot.rec_lot_num = REPEAT(' ', 15) OR lot.rec_lot_num IS NULL + """ + res = db.execute(sql) + except Exception as e: + logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に失敗') + raise e + logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に成功') + + + def _set_inst_info_from_mdb_or_mst_inst(self, db: Database): + logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット開始') + try: + sql = """ + UPDATE + src07.bio_sales_lot bio + LEFT OUTER JOIN internal05.view_mdb_cnv_mst mdb + ON bio.v_inst_cd = mdb.hco_vid_v + LEFT OUTER JOIN src05.mst_inst inst + ON bio.v_inst_cd = inst.inst_cd + SET + -- 施設コード + bio.inst_cd = ( + CASE + WHEN mdb.mdb_cd IS NOT NULL THEN mdb.mdb_cd + ELSE bio.v_inst_cd + END + ), + -- 正式施設名(漢字) + bio.inst_name_form = ( + CASE + WHEN mdb.mdb_cd IS NOT NULL THEN mdb.inst_name_form + ELSE inst.inst_name_form + END + ), + -- 施設住所 + bio.address = ( + CASE + WHEN mdb.mdb_cd IS NOT NULL THEN mdb.address + ELSE inst.address + END + ), + -- 施設電話番号 + bio.tel_num = ( + CASE + WHEN mdb.mdb_cd IS NOT NULL THEN mdb.tel_num + ELSE inst.tel_num + END + ) + """ + res = db.execute(sql) + except Exception as e: + logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに失敗') + raise e + logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに成功') + + + def _set_prd_info_from_v_prd_mst(self, db: Database): + logger.info('V製品マスタから製品情報を生物由来ロット分解データにセット開始') + try: + sql = """ + UPDATE + src07.bio_sales_lot bio + LEFT OUTER JOIN src05.phm_prd_mst_v prd + ON bio.comm_cd = prd.prd_cd + AND STR_TO_DATE(bio.rev_hsdnymd_srk,'%Y%m%d') BETWEEN prd.start_date AND prd.end_date + AND prd.rec_sts_kbn <> '9' + SET + bio.mkr_inf_1 = prd.mkr_inf_1, + bio.mkr_cd = prd.mkr_cd + """ + res = db.execute(sql) + except Exception as e: + logger.info('V製品マスタから製品情報を生物由来ロット分解データにセットに失敗') + raise e + logger.info('V製品マスタから製品情報を生物由来ロット分解データにセットに成功') + + + def _set_expr_dt_from_lot_num_mst(self, db: Database): + # 製造ロット管理番号マスタから有効期限をセット + logger.info('製造ロット管理番号マスタから有効期限をセット開始') + try: + sql = """ + UPDATE + src07.bio_sales_lot bio + LEFT OUTER JOIN src05.lot_num_mst lot + ON bio.mkr_cd = lot.ser_num + AND bio.rec_lot_num = lot.lot_num + SET + bio.expr_dt = lot.expr_dt + """ + res = db.execute(sql) + except Exception as e: + logger.info('製造ロット管理番号マスタから有効期限をセットに失敗') + raise e + logger.info('製造ロット管理番号マスタから有効期限をセットに成功') From bb015efe3ad3956435771679ea39e82b5ef6f8bc Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Wed, 28 May 2025 19:12:22 +0900 Subject: [PATCH 02/15] =?UTF-8?q?=E7=94=9F=E7=89=A9=E7=94=B1=E6=9D=A5?= =?UTF-8?q?=E3=83=AD=E3=83=83=E3=83=88=E5=88=86=E8=A7=A3=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E6=9C=AA=E7=A2=BA=E5=AE=9A=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 df122320..68e31531 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 @@ -120,8 +120,9 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): sql = """ DELETE lot FROM src07.trn_result_data_bio_lot AS lot INNER JOIN src07.trn_result_data_bio AS bio - ON bio.slip_mgt_num = lot.slip_mgt_num - AND DATE(bio.dwh_upd_dt) >= src07.get_syor_date() + ON bio.account_ym = lot.account_ym + AND bio.seq_no = lot.seq_no + AND DATE(bio.last_upd_dtt) >= src07.get_syor_date() """ res = db.execute(sql) except Exception as e: @@ -338,7 +339,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): AND bio.err_flg9 = '0' AND bio.err_flg10 = '0' AND bio.rec_sts_kbn <> '99' - AND DATE(bio.dwh_upd_dt) >= src05.get_syor_date() + AND DATE(bio.dwh_upd_dt) >= src07.get_syor_date() """ res = db.execute(sql) From 20907bc4bdd102d9ef191ee17ff96852cea8c397 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Wed, 28 May 2025 20:54:33 +0900 Subject: [PATCH 03/15] =?UTF-8?q?=E7=94=9F=E7=89=A9=E7=94=B1=E6=9D=A5?= =?UTF-8?q?=E3=83=AD=E3=83=83=E3=83=88=E5=88=86=E8=A7=A3=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E4=BD=9C=E6=88=90=E3=81=AE=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E7=B5=90=E5=90=88=E4=BB=A5=E5=A4=96=E3=81=BE=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 256 ++++-------------- 1 file changed, 60 insertions(+), 196 deletions(-) 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 68e31531..3dd1a7bb 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 @@ -135,211 +135,75 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): logger.info('生物由来ロット分解データの作成開始') try: sql = """ - INSERT INTO src07.bio_sales_lot + INSERT INTO src07.trn_result_data_bio_lot SELECT - bio.slip_mgt_num AS slip_mgt_num, + bio.account_ym AS account_ym, + bio.seq_no AS seq_no, conv.conv_cd AS conv_cd, - bio.rec_whs_cd AS rec_whs_cd, - bio.rec_whs_sub_cd AS rec_whs_sub_cd, - bio.rec_whs_org_cd AS rec_whs_org_cd, - bio.rec_comm_cd AS rec_comm_cd, - bio.rec_tran_kbn AS rec_tran_kbn, - bio.rev_hsdnymd_srk AS rev_hsdnymd_srk, - bio.rec_urag_num AS rec_urag_num, - bio.rec_comm_name AS rec_comm_name, - bio.rec_nonyu_fcl_name AS rec_nonyu_fcl_name, - bio.rec_nonyu_fcl_addr AS rec_nonyu_fcl_addr, + bio.orig_whlslr_cd AS orig_whlslr_cd, + bio.orig_whlslr_sub_cd AS orig_whlslr_sub_cd, + 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.orig_slip_no AS orig_slip_no, + bio.orig_prod_nm AS orig_prod_nm, + bio.edit_endusr_cd AS edit_endusr_cd, + bio.orig_endusr_nm AS orig_endusr_nm, + bio.orig_jd45_addr_txt AS orig_jd45_addr_txt, -- 3レコードに分解する CASE conv.conv_cd - WHEN 1 THEN bio.rec_lot_num1 - WHEN 2 THEN bio.rec_lot_num2 - WHEN 3 THEN bio.rec_lot_num3 - END AS rec_lot_num, - bio.rec_ymd AS rec_ymd, - bio.v_tran_cd AS v_tran_cd, - bio.tran_kbn_name AS tran_kbn_name, - bio.whs_org_cd AS whs_org_cd, - bio.v_whsorg_cd AS v_whsorg_cd, - bio.whs_org_name AS whs_org_name, - bio.v_whs_cd AS v_whs_cd, - bio.whs_name AS whs_name, - bio.nonyu_fcl_cd AS nonyu_fcl_cd, - bio.v_inst_cd AS v_inst_cd, - bio.v_inst_kn AS v_inst_kn, - bio.v_inst_name AS v_inst_name, - bio.v_inst_addr AS v_inst_addr, - bio.comm_cd AS comm_cd, - bio.product_name AS product_name, - bio.whs_rep_comm_name AS whs_rep_comm_name, - bio.whs_rep_nonyu_fcl_name AS whs_rep_nonyu_fcl_name, - bio.whs_rep_nonyu_fcl_addr AS whs_rep_nonyu_fcl_addr, - /* 製品名と製品コードは後ほどV製品マスタからセットする */ - -- 製品名 - NULL AS mkr_inf_1, - -- 製品コード - NULL AS mkr_cd, - -- 数量 - -- Veeva取引区分の先頭が「2」の場合、マイナス表示にする - CASE conv.conv_cd - WHEN 1 THEN - CASE - WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty1 >= 1) THEN -bio.qty1 - ELSE bio.qty1 - END - WHEN 2 THEN - CASE - WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty2 >= 1) THEN -bio.qty2 - ELSE bio.qty2 - END - WHEN 3 THEN - CASE - WHEN (LEFT(bio.v_tran_cd, 1) = 2 AND bio.qty3 >= 1) THEN -bio.qty3 - ELSE bio.qty3 - END - END AS qty, - bio.slip_org_kbn AS slip_org_kbn, - bio.bef_slip_mgt_num AS bef_slip_mgt_num, - CASE conv.conv_cd - WHEN 1 THEN bio.err_flg11 - WHEN 2 THEN bio.err_flg12 - WHEN 3 THEN bio.err_flg13 - END AS lot_no_err_flg, - CASE bio.err_flg20 - WHEN 'M' THEN '*' - ELSE NULL - END AS iko_flg, - CASE bio.rec_sts_kbn - WHEN '0' THEN bio.rec_sts_kbn - WHEN '1' THEN - CASE conv.conv_cd - WHEN 1 THEN bio.err_flg11 - WHEN 2 THEN bio.err_flg12 - WHEN 3 THEN bio.err_flg13 - END - END AS rec_sts_kbn, - CASE - WHEN bio.bef_slip_mgt_num IS NOT NULL THEN bio.ins_dt - ELSE NULL - END AS ins_dt, - CASE - WHEN bio.bef_slip_mgt_num IS NOT NULL THEN bio.ins_usr - ELSE NULL - END AS ins_usr, - bio.dwh_upd_dt AS dwh_upd_dt, - /* 施設情報は後ほどセットする */ - -- 施設コード - NULL AS inst_cd, - -- 正式施設名(漢字) - NULL AS inst_name_form, - -- 施設住所 - NULL AS address, - -- 施設電話番号 - NULL AS tel_num, - CASE conv.conv_cd - WHEN 1 THEN - CASE bio.err_flg11 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN 'ロットエラー' - WHEN '3' THEN 'エラー(解消済)' - WHEN '4' THEN 'ロット不明' - WHEN '5' THEN 'エラー(解消済)' - WHEN '6' THEN 'ロット不明' - WHEN '7' THEN '除外' - WHEN '8' THEN '除外' - WHEN 'Z' THEN '除外' - END - WHEN 2 THEN - CASE bio.err_flg12 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN 'ロットエラー' - WHEN '3' THEN 'エラー(解消済)' - WHEN '4' THEN 'ロット不明' - WHEN '5' THEN 'エラー(解消済)' - WHEN '6' THEN 'ロット不明' - WHEN '7' THEN '除外' - WHEN '8' THEN '除外' - WHEN 'Z' THEN '除外' - END - WHEN 3 THEN - CASE bio.err_flg13 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN 'ロットエラー' - WHEN '3' THEN 'エラー(解消済)' - WHEN '4' THEN 'ロット不明' - WHEN '5' THEN 'エラー(解消済)' - WHEN '6' THEN 'ロット不明' - WHEN '7' THEN '除外' - WHEN '8' THEN '除外' - WHEN 'Z' THEN '除外' - END + WHEN 1 THEN bio.cnvs_lot_no_1 + 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.cnvs_deal_div_cd AS cnvs_deal_div_cd, + bio.cls_deal_div_nm AS cls_deal_div_nm, + bio.cnvs_depo_cd + bio.cls_depo_nm AS cls_depo_nm, + bio.cnvs_whlslr_cd AS cnvs_whlslr_cd, + bio.cls_whlslr_nm AS cls_whlslr_nm, + bio.cls_prod_nm AS cls_prod_nm, + bio.cnvs_prod_cd AS nvs_prod_cd, + bio.cnvs_lot_sales_qty_1 AS cnvs_lot_sales_qty_1, + bio.cnvs_inst_cd AS cnvs_inst_cd, + bio.cls_inst_nm AS cls_inst_nm, + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN src05.com_inst.inst_addr + WHEN '03' THEN src05.com_pharm.inst_addr + ELSE src07.mst_inst_merck.addr2_nm_kj + END AS inst_addr, + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN src05.com_inst.inst_phone_number + WHEN '03' THEN src05.com_pharm.inst_phone_number + WHEN src07.mst_inst_merck.tel_no + END AS inst_tel AS inst_tel, + bio.result_cd AS result_cd, + bio.src_cd AS src_cd, + -- 判定結果CDより値を設定する + CASE bio.result_cd + WHEN '1:正常' THEN '正常' + WHEN '2:卸間転送除外対象データ' THEN '卸間転送除外対象' + WHEN 'E:事前想定したエラーが発生したデータ' THEN 'エラー' + WHEN 'D:レコード重複エラーが発生したデータ' THEN 'エラー(重複)' + WHEN 'Z:想定外のエラーが発生したデータ' THEN 'エラー(想定外)' END AS data_kbn, - CASE bio.slip_org_kbn - WHEN 'J' THEN 'JD-NET' - WHEN 'N' THEN 'NHI' - WHEN 'H' THEN '手入力' - END AS data_kind, - CASE conv.conv_cd - WHEN 1 THEN - CASE bio.err_flg11 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN '日付エラー' - WHEN '3' THEN 'ロットエラー(解消済)' - WHEN '4' THEN 'ロットエラー(調査不能)' - WHEN '5' THEN '日付エラー(解消済)' - WHEN '6' THEN '日付エラー(調査不能)' - WHEN '7' THEN '除外(卸都合)' - WHEN '8' THEN '除外(再送信)' - WHEN 'Z' THEN '過去データ' - END - WHEN 2 THEN - CASE bio.err_flg12 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN '日付エラー' - WHEN '3' THEN 'ロットエラー(解消済)' - WHEN '4' THEN 'ロットエラー(調査不能)' - WHEN '5' THEN '日付エラー(解消済)' - WHEN '6' THEN '日付エラー(調査不能)' - WHEN '7' THEN '除外(卸都合)' - WHEN '8' THEN '除外(再送信)' - WHEN 'Z' THEN '過去データ' - END - WHEN 3 THEN - CASE bio.err_flg13 - WHEN '0' THEN '正常' - WHEN '1' THEN 'ロットエラー' - WHEN '2' THEN '日付エラー' - WHEN '3' THEN 'ロットエラー(解消済)' - WHEN '4' THEN 'ロットエラー(調査不能)' - WHEN '5' THEN '日付エラー(解消済)' - WHEN '6' THEN '日付エラー(調査不能)' - WHEN '7' THEN '除外(卸都合)' - WHEN '8' THEN '除外(再送信)' - WHEN 'Z' THEN '過去データ' - END - END AS err_dtl_kind, - NULL AS expr_dt + -- SRC_種類より値を設定する + CASE bio.result_cd + WHEN '1:VAN' THEN 'VAN' + WHEN '2:手入力' THEN '手入力' + WHEN '3:VAN-Web' THEN 'VAN-Web' + WHEN 'S:SCSK-VAN' THEN 'SCSK-VAN' + END AS if_kind, + -- 製品コード、ロット番号でロットマスタよりセット + bio.ck_last_dt_txt AS ck_last_dt_txt FROM - src05.bio_sales bio + src07.trn_result_data_bio bio -- 生物由来変換マスタ CROSS JOIN src07.bio_conv conv WHERE - bio.err_flg1 = '0' - AND bio.err_flg2 = '0' - AND bio.err_flg3 = '0' - AND bio.err_flg4 = '0' - AND bio.err_flg5 = '0' - AND bio.err_flg6 = '0' - AND bio.err_flg7 = '0' - AND bio.err_flg8 = '0' - AND bio.err_flg9 = '0' - AND bio.err_flg10 = '0' - AND bio.rec_sts_kbn <> '99' - AND DATE(bio.dwh_upd_dt) >= src07.get_syor_date() + DATE(bio.last_upd_dtt) >= src07.get_syor_date() """ res = db.execute(sql) From 2a5b5e287676e9646ccf148f2e0e216487028445 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 10:19:02 +0900 Subject: [PATCH 04/15] =?UTF-8?q?=E7=94=9F=E7=89=A9=E7=94=B1=E6=9D=A5?= =?UTF-8?q?=E3=83=AD=E3=83=83=E3=83=88=E5=88=86=E8=A7=A3=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E4=BD=9C=E6=88=90=E3=81=AE=E7=B5=90=E5=90=88?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E3=81=AE=E8=A8=98=E8=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) 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 3dd1a7bb..8d4a921a 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 @@ -165,7 +165,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.cnvs_whlslr_cd AS cnvs_whlslr_cd, bio.cls_whlslr_nm AS cls_whlslr_nm, bio.cls_prod_nm AS cls_prod_nm, - bio.cnvs_prod_cd AS nvs_prod_cd, + bio.cnvs_prod_cd AS cnvs_prod_cd, bio.cnvs_lot_sales_qty_1 AS cnvs_lot_sales_qty_1, bio.cnvs_inst_cd AS cnvs_inst_cd, bio.cls_inst_nm AS cls_inst_nm, @@ -177,24 +177,24 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): CASE LEFT(bio.cnvs_inst_cd, 2) WHEN '00' THEN src05.com_inst.inst_phone_number WHEN '03' THEN src05.com_pharm.inst_phone_number - WHEN src07.mst_inst_merck.tel_no + ELSE src07.mst_inst_merck.tel_no END AS inst_tel AS inst_tel, bio.result_cd AS result_cd, bio.src_cd AS src_cd, -- 判定結果CDより値を設定する CASE bio.result_cd - WHEN '1:正常' THEN '正常' - WHEN '2:卸間転送除外対象データ' THEN '卸間転送除外対象' - WHEN 'E:事前想定したエラーが発生したデータ' THEN 'エラー' - WHEN 'D:レコード重複エラーが発生したデータ' THEN 'エラー(重複)' - WHEN 'Z:想定外のエラーが発生したデータ' THEN 'エラー(想定外)' + WHEN '1' THEN '正常' + WHEN '2' THEN '卸間転送除外対象' + WHEN 'E' THEN 'エラー' + WHEN 'D' THEN 'エラー(重複)' + WHEN 'Z' THEN 'エラー(想定外)' END AS data_kbn, -- SRC_種類より値を設定する CASE bio.result_cd - WHEN '1:VAN' THEN 'VAN' - WHEN '2:手入力' THEN '手入力' - WHEN '3:VAN-Web' THEN 'VAN-Web' - WHEN 'S:SCSK-VAN' THEN 'SCSK-VAN' + WHEN '1' THEN 'VAN' + WHEN '2' THEN '手入力' + WHEN '3' THEN 'VAN-Web' + WHEN 'S' THEN 'SCSK-VAN' END AS if_kind, -- 製品コード、ロット番号でロットマスタよりセット bio.ck_last_dt_txt AS ck_last_dt_txt @@ -202,10 +202,24 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): src07.trn_result_data_bio bio -- 生物由来変換マスタ CROSS JOIN src07.bio_conv conv + LEFT OUTER JOIN src07.customer_lotno_all cla + ON bio.cnvs_prod_cd = cla.material_cd + AND bio.cnvs_lot_no_1 = cla.lot_no_txt + AND bio.cnvs_lot_no_2 = cla.lot_no_txt + AND bio.cnvs_lot_no_3 = cla.lot_no_txt + -- COM_施設 + LEFT OUTER JOIN src05.com_inst ci + ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd + -- COM_薬局 + LEFT OUTER JOIN src05.com_pharm cp + ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd + -- 独自施設マスタ + LEFT OUTER JOIN src05.mst_inst_merck mim + ON bio.cnvs_inst_cd = mim.inst_cd WHERE DATE(bio.last_upd_dtt) >= src07.get_syor_date() """ - res = db.execute(sql) + db.execute(sql) except Exception as e: logger.info('生物由来ロット分解データの作成に失敗') From b03f8e2d082e41e04b81851f6a5858ef7bfdf375 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 10:34:59 +0900 Subject: [PATCH 05/15] =?UTF-8?q?=5Fdelete=5Fempty=5Flot=5Frecord=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 8d4a921a..b595ad31 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 @@ -231,10 +231,10 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): logger.info('生物由来ロット分解データの製造番号が空のレコードを削除開始') try: sql = """ - DELETE FROM src07.bio_sales_lot lot + DELETE FROM src07.trn_result_data_bio_lot lot WHERE -- 空白15桁のデータはロット情報が空とみなして削除する - lot.rec_lot_num = REPEAT(' ', 15) OR lot.rec_lot_num IS NULL + lot.cnvs_lot_no = REPEAT(' ', 15) OR lot.cnvs_lot_no IS NULL """ res = db.execute(sql) except Exception as e: From 75994577c6d76425e83731f5ca30917ea94e9569 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 13:09:15 +0900 Subject: [PATCH 06/15] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 b595ad31..be25541e 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 @@ -114,7 +114,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): jskult_batch_status_manager.set_process_status("failed") - def _delete_not_confirm_data_in_bio_sales_lot(self, db: Database): + def _delete_not_confirm_data_in_trn_result_data_bio_lot(self, db: Database): logger.info('生物由来ロット分解データの未確定データ削除開始') try: sql = """ @@ -131,7 +131,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): logger.info('生物由来ロット分解データの未確定データ削除に成功') - def _insert_bio_sales_lot(self, db: Database): + def _insert_trn_result_data_bio_lot(self, db: Database): logger.info('生物由来ロット分解データの作成開始') try: sql = """ @@ -160,13 +160,17 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.load_dt AS load_dt, bio.cnvs_deal_div_cd AS cnvs_deal_div_cd, bio.cls_deal_div_nm AS cls_deal_div_nm, - bio.cnvs_depo_cd + bio.cnvs_depo_cd AS cnvs_depo_cd, bio.cls_depo_nm AS cls_depo_nm, bio.cnvs_whlslr_cd AS cnvs_whlslr_cd, bio.cls_whlslr_nm AS cls_whlslr_nm, bio.cls_prod_nm AS cls_prod_nm, bio.cnvs_prod_cd AS cnvs_prod_cd, - bio.cnvs_lot_sales_qty_1 AS cnvs_lot_sales_qty_1, + CASE conv.conv_cd + WHEN 1 THEN bio.cnvs_lot_sales_qty_1 + WHEN 2 THEN bio.cnvs_lot_sales_qty_2 + WHEN 3 THEN bio.cnvs_lot_sales_qty_3 + END AS cnvs_lot_sales_qty, bio.cnvs_inst_cd AS cnvs_inst_cd, bio.cls_inst_nm AS cls_inst_nm, CASE LEFT(bio.cnvs_inst_cd, 2) From 1b4cff1509df394801719460d52406a1cc54141f Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 14:21:04 +0900 Subject: [PATCH 07/15] =?UTF-8?q?=E6=9C=AA=E7=A2=BA=E5=AE=9A=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E5=89=8A=E9=99=A4=E3=80=81=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E4=BD=9C=E6=88=90=E3=81=9D=E3=82=8C=E3=81=9E?= =?UTF-8?q?=E3=82=8C=E3=81=AE=E6=9D=A1=E4=BB=B6=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 be25541e..870b6c94 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 @@ -122,7 +122,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): INNER JOIN src07.trn_result_data_bio AS bio ON bio.account_ym = lot.account_ym AND bio.seq_no = lot.seq_no - AND DATE(bio.last_upd_dtt) >= src07.get_syor_date() + AND IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() """ res = db.execute(sql) except Exception as e: @@ -221,7 +221,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): LEFT OUTER JOIN src05.mst_inst_merck mim ON bio.cnvs_inst_cd = mim.inst_cd WHERE - DATE(bio.last_upd_dtt) >= src07.get_syor_date() + IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() """ db.execute(sql) From e45bb1371b124ebad7d84eaa7f6b2e6ad4d15123 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 15:47:39 +0900 Subject: [PATCH 08/15] =?UTF-8?q?=E6=96=BD=E8=A8=AD=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E9=80=94=E4=B8=AD=E3=82=B3=E3=83=9F?= =?UTF-8?q?=E3=83=83=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 121 +++++++----------- 1 file changed, 43 insertions(+), 78 deletions(-) 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 870b6c94..c792254a 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 @@ -173,16 +173,8 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): END AS cnvs_lot_sales_qty, bio.cnvs_inst_cd AS cnvs_inst_cd, bio.cls_inst_nm AS cls_inst_nm, - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN src05.com_inst.inst_addr - WHEN '03' THEN src05.com_pharm.inst_addr - ELSE src07.mst_inst_merck.addr2_nm_kj - END AS inst_addr, - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN src05.com_inst.inst_phone_number - WHEN '03' THEN src05.com_pharm.inst_phone_number - ELSE src07.mst_inst_merck.tel_no - END AS inst_tel AS inst_tel, + NULL AS inst_addr, + NULL AS inst_tel, bio.result_cd AS result_cd, bio.src_cd AS src_cd, -- 判定結果CDより値を設定する @@ -206,20 +198,6 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): src07.trn_result_data_bio bio -- 生物由来変換マスタ CROSS JOIN src07.bio_conv conv - LEFT OUTER JOIN src07.customer_lotno_all cla - ON bio.cnvs_prod_cd = cla.material_cd - AND bio.cnvs_lot_no_1 = cla.lot_no_txt - AND bio.cnvs_lot_no_2 = cla.lot_no_txt - AND bio.cnvs_lot_no_3 = cla.lot_no_txt - -- COM_施設 - LEFT OUTER JOIN src05.com_inst ci - ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd - -- COM_薬局 - LEFT OUTER JOIN src05.com_pharm cp - ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd - -- 独自施設マスタ - LEFT OUTER JOIN src05.mst_inst_merck mim - ON bio.cnvs_inst_cd = mim.inst_cd WHERE IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() """ @@ -247,72 +225,59 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に成功') - def _set_inst_info_from_mdb_or_mst_inst(self, db: Database): - logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセット開始') + def _set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(self, db: Database): + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') try: sql = """ UPDATE - src07.bio_sales_lot bio - LEFT OUTER JOIN internal05.view_mdb_cnv_mst mdb - ON bio.v_inst_cd = mdb.hco_vid_v - LEFT OUTER JOIN src05.mst_inst inst - ON bio.v_inst_cd = inst.inst_cd + src07.trn_result_data_bio_lot lot SET - -- 施設コード - bio.inst_cd = ( - CASE - WHEN mdb.mdb_cd IS NOT NULL THEN mdb.mdb_cd - ELSE bio.v_inst_cd - END - ), - -- 正式施設名(漢字) - bio.inst_name_form = ( - CASE - WHEN mdb.mdb_cd IS NOT NULL THEN mdb.inst_name_form - ELSE inst.inst_name_form - END - ), -- 施設住所 - bio.address = ( - CASE - WHEN mdb.mdb_cd IS NOT NULL THEN mdb.address - ELSE inst.address - END + inst_addr = ( + SELECT + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_addr + WHEN '03' THEN cp.inst_addr + ELSE mim.addr2_nm_kj + END AS inst_addr + FROM src07.trn_result_data_bio bio + -- COM_施設 + LEFT OUTER JOIN src05.com_inst ci + ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd + -- COM_薬局 + LEFT OUTER JOIN src05.com_pharm cp + ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd + -- 独自施設マスタ + LEFT OUTER JOIN src07.mst_inst_merck mim + ON bio.cnvs_inst_cd = mim.inst_cd + + ), -- 施設電話番号 - bio.tel_num = ( - CASE - WHEN mdb.mdb_cd IS NOT NULL THEN mdb.tel_num - ELSE inst.tel_num - END + inst_tel = ( + SELECT + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_phone_number + WHEN '03' THEN cm.inst_phone_number + ELSE mim.tel_no + END AS inst_tel + FROM src07.trn_result_data_bio bio + -- COM_施設 + LEFT OUTER JOIN src05.com_inst ci + ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd + -- COM_薬局 + LEFT OUTER JOIN src05.com_pharm cp + ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd + -- 独自施設マスタ + LEFT OUTER JOIN src07.mst_inst_merck mim + ON bio.cnvs_inst_cd = mim.inst_cd ) """ res = db.execute(sql) except Exception as e: - logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに失敗') + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') raise e - logger.info('MDB変換マスタビュー(生物由来ロット分解処理用)、メルク施設マスタから施設情報を生物由来ロット分解データにセットに成功') - - - def _set_prd_info_from_v_prd_mst(self, db: Database): - logger.info('V製品マスタから製品情報を生物由来ロット分解データにセット開始') - try: - sql = """ - UPDATE - src07.bio_sales_lot bio - LEFT OUTER JOIN src05.phm_prd_mst_v prd - ON bio.comm_cd = prd.prd_cd - AND STR_TO_DATE(bio.rev_hsdnymd_srk,'%Y%m%d') BETWEEN prd.start_date AND prd.end_date - AND prd.rec_sts_kbn <> '9' - SET - bio.mkr_inf_1 = prd.mkr_inf_1, - bio.mkr_cd = prd.mkr_cd - """ - res = db.execute(sql) - except Exception as e: - logger.info('V製品マスタから製品情報を生物由来ロット分解データにセットに失敗') - raise e - logger.info('V製品マスタから製品情報を生物由来ロット分解データにセットに成功') + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') def _set_expr_dt_from_lot_num_mst(self, db: Database): From 3d50744e2c5cfa7ba8d800abd505f34c5c631108 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 18:23:46 +0900 Subject: [PATCH 09/15] =?UTF-8?q?=E6=96=BD=E8=A8=AD=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E3=81=AE=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 104 ++++++++---------- 1 file changed, 47 insertions(+), 57 deletions(-) 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 c792254a..982e3f60 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 @@ -84,13 +84,15 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): db.connect() db.begin() # 生物由来ロット分解データの未確定データを削除する - self._delete_not_confirm_data_in_bio_sales_lot(db) + self._delete_not_confirm_data_in_trn_result_data_bio_lot(db) # 生物由来ロット分解データを作成する - self._insert_bio_sales_lot(db) + 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) db.commit() logger.info('生物由来卸販売ロット分解処理終了') return @@ -122,7 +124,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): INNER JOIN src07.trn_result_data_bio AS bio ON bio.account_ym = lot.account_ym AND bio.seq_no = lot.seq_no - AND IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() + AND IFNULL(bio.upd_date, bio.ins_date) >= src07.get_syor_date() """ res = db.execute(sql) except Exception as e: @@ -166,6 +168,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.cls_whlslr_nm AS cls_whlslr_nm, bio.cls_prod_nm AS cls_prod_nm, bio.cnvs_prod_cd AS cnvs_prod_cd, + -- 3レコードに分解する CASE conv.conv_cd WHEN 1 THEN bio.cnvs_lot_sales_qty_1 WHEN 2 THEN bio.cnvs_lot_sales_qty_2 @@ -173,6 +176,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): END AS cnvs_lot_sales_qty, 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, bio.result_cd AS result_cd, @@ -192,14 +196,14 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): WHEN '3' THEN 'VAN-Web' WHEN 'S' THEN 'SCSK-VAN' END AS if_kind, - -- 製品コード、ロット番号でロットマスタよりセット - bio.ck_last_dt_txt AS ck_last_dt_txt + -- 製品コード、ロット番号でロットマスタより後ほどセット + NULL AS ck_last_dt_txt FROM src07.trn_result_data_bio bio -- 生物由来変換マスタ CROSS JOIN src07.bio_conv conv WHERE - IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() + IFNULL(bio.upd_date, bio.ins_date) >= src07.get_syor_date() """ db.execute(sql) @@ -210,7 +214,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): def _delete_empty_lot_record(self, db: Database): - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除開始') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除開始') try: sql = """ DELETE FROM src07.trn_result_data_bio_lot lot @@ -220,9 +224,9 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): """ res = db.execute(sql) except Exception as e: - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に失敗') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に失敗') raise e - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に成功') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に成功') def _set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(self, db: Database): @@ -230,71 +234,57 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): try: sql = """ UPDATE - src07.trn_result_data_bio_lot lot - SET - -- 施設住所 - inst_addr = ( - SELECT - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN ci.inst_addr - WHEN '03' THEN cp.inst_addr - ELSE mim.addr2_nm_kj - END AS inst_addr - FROM src07.trn_result_data_bio bio + src07.trn_result_data_bio_lot bio -- COM_施設 LEFT OUTER JOIN src05.com_inst ci - ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd + ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd -- COM_薬局 LEFT OUTER JOIN src05.com_pharm cp - ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd + ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd -- 独自施設マスタ LEFT OUTER JOIN src07.mst_inst_merck mim - ON bio.cnvs_inst_cd = mim.inst_cd - - - ), - -- 施設電話番号 - inst_tel = ( - SELECT - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN ci.inst_phone_number - WHEN '03' THEN cm.inst_phone_number - ELSE mim.tel_no - END AS inst_tel - FROM src07.trn_result_data_bio bio - -- COM_施設 - LEFT OUTER JOIN src05.com_inst ci - ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd - -- COM_薬局 - LEFT OUTER JOIN src05.com_pharm cp - ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd - -- 独自施設マスタ - LEFT OUTER JOIN src07.mst_inst_merck mim - ON bio.cnvs_inst_cd = mim.inst_cd - ) + ON bio.cnvs_inst_cd = mim.inst_cd + AND DATE_FORMAT(bio.cnvs_sales_dt, '%Y%m') BETWEEN mim.eff_start_ym + AND mim.eff_end_ym + -- 施設住所 + SET lot.inst_addr = ( + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_addr + WHEN '03' THEN cp.inst_addr + ELSE mim.addr2_nm_kj + END + ), + -- 施設電話番号 + lot.inst_tel = ( + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_phone_number + WHEN '03' THEN cm.inst_phone_number + ELSE mim.tel_no + END + ) """ res = 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 メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット成功') - def _set_expr_dt_from_lot_num_mst(self, db: Database): - # 製造ロット管理番号マスタから有効期限をセット - logger.info('製造ロット管理番号マスタから有効期限をセット開始') + def _set_ck_last_dt_txt_from_customer_lotno_all(self, db: Database): + # ロットマスタから有効期限をセット + logger.info('ロットマスタから有効期限をセット開始') try: sql = """ UPDATE - src07.bio_sales_lot bio - LEFT OUTER JOIN src05.lot_num_mst lot - ON bio.mkr_cd = lot.ser_num - AND bio.rec_lot_num = lot.lot_num + src07.trn_result_data_bio_lot bio + LEFT OUTER JOIN src07.customer_lotno_all cla + ON bio.cnvs_prod_cd = cla.material_cd + AND bio.cnvs_lot_no = cla.lot_no_txt SET - bio.expr_dt = lot.expr_dt + bio.ck_last_dt_txt = cla.ck_last_dt_txt """ res = db.execute(sql) except Exception as e: - logger.info('製造ロット管理番号マスタから有効期限をセットに失敗') + logger.info('ロットマスタから有効期限をセット失敗') raise e - logger.info('製造ロット管理番号マスタから有効期限をセットに成功') + logger.info('ロットマスタから有効期限をセット成功') From 397a8a019843caff57a0e59b9d95997d3922f91e Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Thu, 29 May 2025 18:42:09 +0900 Subject: [PATCH 10/15] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) 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 982e3f60..8d7a0e81 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 @@ -95,20 +95,17 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): self._set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(db) db.commit() logger.info('生物由来卸販売ロット分解処理終了') + # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 + logger.info("生物由来卸販売ロット分解処理を正常終了します。") + jskult_batch_run_manager.batch_success() + jskult_batch_status_manager.set_process_status("done") return + except Exception as e: db.rollback() raise BatchOperationException(e) finally: db.disconnect() - - # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 - logger.info("生物由来卸販売ロット分解処理を正常終了します。") - jskult_batch_run_manager.batch_success() - jskult_batch_status_manager.set_process_status("done") - - return - except Exception as e: # 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録 logger.exception(f'予期せぬエラーが発生したため、生物由来卸販売ロット分解処理を終了します。{e}') @@ -247,7 +244,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): AND DATE_FORMAT(bio.cnvs_sales_dt, '%Y%m') BETWEEN mim.eff_start_ym AND mim.eff_end_ym -- 施設住所 - SET lot.inst_addr = ( + SET bio.inst_addr = ( CASE LEFT(bio.cnvs_inst_cd, 2) WHEN '00' THEN ci.inst_addr WHEN '03' THEN cp.inst_addr @@ -255,7 +252,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): END ), -- 施設電話番号 - lot.inst_tel = ( + bio.inst_tel = ( CASE LEFT(bio.cnvs_inst_cd, 2) WHEN '00' THEN ci.inst_phone_number WHEN '03' THEN cm.inst_phone_number From 7e778a62f9c062cda84614076821518ad9e68ac8 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Fri, 30 May 2025 13:18:21 +0900 Subject: [PATCH 11/15] =?UTF-8?q?feat:=20jskult-batch=E5=86=85=E3=81=AE?= =?UTF-8?q?=E5=90=84=E6=A9=9F=E8=83=BD=E4=BA=8B=E3=81=AB=E4=BD=BF=E3=81=86?= =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=92=E5=88=87=E3=82=8A?= =?UTF-8?q?=E5=88=86=E3=81=91=E3=82=89=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=82=AF=E3=83=A9=E3=82=B9=E5=8C=96=20=20=E7=94=9F?= =?UTF-8?q?=E7=89=A9=E7=94=B1=E6=9D=A5=E3=81=AE=E9=83=A8=E5=88=86=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge_io.py | 45 +++++++++++------ .../batch/environment/__init__.py} | 0 .../environment/dcf_inst_merge_environment.py | 48 +++++++++++++++++++ .../environment/jskult_batch_environment.py | 26 ++++++++++ ecs/jskult-batch/src/error/exceptions.py | 4 ++ .../src/system_var/environment.py | 29 ++++++----- 6 files changed, 125 insertions(+), 27 deletions(-) rename ecs/jskult-batch/{test.py => src/batch/environment/__init__.py} (100%) create mode 100644 ecs/jskult-batch/src/batch/environment/dcf_inst_merge_environment.py create mode 100644 ecs/jskult-batch/src/batch/environment/jskult_batch_environment.py diff --git a/ecs/jskult-batch/src/batch/dcf_inst_merge_io.py b/ecs/jskult-batch/src/batch/dcf_inst_merge_io.py index 82c7cfbe..499cfa98 100644 --- a/ecs/jskult-batch/src/batch/dcf_inst_merge_io.py +++ b/ecs/jskult-batch/src/batch/dcf_inst_merge_io.py @@ -4,15 +4,18 @@ import os.path as path import tempfile from src.aws.s3 import JskSendBucket, JskTransferListBucket +from src.batch.environment.dcf_inst_merge_environment import \ + DCFInstMergeEnvironment from src.batch.jskult_batch_entrypoint import JskultBatchEntrypoint 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 environment +from src.system_var import constants logger = get_logger('DCF削除新規マスタ作成') @@ -20,12 +23,22 @@ logger = get_logger('DCF削除新規マスタ作成') class DcfInstMergeIO(JskultBatchEntrypoint): def __init__(self): super().__init__() + # 環境変数をimport + self.environment = DCFInstMergeEnvironment() def execute(self): logger.info("DCF削除新規マスタ作成処理を開始します。") + + # 必須の環境変数が設定されていない場合、エラーにする + try: + self.environment.validate() + except EnvironmentVariableNotSetException as e: + logger.exception(e) + return + jskult_hdke_tbl_manager = JskultHdkeTblManager() jskult_batch_run_manager = JskultBatchRunManager( - environment.BATCH_EXECUTION_ID) + self.environment.BATCH_EXECUTION_ID) if not jskult_hdke_tbl_manager.can_run_process(): logger.error( '日次バッチ処理中またはdump取得が正常終了していないため、DCF削除新規マスタ作成を終了します。') @@ -54,20 +67,21 @@ class DcfInstMergeIO(JskultBatchEntrypoint): transfer_list['jsk_transfer_list']) + len(transfer_list['ult_transfer_list']) jskult_batch_status_manager = JskultBatchStatusManager( - environment.PROCESS_NAME, - # TODO チケットNEWDWH2021-1847の実装で作成した定数に置き換え - 'post_process', - environment.MAX_RUN_COUNT, + self.environment.PROCESS_NAME, + constants.PROCESS_TYPE_POST_PROCESS, + self.environment.MAX_RUN_COUNT, receive_file_count ) try: - jskult_batch_status_manager.set_process_status("start") + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_START) try: if not jskult_batch_status_manager.can_run_post_process(): # 後続処理の起動条件を満たしていない場合 # 処理ステータスを「処理待」に設定 - jskult_batch_status_manager.set_process_status("waiting") + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_WAITING) # バッチ実行管理テーブルに「retry」で登録 jskult_batch_run_manager.batch_retry() @@ -76,7 +90,8 @@ class DcfInstMergeIO(JskultBatchEntrypoint): except MaxRunCountReachedException: logger.info('最大起動回数に到達したため、DCF削除新規マスタ作成処理を実行します。') - jskult_batch_status_manager.set_process_status("doing") + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_DOING) # アルトマーク取込が実行されていた場合にDCF施設削除新規マスタの作成処理を実行 if jskult_batch_status_manager.is_done_ultmarc_import(): @@ -90,17 +105,18 @@ class DcfInstMergeIO(JskultBatchEntrypoint): # CSV出力 dcf_inst_merge_all_records = self._select_dcf_inst_merge_all() file_path = self._make_csv_data( - environment.DCF_INST_MERGE_SEND_FILE_NAME, + self.environment.DCF_INST_MERGE_SEND_FILE_NAME, dcf_inst_merge_all_records) # CSVをS3にアップロード self._upload_dcf_inst_merge_csv_file( - file_path, process_date, environment.DCF_INST_MERGE_SEND_FILE_NAME) + file_path, process_date, self.environment.DCF_INST_MERGE_SEND_FILE_NAME) # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 logger.info("DCF削除新規マスタ作成処理を正常終了します。") jskult_batch_run_manager.batch_success() - jskult_batch_status_manager.set_process_status("done") + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_DONE) return @@ -108,7 +124,8 @@ class DcfInstMergeIO(JskultBatchEntrypoint): # 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録 logger.exception(f'予期せぬエラーが発生したため、DCF削除新規マスタ作成処理を終了します。{e}') jskult_batch_run_manager.batch_failed() - jskult_batch_status_manager.set_process_status("failed") + jskult_batch_status_manager.set_process_status( + constants.PROCESS_STATUS_ERROR) def _select_dcf_inst_merge_all(self) -> tuple[bool, list[dict]]: try: @@ -272,7 +289,7 @@ class DcfInstMergeIO(JskultBatchEntrypoint): 'CREATER', 'CREATE_DATE', 'UPDATER', 'UPDATE_DATE'] with open(csv_file_path, mode='w', encoding='UTF-8') as csv_file: # ヘッダ行書き込み(くくり文字をつけない為にwriterowではなく、writeを使用しています) - csv_file.write(f"{','.join(head_str)}\n") + csv_file.write(f"{','.join(head_str)}\r\n") # UTF-8、CRLF、価囲いありで書き込む writer = csv.writer(csv_file, delimiter=',', lineterminator='\r\n', quotechar='"', doublequote=True, quoting=csv.QUOTE_ALL, diff --git a/ecs/jskult-batch/test.py b/ecs/jskult-batch/src/batch/environment/__init__.py similarity index 100% rename from ecs/jskult-batch/test.py rename to ecs/jskult-batch/src/batch/environment/__init__.py diff --git a/ecs/jskult-batch/src/batch/environment/dcf_inst_merge_environment.py b/ecs/jskult-batch/src/batch/environment/dcf_inst_merge_environment.py new file mode 100644 index 00000000..3da34501 --- /dev/null +++ b/ecs/jskult-batch/src/batch/environment/dcf_inst_merge_environment.py @@ -0,0 +1,48 @@ +from src.batch.environment.jskult_batch_environment import \ + JskultBatchEnvironment +from src.system_var import environment + + +class DCFInstMergeEnvironment(JskultBatchEnvironment): + """実消化&アルトマークのバッチ処理で使用する環境変数を管理するクラス""" + + def __init__(self): + self.JSK_IO_BUCKET = environment.JSK_IO_BUCKET + self.JSKULT_BACKUP_BUCKET = environment.JSKULT_BACKUP_BUCKET + self.BATCH_MANAGE_DYNAMODB_TABLE_NAME = environment.BATCH_MANAGE_DYNAMODB_TABLE_NAME + self.BATCH_EXECUTION_ID = environment.BATCH_EXECUTION_ID + self.MAX_RUN_COUNT = environment.MAX_RUN_COUNT + self.PROCESS_NAME = environment.PROCESS_NAME + self.JSK_DATA_SEND_FOLDER = environment.JSK_DATA_SEND_FOLDER + self.JSK_BACKUP_FOLDER = environment.JSK_BACKUP_FOLDER + self.TRANSFER_RESULT_FOLDER = environment.TRANSFER_RESULT_FOLDER + self.TRANSFER_RESULT_FILE_NAME = environment.TRANSFER_RESULT_FILE_NAME + self.DCF_INST_MERGE_SEND_FILE_NAME = environment.DCF_INST_MERGE_SEND_FILE_NAME + + def validate(self): + """ + 必須の環境変数が設定されているかどうか検査する。 + DB関連の環境変数は対象外とする。 + + Raises: + EnvironmentVariableNotSetException: 環境変数の設定ミス + """ + super()._assert_variable_not_empty(self.JSK_IO_BUCKET, 'JSK_IO_BUCKET') + 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.JSK_DATA_SEND_FOLDER, 'JSK_DATA_SEND_FOLDER') + super()._assert_variable_not_empty(self.JSK_BACKUP_FOLDER, 'JSK_BACKUP_FOLDER') + 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.DCF_INST_MERGE_SEND_FILE_NAME, + 'DCF_INST_MERGE_SEND_FILE_NAME') diff --git a/ecs/jskult-batch/src/batch/environment/jskult_batch_environment.py b/ecs/jskult-batch/src/batch/environment/jskult_batch_environment.py new file mode 100644 index 00000000..e5be1d41 --- /dev/null +++ b/ecs/jskult-batch/src/batch/environment/jskult_batch_environment.py @@ -0,0 +1,26 @@ +import abc + +from src.error.exceptions import EnvironmentVariableNotSetException + + +class JskultBatchEnvironment(metaclass=abc.ABCMeta): + """実消化&アルトマークのバッチ処理で使用する環境変数を管理するクラス""" + @abc.abstractmethod + def validate(self): + """ + 必須の環境変数が設定されているかどうか検査する。 + DB関連の環境変数は対象外とする。 + """ + pass + + def _assert_variable_not_empty(self, variable: str, variable_name: str): + if variable is None: + raise EnvironmentVariableNotSetException( + f'環境変数[{variable_name}]が設定されていません。') + + def _assert_variable_is_int(self, variable: str, variable_name: str): + try: + int(variable) + except ValueError: + raise EnvironmentVariableNotSetException( + f'環境変数[{variable_name}]が整数ではありません。') diff --git a/ecs/jskult-batch/src/error/exceptions.py b/ecs/jskult-batch/src/error/exceptions.py index aa5f9be6..a6db7ed7 100644 --- a/ecs/jskult-batch/src/error/exceptions.py +++ b/ecs/jskult-batch/src/error/exceptions.py @@ -12,3 +12,7 @@ class BatchOperationException(MeDaCaException): class MaxRunCountReachedException(MeDaCaException): pass + + +class EnvironmentVariableNotSetException(MeDaCaException): + pass diff --git a/ecs/jskult-batch/src/system_var/environment.py b/ecs/jskult-batch/src/system_var/environment.py index d44805d4..492c9661 100644 --- a/ecs/jskult-batch/src/system_var/environment.py +++ b/ecs/jskult-batch/src/system_var/environment.py @@ -7,21 +7,24 @@ DB_USERNAME = os.environ['DB_USERNAME'] DB_PASSWORD = os.environ['DB_PASSWORD'] DB_SCHEMA = os.environ['DB_SCHEMA'] -# AWS -JSKULT_CONFIG_BUCKET = os.environ['JSKULT_CONFIG_BUCKET'] -BATCH_EXECUTION_ID = os.environ['BATCH_EXECUTION_ID'] -MAX_RUN_COUNT = int(os.environ['MAX_RUN_COUNT']) -TRANSFER_RESULT_FOLDER = os.environ['TRANSFER_RESULT_FOLDER'] -TRANSFER_RESULT_FILE_NAME = os.environ['TRANSFER_RESULT_FILE_NAME'] -DCF_INST_MERGE_SEND_FILE_NAME = os.environ['DCF_INST_MERGE_SEND_FILE_NAME'] -PROCESS_NAME = os.environ['PROCESS_NAME'] -JSKULT_BACKUP_BUCKET = os.environ['JSKULT_BACKUP_BUCKET'] -JSK_IO_BUCKET = os.environ['JSK_IO_BUCKET'] -JSK_BACKUP_FOLDER = os.environ['JSK_BACKUP_FOLDER'] -JSK_DATA_SEND_FOLDER = os.environ['JSK_DATA_SEND_FOLDER'] +# 処理名 +PROCESS_NAME = os.environ.get('PROCESS_NAME', None) # AWS -BATCH_MANAGE_DYNAMODB_TABLE_NAME = os.environ.get('BATCH_MANAGE_DYNAMODB_TABLE_NAME') +JSKULT_CONFIG_BUCKET = os.environ.get('JSKULT_CONFIG_BUCKET', None) +BATCH_EXECUTION_ID = os.environ.get('BATCH_EXECUTION_ID', None) +MAX_RUN_COUNT = os.environ.get('MAX_RUN_COUNT', None) +TRANSFER_RESULT_FOLDER = os.environ.get('TRANSFER_RESULT_FOLDER', None) +TRANSFER_RESULT_FILE_NAME = os.environ.get('TRANSFER_RESULT_FILE_NAME', None) +DCF_INST_MERGE_SEND_FILE_NAME = os.environ.get( + 'DCF_INST_MERGE_SEND_FILE_NAME', None) +JSKULT_BACKUP_BUCKET = os.environ.get('JSKULT_BACKUP_BUCKET', None) +JSK_IO_BUCKET = os.environ.get('JSK_IO_BUCKET', None) +JSK_BACKUP_FOLDER = os.environ.get('JSK_BACKUP_FOLDER', None) +JSK_DATA_SEND_FOLDER = os.environ.get('JSK_DATA_SEND_FOLDER', None) +BATCH_MANAGE_DYNAMODB_TABLE_NAME = os.environ.get( + 'BATCH_MANAGE_DYNAMODB_TABLE_NAME', None) + # 初期値がある環境変数 LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') From 40207bcad4a23623758807433be7287a8f3f4bf5 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Fri, 30 May 2025 13:22:45 +0900 Subject: [PATCH 12/15] =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AE=E5=A7=8B?= =?UTF-8?q?=E3=82=81=E3=81=AB=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0=E3=83=90?= =?UTF-8?q?=E3=83=AA=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trn_result_data_bio_lot_environment.py | 28 +++++++++++++++++++ .../src/batch/trn_result_data_bio_lot.py | 20 +++++++++---- 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py 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 new file mode 100644 index 00000000..ec4dfe67 --- /dev/null +++ b/ecs/jskult-batch/src/batch/environment/trn_result_data_bio_lot_environment.py @@ -0,0 +1,28 @@ +from src.batch.environment.jskult_batch_environment import \ + JskultBatchEnvironment +from src.system_var import environment + + +class TrnResultDataBioLotEnvironment(JskultBatchEnvironment): + """実消化&アルトマークのバッチ処理で使用する環境変数を管理するクラス""" + + def __init__(self): + self.BATCH_EXECUTION_ID = environment.BATCH_EXECUTION_ID + self.MAX_RUN_COUNT = environment.MAX_RUN_COUNT + self.PROCESS_NAME = environment.PROCESS_NAME + + def validate(self): + """ + 必須の環境変数が設定されているかどうか検査する。 + DB関連の環境変数は対象外とする。 + + Raises: + EnvironmentVariableNotSetException: 環境変数の設定ミス + """ + + 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') + 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 8d7a0e81..d409668a 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,13 +1,15 @@ import json from src.aws.s3 import JskTransferListBucket +from src.batch.environment.dcf_inst_merge_environment import \ + DCFInstMergeEnvironment +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.batch.jskult_batch_entrypoint import JskultBatchEntrypoint from src.db.database import Database from src.error.exceptions import (BatchOperationException, + EnvironmentVariableNotSetException, MaxRunCountReachedException) -from src.system_var import environment from src.logging.get_logger import get_logger @@ -19,6 +21,14 @@ logger = get_logger('生物由来卸販売ロット分解') class TrnResultDataBioLot(JskultBatchEntrypoint): def __init__(self): super().__init__() + self.environment = DCFInstMergeEnvironment + + # 必須の環境変数が設定されていない場合、エラーにする + try: + self.environment.validate() + except EnvironmentVariableNotSetException as e: + logger.exception(e) + return def execute(self): """生物由来卸販売ロット分解""" @@ -27,7 +37,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): jskult_hdke_tbl_manager = JskultHdkeTblManager() jskult_batch_run_manager = JskultBatchRunManager( - environment.BATCH_EXECUTION_ID) + self.environment.BATCH_EXECUTION_ID) if not jskult_hdke_tbl_manager.can_run_process(): logger.error( '日次バッチ処理中またはdump取得が正常終了していないため、生物由来卸販売ロット分解処理を終了します。') @@ -56,10 +66,10 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): transfer_list['jsk_transfer_list']) + len(transfer_list['ult_transfer_list']) jskult_batch_status_manager = JskultBatchStatusManager( - environment.PROCESS_NAME, + self.environment.PROCESS_NAME, # TODO チケットNEWDWH2021-1847の実装で作成した定数に置き換え 'post_process', - environment.MAX_RUN_COUNT, + self.environment.MAX_RUN_COUNT, receive_file_count ) try: From 5a2afba6ccbf42c2dd3ca703fa36d8ab6e6b67d3 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Fri, 30 May 2025 14:10:30 +0900 Subject: [PATCH 13/15] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E3=83=90=E3=83=AA=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=20=E6=8C=87=E6=91=98?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../environment/trn_result_data_bio_lot_environment.py | 9 ++++++++- ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) 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 ec4dfe67..ff0ca12e 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 @@ -7,9 +7,13 @@ class TrnResultDataBioLotEnvironment(JskultBatchEnvironment): """実消化&アルトマークのバッチ処理で使用する環境変数を管理するクラス""" def __init__(self): + self.JSKULT_BACKUP_BUCKET = environment.JSKULT_BACKUP_BUCKET + self.BATCH_MANAGE_DYNAMODB_TABLE_NAME = environment.BATCH_MANAGE_DYNAMODB_TABLE_NAME self.BATCH_EXECUTION_ID = environment.BATCH_EXECUTION_ID self.MAX_RUN_COUNT = environment.MAX_RUN_COUNT self.PROCESS_NAME = environment.PROCESS_NAME + self.TRANSFER_RESULT_FOLDER = environment.TRANSFER_RESULT_FOLDER + self.TRANSFER_RESULT_FILE_NAME = environment.TRANSFER_RESULT_FILE_NAME def validate(self): """ @@ -19,10 +23,13 @@ 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.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') 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 d409668a..0887468a 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,7 +1,7 @@ import json from src.aws.s3 import JskTransferListBucket -from src.batch.environment.dcf_inst_merge_environment import \ - DCFInstMergeEnvironment +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 @@ -21,7 +21,7 @@ logger = get_logger('生物由来卸販売ロット分解') class TrnResultDataBioLot(JskultBatchEntrypoint): def __init__(self): super().__init__() - self.environment = DCFInstMergeEnvironment + self.environment = TrnResultDataBioLotEnvironment # 必須の環境変数が設定されていない場合、エラーにする try: From 32a0c8d5c3817fbbcc5684bf944d4936b74340d5 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Fri, 30 May 2025 15:13:12 +0900 Subject: [PATCH 14/15] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=8C=96=E3=81=AE=E9=83=A8=E5=88=86=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0887468a..91ab123e 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 @@ -21,7 +21,7 @@ logger = get_logger('生物由来卸販売ロット分解') class TrnResultDataBioLot(JskultBatchEntrypoint): def __init__(self): super().__init__() - self.environment = TrnResultDataBioLotEnvironment + self.environment = TrnResultDataBioLotEnvironment() # 必須の環境変数が設定されていない場合、エラーにする try: From ca744f1eed851e6f626859d6fc0afc65b891ef00 Mon Sep 17 00:00:00 2001 From: "mori.k" Date: Mon, 2 Jun 2025 17:36:40 +0900 Subject: [PATCH 15/15] =?UTF-8?q?JskultBatchRunManager=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=81=A8set=5Fprocess=5Fstatus=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/trn_result_data_bio_lot.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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 91ab123e..65e7408a 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 @@ -11,6 +11,8 @@ from src.error.exceptions import (BatchOperationException, EnvironmentVariableNotSetException, MaxRunCountReachedException) from src.logging.get_logger import get_logger +from src.system_var import constants + @@ -37,6 +39,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): jskult_hdke_tbl_manager = JskultHdkeTblManager() jskult_batch_run_manager = JskultBatchRunManager( + self.environment.BATCH_MANAGE_DYNAMODB_TABLE_NAME, self.environment.BATCH_EXECUTION_ID) if not jskult_hdke_tbl_manager.can_run_process(): logger.error( @@ -74,12 +77,12 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): ) try: - jskult_batch_status_manager.set_process_status("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("waiting") + jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_WAITING) # バッチ実行管理テーブルに「retry」で登録 jskult_batch_run_manager.batch_retry() @@ -88,7 +91,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): except MaxRunCountReachedException: logger.info('最大起動回数に到達したため、生物由来卸販売ロット分解処理を実行します。') - jskult_batch_status_manager.set_process_status("doing") + jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_DOING) db = Database.get_instance() try: db.connect() @@ -108,7 +111,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): # 処理が全て正常終了した際に、バッチ実行管理テーブルに「success」で登録 logger.info("生物由来卸販売ロット分解処理を正常終了します。") jskult_batch_run_manager.batch_success() - jskult_batch_status_manager.set_process_status("done") + jskult_batch_status_manager.set_process_status(constants.PROCESS_STATUS_DONE) return except Exception as e: @@ -120,7 +123,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): # 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録 logger.exception(f'予期せぬエラーが発生したため、生物由来卸販売ロット分解処理を終了します。{e}') jskult_batch_run_manager.batch_failed() - jskult_batch_status_manager.set_process_status("failed") + 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):