fix: 以下を修正。

・テーブル名、カラム名が大文字だったのを小文字に修正。
・DB接続、beginはSQL実行メソッドの外側で実行したいので、dbインスタンスを取り回すように修正。
・ログメッセージ修正。
・NOTICEでログ出力するように修正。
・SELECTメソッドの宣言位置を修正
This commit is contained in:
shimoda.m@nds-tyo.co.jp 2025-05-30 12:18:29 +09:00
parent 9907a3b6d3
commit 489faafe1b

View File

@ -73,6 +73,11 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
receive_file_count
)
try:
# DCF削除新規マスタ作成、出力用にDB接続を開始。
# トランザクションも開始。
db = Database.get_instance()
db.connect()
db.to_jst()
jskult_batch_status_manager.set_process_status(
constants.PROCESS_STATUS_START)
@ -92,18 +97,19 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
jskult_batch_status_manager.set_process_status(
constants.PROCESS_STATUS_DOING)
# アルトマーク取込が実行されていた場合にDCF施設削除新規マスタの作成処理を実行
if jskult_batch_status_manager.is_done_ultmarc_import():
db.begin()
# COM_施設からDCF削除新規マスタに登録
(is_add_dcf_inst_merge,
duplication_inst_records) = self._insert_dcf_inst_merge_from_com_inst(self)
duplication_inst_records) = self._insert_dcf_inst_merge_from_com_inst(db)
if is_add_dcf_inst_merge:
logger.info('[NOTICE]DCF施設削除新規マスタが追加されました。')
self._output_add_dcf_inst_merge_log(
duplication_inst_records)
db.commit()
# CSV出力
dcf_inst_merge_all_records = self._select_dcf_inst_merge_all()
dcf_inst_merge_all_records = self._select_dcf_inst_merge_all(db)
file_path = self._make_csv_data(
self.environment.DCF_INST_MERGE_SEND_FILE_NAME,
dcf_inst_merge_all_records)
@ -121,100 +127,82 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
return
except Exception as e:
db.rollback()
# 何らかのエラーが発生した際に、バッチ実行管理テーブルに「failed」で登録
logger.exception(f'予期せぬエラーが発生したため、DCF削除新規マスタ作成処理を終了します。{e}')
jskult_batch_run_manager.batch_failed()
jskult_batch_status_manager.set_process_status(
constants.PROCESS_STATUS_ERROR)
def _select_dcf_inst_merge_all(self) -> tuple[bool, list[dict]]:
try:
self._db = Database.get_instance()
self._db.connect()
sql = """\
SELECT
*
FROM
src07.dcf_inst_merge
"""
dcf_inst_merge_all_records = self._db.execute_select(sql)
return dcf_inst_merge_all_records
except Exception as e:
raise BatchOperationException(e)
finally:
self._db.disconnect()
db.disconnect()
# com_instからdcf_inst_mergeにinsert
def _insert_dcf_inst_merge_from_com_inst(self) -> tuple[bool, list[dict]]:
def _insert_dcf_inst_merge_from_com_inst(self, db: Database) -> tuple[bool, list[dict]]:
try:
self._db = Database.get_instance()
self._db.connect()
self._db.begin()
self._db.to_jst()
sql = """\
SELECT
ci.DCF_DSF_INST_CD,
ci.FORM_INST_NAME_KANJI,
ci.DELETE_SCHE_REASON_CD,
ci.DUP_OPP_CD,
ci.SYS_UPDATE_DATE
ci.dcf_dsf_inst_cd AS dcf_dsf_inst_cd,
ci.form_inst_name_kanji AS form_inst_name_kanji,
ci.delete_sche_reason_cd AS delete_sche_reason_cd,
ci.dup_opp_cd AS dup_opp_cd,
ci.sys_update_date AS sys_update_date
FROM
src05.COM_INST AS ci
src05.com_inst AS ci
WHERE
ci.DUP_OPP_CD IS NOT NULL
ci.dup_opp_cd IS NOT NULL
AND
ci.DELETE_SCHE_REASON_CD = 'D'
ci.delete_sche_reason_cd = 'D'
AND
ci.DELETE_DATA IS NULL
ci.delete_data IS NULL
AND
ci.SYS_UPDATE_DATE BETWEEN src07.get_syor_date() AND NOW()
ci.sys_update_date BETWEEN src07.get_syor_date() AND NOW()
AND
NOT EXISTS (
SELECT
dim.DCF_INST_CD
dim.dcf_inst_cd
FROM
src07.DCF_INST_MERGE AS dim
src07.dcf_inst_merge AS dim
WHERE
dim.DCF_INST_CD = ci.DCF_DSF_INST_CD
dim.dcf_inst_cd = ci.dcf_dsf_inst_cd
)
AND
(ci.DCF_DSF_INST_CD EXISTS(
(ci.dcf_dsf_inst_cd EXISTS(
SELECT
mia.INST_CD
mia.inst_cd
FROM
src07.MST_INST_ASSN as mia
src07.mst_inst_assn as mia
WHERE
mia.INST_CD = ci.DCF_DSF_INST_CD
mia.inst_cd = ci.dcf_dsf_inst_cd
)
)
OR ci.DCF_DSF_INST_CD EXISTS(
OR ci.dcf_dsf_inst_cd EXISTS(
SELECT
ap.PRSB_INST_CD
ap.prsb_inst_cd
FROM
src07.ATC_PHARM AS ap
src07.atc_pharm AS ap
WHERE
ap.PRSB_INST_CD = ci.DCF_DSF_INST_CD
ap.prsb_inst_cd = ci.dcf_dsf_inst_cd
)
OR ci.DCF_DSF_INST_CD EXISTS(
OR ci.dcf_dsf_inst_cd EXISTS(
SELECT
trd.INST_CD
vtsr.inst_cd
FROM
src07.TRN_RESULT_DATA AS trd
src07.vw_tebra_sales_refreshed AS vtsr
WHERE
trd.INST_CD = ci.DCF_DSF_INST_CD
vtsr.inst_cd = ci.dcf_dsf_inst_cd
)
)
;
"""
duplication_inst_records = self._db.execute_select(sql)
duplication_inst_records = db.execute_select(sql)
# DCF削除新規マスタ取り込み
values_clauses = []
params = {}
for clauses_no, row in enumerate(duplication_inst_records, start=1):
dcf_inst_cd_arr = f"DCF_INST_CD{clauses_no}"
dup_opp_cd_arr = f"DUP_OPP_CD{clauses_no}"
dcf_inst_cd_arr = f"dcf_inst_cd{clauses_no}"
dup_opp_cd_arr = f"dup_opp_cd{clauses_no}"
values_clause = f"""(:{dcf_inst_cd_arr},
:{dup_opp_cd_arr},
DATE_FORMAT((src07.get_syor_date() + INTERVAL 1 MONTH),
@ -228,33 +216,30 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
SYSDATE()
)"""
values_clauses.append(values_clause)
params[dcf_inst_cd_arr] = row['DCF_DSF_INST_CD']
params[dup_opp_cd_arr] = row['DUP_OPP_CD']
params[dcf_inst_cd_arr] = row['dcf_dsf_inst_cd']
params[dup_opp_cd_arr] = row['dup_opp_cd']
insert_sql = f"""
INSERT INTO
src07.dcf_inst_merge (
DCF_INST_CD,
DUP_OPP_CD,
START_MONTH,
INVALID_FLG,
REMARKS,
DCF_INST_CD_NEW,
ENABLED_FLG,
CREATER,
CREATE_DATE,
UPDATER,
UPDATE_DATE
dcf_inst_cd,
dup_opp_cd,
start_month,
invalid_flg,
remarks,
dcf_inst_cd_new,
enabled_flg,
creater,
create_date,
updater,
update_date
)
VALUES
{','.join(values_clauses)}
"""
self._db.execute(insert_sql, params)
db.execute(insert_sql, params)
return (True, duplication_inst_records)
except Exception as e:
self._db.rollback()
raise BatchOperationException(e)
finally:
self._db.disconnect()
def _output_add_dcf_inst_merge_log(duplication_inst_records: list[dict]):
sys_update_date = duplication_inst_records[0]['sys_update_date']
@ -270,7 +255,7 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
add_dct_inst_merge_list = '\n'.join(add_dct_inst_merge_list)
# 顧客報告用にログ出力
logger.info(
f"""DCF施設統合マスタが追加されました。
f"""DCF施設削除新規マスタが追加されました。
**********************************************************
適用月度 {set_year_month}
**********************************************************
@ -281,6 +266,19 @@ class DcfInstMergeIO(JskultBatchEntrypoint):
return
def _select_dcf_inst_merge_all(self, db: Database) -> tuple[bool, list[dict]]:
try:
sql = """\
SELECT
*
FROM
src07.dcf_inst_merge
"""
dcf_inst_merge_all_records = db.execute_select(sql)
return dcf_inst_merge_all_records
except Exception as e:
raise BatchOperationException(e)
def _make_csv_data(csv_file_name: str, record_inst: list):
temporary_dir = tempfile.mkdtemp()
csv_file_path = path.join(temporary_dir, csv_file_name)