136 lines
6.7 KiB
Python
136 lines
6.7 KiB
Python
"""実消化&アルトマーク 日次バッチ処理"""
|
||
|
||
from src.aws.s3 import ConfigBucket
|
||
from src.batch import parallel_processes
|
||
from src.batch.batch_functions import (
|
||
get_batch_statuses, update_batch_process_complete,
|
||
update_batch_processing_flag_in_processing)
|
||
from src.batch.common.batch_context import BatchContext
|
||
from src.batch.common.calendar_file import CalendarFile
|
||
from src.batch.dcf_inst_merge import create_dcf_inst_merge
|
||
from src.batch.laundering import mst_inst_laundering
|
||
from src.batch.ultmarc import ultmarc_process
|
||
from src.batch.vjsk import vjsk_importer
|
||
from src.error.exceptions import BatchOperationException
|
||
from src.logging.get_logger import get_logger
|
||
from src.system_var import constants
|
||
|
||
logger = get_logger('日次処理コントロール')
|
||
|
||
# バッチ共通設定を取得
|
||
batch_context = BatchContext.get_instance()
|
||
|
||
|
||
def exec():
|
||
try:
|
||
logger.info('日次バッチ:開始')
|
||
try:
|
||
# 日次バッチ処置中フラグ、dump処理状態区分、処理日を取得
|
||
batch_processing_flag, dump_status_kbn, syor_date = get_batch_statuses()
|
||
except BatchOperationException as e:
|
||
logger.exception(f'日付テーブル取得(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
# 日次バッチ処理中の場合、後続の処理は行わない
|
||
if batch_processing_flag == constants.BATCH_ACTF_BATCH_IN_PROCESSING:
|
||
logger.error('日次バッチ処理中のため、日次バッチ処理を終了します。')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
# dump取得が正常終了していない場合、後続の処理は行わない
|
||
if dump_status_kbn != constants.DUMP_STATUS_KBN_COMPLETE:
|
||
logger.error('dump取得が正常終了していないため、日次バッチ処理を終了します。')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
logger.info(f'処理日={syor_date}')
|
||
# バッチ共通設定に処理日を追加
|
||
batch_context.syor_date = syor_date
|
||
|
||
# 稼働日かかどうかを、V実消化非稼働日ファイルをダウンロードして判定
|
||
try:
|
||
holiday_list_file_path = ConfigBucket().download_holiday_list()
|
||
holiday_calendar = CalendarFile(holiday_list_file_path)
|
||
batch_context.is_not_business_day = holiday_calendar.compare_date(syor_date)
|
||
except Exception as e:
|
||
logger.exception(f'V実消化非稼働日ファイルの読み込みに失敗しました。{e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
# 調査目的でV実消化稼働日かどうかをログ出力
|
||
logger.debug(f'本日は{"V実消化非稼働日です。" if batch_context.is_not_business_day else "V実消化稼働日です。"}')
|
||
|
||
# バッチ処理中に更新
|
||
try:
|
||
update_batch_processing_flag_in_processing()
|
||
except BatchOperationException as e:
|
||
logger.exception(f'処理フラグ更新(未処理→処理中) エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
try:
|
||
logger.info('アルトマーク取込:起動')
|
||
ultmarc_process.exec_import()
|
||
logger.info('アルトマーク取込:終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'アルトマーク取込処理エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
# 調査目的でアルトマーク取込が行われたかどうかをログ出力
|
||
logger.debug(f'{"アルトマーク取込が行われました。" if batch_context.is_ultmarc_imported else "アルトマーク取込が行われませんでした。"}')
|
||
|
||
try:
|
||
logger.info('V実消化用施設・薬局薬店データ作成処理:起動')
|
||
ultmarc_process.exec_export()
|
||
logger.info('V実消化用施設・薬局薬店データ作成処理:終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'V実消化用施設・薬局薬店データ作成処理エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
logger.info('日次処理(V実消化)')
|
||
try:
|
||
logger.info('V実消化取込:起動')
|
||
vjsk_importer.exec()
|
||
logger.info('V実消化取込:終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'V実消化取込処理エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
try:
|
||
logger.info('メルク施設マスタ作成:起動')
|
||
mst_inst_laundering.exec()
|
||
logger.info('メルク施設マスタ作成:終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'メルク施設マスタ作成 エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
try:
|
||
# 実績生物由来ロット分解と並列処理
|
||
logger.info('並列処理(実績更新-生物由来ロット分解):起動')
|
||
parallel_processes.exec()
|
||
logger.info('並列処理(実績更新-生物由来ロット分解):終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'並列処理(実績更新-生物由来ロット分解)エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
try:
|
||
logger.info('DCF施設統合マスタ作成:起動')
|
||
create_dcf_inst_merge.exec()
|
||
logger.info('DCF施設統合マスタ作成:終了')
|
||
except BatchOperationException as e:
|
||
logger.exception(f'DCF施設統合マスタ作成エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
# バッチ処理完了とし、処理日、バッチ処置中フラグ、dump取得状態区分を更新
|
||
logger.info('業務日付更新・バッチステータスリフレッシュ:起動')
|
||
try:
|
||
update_batch_process_complete()
|
||
except BatchOperationException as e:
|
||
logger.exception(f'業務日付更新・バッチステータスリフレッシュ エラー(異常終了){e}')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
logger.info('業務日付更新・バッチステータスリフレッシュ:終了')
|
||
|
||
# 正常終了を保守ユーザーに通知
|
||
logger.info('[NOTICE]日次バッチ:終了(正常終了)')
|
||
return constants.BATCH_EXIT_CODE_SUCCESS
|
||
|
||
except Exception as e:
|
||
logger.exception(f'日次バッチ処理中に想定外のエラーが発生しました {e}')
|
||
raise e
|