Merge pull request #196 feature-NEWDWH2021-1061 into develop

This commit is contained in:
朝倉 明日香 2023-05-16 16:48:27 +09:00
commit 5df99e1b60
3 changed files with 168 additions and 16 deletions

View File

@ -0,0 +1,166 @@
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施設統合マスタ作成処理をスキップします。')
return
db = Database.get_instance()
try:
db.connect()
db.begin()
logger.debug('DCF施設統合マスタ作成処理開始')
# COM施設からDCF施設統合マスタに登録
(is_add_dcf_inst_merge, duplication_inst_records) = _insert_dcf_inst_merge_from_com_inst(db)
# DCF施設統合マスタ追加のログを出力する
if is_add_dcf_inst_merge:
logger.info('[NOTICE]DCF施設統合マスタが追加されました。')
_output_add_dcf_inst_merge_log(duplication_inst_records)
logger.debug('DCF施設統合マスタ作成処理終了')
except Exception as e:
db.rollback()
raise BatchOperationException(e)
finally:
db.disconnect()
def _insert_dcf_inst_merge_from_com_inst(db: Database) -> tuple[bool, list[dict]]:
# com_instからdcf_inst_mergeにinsert
# 重複コードがあるデータを取得する(処理日~システム日付を対象)
try:
sql = """
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((src05.get_syor_date() + 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 ci.sys_update_date BETWEEN src05.get_syor_date() AND SYSDATE()
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
)
)
"""
duplication_inst_records = db.execute_select(sql)
logging_sql(logger, sql)
logger.info('施設統合対象データの取得に成功')
except Exception as e:
logger.debug('施設統合対象データの取得に失敗')
raise e
if len(duplication_inst_records) == 0:
logger.info('施設統合対象データはありません')
return (False, None)
# 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}'
tekiyo_month_arr = f'tekiyo_month{clauses_no}'
values_clause = f'(:{dcf_inst_cd_arr}, :{dup_opp_cd_arr}, :{tekiyo_month_arr}, "Y", CURRENT_USER(), SYSDATE(), CURRENT_USER(), 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[tekiyo_month_arr] = row['sys_update_date']
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)
db.commit()
logger.info(f'COM施設からDCF施設統合マスタに登録成功, {res.rowcount} 行更新 ({elapsed_time.of})')
except Exception as e:
logger.debug('COM施設からDCF施設統合マスタの登録に失敗')
raise e
return (True, duplication_inst_records)
def _output_add_dcf_inst_merge_log(duplication_inst_records: list[dict]):
sys_update_date = duplication_inst_records[0]['sys_update_date']
set_year_month = '{set_year}{set_month}'.format(
set_year=sys_update_date[0:4],
set_month=sys_update_date[-2:]
)
add_dct_inst_merge = 'DCF施設コード {dcf_dsf_inst_cd} {form_inst_name_kanji},  重複時相手先コード {dup_opp_cd} {dup_inst_name_kanji}'
add_dct_inst_merge_list = []
for row in duplication_inst_records:
add_dct_inst_merge_list.append(add_dct_inst_merge.format(**row))
add_dct_inst_merge_list = '\n'.join(add_dct_inst_merge_list)
# 顧客報告用にログ出力
logger.info(
f"""DCF施設統合マスタが追加されました。
**********************************************************
適用月度 {set_year_month}
**********************************************************
{add_dct_inst_merge_list}
**********************************************************
合計 {len(duplication_inst_records)}"""
)
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

View File

@ -7,7 +7,8 @@ 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.laundering import create_dcf_inst_merge, mst_inst_laundering
from src.batch.dcf_inst_merge import create_dcf_inst_merge
from src.batch.laundering import mst_inst_laundering
from src.batch.ultmarc import ultmarc_process
from src.error.exceptions import BatchOperationException
from src.logging.get_logger import get_logger