From 3a98128b11766e8eb081dcc53a41cb2335b20c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 10 May 2023 15:34:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20DCF=E6=96=BD=E8=A8=AD=E7=B5=B1=E5=90=88?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E4=BD=9C=E6=88=90(=E4=BB=AE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dcf_inst_merge/create_dcf_inst_merge.py | 138 ++++++++++++++++++ .../batch/laundering/create_dcf_inst_merge.py | 15 -- 2 files changed, 138 insertions(+), 15 deletions(-) create mode 100644 ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py delete mode 100644 ecs/jskult-batch-daily/src/batch/laundering/create_dcf_inst_merge.py diff --git a/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py new file mode 100644 index 00000000..f567ebae --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/dcf_inst_merge/create_dcf_inst_merge.py @@ -0,0 +1,138 @@ +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 + +batch_context = BatchContext.get_instance() +logger = get_logger('DCF施設統合マスタ作成') + + +def exec(): + """DCF施設統合マスタ作成""" + + # アルトマーク取込が行われていない場合は処理をスキップする + # if not batch_context.is_ultmarc_imported: + # logger.info('アルトマーク取込が行われていないため、DCF施設統合マスタ作成処理をスキップします。') + + db = Database.get_instance() + try: + db.connect() + db.begin() + logger.debug('DCF施設統合マスタ作成処理開始') + # COM施設からDCF施設統合マスタに登録 + _insert_dcf_inst_merge_from_com_ci(db) + db.commit() + logger.debug('DCF施設統合マスタ作成処理終了') + except Exception as e: + db.rollback() + raise BatchOperationException(e) + finally: + db.disconnect() + + +def _insert_dcf_inst_merge_from_com_ci(db: Database): + # com_ciにdcf_inst_mergeにinsert + creater = 'batchuser' + enabledFlg = 'Y' + + try: + result = db.execute_select( + """ + SELECT + ci.dcf_dsf_inst_cd AS dcf_dsf_inst_cd, + ci.form_inst_name_kanji AS form_inst_name_kanji, + ci.dup_opp_cd AS dup_opp_cd, + ( + SELECT + dupci.form_inst_name_kanji + FROM + src05.com_inst AS dupci + WHERE + dupci.dcf_dsf_inst_cd = ci.dup_opp_cd + ) AS dup_inst_name_kanji, + DATE_FORMAT(DATE_ADD((SELECT syor_date FROM src05.hdke_tbl),INTERVAL 1 MONTH),'%Y%m') AS sys_update_date + FROM + src05.com_inst AS ci + WHERE + CHAR_LENGTH(ci.dup_opp_cd) > 0 + AND ci.delete_sche_reason_cd = 'D' + AND ci.abolish_ymd IS NULL + AND DATE_FORMAT(ci.sys_update_date, '%Y%m%d') BETWEEN (SELECT syor_date FROM src05.hdke_tbl) AND DATE_FORMAT(SYSDATE(), '%Y%m%d') + AND NOT EXISTS ( + SELECT + dim.dcf_inst_cd + FROM + src05.dcf_inst_merge AS dim + WHERE + dim.dcf_inst_cd = ci.dcf_dsf_inst_cd + ) + AND ( + EXISTS ( + SELECT + eci.inst_cd + FROM + src05.emp_chg_inst AS eci + WHERE + eci.inst_cd = ci.dcf_dsf_inst_cd + ) + OR ( + SELECT + sl.inst_cd + FROM + src05.sales_lau AS sl + WHERE + sl.inst_cd = ci.dcf_dsf_inst_cd + ) + ) + """ + ) + logger.debug('重複コードがあるデータの取得に成功') + except Exception as e: + logger.debug('重複コードがあるデータの取得に失敗') + raise e + + if len(result) == 0: + logger.info('重複コードがあるデータはありません') + return + + values_clauses = [] + params = {'enabledFlg': enabledFlg, 'creater': creater, "updater": creater} + clauses_no = 0 + for row in result: + dcfInstCdArr = f'dcfInstCd{clauses_no}' + dupOppCdArr = f'dupOppCd{clauses_no}' + tekiyoMonthArr = f'tekiyoMonth{clauses_no}' + placeholders = f'(:{dcfInstCdArr}, :{dupOppCdArr}, :{tekiyoMonthArr}, :enabledFlg, :creater, SYSDATE(), :updater, SYSDATE())' + values_clauses.append(placeholders) + params[dcfInstCdArr] = row['dcf_dsf_inst_cd'] + params[dupOppCdArr] = row['dup_opp_cd'] + params[tekiyoMonthArr] = row['sys_update_date'] + clauses_no += 1 + + insert_sql = f""" + INSERT INTO + src05.dcf_inst_merge ( + dcf_inst_cd, + dup_opp_cd, + tekiyo_month, + enabled_flg, + creater, + create_date, + updater, + update_date + ) VALUES + {','.join(values_clauses)} + """ + + try: + elapsed_time = ElapsedTime() + res = db.execute(insert_sql, params) + logging_sql(logger, insert_sql) + logger.info(f'COM施設からDCF施設統合マスタに登録成功, {res.rowcount} 行更新 ({elapsed_time.of})') + except Exception as e: + logger.debug('COM施設からDCF施設統合マスタの登録に失敗') + raise e + + return diff --git a/ecs/jskult-batch-daily/src/batch/laundering/create_dcf_inst_merge.py b/ecs/jskult-batch-daily/src/batch/laundering/create_dcf_inst_merge.py deleted file mode 100644 index 974aa329..00000000 --- a/ecs/jskult-batch-daily/src/batch/laundering/create_dcf_inst_merge.py +++ /dev/null @@ -1,15 +0,0 @@ -from src.batch.common.batch_context import BatchContext -from src.logging.get_logger import get_logger - -batch_context = BatchContext.get_instance() -logger = get_logger('DCF施設統合マスタ作成') - - -def exec(): - """DCF施設統合マスタ作成""" - - # アルトマーク取込が行われていない場合は処理をスキップする - if not batch_context.is_ultmarc_imported: - logger.info('アルトマーク取込が行われていないため、DCF施設統合マスタ作成処理をスキップします。') - - pass