diff --git a/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py b/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py index c792254a..982e3f60 100644 --- a/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py +++ b/ecs/jskult-batch/src/batch/trn_result_data_bio_lot.py @@ -84,13 +84,15 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): db.connect() db.begin() # 生物由来ロット分解データの未確定データを削除する - self._delete_not_confirm_data_in_bio_sales_lot(db) + self._delete_not_confirm_data_in_trn_result_data_bio_lot(db) # 生物由来ロット分解データを作成する - self._insert_bio_sales_lot(db) + self._insert_trn_result_data_bio_lot(db) # 生物由来ロット分解データの不要レコードを削除する self._delete_empty_lot_record(db) # 製造ロット管理番号マスタから有効期限を生物由来ロット分解データにセットする self._set_expr_dt_from_lot_num_mst(db) + # 施設情報を生物由来ロット分解データにセットする + self._set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(db) db.commit() logger.info('生物由来卸販売ロット分解処理終了') return @@ -122,7 +124,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): INNER JOIN src07.trn_result_data_bio AS bio ON bio.account_ym = lot.account_ym AND bio.seq_no = lot.seq_no - AND IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() + AND IFNULL(bio.upd_date, bio.ins_date) >= src07.get_syor_date() """ res = db.execute(sql) except Exception as e: @@ -166,6 +168,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): bio.cls_whlslr_nm AS cls_whlslr_nm, bio.cls_prod_nm AS cls_prod_nm, bio.cnvs_prod_cd AS cnvs_prod_cd, + -- 3レコードに分解する CASE conv.conv_cd WHEN 1 THEN bio.cnvs_lot_sales_qty_1 WHEN 2 THEN bio.cnvs_lot_sales_qty_2 @@ -173,6 +176,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): END AS cnvs_lot_sales_qty, bio.cnvs_inst_cd AS cnvs_inst_cd, bio.cls_inst_nm AS cls_inst_nm, + -- COM_施設 or COM_薬局 or メルク独自施設マスタから後ほどセット NULL AS inst_addr, NULL AS inst_tel, bio.result_cd AS result_cd, @@ -192,14 +196,14 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): WHEN '3' THEN 'VAN-Web' WHEN 'S' THEN 'SCSK-VAN' END AS if_kind, - -- 製品コード、ロット番号でロットマスタよりセット - bio.ck_last_dt_txt AS ck_last_dt_txt + -- 製品コード、ロット番号でロットマスタより後ほどセット + NULL AS ck_last_dt_txt FROM src07.trn_result_data_bio bio -- 生物由来変換マスタ CROSS JOIN src07.bio_conv conv WHERE - IFNULL(DATE(bio.upd_date), DATE(bio.ins_date)) >= src07.get_syor_date() + IFNULL(bio.upd_date, bio.ins_date) >= src07.get_syor_date() """ db.execute(sql) @@ -210,7 +214,7 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): def _delete_empty_lot_record(self, db: Database): - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除開始') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除開始') try: sql = """ DELETE FROM src07.trn_result_data_bio_lot lot @@ -220,9 +224,9 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): """ res = db.execute(sql) except Exception as e: - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に失敗') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に失敗') raise e - logger.info('生物由来ロット分解データの製造番号が空のレコードを削除に成功') + logger.info('生物由来ロット分解データのロット番号が空のレコードを削除に成功') def _set_inst_info_from_com_inst_or_com_pharm_or_mst_inst_merck(self, db: Database): @@ -230,71 +234,57 @@ class TrnResultDataBioLot(JskultBatchEntrypoint): try: sql = """ UPDATE - src07.trn_result_data_bio_lot lot - SET - -- 施設住所 - inst_addr = ( - SELECT - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN ci.inst_addr - WHEN '03' THEN cp.inst_addr - ELSE mim.addr2_nm_kj - END AS inst_addr - FROM src07.trn_result_data_bio bio + src07.trn_result_data_bio_lot bio -- COM_施設 LEFT OUTER JOIN src05.com_inst ci - ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd + ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd -- COM_薬局 LEFT OUTER JOIN src05.com_pharm cp - ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd + ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd -- 独自施設マスタ LEFT OUTER JOIN src07.mst_inst_merck mim - ON bio.cnvs_inst_cd = mim.inst_cd - - - ), - -- 施設電話番号 - inst_tel = ( - SELECT - CASE LEFT(bio.cnvs_inst_cd, 2) - WHEN '00' THEN ci.inst_phone_number - WHEN '03' THEN cm.inst_phone_number - ELSE mim.tel_no - END AS inst_tel - FROM src07.trn_result_data_bio bio - -- COM_施設 - LEFT OUTER JOIN src05.com_inst ci - ON bio.cnvs_inst_cd = ci.dcf_dsf_inst_cd - -- COM_薬局 - LEFT OUTER JOIN src05.com_pharm cp - ON bio.cnvs_inst_cd = cp.dcf_dsf_inst_cd - -- 独自施設マスタ - LEFT OUTER JOIN src07.mst_inst_merck mim - ON bio.cnvs_inst_cd = mim.inst_cd - ) + ON bio.cnvs_inst_cd = mim.inst_cd + AND DATE_FORMAT(bio.cnvs_sales_dt, '%Y%m') BETWEEN mim.eff_start_ym + AND mim.eff_end_ym + -- 施設住所 + SET lot.inst_addr = ( + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_addr + WHEN '03' THEN cp.inst_addr + ELSE mim.addr2_nm_kj + END + ), + -- 施設電話番号 + lot.inst_tel = ( + CASE LEFT(bio.cnvs_inst_cd, 2) + WHEN '00' THEN ci.inst_phone_number + WHEN '03' THEN cm.inst_phone_number + ELSE mim.tel_no + END + ) """ res = db.execute(sql) except Exception as e: - logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット失敗') raise e - logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット開始') + logger.info('COM_施設 or COM_薬局 or メルク独自施設マスタから施設情報を生物由来ロット分解データにセット成功') - def _set_expr_dt_from_lot_num_mst(self, db: Database): - # 製造ロット管理番号マスタから有効期限をセット - logger.info('製造ロット管理番号マスタから有効期限をセット開始') + def _set_ck_last_dt_txt_from_customer_lotno_all(self, db: Database): + # ロットマスタから有効期限をセット + logger.info('ロットマスタから有効期限をセット開始') try: sql = """ UPDATE - src07.bio_sales_lot bio - LEFT OUTER JOIN src05.lot_num_mst lot - ON bio.mkr_cd = lot.ser_num - AND bio.rec_lot_num = lot.lot_num + src07.trn_result_data_bio_lot bio + LEFT OUTER JOIN src07.customer_lotno_all cla + ON bio.cnvs_prod_cd = cla.material_cd + AND bio.cnvs_lot_no = cla.lot_no_txt SET - bio.expr_dt = lot.expr_dt + bio.ck_last_dt_txt = cla.ck_last_dt_txt """ res = db.execute(sql) except Exception as e: - logger.info('製造ロット管理番号マスタから有効期限をセットに失敗') + logger.info('ロットマスタから有効期限をセット失敗') raise e - logger.info('製造ロット管理番号マスタから有効期限をセットに成功') + logger.info('ロットマスタから有効期限をセット成功')