diff --git a/ecs/jskult-batch-daily/src/batch/jissekiaraigae.py b/ecs/jskult-batch-daily/src/batch/jissekiaraigae.py new file mode 100644 index 00000000..be7e6384 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/jissekiaraigae.py @@ -0,0 +1,14 @@ +from src.batch.datachange import emp_chg_inst_lau +from src.batch.datachange import create_inst_merge_for_laundering +from src.logging.get_logger import get_logger + +logger = get_logger('実績洗替') + + +def batch_process(): + """実績洗替処理""" + logger.info('Start Jisseki Araigae Batch PGM.') + # 洗替用マスタ作成 + create_inst_merge_for_laundering.batch_process() + # 施設担当者洗替 + emp_chg_inst_lau.batch_process() diff --git a/ecs/jskult-batch-daily/src/batch/laundering/create_inst_merge_for_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/create_inst_merge_for_laundering.py new file mode 100644 index 00000000..f631d460 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/laundering/create_inst_merge_for_laundering.py @@ -0,0 +1,31 @@ +from src.db.database import Database +from src.error.exceptions import BatchOperationException +from src.logging.get_logger import get_logger + +logger = get_logger('洗替用マスタ作成') + + +def batch_process(): + db = Database.get_instance() + + try: + db.connect() + + logger.debug('処理開始') + call_v_inst_merge_t_create(db) + call_inst_merge_t_create(db) + logger.debug('処理終了') + except Exception as e: + raise BatchOperationException(e) + finally: + db.disconnect() + + +def call_v_inst_merge_t_create(db: Database): + db.execute('CALL src05.v_inst_merge_t_create()') + return + + +def call_inst_merge_t_create(db: Database): + db.execute('CALL src05.inst_merge_t_create()') + return diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/__init__.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/__init__.py index b0f23166..e69de29b 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/__init__.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/__init__.py @@ -1,8 +0,0 @@ -import glob -import os - -# 同階層内のモジュールを一括でインポート -__all__ = [ - os.path.split(os.path.splitext(file)[0])[1] - for file in glob.glob(os.path.join(os.path.dirname(__file__), '[a-zA-Z0-9]*.py')) -] \ No newline at end of file diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_forfront_med_equip_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_forfront_med_equip_mapper.py new file mode 100644 index 00000000..2892d074 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_forfront_med_equip_mapper.py @@ -0,0 +1,96 @@ +from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ + UltmarcTableMapper + +from src.batch.ultmarc.utmp_tables.tables.com_forfront_med_equip import ComForfrontMedEquip + + +class ComForfrontMedEquipMapper(UltmarcTableMapper): + """レイアウト区分022: COM_先端医療機器 登録処理 """ + + # レコード存在確認SQL + RECORD_EXISTS_QUERY = """\ + SELECT + COUNT(*) AS count_num + FROM + src05.com_forfront_med_equip + WHERE + forfront_med_equip_cd = :hi_medicmach_code + """ + # データ登録用SQL + INSERT_QUERY = """\ + INSERT INTO src05.com_forfront_med_equip + ( + forfront_med_equip_cd, + forfront_med_equip_name, + regist_ymd, + delete_ymd, + sys_regist_date, + regist_prgm_id, + sys_update_date, + update_prgm_id + ) + VALUES ( + :hi_medicmach_code, + :hi_medicmach_name, + :execute_date_str_ymd, + NULL, + :execute_datetime, + :program_name, + :execute_datetime, + :program_name + ) + """ + # 更新用SQL + UPDATE_QUERY = """\ + UPDATE src05.com_forfront_med_equip + SET + forfront_med_equip_name = :hi_medicmach_name, + update_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + forfront_med_equip_cd = :hi_medicmach_code + """ + + # 修正区分が「C(削除)」の場合の更新SQL + # 削除年月日 ← システム日付 + LOGICAL_DELETE_QUERY = """\ + UPDATE + src05.com_forfront_med_equip + SET + delete_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + forfront_med_equip_cd = :hi_medicmach_code + """ + record: ComForfrontMedEquip + + def __init__(self, record: list[str], db) -> None: + super().__init__(record, db, ComForfrontMedEquip) + program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている) + # モジュール名をクエリパラメータに設定 + self.query_parameter['program_name'] = program_name + # 読み込んだレコード値もクエリパラメータに追加 + self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()} + + def make_query(self): + # 修正区分がC(削除)の場合、論理削除 + if self.record.maint_flag == 'C': + self.queries.append(self.LOGICAL_DELETE_QUERY) + return + + # レコードの存在確認 + record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter) + # 存在しない場合はInsert + if record_count[0]['count_num'] == 0: + self.queries.append(self.INSERT_QUERY) + return + + # 更新の場合 + if self.record.hi_medicmach_name != '': + self.queries.append(self.UPDATE_QUERY) + return + else: + self.queries.append(None) + return diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_nurse_assrt_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_nurse_assrt_mapper.py new file mode 100644 index 00000000..6d1086f0 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_nurse_assrt_mapper.py @@ -0,0 +1,98 @@ +from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ + UltmarcTableMapper +from src.batch.ultmarc.utmp_tables.tables.com_nurse_assrt import ComNurseAssrt + + +class ComNurseAssrtMapper(UltmarcTableMapper): + """レイアウト区分023: COM_看護種別 登録処理""" + + # レコード存在確認SQL + RECORD_EXISTS_QUERY = """\ + SELECT + COUNT(*) AS count_num + FROM + src05.com_nurse_assrt + WHERE + nurse_assrt_cd = :nurse_assrt_cd + """ + # データ登録用SQL + INSERT_QUERY = """\ + INSERT INTO src05.com_nurse_assrt + ( + nurse_assrt_cd, + nurse_assrt_name, + regist_ymd, + delete_ymd, + sys_regist_date, + regist_prgm_id, + sys_update_date, + update_prgm_id + ) + VALUES ( + :nurse_assrt_cd, + :nurse_assrt_name, + :execute_date_str_ymd, + NULL, + :execute_datetime, + :program_name, + :execute_datetime, + :program_name + ) + """ + + UPDATE_QUERY = """\ + UPDATE + src05.com_nurse_assrt + SET + nurse_assrt_name = :nurse_assrt_name, + update_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + nurse_assrt_cd = :nurse_assrt_cd + """ + + # 修正区分が「C(削除)」の場合の更新SQL + LOGICAL_DELETE_QUERY = """\ + UPDATE + src05.com_nurse_assrt + SET + delete_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + nurse_assrt_cd = :nurse_assrt_cd + """ + record: ComNurseAssrt + + def __init__(self, record: list[str], db) -> None: + super().__init__(record, db, ComNurseAssrt) + program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている) + # モジュール名をクエリパラメータに設定 + self.query_parameter['program_name'] = program_name + # 読み込んだレコード値もクエリパラメータに追加 + self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()} + + def make_query(self): + # 修正区分がC(削除)の場合、論理削除 + if self.record.maint_flag == 'C': + self.queries.append(self.LOGICAL_DELETE_QUERY) + return + + # 追加、更新の場合 + self.queries.append(self.__make_upsert_query()) + return + + def __make_upsert_query(self): + # レコードの存在確認 + record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter) + # 存在しない場合はInsert + if record_count[0]['count_num'] == 0: + return self.INSERT_QUERY + + # 更新する項目が無い場合 + if self.record.nurse_assrt_name == '': + return None + else: + # 更新する項目がある場合はUpdate + return self.UPDATE_QUERY diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_forfront_med_equip.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_forfront_med_equip.py new file mode 100644 index 00000000..a7559d0e --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_forfront_med_equip.py @@ -0,0 +1,14 @@ +from src.batch.ultmarc.utmp_tables.tables.ultmarc_table import UltmarcTable + + +class ComForfrontMedEquip(UltmarcTable): + """レイアウト区分022: COM_先端医療機器""" + hi_medicmach_code: str # 先進医療機器コード + hi_medicmach_name: str # 先端医療機器名 + maint_flag: str # 修正区分 + + def __init__(self, record: list[str]): + super().__init__(record) + self.hi_medicmach_code = record[1] + self.hi_medicmach_name = record[5] + self.maint_flag = record[2] diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_nurse_assrt.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_nurse_assrt.py new file mode 100644 index 00000000..710b9a0a --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_nurse_assrt.py @@ -0,0 +1,14 @@ +from src.batch.ultmarc.utmp_tables.tables.ultmarc_table import UltmarcTable + + +class ComNurseAssrt(UltmarcTable): + """レイアウト区分022: COM_看護種別""" + nurse_assrt_cd: str # 看護種別コード + nurse_assrt_name: str # 看護種別名 + maint_flag: str # 修正区分 + + def __init__(self, record: list[str]): + super().__init__(record) + self.nurse_assrt_cd = record[1] + self.nurse_assrt_name = record[5] + self.maint_flag = record[2] diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py index 4656d290..1c9f8a81 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py @@ -1,6 +1,19 @@ -from src.batch.ultmarc.utmp_tables.table_mapper.concrete import ( - com_alma_mapper, com_dr_wrkplace_mapper, com_hamtec_mapper, - com_inst_mapper, com_pharm_mapper, null_mapper) +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_alma_mapper import \ + ComAlmaMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_dr_wrkplace_mapper import \ + ComDrWrkplaceMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_forfront_med_equip_mapper import \ + ComForfrontMedEquipMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_hamtec_mapper import \ + ComHamtecMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_inst_mapper import \ + ComInstMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_nurse_assrt_mapper import \ + ComNurseAssrtMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_pharm_mapper import \ + ComPharmMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.null_mapper import \ + NullMapper from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ UltmarcTableMapper from src.db.database import Database @@ -9,76 +22,75 @@ from src.db.database import Database COM_TABLE_LIST = { # レコードID固定 # COM_医師学会 - # TODO: 入れ子にしない - "521": null_mapper.NullMapper, + "521": NullMapper, # COM_施設属性 - "111": null_mapper.NullMapper, + "111": NullMapper, # COM_臨床研修病院 - "112": null_mapper.NullMapper, + "112": NullMapper, # COM_医師 - "501": null_mapper.NullMapper, + "501": NullMapper, # COM_施設 - "101": com_inst_mapper.ComInstMapper, + "101": ComInstMapper, # COM_薬局 - "102": com_pharm_mapper.ComPharmMapper, + "102": ComPharmMapper, # COM_医師勤務先 - "502": com_dr_wrkplace_mapper.ComDrWrkplaceMapper, + "502": ComDrWrkplaceMapper, # COM_専門分野 - "511": null_mapper.NullMapper, + "511": NullMapper, # COM_都道府県医療機能情報(基本) - "132": null_mapper.NullMapper, + "132": NullMapper, # COM_都道府県医療機能情報(施設設備) - "133": null_mapper.NullMapper, + "133": NullMapper, # COM_都道府県医療機能情報(疾患治療) - "134": null_mapper.NullMapper, + "134": NullMapper, # COM_都道府県医療機能情報(短期滞在手術) - "135": null_mapper.NullMapper, + "135": NullMapper, # COM_都道府県医療機能情報(専門外来) - "136": null_mapper.NullMapper, + "136": NullMapper, # COM_診療科目 - "001": null_mapper.NullMapper, + "001": NullMapper, # COM_病院種別 - "002": null_mapper.NullMapper, + "002": NullMapper, # COM_出身校学部識別 - "003": null_mapper.NullMapper, + "003": NullMapper, # COM_出身校 - "004": com_alma_mapper.ComAlmaMapper, + "004": ComAlmaMapper, # COM_役職 - "005": null_mapper.NullMapper, + "005": NullMapper, # 都道府県マスタ - "006": null_mapper.NullMapper, + "006": NullMapper, # COM_経営体 - "007": null_mapper.NullMapper, + "007": NullMapper, # COM_所属部科 - "008": null_mapper.NullMapper, + "008": NullMapper, # COM_学会 - "009": null_mapper.NullMapper, + "009": NullMapper, # COM_専門医資格 - "010": null_mapper.NullMapper, + "010": NullMapper, # COM_施設区分 - "011": null_mapper.NullMapper, + "011": NullMapper, # COM_高度先進医療 - "021": com_hamtec_mapper.ComHamtecMapper, + "021": ComHamtecMapper, # COM_先端医療機器 - "022": null_mapper.NullMapper, + "022": ComForfrontMedEquipMapper, # COM_看護種別 - "023": null_mapper.NullMapper, + "023": ComNurseAssrtMapper, # COM_医療機能評価 - "024": null_mapper.NullMapper, + "024": NullMapper, # COM_地域クリティカルパス - "026": null_mapper.NullMapper, + "026": NullMapper, # COM_疾患別リハビリテーション科 - "027": null_mapper.NullMapper, + "027": NullMapper, # COM_政策医療 - "028": null_mapper.NullMapper, + "028": NullMapper, # COM_医療圏都道府県 - "121": null_mapper.NullMapper, + "121": NullMapper, # COM_医療圏3次マスタ - "122": null_mapper.NullMapper, + "122": NullMapper, # COM_二次医療圏 - "123": null_mapper.NullMapper, + "123": NullMapper, # COM_医療圏都道府県市町村対照表 - "124": null_mapper.NullMapper + "124": NullMapper } diff --git a/ecs/jskult-batch-daily/src/db/database.py b/ecs/jskult-batch-daily/src/db/database.py index 59ac0d81..f67a21b9 100644 --- a/ecs/jskult-batch-daily/src/db/database.py +++ b/ecs/jskult-batch-daily/src/db/database.py @@ -84,7 +84,7 @@ class Database: try: self.__connection = self.__engine.connect() except Exception as e: - raise DBException(f'SQL Error: {e}') + raise DBException(e) def execute_select(self, select_query: str, parameters=None) -> list[dict]: """SELECTクエリを実行します。 diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/__init__.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_delete.csv new file mode 100644 index 00000000..36459b1c --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_delete.csv @@ -0,0 +1,8 @@ +"022","11","A","20141113","20141114","" +"022","12","A","20141113","20141114","X線CT" +"022","13","A","20141113","20141114","CR" +"022","14","C","20141113","20141114","血管造影システム" +"022","15","A","20141113","20141114","アンガー型カメラ" +"022","16","A","20141113","20141114","SPECT" +"022","99","C",,,"亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ" +"022","98","C","20141113","20141114","血管造影システム" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_insert.csv new file mode 100644 index 00000000..fe5ae507 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_insert.csv @@ -0,0 +1,7 @@ +"022","11","A","20141113","20141114","MRI" +"022","12","A","20141113","20141114","X線CT" +"022","13","A","20141113","20141114","CR" +"022","14","A","20141113","20141114","血管造影システム" +"022","15","A","20141113","20141114","SPECT" +"022","16","A","20141113","20141114","アンガー型カメラ" +"022","99","A",,,"亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_update.csv new file mode 100644 index 00000000..5ae8452f --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/com_forfront_med_equip_update.csv @@ -0,0 +1,7 @@ +"022","11","B","20141113","20141114","" +"022","12","B","20141113","20141114","X線CT" +"022","13","B","20141113","20141114","CR" +"022","14","B","20141113","20141114","血管造影システム" +"022","15","B","20141113","20141114","アンガー型カメラ" +"022","16","B","20141113","20141114","SPECT" +"022","99","B",,,"亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_delete.csv new file mode 100644 index 00000000..e9b7e50d --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_delete.csv @@ -0,0 +1,8 @@ +"forfront_med_equip_cd","forfront_med_equip_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"11","MRI","20171023","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:07:41","clsComForfrontMedEqu" +"12","X線CT","20171023","20171023","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","clsComForfrontMedEqu" +"13","CR","20171023","20171023","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","clsComForfrontMedEqu" +"14","血管造影システム","20171023","20171023","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","clsComForfrontMedEqu" +"15","アンガー型カメラ","20171023","20171023","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","clsComForfrontMedEqu" +"16","SPECT","20171023","20171023","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","clsComForfrontMedEqu" +"99","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230420","20230420","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_update.csv new file mode 100644 index 00000000..716c01cc --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/db_com_forfront_med_equip_before_update.csv @@ -0,0 +1,9 @@ +"forfront_med_equip_cd","forfront_med_equip_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"11","MRI","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/21 10:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"12","X線CT","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"13","CR","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"14","血管造影システム","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"15","SPECT","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"16","アンガー型カメラ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"98","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" +"99","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_delete.csv new file mode 100644 index 00000000..0eead53f --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_delete.csv @@ -0,0 +1,8 @@ +"forfront_med_equip_cd","forfront_med_equip_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"11","MRI","20171023","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:07:41","clsComForfrontMedEqu" +"12","X線CT","20171023","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"13","CR","20171023","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"14","血管造影システム","20171023","20171023","20230421","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:14:25","com_forfront_med_equip_mapper" +"15","アンガー型カメラ","20171023","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"16","SPECT","20171023","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"99","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230420","20230420","20230421","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_insert.csv new file mode 100644 index 00000000..4c37e0fd --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_insert.csv @@ -0,0 +1,8 @@ +"forfront_med_equip_cd","forfront_med_equip_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"11","MRI","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/21 10:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"12","X線CT","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"13","CR","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"14","血管造影システム","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"15","SPECT","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"16","アンガー型カメラ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","com_forfront_med_equip_mapper","2017/10/23 15:01:26","com_forfront_med_equip_mapper" +"99","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_update.csv new file mode 100644 index 00000000..133e13a9 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/expect_com_forfront_med_equip_update.csv @@ -0,0 +1,9 @@ +"forfront_med_equip_cd","forfront_med_equip_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"11","MRI","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/21 10:01:26","clsComForfrontMedEqu","2017/10/23 10:07:41","com_forfront_med_equip_mapper" +"12","X線CT","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"13","CR","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 10:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"14","血管造影システム","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"15","アンガー型カメラ","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"16","SPECT","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2017/10/23 15:01:26","clsComForfrontMedEqu","2017/10/23 15:10:02","com_forfront_med_equip_mapper" +"98","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" +"99","亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵あ","20230421","20230421","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_forfront_med_equip_mapper","2023/04/19 00:00:00","com_forfront_med_equip_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/test_com_forfront_med_equip_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/test_com_forfront_med_equip_mapper.py new file mode 100644 index 00000000..873d70c6 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_forfront_med_equip/test_com_forfront_med_equip_mapper.py @@ -0,0 +1,197 @@ +import os.path as path +from datetime import datetime + +import pytest + +from src.batch.common.batch_context import BatchContext +from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_forfront_med_equip_mapper +from src.db.database import Database +from tests.testing_utility import (assert_table_results, + create_db_data_from_csv, + create_delete_sql_with_parameter, + create_insert_sql_with_parameter, + create_ultmarc_table_mapper_sut, + create_ultmarc_test_data_from_csv) + + +class TestComForfrontMedEquipMapper: + """ レイアウト区分022: COM_先端医療機器 """ + + db: Database + batch_context: BatchContext + test_file_path: str = path.dirname(__file__) + + @pytest.fixture(autouse=True, scope='function') + def pre_test(self, database: Database): + """ テスト実行前後処理 """ + self.batch_context = BatchContext.get_instance() + # setup + self.db = database + self.db.connect() + self.db.begin() + + # testing + yield + + # teardown + self.db.rollback() + self.db.disconnect() + + def test_insert_record(self): + """ + Cases: + COM_先端医療機器テーブルにレコードを登録する + Arranges: + - CSVデータを用意し、読み込む + - 追加対象となるレコードを削除する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_forfront_med_equip_insert.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_forfront_med_equip', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_forfront_med_equip_mapper.ComForfrontMedEquipMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_forfront_med_equip_mapper.ComForfrontMedEquipMapper, f'{line_number}行目:マッパークラスが期通りか' + + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_forfront_med_equip_insert.csv')) + primary_keys = [f"'{primary_key['forfront_med_equip_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_forfront_med_equip WHERE forfront_med_equip_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_update_record(self): + """ + Cases: + COM_先端医療機器テーブルのレコードを更新する + Arranges: + - CSVデータを用意し、読み込む + - 更新対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_forfront_med_equip_update.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_forfront_med_equip', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_forfront_med_equip_before_update.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_forfront_med_equip', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_forfront_med_equip_mapper.ComForfrontMedEquipMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_forfront_med_equip_mapper.ComForfrontMedEquipMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_forfront_med_equip_update.csv')) + primary_keys = [f"'{primary_key['forfront_med_equip_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_forfront_med_equip WHERE forfront_med_equip_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_logical_delete(self): + """ + Cases: + COM_先端医療機器テーブルのレコードを1件論理削除する + Arranges: + - CSVデータを用意し、読み込む + - 削除対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_forfront_med_equip_delete.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_forfront_med_equip', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_forfront_med_equip_before_delete.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_forfront_med_equip', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_forfront_med_equip_mapper.ComForfrontMedEquipMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_forfront_med_equip_mapper.ComForfrontMedEquipMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_forfront_med_equip_delete.csv')) + primary_keys = [f"'{primary_key['forfront_med_equip_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_forfront_med_equip WHERE forfront_med_equip_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'delete_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/__init__.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_delete.csv new file mode 100644 index 00000000..a89aed2c --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_delete.csv @@ -0,0 +1,8 @@ +"023","3991","A","20141113","20141114","" +"023","4101","A","20141113","20141114","療養型介護療養施設サービス費(Ⅰ)" +"023","4102","A","20141113","20141114","療養型介護療養施設サービス費(Ⅱ)" +"023","4103","C","20141113","20141114","療養型介護療養施設サービス費(Ⅲ)" +"023","4104","A","20141113","20141114","療養型介護療養施設サービス費(Ⅳ)" +"023","4999","A","20141113","20141114","療養型介護療養施設サービス費種別不明" +"023","4105","A","20141113","20141114","療養型介護療養施設サービス費" +"023","9999","C","20141113","20141114","療養型介護療養施設サービス費(Ⅲ)" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_insert.csv new file mode 100644 index 00000000..b12393f2 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_insert.csv @@ -0,0 +1,7 @@ +"023","3991","A","20141113","20141114","診療所療養型種別不明" +"023","4101","A","20141113","20141114","療養型介護療養施設サービス費(Ⅰ)" +"023","4102","A","20141113","20141114","療養型介護療養施設サービス費(Ⅱ)" +"023","4103","A","20141113","20141114","療養型介護療養施設サービス費(Ⅲ)" +"023","4104","A","20141113","20141114","療養型介護療養施設サービス費(Ⅳ)" +"023","4999","A","20141113","20141114","療養型介護療養施設サービス費種別不明" +"023","9999","A","20141113","20141114","ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおか" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_update.csv new file mode 100644 index 00000000..2eac2208 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/com_nurse_assrt_update.csv @@ -0,0 +1,6 @@ +"023","3991","A","20141113","20141114","" +"023","4101","A","20141113","20141114","療養型介護療養施設サービス費(Ⅰ)" +"023","4102","A","20141113","20141114","療養型介護療養施設サービス費(Ⅱ)" +"023","4103","A","20141113","20141114","療養型介護療養施設サービス費(Ⅲ)" +"023","4104","A","20141113","20141114","療養型介護療養施設サービス費種別不明" +"023","4999","A","20141113","20141114","療養型介護療養施設サービス費(Ⅳ)" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_delete.csv new file mode 100644 index 00000000..de1019b7 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_delete.csv @@ -0,0 +1,7 @@ +"nurse_assrt_cd","nurse_assrt_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"3991","診療所療養型種別不明","20171019","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:16:17","clsComNurseAssrt" +"4101","療養型介護療養施設サービス費(Ⅰ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4102","療養型介護療養施設サービス費(Ⅱ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4103","療養型介護療養施設サービス費(Ⅲ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4104","療養型介護療養施設サービス費(Ⅳ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4999","療養型介護療養施設サービス費種別不明","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_update.csv new file mode 100644 index 00000000..de1019b7 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/db_com_nurse_assrt_before_update.csv @@ -0,0 +1,7 @@ +"nurse_assrt_cd","nurse_assrt_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"3991","診療所療養型種別不明","20171019","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:16:17","clsComNurseAssrt" +"4101","療養型介護療養施設サービス費(Ⅰ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4102","療養型介護療養施設サービス費(Ⅱ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4103","療養型介護療養施設サービス費(Ⅲ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4104","療養型介護療養施設サービス費(Ⅳ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" +"4999","療養型介護療養施設サービス費種別不明","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","clsComNurseAssrt" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_delete.csv new file mode 100644 index 00000000..2c4cc78a --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_delete.csv @@ -0,0 +1,8 @@ +"nurse_assrt_cd","nurse_assrt_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"3991","診療所療養型種別不明","20171019","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:16:17","clsComNurseAssrt" +"4101","療養型介護療養施設サービス費(Ⅰ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:31:18","com_nurse_assrt_mapper" +"4102","療養型介護療養施設サービス費(Ⅱ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:31:18","com_nurse_assrt_mapper" +"4103","療養型介護療養施設サービス費(Ⅲ)","20171019","20171019","20230421","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:31:18","com_nurse_assrt_mapper" +"4104","療養型介護療養施設サービス費(Ⅳ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:31:18","com_nurse_assrt_mapper" +"4105","療養型介護療養施設サービス費","20171019","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:31:18","com_nurse_assrt_mapper","2017/10/19 10:31:18","com_nurse_assrt_mapper" +"4999","療養型介護療養施設サービス費種別不明","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:31:18","com_nurse_assrt_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_insert.csv new file mode 100644 index 00000000..564adfff --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_insert.csv @@ -0,0 +1,8 @@ +"nurse_assrt_cd","nurse_assrt_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"3991","診療所療養型種別不明","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"4101","療養型介護療養施設サービス費(Ⅰ)","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"4102","療養型介護療養施設サービス費(Ⅱ)","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"4103","療養型介護療養施設サービス費(Ⅲ)","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"4104","療養型介護療養施設サービス費(Ⅳ)","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"4999","療養型介護療養施設サービス費種別不明","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" +"9999","ああああああああああいいいいいいいいいいううううううううううええええええええええおおおおおおか","20230421","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:01:14","com_nurse_assrt_mapper","2017/10/19 10:01:14","com_nurse_assrt_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_update.csv new file mode 100644 index 00000000..664f4879 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/expect_com_nurse_assrt_update.csv @@ -0,0 +1,7 @@ +"nurse_assrt_cd","nurse_assrt_name","regist_ymd","update_ymd","delete_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"3991","診療所療養型種別不明","20171019","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:16:17","clsComNurseAssrt" +"4101","療養型介護療養施設サービス費(Ⅰ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","com_nurse_assrt_mapper" +"4102","療養型介護療養施設サービス費(Ⅱ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","com_nurse_assrt_mapper" +"4103","療養型介護療養施設サービス費(Ⅲ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","com_nurse_assrt_mapper" +"4104","療養型介護療養施設サービス費種別不明","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","com_nurse_assrt_mapper" +"4999","療養型介護療養施設サービス費(Ⅳ)","20171019","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 10:16:17","clsComNurseAssrt","2017/10/19 10:18:12","com_nurse_assrt_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/test_com_nurse_assrt_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/test_com_nurse_assrt_mapper.py new file mode 100644 index 00000000..e7bea2a5 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_nurse_assrt/test_com_nurse_assrt_mapper.py @@ -0,0 +1,197 @@ +import os.path as path +from datetime import datetime + +import pytest + +from src.batch.common.batch_context import BatchContext +from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_nurse_assrt_mapper +from src.db.database import Database +from tests.testing_utility import (assert_table_results, + create_db_data_from_csv, + create_delete_sql_with_parameter, + create_insert_sql_with_parameter, + create_ultmarc_table_mapper_sut, + create_ultmarc_test_data_from_csv) + + +class TestComNurseAssrtMapper: + """レイアウト区分004: COM_出身校""" + + db: Database + batch_context: BatchContext + test_file_path: str = path.dirname(__file__) + + @pytest.fixture(autouse=True, scope='function') + def pre_test(self, database: Database): + """テスト実行前後処理""" + self.batch_context = BatchContext.get_instance() + # setup + self.db = database + self.db.connect() + self.db.begin() + + # testing + yield + + # teardown + self.db.rollback() + self.db.disconnect() + + def test_insert_record(self): + """ + Cases: + COM_出身校テーブルにレコードを登録する + Arranges: + - CSVデータを用意し、読み込む + - 追加対象となるレコードを削除する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_nurse_assrt_insert.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_nurse_assrt', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_nurse_assrt_mapper.ComNurseAssrtMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_nurse_assrt_mapper.ComNurseAssrtMapper, f'{line_number}行目:マッパークラスが期通りか' + + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_nurse_assrt_insert.csv')) + primary_keys = [f"'{primary_key['nurse_assrt_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_nurse_assrt WHERE nurse_assrt_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_update_record(self): + """ + Cases: + COM_出身校テーブルのレコードを更新する + Arranges: + - CSVデータを用意し、読み込む + - 更新対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_nurse_assrt_update.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_nurse_assrt', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_nurse_assrt_before_update.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_nurse_assrt', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_nurse_assrt_mapper.ComNurseAssrtMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_nurse_assrt_mapper.ComNurseAssrtMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_nurse_assrt_update.csv')) + primary_keys = [f"'{primary_key['nurse_assrt_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_nurse_assrt WHERE nurse_assrt_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_logical_delete(self): + """ + Cases: + COM_出身校テーブルのレコードを1件論理削除する + Arranges: + - CSVデータを用意し、読み込む + - 削除対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_context.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_nurse_assrt_delete.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_nurse_assrt', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_nurse_assrt_before_delete.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_nurse_assrt', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_nurse_assrt_mapper.ComNurseAssrtMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_nurse_assrt_mapper.ComNurseAssrtMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_nurse_assrt_delete.csv')) + primary_keys = [f"'{primary_key['nurse_assrt_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_nurse_assrt WHERE nurse_assrt_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'delete_ymd', 'sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' diff --git a/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql new file mode 100644 index 00000000..74472fcc --- /dev/null +++ b/rds_mysql/stored_procedure/src05/inst_merge_t_create.sql @@ -0,0 +1,70 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +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 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; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成① 開始' + ); + + 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, + 'アルトマーク施設統合マスタ(洗替処理一時テーブル)作成② 開始' + ); + + 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(); + + 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 new file mode 100644 index 00000000..fb609b8c --- /dev/null +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_t_create.sql @@ -0,0 +1,75 @@ +-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する +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 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; + + SET @error_state = NULL, @error_msg = NULL; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成① 開始'); + + 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施設統合マスタ(洗替処理一時テーブル)作成② 開始'); + + INSERT INTO + internal05.v_inst_merge_t ( + v_inst_cd, + v_inst_cd_merge, + fcl_name, + fcl_kn_name, + fmt_addr, + prft_cd + ) + SELECT + vhmv.v_inst_cd, + vhmv.v_inst_cd_merg, + fmv.fcl_name, + fmv.fcl_kn_name, + fmv.fmt_addr, + fmv.prft_cd + 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.fcl_type IN ('A1','A0')) OR fmv.fcl_type BETWEEN '20' AND '29') + AND fmv.rec_sts_kbn != '9'; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + 'V施設統合マスタ(洗替処理一時テーブル)作成② 終了' ); + +END diff --git a/s3/config/jskult/task_settings/batch_daily_task_settings.env b/s3/config/jskult/task_settings/batch_daily_task_settings.env new file mode 100644 index 00000000..2590fe79 --- /dev/null +++ b/s3/config/jskult/task_settings/batch_daily_task_settings.env @@ -0,0 +1,16 @@ +# jskult batch daily task environment file. +LOG_LEVEL=DEBUG +ULTMARC_DATA_FOLDER=recv +VJSK_DATA_RECEIVE_FOLDER=recv +VJSK_DATA_SEND_FOLDER=send +ULTMARC_BACKUP_FOLDER=ultmarc +VJSK_BACKUP_FOLDER=vjsk +JSKULT_CONFIG_CALENDAR_FOLDER=jskult/calendar +JSKULT_CONFIG_CALENDAR_HOLIDAY_LIST_FILE_NAME=jskult_holiday_list.txt +JSKULT_CONFIG_CALENDAR_WHOLESALER_STOCK_FILENAME=jskult_wholesaler_stock_input_day_list.txt +SALES_LAUNDERING_EXTRACT_DATE_PERIOD=0 +SALES_LAUNDERING_TARGET_TABLE_NAME=src05.sales_lau +DB_CONNECTION_MAX_RETRY_ATTEMPT=4 +DB_CONNECTION_RETRY_INTERVAL_INIT=5 +DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS=5 +DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS=50 diff --git a/s3/config/jskult/task_settings/batch_laundering_task_settings.env b/s3/config/jskult/task_settings/batch_laundering_task_settings.env new file mode 100644 index 00000000..c80314cf --- /dev/null +++ b/s3/config/jskult/task_settings/batch_laundering_task_settings.env @@ -0,0 +1,8 @@ +# jskult batch laundering task environment file. +LOG_LEVEL=DEBUG +SALES_LAUNDERING_EXTRACT_DATE_PERIOD=7 +SALES_LAUNDERING_TARGET_TABLE_NAME=src05.sales_lau_all +DB_CONNECTION_MAX_RETRY_ATTEMPT=4 +DB_CONNECTION_RETRY_INTERVAL_INIT=5 +DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS=5 +DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS=50 diff --git a/s3/config/jskult/task_settings/batch_monthly_task_settings.env b/s3/config/jskult/task_settings/batch_monthly_task_settings.env new file mode 100644 index 00000000..441779df --- /dev/null +++ b/s3/config/jskult/task_settings/batch_monthly_task_settings.env @@ -0,0 +1,10 @@ +# jskult batch monthly task environment file. +LOG_LEVEL=DEBUG +ARISJ_DATA_FOLDER=DATA +ARISJ_BACKUP_FOLDER=arisj +JSKULT_CONFIG_CALENDAR_FOLDER=jskult/calendar +JSKULT_CONFIG_CALENDAR_ARISJ_OUTPUT_DAY_LIST_FILE_NAME=jskult_arisj_output_day_list.txt +DB_CONNECTION_MAX_RETRY_ATTEMPT=4 +DB_CONNECTION_RETRY_INTERVAL_INIT=5 +DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS=5 +DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS=50 diff --git a/s3/config/jskult/task_settings/dbdump_task_settings.env b/s3/config/jskult/task_settings/dbdump_task_settings.env new file mode 100644 index 00000000..9620ee44 --- /dev/null +++ b/s3/config/jskult/task_settings/dbdump_task_settings.env @@ -0,0 +1,7 @@ +# jskult db dump task environment file. +LOG_LEVEL=DEBUG +DUMP_BACKUP_FOLDER=dump +DB_CONNECTION_MAX_RETRY_ATTEMPT=4 +DB_CONNECTION_RETRY_INTERVAL_INIT=5 +DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS=5 +DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS=50 diff --git a/s3/config/jskult/task_settings/web_task_settings.env b/s3/config/jskult/task_settings/web_task_settings.env new file mode 100644 index 00000000..9cd4ecf8 --- /dev/null +++ b/s3/config/jskult/task_settings/web_task_settings.env @@ -0,0 +1,6 @@ +# webapp task environment file. +AWS_REGION=ap-northeast-1 +AUTHORIZE_ENDPOINT=oauth2/authorize +TOKEN_ENDPOINT=oauth2/token +BIO_SEARCH_RESULT_MAX_COUNT=35000 +SESSION_EXPIRE_MINUTE=20 diff --git a/stepfunctions/TOOLS/convert_config.yaml b/stepfunctions/TOOLS/convert_config.yaml index be3baa0e..eaaf44c8 100644 --- a/stepfunctions/TOOLS/convert_config.yaml +++ b/stepfunctions/TOOLS/convert_config.yaml @@ -20,6 +20,14 @@ resource: - &STG_SG_ECS_ALL "sg-051e0fb9925539592" # セキュリティグループ(ecs-crm-datafetch) - &STG_SG_CRM_DATAFETCH "sg-0b20b7bb1cb1ab886" + # セキュリティグループ(ecs-jskult-batch-daily) + - &STG_SG_JSKULT_BATCH_DAILY "sg-020b3f6a5a6d6a3a0" + # セキュリティグループ(ecs-jskult-batch-monthly) + - &STG_SG_JSKULT_BATCH_MONTHLY "sg-05c7ad620d69e6f5f" + # セキュリティグループ(ecs-jskult-dbdump) + - &STG_SG_JSKULT_DBDUMP "sg-0967779af13538a8e" + # セキュリティグループ(ecs-jskult-batch-laundering) + - &STG_SG_JSKULT_BATCH_LAUNDERING "sg-00b9ea30c5c6bb77a" # 本番環境 product: # サブネット(PrivateSubnet1) @@ -30,8 +38,17 @@ resource: - &PRD_SG_ECS_ALL "sg-05df4823fc789b0fa" # セキュリティグループ(ecs-crm-datafetch) - &PRD_SG_CRM_DATAFETCH "sg-04de7fc3357d852af" - + # TODO: 本番リリース時にIDを正式化する + # セキュリティグループ(ecs-jskult-batch-daily) + - &PRD_SG_JSKULT_BATCH_DAILY "sg-xxxxxxxxxxxxxxxx" + # セキュリティグループ(ecs-jskult-batch-monthly) + - &PRD_SG_JSKULT_BATCH_MONTHLY "sg-xxxxxxxxxxxxxxxx" + # セキュリティグループ(ecs-jskult-dbdump) + - &PRD_SG_JSKULT_DBDUMP "sg-xxxxxxxxxxxxxxxx" + # セキュリティグループ(ecs-jskult-batch-laundering) + - &PRD_SG_JSKULT_BATCH_LAUNDERING "sg-xxxxxxxxxxxxxxxx" config: + # CRMデータ取得 r-crm-datafetch-state: # ステージング環境 staging: @@ -61,6 +78,7 @@ config: SG_ECS_ALL: *PRD_SG_ECS_ALL # セキュリティグループ(ecs-crm-datafetch) SG_CRM_DATAFETCH: *PRD_SG_CRM_DATAFETCH + # データ登録処理 r-data-import-state: # ステージング環境 staging: @@ -74,3 +92,123 @@ config: AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID # 東京リージョン REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # 実消化&アルトマーク 日次バッチ + r-jskult-batch-daily-state: + # ステージング環境 + staging: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *STG_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *STG_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *STG_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-daily) + SG_JSKULT_BATCH_DAILY: *STG_SG_JSKULT_BATCH_DAILY + # 本番環境 + product: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *PRD_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *PRD_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *PRD_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-daily) + SG_JSKULT_BATCH_DAILY: *PRD_SG_JSKULT_BATCH_DAILY + # 実消化&アルトマーク 月次バッチ + r-jskult-batch-monthly-state: + # ステージング環境 + staging: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *STG_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *STG_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *STG_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-monthly) + SG_JSKULT_BATCH_MONTHLY: *STG_SG_JSKULT_BATCH_MONTHLY + # 本番環境 + product: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *PRD_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *PRD_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *PRD_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-monthly) + SG_JSKULT_BATCH_MONTHLY: *PRD_SG_JSKULT_BATCH_MONTHLY + # 実消化&アルトマーク 日次dump取得 + r-jskult-dbdump-state: + # ステージング環境 + staging: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *STG_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *STG_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *STG_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-dbdump) + SG_JSKULT_DBDUMP: *STG_SG_JSKULT_DBDUMP + # 本番環境 + product: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *PRD_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *PRD_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *PRD_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-dbdump) + SG_JSKULT_DBDUMP: *PRD_SG_JSKULT_DBDUMP + # 実消化&アルトマーク 実績洗替バッチ + r-jskult-batch-laundering-state: + # ステージング環境 + staging: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *STG_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *STG_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *STG_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-laundering) + SG_JSKULT_BATCH_LAUNDERING: *STG_SG_JSKULT_BATCH_LAUNDERING + # 本番環境 + product: + # AWSアカウントID + AWS_ACCOUNT_ID: *AWS_ACCOUNT_ID + # 東京リージョン + REGION_AP_NORTHEAST_1: *REGION_AP_NORTHEAST_1 + # サブネット(PrivateSubnet1) + SUBNET_PRI_1A: *PRD_SUBNET_PRI_1A + # サブネット(PrivateSubnet2) + SUBNET_PRI_1D: *PRD_SUBNET_PRI_1D + # セキュリティグループ(ecs-all) + SG_ECS_ALL: *PRD_SG_ECS_ALL + # セキュリティグループ(ecs-jskut-batch-laundering) + SG_JSKULT_BATCH_LAUNDERING: *PRD_SG_JSKULT_BATCH_LAUNDERING diff --git a/stepfunctions/r-jskult-batch-daily-state/r-jskult-batch-daily-state.json b/stepfunctions/r-jskult-batch-daily-state/r-jskult-batch-daily-state.json new file mode 100644 index 00000000..07964c60 --- /dev/null +++ b/stepfunctions/r-jskult-batch-daily-state/r-jskult-batch-daily-state.json @@ -0,0 +1,72 @@ +{ + "Comment": "MeDaCA 実消化&アルトマーク 日次バッチ起動ステートマシン", + "StartAt": "params", + "States": { + "params": { + "Comment": "パラメータ設定", + "Type": "Pass", + "Parameters": { + "sns": { + "TopicArn": "arn:aws:sns:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:nds-notice-#{ENV_NAME}" + }, + "ecs": { + "Cluster": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:cluster/mbj-newdwh2021-#{ENV_NAME}-jskult-batch-daily-ecs", + "LaunchType": "FARGATE", + "NetworkConfiguration": { + "AwsvpcConfiguration": { + "Subnets": [ + "#{SUBNET_PRI_1A}", + "#{SUBNET_PRI_1D}" + ], + "SecurityGroups": [ + "#{SG_ECS_ALL}", + "#{SG_JSKULT_BATCH_DAILY}" + ], + "AssignPublicIp": "DISABLED" + } + } + } + }, + "ResultPath": "$.params", + "Next": "exec-batch-daily" + }, + "exec-batch-daily": { + "Comment": "実消化&アルトマーク 日次バッチ起動", + "Type": "Task", + "Resource": "arn:aws:states:::ecs:runTask.sync", + "Parameters": { + "Cluster.$": "$.params.ecs.Cluster", + "LaunchType.$": "$.params.ecs.LaunchType", + "TaskDefinition": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:task-definition/mbj-newdwh2021-#{ENV_NAME}-task-jskult-batch-daily", + "NetworkConfiguration.$": "$.params.ecs.NetworkConfiguration" + }, + "Retry": [ + { + "ErrorEquals": ["States.ALL"], + "BackoffRate": 2, + "IntervalSeconds": 5, + "MaxAttempts": 3 + } + ], + "Catch": [ + { + "ErrorEquals": ["States.ALL"], + "ResultPath": "$.result", + "Next": "ErrorEnd" + } + ], + "ResultPath": "$.result", + "Next": "NormalEnd" + }, + "NormalEnd": { + "Comment": "正常終了", + "Type": "Succeed" + }, + "ErrorEnd": { + "Comment": "異常終了", + "Type": "Fail", + "Error": "StatesError", + "Cause": "StepFunctions ErrorEnd" + } + } +} diff --git a/stepfunctions/r-jskult-batch-laundering-state/r-jskult-batch-laundering-state.json b/stepfunctions/r-jskult-batch-laundering-state/r-jskult-batch-laundering-state.json new file mode 100644 index 00000000..c720e349 --- /dev/null +++ b/stepfunctions/r-jskult-batch-laundering-state/r-jskult-batch-laundering-state.json @@ -0,0 +1,72 @@ +{ + "Comment": "MeDaCA 実消化&アルトマーク 実績全件洗替バッチ起動ステートマシン", + "StartAt": "params", + "States": { + "params": { + "Comment": "パラメータ設定", + "Type": "Pass", + "Parameters": { + "sns": { + "TopicArn": "arn:aws:sns:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:nds-notice-#{ENV_NAME}" + }, + "ecs": { + "Cluster": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:cluster/mbj-newdwh2021-#{ENV_NAME}-jskult-batch-laundering-ecs", + "LaunchType": "FARGATE", + "NetworkConfiguration": { + "AwsvpcConfiguration": { + "Subnets": [ + "#{SUBNET_PRI_1A}", + "#{SUBNET_PRI_1D}" + ], + "SecurityGroups": [ + "#{SG_ECS_ALL}", + "#{SG_JSKULT_BATCH_LAUNDERING}" + ], + "AssignPublicIp": "DISABLED" + } + } + } + }, + "ResultPath": "$.params", + "Next": "exec-batch-laundering" + }, + "exec-batch-laundering": { + "Comment": "実消化&アルトマーク 実績全件洗替バッチ起動", + "Type": "Task", + "Resource": "arn:aws:states:::ecs:runTask.sync", + "Parameters": { + "Cluster.$": "$.params.ecs.Cluster", + "LaunchType.$": "$.params.ecs.LaunchType", + "TaskDefinition": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:task-definition/mbj-newdwh2021-#{ENV_NAME}-task-jskult-batch-laundering", + "NetworkConfiguration.$": "$.params.ecs.NetworkConfiguration" + }, + "Retry": [ + { + "ErrorEquals": ["States.ALL"], + "BackoffRate": 2, + "IntervalSeconds": 5, + "MaxAttempts": 3 + } + ], + "Catch": [ + { + "ErrorEquals": ["States.ALL"], + "ResultPath": "$.result", + "Next": "ErrorEnd" + } + ], + "ResultPath": "$.result", + "Next": "NormalEnd" + }, + "NormalEnd": { + "Comment": "正常終了", + "Type": "Succeed" + }, + "ErrorEnd": { + "Comment": "異常終了", + "Type": "Fail", + "Error": "StatesError", + "Cause": "StepFunctions ErrorEnd" + } + } +} diff --git a/stepfunctions/r-jskult-batch-monthly-state/r-jskult-batch-monthly-state.json b/stepfunctions/r-jskult-batch-monthly-state/r-jskult-batch-monthly-state.json new file mode 100644 index 00000000..468127bc --- /dev/null +++ b/stepfunctions/r-jskult-batch-monthly-state/r-jskult-batch-monthly-state.json @@ -0,0 +1,72 @@ +{ + "Comment": "MeDaCA 実消化&アルトマーク 月次バッチ起動ステートマシン", + "StartAt": "params", + "States": { + "params": { + "Comment": "パラメータ設定", + "Type": "Pass", + "Parameters": { + "sns": { + "TopicArn": "arn:aws:sns:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:nds-notice-#{ENV_NAME}" + }, + "ecs": { + "Cluster": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:cluster/mbj-newdwh2021-#{ENV_NAME}-jskult-batch-monthly-ecs", + "LaunchType": "FARGATE", + "NetworkConfiguration": { + "AwsvpcConfiguration": { + "Subnets": [ + "#{SUBNET_PRI_1A}", + "#{SUBNET_PRI_1D}" + ], + "SecurityGroups": [ + "#{SG_ECS_ALL}", + "#{SG_JSKULT_BATCH_MONTHLY}" + ], + "AssignPublicIp": "DISABLED" + } + } + } + }, + "ResultPath": "$.params", + "Next": "exec-batch-monthly" + }, + "exec-batch-monthly": { + "Comment": "実消化&アルトマーク 月次バッチ起動", + "Type": "Task", + "Resource": "arn:aws:states:::ecs:runTask.sync", + "Parameters": { + "Cluster.$": "$.params.ecs.Cluster", + "LaunchType.$": "$.params.ecs.LaunchType", + "TaskDefinition": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:task-definition/mbj-newdwh2021-#{ENV_NAME}-task-jskult-batch-monthly", + "NetworkConfiguration.$": "$.params.ecs.NetworkConfiguration" + }, + "Retry": [ + { + "ErrorEquals": ["States.ALL"], + "BackoffRate": 2, + "IntervalSeconds": 5, + "MaxAttempts": 3 + } + ], + "Catch": [ + { + "ErrorEquals": ["States.ALL"], + "ResultPath": "$.result", + "Next": "ErrorEnd" + } + ], + "ResultPath": "$.result", + "Next": "NormalEnd" + }, + "NormalEnd": { + "Comment": "正常終了", + "Type": "Succeed" + }, + "ErrorEnd": { + "Comment": "異常終了", + "Type": "Fail", + "Error": "StatesError", + "Cause": "StepFunctions ErrorEnd" + } + } +} diff --git a/stepfunctions/r-jskult-dbdump-state/r-jskult-dbdump-state.json b/stepfunctions/r-jskult-dbdump-state/r-jskult-dbdump-state.json new file mode 100644 index 00000000..47fc9208 --- /dev/null +++ b/stepfunctions/r-jskult-dbdump-state/r-jskult-dbdump-state.json @@ -0,0 +1,72 @@ +{ + "Comment": "MeDaCA 実消化&アルトマーク 日次dump取得ステートマシン", + "StartAt": "params", + "States": { + "params": { + "Comment": "パラメータ設定", + "Type": "Pass", + "Parameters": { + "sns": { + "TopicArn": "arn:aws:sns:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:nds-notice-#{ENV_NAME}" + }, + "ecs": { + "Cluster": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:cluster/mbj-newdwh2021-#{ENV_NAME}-jskult-dbdump-ecs", + "LaunchType": "FARGATE", + "NetworkConfiguration": { + "AwsvpcConfiguration": { + "Subnets": [ + "#{SUBNET_PRI_1A}", + "#{SUBNET_PRI_1D}" + ], + "SecurityGroups": [ + "#{SG_ECS_ALL}", + "#{SG_JSKULT_DBDUMP}" + ], + "AssignPublicIp": "DISABLED" + } + } + } + }, + "ResultPath": "$.params", + "Next": "exec-dbdump" + }, + "exec-dbdump": { + "Comment": "実消化&アルトマーク 日次dump取得起動", + "Type": "Task", + "Resource": "arn:aws:states:::ecs:runTask.sync", + "Parameters": { + "Cluster.$": "$.params.ecs.Cluster", + "LaunchType.$": "$.params.ecs.LaunchType", + "TaskDefinition": "arn:aws:ecs:#{REGION_AP_NORTHEAST_1}:#{AWS_ACCOUNT_ID}:task-definition/mbj-newdwh2021-#{ENV_NAME}-task-jskult-dbdump", + "NetworkConfiguration.$": "$.params.ecs.NetworkConfiguration" + }, + "Retry": [ + { + "ErrorEquals": ["States.ALL"], + "BackoffRate": 2, + "IntervalSeconds": 5, + "MaxAttempts": 3 + } + ], + "Catch": [ + { + "ErrorEquals": ["States.ALL"], + "ResultPath": "$.result", + "Next": "ErrorEnd" + } + ], + "ResultPath": "$.result", + "Next": "NormalEnd" + }, + "NormalEnd": { + "Comment": "正常終了", + "Type": "Succeed" + }, + "ErrorEnd": { + "Comment": "異常終了", + "Type": "Fail", + "Error": "StatesError", + "Cause": "StepFunctions ErrorEnd" + } + } +}