feat: DCF施設統合マスタ作成(仮)

This commit is contained in:
高木要 2023-05-10 15:34:16 +09:00
parent f12c36aa0b
commit 3a98128b11
2 changed files with 138 additions and 15 deletions

View File

@ -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

View File

@ -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