レビュー指摘反映

This commit is contained in:
x.azuma.m@nds-tyo.co.jp 2023-05-11 21:07:41 +09:00
parent d370e8c87d
commit 285c725d5b
5 changed files with 1266 additions and 1274 deletions

View File

@ -91,13 +91,13 @@ class ConfigBucket(S3Bucket):
f.seek(0)
return temporary_file_path
def download_wholesaler_stock_list(self):
def download_wholesaler_stock_input_day_list(self):
# 一時ファイルとして保存する
temporary_dir = tempfile.mkdtemp()
temporary_file_path = path.join(temporary_dir, environment.JSKULT_CONFIG_CALENDAR_WHOLESALER_STOCK_FILE_NAME)
holiday_list_key = f'{environment.JSKULT_CONFIG_CALENDAR_FOLDER}/{environment.JSKULT_CONFIG_CALENDAR_WHOLESALER_STOCK_FILE_NAME}'
wholesaler_stock_input_day_list_key = f'{environment.JSKULT_CONFIG_CALENDAR_FOLDER}/{environment.JSKULT_CONFIG_CALENDAR_WHOLESALER_STOCK_FILE_NAME}'
with open(temporary_file_path, mode='wb') as f:
self._s3_client.download_file(self._bucket_name, holiday_list_key, f)
self._s3_client.download_file(self._bucket_name, wholesaler_stock_input_day_list_key, f)
f.seek(0)
return temporary_file_path
@ -110,7 +110,7 @@ class UltmarcBackupBucket(JskUltBackupBucket):
_folder = environment.ULTMARC_BACKUP_FOLDER
class VjskRecieveBucket(S3Bucket):
class VjskReceiveBucket(S3Bucket):
_bucket_name = environment.JSKULT_DATA_BUCKET
_recv_folder = environment.JSKULT_DATA_FOLDER_RECV

View File

@ -3,7 +3,7 @@ class BatchContext:
__syor_date: str # 処理日(yyyy/mm/dd形式)
__is_not_business_day: bool # 日次バッチ起動日フラグ
__is_ultmarc_imported: bool # アルトマーク取込実施済フラグ
__is_import_target_vjsk_stockslipdata: bool # 卸在庫データ取込対象フラグ
__is_vjsk_stock_import_day: bool # 卸在庫データ取込対象フラグ
def __init__(self) -> None:
self.__is_not_business_day = False
@ -40,9 +40,9 @@ class BatchContext:
self.__is_ultmarc_imported = flag
@property
def is_import_target_vjsk_stockslipdata(self):
return self.__is_import_target_vjsk_stockslipdata
def is_vjsk_stock_import_day(self):
return self.__is_vjsk_stock_import_day
@is_import_target_vjsk_stockslipdata.setter
def is_import_target_vjsk_stockslipdata(self, flag: bool):
self.__is_import_target_vjsk_stockslipdata = flag
@is_vjsk_stock_import_day.setter
def is_vjsk_stock_import_day(self, flag: bool):
self.__is_vjsk_stock_import_day = flag

View File

@ -1,10 +1,11 @@
# from src.batch.vjsk.vjsk_recv_file_manager import VjskDatFile
from src.batch.vjsk.vjsk_recv_file_mapper import VjskRecvFileMapper
from src.batch.vjsk.vjsk_recv_file_mapper import VjskReceiveFileMapper
from src.db.database import Database
from src.error.exceptions import BatchOperationException
from src.logging.get_logger import get_logger
logger = get_logger('V実消化データ取込(DB登録)')
mapper = VjskRecvFileMapper()
mapper = VjskReceiveFileMapper()
class VjskDataLoadManager:
@ -27,8 +28,13 @@ class VjskDataLoadManager:
db.execute(f"TRUNCATE TABLE {table_name_org};")
# orgにload ※warningは1148エラーになるらしい
sql = f"LOAD DATA LOCAL INFILE :src_file_name INTO TABLE {table_name_org} " \
" FIELDS TERMINATED BY '\\t' ENCLOSED BY '\"' IGNORE 1 LINES;"
sql = f"""\
LOAD DATA LOCAL INFILE :src_file_name
INTO TABLE {table_name_org}
FIELDS TERMINATED BY '\\t'
ENCLOSED BY '\"'
IGNORE 1 LINES;
"""
result = db.execute(sql, {"src_file_name": src_file_name})
logger.debug(sql)
logger.info(f'{data_name}tsvファイルを{table_name_org}にLOAD : 件数({result.rowcount})')
@ -45,8 +51,7 @@ class VjskDataLoadManager:
db.commit()
except Exception as e:
db.rollback()
logger.error(e)
raise e
raise BatchOperationException(e)
finally:
db.disconnect()
@ -54,9 +59,8 @@ class VjskDataLoadManager:
return
@classmethod
def Load(self, target: dict):
logger.debug(f'JjskDataLoadManager#load start target:{target}')
# target : {"condkey": key, "src_file_path":local_file_path}
def load(self, target: dict):
logger.debug(f'load start target:{target}')
# S3からローカルストレージにdownloadした登録対象のtsvファイルパスを取得
local_file_name = target["src_file_path"]
@ -64,5 +68,5 @@ class VjskDataLoadManager:
# データベース登録
self._import_to_db(local_file_name, target["condkey"])
logger.debug('JjskDataLoadManager#load done')
logger.debug('load done')
return

View File

@ -1,15 +1,54 @@
from src.aws.s3 import ConfigBucket, VjskRecieveBucket
from src.aws.s3 import ConfigBucket, VjskReceiveBucket
from src.batch.common.batch_context import BatchContext
from src.batch.common.calendar_file import CalendarFile
from src.batch.vjsk.vjsk_data_load_manager import VjskDataLoadManager
from src.batch.vjsk.vjsk_recv_file_mapper import VjskRecvFileMapper
from src.batch.vjsk.vjsk_recv_file_mapper import VjskReceiveFileMapper
from src.error.exceptions import BatchOperationException
from src.logging.get_logger import get_logger
logger = get_logger('V実消化データ取込')
batch_context = BatchContext.get_instance()
vjsk_recv_bucket = VjskRecieveBucket()
vjsk_mapper = VjskRecvFileMapper()
vjsk_recv_bucket = VjskReceiveBucket()
vjsk_mapper = VjskReceiveFileMapper()
def exec():
"""V実消化データ取込処理"""
logger.debug('exec start')
# 非営業日なら何もせず終了
if batch_context.is_not_business_day:
logger.debug('非営業日なので処理をスキップ')
return
# 卸在庫データ取込対象日であれば、卸在庫データ処理対象フラグを立てる
logger.debug('卸在庫データ取込対象日であるかを判定')
batch_context.is_vjsk_stock_import_day = _determine_today_is_stockslipdata_target()
logger.debug(f'判定結果 : {batch_context.is_vjsk_stock_import_day}')
if batch_context.is_vjsk_stock_import_day:
logger.info('卸在庫データ取込対象日です')
# V実消化データファイル受領チェック
logger.debug('V実消化データファイル受領チェック開始')
try:
# S3バケットにある受領済のV実消化データファイルの存在チェックをする
_check_received_files()
except BatchOperationException as e:
logger.debug('受領したV実消化データファイルに未受領もものがあります')
raise e
logger.debug('V実消化データファイル受領チェック終了')
# データベース取込
logger.debug('V実消化データ取込開始')
try:
# S3バケットにある受領済のV実消化データファイルをデータベースに登録する
_import_file_to_db()
except Exception as e:
logger.debug(f'データベース登録失敗 {e}')
raise e
logger.debug('exec done')
def _check_if_file_exists(src_list: list, condkey: str) -> bool:
@ -39,7 +78,7 @@ def _check_received_files():
logger.debug(f'ファイル一覧{received_s3_files}')
# ファイル存在確認 卸在庫データファイル(卸在庫データ処理対象日のみ実施)
if batch_context.is_import_target_vjsk_stockslipdata:
if batch_context.is_vjsk_stock_import_day:
if not _check_if_file_exists(received_s3_files, vjsk_mapper.CONDKEY_STOCK_SLIP_DATA):
raise BatchOperationException(f'卸在庫データファイルがありません ファイル一覧:{received_s3_files}')
@ -130,50 +169,50 @@ def _import_file_to_db():
logger.debug(f'取込対象データファイル辞書{target_dict}')
# DB登録 卸在庫データファイル(卸在庫データ処理対象日のみ実施)
if batch_context.is_import_target_vjsk_stockslipdata:
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_STOCK_SLIP_DATA])
if batch_context.is_vjsk_stock_import_day:
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_STOCK_SLIP_DATA])
# DB登録 卸販売データ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_SLIP_DATA])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_SLIP_DATA])
# DB登録 卸組織変換マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_ORG_CNV_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_ORG_CNV_MST])
# DB登録 施設統合マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_VOP_HCO_MERGE])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_VOP_HCO_MERGE])
# DB登録 卸マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_WHS_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_WHS_MST])
# DB登録 卸ホールディングスマスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_HLD_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_HLD_MST])
# DB登録 施設マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_FCL_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_FCL_MST])
# DB登録 メーカー卸組織展開表
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_MKR_ORG_HORIZON])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_MKR_ORG_HORIZON])
# DB登録 取引区分マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_TRAN_KBN_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_TRAN_KBN_MST])
# DB登録 製品マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_PHM_PRD_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_PHM_PRD_MST])
# DB登録 製品価格マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_PHM_PRICE_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_PHM_PRICE_MST])
# DB登録 卸得意先情報マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_WHS_CUSTOMER_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_WHS_CUSTOMER_MST])
# DB登録 MDBコード変換マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_MDB_CONV_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_MDB_CONV_MST])
# DB登録 生物由来データ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_BIO_SLIP_DATA])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_BIO_SLIP_DATA])
# DB登録 製造ロット番号マスタ
VjskDataLoadManager.Load(target_dict[vjsk_mapper.CONDKEY_LOT_NUM_MST])
VjskDataLoadManager.load(target_dict[vjsk_mapper.CONDKEY_LOT_NUM_MST])
logger.debug('_import_file_to_db done')
@ -186,7 +225,7 @@ def _determine_today_is_stockslipdata_target():
today = batch_context.syor_date
# S3バケット上の設定ファイル「V実消化卸在庫データ連携日ファイル」をローカルストレージにdownloadする
wholesaler_stock_list_file_path = ConfigBucket().download_wholesaler_stock_list()
wholesaler_stock_list_file_path = ConfigBucket().download_wholesaler_stock_input_day_list()
# 設定ファイル「V実消化卸在庫データ連携日ファイル」の定義内容を取得する
target_days = CalendarFile(wholesaler_stock_list_file_path)
@ -198,42 +237,3 @@ def _determine_today_is_stockslipdata_target():
raise e
logger.debug("_determine_today_is_stockslipdata_target done")
return ret
def exec():
"""V実消化データ取込処理"""
logger.info('Start Jitsusyouka Torikomi PGM.')
# 非営業日なら何もせず終了
if batch_context.is_not_business_day:
logger.debug('非営業日なので処理をスキップ')
return
# 卸在庫データ取込対象日であれば、卸在庫データ処理対象フラグを立てる
logger.debug('卸在庫データ取込対象日であるかを判定')
batch_context.is_import_target_vjsk_stockslipdata = _determine_today_is_stockslipdata_target()
logger.debug(f'判定結果 : {batch_context.is_import_target_vjsk_stockslipdata}')
if batch_context.is_import_target_vjsk_stockslipdata:
logger.info('卸在庫データ取込対象日です')
# V実消化データファイル受領チェック
logger.debug('V実消化データファイル受領チェック開始')
try:
# S3バケットにある受領済のV実消化データファイルの存在チェックをする
_check_received_files()
except BatchOperationException as e:
logger.debug('受領したV実消化データファイルに未受領もものがあります')
raise e
logger.debug('V実消化データファイル受領チェック終了')
# データベース取込
logger.debug('V実消化データ取込開始')
try:
# S3バケットにある受領済のV実消化データファイルをデータベースに登録する
_import_file_to_db()
except Exception as e:
logger.debug(f'データベース登録失敗 {e}')
raise e
logger.debug('V実消化データ取込終了')

File diff suppressed because it is too large Load Diff