From 94016f513d9eb9004f9883dbf3db52fac76a8a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 18 May 2023 18:04:16 +0900 Subject: [PATCH 01/36] =?UTF-8?q?feat:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1?= =?UTF-8?q?=E5=90=88=E3=83=9E=E3=82=B9=E3=82=BF=E6=97=A5=E6=AC=A1=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=83=90=E3=83=83=E3=83=81(=E9=80=94=E4=B8=AD?= =?UTF-8?q?=E3=81=BE=E3=81=A7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrate_dcf_inst_merge.py | 547 ++++++++++++++++++ 1 file changed, 547 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py 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 new file mode 100644 index 00000000..fa6ce77a --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/Integrate_dcf_inst_merge.py @@ -0,0 +1,547 @@ +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 +from src.error.exceptions import BatchOperationException +from src.logging.get_logger import get_logger +from src.time.elapsed_time import ElapsedTime + +logger = get_logger('DCF施設統合マスタ日次更新バッチ') +batch_context = BatchContext.get_instance() + + +def exec(): + db = Database.get_instance() + try: + db.connect() + db.begin() + # + enabled_dst_inst_merge_records = _laundering_enabled_dct_inst_merge(db) + # + _laundering_disabled_dct_inst_merge(db) + # + if len(enabled_dst_inst_merge_records) > 0: + logger.info('') + _add_emp_chg_inst(db, enabled_dst_inst_merge_records) + logger.info('') + _add_ult_ident_presc(db, enabled_dst_inst_merge_records) + db.commit() + # + logger.info('') + except Exception as e: + db.rollback() + raise BatchOperationException(e) + finally: + db.disconnect() + + +def _laundering_enabled_dct_inst_merge(db: Database) -> list[dict]: + # データ取得(無効フラグが『0(有効)』) + valid_dst_inst_merge_records = _select_dct_inst_merge(db, 0, True) + # 移行先DCF施設コードの更新(無効フラグが『0(有効)』) + _update_dcf_inst_merge(db, 0) + # DCF施設統合マスタの過去分の洗い替え + if len(valid_dst_inst_merge_records) == 0: + return + for row in valid_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + + return valid_dst_inst_merge_records + + +def _laundering_disabled_dct_inst_merge(db: Database): + # データ取得(無効フラグが『1(無効)』) + disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1, False) + # 移行先DCF施設コードの更新(無効フラグが『1(無効)』) + _update_dcf_inst_merge(db, 1) + # DCF施設統合マスタの過去分の洗い替え + if len(disabled_dst_inst_merge_records) == 0: + return + for row in disabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + + +def _add_ult_ident_presc(db: Database, valid_dst_inst_merge_records: list[dict]): + # + for data_inst_cnt, row in enumerate(valid_dst_inst_merge_records, start=1): + tekiyo_month_first_day = _get_first_day_of_month(row['tekiyo_month']) + + ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) + for data_cnt, ult_row in enumerate(ult_ident_presc_records, start=1): + logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') + # 処方元コード=重複時相手先コードが発生した場合 + if ult_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(ult_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + set_start_date = _date_time_to_str(set_start_date) + is_delete_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_row): + _delete_ult_ident_presc(db, set_start_date, ult_row) + is_delete_duplicate_key = True + else: + logger.info('納入先処方元マスタの重複予定データなし') + _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_row) + + if _str_to_date_time(ult_row['end_date']) < start_date: + _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + continue + if not is_delete_duplicate_key: + 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_row) + if start_date > last_end_date: + _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + + +def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + DELETE FROM + src05.ult_ident_presc + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :set_start_date + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': start_date + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + + +def _add_emp_chg_inst(db: Database, valid_dst_inst_merge_records: list[dict]): + # + for row in valid_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 emp_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(emp_row['start_date']) + 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), emp_row) + + if start_date < tekiyo_month_first_day: + 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), emp_row) + if start_date <= last_end_date: + continue + _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], emp_row['start_date']) + + # if start_date >= tekiyo_month_first_day: + # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) + # continue + # last_end_date = tekiyo_month_first_day - timedelta(days=1) + # _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], last_end_date, emp_row) + # if start_date > last_end_date: + # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) + + +def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.emp_chg_inst + SET + enabled_flg = 'N', + updater = CURRENT_USER(), + update_date = SYSDATE() + WHERE + inst_cd = :dcf_inst_cd + AND ta_cd = :ta_cd + AND start_date = :start_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'start_date': start_date} + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, emp_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.emp_chg_inst + SET end_date = :end_date, + updater = CURRENT_USER(), + update_date= SYSDATE() + WHERE + inst_cd = :dcf_inst_cd + AND ta_cd = :ta_cd + AND emp_cd = :emp_cd + AND bu_cd = :bu_cd + AND start_date = :start_date + """ + params = { + 'end_date': last_end_date, + 'dcf_inst_cd': dcf_inst_cd, + 'ta_cd': emp_row['ta_cd'], + 'emp_cd': emp_row['emp_cd'], + 'bu_cd': emp_row['bu_cd'], + 'start_date': emp_row['start_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + INSERT INTO + src05.emp_chg_inst( + inst_cd, + ta_cd, + emp_cd, + bu_cd, + start_date, + end_date, + main_chg_flg, + enabled_flg, + creater, + create_date, + updater, + update_date + ) + VALUES( + :dup_opp_cd, + :ta_cd, + :emp_cd, + :bu_cd, + :start_date, + :end_date, + :main_chg_flg, + 'Y', + CURRENT_USER(), + SYSDATE(), + CURRENT_USER(), + SYSDATE() + ) + """ + params = { + 'dup_opp_cd': dup_opp_cd, + 'ta_cd': emp_row['ta_cd'], + 'emp_cd': emp_row['emp_cd'], + 'bu_cd': emp_row['bu_cd'], + 'start_date': set_start_date, + 'end_date': emp_row['end_date'], + 'main_chg_flg': emp_row['main_chg_flg'] if emp_row['main_chg_flg'] is None else None + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'従業員担当施設マスタの追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: bool): + # + try: + sql = """ + SELECT + dim.dcf_inst_cd, + dim.dup_opp_cd, + dim.tekiyo_month + FROM + src05.dcf_inst_merge AS dim + INNER JOIN + src05.hdke_tbl AS ht + ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') + WHERE + dim.muko_flg =: muko_flg + AND dim.enabled_flg = 'Y' + AND dim.dcf_inst_cd_new <= >: is_null_dcf_inst_cd_new + """ + params = { + 'muko_flg': muko_flg, + 'is_null_dcf_inst_cd_new': None + } + dst_inst_merge_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + + return dst_inst_merge_records + + +def _update_dcf_inst_merge(db: Database, muko_flg: int): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.dcf_inst_merge AS updim + INNER JOIN( + SELECT + dim.dcf_inst_cd AS base_dcf_inst_cd, + dim.dup_opp_cd AS base_dup_opp_cd, + dim.tekiyo_month AS base_tekiyo_month, + dim.muko_flg AS base_muko_flg, + dim.enabled_flg AS base_enabled_flg + FROM + src05.dcf_inst_merge AS dim + INNER JOIN + src05.hdke_tbl AS ht + ON dim.tekiyo_month=DATE_FORMAT(ht.syor_date, '%Y%m') + WHERE + dim.muko_flg= :muko_flg + AND dim.enabled_flg='Y' + AND dim.dcf_inst_cd_new IS {$dcfInstCdNew}NULL + ) AS bf_dim + SET + updim.dcf_inst_cd_new = {column}, + updim.updater = CURRENT_USER(), + updim.update_date = SYSDATE() + WHERE + updim.dcf_inst_cd = base_dcf_inst_cd + AND updim.dup_opp_cd = base_dup_opp_cd + AND updim.tekiyo_month = base_tekiyo_month + AND updim.muko_flg =base_muko_flg + AND updim.enabled_flg =base_enabled_flg + """ + params = { + 'muko_flg': muko_flg + } + res = db.execute(sql.format( + column='base_dup_opp_cd' if muko_flg == 1 else 'NULL' + ), params) + logging_sql(logger, sql) + logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.dcf_inst_merge + SET + dcf_inst_cd_new = :dcf_inst_cd_new_after, + updater = CURRENT_USER(), + update_date = SYSDATE() + WHERE + dcf_inst_cd_new = :dcf_inst_cd_new_before + AND enabled_flg = 'Y' + AND muko_flg = 0 + """ + params = {'dcf_inst_cd_new_after': dcf_inst_cd_new_after, 'dcf_inst_cd_new_before': dcf_inst_cd_new_before} + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'移行先DCF施設コードの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_record: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + UPDATE + src05.ult_ident_presc + SET end_date = :end_date, + updater = CURRENT_USER(), + update_date= SYSDATE() + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :start_date + """ + params = { + 'end_date': last_end_date, + 'ta_cd': ult_ident_presc_record['ta_cd'], + 'ult_ident_cd': ult_ident_presc_record['ult_ident_cd'], + 'ratio': ult_ident_presc_record['ratio'], + 'start_date': ult_ident_presc_record['start_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'終了日 > 開始月のため適用終了日を更新, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('') + raise e + + +def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ult_row: CursorResult): + # + try: + elapsed_time = ElapsedTime() + sql = """ + INSERT INTO + src05.ult_ident_presc( + ta_cd, + ult_ident_cd, + ratio, + start_date, + presc_cd, + end_date, + creater, + create_date, + update_date, + updater + ) + VALUES( + :ta_cd, + :ult_ident_cd, + :ratio, + :start_date, + :presc_cd, + :end_date, + CURRENT_USER(), + SYSDATE(), + SYSDATE(), + CURRENT_USER() + ) + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': set_Start_Date, + 'presc_cd': dup_opp_cd, + 'end_date': ult_row['end_date'] + } + res = db.execute(sql, params) + logging_sql(logger, sql) + logger.info(f'納入先処方元マスタに追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('納入先処方元マスタに追加に失敗') + raise e + + +def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: + # + try: + sql = """ + SELECT + eci.inst_cd, + eci.ta_cd, + eci.emp_cd, + eci.bu_cd, + eci.start_date, + eci.end_date, + eci.main_chg_flg, + eci.enabled_flg, + (SELECT COUNT(eciopp.inst_cd) FROM src05.emp_chg_inst AS eciopp WHERE eciopp.inst_cd = :dup_opp_cd) AS opp_count + FROM + src05.emp_chg_inst AS eci + WHERE + eci.inst_cd = :dcf_inst_cd + AND eci.enabled_flg = 'Y' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < eci.end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + emp_chg_inst_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return emp_chg_inst_records + + +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: + # + try: + sql = """ + SELECT + uip.ta_cd, + uip.ult_ident_cd, + uip.ratio, + uip.start_date, + uip.end_date, + (SELECT COUNT(uipopp.ta_cd) FROM ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd) AS opp_count + FROM + src05.ult_ident_presc AS uip + WHERE + uip.presc_cd = '{$dcfInstCd}' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + ult_ident_presc_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return ult_ident_presc_records + + +def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: CursorResult): + # + try: + sql = """ + SELECT + COUNT(ta_cd) AS cnt + FROM + src05.ult_ident_presc + WHERE + ta_cd = :ta_cd + AND ult_ident_cd = :ult_ident_cd + AND ratio = :ratio + AND start_date = :set_Start_Date + """ + params = { + 'ta_cd': ult_row['ta_cd'], + 'ult_ident_cd': ult_row['ult_ident_cd'], + 'ratio': ult_row['ratio'], + 'start_date': set_Start_Date + } + result = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('') + except Exception as e: + logger.debug('') + raise e + return result[0]['cnt'] + + +def _get_first_day_of_month(month_day: str): + return datetime.datetime.strptime(month_day, '%Y%m01') + + +def _str_to_date_time(str_date_time: str): + return datetime.datetime.strptime(str_date_time, '%Y%m%d') + + +def _date_time_to_str(date_time: datetime): + return date_time.strptime('%Y%m%d') From 75db3d2251968850ce4d1834d83ed39bef0d4461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 19 May 2023 16:37:03 +0900 Subject: [PATCH 02/36] =?UTF-8?q?feat:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1?= =?UTF-8?q?=E5=90=88=E3=83=9E=E3=82=B9=E3=82=BF=E6=97=A5=E6=AC=A1=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=83=90=E3=83=83=E3=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrate_dcf_inst_merge.py | 358 ++++++++++-------- 1 file changed, 193 insertions(+), 165 deletions(-) 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 index fa6ce77a..c37a3a30 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 @@ -7,8 +7,8 @@ from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger from src.time.elapsed_time import ElapsedTime -logger = get_logger('DCF施設統合マスタ日次更新バッチ') batch_context = BatchContext.get_instance() +logger = get_logger('DCF施設統合マスタ日次更新バッチ') def exec(): @@ -16,19 +16,17 @@ def exec(): try: db.connect() db.begin() - # - enabled_dst_inst_merge_records = _laundering_enabled_dct_inst_merge(db) - # - _laundering_disabled_dct_inst_merge(db) - # + logger.debug('DCF施設統合マスタ日次更新バッチ処理開始') + # DCF施設統合マスタ移行先コードのセット(無効フラグが『0(有効)』) + enabled_dst_inst_merge_records = _set_enabled_dct_inst_merge(db) + # DCF施設統合マスタ移行先コードのセット(無効フラグが『1(無効)』) + _set_disabled_dct_inst_merge(db) + # DCF施設統合マスタに無効フラグが『0(有効)』データが存在する場合 if len(enabled_dst_inst_merge_records) > 0: - logger.info('') _add_emp_chg_inst(db, enabled_dst_inst_merge_records) - logger.info('') _add_ult_ident_presc(db, enabled_dst_inst_merge_records) db.commit() - # - logger.info('') + logger.info('DCF施設統合マスタ日次更新バッチ処理終了') except Exception as e: db.rollback() raise BatchOperationException(e) @@ -36,68 +34,101 @@ def exec(): db.disconnect() -def _laundering_enabled_dct_inst_merge(db: Database) -> list[dict]: +def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: # データ取得(無効フラグが『0(有効)』) - valid_dst_inst_merge_records = _select_dct_inst_merge(db, 0, True) + enabled_dst_inst_merge_records = _select_dct_inst_merge(db, 0) # 移行先DCF施設コードの更新(無効フラグが『0(有効)』) - _update_dcf_inst_merge(db, 0) - # DCF施設統合マスタの過去分の洗い替え - if len(valid_dst_inst_merge_records) == 0: - return - for row in valid_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + if _update_dcf_inst_merge(db, 0) > 0: + # DCF施設統合マスタの過去分の洗い替え + for row in enabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) - return valid_dst_inst_merge_records + return enabled_dst_inst_merge_records -def _laundering_disabled_dct_inst_merge(db: Database): +def _set_disabled_dct_inst_merge(db: Database): # データ取得(無効フラグが『1(無効)』) - disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1, False) + disabled_dst_inst_merge_records = _select_dct_inst_merge(db, 1) # 移行先DCF施設コードの更新(無効フラグが『1(無効)』) - _update_dcf_inst_merge(db, 1) - # DCF施設統合マスタの過去分の洗い替え - if len(disabled_dst_inst_merge_records) == 0: - return - for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + if _update_dcf_inst_merge(db, 1) > 0: + # DCF施設統合マスタの過去分の洗い替え + for row in disabled_dst_inst_merge_records: + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) -def _add_ult_ident_presc(db: Database, valid_dst_inst_merge_records: list[dict]): - # - for data_inst_cnt, row in enumerate(valid_dst_inst_merge_records, start=1): +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']) ult_ident_presc_records = _select_ult_ident_presc(db, row['dcf_inst_cd'], row['dup_opp_cd']) - for data_cnt, ult_row in enumerate(ult_ident_presc_records, start=1): + for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 - if ult_row['opp_count'] > 0: + if ult_ident_presc_row['opp_count'] > 0: break - start_date = _str_to_date_time(ult_row['start_date']) + start_date = _str_to_date_time(ult_ident_presc_row['start_date']) set_start_date = start_date \ if start_date > tekiyo_month_first_day else tekiyo_month_first_day set_start_date = _date_time_to_str(set_start_date) - is_delete_duplicate_key = False - if _count_duplicate_ult_ident_presc(db, set_start_date, ult_row): - _delete_ult_ident_presc(db, set_start_date, ult_row) - is_delete_duplicate_key = True + is_exists_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: + _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, + '納入先処方元マスタの重複予定データの削除') + is_exists_duplicate_key = True else: logger.info('納入先処方元マスタの重複予定データなし') - _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_row) + _insert_ult_ident_presc(db, set_start_date, row['dup_opp_cd'], ult_ident_presc_row) - if _str_to_date_time(ult_row['end_date']) < start_date: - _delete_ult_ident_presc(db, ult_row['start_date'], ult_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_delete_duplicate_key: + if not is_exists_duplicate_key: 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_row) - if start_date > last_end_date: - _delete_ult_ident_presc(db, ult_row['start_date'], ult_row) + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) + if start_date > last_end_date: + _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, + '適用終了日更新後 開始日>終了日のため物理削除') + + logger.info('納入先処方元マスタの登録 終了') -def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult): - # +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 emp_chg_inst_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_chg_inst_row['opp_count'] > 0: + break + + start_date = _str_to_date_time(emp_chg_inst_row['start_date']) + 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), + emp_chg_inst_row) + + if start_date < tekiyo_month_first_day: + 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), + 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']) + + logger.info('従業員担当施設マスタの登録 終了') + + +def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row: CursorResult, + log_message: str): + # ult_ident_prescのDelete try: elapsed_time = ElapsedTime() sql = """ @@ -107,56 +138,24 @@ def _delete_ult_ident_presc(db: Database, start_date: str, ult_row: CursorResult ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd AND ratio = :ratio - AND start_date = :set_start_date + AND start_date = :start_date """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], 'start_date': start_date } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info(f'{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug(f'{log_message} 失敗') raise e -def _add_emp_chg_inst(db: Database, valid_dst_inst_merge_records: list[dict]): - # - for row in valid_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 emp_row in emp_chg_inst_records: - # 重複時相手先コードが存在したかのチェック - if emp_row['opp_count'] > 0: - break - - start_date = _str_to_date_time(emp_row['start_date']) - 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), emp_row) - - if start_date < tekiyo_month_first_day: - 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), emp_row) - if start_date <= last_end_date: - continue - _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], emp_row['start_date']) - - # if start_date >= tekiyo_month_first_day: - # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) - # continue - # last_end_date = tekiyo_month_first_day - timedelta(days=1) - # _update_emp_chg_inst_end_date(db, row['dcf_inst_cd'], last_end_date, emp_row) - # if start_date > last_end_date: - # _update_emp_chg_inst_enabled_flg(db, row['dcf_inst_cd'], emp_row['ta_cd'], start_date) - - def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str): - # + # emp_chg_instを更新 try: elapsed_time = ElapsedTime() sql = """ @@ -174,14 +173,15 @@ def _update_emp_chg_inst_enabled_flg(db: Database, dcf_inst_cd: str, ta_cd: str, params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'start_date': start_date} res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'従業員担当施設マスタのYorNフラグ更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタのYorNフラグ更新に失敗') raise e -def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: str, emp_row: CursorResult): - # +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を更新 try: elapsed_time = ElapsedTime() sql = """ @@ -200,21 +200,22 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: params = { 'end_date': last_end_date, 'dcf_inst_cd': dcf_inst_cd, - 'ta_cd': emp_row['ta_cd'], - 'emp_cd': emp_row['emp_cd'], - 'bu_cd': emp_row['bu_cd'], - 'start_date': emp_row['start_date'] + 'ta_cd': emp_chg_inst_row['ta_cd'], + 'emp_cd': emp_chg_inst_row['emp_cd'], + 'bu_cd': emp_chg_inst_row['bu_cd'], + 'start_date': emp_chg_inst_row['start_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'従業員担当施設マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'従業員担当施設マスタの適用終了日更新 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの適用終了日更新 失敗') raise e -def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp_row: CursorResult): - # +def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, + emp_chg_inst_row: CursorResult): + # emp_chg_instにInsert try: elapsed_time = ElapsedTime() sql = """ @@ -250,23 +251,24 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str, emp """ params = { 'dup_opp_cd': dup_opp_cd, - 'ta_cd': emp_row['ta_cd'], - 'emp_cd': emp_row['emp_cd'], - 'bu_cd': emp_row['bu_cd'], + 'ta_cd': emp_chg_inst_row['ta_cd'], + 'emp_cd': emp_chg_inst_row['emp_cd'], + 'bu_cd': emp_chg_inst_row['bu_cd'], 'start_date': set_start_date, - 'end_date': emp_row['end_date'], - 'main_chg_flg': emp_row['main_chg_flg'] if emp_row['main_chg_flg'] is None else None + 'end_date': emp_chg_inst_row['end_date'], + 'main_chg_flg': None + if emp_chg_inst_row['main_chg_flg'] is None else emp_chg_inst_row['main_chg_flg'] } res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'従業員担当施設マスタの追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの追加に失敗') raise e -def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: bool): - # +def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: + # dcf_inst_mergeからSelect try: sql = """ SELECT @@ -279,25 +281,26 @@ def _select_dct_inst_merge(db: Database, muko_flg: int, is_null_dcf_inst_cd_new: src05.hdke_tbl AS ht 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_null_dcf_inst_cd_new - """ + AND dim.dcf_inst_cd_new IS {not_null}NULL + """.format( + not_null='' if muko_flg == 0 else 'NOT ' + ) params = { - 'muko_flg': muko_flg, - 'is_null_dcf_inst_cd_new': None + 'muko_flg': muko_flg } dst_inst_merge_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('DCF施設統合マスタの取得に成功') except Exception as e: - logger.debug('') + logger.debug('DCF施設統合マスタの取得に失敗') raise e return dst_inst_merge_records -def _update_dcf_inst_merge(db: Database, muko_flg: int): +def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # try: elapsed_time = ElapsedTime() @@ -319,7 +322,7 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int): WHERE dim.muko_flg= :muko_flg AND dim.enabled_flg='Y' - AND dim.dcf_inst_cd_new IS {$dcfInstCdNew}NULL + AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim SET updim.dcf_inst_cd_new = {column}, @@ -329,24 +332,27 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int): updim.dcf_inst_cd = base_dcf_inst_cd AND updim.dup_opp_cd = base_dup_opp_cd AND updim.tekiyo_month = base_tekiyo_month - AND updim.muko_flg =base_muko_flg - AND updim.enabled_flg =base_enabled_flg - """ + AND updim.muko_flg = base_muko_flg + AND updim.enabled_flg = base_enabled_flg + """.format( + not_null='' if muko_flg == 0 else 'NOT ', + column='base_dup_opp_cd' if muko_flg == 0 else 'NULL' + ) params = { 'muko_flg': muko_flg } - res = db.execute(sql.format( - column='base_dup_opp_cd' if muko_flg == 1 else 'NULL' - ), params) + res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'DCF施設統合マスタの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('DCF施設統合マスタの更新に失敗') 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 try: elapsed_time = ElapsedTime() sql = """ @@ -361,17 +367,20 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c AND enabled_flg = 'Y' AND muko_flg = 0 """ - params = {'dcf_inst_cd_new_after': dcf_inst_cd_new_after, 'dcf_inst_cd_new_before': dcf_inst_cd_new_before} + params = { + 'dcf_inst_cd_new_after': dcf_inst_cd_new_after, + 'dcf_inst_cd_new_before': dcf_inst_cd_new_before + } res = db.execute(sql, params) logging_sql(logger, sql) logger.info(f'移行先DCF施設コードの更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('移行先DCF施設コードの更新に失敗') raise e -def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_record: CursorResult): - # +def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident_presc_row: CursorResult): + # ult_ident_presc_endをUpdate try: elapsed_time = ElapsedTime() sql = """ @@ -388,21 +397,22 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident """ params = { 'end_date': last_end_date, - 'ta_cd': ult_ident_presc_record['ta_cd'], - 'ult_ident_cd': ult_ident_presc_record['ult_ident_cd'], - 'ratio': ult_ident_presc_record['ratio'], - 'start_date': ult_ident_presc_record['start_date'] + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], + 'start_date': ult_ident_presc_row['start_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'終了日 > 開始月のため適用終了日を更新, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'終了日 > 開始月のため適用終了日を更新 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('') + logger.debug('終了日 > 開始月のため適用終了日を更新 失敗') raise e -def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ult_row: CursorResult): - # +def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, + ult_ident_presc_row: CursorResult): + # ult_ident_prescにInsert try: elapsed_time = ElapsedTime() sql = """ @@ -419,7 +429,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, update_date, updater ) - VALUES( + VALUES( :ta_cd, :ult_ident_cd, :ratio, @@ -433,23 +443,23 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, ) """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], 'start_date': set_Start_Date, 'presc_cd': dup_opp_cd, - 'end_date': ult_row['end_date'] + 'end_date': ult_ident_presc_row['end_date'] } res = db.execute(sql, params) logging_sql(logger, sql) - logger.info(f'納入先処方元マスタに追加に成功, {res.rowcount} 行更新 ({elapsed_time.of})') + logger.info(f'納入先処方元マスタに追加 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug('納入先処方元マスタに追加に失敗') + logger.debug('納入先処方元マスタに追加 失敗') raise e def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # + # emp_chg_instから取得 try: sql = """ SELECT @@ -461,7 +471,14 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis eci.end_date, eci.main_chg_flg, eci.enabled_flg, - (SELECT COUNT(eciopp.inst_cd) FROM src05.emp_chg_inst AS eciopp WHERE eciopp.inst_cd = :dup_opp_cd) AS opp_count + ( + SELECT + COUNT(eciopp.inst_cd) + FROM + src05.emp_chg_inst AS eciopp + WHERE + eciopp.inst_cd = :dup_opp_cd + ) AS opp_count FROM src05.emp_chg_inst AS eci WHERE @@ -472,15 +489,15 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} emp_chg_inst_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('従業員担当施設マスタの取得 成功') except Exception as e: - logger.debug('') + logger.debug('従業員担当施設マスタの取得 失敗') raise e return emp_chg_inst_records def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: - # + # ult_ident_prescから取得 try: sql = """ SELECT @@ -489,25 +506,33 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> uip.ratio, uip.start_date, uip.end_date, - (SELECT COUNT(uipopp.ta_cd) FROM ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd) AS opp_count + ( + SELECT + COUNT(uipopp.ta_cd) + FROM + ult_ident_presc AS uipopp + WHERE + uipopp.presc_cd = :dup_opp_cd + ) AS opp_count FROM src05.ult_ident_presc AS uip WHERE - uip.presc_cd = '{$dcfInstCd}' + uip.presc_cd = :dcf_inst_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('納入先処方元マスタの取得 成功') except Exception as e: - logger.debug('') + logger.debug('納入先処方元マスタの取得 失敗') raise e return ult_ident_presc_records -def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: CursorResult): - # +def _count_duplicate_ult_ident_presc(db: Database, set_start_date: str, + ult_ident_presc_row: CursorResult) -> int: + # ult_ident_prescの重複時相手先コードの件数取得 try: sql = """ SELECT @@ -518,30 +543,33 @@ def _count_duplicate_ult_ident_presc(db: Database, set_Start_Date: str, ult_row: ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd AND ratio = :ratio - AND start_date = :set_Start_Date + AND start_date = :start_date """ params = { - 'ta_cd': ult_row['ta_cd'], - 'ult_ident_cd': ult_row['ult_ident_cd'], - 'ratio': ult_row['ratio'], - 'start_date': set_Start_Date + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'], + 'start_date': set_start_date } result = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('') + logger.info('納入先処方元マスタの重複予定データの存在チェック 成功') except Exception as e: - logger.debug('') + logger.debug('納入先処方元マスタの重複予定データの存在チェック 失敗') raise e return result[0]['cnt'] -def _get_first_day_of_month(month_day: str): - return datetime.datetime.strptime(month_day, '%Y%m01') +def _get_first_day_of_month(year_month: str) -> datetime: + # year_monthの初日の日付を日付型に変換し返却する + return datetime.strptime(year_month + '01', '%Y%m%d') -def _str_to_date_time(str_date_time: str): - return datetime.datetime.strptime(str_date_time, '%Y%m%d') +def _str_to_date_time(str_date_time: str) -> datetime: + # str_date_timeを日付型に変換して返却する + return datetime.strptime(str_date_time, '%Y%m%d') -def _date_time_to_str(date_time: datetime): - return date_time.strptime('%Y%m%d') +def _date_time_to_str(date_time: datetime) -> str: + # date_timeをYmd型に変換して返却する + return date_time.strftime('%Y%m%d') From 3b369b8fc40b258792455aa647e4007f99708398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 19 May 2023 16:48:11 +0900 Subject: [PATCH 03/36] =?UTF-8?q?feat:=20=E8=B5=B7=E5=8B=95=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch-daily/src/jobctrl_daily.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-batch-daily/src/jobctrl_daily.py b/ecs/jskult-batch-daily/src/jobctrl_daily.py index 1a82f226..71fbea90 100644 --- a/ecs/jskult-batch-daily/src/jobctrl_daily.py +++ b/ecs/jskult-batch-daily/src/jobctrl_daily.py @@ -7,6 +7,7 @@ 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 @@ -114,6 +115,14 @@ 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: From 7da4be471c97a1eba6b3fe86e6342c8272ff9021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 15:30:51 +0900 Subject: [PATCH 04/36] =?UTF-8?q?feat:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=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 --- ...t_merge.py => integrate_dcf_inst_merge.py} | 87 ++++++++++--------- .../src/batch/laundering/sales_laundering.py | 3 + ecs/jskult-batch-daily/src/jobctrl_daily.py | 9 -- 3 files changed, 51 insertions(+), 48 deletions(-) rename ecs/jskult-batch-daily/src/batch/dcf_inst_merge/{Integrate_dcf_inst_merge.py => integrate_dcf_inst_merge.py} (83%) 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: From 5d16bceec95f4bd064d18246f55fc32dd5736e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 16:22:05 +0900 Subject: [PATCH 05/36] =?UTF-8?q?feat:=20SQL=E4=BF=AE=E6=AD=A3=E3=80=81?= =?UTF-8?q?=E5=8D=98=E4=BD=93=E8=A9=A6=E9=A8=93=E6=9B=B8=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E6=99=82=E3=81=AE=E6=8C=87=E6=91=98=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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 index ffb2ba06..6e9bf5e4 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 @@ -90,12 +90,15 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict 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) + # 適用開始日 > DCF施設統合マスタの適用月度の前月末日の場合 if start_date > last_end_date: + # 対象レコードを物理削除する _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, '適用終了日更新後 開始日>終了日のため物理削除') + continue + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) logger.info('納入先処方元マスタの登録 終了') @@ -195,7 +198,7 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date: src05.emp_chg_inst SET end_date = :end_date, updater = CURRENT_USER(), - update_date= SYSDATE() + update_date = SYSDATE() WHERE inst_cd = :dcf_inst_cd AND ta_cd = :ta_cd @@ -310,9 +313,9 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # dcf_inst_mergeをUPDATE # muko_flgの値によって、SQLのWHERE条件とSET句を変更 - try: + try: elapsed_time = ElapsedTime() - log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' + log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' sql = """ UPDATE src05.dcf_inst_merge AS updim @@ -330,7 +333,7 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: ON dim.tekiyo_month = DATE_FORMAT(ht.syor_date, '%Y%m') WHERE dim.muko_flg = :muko_flg - AND dim.enabled_flg='Y' + AND dim.enabled_flg ='Y' AND dim.dcf_inst_cd_new IS {not_null}NULL ) AS bf_dim SET @@ -397,7 +400,7 @@ def _update_ult_ident_presc_end_date(db: Database, last_end_date: str, ult_ident src05.ult_ident_presc SET end_date = :end_date, updater = CURRENT_USER(), - update_date= SYSDATE() + update_date = SYSDATE() WHERE ta_cd = :ta_cd AND ult_ident_cd = :ult_ident_cd @@ -519,7 +522,7 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> SELECT COUNT(uipopp.ta_cd) FROM - ult_ident_presc AS uipopp + src05.ult_ident_presc AS uipopp WHERE uipopp.presc_cd = :dup_opp_cd ) AS opp_count From 0f8fb0026f88accd75207484ad115213360a99c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 25 May 2023 18:16:09 +0900 Subject: [PATCH 06/36] =?UTF-8?q?feat:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=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/dcf_inst_merge/integrate_dcf_inst_merge.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 index 6e9bf5e4..182b7232 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 @@ -278,7 +278,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 - # muko_flgの値によって、SQLのWHERE条件を変更 + # 無効フラグがOFFのときは、移行先DCF施設コードが設定されてないデータを抽出する。 + # ONのときは、移行先DCF施設コードが設定されているデータを抽出する。 try: sql = """ SELECT @@ -312,7 +313,10 @@ def _select_dct_inst_merge(db: Database, muko_flg: int) -> list[dict]: def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: # dcf_inst_mergeをUPDATE - # muko_flgの値によって、SQLのWHERE条件とSET句を変更 + # 無効フラグがOFFのときは、 + # 移行先DCF施設コードが設定されていないデータを抽出し、移行先DCF施設コードに重複時相手先コードを上書きする + # 無効フラグがONのときは、 + # 移行先DCF施設コードが設定されているデータを抽出し、移行先DCF施設コードにNULLを上書きする。 try: elapsed_time = ElapsedTime() log_message = '更新しました' if muko_flg == 0 else '無効データに戻しました' From f3e772e0f34b8f824a2283cdd3ba7926cd622d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 30 May 2023 16:25:48 +0900 Subject: [PATCH 07/36] =?UTF-8?q?feat:=20=E5=8D=98=E4=BD=93=E8=A9=A6?= =?UTF-8?q?=E9=A8=93=E5=AE=9F=E6=96=BD=E4=B8=AD=E3=81=AB=E7=99=BA=E8=A6=8B?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=9F=E3=83=87=E3=83=83=E3=83=88=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E5=89=8A=E9=99=A4=E3=80=81=E3=81=BB?= =?UTF-8?q?=E3=81=8B=E3=80=81=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=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 --- .../dcf_inst_merge/integrate_dcf_inst_merge.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) 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 index 182b7232..20ac5fcc 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 @@ -91,12 +91,6 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict # 重複予定データが存在しない、且つ、適用終了日 ≧ 適用開始日の場合 if not is_exists_duplicate_key: last_end_date = tekiyo_month_first_day - timedelta(days=1) - # 適用開始日 > DCF施設統合マスタの適用月度の前月末日の場合 - if start_date > last_end_date: - # 対象レコードを物理削除する - _delete_ult_ident_presc(db, ult_ident_presc_row['start_date'], ult_ident_presc_row, - '適用終了日更新後 開始日>終了日のため物理削除') - continue # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) @@ -121,14 +115,15 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): _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: + # 適用終了日 ≧ 適用開始日の場合 + if _str_to_date_time(emp_chg_inst_row['end_date']) >= start_date: # DCF施設統合マスタの適用月度の前月末日で、適用終了日を更新する last_end_date = tekiyo_month_first_day - timedelta(days=1) _update_emp_chg_inst_end_date(db, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_chg_inst_row) - continue - # 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する + if last_end_date >= start_date: + continue + # DCF施設統合マスタの適用月度の前月末日 < 適用開始日、または適用終了日 < 適用開始日の場合、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']) From 9ae92789678fad933360267f7f675b50b5074348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 1 Jun 2023 15:58:52 +0900 Subject: [PATCH 08/36] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dcf_inst_merge/integrate_dcf_inst_merge.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 index 20ac5fcc..832cc20c 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 @@ -40,7 +40,7 @@ def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: if _update_dcf_inst_merge(db, 0) > 0: # DCF施設統合マスタの過去分の洗い替え for row in enabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd']) + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], 0) return enabled_dst_inst_merge_records @@ -52,7 +52,7 @@ def _set_disabled_dct_inst_merge(db: Database): if _update_dcf_inst_merge(db, 1) > 0: # DCF施設統合マスタの過去分の洗い替え for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd']) + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], 1) def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): @@ -356,15 +356,16 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: logging_sql(logger, sql) logger.info(f'DCF施設統合マスタの有効データを{log_message} 成功, {res.rowcount} 行更新 ({elapsed_time.of})') except Exception as e: - logger.debug(f'DCF施設統合マスタの{log_message} 失敗') + 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): +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, muko_flg: int): # dcf_inst_mergeをUPDATE try: + log_message = '' if muko_flg == 0 else '戻し' elapsed_time = ElapsedTime() sql = """ UPDATE @@ -384,9 +385,9 @@ def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_c } 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 From b9e4a73b941909476e503768647abc7fa57bd3d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 2 Jun 2023 09:51:16 +0900 Subject: [PATCH 09/36] =?UTF-8?q?feat:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E9=83=A8=E5=88=86=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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 index 832cc20c..b4b6e4e7 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 @@ -40,7 +40,7 @@ def _set_enabled_dct_inst_merge(db: Database) -> list[dict]: if _update_dcf_inst_merge(db, 0) > 0: # DCF施設統合マスタの過去分の洗い替え for row in enabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], 0) + _update_dcf_inst_cd_new(db, row['dup_opp_cd'], row['dcf_inst_cd'], '') return enabled_dst_inst_merge_records @@ -52,7 +52,7 @@ def _set_disabled_dct_inst_merge(db: Database): if _update_dcf_inst_merge(db, 1) > 0: # DCF施設統合マスタの過去分の洗い替え for row in disabled_dst_inst_merge_records: - _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], 1) + _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): @@ -362,10 +362,9 @@ def _update_dcf_inst_merge(db: Database, muko_flg: int) -> int: return res.rowcount -def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, muko_flg: int): +def _update_dcf_inst_cd_new(db: Database, dcf_inst_cd_new_after: str, dcf_inst_cd_new_before: str, log_message: str): # dcf_inst_mergeをUPDATE try: - log_message = '' if muko_flg == 0 else '戻し' elapsed_time = ElapsedTime() sql = """ UPDATE From 607784bc50a8597647e145b74812d175f578460d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 6 Jun 2023 17:55:47 +0900 Subject: [PATCH 10/36] =?UTF-8?q?feat:=20=E5=BE=93=E6=A5=AD=E5=93=A1?= =?UTF-8?q?=E6=8B=85=E5=BD=93=E6=96=BD=E8=A8=AD=E3=83=9E=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E7=8F=BE=E8=A1=8CMINE=E3=81=AE?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AB=E3=83=AD=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) 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 index b4b6e4e7..e325d7a4 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 @@ -115,15 +115,14 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), emp_chg_inst_row) - # 適用終了日 ≧ 適用開始日の場合 - if _str_to_date_time(emp_chg_inst_row['end_date']) >= start_date: + # 適用開始日 < 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, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), emp_chg_inst_row) - if last_end_date >= start_date: - continue - # DCF施設統合マスタの適用月度の前月末日 < 適用開始日、または適用終了日 < 適用開始日の場合、N(論理削除レコード)に設定する + 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']) From 0bdcc1fc4afe44302f6d94f37d2ae4db8cf649b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 7 Jun 2023 15:49:20 +0900 Subject: [PATCH 11/36] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=E4=B8=AD?= =?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/laundering/sales_laundering.py | 2 + .../laundering/sales_results_laundering.py | 139 +++++ .../src05/hco_to_mdb_laundering.sql | 98 +++ .../src05/inst_merge_laundering.sql | 52 ++ .../src05/sales_lau_delete.sql | 37 ++ .../src05/sales_lau_upsert.sql | 568 ++++++++++++++++++ .../src05/v_inst_merge_laundering.sql | 71 +++ .../src05/whs_org_laundering.sql | 118 ++++ 8 files changed, 1085 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py create mode 100644 rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_delete.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_upsert.sql create mode 100644 rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/whs_org_laundering.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..3862177e 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -20,6 +20,8 @@ def exec(): emp_chg_inst_laundering.exec() # 納入先処方元マスタ洗替 ult_ident_presc_laundering.exec() + # 卸販売洗替 + # # 並列処理のテスト用コード # import time diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py new file mode 100644 index 00000000..979f1042 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -0,0 +1,139 @@ +from src.db.database import Database +from src.error.exceptions import BatchOperationException +from src.logging.get_logger import get_logger +from src.batch.batch_functions import logging_sql + +logger = get_logger('卸実績洗替') + + +def exec(): + db = Database.get_instance() + try: + db.connect() + logger.debug('処理開始') + # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 + _call_sales_lau_delete(db, 'sales_lau', 5) + # 卸販売実績テーブル(洗替後)作成 + _call_sales_lau_upsert(db, 'sales_lau', '', '') + # 1:卸組織洗替 + _call_whs_org_laundering(db, 'sales_lau') + # 3:HCO施設コードの洗替 + _update_sales_lau_from_vop_hco_merge_v(db, 'sales_lau') + # 4:メルク施設コードの洗替 + _update_mst_inst_laundering(db, 'sales_lau') + logger.debug('処理終了') + except Exception as e: + raise BatchOperationException(e) + finally: + db.disconnect() + + +def _call_sales_lau_delete(db: Database, target_table: str, set_year: int): + # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 + logger.info('sales_lau_delete(プロシージャ―) 開始') + db.execute(f'CALL src05.sales_lau_delete("{target_table}", {set_year})') + logger.info('sales_lau_delete(プロシージャ―) 終了') + return + + +def _call_sales_lau_upsert(db: Database, target_table: str, extract_from_date: str, + extract_to_date: str): + # 卸販売実績テーブル(洗替後)作成 + logger.info('sales_lau_delete(プロシージャ―) 開始') + db.execute(f'CALL src05.sales_lau_delete("{target_table}", "{extract_from_date}", "{extract_to_date}")') + logger.info('sales_lau_delete(プロシージャ―) 終了') + return + + +def _call_whs_org_laundering(db: Database, target_table: str): + # 卸組織洗替 + logger.info('whs_org_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.whs_org_laundering("{target_table}")') + logger.info('whs_org_laundering(プロシージャ―) 終了') + return + + +def _update_sales_lau_from_vop_hco_merge_v(db: Database, target_table: str): + # HCO施設コードの洗替 + if _count_vop_hco_merge_v(db) >= 1: + _call_v_inst_merge_laundering(db, target_table) + return + logger.info('V施設統合マスタにデータは存在しません') + return + + +def _count_vop_hco_merge_v(db: Database) -> int: + # V施設統合マスタのデータ件数の取得 + try: + sql = """ + SELECT + COUNT(v_inst_cd) AS cnt + FROM + src05.vop_hco_merge_v + """ + result = db.execute_select(sql) + logging_sql(logger, sql) + logger.info('V施設統合マスタのデータ件数の取得 成功') + except Exception as e: + logger.debug('V施設統合マスタのデータ件数の取得 失敗') + raise e + + return result[0]['cnt'] + + +def _call_v_inst_merge_laundering(db: Database, target_table: str): + # HCO施設コードの洗替(テーブル更新) + logger.info('v_inst_merge_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.v_inst_merge_laundering("{target_table}")') + logger.info('v_inst_merge_laundering(プロシージャ―) 終了') + return + + +def _update_mst_inst_laundering(db: Database, target_table: str): + # メルク施設コードの洗替 + _call_hco_to_mdb_laundering(db, target_table) + _update_sales_lau_from_dcf_inst_merge(db, target_table) + + +def _call_hco_to_mdb_laundering(db: Database, target_table: str): + # A:医療機関のデータはMDB変換表からHCO⇒DCFへ変換 + logger.info('hco_to_mdb_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.hco_to_mdb_laundering("{target_table}")') + logger.info('hco_to_mdb_laundering(プロシージャ―) 終了') + return + + +def _update_sales_lau_from_dcf_inst_merge(db: Database, target_table: str): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする + if _count_dcf_inst_merge(db) >= 1: + _call_inst_merge_laundering(db, target_table) + return + logger.info('DCF施設統合マスタにデータは存在しません') + return + + +def _count_dcf_inst_merge(db: Database) -> int: + # DCF施設統合マスタのデータ件数の取得 + try: + sql = """ + SELECT + COUNT(dcf_inst_cd) AS cnt + FROM + src05.dcf_inst_merge + """ + result = db.execute_select(sql) + logging_sql(logger, sql) + logger.info('DCF施設統合マスタのデータ件数の取得 成功') + except Exception as e: + logger.debug('DCF施設統合マスタのデータ件数の取得 失敗') + raise e + + return result[0]['cnt'] + + +def _call_inst_merge_laundering(db: Database, target_table: str): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(テーブル更新) + logger.info('inst_merge_laundering(プロシージャ―) 開始') + db.execute(f'CALL src05.inst_merge_laundering("{target_table}")') + logger.info('inst_merge_laundering(プロシージャ―) 終了') + return diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql new file mode 100644 index 00000000..03402001 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -0,0 +1,98 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.hco_to_mdb_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A① 開始'); + + TRUNCATE TABLE internal05.hco_cnv_mdb_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A① 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A② 開始'); + + INSERT INTO + internal05.hco_cnv_mdb_t ( + hco_vod_v, + mdb_cd, + form_inst_name_kana, + form_inst_name_kanji, + inst_addr, + prefc_cd, + delete_flg, + abolish_ymd, + start_date + ) + SELECT + mcmv.hco_vid_v, + mcmv.mdb_cd, + ci.form_inst_name_kana, + ci.form_inst_name_kanji, + ci.inst_addr, + ci.prefc_cd, + ci.delete_flg, + ci.abolish_ymd, + mcmv.start_date + FROM + src05.mdb_cnv_mst_v AS mcmv + INNER JOIN ( + SELECT + hco_vid_v,MAX(sub_num) AS sno + FROM + src05.mdb_cnv_mst_v + WHERE + rec_sts_kbn != '9' + AND src05.get_syor_date() >= START_DATE + GROUP BY hco_vid_v + ) AS mcmv2 + ON mcmv.hco_vid_v = mcmv2.hco_vid_v + AND mcmv.sub_num = mcmv2.sno + LEFT OUTER JOIN src05.com_inst AS ci + ON mcmv.mdb_cd = ci.dcf_dsf_inst_cd + AND ci.delete_flg = '0' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A② 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A③ 開始'); + + UPDATE src05.@target_table AS tt, internal05.hco_cnv_mdb_t AS hcmt + SET + tt.inst_cd = hcmt.mdb_cd, + tt.inst_name_kana = hcmt.form_inst_name_kana, + tt.inst_name = hcmt.form_inst_name_kanji, + tt.address = hcmt.inst_addr, + tt.pref_cd = hcmt.prefc_cd + WHERE + tt.v_inst_cd = hcmt.hco_vid_v + AND tt.inst_clas_cd = '1' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A③ 終了'); + +END diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql new file mode 100644 index 00000000..92ff79a9 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -0,0 +1,52 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.inst_merge_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_B① 開始'); + + UPDATE ( + SELECT + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + FROM + internal05.inst_merge_t + ) AS imt, + src05.@target_table AS tt + SET + tt.inst_cd = imt.dup_opp_cd, + tt.inst_name = imt.form_inst_name_kanji, + tt.inst_name_kana = imt.form_inst_name_kana, + tt.address = imt.inst_addr, + tt.prefc_cd = imt.prefc_cd + WHERE + tt.inst_cd = imt.dcf_dsf_inst_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_B① 終了'); + diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql new file mode 100644 index 00000000..652db718 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -0,0 +1,37 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.sales_lau_delete(@target_table VARCHAR(64), @laundering_period_year INT) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); + + DELETE FROM + src05.@target_table + WHERE + kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL @laundering_period_year YEAR), '%Y%m') + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql new file mode 100644 index 00000000..270495e7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -0,0 +1,568 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.sales_lau_upsert(@target_table VARCHAR(64), @extract_from_date DATETIME, + @extract_to_date DATETIME) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成① 開始' + ); + + TRUNCATE TABLE internal05.bu_prd_name_contrast_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成① 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成② 開始' + ); + + INSERT INTO + internal05.bu_prd_name_contrast_t ( + prd_cd, + bu_cd, + phm_itm_cd, + pp_start_date, + pp_end_date, + update_date, + bp_start_date, + bp_end_date + ) + SELECT + ppmv.prd_cd, + bpnc.bu_cd, + ppmv.phm_itm_cd, + ppmv.start_date AS pp_start_date, + ppmv.end_date AS pp_end_date, + bpnc.update_date AS update_date + bpnc.start_date AS bp_start_date, + bpnc.end_date AS bp_end_date + FROM + src05.phm_prd_mst_v AS ppmv + LEFT OUTER JOIN src05.bu_prd_name_contrast AS bpnc + ON ppmv.phm_itm_cd = bpnc.phm_itm_cd + WHERE + ppmv.rec_sts_kbn != '9' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成② 終了' + ); + + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成③ 開始' + ); + + TRUNCATE TABLE internal05.fcl_mst_v_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成③ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成④ 開始' + ); + + INSERT INTO + internal05.internal05.fcl_mst_v_t + SELECT + v_inst_cd, + sub_num, + start_date, + end_date, + closed_dt, + fcl_name, + fcl_kn_name, + fcl_abb_name, + mkr_cd, + jsk_proc_kbn, + fmt_addr, + fmt_kn_addr, + postal_cd, + prft_cd, + prft_name, + city_name, + addr_line_1, + tel_num, + admin_kbn, + fcl_type, + rec_sts_kbn, + ins_dt, + upd_dt, + dwh_upd_dt + FROM + src05.fcl_mst_v AS fmv1 + INNER JOIN ( + SELECT + fmv.v_inst_cd, + MAX(fmv.sub_num) AS sno + FROM + src05.fcl_mst_v AS fmv + GROUP BY + fmv.v_inst_cd + ) AS fmv2 + ON fmv1.v_inst_cd = fmv2.v_inst_cd + AND fmv1.sub_num = fmv2.sno + WHERE + fmv1.rec_sts_kbn != '9' + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成④ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑤ 開始' + ); + + INSERT INTO + src05.@target_table ( + rec_whs_cd, + rec_whs_sub_cd, + rec_whs_org_cd, + rec_cust_cd, + rec_comm_cd, + rec_tran_kbn, + rev_hsdnymd_wrk, + rev_hsdnymd_srk, + rec_urag_num, + rec_qty, + rec_nonyu_price, + rec_nonyu_amt, + rec_comm_name, + rec_nonyu_fcl_name, + free_item, + rec_nonyu_fcl_addr, + rec_nonyu_fcl_post, + rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd, + rec_bef_slip_num, + rec_ymd, + sale_data_cat, + slip_file_name, + slip_mgt_num, + row_num, + hsdn_ymd, + exec_dt, + v_tran_cd, + tran_kbn_name, + whs_org_cd, + v_whsorg_cd, + whs_org_name, + whs_org_kn, + v_whs_cd, + whs_name, + nonyu_fcl_cd, + inst_name, + inst_name_kana, + address, + comm_cd, + comm_name, + nonyu_qty, + nonyu_price, + nonyu_amt, + shikiri_price, + shikiri_amt, + nhi_price, + nhi_amt, + v_inst_cd, + inst_clas_cd, + bu_cd, + item_cd, + item_name, + item_english_name, + pref_cd, + whspos_err_kbn, + htdnymd_err_kbn, + prd_exis_kbn, + fcl_exis_kbn, + bef_hsdn_ymd, + bef_slip_num, + slip_org_kbn, + kjyo_ym, + tksnbk_kbn, + fcl_exec_kbn, + rec_sts_kbn, + ins_dt, + ins_usr, + dwh_upd_dt + ) + SELECT + s.rec_whs_cd, + s.rec_whs_sub_cd, + s.rec_whs_org_cd, + s.rec_cust_cd, + s.rec_comm_cd, + s.rec_tran_kbn, + s.rev_hsdnymd_wrk, + s.rev_hsdnymd_srk, + s.rec_urag_num, + s.rec_qty, + s.rec_nonyu_price, + s.rec_nonyu_amt, + s.rec_comm_name, + s.rec_nonyu_fcl_name, + s.free_item, + s.rec_nonyu_fcl_addr, + s.rec_nonyu_fcl_post, + s.rec_nonyu_fcl_tel, + s.rec_bef_hsdn_ymd, + s.rec_bef_slip_num, + s.rec_ymd, + s.sale_data_cat, + s.slip_file_name, + s.slip_mgt_num, + s.row_num, + s.hsdn_ymd, + s.exec_dt, + s.v_tran_cd, + s.tran_kbn_name, + s.whs_org_cd, + s.v_whsorg_cd, + s.whs_org_name, + s.whs_org_kn, + s.v_whs_cd, + s.whs_name, + s.nonyu_fcl_cd, + s.v_inst_name, + s.v_inst_kn, + s.v_inst_addr, + s.comm_cd, + s.comm_name, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END AS nonyu_qty, + s.nonyu_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END AS nonyu_amt, + s.shikiri_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END AS shikiri_amt, + s.nhi_price, + CASE + WHEN + (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END AS nhi_amt, + s.v_inst_cd, + CASE + WHEN + (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' + ELSE + '1' + END AS inst_clas_cd, + bpnct.bu_cd, + ppmv.mkr_cd, + ppmv.mkr_inf_1, + ppmv.mkr_inf_2, + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END AS prft_cd, + s.whspos_err_kbn, + s.htdnymd_err_kbn, + s.prd_exis_kbn, + s.fcl_exis_kbn, + s.bef_hsdn_ymd, + s.bef_slip_num, + s.slip_org_kbn, + s.kjyo_ym, + s.tksnbk_kbn, + s.fcl_exec_kbn, + s.rec_sts_kbn, + s.ins_dt, + s.ins_usr, + SYSDATE() + FROM ( + SELECT + CAST(SYSDATE() AS DATE) AS today + ) AS sub + INNER JOIN src05.sales AS s + ON sub.today = CAST(s.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv + ON s.comm_cd = ppmv.prd_cd + AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date + AND ppmv.rec_sts_kbn != '9' + LEFT OUTER JOIN src05.fcl_mst_v_t AS fmvt + ON s.v_inst_cd = fmvt.v_inst_cd + LEFT OUTER JOIN src05.bu_prd_name_contrast_t AS bpnct + ON s.comm_cd = bpnct.prd_cd + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date + LEFT OUTER JOIN src05.com_inst AS ci + ON s.v_inst_cd = ci.dcf_dsf_inst_cd + WHERE + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + OR ( + s.rec_sts_kbn = '0' + AND s.err_flg20 != 'M' + AND s.v_tran_cd IN (110, 120, 210, 220) + AND ( + ( + s.fcl_exec_kbn NOT IN ('2', '5') + AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) + ) + OR s.fcl_exec_kbn IS NULL + ) + ) + + ON DUPLICATE KEY UPDATE + rec_whs_cd = s.rec_whs_cd, + rec_whs_sub_cd = s.rec_whs_sub_cd, + rec_whs_org_cd = s.rec_whs_org_cd, + rec_cust_cd = s.rec_cust_cd, + rec_comm_cd = s.rec_comm_cd, + rec_tran_kbn = s.rec_tran_kbn, + rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, + rev_hsdnymd_srk = s.rev_hsdnymd_srk, + rec_urag_num = s.rec_urag_num, + rec_qty = s.rec_qty, + rec_nonyu_price = s.rec_nonyu_price, + rec_nonyu_amt = s.rec_nonyu_amt, + rec_comm_name = s.rec_comm_name, + rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, + free_item = s.free_item, + rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, + rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, + rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, + rec_bef_slip_num = s.rec_bef_slip_num, + rec_ymd = s.rec_ymd, + sale_data_cat = s.sale_data_cat, + slip_file_name = s.slip_file_name, + row_num = s.row_num, + hsdn_ymd = s.hsdn_ymd, + exec_dt = s.exec_dt, + v_tran_cd = s.v_tran_cd, + tran_kbn_name = s.tran_kbn_name, + whs_org_cd = s.whs_org_cd, + v_whsorg_cd = s.v_whsorg_cd, + whs_org_name = s.whs_org_name, + whs_org_kn = s.whs_org_kn, + v_whs_cd = s.v_whs_cd, + whs_name = s.whs_name, + nonyu_fcl_cd = s.nonyu_fcl_cd, + inst_name = s.v_inst_name, + inst_name_kana = s.v_inst_kn, + address = s.v_inst_addr, + comm_cd = s.comm_cd, + comm_name = s.comm_name, + nonyu_qty = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END + ), + nonyu_price = s.nonyu_price, + nonyu_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END + ), + shikiri_price = s.shikiri_price, + shikiri_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END + ), + nhi_price = s.nhi_price, + nhi_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END + ), + v_inst_cd = s.v_inst_cd, + inst_clas_cd = ( + CASE + WHEN + (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') + THEN + '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + bu_cd = bpnct.bu_cd, + item_cd = ppmv.mkr_cd, + item_name = ppmv.mkr_inf_1, + item_english_name = ppmv.mkr_inf_2, + pref_cd = ( + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END + ), + whspos_err_kbn = s.whspos_err_kbn, + htdnymd_err_kbn = s.htdnymd_err_kbn, + prd_exis_kbn = s.prd_exis_kbn, + fcl_exis_kbn = s.fcl_exis_kbn, + bef_hsdn_ymd = s.bef_hsdn_ymd, + bef_slip_num = s.bef_slip_num, + slip_org_kbn = s.slip_org_kbn, + kjyo_ym = s.kjyo_ym, + tksnbk_kbn = s.tksnbk_kbn, + fcl_exec_kbn = s.fcl_exec_kbn, + rec_sts_kbn = s.rec_sts_kbn, + ins_dt = s.ins_dt, + ins_usr = s.ins_usr, + dwh_upd_dt = SYSDATE() + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑤ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑥ 開始' + ); + + UPDATE ( + SELECT + fmvt.v_inst_cd AS v_inst_cd, + fmvt.fcl_type AS fcl_type, + fmvt.prft_cd AS prft_cd, + ci.prefc_cd AS prefc_cd + FROM + (SELECT CAST(SYSDATE() AS DATE) AS today) AS sub + INNER JOIN src05.fcl_mst_v_t AS fmvt + ON sub.today = CAST(fmvt.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.com_inst AS ci + ON fmvt.v_inst_cd = ci.dcf_dsf_inst_cd + ) AS t3t5, + src05.sales_lau AS sl + SET + sl.inst_clas_cd = ( + CASE + WHEN + (t3t5.fcl_type = 'A1' OR t3t5.fcl_type = 'A0') + THEN + '3' + WHEN + t3t5.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + sl.pref_cd = ( + CASE + WHEN + sl.v_inst_cd LIKE '00%' + THEN + t3t5.prefc_cd + ELSE + t3t5.prft_cd + END + ) + WHERE sl.v_inst_cd = t3t5.v_inst_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑥ 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑦ 開始' + ); + + UPDATE + ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, + src05.sales_lau AS sl, + src05.sales AS s + SET + sl.inst_cd = ( + CASE + WHEN + (s.err_flg20 != 'M' AND sl.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') + THEN + s.v_inst_cd + ELSE + NULL + END + ) + WHERE + sub.today = CAST(s.dwh_upd_dt AS DATE) + AND sl.slip_mgt_num = s.slip_mgt_num + AND sl.row_num = s.row_num + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '卸販売実績テーブル(洗替後)作成⑦ 終了' + ); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql new file mode 100644 index 00000000..4ef2075e --- /dev/null +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -0,0 +1,71 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.v_inst_merge_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】3:HCO施設コードの洗替① 開始' + ); + + UPDATE ( + SELECT + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd + FROM + internal05.v_inst_merge_t + WHERE + (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' + ) AS vimt, + src05.@target_table AS tt + SET + tt.inst_cd = ( + CASE + WHEN + tt.inst_clas_cd = '1' + THEN + tt.inst_cd + WHEN + (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') + THEN + vimt.v_inst_cd_merge + END + ) + tt.v_inst_cd = vimt.v_inst_cd_merge, + tt.inst_name = vimt.fcl_name, + tt.inst_name_kana = vimt.fcl_kn_name, + tt.address = vimt.fmt_addr, + tt.prefc_cd = vimt.prft_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.v_inst_cd = vimt.v_inst_cd + AND (tt.inst_clas_cd IN ('1', '2', '3')) + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】3:HCO施設コードの洗替① 終了' + ); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql new file mode 100644 index 00000000..e3ce53c7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -0,0 +1,118 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +CREATE PROCEDURE src05.whs_org_laundering(@target_table VARCHAR(64)) +SQL SECURITY INVOKER +BEGIN + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'whs_org_launderingでエラーが発生', @error_state, @error_msg); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替① 開始' + ); + + TRUNCATE TABLE internal05.whs_customer_org_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替① 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替② 開始' + ); + + INSERT INTO + internal05.whs_customer_org_t ( + whs_cd, + whs_sub_cd, + customer_cd, + whs_org_cd, + v_org_cd, + nm_2 + ) + SELECT + wcmv.whs_cd, + wcmv.whs_sub_cd, + wcmv.customer_cd, + wcmv.whs_org_cd, + ocmv.v_org_cd, + mohv2.name_2 + FROM + src05.whs_customer_mst_v AS wcmv + LEFT OUTER JOIN src05.org_cnv_mst_v AS ocmv + ON wcmv.whs_cd = ocmv.whs_cd + AND wcmv.whs_sub_cd = ocmv.whs_sub_cd + AND wcmv.whs_org_cd = ocmv.org_cd + AND src05.get_syor_date() BETWEEN ocmv.start_date AND ocmv.end_date + AND ocmv.rec_sts_kbn != '9' + LEFT OUTER JOIN ( + SELECT + mohv.v_cd_2, + mohv.name_2 + FROM src05.mkr_org_horizon_v AS mohv + INNER JOIN ( + SELECT + count(1) AS c, + v_cd_2, + MAX(dwh_upd_dt) AS dwh_upd_dt_latest + FROM + src05.mkr_org_horizon_v + WHERE + rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN start_date AND end_date + GROUP BY + v_cd_2 + ORDER BY + MAX(start_date) DESC + ) AS m_latest + ON mohv.v_cd_2 = m_latest.v_cd_2 + AND mohv.dwh_upd_dt = m_latest.dwh_upd_dt_latest + WHERE + mohv.rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN mohv.start_date AND mohv.end_date + ) AS mohv2 + ON ocmv.v_org_cd = mohv2.v_cd_2 + WHERE + wcmv.rec_sts_kbn != '9' + AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替② 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 開始' + ); + + UPDATE + src05.sales_lau AS sl, src05.@target_table AS tt + SET + sl.whs_org_cd = tt.whs_org_cd, + sl.v_whsorg_cd = tt.v_org_cd, + sl.whs_org_name = tt.nm_2 + WHERE + st.whs_cd = tt.whs_cd + AND st.whs_sub_cd = tt.whs_sub_cd + AND st.customer_cd = tt.customer_cd + ; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 終了' + ); + +END \ No newline at end of file From 5f4efd451def5911198a8826a117cec361e6ee87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Mon, 12 Jun 2023 10:30:52 +0900 Subject: [PATCH 12/36] =?UTF-8?q?feat:=2048-1.=E5=8D=B8=E5=AE=9F=E7=B8=BE?= =?UTF-8?q?=E6=B4=97=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-batch-daily/.env.example | 6 + .../src/batch/laundering/sales_laundering.py | 6 +- .../laundering/sales_results_laundering.py | 85 +- .../src/system_var/environment.py | 7 + .../src05/hco_to_mdb_laundering.sql | 40 +- .../src05/inst_merge_laundering.sql | 57 +- .../src05/sales_lau_delete.sql | 20 +- .../src05/sales_lau_upsert.sql | 864 +++++++++--------- .../src05/v_inst_merge_laundering.sql | 86 +- .../src05/whs_org_laundering.sql | 59 +- 10 files changed, 629 insertions(+), 601 deletions(-) diff --git a/ecs/jskult-batch-daily/.env.example b/ecs/jskult-batch-daily/.env.example index 95aef7fe..7463e0d2 100644 --- a/ecs/jskult-batch-daily/.env.example +++ b/ecs/jskult-batch-daily/.env.example @@ -11,3 +11,9 @@ ULTMARC_BACKUP_FOLDER=ultmarc JSKULT_CONFIG_BUCKET=********************** JSKULT_CONFIG_CALENDAR_FOLDER=jskult/calendar JSKULT_CONFIG_CALENDAR_HOLIDAY_LIST_FILE_NAME=jskult_holiday_list.txt +# 連携データ抽出期間 +SALES_LAUNDERING_EXTRACT_DATE_PERIOD=0 +# 洗替対象テーブル名 +SALES_LAUNDERING_TARGET_TABLE_NAME=src05.sales_lau +# 卸実績洗替で作成するデータの期間(年単位) +SALES_LAUNDERING_TARGET_YEAR_OFFSET=5 \ No newline at end of file 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 3862177e..8264f4bd 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,7 @@ 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.laundering import ( + create_inst_merge_for_laundering, emp_chg_inst_laundering, + ult_ident_presc_laundering, sales_results_laundering) from src.logging.get_logger import get_logger batch_context = BatchContext.get_instance() @@ -21,7 +23,7 @@ def exec(): # 納入先処方元マスタ洗替 ult_ident_presc_laundering.exec() # 卸販売洗替 - + sales_results_laundering.exec() # # 並列処理のテスト用コード # import time diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 979f1042..4fe4126a 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -2,6 +2,7 @@ from src.db.database import Database from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger from src.batch.batch_functions import logging_sql +from src.system_var import environment logger = get_logger('卸実績洗替') @@ -12,15 +13,15 @@ def exec(): db.connect() logger.debug('処理開始') # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 - _call_sales_lau_delete(db, 'sales_lau', 5) + _call_sales_lau_delete(db) # 卸販売実績テーブル(洗替後)作成 - _call_sales_lau_upsert(db, 'sales_lau', '', '') + _call_sales_lau_upsert(db) # 1:卸組織洗替 - _call_whs_org_laundering(db, 'sales_lau') + _call_whs_org_laundering(db) # 3:HCO施設コードの洗替 - _update_sales_lau_from_vop_hco_merge_v(db, 'sales_lau') + _update_sales_lau_from_vop_hco_merge_v(db) # 4:メルク施設コードの洗替 - _update_mst_inst_laundering(db, 'sales_lau') + _update_mst_inst_laundering(db) logger.debug('処理終了') except Exception as e: raise BatchOperationException(e) @@ -28,35 +29,49 @@ def exec(): db.disconnect() -def _call_sales_lau_delete(db: Database, target_table: str, set_year: int): +def _call_sales_lau_delete(db: Database): # 卸販売実績テーブル(洗替後)過去5年以前のデータ削除 logger.info('sales_lau_delete(プロシージャ―) 開始') - db.execute(f'CALL src05.sales_lau_delete("{target_table}", {set_year})') + db.execute(f""" + CALL src05.sales_lau_delete( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}', + {environment.SALES_LAUNDERING_TARGET_YEAR_OFFSET} + ) + """) logger.info('sales_lau_delete(プロシージャ―) 終了') return -def _call_sales_lau_upsert(db: Database, target_table: str, extract_from_date: str, - extract_to_date: str): +def _call_sales_lau_upsert(db: Database): # 卸販売実績テーブル(洗替後)作成 - logger.info('sales_lau_delete(プロシージャ―) 開始') - db.execute(f'CALL src05.sales_lau_delete("{target_table}", "{extract_from_date}", "{extract_to_date}")') - logger.info('sales_lau_delete(プロシージャ―) 終了') + logger.info('sales_lau_upsert(プロシージャ―) 開始') + db.execute(f""" + CALL src05.sales_lau_upsert( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}', + (src05.get_syor_date() - {environment.SALES_LAUNDERING_EXTRACT_DATE_PERIOD}), + src05.get_syor_date() + ) + """) + logger.info('sales_lau_upsert(プロシージャ―) 終了') return -def _call_whs_org_laundering(db: Database, target_table: str): +def _call_whs_org_laundering(db: Database): # 卸組織洗替 logger.info('whs_org_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.whs_org_laundering("{target_table}")') + db.execute(f""" + CALL src05.whs_org_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('whs_org_laundering(プロシージャ―) 終了') return -def _update_sales_lau_from_vop_hco_merge_v(db: Database, target_table: str): +def _update_sales_lau_from_vop_hco_merge_v(db: Database): # HCO施設コードの洗替 if _count_vop_hco_merge_v(db) >= 1: - _call_v_inst_merge_laundering(db, target_table) + _call_v_inst_merge_laundering(db) return logger.info('V施設統合マスタにデータは存在しません') return @@ -81,32 +96,40 @@ def _count_vop_hco_merge_v(db: Database) -> int: return result[0]['cnt'] -def _call_v_inst_merge_laundering(db: Database, target_table: str): - # HCO施設コードの洗替(テーブル更新) +def _call_v_inst_merge_laundering(db: Database): + # HCO施設コードの洗替(プロシージャ―の呼び出し) logger.info('v_inst_merge_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.v_inst_merge_laundering("{target_table}")') + db.execute(f""" + CALL src05.v_inst_merge_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('v_inst_merge_laundering(プロシージャ―) 終了') return -def _update_mst_inst_laundering(db: Database, target_table: str): +def _update_mst_inst_laundering(db: Database): # メルク施設コードの洗替 - _call_hco_to_mdb_laundering(db, target_table) - _update_sales_lau_from_dcf_inst_merge(db, target_table) + _call_hco_to_mdb_laundering(db) + _update_sales_lau_from_dcf_inst_merge(db) -def _call_hco_to_mdb_laundering(db: Database, target_table: str): +def _call_hco_to_mdb_laundering(db: Database): # A:医療機関のデータはMDB変換表からHCO⇒DCFへ変換 logger.info('hco_to_mdb_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.hco_to_mdb_laundering("{target_table}")') + db.execute(f""" + CALL src05.hco_to_mdb_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('hco_to_mdb_laundering(プロシージャ―) 終了') return -def _update_sales_lau_from_dcf_inst_merge(db: Database, target_table: str): +def _update_sales_lau_from_dcf_inst_merge(db: Database): # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする if _count_dcf_inst_merge(db) >= 1: - _call_inst_merge_laundering(db, target_table) + _call_inst_merge_laundering(db) return logger.info('DCF施設統合マスタにデータは存在しません') return @@ -131,9 +154,13 @@ def _count_dcf_inst_merge(db: Database) -> int: return result[0]['cnt'] -def _call_inst_merge_laundering(db: Database, target_table: str): - # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(テーブル更新) +def _call_inst_merge_laundering(db: Database): + # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(プロシージャ―の呼び出し) logger.info('inst_merge_laundering(プロシージャ―) 開始') - db.execute(f'CALL src05.inst_merge_laundering("{target_table}")') + db.execute(f""" + CALL src05.inst_merge_laundering( + '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}' + ) + """) logger.info('inst_merge_laundering(プロシージャ―) 終了') return diff --git a/ecs/jskult-batch-daily/src/system_var/environment.py b/ecs/jskult-batch-daily/src/system_var/environment.py index b1730224..a51ab519 100644 --- a/ecs/jskult-batch-daily/src/system_var/environment.py +++ b/ecs/jskult-batch-daily/src/system_var/environment.py @@ -22,3 +22,10 @@ DB_CONNECTION_MAX_RETRY_ATTEMPT = int(os.environ.get('DB_CONNECTION_MAX_RETRY_AT DB_CONNECTION_RETRY_INTERVAL_INIT = int(os.environ.get('DB_CONNECTION_RETRY_INTERVAL', 5)) DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MIN_SECONDS', 5)) DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MAX_SECONDS', 50)) + +# 連携データ抽出期間 +SALES_LAUNDERING_EXTRACT_DATE_PERIOD = int(os.environ['SALES_LAUNDERING_EXTRACT_DATE_PERIOD']) +# 洗替対象テーブル名 +SALES_LAUNDERING_TARGET_TABLE_NAME = os.environ['SALES_LAUNDERING_TARGET_TABLE_NAME'] +# 卸実績洗替で作成するデータの期間(年単位) +SALES_LAUNDERING_TARGET_YEAR_OFFSET = os.environ['SALES_LAUNDERING_TARGET_YEAR_OFFSET'] diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index 03402001..b3cbfc6e 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.hco_to_mdb_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.hco_to_mdb_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -23,7 +23,7 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A① 開始'); + '【洗替】4:メルク施設コードの洗替_A① 開始'); TRUNCATE TABLE internal05.hco_cnv_mdb_t; @@ -31,11 +31,11 @@ BEGIN '【洗替】4:メルク施設コードの洗替_A① 終了'); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A② 開始'); + '【洗替】4:メルク施設コードの洗替_A② 開始'); INSERT INTO internal05.hco_cnv_mdb_t ( - hco_vod_v, + hco_vid_v, mdb_cd, form_inst_name_kana, form_inst_name_kanji, @@ -78,19 +78,23 @@ BEGIN '【洗替】4:メルク施設コードの洗替_A② 終了'); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_A③ 開始'); + '【洗替】4:メルク施設コードの洗替_A③ 開始'); - UPDATE src05.@target_table AS tt, internal05.hco_cnv_mdb_t AS hcmt - SET - tt.inst_cd = hcmt.mdb_cd, - tt.inst_name_kana = hcmt.form_inst_name_kana, - tt.inst_name = hcmt.form_inst_name_kanji, - tt.address = hcmt.inst_addr, - tt.pref_cd = hcmt.prefc_cd - WHERE - tt.v_inst_cd = hcmt.hco_vid_v - AND tt.inst_clas_cd = '1' - ; + SET @update_institution = " + UPDATE $$target_table$$ AS tt, internal05.hco_cnv_mdb_t AS hcmt + SET + tt.inst_cd = hcmt.mdb_cd, + tt.inst_name_kana = hcmt.form_inst_name_kana, + tt.inst_name = hcmt.form_inst_name_kanji, + tt.address = hcmt.inst_addr, + tt.pref_cd = hcmt.prefc_cd + WHERE + tt.v_inst_cd = hcmt.hco_vid_v + AND tt.inst_clas_cd = '1' + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 終了'); diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 92ff79a9..6a0642a9 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.inst_merge_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.inst_merge_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -25,28 +25,35 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 開始'); - UPDATE ( - SELECT - dcf_dsf_inst_cd, - dup_opp_cd, - form_inst_name_kanji, - form_inst_name_kana, - inst_addr, - prefc_cd - FROM - internal05.inst_merge_t - ) AS imt, - src05.@target_table AS tt - SET - tt.inst_cd = imt.dup_opp_cd, - tt.inst_name = imt.form_inst_name_kanji, - tt.inst_name_kana = imt.form_inst_name_kana, - tt.address = imt.inst_addr, - tt.prefc_cd = imt.prefc_cd - WHERE - tt.inst_cd = imt.dcf_dsf_inst_cd - ; + SET @update_institution = " + UPDATE ( + SELECT + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + FROM + internal05.inst_merge_t + ) AS imt, + $$target_table$$ AS tt + SET + tt.inst_cd = imt.dup_opp_cd, + tt.inst_name = imt.form_inst_name_kanji, + tt.inst_name_kana = imt.form_inst_name_kana, + tt.address = imt.inst_addr, + tt.pref_cd = imt.prefc_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.inst_cd = imt.dcf_dsf_inst_cd + AND tt.inst_clas_cd = '1' + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】4:メルク施設コードの洗替_B① 終了'); + '【洗替】4:メルク施設コードの洗替_B① 終了'); +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index 652db718..c1610435 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_delete(@target_table VARCHAR(64), @laundering_period_year INT) +CREATE PROCEDURE src05.sales_lau_delete(target_table VARCHAR(255), laundering_period_year INT) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -25,11 +25,15 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); - DELETE FROM - src05.@target_table - WHERE - kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL @laundering_period_year YEAR), '%Y%m') - ; + SET @delete_data = " + DELETE FROM + $$target_table$$ + WHERE + kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL ? YEAR), '%Y%m') + "; + SET @delete_data = REPLACE(@delete_data, "$$target_table$$", target_table); + PREPARE delete_data_stmt from @delete_data; + EXECUTE delete_data_stmt USING @laundering_period_year; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 270495e7..ecb2b671 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -1,6 +1,6 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_upsert(@target_table VARCHAR(64), @extract_from_date DATETIME, - @extract_to_date DATETIME) +CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date date, + extract_to_date date) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -8,10 +8,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -24,7 +24,7 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成① 開始' + '卸販売実績テーブル(洗替後)作成① 開始' ); TRUNCATE TABLE internal05.bu_prd_name_contrast_t; @@ -36,7 +36,7 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 開始' ); - + INSERT INTO internal05.bu_prd_name_contrast_t ( prd_cd, @@ -46,15 +46,15 @@ BEGIN pp_end_date, update_date, bp_start_date, - bp_end_date - ) + bp_end_date + ) SELECT ppmv.prd_cd, bpnc.bu_cd, ppmv.phm_itm_cd, ppmv.start_date AS pp_start_date, ppmv.end_date AS pp_end_date, - bpnc.update_date AS update_date + bpnc.update_date AS update_date, bpnc.start_date AS bp_start_date, bpnc.end_date AS bp_end_date FROM @@ -63,7 +63,7 @@ BEGIN ON ppmv.phm_itm_cd = bpnc.phm_itm_cd WHERE ppmv.rec_sts_kbn != '9' - ; + ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 終了' @@ -71,46 +71,47 @@ BEGIN call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成③ 開始' + '卸販売実績テーブル(洗替後)作成③ 開始' ); TRUNCATE TABLE internal05.fcl_mst_v_t; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成③ 終了' - ); + '卸販売実績テーブル(洗替後)作成③ 終了' + ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成④ 開始' + '卸販売実績テーブル(洗替後)作成④ 開始' ); INSERT INTO - internal05.internal05.fcl_mst_v_t + internal05.fcl_mst_v_t SELECT - v_inst_cd, - sub_num, - start_date, - end_date, - closed_dt, - fcl_name, - fcl_kn_name, - fcl_abb_name, - mkr_cd, - jsk_proc_kbn, - fmt_addr, - fmt_kn_addr, - postal_cd, - prft_cd, - prft_name, - city_name, - addr_line_1, - tel_num, - admin_kbn, - fcl_type, - rec_sts_kbn, - ins_dt, - upd_dt, - dwh_upd_dt + fmv1.v_inst_cd, + fmv1.sub_num, + fmv1.start_date, + fmv1.end_date, + fmv1.closed_dt, + fmv1.fcl_name, + fmv1.fcl_kn_name, + fmv1.fcl_abb_name, + fmv1.fcl_abb_kn_name, + fmv1.mkr_cd, + fmv1.jsk_proc_kbn, + fmv1.fmt_addr, + fmv1.fmt_kn_addr, + fmv1.postal_cd, + fmv1.prft_cd, + fmv1.prft_name, + fmv1.city_name, + fmv1.addr_line_1, + fmv1.tel_num, + fmv1.admin_kbn, + fmv1.fcl_type, + fmv1.rec_sts_kbn, + fmv1.ins_dt, + fmv1.upd_dt, + fmv1.dwh_upd_dt FROM src05.fcl_mst_v AS fmv1 INNER JOIN ( @@ -129,334 +130,176 @@ BEGIN ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成④ 終了' + '卸販売実績テーブル(洗替後)作成④ 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑤ 開始' - ); + '卸販売実績テーブル(洗替後)作成⑤ 開始' + ); - INSERT INTO - src05.@target_table ( - rec_whs_cd, - rec_whs_sub_cd, - rec_whs_org_cd, - rec_cust_cd, - rec_comm_cd, - rec_tran_kbn, - rev_hsdnymd_wrk, - rev_hsdnymd_srk, - rec_urag_num, - rec_qty, - rec_nonyu_price, - rec_nonyu_amt, - rec_comm_name, - rec_nonyu_fcl_name, - free_item, - rec_nonyu_fcl_addr, - rec_nonyu_fcl_post, - rec_nonyu_fcl_tel, - rec_bef_hsdn_ymd, - rec_bef_slip_num, - rec_ymd, - sale_data_cat, - slip_file_name, - slip_mgt_num, - row_num, - hsdn_ymd, - exec_dt, - v_tran_cd, - tran_kbn_name, - whs_org_cd, - v_whsorg_cd, - whs_org_name, - whs_org_kn, - v_whs_cd, - whs_name, - nonyu_fcl_cd, - inst_name, - inst_name_kana, - address, - comm_cd, - comm_name, - nonyu_qty, - nonyu_price, - nonyu_amt, - shikiri_price, - shikiri_amt, - nhi_price, - nhi_amt, - v_inst_cd, - inst_clas_cd, - bu_cd, - item_cd, - item_name, - item_english_name, - pref_cd, - whspos_err_kbn, - htdnymd_err_kbn, - prd_exis_kbn, - fcl_exis_kbn, - bef_hsdn_ymd, - bef_slip_num, - slip_org_kbn, - kjyo_ym, - tksnbk_kbn, - fcl_exec_kbn, - rec_sts_kbn, - ins_dt, - ins_usr, - dwh_upd_dt - ) - SELECT - s.rec_whs_cd, - s.rec_whs_sub_cd, - s.rec_whs_org_cd, - s.rec_cust_cd, - s.rec_comm_cd, - s.rec_tran_kbn, - s.rev_hsdnymd_wrk, - s.rev_hsdnymd_srk, - s.rec_urag_num, - s.rec_qty, - s.rec_nonyu_price, - s.rec_nonyu_amt, - s.rec_comm_name, - s.rec_nonyu_fcl_name, - s.free_item, - s.rec_nonyu_fcl_addr, - s.rec_nonyu_fcl_post, - s.rec_nonyu_fcl_tel, - s.rec_bef_hsdn_ymd, - s.rec_bef_slip_num, - s.rec_ymd, - s.sale_data_cat, - s.slip_file_name, - s.slip_mgt_num, - s.row_num, - s.hsdn_ymd, - s.exec_dt, - s.v_tran_cd, - s.tran_kbn_name, - s.whs_org_cd, - s.v_whsorg_cd, - s.whs_org_name, - s.whs_org_kn, - s.v_whs_cd, - s.whs_name, - s.nonyu_fcl_cd, - s.v_inst_name, - s.v_inst_kn, - s.v_inst_addr, - s.comm_cd, - s.comm_name, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_qty * -1) - ELSE - s.nonyu_qty - END AS nonyu_qty, - s.nonyu_price, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_amt * -1) - ELSE - s.nonyu_amt - END AS nonyu_amt, - s.shikiri_price, - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.shikiri_amt * -1) - ELSE - s.shikiri_amt - END AS shikiri_amt, - s.nhi_price, - CASE - WHEN - (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nhi_amt * -1) - ELSE - s.nhi_amt - END AS nhi_amt, - s.v_inst_cd, - CASE - WHEN - (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' - WHEN - fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' - ELSE - '1' - END AS inst_clas_cd, - bpnct.bu_cd, - ppmv.mkr_cd, - ppmv.mkr_inf_1, - ppmv.mkr_inf_2, - CASE - WHEN - s.v_inst_cd LIKE '00%' - THEN - ci.prefc_cd - ELSE - fmvt.prft_cd - END AS prft_cd, - s.whspos_err_kbn, - s.htdnymd_err_kbn, - s.prd_exis_kbn, - s.fcl_exis_kbn, - s.bef_hsdn_ymd, - s.bef_slip_num, - s.slip_org_kbn, - s.kjyo_ym, - s.tksnbk_kbn, - s.fcl_exec_kbn, - s.rec_sts_kbn, - s.ins_dt, - s.ins_usr, - SYSDATE() - FROM ( + SET @insert_sales_laundering = " + INSERT INTO + $$target_table$$ ( + rec_whs_cd, + rec_whs_sub_cd, + rec_whs_org_cd, + rec_cust_cd, + rec_comm_cd, + rec_tran_kbn, + rev_hsdnymd_wrk, + rev_hsdnymd_srk, + rec_urag_num, + rec_qty, + rec_nonyu_price, + rec_nonyu_amt, + rec_comm_name, + rec_nonyu_fcl_name, + free_item, + rec_nonyu_fcl_addr, + rec_nonyu_fcl_post, + rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd, + rec_bef_slip_num, + rec_ymd, + sale_data_cat, + slip_file_name, + slip_mgt_num, + row_num, + hsdn_ymd, + exec_dt, + v_tran_cd, + tran_kbn_name, + whs_org_cd, + v_whsorg_cd, + whs_org_name, + whs_org_kn, + v_whs_cd, + whs_name, + nonyu_fcl_cd, + inst_name, + inst_name_kana, + address, + comm_cd, + comm_name, + nonyu_qty, + nonyu_price, + nonyu_amt, + shikiri_price, + shikiri_amt, + nhi_price, + nhi_amt, + v_inst_cd, + inst_clas_cd, + bu_cd, + item_cd, + item_name, + item_english_name, + pref_cd, + whspos_err_kbn, + htdnymd_err_kbn, + prd_exis_kbn, + fcl_exis_kbn, + bef_hsdn_ymd, + bef_slip_num, + slip_org_kbn, + kjyo_ym, + tksnbk_kbn, + fcl_exec_kbn, + rec_sts_kbn, + ins_dt, + ins_usr, + dwh_upd_dt + ) SELECT - CAST(SYSDATE() AS DATE) AS today - ) AS sub - INNER JOIN src05.sales AS s - ON sub.today = CAST(s.dwh_upd_dt AS DATE) - LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv - ON s.comm_cd = ppmv.prd_cd - AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date - AND ppmv.rec_sts_kbn != '9' - LEFT OUTER JOIN src05.fcl_mst_v_t AS fmvt - ON s.v_inst_cd = fmvt.v_inst_cd - LEFT OUTER JOIN src05.bu_prd_name_contrast_t AS bpnct - ON s.comm_cd = bpnct.prd_cd - AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date - AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date - LEFT OUTER JOIN src05.com_inst AS ci - ON s.v_inst_cd = ci.dcf_dsf_inst_cd - WHERE - (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') - OR ( - s.rec_sts_kbn = '0' - AND s.err_flg20 != 'M' - AND s.v_tran_cd IN (110, 120, 210, 220) - AND ( - ( - s.fcl_exec_kbn NOT IN ('2', '5') - AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) - ) - OR s.fcl_exec_kbn IS NULL - ) - ) - - ON DUPLICATE KEY UPDATE - rec_whs_cd = s.rec_whs_cd, - rec_whs_sub_cd = s.rec_whs_sub_cd, - rec_whs_org_cd = s.rec_whs_org_cd, - rec_cust_cd = s.rec_cust_cd, - rec_comm_cd = s.rec_comm_cd, - rec_tran_kbn = s.rec_tran_kbn, - rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, - rev_hsdnymd_srk = s.rev_hsdnymd_srk, - rec_urag_num = s.rec_urag_num, - rec_qty = s.rec_qty, - rec_nonyu_price = s.rec_nonyu_price, - rec_nonyu_amt = s.rec_nonyu_amt, - rec_comm_name = s.rec_comm_name, - rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, - free_item = s.free_item, - rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, - rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, - rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, - rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, - rec_bef_slip_num = s.rec_bef_slip_num, - rec_ymd = s.rec_ymd, - sale_data_cat = s.sale_data_cat, - slip_file_name = s.slip_file_name, - row_num = s.row_num, - hsdn_ymd = s.hsdn_ymd, - exec_dt = s.exec_dt, - v_tran_cd = s.v_tran_cd, - tran_kbn_name = s.tran_kbn_name, - whs_org_cd = s.whs_org_cd, - v_whsorg_cd = s.v_whsorg_cd, - whs_org_name = s.whs_org_name, - whs_org_kn = s.whs_org_kn, - v_whs_cd = s.v_whs_cd, - whs_name = s.whs_name, - nonyu_fcl_cd = s.nonyu_fcl_cd, - inst_name = s.v_inst_name, - inst_name_kana = s.v_inst_kn, - address = s.v_inst_addr, - comm_cd = s.comm_cd, - comm_name = s.comm_name, - nonyu_qty = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_qty * -1) - ELSE - s.nonyu_qty - END - ), - nonyu_price = s.nonyu_price, - nonyu_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_amt * -1) - ELSE - s.nonyu_amt - END - ), - shikiri_price = s.shikiri_price, - shikiri_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.shikiri_amt * -1) - ELSE - s.shikiri_amt - END - ), - nhi_price = s.nhi_price, - nhi_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nhi_amt * -1) - ELSE - s.nhi_amt - END - ), - v_inst_cd = s.v_inst_cd, - inst_clas_cd = ( - CASE - WHEN - (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') - THEN - '3' - WHEN - fmvt.fcl_type BETWEEN '20' AND '29' - THEN - '2' - ELSE - '1' - END - ), - bu_cd = bpnct.bu_cd, - item_cd = ppmv.mkr_cd, - item_name = ppmv.mkr_inf_1, - item_english_name = ppmv.mkr_inf_2, - pref_cd = ( + s.rec_whs_cd, + s.rec_whs_sub_cd, + s.rec_whs_org_cd, + s.rec_cust_cd, + s.rec_comm_cd, + s.rec_tran_kbn, + s.rev_hsdnymd_wrk, + s.rev_hsdnymd_srk, + s.rec_urag_num, + s.rec_qty, + s.rec_nonyu_price, + s.rec_nonyu_amt, + s.rec_comm_name, + s.rec_nonyu_fcl_name, + s.free_item, + s.rec_nonyu_fcl_addr, + s.rec_nonyu_fcl_post, + s.rec_nonyu_fcl_tel, + s.rec_bef_hsdn_ymd, + s.rec_bef_slip_num, + s.rec_ymd, + s.sale_data_cat, + s.slip_file_name, + s.slip_mgt_num, + s.row_num, + s.hsdn_ymd, + s.exec_dt, + s.v_tran_cd, + s.tran_kbn_name, + s.whs_org_cd, + s.v_whsorg_cd, + s.whs_org_name, + s.whs_org_kn, + s.v_whs_cd, + s.whs_name, + s.nonyu_fcl_cd, + s.v_inst_name, + s.v_inst_kn, + s.v_inst_addr, + s.comm_cd, + s.comm_name, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END AS nonyu_qty, + s.nonyu_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END AS nonyu_amt, + s.shikiri_price, + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END AS shikiri_amt, + s.nhi_price, + CASE + WHEN + (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END AS nhi_amt, + s.v_inst_cd, + CASE + WHEN + (fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' THEN '2' + ELSE + '1' + END AS inst_clas_cd, + bpnct.bu_cd, + ppmv.mkr_cd, + ppmv.mkr_inf_1, + ppmv.mkr_inf_2, CASE WHEN s.v_inst_cd LIKE '00%' @@ -464,105 +307,224 @@ BEGIN ci.prefc_cd ELSE fmvt.prft_cd - END - ), - whspos_err_kbn = s.whspos_err_kbn, - htdnymd_err_kbn = s.htdnymd_err_kbn, - prd_exis_kbn = s.prd_exis_kbn, - fcl_exis_kbn = s.fcl_exis_kbn, - bef_hsdn_ymd = s.bef_hsdn_ymd, - bef_slip_num = s.bef_slip_num, - slip_org_kbn = s.slip_org_kbn, - kjyo_ym = s.kjyo_ym, - tksnbk_kbn = s.tksnbk_kbn, - fcl_exec_kbn = s.fcl_exec_kbn, - rec_sts_kbn = s.rec_sts_kbn, - ins_dt = s.ins_dt, - ins_usr = s.ins_usr, - dwh_upd_dt = SYSDATE() - ; - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑤ 終了' - ); - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑥ 開始' - ); - - UPDATE ( + END AS prft_cd, + s.whspos_err_kbn, + s.htdnymd_err_kbn, + s.prd_exis_kbn, + s.fcl_exis_kbn, + s.bef_hsdn_ymd, + s.bef_slip_num, + s.slip_org_kbn, + s.kjyo_ym, + s.tksnbk_kbn, + s.fcl_exec_kbn, + s.rec_sts_kbn, + s.ins_dt, + s.ins_usr, + SYSDATE() + FROM ( SELECT - fmvt.v_inst_cd AS v_inst_cd, - fmvt.fcl_type AS fcl_type, - fmvt.prft_cd AS prft_cd, - ci.prefc_cd AS prefc_cd - FROM - (SELECT CAST(SYSDATE() AS DATE) AS today) AS sub - INNER JOIN src05.fcl_mst_v_t AS fmvt - ON sub.today = CAST(fmvt.dwh_upd_dt AS DATE) - LEFT OUTER JOIN src05.com_inst AS ci - ON fmvt.v_inst_cd = ci.dcf_dsf_inst_cd - ) AS t3t5, - src05.sales_lau AS sl - SET - sl.inst_clas_cd = ( - CASE - WHEN - (t3t5.fcl_type = 'A1' OR t3t5.fcl_type = 'A0') - THEN - '3' - WHEN - t3t5.fcl_type BETWEEN '20' AND '29' - THEN - '2' - ELSE - '1' - END - ), - sl.pref_cd = ( - CASE - WHEN - sl.v_inst_cd LIKE '00%' - THEN - t3t5.prefc_cd - ELSE - t3t5.prft_cd - END - ) - WHERE sl.v_inst_cd = t3t5.v_inst_cd - ; + CAST(SYSDATE() AS DATE) AS today + ) AS sub + INNER JOIN src05.sales AS s + ON sub.today = CAST(s.dwh_upd_dt AS DATE) + LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv + ON s.comm_cd = ppmv.prd_cd + AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date + AND ppmv.rec_sts_kbn != '9' + LEFT OUTER JOIN internal05.fcl_mst_v_t AS fmvt + ON s.v_inst_cd = fmvt.v_inst_cd + LEFT OUTER JOIN internal05.bu_prd_name_contrast_t AS bpnct + ON s.comm_cd = bpnct.prd_cd + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date + AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date + LEFT OUTER JOIN src05.com_inst AS ci + ON s.v_inst_cd = ci.dcf_dsf_inst_cd + WHERE + (? <= s.dwh_upd_dt AND s.dwh_upd_dt <= ?) + AND ( + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + OR ( + s.rec_sts_kbn = '0' + AND s.err_flg20 != 'M' + AND s.v_tran_cd IN (110, 120, 210, 220) + AND ( + ( + s.fcl_exec_kbn NOT IN ('2', '5') + AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) + ) + OR s.fcl_exec_kbn IS NULL + ) + ) + ) + + ON DUPLICATE KEY UPDATE + rec_whs_cd = s.rec_whs_cd, + rec_whs_sub_cd = s.rec_whs_sub_cd, + rec_whs_org_cd = s.rec_whs_org_cd, + rec_cust_cd = s.rec_cust_cd, + rec_comm_cd = s.rec_comm_cd, + rec_tran_kbn = s.rec_tran_kbn, + rev_hsdnymd_wrk = s.rev_hsdnymd_wrk, + rev_hsdnymd_srk = s.rev_hsdnymd_srk, + rec_urag_num = s.rec_urag_num, + rec_qty = s.rec_qty, + rec_nonyu_price = s.rec_nonyu_price, + rec_nonyu_amt = s.rec_nonyu_amt, + rec_comm_name = s.rec_comm_name, + rec_nonyu_fcl_name = s.rec_nonyu_fcl_name, + free_item = s.free_item, + rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr, + rec_nonyu_fcl_post = s.rec_nonyu_fcl_post, + rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel, + rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd, + rec_bef_slip_num = s.rec_bef_slip_num, + rec_ymd = s.rec_ymd, + sale_data_cat = s.sale_data_cat, + slip_file_name = s.slip_file_name, + row_num = s.row_num, + hsdn_ymd = s.hsdn_ymd, + exec_dt = s.exec_dt, + v_tran_cd = s.v_tran_cd, + tran_kbn_name = s.tran_kbn_name, + whs_org_cd = s.whs_org_cd, + v_whsorg_cd = s.v_whsorg_cd, + whs_org_name = s.whs_org_name, + whs_org_kn = s.whs_org_kn, + v_whs_cd = s.v_whs_cd, + whs_name = s.whs_name, + nonyu_fcl_cd = s.nonyu_fcl_cd, + inst_name = s.v_inst_name, + inst_name_kana = s.v_inst_kn, + address = s.v_inst_addr, + comm_cd = s.comm_cd, + comm_name = s.comm_name, + nonyu_qty = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_qty * -1) + ELSE + s.nonyu_qty + END + ), + nonyu_price = s.nonyu_price, + nonyu_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nonyu_amt * -1) + ELSE + s.nonyu_amt + END + ), + shikiri_price = s.shikiri_price, + shikiri_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.shikiri_amt * -1) + ELSE + s.shikiri_amt + END + ), + nhi_price = s.nhi_price, + nhi_amt = ( + CASE + WHEN + (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) + THEN + (s.nhi_amt * -1) + ELSE + s.nhi_amt + END + ), + v_inst_cd = s.v_inst_cd, + inst_clas_cd = ( + CASE + WHEN + (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') + THEN + '3' + WHEN + fmvt.fcl_type BETWEEN '20' AND '29' + THEN + '2' + ELSE + '1' + END + ), + bu_cd = bpnct.bu_cd, + item_cd = ppmv.mkr_cd, + item_name = ppmv.mkr_inf_1, + item_english_name = ppmv.mkr_inf_2, + pref_cd = ( + CASE + WHEN + s.v_inst_cd LIKE '00%' + THEN + ci.prefc_cd + ELSE + fmvt.prft_cd + END + ), + whspos_err_kbn = s.whspos_err_kbn, + htdnymd_err_kbn = s.htdnymd_err_kbn, + prd_exis_kbn = s.prd_exis_kbn, + fcl_exis_kbn = s.fcl_exis_kbn, + bef_hsdn_ymd = s.bef_hsdn_ymd, + bef_slip_num = s.bef_slip_num, + slip_org_kbn = s.slip_org_kbn, + kjyo_ym = s.kjyo_ym, + tksnbk_kbn = s.tksnbk_kbn, + fcl_exec_kbn = s.fcl_exec_kbn, + rec_sts_kbn = s.rec_sts_kbn, + ins_dt = s.ins_dt, + ins_usr = s.ins_usr, + dwh_upd_dt = SYSDATE() + "; + SET @insert_sales_laundering = REPLACE(@insert_sales_laundering, "$$target_table$$", target_table); + PREPARE insert_sales_laundering_stmt from @insert_sales_laundering; + EXECUTE insert_sales_laundering_stmt USING @extract_from_date, @extract_to_date; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑥ 終了' + '卸販売実績テーブル(洗替後)作成⑤ 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑦ 開始' + '卸販売実績テーブル(洗替後)作成⑥ 開始' ); - UPDATE - ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, - src05.sales_lau AS sl, - src05.sales AS s - SET - sl.inst_cd = ( - CASE - WHEN - (s.err_flg20 != 'M' AND sl.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') - THEN - s.v_inst_cd - ELSE - NULL - END - ) - WHERE - sub.today = CAST(s.dwh_upd_dt AS DATE) - AND sl.slip_mgt_num = s.slip_mgt_num - AND sl.row_num = s.row_num - ; + SET @update_institution_code = " + UPDATE + ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, + $$target_table$$ AS tt, + src05.sales AS s + SET + tt.inst_cd = ( + CASE + WHEN + (s.err_flg20 != 'M' AND tt.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M') + THEN + s.v_inst_cd + ELSE + NULL + END + ) + WHERE + sub.today = CAST(s.dwh_upd_dt AS DATE) + AND tt.slip_mgt_num = s.slip_mgt_num + AND tt.row_num = s.row_num + "; + SET @update_institution_code = REPLACE(@update_institution_code, "$$target_table$$", target_table); + PREPARE update_institution_code_stmt from @update_institution_code; + EXECUTE update_institution_code_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '卸販売実績テーブル(洗替後)作成⑦ 終了' + '卸販売実績テーブル(洗替後)作成⑥ 終了' ); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 4ef2075e..35c4a700 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.v_inst_merge_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.v_inst_merge_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -23,46 +23,50 @@ BEGIN SET @error_state = NULL, @error_msg = NULL; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】3:HCO施設コードの洗替① 開始' + '【洗替】3:HCO施設コードの洗替① 開始' ); - UPDATE ( - SELECT - v_inst_cd, - v_inst_cd_merge, - fcl_name, - fcl_kn_name, - fmt_addr, - prft_cd - FROM - internal05.v_inst_merge_t - WHERE - (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' - ) AS vimt, - src05.@target_table AS tt - SET - tt.inst_cd = ( - CASE - WHEN - tt.inst_clas_cd = '1' - THEN - tt.inst_cd - WHEN - (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') - THEN - vimt.v_inst_cd_merge - END - ) - tt.v_inst_cd = vimt.v_inst_cd_merge, - tt.inst_name = vimt.fcl_name, - tt.inst_name_kana = vimt.fcl_kn_name, - tt.address = vimt.fmt_addr, - tt.prefc_cd = vimt.prft_cd, - tt.dwh_upd_dt = SYSDATE() - WHERE - tt.v_inst_cd = vimt.v_inst_cd - AND (tt.inst_clas_cd IN ('1', '2', '3')) - ; + SET @update_institution = " + UPDATE ( + SELECT + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd + FROM + internal05.v_inst_merge_t + WHERE + (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' + ) AS vimt, + $$target_table$$ AS tt + SET + tt.inst_cd = ( + CASE + WHEN + tt.inst_clas_cd = '1' + THEN + tt.inst_cd + WHEN + (tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3') + THEN + vimt.v_inst_cd_merge + END + ), + tt.v_inst_cd = vimt.v_inst_cd_merge, + tt.inst_name = vimt.fcl_name, + tt.inst_name_kana = vimt.fcl_kn_name, + tt.address = vimt.fmt_addr, + tt.pref_cd = vimt.prft_cd, + tt.dwh_upd_dt = SYSDATE() + WHERE + tt.v_inst_cd = vimt.v_inst_cd + AND (tt.inst_clas_cd IN ('1', '2', '3')) + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index e3ce53c7..4b5835ee 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -1,5 +1,5 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.whs_org_laundering(@target_table VARCHAR(64)) +CREATE PROCEDURE src05.whs_org_laundering(target_table VARCHAR(255)) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -7,10 +7,10 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; @@ -29,11 +29,11 @@ BEGIN TRUNCATE TABLE internal05.whs_customer_org_t; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替① 終了' + '【洗替】1.卸組織洗替① 終了' ); call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替② 開始' + '【洗替】1.卸組織洗替② 開始' ); INSERT INTO @@ -43,7 +43,7 @@ BEGIN customer_cd, whs_org_cd, v_org_cd, - nm_2 + name_2 ) SELECT wcmv.whs_cd, @@ -89,30 +89,35 @@ BEGIN ON ocmv.v_org_cd = mohv2.v_cd_2 WHERE wcmv.rec_sts_kbn != '9' - AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date; - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替② 終了' - ); - - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替③ 開始' - ); - - UPDATE - src05.sales_lau AS sl, src05.@target_table AS tt - SET - sl.whs_org_cd = tt.whs_org_cd, - sl.v_whsorg_cd = tt.v_org_cd, - sl.whs_org_name = tt.nm_2 - WHERE - st.whs_cd = tt.whs_cd - AND st.whs_sub_cd = tt.whs_sub_cd - AND st.customer_cd = tt.customer_cd + AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date ; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - '【洗替】1.卸組織洗替③ 終了' + '【洗替】1.卸組織洗替② 終了' + ); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 開始' + ); + + SET @update_organization = " + UPDATE + $$target_table$$ AS tt, internal05.whs_customer_org_t AS wcot + SET + tt.whs_org_cd = wcot.whs_org_cd, + tt.v_whsorg_cd = wcot.v_org_cd, + tt.whs_org_name = wcot.name_2 + WHERE + wcot.whs_cd = tt.rec_whs_cd + AND wcot.whs_sub_cd = tt.rec_whs_sub_cd + AND wcot.customer_cd = tt.rec_cust_cd + "; + SET @update_organization = REPLACE(@update_organization, "$$target_table$$", target_table); + PREPARE update_organization_stmt from @update_organization; + EXECUTE update_organization_stmt; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】1.卸組織洗替③ 終了' ); END \ No newline at end of file From 0421aa8ccd44f1bb4463c7c08a2ae07cb181da24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 14 Jun 2023 11:56:44 +0900 Subject: [PATCH 13/36] =?UTF-8?q?feat:=20=E4=BB=95=E6=A7=98=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 170 ++++++++++++------ 1 file changed, 113 insertions(+), 57 deletions(-) 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 index e325d7a4..2e4f9ca7 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 @@ -55,76 +55,128 @@ def _set_disabled_dct_inst_merge(db: Database): _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') +def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 納入先処方元マスタから、DCF施設コードに対応した領域コードの取得 + try: + sql = """ + SELECT + ta_cd + FROM + src05.ult_ident_presc + WHERE + presc_cd = :dcf_inst_cd + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd} + ult_ident_presc_ta_cd_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('納入先処方元マスタから領域コードの取得に成功') + except Exception as e: + logger.debug('納入先処方元マスタから領域コードの取得に失敗') + raise e + + return ult_ident_presc_ta_cd_records + + def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict]): # 納入先処方元マスタの追加 logger.info('納入先処方元マスタの登録 開始') 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_ta_cd_records = _select_ult_ident_presc_ta_cd(db, enabled_merge_record['dcf_inst_cd']) + for ult_ident_presc_ta_cd_record in ult_ident_presc_ta_cd_records: + ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + enabled_merge_record['dup_opp_cd'], + ult_ident_presc_ta_cd_record['ta_cd']) + for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): + logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') + # 処方元コード=重複時相手先コードが発生した場合 + if ult_ident_presc_row['opp_count'] > 0: + continue - 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}レコード目処理 開始') - # 処方元コード=重複時相手先コードが発生した場合 - if ult_ident_presc_row['opp_count'] > 0: - break + start_date = _str_to_date_time(ult_ident_presc_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day + set_start_date = _date_time_to_str(set_start_date) + is_exists_duplicate_key = False + if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: + _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, + '納入先処方元マスタの重複予定データの削除') + is_exists_duplicate_key = True + else: + logger.info('納入先処方元マスタの重複予定データなし') + _insert_ult_ident_presc(db, set_start_date, enabled_merge_record['dup_opp_cd'], ult_ident_presc_row) - start_date = _str_to_date_time(ult_ident_presc_row['start_date']) - set_start_date = start_date \ - if start_date > tekiyo_month_first_day else tekiyo_month_first_day - set_start_date = _date_time_to_str(set_start_date) - is_exists_duplicate_key = False - if _count_duplicate_ult_ident_presc(db, set_start_date, ult_ident_presc_row) > 0: - _delete_ult_ident_presc(db, set_start_date, ult_ident_presc_row, - '納入先処方元マスタの重複予定データの削除') - is_exists_duplicate_key = True - else: - logger.info('納入先処方元マスタの重複予定データなし') - _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: - last_end_date = tekiyo_month_first_day - timedelta(days=1) - # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 - _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), 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: + last_end_date = tekiyo_month_first_day - timedelta(days=1) + # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 + _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) logger.info('納入先処方元マスタの登録 終了') +def _select_emp_chg_inst_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 従業員担当施設マスタから、DCF施設コードに対応した領域コードの取得 + try: + sql = """ + SELECT + ta_cd + FROM + src05.emp_chg_inst + WHERE + inst_cd = :dcf_inst_cd + AND enabled_flg = 'Y' + AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < end_date + """ + params = {'dcf_inst_cd': dcf_inst_cd} + emp_chg_inst_ta_cd_records = db.execute_select(sql, params) + logging_sql(logger, sql) + logger.info('従業員担当施設マスタから領域コードの取得に成功') + except Exception as e: + logger.debug('従業員担当施設マスタから領域コードの取得に失敗') + raise e + + return emp_chg_inst_ta_cd_records + + def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]): # 従業員担当施設マスタの登録 logger.info('従業員担当施設マスタの登録 開始') 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: - break + emp_chg_inst_ta_cd_records = _select_emp_chg_inst_ta_cd(db, enabled_merge_record['dcf_inst_cd']) + for emp_chg_inst_ta_cd_record in emp_chg_inst_ta_cd_records: + emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd'], + emp_chg_inst_ta_cd_record['ta_cd']) + for emp_chg_inst_row in emp_chg_inst_records: + # 重複時相手先コードが存在したかのチェック + if emp_chg_inst_row['opp_count'] > 0: + continue - start_date = _str_to_date_time(emp_chg_inst_row['start_date']) - set_start_date = start_date \ - if start_date > tekiyo_month_first_day else tekiyo_month_first_day + start_date = _str_to_date_time(emp_chg_inst_row['start_date']) + set_start_date = start_date \ + if start_date > tekiyo_month_first_day else tekiyo_month_first_day - _insert_emp_chg_inst(db, enabled_merge_record['dup_opp_cd'], _date_time_to_str(set_start_date), - emp_chg_inst_row) + _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, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), - emp_chg_inst_row) - 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']) + # 適用開始日 < 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, enabled_merge_record['dcf_inst_cd'], _date_time_to_str(last_end_date), + emp_chg_inst_row) + 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('従業員担当施設マスタの登録 終了') @@ -468,7 +520,7 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str, raise e -def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: +def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: # emp_chg_instからSELECT try: sql = """ @@ -487,16 +539,18 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis FROM src05.emp_chg_inst AS eciopp WHERE - eciopp.inst_cd = :dup_opp_cd + eciopp.inst_cd = :dup_opp_cd + AND eciopp.ta_cd = :ta_cd ) AS opp_count FROM src05.emp_chg_inst AS eci WHERE eci.inst_cd = :dcf_inst_cd + AND eci.ta_cd = :ta_cd AND eci.enabled_flg = 'Y' AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < eci.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} emp_chg_inst_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('従業員担当施設マスタの取得 成功') @@ -506,7 +560,7 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> lis return emp_chg_inst_records -def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> list[dict]: +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: # ult_ident_prescからSELECT try: sql = """ @@ -522,15 +576,17 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str) -> FROM src05.ult_ident_presc AS uipopp WHERE - uipopp.presc_cd = :dup_opp_cd + uipopp.presc_cd = :dup_opp_cd + AND uipopp.ta_cd = :ta_cd ) AS opp_count FROM src05.ult_ident_presc AS uip WHERE uip.presc_cd = :dcf_inst_cd + AND uip.ta_cd = :ta_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd} + params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('納入先処方元マスタの取得 成功') From a808e03ea816766fec9008266b1ab47dc079c97d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 15 Jun 2023 15:55:16 +0900 Subject: [PATCH 14/36] =?UTF-8?q?feat:=20=E3=83=87=E3=83=83=E3=83=88?= =?UTF-8?q?=E3=83=AD=E3=82=B8=E3=83=83=E3=82=AF=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/dcf_inst_merge/integrate_dcf_inst_merge.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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 index 2e4f9ca7..ab4d107a 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 @@ -107,14 +107,8 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict logger.info('納入先処方元マスタの重複予定データなし') _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: + if not is_exists_duplicate_key and _str_to_date_time(ult_ident_presc_row['end_date']) >= start_date: last_end_date = tekiyo_month_first_day - timedelta(days=1) # 適用終了日を、DCF施設統合マスタの適用月度の前月末日で更新 _update_ult_ident_presc_end_date(db, _date_time_to_str(last_end_date), ult_ident_presc_row) From 4bde68a27c631c4e7c16e1fd4bdc98193c000504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 21 Jun 2023 18:11:32 +0900 Subject: [PATCH 15/36] =?UTF-8?q?feat:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=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 --- .../laundering/sales_results_laundering.py | 37 ++--- .../src05/sales_lau_upsert.sql | 131 +++++------------- .../src05/whs_org_laundering.sql | 1 - 3 files changed, 56 insertions(+), 113 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 4fe4126a..04d0dcaa 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -4,7 +4,7 @@ from src.logging.get_logger import get_logger from src.batch.batch_functions import logging_sql from src.system_var import environment -logger = get_logger('卸実績洗替') +logger = get_logger('卸卸販売洗替') def exec(): @@ -48,7 +48,7 @@ def _call_sales_lau_upsert(db: Database): db.execute(f""" CALL src05.sales_lau_upsert( '{environment.SALES_LAUNDERING_TARGET_TABLE_NAME}', - (src05.get_syor_date() - {environment.SALES_LAUNDERING_EXTRACT_DATE_PERIOD}), + (src05.get_syor_date() - interval {environment.SALES_LAUNDERING_EXTRACT_DATE_PERIOD} day), src05.get_syor_date() ) """) @@ -70,27 +70,28 @@ def _call_whs_org_laundering(db: Database): def _update_sales_lau_from_vop_hco_merge_v(db: Database): # HCO施設コードの洗替 - if _count_vop_hco_merge_v(db) >= 1: - _call_v_inst_merge_laundering(db) + if _count_v_inst_merge_t(db) == 0: + logger.info('V施設統合マスタ(洗替処理一時テーブル)にデータは存在しません') return - logger.info('V施設統合マスタにデータは存在しません') + + _call_v_inst_merge_laundering(db) return -def _count_vop_hco_merge_v(db: Database) -> int: - # V施設統合マスタのデータ件数の取得 +def _count_v_inst_merge_t(db: Database) -> int: + # V施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 try: sql = """ SELECT COUNT(v_inst_cd) AS cnt FROM - src05.vop_hco_merge_v + internal05.v_inst_merge_t """ result = db.execute_select(sql) logging_sql(logger, sql) - logger.info('V施設統合マスタのデータ件数の取得 成功') + logger.info('V施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 成功') except Exception as e: - logger.debug('V施設統合マスタのデータ件数の取得 失敗') + logger.debug('V施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 失敗') raise e return result[0]['cnt'] @@ -128,27 +129,27 @@ def _call_hco_to_mdb_laundering(db: Database): def _update_sales_lau_from_dcf_inst_merge(db: Database): # B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする - if _count_dcf_inst_merge(db) >= 1: - _call_inst_merge_laundering(db) + if _count_inst_merge_t(db) == 0: + logger.info('アルトマーク施設統合マスタ(洗替処理一時テーブル)にデータは存在しません') return - logger.info('DCF施設統合マスタにデータは存在しません') + _call_inst_merge_laundering(db) return -def _count_dcf_inst_merge(db: Database) -> int: - # DCF施設統合マスタのデータ件数の取得 +def _count_inst_merge_t(db: Database) -> int: + # アルトマーク施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 try: sql = """ SELECT COUNT(dcf_inst_cd) AS cnt FROM - src05.dcf_inst_merge + internal05.inst_merge_t """ result = db.execute_select(sql) logging_sql(logger, sql) - logger.info('DCF施設統合マスタのデータ件数の取得 成功') + logger.info('アルトマーク施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 成功') except Exception as e: - logger.debug('DCF施設統合マスタのデータ件数の取得 失敗') + logger.debug('アルトマーク施設統合マスタ(洗替処理一時テーブル)のデータ件数の取得 失敗') raise e return result[0]['cnt'] diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index ecb2b671..182c3b3a 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -137,7 +137,10 @@ BEGIN '卸販売実績テーブル(洗替後)作成⑤ 開始' ); - SET @insert_sales_laundering = " + SET @extract_from_datetime = CAST(extract_from_date AS DATETIME); + SET @extract_to_datetime = CAST(extract_to_date AS DATETIME); + + SET @upsert_sales_launderning = " INSERT INTO $$target_table$$ ( rec_whs_cd, @@ -256,7 +259,7 @@ BEGIN WHEN (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) THEN - (s.nonyu_qty * -1) + -s.nonyu_qty ELSE s.nonyu_qty END AS nonyu_qty, @@ -265,7 +268,7 @@ BEGIN WHEN (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) THEN - (s.nonyu_amt * -1) + -s.nonyu_amt ELSE s.nonyu_amt END AS nonyu_amt, @@ -274,7 +277,7 @@ BEGIN WHEN (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) THEN - (s.shikiri_amt * -1) + -s.shikiri_amt ELSE s.shikiri_amt END AS shikiri_amt, @@ -283,7 +286,7 @@ BEGIN WHEN (LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) THEN - (s.nhi_amt * -1) + -s.nhi_amt ELSE s.nhi_amt END AS nhi_amt, @@ -307,7 +310,7 @@ BEGIN ci.prefc_cd ELSE fmvt.prft_cd - END AS prft_cd, + END AS pref_cd, s.whspos_err_kbn, s.htdnymd_err_kbn, s.prd_exis_kbn, @@ -324,10 +327,11 @@ BEGIN SYSDATE() FROM ( SELECT - CAST(SYSDATE() AS DATE) AS today + ? AS extract_from_datetime, + ? AS extract_to_datetime ) AS sub INNER JOIN src05.sales AS s - ON sub.today = CAST(s.dwh_upd_dt AS DATE) + ON s.dwh_upd_dt BETWEEN sub.extract_from_datetime AND sub.extract_to_datetime LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv ON s.comm_cd = ppmv.prd_cd AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date @@ -341,21 +345,15 @@ BEGIN LEFT OUTER JOIN src05.com_inst AS ci ON s.v_inst_cd = ci.dcf_dsf_inst_cd WHERE - (? <= s.dwh_upd_dt AND s.dwh_upd_dt <= ?) - AND ( - (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') - OR ( - s.rec_sts_kbn = '0' - AND s.err_flg20 != 'M' - AND s.v_tran_cd IN (110, 120, 210, 220) - AND ( - ( - s.fcl_exec_kbn NOT IN ('2', '5') - AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1) - ) - OR s.fcl_exec_kbn IS NULL - ) - ) + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + OR ( + s.rec_sts_kbn = '0' + AND s.err_flg20 != 'M' + AND s.v_tran_cd IN (110, 120, 210, 220) + AND ( + (s.fcl_exec_kbn NOT IN ('2', '5') AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn != 1)) + OR s.fcl_exec_kbn IS NULL + ) ) ON DUPLICATE KEY UPDATE @@ -399,78 +397,20 @@ BEGIN address = s.v_inst_addr, comm_cd = s.comm_cd, comm_name = s.comm_name, - nonyu_qty = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_qty * -1) - ELSE - s.nonyu_qty - END - ), + nonyu_qty = VALUES(nonyu_qty), nonyu_price = s.nonyu_price, - nonyu_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nonyu_amt * -1) - ELSE - s.nonyu_amt - END - ), + nonyu_amt = VALUES(nonyu_amt), shikiri_price = s.shikiri_price, - shikiri_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.shikiri_amt * -1) - ELSE - s.shikiri_amt - END - ), + shikiri_amt = VALUES(shikiri_amt), nhi_price = s.nhi_price, - nhi_amt = ( - CASE - WHEN - (LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M')) - THEN - (s.nhi_amt * -1) - ELSE - s.nhi_amt - END - ), + nhi_amt = VALUES(nhi_amt), v_inst_cd = s.v_inst_cd, - inst_clas_cd = ( - CASE - WHEN - (fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0') - THEN - '3' - WHEN - fmvt.fcl_type BETWEEN '20' AND '29' - THEN - '2' - ELSE - '1' - END - ), + inst_clas_cd = VALUES(inst_clas_cd), bu_cd = bpnct.bu_cd, item_cd = ppmv.mkr_cd, item_name = ppmv.mkr_inf_1, item_english_name = ppmv.mkr_inf_2, - pref_cd = ( - CASE - WHEN - s.v_inst_cd LIKE '00%' - THEN - ci.prefc_cd - ELSE - fmvt.prft_cd - END - ), + pref_cd = VALUES(pref_cd), whspos_err_kbn = s.whspos_err_kbn, htdnymd_err_kbn = s.htdnymd_err_kbn, prd_exis_kbn = s.prd_exis_kbn, @@ -486,9 +426,9 @@ BEGIN ins_usr = s.ins_usr, dwh_upd_dt = SYSDATE() "; - SET @insert_sales_laundering = REPLACE(@insert_sales_laundering, "$$target_table$$", target_table); - PREPARE insert_sales_laundering_stmt from @insert_sales_laundering; - EXECUTE insert_sales_laundering_stmt USING @extract_from_date, @extract_to_date; + SET @upsert_sales_launderning = REPLACE(@upsert_sales_launderning, "$$target_table$$", target_table); + PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; + EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 終了' @@ -499,8 +439,11 @@ BEGIN ); SET @update_institution_code = " - UPDATE - ( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub, + UPDATE ( + SELECT + ? AS extract_from_datetime, + ? AS extract_to_datetime + ) AS sub, $$target_table$$ AS tt, src05.sales AS s SET @@ -515,13 +458,13 @@ BEGIN END ) WHERE - sub.today = CAST(s.dwh_upd_dt AS DATE) + s.dwh_upd_dt BETWEEN sub.extract_from_datetime AND sub.extract_to_datetime AND tt.slip_mgt_num = s.slip_mgt_num AND tt.row_num = s.row_num "; SET @update_institution_code = REPLACE(@update_institution_code, "$$target_table$$", target_table); PREPARE update_institution_code_stmt from @update_institution_code; - EXECUTE update_institution_code_stmt; + EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 終了' diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index 4b5835ee..65dc9e30 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -67,7 +67,6 @@ BEGIN FROM src05.mkr_org_horizon_v AS mohv INNER JOIN ( SELECT - count(1) AS c, v_cd_2, MAX(dwh_upd_dt) AS dwh_upd_dt_latest FROM From 3b2362442d130853af51cbda8c1d5cf876262310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 22 Jun 2023 10:34:14 +0900 Subject: [PATCH 16/36] =?UTF-8?q?feat:=20=E5=8D=98=E4=BD=93=E8=A9=A6?= =?UTF-8?q?=E9=A8=93NG=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/laundering/sales_results_laundering.py | 2 +- rds_mysql/stored_procedure/src05/sales_lau_upsert.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 04d0dcaa..530fd9b9 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -141,7 +141,7 @@ def _count_inst_merge_t(db: Database) -> int: try: sql = """ SELECT - COUNT(dcf_inst_cd) AS cnt + COUNT(dcf_dsf_inst_cd) AS cnt FROM internal05.inst_merge_t """ diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 182c3b3a..63049f09 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -138,7 +138,7 @@ BEGIN ); SET @extract_from_datetime = CAST(extract_from_date AS DATETIME); - SET @extract_to_datetime = CAST(extract_to_date AS DATETIME); + SET @extract_to_datetime = ADDTIME(CAST(extract_to_date AS DATETIME), '23:59:59'); SET @upsert_sales_launderning = " INSERT INTO From 8534e6d66bcd53ced315251ceec3a198384ded4a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 26 Jun 2023 13:38:23 +0900 Subject: [PATCH 17/36] =?UTF-8?q?feat:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=83=99=E3=83=BC=E3=82=B9=E6=93=8D=E4=BD=9C=E9=83=A8=E5=93=81?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82=E3=83=91=E3=83=A9=E3=83=A1?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E6=8C=87=E5=AE=9A=E3=81=AB=E3=82=88=E3=82=8A?= =?UTF-8?q?=E3=80=81AUTOCOMMIT=E3=81=A7=E6=8E=A5=E7=B6=9A=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=8B=E3=81=A9=E3=81=86=E3=81=8B=E3=82=92=E5=88=86?= =?UTF-8?q?=E5=B2=90=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../laundering/sales_results_laundering.py | 4 +-- ecs/jskult-batch-daily/src/db/database.py | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 530fd9b9..87958e5c 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -1,14 +1,14 @@ +from src.batch.batch_functions import logging_sql from src.db.database import Database from src.error.exceptions import BatchOperationException from src.logging.get_logger import get_logger -from src.batch.batch_functions import logging_sql from src.system_var import environment logger = get_logger('卸卸販売洗替') def exec(): - db = Database.get_instance() + db = Database.get_instance(autocommit=True) try: db.connect() logger.debug('処理開始') diff --git a/ecs/jskult-batch-daily/src/db/database.py b/ecs/jskult-batch-daily/src/db/database.py index f67a21b9..b9a745be 100644 --- a/ecs/jskult-batch-daily/src/db/database.py +++ b/ecs/jskult-batch-daily/src/db/database.py @@ -13,15 +13,17 @@ logger = get_logger(__name__) class Database: """データベース操作クラス""" __connection: Connection = None - __engine: Engine = None + __transactional_engine: Engine = None + __autocommit_engine: Engine = None __host: str = None __port: str = None __username: str = None __password: str = None __schema: str = None + __autocommit: bool = None __connection_string: str = None - def __init__(self, username: str, password: str, host: str, port: int, schema: str) -> None: + def __init__(self, username: str, password: str, host: str, port: int, schema: str, autocommit: bool = False) -> None: """このクラスの新たなインスタンスを初期化します Args: @@ -30,12 +32,14 @@ class Database: host (str): DBホスト名 port (int): DBポート schema (str): DBスキーマ名 + autocommit(bool): 自動コミットモードで接続するかどうか(Trueの場合、トランザクションの有無に限らず即座にコミットされる). Defaults to False. """ self.__username = username self.__password = password self.__host = host self.__port = int(port) self.__schema = schema + self.__autocommit = autocommit self.__connection_string = URL.create( drivername='mysql+pymysql', @@ -47,16 +51,20 @@ class Database: query={"charset": "utf8mb4"} ) - self.__engine = create_engine( + self.__transactional_engine = create_engine( self.__connection_string, pool_timeout=5, poolclass=QueuePool ) + self.__autocommit_engine = self.__transactional_engine.execution_options(isolation_level='AUTOCOMMIT') + @classmethod - def get_instance(cls): + def get_instance(cls, autocommit=False): """インスタンスを取得します + Args: + autocommit (bool, optional): 自動コミットモードで接続するかどうか(Trueの場合、トランザクションの有無に限らず即座にコミットされる). Defaults to False. Returns: Database: DB操作クラスインスタンス """ @@ -65,7 +73,8 @@ class Database: password=environment.DB_PASSWORD, host=environment.DB_HOST, port=environment.DB_PORT, - schema=environment.DB_SCHEMA + schema=environment.DB_SCHEMA, + autocommit=autocommit ) @retry( @@ -77,12 +86,15 @@ class Database: stop=stop_after_attempt(environment.DB_CONNECTION_MAX_RETRY_ATTEMPT)) def connect(self): """ - DBに接続します。接続に失敗した場合、リトライします。 + DBに接続します。接続に失敗した場合、リトライします。\n + インスタンスのautocommitがTrueの場合、自動コミットモードで接続する。(明示的なトランザクションも無視される) Raises: DBException: 接続失敗 """ try: - self.__connection = self.__engine.connect() + self.__connection = ( + self.__autocommit_engine.connect() if self.__autocommit is True + else self.__transactional_engine.connect()) except Exception as e: raise DBException(e) From 00175d26f7213d912aadecd164898de913736633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Mon, 26 Jun 2023 14:20:17 +0900 Subject: [PATCH 18/36] =?UTF-8?q?feat:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=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/laundering/sales_results_laundering.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py index 530fd9b9..05086e4a 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -4,7 +4,7 @@ from src.logging.get_logger import get_logger from src.batch.batch_functions import logging_sql from src.system_var import environment -logger = get_logger('卸卸販売洗替') +logger = get_logger('卸販売洗替') def exec(): From 07d9f3785353ef33b1e118d9424878df59d45ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 27 Jun 2023 09:33:00 +0900 Subject: [PATCH 19/36] =?UTF-8?q?feat:=20=E4=B8=8D=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9=E7=AD=89=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stored_procedure/src05/sales_lau_upsert.sql | 16 ++++++++-------- .../src05/v_inst_merge_laundering.sql | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 63049f09..5f26b9c8 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -41,7 +41,7 @@ BEGIN internal05.bu_prd_name_contrast_t ( prd_cd, bu_cd, - phm_itm_cd, + phm_itm_cd, pp_start_date, pp_end_date, update_date, @@ -344,14 +344,14 @@ BEGIN AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date LEFT OUTER JOIN src05.com_inst AS ci ON s.v_inst_cd = ci.dcf_dsf_inst_cd - WHERE - (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') + WHERE + (s.rec_sts_kbn = '0' AND s.err_flg20 = 'M') OR ( s.rec_sts_kbn = '0' AND s.err_flg20 != 'M' AND s.v_tran_cd IN (110, 120, 210, 220) AND ( - (s.fcl_exec_kbn NOT IN ('2', '5') AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn != 1)) + (s.fcl_exec_kbn NOT IN ('2', '5') AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn != 1)) OR s.fcl_exec_kbn IS NULL ) ) @@ -427,8 +427,8 @@ BEGIN dwh_upd_dt = SYSDATE() "; SET @upsert_sales_launderning = REPLACE(@upsert_sales_launderning, "$$target_table$$", target_table); - PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; - EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; + PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; + EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 終了' @@ -463,8 +463,8 @@ BEGIN AND tt.row_num = s.row_num "; SET @update_institution_code = REPLACE(@update_institution_code, "$$target_table$$", target_table); - PREPARE update_institution_code_stmt from @update_institution_code; - EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; + PREPARE update_institution_code_stmt from @update_institution_code; + EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 終了' diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 35c4a700..7c1dee91 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -63,10 +63,10 @@ BEGIN WHERE tt.v_inst_cd = vimt.v_inst_cd AND (tt.inst_clas_cd IN ('1', '2', '3')) - "; - SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); - PREPARE update_institution_stmt from @update_institution; - EXECUTE update_institution_stmt; + "; + SET @update_institution = REPLACE(@update_institution, "$$target_table$$", target_table); + PREPARE update_institution_stmt from @update_institution; + EXECUTE update_institution_stmt; call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' From 6239ef783a21edde213c4c753f8f0fcd40c144b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Tue, 27 Jun 2023 14:02:47 +0900 Subject: [PATCH 20/36] =?UTF-8?q?feat:=20=E4=BE=8B=E5=A4=96=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AE=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=82=AA=E3=83=90=E3=83=BC=E3=83=95=E3=83=AD=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E5=87=A6=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src05/hco_to_mdb_laundering.sql | 20 ++++++++---- .../src05/inst_merge_laundering.sql | 12 +++++-- .../src05/sales_lau_delete.sql | 12 +++++-- .../src05/sales_lau_upsert.sql | 32 +++++++++++-------- .../src05/v_inst_merge_laundering.sql | 12 +++++-- .../src05/whs_org_laundering.sql | 20 ++++++++---- 6 files changed, 72 insertions(+), 36 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index b3cbfc6e..8201f3bc 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -14,23 +14,29 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A① 開始'); TRUNCATE TABLE internal05.hco_cnv_mdb_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A① 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A② 開始'); INSERT INTO @@ -74,10 +80,10 @@ BEGIN AND ci.delete_flg = '0' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A② 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 開始'); SET @update_institution = " @@ -96,7 +102,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_A③ 終了'); END diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 6a0642a9..05908ca1 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 開始'); SET @update_institution = " @@ -53,7 +59,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】4:メルク施設コードの洗替_B① 終了'); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index c1610435..8b312d6f 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始'); SET @delete_data = " @@ -35,7 +41,7 @@ BEGIN PREPARE delete_data_stmt from @delete_data; EXECUTE delete_data_stmt USING @laundering_period_year; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 5f26b9c8..72a86310 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -15,25 +15,31 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成① 開始' ); TRUNCATE TABLE internal05.bu_prd_name_contrast_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成① 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 開始' ); @@ -65,22 +71,22 @@ BEGIN ppmv.rec_sts_kbn != '9' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成② 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成③ 開始' ); TRUNCATE TABLE internal05.fcl_mst_v_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成③ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成④ 開始' ); @@ -129,11 +135,11 @@ BEGIN fmv1.rec_sts_kbn != '9' ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成④ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 開始' ); @@ -430,11 +436,11 @@ BEGIN PREPARE upsert_sales_launderning_stmt from @upsert_sales_launderning; EXECUTE upsert_sales_launderning_stmt USING @extract_from_datetime, @extract_to_datetime; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑤ 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 開始' ); @@ -466,7 +472,7 @@ BEGIN PREPARE update_institution_code_stmt from @update_institution_code; EXECUTE update_institution_code_stmt USING @extract_from_datetime, @extract_to_datetime; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)作成⑥ 終了' ); diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 7c1dee91..06af3867 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -14,15 +14,21 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 開始' ); @@ -68,7 +74,7 @@ BEGIN PREPARE update_institution_stmt from @update_institution; EXECUTE update_institution_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】3:HCO施設コードの洗替① 終了' ); diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index 65dc9e30..e183d0c8 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -14,25 +14,31 @@ BEGIN BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, 'whs_org_launderingでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替① 開始' ); TRUNCATE TABLE internal05.whs_customer_org_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替① 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替② 開始' ); @@ -91,11 +97,11 @@ BEGIN AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date ; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替② 終了' ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替③ 開始' ); @@ -115,7 +121,7 @@ BEGIN PREPARE update_organization_stmt from @update_organization; EXECUTE update_organization_stmt; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '【洗替】1.卸組織洗替③ 終了' ); From 2d56d8242013621b95dc6f86484e313bf42370a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 29 Jun 2023 10:53:04 +0900 Subject: [PATCH 21/36] =?UTF-8?q?feat:=20=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=81=E5=BC=95=E6=95=B0=E5=87=BA=E5=8A=9B?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=81=E4=BE=8B=E5=A4=96=E5=87=A6=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stored_procedure/src05/hco_to_mdb_laundering.sql | 4 ++-- .../stored_procedure/src05/inst_merge_laundering.sql | 4 ++-- rds_mysql/stored_procedure/src05/sales_lau_delete.sql | 8 +++++--- rds_mysql/stored_procedure/src05/sales_lau_upsert.sql | 9 +++++---- .../stored_procedure/src05/v_inst_merge_laundering.sql | 6 ++---- rds_mysql/stored_procedure/src05/whs_org_laundering.sql | 4 ++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql index 8201f3bc..eacd56e9 100644 --- a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql index 05908ca1..39f6e431 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'inst_merge_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql index 8b312d6f..39e8f065 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -7,7 +7,8 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table, + 'laundering_period_year', laundering_period_year); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +19,7 @@ BEGIN 'sales_lau_deleteでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); @@ -39,7 +40,8 @@ BEGIN "; SET @delete_data = REPLACE(@delete_data, "$$target_table$$", target_table); PREPARE delete_data_stmt from @delete_data; - EXECUTE delete_data_stmt USING @laundering_period_year; + SET @interval_year = laundering_period_year; + EXECUTE delete_data_stmt USING @interval_year; CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, '卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了'); diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql index 72a86310..56758f18 100644 --- a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -1,6 +1,6 @@ -- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する -CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date date, - extract_to_date date) +CREATE PROCEDURE src05.sales_lau_upsert(target_table VARCHAR(255), extract_from_date DATE, + extract_to_date DATE) SQL SECURITY INVOKER BEGIN -- スキーマ名 @@ -8,7 +8,8 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table, 'extract_from_date', + extract_from_date, 'extract_to_date', extract_to_date); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -19,7 +20,7 @@ BEGIN 'sales_lau_upsertでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql index 06af3867..db50980a 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); @@ -43,8 +43,6 @@ BEGIN prft_cd FROM internal05.v_inst_merge_t - WHERE - (fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29' ) AS vimt, $$target_table$$ AS tt SET diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql index e183d0c8..aad11100 100644 --- a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -7,7 +7,7 @@ BEGIN -- プロシージャ名 DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering'; -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + DECLARE procedure_args JSON DEFAULT JSON_OBJECT('target_table', target_table); -- 例外処理 DECLARE EXIT HANDLER FOR SQLEXCEPTION @@ -18,7 +18,7 @@ BEGIN 'whs_org_launderingでエラーが発生', @error_state, @error_msg); SET @error_msg = ( CASE - WHEN LENGTH(@error_msg) > 127 THEN CONCAT(SUBSTRING(@error_msg, 1, 124), '...') + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') ELSE @error_msg END ); From 901e6e9cd9d238675da904e7fc069e20da0ae4f9 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 14:56:40 +0900 Subject: [PATCH 22/36] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=8B=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E7=94=BB=E9=9D=A2=E3=81=AEdump=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E7=8A=B6=E6=85=8B=E5=8C=BA=E5=88=86=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E5=88=B6=E5=BE=A1=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/menu.py | 2 ++ ecs/jskult-webapp/src/model/db/hdke_tbl.py | 1 + ecs/jskult-webapp/src/model/view/menu_view_model.py | 7 ++++++- ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py | 2 +- ecs/jskult-webapp/src/static/css/menuStyle.css | 2 +- ecs/jskult-webapp/src/system_var/constants.py | 3 +++ ecs/jskult-webapp/src/templates/menu.html | 8 +++++--- 7 files changed, 19 insertions(+), 6 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/menu.py b/ecs/jskult-webapp/src/controller/menu.py index 61a1a3a0..96826fce 100644 --- a/ecs/jskult-webapp/src/controller/menu.py +++ b/ecs/jskult-webapp/src/controller/menu.py @@ -32,6 +32,7 @@ def menu_view( hdke_tbl_record = batch_status_service.hdke_table_record batch_status = hdke_tbl_record.bch_actf + dump_status = hdke_tbl_record.dump_sts_kbn user = UserViewModel( doc_flg=session.doc_flg, inst_flg=session.inst_flg, @@ -40,6 +41,7 @@ def menu_view( ) menu = MenuViewModel( batch_status=batch_status, + dump_status=dump_status, user_model=user ) # セッション書き換え diff --git a/ecs/jskult-webapp/src/model/db/hdke_tbl.py b/ecs/jskult-webapp/src/model/db/hdke_tbl.py index 944581d5..9655c6c1 100644 --- a/ecs/jskult-webapp/src/model/db/hdke_tbl.py +++ b/ecs/jskult-webapp/src/model/db/hdke_tbl.py @@ -5,3 +5,4 @@ from src.model.db.base_db_model import BaseDBModel class HdkeTblModel(BaseDBModel): bch_actf: Optional[str] + dump_sts_kbn: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/menu_view_model.py b/ecs/jskult-webapp/src/model/view/menu_view_model.py index 647bdec9..7a7970d2 100644 --- a/ecs/jskult-webapp/src/model/view/menu_view_model.py +++ b/ecs/jskult-webapp/src/model/view/menu_view_model.py @@ -3,15 +3,20 @@ from typing import Optional from pydantic import BaseModel from src.model.view.user_view_model import UserViewModel +from src.system_var import constants class MenuViewModel(BaseModel): subtitle: str = 'MeDaCA 機能メニュー' batch_status: Optional[str] + dump_status: Optional[str] user_model: UserViewModel def is_batch_processing(self): - return self.batch_status == '1' + return self.batch_status == constants.BATCH_STATUS_PROCESSING + + def is_backup_processing(self): + return self.dump_status != constants.DUMP_STATUS_UNPROCESSED def is_available_ult_doctor_menu(self): return self.user_model.has_ult_doctor_permission() diff --git a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py index 46f5bfcc..967fbbe1 100644 --- a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py +++ b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py @@ -6,7 +6,7 @@ logger = get_logger('日付テーブル取得') class HdkeTblRepository(BaseRepository): - FETCH_SQL = "SELECT bch_actf FROM src05.hdke_tbl" + FETCH_SQL = "SELECT bch_actf, dump_sts_kbn FROM src05.hdke_tbl" def fetch_all(self) -> list[HdkeTblModel]: try: diff --git a/ecs/jskult-webapp/src/static/css/menuStyle.css b/ecs/jskult-webapp/src/static/css/menuStyle.css index b1920070..3a07d9fc 100644 --- a/ecs/jskult-webapp/src/static/css/menuStyle.css +++ b/ecs/jskult-webapp/src/static/css/menuStyle.css @@ -37,7 +37,7 @@ body{ font-size: 160%; } -.notUseBioMsg{ +.notUseBioMsg,.notUseMainteMsg{ font-size: 143%; color: red; } diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index 899c19e5..b7ffa0e2 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -1,5 +1,8 @@ import os.path as path +BATCH_STATUS_PROCESSING = '1' +DUMP_STATUS_UNPROCESSED = '0' + BIO_TEMPORARY_FILE_DIR_PATH = path.join(path.curdir, 'src', 'data') BIO_EXCEL_TEMPLATE_FILE_PATH = path.join(BIO_TEMPORARY_FILE_DIR_PATH, 'BioData_template.xlsx') diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index b8026593..bbfca152 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -24,10 +24,12 @@ {% endif %} {% endif %} {% if menu.is_available_master_maintenance_menu() %} - {% if not menu.is_batch_processing() %} - マスターメンテメニュー

+ {% if menu.is_batch_processing() %} +
マスターメンテメニューは
日次バッチ処理中のため利用出来ません
+ {% elif menu.is_backup_processing() %} +
バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテメニューは利用できません
{% else %} -
マスターメンテメニューは
日次バッチ処理中のため利用出来ません
+ マスターメンテメニュー

{% endif %} {% endif %}

Logout From dbe7b3e007f4f89ff962e2e9871029cdd61fab0a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 15:34:33 +0900 Subject: [PATCH 23/36] =?UTF-8?q?feat:=20=E3=83=9E=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=86=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/master_mainte.py | 60 +++++++++++++++++++ ecs/jskult-webapp/src/main.py | 4 +- .../view/master_mainte_menu_view_model.py | 5 ++ .../src/services/batch_status_service.py | 16 ++++- ecs/jskult-webapp/src/system_var/constants.py | 4 ++ .../src/templates/masterMainteMenu.html | 25 ++++++++ ecs/jskult-webapp/src/templates/menu.html | 2 +- 7 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 ecs/jskult-webapp/src/controller/master_mainte.py create mode 100644 ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py create mode 100644 ecs/jskult-webapp/src/templates/masterMainteMenu.html diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py new file mode 100644 index 00000000..ad5eb3e1 --- /dev/null +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -0,0 +1,60 @@ +from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi.responses import HTMLResponse +from starlette import status + +from src.depends.services import get_service +from src.model.internal.session import UserSession +from src.model.view.master_mainte_menu_view_model import \ + MasterMainteMenuViewModel +from src.router.session_router import AuthenticatedRoute +from src.services.batch_status_service import BatchStatusService +from src.services.session_service import set_session +from src.system_var import constants +from src.templates import templates + +router = APIRouter() +router.route_class = AuthenticatedRoute + +######################### +# Views # +######################### + + +@router.get('/masterMainteMenu', response_class=HTMLResponse) +def menu_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + menu = MasterMainteMenuViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'masterMainteMenu.html', + { + 'request': request, + 'menu': menu + }, + headers={'session_key': session.session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 2aca351c..8717c7cb 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -6,7 +6,7 @@ from starlette import status import src.static as static from src.controller import (bio, bio_download, healthcheck, login, logout, - menu, root, ultmarc) + master_mainte, menu, root, ultmarc) from src.controller.sample_send_file import router as sample_router from src.core import tasks from src.error.exception_handler import http_exception_handler @@ -31,6 +31,8 @@ app.include_router(ultmarc.router, prefix='/ultmarc') # 生物由来のダウンロード用APIルーター。 # クライアントから非同期呼出しされるため、共通ルーターとは異なる扱いとする。 app.include_router(bio_download.router, prefix='/bio') +# マスタメンテ +app.include_router(master_mainte.router, prefix='/masterMainte') # ヘルスチェック用のルーター app.include_router(healthcheck.router, prefix='/healthcheck') diff --git a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py new file mode 100644 index 00000000..c8ff644a --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class MasterMainteMenuViewModel(BaseModel): + subtitle: str = 'MeDaCA 機能メニュー' diff --git a/ecs/jskult-webapp/src/services/batch_status_service.py b/ecs/jskult-webapp/src/services/batch_status_service.py index c9f6c6a7..ffb57af0 100644 --- a/ecs/jskult-webapp/src/services/batch_status_service.py +++ b/ecs/jskult-webapp/src/services/batch_status_service.py @@ -4,6 +4,7 @@ from src.model.db.hdke_tbl import HdkeTblModel from src.repositories.base_repository import BaseRepository from src.repositories.hdke_tbl_repository import HdkeTblRepository from src.services.base_service import BaseService +from src.system_var import constants class BatchStatusService(BaseService): @@ -25,17 +26,30 @@ class BatchStatusService(BaseService): @property def hdke_table_record(self) -> HdkeTblModel: + """日付テーブルを取得する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() # 日付テーブルのレコードは必ず1件 return self.__hdke_table_record[0] def is_batch_processing(self): + """バッチ処理中かどうかを判定する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() - return self.hdke_table_record.bch_actf == '1' # TODO: 定数化する + return self.hdke_table_record.bch_actf == constants.BATCH_STATUS_PROCESSING + + def is_dump_processing(self): + """dump処理処理中かどうかを判定する""" + + # 日付マスタのレコードがあることを確認 + self.__assert_record_exists() + return self.hdke_table_record.dump_sts_kbn != constants.DUMP_STATUS_UNPROCESSED def __assert_record_exists(self): + """日付テーブルが有ることを保証する""" + # 日付マスタのレコードがない場合は例外とする if len(self.__hdke_table_record) == 0: raise DBException('日付テーブルのレコードが存在しません') diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index b7ffa0e2..604acfe5 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -1,6 +1,8 @@ import os.path as path +# 日付テーブル.バッチ処理ステータス:未処理 BATCH_STATUS_PROCESSING = '1' +# 日付テーブル.dump取得状態区分:未処理 DUMP_STATUS_UNPROCESSED = '0' BIO_TEMPORARY_FILE_DIR_PATH = path.join(path.curdir, 'src', 'data') @@ -115,6 +117,7 @@ LOGOUT_REASON_DO_LOGOUT = 'do_logout' LOGOUT_REASON_LOGIN_ERROR = 'login_error' LOGOUT_REASON_BATCH_PROCESSING = 'batch_processing' LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE = 'batch_processing_ult' +LOGOUT_REASON_BACKUP_PROCESSING = 'dump_processing' LOGOUT_REASON_NOT_LOGIN = 'not_login' LOGOUT_REASON_SESSION_EXPIRED = 'session_expired' LOGOUT_REASON_DB_ERROR = 'db_error' @@ -125,6 +128,7 @@ LOGOUT_REASON_MESSAGE_MAP = { LOGOUT_REASON_LOGIN_ERROR: '存在しないユーザー、
またはパスワードが違います。', LOGOUT_REASON_BATCH_PROCESSING: '日次バッチ処理中なので、
生物由来データ参照は使用出来ません。', LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE: '日次バッチ処理中のため、
マスタ-メンテは使用出来ません。', + LOGOUT_REASON_BACKUP_PROCESSING: 'バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテは使用できません', LOGOUT_REASON_NOT_LOGIN: 'Loginしてからページにアクセスしてください。', LOGOUT_REASON_SESSION_EXPIRED: 'セッションが切れています。
再度Loginしてください。', LOGOUT_REASON_DB_ERROR: 'DB接続に失敗しました。
再度Loginするか、
管理者にお問い合わせください。', diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html new file mode 100644 index 00000000..147ab2da --- /dev/null +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -0,0 +1,25 @@ + + + + {% with subtitle = menu.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + + diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index bbfca152..59eb8a74 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -29,7 +29,7 @@ {% elif menu.is_backup_processing() %}
バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテメニューは利用できません
{% else %} - マスターメンテメニュー

+ マスターメンテメニュー

{% endif %} {% endif %}

Logout From af13fa66553ac49d53448a8176b03a7ccbf3e223 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:13:04 +0900 Subject: [PATCH 24/36] =?UTF-8?q?fix:=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 09032af5..6d867645 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -126,7 +126,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(e) + logger.exception(f'SSOログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From cb1db32d2dfc05e8cf1fb57865018a250a38468d Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:39:12 +0900 Subject: [PATCH 25/36] =?UTF-8?q?fix:=20=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 6d867645..00e5cb75 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,6 +79,10 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -132,6 +136,11 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From ccd4ff79a9eb8033abd0aefe59dda2b727a1f9ed Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:13:04 +0900 Subject: [PATCH 26/36] =?UTF-8?q?fix:=20=E3=83=A1=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B=E3=82=8B?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 09032af5..6d867645 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.exception(e) + logger.info(f'ログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -126,7 +126,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(e) + logger.exception(f'SSOログイン失敗:{e}') raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From d76b8d1c9332550239effe6e0c6d5c88b0aed986 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 16:39:12 +0900 Subject: [PATCH 27/36] =?UTF-8?q?fix:=20=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 6d867645..00e5cb75 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,6 +79,10 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -132,6 +136,11 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) + + # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする + if user_record is None: + logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From d18b12a0f62f87dcfafaf2c397b00f6f8a986e97 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 17:13:35 +0900 Subject: [PATCH 28/36] =?UTF-8?q?Revert=20"fix:=20=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=86=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E5=A4=B1=E6=95=97=E6=99=82=E3=81=AB=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E9=80=9A=E7=9F=A5=E3=81=8C=E5=87=BA=E3=81=A6?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=86=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=80=82SSO=E3=81=AF=E9=80=9A=E7=9F=A5=E3=81=95=E3=81=9B?= =?UTF-8?q?=E3=82=8B=E3=80=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit af13fa66553ac49d53448a8176b03a7ccbf3e223. --- ecs/jskult-webapp/src/controller/login.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 00e5cb75..d8e7d569 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,10 +69,10 @@ def login( try: jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: - logger.info(f'ログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) except JWTTokenVerifyException as e: - logger.info(f'ログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) verified_token = jwt_token.verify_token() @@ -130,7 +130,7 @@ def sso_authorize( # トークン検証 verified_token = jwt_token.verify_token() except JWTTokenVerifyException as e: - logger.exception(f'SSOログイン失敗:{e}') + logger.exception(e) raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_SESSION_EXPIRED) # トークンからユーザーIDを取得 From 4c3339fc24c68c707e4539efd60b0ec56eb811f8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 17:13:41 +0900 Subject: [PATCH 29/36] =?UTF-8?q?Revert=20"fix:=20=E3=83=A6=E3=83=BC?= =?UTF-8?q?=E3=82=B6=E3=83=9E=E3=82=B9=E3=82=BF=E3=81=AB=E3=83=AC=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cb1db32d2dfc05e8cf1fb57865018a250a38468d. --- ecs/jskult-webapp/src/controller/login.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index d8e7d569..09032af5 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -79,10 +79,6 @@ def login( # 普通の認証だと、`cognito:username`に入る。 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) - # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする - if user_record is None: - logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') @@ -136,11 +132,6 @@ def sso_authorize( # トークンからユーザーIDを取得 user_id = verified_token.user_id user_record = login_service.logged_in_user(user_id) - - # ユーザーがマスタに存在しない場合、ログアウトにリダイレクトする - if user_record is None: - logger.info(f'存在しないユーザー: {user_id}, ユーザーID: {user_id}') - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR) # ユーザーが有効ではない場合、ログアウトにリダイレクトする if not user_record.is_enable_user(): logger.info(f'無効なユーザー: {user_id}, 有効フラグ: {user_record.enabled_flg}') From c5d66c6d25e99463ba7f01a2a1259557cbb2d2ab Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 10:44:00 +0900 Subject: [PATCH 30/36] =?UTF-8?q?fix:=20=E7=94=BB=E9=9D=A2=E5=88=A9?= =?UTF-8?q?=E7=94=A8=E5=8F=AF=E5=90=A6=E3=83=95=E3=83=A9=E3=82=B0=E3=81=AF?= =?UTF-8?q?NULL=E3=81=8C=E8=A8=B1=E5=AE=B9=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=80=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/model/view/user_view_model.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ecs/jskult-webapp/src/model/view/user_view_model.py b/ecs/jskult-webapp/src/model/view/user_view_model.py index 55f1528a..5b523b4c 100644 --- a/ecs/jskult-webapp/src/model/view/user_view_model.py +++ b/ecs/jskult-webapp/src/model/view/user_view_model.py @@ -4,10 +4,10 @@ from pydantic import BaseModel class UserViewModel(BaseModel): - bio_flg: str # AUTH_FLG1 - doc_flg: str # AUTH_FLG2 - inst_flg: str # AUTH_FLG3 - master_mainte_flg: str # AUTH_FLG4 + bio_flg: Optional[str] # AUTH_FLG1 + doc_flg: Optional[str] # AUTH_FLG2 + inst_flg: Optional[str] # AUTH_FLG3 + master_mainte_flg: Optional[str] # AUTH_FLG4 user_flg: Optional[str] # MNTUSER_FLG def has_ult_doctor_permission(self): From 646dd4f7d9b1f606b5c423dd0e5aef9a9bc1dba3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 14:57:34 +0900 Subject: [PATCH 31/36] =?UTF-8?q?fix:=20=E6=96=87=E8=A8=80=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/model/view/master_mainte_menu_view_model.py | 2 +- ecs/jskult-webapp/src/templates/masterMainteMenu.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py index c8ff644a..2b1629b1 100644 --- a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py +++ b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py @@ -2,4 +2,4 @@ from pydantic import BaseModel class MasterMainteMenuViewModel(BaseModel): - subtitle: str = 'MeDaCA 機能メニュー' + subtitle: str = 'MeDaCA マスターメンテメニュー' diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html index 147ab2da..987615bf 100644 --- a/ecs/jskult-webapp/src/templates/masterMainteMenu.html +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -7,7 +7,7 @@
-

MeDaCA
マスタメンテメニュー

+

MeDaCA
マスターメンテメニュー



施設担当者データCSVアップロード

From 535ae8fa482d601da6d7e6154edecc2aeda37d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 30 Jun 2023 15:15:55 +0900 Subject: [PATCH 32/36] =?UTF-8?q?feat:=20=E4=BB=95=E6=A7=98=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrate_dcf_inst_merge.py | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) 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 index ab4d107a..816a0545 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 @@ -55,12 +55,14 @@ def _set_disabled_dct_inst_merge(db: Database): _update_dcf_inst_cd_new(db, row['dcf_inst_cd'], row['dup_opp_cd'], '戻し') -def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: - # 納入先処方元マスタから、DCF施設コードに対応した領域コードの取得 +def _select_ult_ident_presc_dcf_inst_cd(db: Database, dcf_inst_cd: str) -> list[dict]: + # 納入先処方元マスタから、DCF施設コードに対応したレコードの取得 try: sql = """ SELECT - ta_cd + ta_cd, + ult_ident_cd, + ratio FROM src05.ult_ident_presc WHERE @@ -70,9 +72,9 @@ def _select_ult_ident_presc_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]: params = {'dcf_inst_cd': dcf_inst_cd} ult_ident_presc_ta_cd_records = db.execute_select(sql, params) logging_sql(logger, sql) - logger.info('納入先処方元マスタから領域コードの取得に成功') + logger.info('納入先処方元マスタからDCF施設コードに対応したレコードの取得に成功') except Exception as e: - logger.debug('納入先処方元マスタから領域コードの取得に失敗') + logger.debug('納入先処方元マスタからDCF施設コードに対応したレコードの取得に失敗') raise e return ult_ident_presc_ta_cd_records @@ -83,11 +85,12 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict logger.info('納入先処方元マスタの登録 開始') 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_ta_cd_records = _select_ult_ident_presc_ta_cd(db, enabled_merge_record['dcf_inst_cd']) - for ult_ident_presc_ta_cd_record in ult_ident_presc_ta_cd_records: - ult_ident_presc_records = _select_ult_ident_presc(db, enabled_merge_record['dcf_inst_cd'], + ult_ident_presc_source_records = _select_ult_ident_presc_dcf_inst_cd(db, enabled_merge_record['dcf_inst_cd']) + for ult_ident_presc_source_record in ult_ident_presc_source_records: + ult_ident_presc_records = _select_ult_ident_presc(db, + enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd'], - ult_ident_presc_ta_cd_record['ta_cd']) + ult_ident_presc_source_record) for data_cnt, ult_ident_presc_row in enumerate(ult_ident_presc_records, start=1): logger.info(f'{data_inst_cnt}件目の移行施設の{data_cnt}レコード目処理 開始') # 処方元コード=重複時相手先コードが発生した場合 @@ -554,7 +557,8 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: return emp_chg_inst_records -def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]: +def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, + ult_ident_presc_row: dict) -> list[dict]: # ult_ident_prescからSELECT try: sql = """ @@ -572,6 +576,8 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_ WHERE uipopp.presc_cd = :dup_opp_cd AND uipopp.ta_cd = :ta_cd + AND uipopp.ult_ident_cd = :ult_ident_cd + AND uipopp.ratio = :ratio ) AS opp_count FROM src05.ult_ident_presc AS uip @@ -580,7 +586,13 @@ def _select_ult_ident_presc(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_ AND uip.ta_cd = :ta_cd AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < uip.end_date """ - params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd} + params = { + 'dcf_inst_cd': dcf_inst_cd, + 'dup_opp_cd': dup_opp_cd, + 'ta_cd': ult_ident_presc_row['ta_cd'], + 'ult_ident_cd': ult_ident_presc_row['ult_ident_cd'], + 'ratio': ult_ident_presc_row['ratio'] + } ult_ident_presc_records = db.execute_select(sql, params) logging_sql(logger, sql) logger.info('納入先処方元マスタの取得 成功') From ae6aa29994fa8f5b14f6e272c8c4c56c81760231 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 30 Jun 2023 15:26:24 +0900 Subject: [PATCH 33/36] =?UTF-8?q?feat:=20=E5=90=84=E3=83=9E=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=A1=E3=83=B3=E3=83=86=E7=94=BB=E9=9D=A2=E3=81=AE?= =?UTF-8?q?=E5=81=B4=E3=81=A0=E3=81=91=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/master_mainte.py | 125 ++++++++++++++++++ .../view/inst_emp_csv_download_view_model.py | 5 + .../view/inst_emp_csv_upload_view_model.py | 5 + .../model/view/table_override_view_model.py | 5 + .../src/templates/instEmpCsvDL.html | 13 ++ .../src/templates/instEmpCsvUL.html | 13 ++ .../src/templates/masterMainteMenu.html | 2 +- .../src/templates/tableOverride.html | 13 ++ 8 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py create mode 100644 ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py create mode 100644 ecs/jskult-webapp/src/model/view/table_override_view_model.py create mode 100644 ecs/jskult-webapp/src/templates/instEmpCsvDL.html create mode 100644 ecs/jskult-webapp/src/templates/instEmpCsvUL.html create mode 100644 ecs/jskult-webapp/src/templates/tableOverride.html diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py index ad5eb3e1..b8b8e087 100644 --- a/ecs/jskult-webapp/src/controller/master_mainte.py +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -4,8 +4,13 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession +from src.model.view.inst_emp_csv_download_view_model import \ + InstEmpCsvDownloadViewModel +from src.model.view.inst_emp_csv_upload_view_model import \ + InstEmpCsvUploadViewModel from src.model.view.master_mainte_menu_view_model import \ MasterMainteMenuViewModel +from src.model.view.table_override_view_model import TableOverrideViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.session_service import set_session @@ -58,3 +63,123 @@ def menu_view( headers={'session_key': session.session_key} ) return templates_response + + +@router.get('/instEmpCsvUL', response_class=HTMLResponse) +def inst_emp_csv_upload_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = InstEmpCsvUploadViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'instEmpCsvUL.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response + + +@router.get('/instEmpCsvDL', response_class=HTMLResponse) +def new_inst_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = InstEmpCsvDownloadViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'instEmpCsvDL.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response + + +@router.get('/tableOverride', response_class=HTMLResponse) +def table_override_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + view_model = TableOverrideViewModel() + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + templates_response = templates.TemplateResponse( + 'tableOverride.html', + { + 'request': request, + 'view': view_model + }, + headers={'session_key': session.session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py b/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py new file mode 100644 index 00000000..220294ba --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/inst_emp_csv_download_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class InstEmpCsvDownloadViewModel(BaseModel): + subtitle: str = '施設担当者データCSVダウンロード' diff --git a/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py b/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py new file mode 100644 index 00000000..64bde407 --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/inst_emp_csv_upload_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class InstEmpCsvUploadViewModel(BaseModel): + subtitle: str = '施設担当者データCSVアップロード' diff --git a/ecs/jskult-webapp/src/model/view/table_override_view_model.py b/ecs/jskult-webapp/src/model/view/table_override_view_model.py new file mode 100644 index 00000000..e03b1fd0 --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/table_override_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class TableOverrideViewModel(BaseModel): + subtitle: str = 'テーブル上書きコピー' diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html new file mode 100644 index 00000000..07712d73 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

施設担当者データCSVダウンロード

+ + diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html new file mode 100644 index 00000000..bdd305d8 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

施設担当者データCSVアップロード

+ + diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html index 987615bf..957279fa 100644 --- a/ecs/jskult-webapp/src/templates/masterMainteMenu.html +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -10,7 +10,7 @@

MeDaCA
マスターメンテメニュー



- 施設担当者データCSVアップロード

+ 施設担当者データCSVアップロード

施設担当者データCSVダウンロード

diff --git a/ecs/jskult-webapp/src/templates/tableOverride.html b/ecs/jskult-webapp/src/templates/tableOverride.html new file mode 100644 index 00000000..272cd0cd --- /dev/null +++ b/ecs/jskult-webapp/src/templates/tableOverride.html @@ -0,0 +1,13 @@ + + + + {% with subtitle = view.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + +

テーブル上書きコピー

+ + From 3bf951c632da508bbfdf8435bf5cf71c2cc6e137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Fri, 30 Jun 2023 16:55:31 +0900 Subject: [PATCH 34/36] =?UTF-8?q?feat:=20=E4=BE=8B=E5=A4=96=E5=87=A6?= =?UTF-8?q?=E7=90=86=E4=BF=AE=E6=AD=A3=E3=81=AE=E6=A8=AA=E5=B1=95=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src05/inst_merge_t_create.sql | 118 ++++++++-------- .../src05/v_inst_merge_t_create.sql | 130 +++++++++--------- 2 files changed, 130 insertions(+), 118 deletions(-) diff --git a/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql index 74472fcc..b825ac53 100644 --- a/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql +++ b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql @@ -2,69 +2,75 @@ CREATE PROCEDURE src05.inst_merge_t_create() SQL SECURITY INVOKER BEGIN - -- スキーマ名 - DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); - -- プロシージャ名 - DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_t_create'; - -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_t_create'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); - -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - GET DIAGNOSTICS CONDITION 1 - @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, - 'inst_merge_t_createでエラーが発生', @error_state, @error_msg); - SIGNAL SQLSTATE '45000' - SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; - END; + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'inst_merge_t_createでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') + ELSE @error_msg + END + ); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; - SET @error_state = NULL, @error_msg = NULL; + SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 開始' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 開始' + ); - TRUNCATE TABLE internal05.inst_merge_t; + TRUNCATE TABLE internal05.inst_merge_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 終了' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 終了' + ); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 開始' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 開始' + ); - INSERT INTO - internal05.inst_merge_t ( - dcf_dsf_inst_cd, - dup_opp_cd, - form_inst_name_kanji, - form_inst_name_kana, - inst_addr, - prefc_cd - ) - SELECT - dim.dcf_inst_cd, - dim.dcf_inst_cd_new, - ci.form_inst_name_kanji, - ci.form_inst_name_kana, - ci.inst_addr, - ci.prefc_cd - FROM - src05.dcf_inst_merge dim - LEFT OUTER JOIN src05.com_inst ci - ON dim.dcf_inst_cd_new = ci.dcf_dsf_inst_cd - AND ci.delete_flg = '0' - WHERE - dim.muko_flg = '0' - AND dim.dcf_inst_cd_new IS NOT NULL - AND dim.enabled_flg = 'Y' - AND src05.to_date_yyyymm01(dim.tekiyo_month) <= src05.get_syor_date(); + INSERT INTO + internal05.inst_merge_t ( + dcf_dsf_inst_cd, + dup_opp_cd, + form_inst_name_kanji, + form_inst_name_kana, + inst_addr, + prefc_cd + ) + SELECT + dim.dcf_inst_cd, + dim.dcf_inst_cd_new, + ci.form_inst_name_kanji, + ci.form_inst_name_kana, + ci.inst_addr, + ci.prefc_cd + FROM + src05.dcf_inst_merge AS dim + LEFT OUTER JOIN src05.com_inst AS ci + ON dim.dcf_inst_cd_new = ci.dcf_dsf_inst_cd + AND ci.delete_flg = '0' + WHERE + dim.muko_flg = '0' + AND dim.dcf_inst_cd_new IS NOT NULL + AND dim.enabled_flg = 'Y' + AND src05.to_date_yyyymm01(dim.tekiyo_month) <= src05.get_syor_date(); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 終了' - ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 終了' + ); END diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql index 6a6f9dd7..1c75c4ea 100644 --- a/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql @@ -2,75 +2,81 @@ CREATE PROCEDURE src05.v_inst_merge_t_create() SQL SECURITY INVOKER BEGIN - -- スキーマ名 - DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); - -- プロシージャ名 - DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_t_create'; - -- プロシージャの引数 - DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); + -- スキーマ名 + DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE()); + -- プロシージャ名 + DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_t_create'; + -- プロシージャの引数 + DECLARE procedure_args JSON DEFAULT JSON_OBJECT(); - -- 例外処理 - DECLARE EXIT HANDLER FOR SQLEXCEPTION - BEGIN - GET DIAGNOSTICS CONDITION 1 - @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; - call medaca_common.put_error_log(schema_name, procedure_name, procedure_args, - 'v_inst_merge_t_createでエラーが発生', @error_state, @error_msg); - SIGNAL SQLSTATE '45000' - SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; - END; + -- 例外処理 + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; + CALL medaca_common.put_error_log(schema_name, procedure_name, procedure_args, + 'v_inst_merge_t_createでエラーが発生', @error_state, @error_msg); + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') + ELSE @error_msg + END + ); + SIGNAL SQLSTATE '45000' + SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; + END; - SET @error_state = NULL, @error_msg = NULL; + SET @error_state = NULL, @error_msg = NULL; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成① 開始'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成① 開始'); - TRUNCATE TABLE internal05.v_inst_merge_t; + TRUNCATE TABLE internal05.v_inst_merge_t; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成① 終了'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成① 終了'); - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成② 開始'); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成② 開始'); - INSERT INTO - internal05.v_inst_merge_t ( - v_inst_cd, - v_inst_cd_merge, - fcl_name, - fcl_kn_name, - fmt_addr, - prft_cd, - fcl_type - ) - SELECT - vhmv.v_inst_cd, - vhmv.v_inst_cd_merg, - fmv.fcl_name, - fmv.fcl_kn_name, - fmv.fmt_addr, - fmv.prft_cd, - fmv.fcl_type - FROM - src05.vop_hco_merge_v vhmv, - src05.fcl_mst_v fmv - INNER JOIN ( - SELECT - v_inst_cd, - MAX(sub_num) AS sno - FROM - src05.fcl_mst_v - GROUP BY - v_inst_cd - ) max_sno_fmv - ON fmv.v_inst_cd = max_sno_fmv.v_inst_cd - AND fmv.sub_num = max_sno_fmv.sno - WHERE - vhmv.v_inst_cd_merg = fmv.v_inst_cd - AND STR_TO_DATE(vhmv.apply_dt, '%Y-%m-%d') <= src05.get_syor_date() - AND fmv.rec_sts_kbn != '9'; + INSERT INTO + internal05.v_inst_merge_t ( + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd, + fcl_type + ) + SELECT + vhmv.v_inst_cd, + vhmv.v_inst_cd_merg, + fmv.fcl_name, + fmv.fcl_kn_name, + fmv.fmt_addr, + fmv.prft_cd, + fmv.fcl_type + FROM + src05.vop_hco_merge_v AS vhmv, + src05.fcl_mst_v AS fmv + INNER JOIN ( + SELECT + v_inst_cd, + MAX(sub_num) AS sno + FROM + src05.fcl_mst_v + GROUP BY + v_inst_cd + ) AS max_sno_fmv + ON fmv.v_inst_cd = max_sno_fmv.v_inst_cd + AND fmv.sub_num = max_sno_fmv.sno + WHERE + vhmv.v_inst_cd_merg = fmv.v_inst_cd + AND STR_TO_DATE(vhmv.apply_dt, '%Y-%m-%d') <= src05.get_syor_date() + AND fmv.rec_sts_kbn != '9'; - call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, - 'V施設統合マスタ(洗替処理一時テーブル)作成② 終了' ); + CALL medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成② 終了' ); END From 788e13f1da8d60dbfeefffadaed2f758e96ed785 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 3 Jul 2023 10:31:14 +0900 Subject: [PATCH 35/36] =?UTF-8?q?refactor:=20=E9=96=A2=E6=95=B0=E5=90=8D?= =?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-webapp/src/controller/master_mainte.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py index b8b8e087..ea972ad6 100644 --- a/ecs/jskult-webapp/src/controller/master_mainte.py +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -106,7 +106,7 @@ def inst_emp_csv_upload_view( @router.get('/instEmpCsvDL', response_class=HTMLResponse) -def new_inst_view( +def inst_emp_csv_download_view( request: Request, batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): From 3573bf08618362c6e2e5192424a9180a6c7e06e3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 3 Jul 2023 10:54:06 +0900 Subject: [PATCH 36/36] =?UTF-8?q?style:=20CSS=E7=A7=BB=E6=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/static/css/masterMainte.css | 164 ++++++++++++++++++ .../src/templates/instEmpCsvDL.html | 3 +- .../src/templates/instEmpCsvUL.html | 2 +- .../src/templates/tableOverride.html | 3 +- 4 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 ecs/jskult-webapp/src/static/css/masterMainte.css diff --git a/ecs/jskult-webapp/src/static/css/masterMainte.css b/ecs/jskult-webapp/src/static/css/masterMainte.css new file mode 100644 index 00000000..a59c1681 --- /dev/null +++ b/ecs/jskult-webapp/src/static/css/masterMainte.css @@ -0,0 +1,164 @@ +body{ + background-color: LightCyan; + font-family : "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; +} + +h1{ + margin-left : 1%; +} + + +/*ヘッダー*/ +.headerTable{ + width: 100%; +} + +.headerTdLeft{ + width: 80%; +} + +.headerTdRight{ + text-align: right; + padding-right: 2%; + width: 20%; +} + +.buttonSize{ + width: 85px; +} + +/*////////////////////////*/ +/*施設担当者データCSVダウンロード*/ +/*////////////////////////*/ +.searchColumnTd{ + width: 14%; +} + +.searchTextboxTd{ + width: 18%; +} + +.searchTable{ + margin-left: 3%; + margin-right: 3%; + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 94%; +} + +.searchLabelTd{ + text-align: right; + width: 10%; + +} + +.searchInputTd{ + width: 19%; +} + +.searchTextbox{ + width: 90%; + margin-left: 2.5%; + margin-right: 2.5%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.searchDateTextbox{ + width: 37%; + margin-left: 2.5%; + margin-right: 2.5%; + margin-top: 0.8%; + margin-bottom: 0.8%; +} + +.searchButtonTd{ + text-align: right; + padding-top: 1%; +} + + +.csvOutputMessage{ + margin-left: 3%; +} + +.errorColor{ + color: red; +} + +/*//////////////////////////*/ +/*施設担当者データExcelアップロード*/ +/*//////////////////////////*/ +.inputTable{ + margin-left: 3%; + margin-right: 3%; + margin-bottom: 1%; + padding-bottom: 1%; + border-bottom: solid 1px gray; + width: 94%; +} + +.inputLabelTd{ + width: 10%; +} + +.inputTd{ + width:20%; +} + +.inputButtonTd{ + width: 50%; + text-align: right; +} + +.dataCntDisp{ + text-align: right; + margin-right: 3%; +} + +table.inputData { + font-family:arial; + background-color: #CDCDCD; + font-size: 12pt; + text-align: left; + white-space: nowrap; + border: 0.1px solid silver; + padding: 4px; + padding-right: 20px; + border-collapse: collapse; + margin-left: 3%; + width: 94%; +} +table.inputData tbody th { + color: #3D3D3D; + padding: 4px; + background-color: #e6EEEE; + border: 0.1px solid silver; + vertical-align: top; +} + +table.inputData tbody td { + color: #3D3D3D; + padding: 4px; + background-color: #FFF; + border: 0.1px solid silver; + vertical-align: top; +} + +.footerMsg{ + margin-left: 3%; +} + + +/*//////////////////////////*/ +/*データ上書きコピー */ +/*//////////////////////////*/ +.tableOverRide{ + margin-right: 3%; + margin-left: 3%; + margin-bottom: 2%; + border-bottom: solid 1px gray; + width: 94%; +} + diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html index 07712d73..7e84fd4c 100644 --- a/ecs/jskult-webapp/src/templates/instEmpCsvDL.html +++ b/ecs/jskult-webapp/src/templates/instEmpCsvDL.html @@ -4,8 +4,7 @@ {% with subtitle = view.subtitle %} {% include '_header.html' %} {% endwith %} - - +

施設担当者データCSVダウンロード

diff --git a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html index bdd305d8..9ec84207 100644 --- a/ecs/jskult-webapp/src/templates/instEmpCsvUL.html +++ b/ecs/jskult-webapp/src/templates/instEmpCsvUL.html @@ -5,7 +5,7 @@ {% include '_header.html' %} {% endwith %} - +

施設担当者データCSVアップロード

diff --git a/ecs/jskult-webapp/src/templates/tableOverride.html b/ecs/jskult-webapp/src/templates/tableOverride.html index 272cd0cd..e473b469 100644 --- a/ecs/jskult-webapp/src/templates/tableOverride.html +++ b/ecs/jskult-webapp/src/templates/tableOverride.html @@ -4,8 +4,7 @@ {% with subtitle = view.subtitle %} {% include '_header.html' %} {% endwith %} - - +

テーブル上書きコピー