diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py similarity index 83% rename from ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py rename to ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py index c37a3a30..ffb2ba06 100644 --- a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py @@ -1,5 +1,4 @@ from datetime import datetime, timedelta -from sqlalchemy import CursorResult from src.batch.batch_functions import logging_sql from src.batch.common.batch_context import BatchContext from src.db.database import Database @@ -8,7 +7,7 @@ from src.logging.get_logger import get_logger from src.time.elapsed_time import ElapsedTime batch_context = BatchContext.get_instance() -logger = get_logger('DCF施設統合マスタ日次更新バッチ') +logger = get_logger('DCF施設統合マスタ日次更新') def exec(): @@ -16,7 +15,7 @@ def exec(): try: db.connect() db.begin() - logger.debug('DCF施設統合マスタ日次更新バッチ処理開始') + logger.debug('DCF施設統合マスタ日次更新処理開始') # DCF施設統合マスタ移行先コードのセット(無効フラグが『0(有効)』) enabled_dst_inst_merge_records = _set_enabled_dct_inst_merge(db) # DCF施設統合マスタ移行先コードのセット(無効フラグが『1(無効)』) @@ -26,7 +25,7 @@ def exec(): _add_emp_chg_inst(db, enabled_dst_inst_merge_records) _add_ult_ident_presc(db, enabled_dst_inst_merge_records) db.commit() - logger.info('DCF施設統合マスタ日次更新バッチ処理終了') + logger.debug('DCF施設統合マスタ日次更新処理終了') except Exception as e: db.rollback() raise BatchOperationException(e) @@ -59,10 +58,11 @@ def _set_disabled_dct_inst_merge(db: Database): def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): # 納入先処方元マスタの追加 logger.info('納入先処方元マスタの登録 開始') - for data_inst_cnt, row in enumerate(enabled_dst_inst_merge_records, start=1): - tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + for data_inst_cnt, enabled_merge_record in enumerate(enabled_dst_inst_merge_records, start=1): + tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) - ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) + ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + enabled_merge_record['dup_opp_cd']) for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 @@ -80,13 +80,17 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict is_exists_duplicate_key = True else: logger.info('納入先処方元マスタの重複予定データなし') - _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_ident_presc_row) + _insert_ult_ident_presc(db, set_start_date, enabled_merge_record['dup_opp_cd'], ult_ident_presc_row) + # 適用終了日 < 適用開始日の場合 if _str_to_date_time(ult_ident_presc_row['end_date']) < start_date: + # 対象レコードを物理削除する _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, '開始月>適用開始日のため物理削除') continue + # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 if not is_exists_duplicate_key: + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 last_end_date = tekiyo_month_first_day - timedelta(days=1) _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) if start_date > last_end_date: @@ -99,9 +103,9 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): # 従業員担当施設マスタの登録 logger.info('従業員担当施設マスタの登録 開始') - for row in enabled_dst_inst_merge_records: - tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) - emp_chg_inst_records = _select_emp_chg_inst(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for enabled_merge_record in enabled_dst_inst_merge_records: + tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month']) + emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd']) for emp_chg_inst_row in emp_chg_inst_records: # 重複時相手先コードが存在したかのチェック if emp_chg_inst_row['opp_count'] > 0: @@ -111,22 +115,24 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): set_start_date = start_date \ if start_date > tekiyo_month_first_day else tekiyo_month_first_day - _insert_emp_chg_inst(db, row['dup_opp_cd'], _date_time_to_str(set_start_date), + _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), emp_chg_inst_row) + # 適用開始日 < DCF施設統合マスタの適用月度の1日の場合 if start_date < tekiyo_month_first_day: + # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する last_end_date = tekiyo_month_first_day - timedelta(days=1) - _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], _date_time_to_str(last_end_date), + _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_chg_inst_row) - if start_date <= last_end_date: - continue - _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], - emp_chg_inst_row['start_date']) + continue + # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する + _update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], + emp_chg_inst_row['start_date']) logger.info('従業員担当施設マスタの登録 終了') -def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: CursorResult, +def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: dict, log_message: str): # ult_ident_prescのDelete try: @@ -154,8 +160,8 @@ def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: raise e -def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): - # emp_chg_instを更新 +def _update_emp_chg_inst_disabled(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): + # emp_chg_instをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -180,8 +186,8 @@ def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, - emp_chg_inst_row: CursorResult): - # emp_chg_instを更新 + emp_chg_inst_row: dict): + # emp_chg_instをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -214,8 +220,8 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, - emp_chg_inst_row: CursorResult): - # emp_chg_instにInsert + emp_chg_inst_row: dict): + # emp_chg_instにINSERT try: elapsed_time = ElapsedTime() sql = """ @@ -268,7 +274,8 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: - # dcf_inst_mergeからSelect + # dcf_inst_mergeからSELECT + # muko_flgの値によって、SQLのWHERE条件を変更 try: sql = """ SELECT @@ -301,9 +308,11 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: - # - try: + # dcf_inst_mergeをUPDATE + # muko_flgの値によって、SQLのWHERE条件とSET句を変更 + try: elapsed_time = ElapsedTime() + log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' sql = """ UPDATE src05.dcf_inst_merge AS updim @@ -318,9 +327,9 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: src05.dcf_inst_merge AS dim INNER JOIN src05.hdke_tbl AS ht - ON dim.tekiyo_month=DATE_FORMAT(ht.syor_date, '%Y%m') + ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') WHERE - dim.muko_flg= :muko_flg + dim.muko_flg = :muko_flg AND dim.enabled_flg='Y' AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim @@ -343,16 +352,16 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'DCF施設統合マスタの有効データを{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('DCF施設統合マスタの更新に失敗') + logger.debug(f'DCF施設統合マスタの{log_message} 失敗') raise e return res.rowcount def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): - # dcf_inst_mergeをUpdate + # dcf_inst_mergeをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -379,8 +388,8 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c raise e -def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: CursorResult): - # ult_ident_presc_endをUpdate +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: dict): + # ult_ident_presc_endをUPDATE try: elapsed_time = ElapsedTime() sql = """ @@ -411,8 +420,8 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, - ult_ident_presc_row: CursorResult): - # ult_ident_prescにInsert + ult_ident_presc_row: dict): + # ult_ident_prescにINSERT try: elapsed_time = ElapsedTime() sql = """ @@ -459,7 +468,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # emp_chg_instから取得 + # emp_chg_instからSELECT try: sql = """ SELECT @@ -497,7 +506,7 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # ult_ident_prescから取得 + # ult_ident_prescからSELECT try: sql = """ SELECT @@ -531,7 +540,7 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> def _count_duplicate_ult_ident_presc(db: Database, set_start_date: str, - ult_ident_presc_row: CursorResult) -> int: + ult_ident_presc_row: dict) -> int: # ult_ident_prescの重複時相手先コードの件数取得 try: sql = """ diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py index f6d682b4..019f8c29 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -1,5 +1,6 @@ from src.batch.common.batch_context import BatchContext from src.batch.laundering import create_inst_merge_for_laundering, emp_chg_inst_laundering, ult_ident_presc_laundering +from src.batch.dcf_inst_merge import integrate_dcf_inst_merge from src.logging.get_logger import get_logger batch_context = BatchContext.get_instance() @@ -16,6 +17,8 @@ def exec(): return # 洗替用マスタ作成 create_inst_merge_for_laundering.exec() + # DCF施設統合マスタ日次更新 + integrate_dcf_inst_merge.exec() # 施設担当者洗替 emp_chg_inst_laundering.exec() # 納入先処方元マスタ洗替 diff --git a/ecs/jskult-batch-daily/src/jobctrl_daily.py b/ecs/jskult-batch-daily/src/jobctrl_daily.py index 71fbea90..1a82f226 100644 --- a/ecs/jskult-batch-daily/src/jobctrl_daily.py +++ b/ecs/jskult-batch-daily/src/jobctrl_daily.py @@ -7,7 +7,6 @@ from src.batch.batch_functions import ( 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 Integrate_dcf_inst_merge from src.batch.laundering import create_dcf_inst_merge, mst_inst_laundering from src.batch.ultmarc import ultmarc_process from src.error.exceptions import BatchOperationException @@ -115,14 +114,6 @@ def exec(): logger.exception(f'DCF施設統合マスタ作成エラー(異常終了){e}') return constants.BATCH_EXIT_CODE_SUCCESS - try: - logger.info('DCF施設統合マスタ日次更新バッチ:起動') - Integrate_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: