Merge pull request #495 feature-NEWDWH2021-1875 into develop
This commit is contained in:
commit
f873854edc
@ -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')
|
||||
|
||||
@ -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,16 +103,18 @@ 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:
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user