feat: 開発中コミット

This commit is contained in:
高木要 2023-06-07 15:49:20 +09:00
parent 5a92b2c263
commit 0bdcc1fc4a
8 changed files with 1085 additions and 0 deletions

View File

@ -20,6 +20,8 @@ def exec():
emp_chg_inst_laundering.exec() emp_chg_inst_laundering.exec()
# 納入先処方元マスタ洗替 # 納入先処方元マスタ洗替
ult_ident_presc_laundering.exec() ult_ident_presc_laundering.exec()
# 卸販売洗替
# # 並列処理のテスト用コード # # 並列処理のテスト用コード
# import time # import time

View File

@ -0,0 +1,139 @@
from src.db.database import Database
from src.error.exceptions import BatchOperationException
from src.logging.get_logger import get_logger
from src.batch.batch_functions import logging_sql
logger = get_logger('卸実績洗替')
def exec():
db = Database.get_instance()
try:
db.connect()
logger.debug('処理開始')
# 卸販売実績テーブル(洗替後)過去5年以前のデータ削除
_call_sales_lau_delete(db, 'sales_lau', 5)
# 卸販売実績テーブル(洗替後)作成
_call_sales_lau_upsert(db, 'sales_lau', '', '')
# 1:卸組織洗替
_call_whs_org_laundering(db, 'sales_lau')
# HCO施設コードの洗替
_update_sales_lau_from_vop_hco_merge_v(db, 'sales_lau')
# 4:メルク施設コードの洗替
_update_mst_inst_laundering(db, 'sales_lau')
logger.debug('処理終了')
except Exception as e:
raise BatchOperationException(e)
finally:
db.disconnect()
def _call_sales_lau_delete(db: Database, target_table: str, set_year: int):
# 卸販売実績テーブル(洗替後)過去5年以前のデータ削除
logger.info('sales_lau_delete(プロシージャ―) 開始')
db.execute(f'CALL src05.sales_lau_delete("{target_table}", {set_year})')
logger.info('sales_lau_delete(プロシージャ―) 終了')
return
def _call_sales_lau_upsert(db: Database, target_table: str, extract_from_date: str,
extract_to_date: str):
# 卸販売実績テーブル(洗替後)作成
logger.info('sales_lau_delete(プロシージャ―) 開始')
db.execute(f'CALL src05.sales_lau_delete("{target_table}", "{extract_from_date}", "{extract_to_date}")')
logger.info('sales_lau_delete(プロシージャ―) 終了')
return
def _call_whs_org_laundering(db: Database, target_table: str):
# 卸組織洗替
logger.info('whs_org_laundering(プロシージャ―) 開始')
db.execute(f'CALL src05.whs_org_laundering("{target_table}")')
logger.info('whs_org_laundering(プロシージャ―) 終了')
return
def _update_sales_lau_from_vop_hco_merge_v(db: Database, target_table: str):
# HCO施設コードの洗替
if _count_vop_hco_merge_v(db) >= 1:
_call_v_inst_merge_laundering(db, target_table)
return
logger.info('V施設統合マスタにデータは存在しません')
return
def _count_vop_hco_merge_v(db: Database) -> int:
# V施設統合マスタのデータ件数の取得
try:
sql = """
SELECT
COUNT(v_inst_cd) AS cnt
FROM
src05.vop_hco_merge_v
"""
result = db.execute_select(sql)
logging_sql(logger, sql)
logger.info('V施設統合マスタのデータ件数の取得 成功')
except Exception as e:
logger.debug('V施設統合マスタのデータ件数の取得 失敗')
raise e
return result[0]['cnt']
def _call_v_inst_merge_laundering(db: Database, target_table: str):
# HCO施設コードの洗替(テーブル更新)
logger.info('v_inst_merge_laundering(プロシージャ―) 開始')
db.execute(f'CALL src05.v_inst_merge_laundering("{target_table}")')
logger.info('v_inst_merge_laundering(プロシージャ―) 終了')
return
def _update_mst_inst_laundering(db: Database, target_table: str):
# メルク施設コードの洗替
_call_hco_to_mdb_laundering(db, target_table)
_update_sales_lau_from_dcf_inst_merge(db, target_table)
def _call_hco_to_mdb_laundering(db: Database, target_table: str):
# A:医療機関のデータはMDB変換表からHCO⇒DCFへ変換
logger.info('hco_to_mdb_laundering(プロシージャ―) 開始')
db.execute(f'CALL src05.hco_to_mdb_laundering("{target_table}")')
logger.info('hco_to_mdb_laundering(プロシージャ―) 終了')
return
def _update_sales_lau_from_dcf_inst_merge(db: Database, target_table: str):
# B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする
if _count_dcf_inst_merge(db) >= 1:
_call_inst_merge_laundering(db, target_table)
return
logger.info('DCF施設統合マスタにデータは存在しません')
return
def _count_dcf_inst_merge(db: Database) -> int:
# DCF施設統合マスタのデータ件数の取得
try:
sql = """
SELECT
COUNT(dcf_inst_cd) AS cnt
FROM
src05.dcf_inst_merge
"""
result = db.execute_select(sql)
logging_sql(logger, sql)
logger.info('DCF施設統合マスタのデータ件数の取得 成功')
except Exception as e:
logger.debug('DCF施設統合マスタのデータ件数の取得 失敗')
raise e
return result[0]['cnt']
def _call_inst_merge_laundering(db: Database, target_table: str):
# B:DCF施設統合マスタがある場合は、コードを変換し、住所等をSETする(テーブル更新)
logger.info('inst_merge_laundering(プロシージャ―) 開始')
db.execute(f'CALL src05.inst_merge_laundering("{target_table}")')
logger.info('inst_merge_laundering(プロシージャ―) 終了')
return

View File

@ -0,0 +1,98 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.hco_to_mdb_laundering(@target_table VARCHAR(64))
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'hco_to_mdb_laundering';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'hco_to_mdb_launderingでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A① 開始');
TRUNCATE TABLE internal05.hco_cnv_mdb_t;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A① 終了');
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A② 開始');
INSERT INTO
internal05.hco_cnv_mdb_t (
hco_vod_v,
mdb_cd,
form_inst_name_kana,
form_inst_name_kanji,
inst_addr,
prefc_cd,
delete_flg,
abolish_ymd,
start_date
)
SELECT
mcmv.hco_vid_v,
mcmv.mdb_cd,
ci.form_inst_name_kana,
ci.form_inst_name_kanji,
ci.inst_addr,
ci.prefc_cd,
ci.delete_flg,
ci.abolish_ymd,
mcmv.start_date
FROM
src05.mdb_cnv_mst_v AS mcmv
INNER JOIN (
SELECT
hco_vid_v,MAX(sub_num) AS sno
FROM
src05.mdb_cnv_mst_v
WHERE
rec_sts_kbn != '9'
AND src05.get_syor_date() >= START_DATE
GROUP BY hco_vid_v
) AS mcmv2
ON mcmv.hco_vid_v = mcmv2.hco_vid_v
AND mcmv.sub_num = mcmv2.sno
LEFT OUTER JOIN src05.com_inst AS ci
ON mcmv.mdb_cd = ci.dcf_dsf_inst_cd
AND ci.delete_flg = '0'
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A② 終了');
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A③ 開始');
UPDATE src05.@target_table AS tt, internal05.hco_cnv_mdb_t AS hcmt
SET
tt.inst_cd = hcmt.mdb_cd,
tt.inst_name_kana = hcmt.form_inst_name_kana,
tt.inst_name = hcmt.form_inst_name_kanji,
tt.address = hcmt.inst_addr,
tt.pref_cd = hcmt.prefc_cd
WHERE
tt.v_inst_cd = hcmt.hco_vid_v
AND tt.inst_clas_cd = '1'
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_A③ 終了');
END

View File

@ -0,0 +1,52 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.inst_merge_laundering(@target_table VARCHAR(64))
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'inst_merge_laundering';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'inst_merge_launderingでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_B① 開始');
UPDATE (
SELECT
dcf_dsf_inst_cd,
dup_opp_cd,
form_inst_name_kanji,
form_inst_name_kana,
inst_addr,
prefc_cd
FROM
internal05.inst_merge_t
) AS imt,
src05.@target_table AS tt
SET
tt.inst_cd = imt.dup_opp_cd,
tt.inst_name = imt.form_inst_name_kanji,
tt.inst_name_kana = imt.form_inst_name_kana,
tt.address = imt.inst_addr,
tt.prefc_cd = imt.prefc_cd
WHERE
tt.inst_cd = imt.dcf_dsf_inst_cd
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】メルク施設コードの洗替_B① 終了');

View File

@ -0,0 +1,37 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.sales_lau_delete(@target_table VARCHAR(64), @laundering_period_year INT)
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_delete';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'sales_lau_deleteでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 開始');
DELETE FROM
src05.@target_table
WHERE
kjyo_ym < DATE_FORMAT((src05.get_syor_date() - INTERVAL @laundering_period_year YEAR), '%Y%m')
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)過去5年以前のデータ削除① 終了');
END

View File

@ -0,0 +1,568 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.sales_lau_upsert(@target_table VARCHAR(64), @extract_from_date DATETIME,
@extract_to_date DATETIME)
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'sales_lau_upsert';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'sales_lau_upsertでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成① 開始'
);
TRUNCATE TABLE internal05.bu_prd_name_contrast_t;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成① 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成② 開始'
);
INSERT INTO
internal05.bu_prd_name_contrast_t (
prd_cd,
bu_cd,
phm_itm_cd,
pp_start_date,
pp_end_date,
update_date,
bp_start_date,
bp_end_date
)
SELECT
ppmv.prd_cd,
bpnc.bu_cd,
ppmv.phm_itm_cd,
ppmv.start_date AS pp_start_date,
ppmv.end_date AS pp_end_date,
bpnc.update_date AS update_date
bpnc.start_date AS bp_start_date,
bpnc.end_date AS bp_end_date
FROM
src05.phm_prd_mst_v AS ppmv
LEFT OUTER JOIN src05.bu_prd_name_contrast AS bpnc
ON ppmv.phm_itm_cd = bpnc.phm_itm_cd
WHERE
ppmv.rec_sts_kbn != '9'
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成② 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成③ 開始'
);
TRUNCATE TABLE internal05.fcl_mst_v_t;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成③ 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成④ 開始'
);
INSERT INTO
internal05.internal05.fcl_mst_v_t
SELECT
v_inst_cd,
sub_num,
start_date,
end_date,
closed_dt,
fcl_name,
fcl_kn_name,
fcl_abb_name,
mkr_cd,
jsk_proc_kbn,
fmt_addr,
fmt_kn_addr,
postal_cd,
prft_cd,
prft_name,
city_name,
addr_line_1,
tel_num,
admin_kbn,
fcl_type,
rec_sts_kbn,
ins_dt,
upd_dt,
dwh_upd_dt
FROM
src05.fcl_mst_v AS fmv1
INNER JOIN (
SELECT
fmv.v_inst_cd,
MAX(fmv.sub_num) AS sno
FROM
src05.fcl_mst_v AS fmv
GROUP BY
fmv.v_inst_cd
) AS fmv2
ON fmv1.v_inst_cd = fmv2.v_inst_cd
AND fmv1.sub_num = fmv2.sno
WHERE
fmv1.rec_sts_kbn != '9'
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成④ 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑤ 開始'
);
INSERT INTO
src05.@target_table (
rec_whs_cd,
rec_whs_sub_cd,
rec_whs_org_cd,
rec_cust_cd,
rec_comm_cd,
rec_tran_kbn,
rev_hsdnymd_wrk,
rev_hsdnymd_srk,
rec_urag_num,
rec_qty,
rec_nonyu_price,
rec_nonyu_amt,
rec_comm_name,
rec_nonyu_fcl_name,
free_item,
rec_nonyu_fcl_addr,
rec_nonyu_fcl_post,
rec_nonyu_fcl_tel,
rec_bef_hsdn_ymd,
rec_bef_slip_num,
rec_ymd,
sale_data_cat,
slip_file_name,
slip_mgt_num,
row_num,
hsdn_ymd,
exec_dt,
v_tran_cd,
tran_kbn_name,
whs_org_cd,
v_whsorg_cd,
whs_org_name,
whs_org_kn,
v_whs_cd,
whs_name,
nonyu_fcl_cd,
inst_name,
inst_name_kana,
address,
comm_cd,
comm_name,
nonyu_qty,
nonyu_price,
nonyu_amt,
shikiri_price,
shikiri_amt,
nhi_price,
nhi_amt,
v_inst_cd,
inst_clas_cd,
bu_cd,
item_cd,
item_name,
item_english_name,
pref_cd,
whspos_err_kbn,
htdnymd_err_kbn,
prd_exis_kbn,
fcl_exis_kbn,
bef_hsdn_ymd,
bef_slip_num,
slip_org_kbn,
kjyo_ym,
tksnbk_kbn,
fcl_exec_kbn,
rec_sts_kbn,
ins_dt,
ins_usr,
dwh_upd_dt
)
SELECT
s.rec_whs_cd,
s.rec_whs_sub_cd,
s.rec_whs_org_cd,
s.rec_cust_cd,
s.rec_comm_cd,
s.rec_tran_kbn,
s.rev_hsdnymd_wrk,
s.rev_hsdnymd_srk,
s.rec_urag_num,
s.rec_qty,
s.rec_nonyu_price,
s.rec_nonyu_amt,
s.rec_comm_name,
s.rec_nonyu_fcl_name,
s.free_item,
s.rec_nonyu_fcl_addr,
s.rec_nonyu_fcl_post,
s.rec_nonyu_fcl_tel,
s.rec_bef_hsdn_ymd,
s.rec_bef_slip_num,
s.rec_ymd,
s.sale_data_cat,
s.slip_file_name,
s.slip_mgt_num,
s.row_num,
s.hsdn_ymd,
s.exec_dt,
s.v_tran_cd,
s.tran_kbn_name,
s.whs_org_cd,
s.v_whsorg_cd,
s.whs_org_name,
s.whs_org_kn,
s.v_whs_cd,
s.whs_name,
s.nonyu_fcl_cd,
s.v_inst_name,
s.v_inst_kn,
s.v_inst_addr,
s.comm_cd,
s.comm_name,
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nonyu_qty * -1)
ELSE
s.nonyu_qty
END AS nonyu_qty,
s.nonyu_price,
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nonyu_amt * -1)
ELSE
s.nonyu_amt
END AS nonyu_amt,
s.shikiri_price,
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.shikiri_amt * -1)
ELSE
s.shikiri_amt
END AS shikiri_amt,
s.nhi_price,
CASE
WHEN
(LEFT(s.v_tran_cd,1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nhi_amt * -1)
ELSE
s.nhi_amt
END AS nhi_amt,
s.v_inst_cd,
CASE
WHEN
(fmvt.fcl_type = 'A1' or fmvt.fcl_type = 'A0') THEN '3'
WHEN
fmvt.fcl_type BETWEEN '20' AND '29' THEN '2'
ELSE
'1'
END AS inst_clas_cd,
bpnct.bu_cd,
ppmv.mkr_cd,
ppmv.mkr_inf_1,
ppmv.mkr_inf_2,
CASE
WHEN
s.v_inst_cd LIKE '00%'
THEN
ci.prefc_cd
ELSE
fmvt.prft_cd
END AS prft_cd,
s.whspos_err_kbn,
s.htdnymd_err_kbn,
s.prd_exis_kbn,
s.fcl_exis_kbn,
s.bef_hsdn_ymd,
s.bef_slip_num,
s.slip_org_kbn,
s.kjyo_ym,
s.tksnbk_kbn,
s.fcl_exec_kbn,
s.rec_sts_kbn,
s.ins_dt,
s.ins_usr,
SYSDATE()
FROM (
SELECT
CAST(SYSDATE() AS DATE) AS today
) AS sub
INNER JOIN src05.sales AS s
ON sub.today = CAST(s.dwh_upd_dt AS DATE)
LEFT OUTER JOIN src05.phm_prd_mst_v AS ppmv
ON s.comm_cd = ppmv.prd_cd
AND STR_TO_DATE(s.hsdn_ymd,'%Y%m%d') BETWEEN ppmv.start_date AND ppmv.end_date
AND ppmv.rec_sts_kbn != '9'
LEFT OUTER JOIN src05.fcl_mst_v_t AS fmvt
ON s.v_inst_cd = fmvt.v_inst_cd
LEFT OUTER JOIN src05.bu_prd_name_contrast_t AS bpnct
ON s.comm_cd = bpnct.prd_cd
AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.pp_start_date AND bpnct.pp_end_date
AND STR_TO_DATE(s.hsdn_ymd, '%Y%m%d') BETWEEN bpnct.bp_start_date AND bpnct.bp_end_date
LEFT OUTER JOIN src05.com_inst AS ci
ON s.v_inst_cd = ci.dcf_dsf_inst_cd
WHERE
(s.rec_sts_kbn = '0' AND s.err_flg20 = 'M')
OR (
s.rec_sts_kbn = '0'
AND s.err_flg20 != 'M'
AND s.v_tran_cd IN (110, 120, 210, 220)
AND (
(
s.fcl_exec_kbn NOT IN ('2', '5')
AND (s.fcl_exec_kbn != '6' OR ppmv.prd_sale_kbn <> 1)
)
OR s.fcl_exec_kbn IS NULL
)
)
ON DUPLICATE KEY UPDATE
rec_whs_cd = s.rec_whs_cd,
rec_whs_sub_cd = s.rec_whs_sub_cd,
rec_whs_org_cd = s.rec_whs_org_cd,
rec_cust_cd = s.rec_cust_cd,
rec_comm_cd = s.rec_comm_cd,
rec_tran_kbn = s.rec_tran_kbn,
rev_hsdnymd_wrk = s.rev_hsdnymd_wrk,
rev_hsdnymd_srk = s.rev_hsdnymd_srk,
rec_urag_num = s.rec_urag_num,
rec_qty = s.rec_qty,
rec_nonyu_price = s.rec_nonyu_price,
rec_nonyu_amt = s.rec_nonyu_amt,
rec_comm_name = s.rec_comm_name,
rec_nonyu_fcl_name = s.rec_nonyu_fcl_name,
free_item = s.free_item,
rec_nonyu_fcl_addr = s.rec_nonyu_fcl_addr,
rec_nonyu_fcl_post = s.rec_nonyu_fcl_post,
rec_nonyu_fcl_tel = s.rec_nonyu_fcl_tel,
rec_bef_hsdn_ymd = s.rec_bef_hsdn_ymd,
rec_bef_slip_num = s.rec_bef_slip_num,
rec_ymd = s.rec_ymd,
sale_data_cat = s.sale_data_cat,
slip_file_name = s.slip_file_name,
row_num = s.row_num,
hsdn_ymd = s.hsdn_ymd,
exec_dt = s.exec_dt,
v_tran_cd = s.v_tran_cd,
tran_kbn_name = s.tran_kbn_name,
whs_org_cd = s.whs_org_cd,
v_whsorg_cd = s.v_whsorg_cd,
whs_org_name = s.whs_org_name,
whs_org_kn = s.whs_org_kn,
v_whs_cd = s.v_whs_cd,
whs_name = s.whs_name,
nonyu_fcl_cd = s.nonyu_fcl_cd,
inst_name = s.v_inst_name,
inst_name_kana = s.v_inst_kn,
address = s.v_inst_addr,
comm_cd = s.comm_cd,
comm_name = s.comm_name,
nonyu_qty = (
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nonyu_qty * -1)
ELSE
s.nonyu_qty
END
),
nonyu_price = s.nonyu_price,
nonyu_amt = (
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nonyu_amt * -1)
ELSE
s.nonyu_amt
END
),
shikiri_price = s.shikiri_price,
shikiri_amt = (
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.shikiri_amt * -1)
ELSE
s.shikiri_amt
END
),
nhi_price = s.nhi_price,
nhi_amt = (
CASE
WHEN
(LEFT(s.v_tran_cd, 1) = 2 AND (s.err_flg20 IS NULL OR s.err_flg20 != 'M'))
THEN
(s.nhi_amt * -1)
ELSE
s.nhi_amt
END
),
v_inst_cd = s.v_inst_cd,
inst_clas_cd = (
CASE
WHEN
(fmvt.fcl_type = 'A1' OR fmvt.fcl_type = 'A0')
THEN
'3'
WHEN
fmvt.fcl_type BETWEEN '20' AND '29'
THEN
'2'
ELSE
'1'
END
),
bu_cd = bpnct.bu_cd,
item_cd = ppmv.mkr_cd,
item_name = ppmv.mkr_inf_1,
item_english_name = ppmv.mkr_inf_2,
pref_cd = (
CASE
WHEN
s.v_inst_cd LIKE '00%'
THEN
ci.prefc_cd
ELSE
fmvt.prft_cd
END
),
whspos_err_kbn = s.whspos_err_kbn,
htdnymd_err_kbn = s.htdnymd_err_kbn,
prd_exis_kbn = s.prd_exis_kbn,
fcl_exis_kbn = s.fcl_exis_kbn,
bef_hsdn_ymd = s.bef_hsdn_ymd,
bef_slip_num = s.bef_slip_num,
slip_org_kbn = s.slip_org_kbn,
kjyo_ym = s.kjyo_ym,
tksnbk_kbn = s.tksnbk_kbn,
fcl_exec_kbn = s.fcl_exec_kbn,
rec_sts_kbn = s.rec_sts_kbn,
ins_dt = s.ins_dt,
ins_usr = s.ins_usr,
dwh_upd_dt = SYSDATE()
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑤ 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑥ 開始'
);
UPDATE (
SELECT
fmvt.v_inst_cd AS v_inst_cd,
fmvt.fcl_type AS fcl_type,
fmvt.prft_cd AS prft_cd,
ci.prefc_cd AS prefc_cd
FROM
(SELECT CAST(SYSDATE() AS DATE) AS today) AS sub
INNER JOIN src05.fcl_mst_v_t AS fmvt
ON sub.today = CAST(fmvt.dwh_upd_dt AS DATE)
LEFT OUTER JOIN src05.com_inst AS ci
ON fmvt.v_inst_cd = ci.dcf_dsf_inst_cd
) AS t3t5,
src05.sales_lau AS sl
SET
sl.inst_clas_cd = (
CASE
WHEN
(t3t5.fcl_type = 'A1' OR t3t5.fcl_type = 'A0')
THEN
'3'
WHEN
t3t5.fcl_type BETWEEN '20' AND '29'
THEN
'2'
ELSE
'1'
END
),
sl.pref_cd = (
CASE
WHEN
sl.v_inst_cd LIKE '00%'
THEN
t3t5.prefc_cd
ELSE
t3t5.prft_cd
END
)
WHERE sl.v_inst_cd = t3t5.v_inst_cd
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑥ 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑦ 開始'
);
UPDATE
( SELECT CAST(SYSDATE() AS DATE) AS today ) AS sub,
src05.sales_lau AS sl,
src05.sales AS s
SET
sl.inst_cd = (
CASE
WHEN
(s.err_flg20 != 'M' AND sl.inst_clas_cd IN ('2', '3')) OR (s.err_flg20 = 'M')
THEN
s.v_inst_cd
ELSE
NULL
END
)
WHERE
sub.today = CAST(s.dwh_upd_dt AS DATE)
AND sl.slip_mgt_num = s.slip_mgt_num
AND sl.row_num = s.row_num
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'卸販売実績テーブル(洗替後)作成⑦ 終了'
);
END

View File

@ -0,0 +1,71 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.v_inst_merge_laundering(@target_table VARCHAR(64))
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'v_inst_merge_laundering';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'v_inst_merge_launderingでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】HCO施設コードの洗替① 開始'
);
UPDATE (
SELECT
v_inst_cd,
v_inst_cd_merge,
fcl_name,
fcl_kn_name,
fmt_addr,
prft_cd
FROM
internal05.v_inst_merge_t
WHERE
(fcl_type IN ('A1', 'A0')) OR fcl_type BETWEEN '20' AND '29'
) AS vimt,
src05.@target_table AS tt
SET
tt.inst_cd = (
CASE
WHEN
tt.inst_clas_cd = '1'
THEN
tt.inst_cd
WHEN
(tt.inst_clas_cd = '2' OR tt.inst_clas_cd = '3')
THEN
vimt.v_inst_cd_merge
END
)
tt.v_inst_cd = vimt.v_inst_cd_merge,
tt.inst_name = vimt.fcl_name,
tt.inst_name_kana = vimt.fcl_kn_name,
tt.address = vimt.fmt_addr,
tt.prefc_cd = vimt.prft_cd,
tt.dwh_upd_dt = SYSDATE()
WHERE
tt.v_inst_cd = vimt.v_inst_cd
AND (tt.inst_clas_cd IN ('1', '2', '3'))
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】HCO施設コードの洗替① 終了'
);
END

View File

@ -0,0 +1,118 @@
-- A5M2で実行時に[SQL] - [スラッシュ(/)のみの行でSQLを区切る]に変えてから実行する
CREATE PROCEDURE src05.whs_org_laundering(@target_table VARCHAR(64))
SQL SECURITY INVOKER
BEGIN
-- スキーマ名
DECLARE schema_name VARCHAR(50) DEFAULT (SELECT DATABASE());
-- プロシージャ名
DECLARE procedure_name VARCHAR(100) DEFAULT 'whs_org_laundering';
-- プロシージャの引数
DECLARE procedure_args JSON DEFAULT JSON_OBJECT();
-- 例外処理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT;
call medaca_common.put_error_log(schema_name, procedure_name, procedure_args,
'whs_org_launderingでエラーが発生', @error_state, @error_msg);
SIGNAL SQLSTATE '45000'
SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg;
END;
SET @error_state = NULL, @error_msg = NULL;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替① 開始'
);
TRUNCATE TABLE internal05.whs_customer_org_t;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替① 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替② 開始'
);
INSERT INTO
internal05.whs_customer_org_t (
whs_cd,
whs_sub_cd,
customer_cd,
whs_org_cd,
v_org_cd,
nm_2
)
SELECT
wcmv.whs_cd,
wcmv.whs_sub_cd,
wcmv.customer_cd,
wcmv.whs_org_cd,
ocmv.v_org_cd,
mohv2.name_2
FROM
src05.whs_customer_mst_v AS wcmv
LEFT OUTER JOIN src05.org_cnv_mst_v AS ocmv
ON wcmv.whs_cd = ocmv.whs_cd
AND wcmv.whs_sub_cd = ocmv.whs_sub_cd
AND wcmv.whs_org_cd = ocmv.org_cd
AND src05.get_syor_date() BETWEEN ocmv.start_date AND ocmv.end_date
AND ocmv.rec_sts_kbn != '9'
LEFT OUTER JOIN (
SELECT
mohv.v_cd_2,
mohv.name_2
FROM src05.mkr_org_horizon_v AS mohv
INNER JOIN (
SELECT
count(1) AS c,
v_cd_2,
MAX(dwh_upd_dt) AS dwh_upd_dt_latest
FROM
src05.mkr_org_horizon_v
WHERE
rec_sts_kbn != '9'
AND src05.get_syor_date() BETWEEN start_date AND end_date
GROUP BY
v_cd_2
ORDER BY
MAX(start_date) DESC
) AS m_latest
ON mohv.v_cd_2 = m_latest.v_cd_2
AND mohv.dwh_upd_dt = m_latest.dwh_upd_dt_latest
WHERE
mohv.rec_sts_kbn != '9'
AND src05.get_syor_date() BETWEEN mohv.start_date AND mohv.end_date
) AS mohv2
ON ocmv.v_org_cd = mohv2.v_cd_2
WHERE
wcmv.rec_sts_kbn != '9'
AND src05.get_syor_date() BETWEEN wcmv.start_date AND wcmv.end_date;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替② 終了'
);
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替③ 開始'
);
UPDATE
src05.sales_lau AS sl, src05.@target_table AS tt
SET
sl.whs_org_cd = tt.whs_org_cd,
sl.v_whsorg_cd = tt.v_org_cd,
sl.whs_org_name = tt.nm_2
WHERE
st.whs_cd = tt.whs_cd
AND st.whs_sub_cd = tt.whs_sub_cd
AND st.customer_cd = tt.customer_cd
;
call medaca_common.put_info_log(schema_name, procedure_name, procedure_args,
'【洗替】1.卸組織洗替③ 終了'
);
END