From 0bdcc1fc4afe44302f6d94f37d2ae4db8cf649b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Wed, 7 Jun 2023 15:49:20 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=E4=B8=AD=E3=82=B3?= =?UTF-8?q?=E3=83=9F=E3=83=83=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/laundering/sales_laundering.py | 2 + .../laundering/sales_results_laundering.py | 139 +++++ .../src05/hco_to_mdb_laundering.sql | 98 +++ .../src05/inst_merge_laundering.sql | 52 ++ .../src05/sales_lau_delete.sql | 37 ++ .../src05/sales_lau_upsert.sql | 568 ++++++++++++++++++ .../src05/v_inst_merge_laundering.sql | 71 +++ .../src05/whs_org_laundering.sql | 118 ++++ 8 files changed, 1085 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py create mode 100644 rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_delete.sql create mode 100644 rds_mysql/stored_procedure/src05/sales_lau_upsert.sql create mode 100644 rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql create mode 100644 rds_mysql/stored_procedure/src05/whs_org_laundering.sql diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py index f6d682b4..3862177e 100644 --- a/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_laundering.py @@ -20,6 +20,8 @@ def exec(): emp_chg_inst_laundering.exec() # 納入先処方元マスタ洗替 ult_ident_presc_laundering.exec() + # 卸販売洗替 + # # 並列処理のテスト用コード # import time diff --git a/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py new file mode 100644 index 00000000..979f1042 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/laundering/sales_results_laundering.py @@ -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') + # 3: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 diff --git a/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql new file mode 100644 index 00000000..03402001 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/hco_to_mdb_laundering.sql @@ -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, + '【洗替】4:メルク施設コードの洗替_A① 開始'); + + TRUNCATE TABLE internal05.hco_cnv_mdb_t; + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_A① 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_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, + '【洗替】4:メルク施設コードの洗替_A② 終了'); + + call medaca_common.put_info_log(schema_name, procedure_name, procedure_args, + '【洗替】4:メルク施設コードの洗替_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, + '【洗替】4:メルク施設コードの洗替_A③ 終了'); + +END diff --git a/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql new file mode 100644 index 00000000..92ff79a9 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/inst_merge_laundering.sql @@ -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, + '【洗替】4:メルク施設コードの洗替_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, + '【洗替】4:メルク施設コードの洗替_B① 終了'); + diff --git a/rds_mysql/stored_procedure/src05/sales_lau_delete.sql b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql new file mode 100644 index 00000000..652db718 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_delete.sql @@ -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 \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql new file mode 100644 index 00000000..270495e7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/sales_lau_upsert.sql @@ -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 \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql new file mode 100644 index 00000000..4ef2075e --- /dev/null +++ b/rds_mysql/stored_procedure/src05/v_inst_merge_laundering.sql @@ -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, + '【洗替】3: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, + '【洗替】3:HCO施設コードの洗替① 終了' + ); + +END \ No newline at end of file diff --git a/rds_mysql/stored_procedure/src05/whs_org_laundering.sql b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql new file mode 100644 index 00000000..e3ce53c7 --- /dev/null +++ b/rds_mysql/stored_procedure/src05/whs_org_laundering.sql @@ -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 \ No newline at end of file