From 7c2e10fe3b0edf3ee61dfb95460a35e8ca39f82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Mon, 17 Apr 2023 16:09:48 +0900 Subject: [PATCH] =?UTF-8?q?COM=5F=E8=96=AC=E5=B1=80=E3=80=80=E6=96=B0?= =?UTF-8?q?=E8=A6=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../table_mapper/concrete/com_pharm_mapper.py | 312 ++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_pharm_mapper.py diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_pharm_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_pharm_mapper.py new file mode 100644 index 00000000..13ea6033 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_pharm_mapper.py @@ -0,0 +1,312 @@ +from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ + UltmarcTableMapper +from src.batch.ultmarc.utmp_tables.tables.com_pharm import ComPharm + +class ComPharmMapper(UltmarcTableMapper): + """レイアウト区分102: COM_薬局 登録処理 """ + + # レコード存在確認SQL + RECORD_EXISTS_QUERY = """\ + SELECT + COUNT(*) AS count_num + FROM + src05.com_pharm + WHERE + dcf_dsf_inst_cd = :dcf_dsf_inst_cd + """ + # データ登録用SQL + INSERT_QUERY = """\ + INSERT INTO src05.com_pharm + ( + dcf_dsf_inst_cd, + inst_div_cd, + addr_unknown_reason_cd, + form_inst_name_kana, + inst_name_kana, + form_inst_name_kanji, + inst_name_kanji, + close_flg, + estab_sche_flg, + close_start_ym, + estab_sche_ym, + inst_repre_kana, + inst_repre, + phone_number_non_flg, + unconf_flg, + inst_phone_number, + inst_addr_kana, + inst_addr, + postal_number, + village_cd, + prefc_cd, + city_cd, + addr_display_number, + addr_cnt_kana, + addr_cnt, + manage_cd, + delete_sche_reason_cd, + dup_opp_cd, + supervising_pharmacist, + supervising_pharmacist_kana, + franchise_hq_cd, + inst_pharm_div, + abolish_ymd, + delete_flg, + sys_regist_date, + regist_prgm_id, + sys_update_date, + update_prgm_id + ) + VALUES ( + :dcfdsf_inst_cd, + :hpclass_code, + :hp_addr_lost_code, + :hp_name_kana, + :hp_ryaku_name_kana, + :hp_name, + :hp_ryaku_name, + :close_flg, + :open_flag, + :close_yearmonth, + :open_yearmonth, + :president_Kana, + :president, + :tel_nothing_flag, + :unconf_flg, + :tel_number, + :addr_kana, + :addr, + :zip_code, + :village_code, + :prefc_cd, + :city_cd, + :addr_number, + :addr_count_kana, + :addr_count, + :mgtclass_code, + :del_cd, + :dup_opp_cd, + :pharmacist, + :pharmacist_kana, + :franchise_hq_cd, + 2, + NULL, + 0, + :execute_datetime, + :program_name, + :execute_datetime, + :program_name + ) + """ + # 更新用SQL + UPDATE_QUERY = """\ + UPDATE src05.com_pharm + SET + {update_columns} + sys_regist_date = :execute_datetime, + regist_prgm_id = :program_name, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + dcf_dsf_inst_cd = :dcf_dsf_inst_cd + """ + + # 修正区分が「C(削除)」の場合の更新SQL + # 廃業年月日 ← メンテナンス年月日 + LOGICAL_DELETE_QUERY = """\ + UPDATE + src05.com_pharm + SET + abolish_ymd = :maintdate, + delete_sche_reason_cd = :del_cd, + sys_update_date = :execute_date_str_ymd, + update_prgm_id = :program_name + WHERE + dcf_dsf_inst_cd = :dcf_dsf_inst_cd + """ + record: ComPharm + + def __init__(self, record: list[str], db) -> None: + super().__init__(record, db, ComPharm) + program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている) + # モジュール名をクエリパラメータに設定 + self.query_parameter['program_name'] = program_name + # 読み込んだレコード値もクエリパラメータに追加 + self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()} + + def make_query(self): + # 修正区分がC(削除)の場合、論理削除 + if self.record.maint_flag == 'C': + self.queries.append(self.LOGICAL_DELETE_QUERY) + return + + # レコードの存在確認 + record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter) + # 存在しない場合はInsert + if record_count[0]['count_num'] == 0: + self.queries.append(self.INSERT_QUERY) + return + + # 追加、更新の場合 + update_columns = ','.join(self.__make_upsert_query(self)) + if len(update_columns) > 0: + # 何かしら更新がある場合、末尾にカンマを付けてSET句を完成させる + update_columns += ',' + + update_query = self.UPDATE_QUERY.format( + update_columns=update_columns + ) + + self.queries.append(update_query) + return + + def __make_upsert_query(self): + set_clauses = [] # 設定項目 + + #### 設定項目の判定 #### + # DCFDSF施設コード(主キーなので更新対象外) + + # 施設区分コード + if self.record.hpclass_code != '': + set_clauses.append('inst_div_cd = :hpclass_code') + + # 住所不明理由コード + if self.record.hp_addr_lost_code != '': + set_clauses.append('addr_unknown_rea:hp_addr_lost_code') + self.query_parameter['hp_addr_lost_code'] = None if self.record.hp_addr_lost_code == '@' else self.record.hp_addr_lost_code + + # 正式施設名カナ + if self.record.hp_name_kana != '': + set_clauses.append('form_inst_name_kana = :hp_name_kana') + + # 施設名カナ + if self.record.hp_ryaku_name_kana != '': + set_clauses.append('inst_name_kana = :hp_ryaku_name_kana') + + # 正式施設名(漢字) + if self.record.hp_name != '': + set_clauses.append('form_inst_name_kanji = :hp_name') + + # 施設名(漢字) + if self.record.hp_ryaku_name != '': + set_clauses.append('inst_name_kanji = :hp_ryaku_name') + + # 休院フラグ、休院予定年月 + if len(self.record.close_flg + self.record.close_yearmonth) > 0: + set_clauses.append('close_flg = :close_flg') + set_clauses.append('close_start_ym = :close_yearmonth') + if self.record.close_flg == '@': + self.query_parameter['close_flg'] = None + self.query_parameter['close_yearmonth'] = None + else: + self.record.close_flg + self.record.close_yearmonth + + # 開業予定フラグ、開業予定年月 + if len(self.record.open_flag + self.record.open_yearmonth) > 0: + set_clauses.append('estab_sche_flg = :open_flag') + set_clauses.append('estab_sche_ym = :open_yearmonth') + if self.record.open_flag == '@': + self.query_parameter['open_flag'] = None + self.query_parameter['open_yearmonth'] = None + else: + self.record.open_flag + self.record.open_yearmonth + + # 施設代表者カナ + if self.record.president_Kana != '': + set_clauses.append('inst_repre_kana = :president_Kana') + self.query_parameter['president_Kana'] = None if self.record.president_Kana == '@' else self.record.president_Kana + + # 施設代表者 ※@が大文字 + if self.record.president != '': + set_clauses.append('inst_repre = :president') + self.query_parameter['president'] = None if self.record.president == '@' else self.record.president + + # 電話番号なしフラグ + if self.record.tel_nothitel_nothing_flagng_flag_flg != '': + set_clauses.append('phone_number_non = :tel_nothing_flag') + self.query_parameter['tel_nothing_flag'] = None if self.record.tel_nothing_flag == '@' else self.record.tel_nothing_flag + + # 未確認フラグ + if self.record.unconf_flg != '': + set_clauses.append('unconf_flg = :unconf_flg') + self.query_parameter['unconf_flg'] = None if self.record.unconf_flg == '@' else self.record.unconf_flg + + # 施設電話番号 + if self.record.tel_number != '': + set_clauses.append('inst_phone_number = :tel_number') + self.query_parameter['tel_number'] = None if self.record.tel_number == '@' else self.record.tel_number + + # 施設住所カナ + if self.record.addr_kana != '': + set_clauses.append('inst_addr_kana = :addr_kana') + + # 施設住所 + if self.record.addr != '': + set_clauses.append('inst_addr = :addr') + + # 郵便番号 + if self.record.zip_code != '': + set_clauses.append('postal_number = :zip_code') + + # 町字コード(住所コード) + if len(self.record.village_code) > 0: + set_clauses.append('village_cd = :village_code') # 住所コード + set_clauses.append('prefc_cd = :prefc_cd') # 都道府県コード + set_clauses.append('city_cd = :city_cd') # 市区町村コード + self.record.village_code + self.record.prefc_cd + self.record.city_cd + + # 住所表示番号 + if self.record.addr_number != '': + set_clauses.append('addr_display_number = :addr_number') + self.query_parameter['addr_number'] = None if self.record.addr_number == '@' else self.record.addr_number + + # 住所カウント(集合項目である県コードが入っていればカウントをセットする) + if len(self.record.prefc_cd) > 0: + set_clauses.append('addr_cnt = :addr_count') # 住所カウント + set_clauses.append('addr_cnt_kana = :addr_count_kana') # 住所カウントカナ + self.record.addr_count + self.record.addr_count_kana + + # 経営体コード + if self.record.mgtclass_code != '': + set_clauses.append('manage_cd = :mgtclass_code') + self.query_parameter['mgtclass_code'] = None if self.record.mgtclass_code == '@' else self.record.mgtclass_code + + # 削除予定理由コード + if self.record.del_cd != '': + set_clauses.append('delete_sche_reason_cd = :del_cd') + self.query_parameter['del_cd'] = None if self.record.del_cd == '@' else self.record.del_cd + + # 重複時相手先コード + if self.record.dup_opp_cd != '': + set_clauses.append('dup_opp_cd = :dup_opp_cd') + self.query_parameter['dup_opp_cd'] = None if self.record.dup_opp_cd == '@' else self.record.dup_opp_cd + + # 管理薬剤師名(漢字) + if self.record.pharmacist != '': + set_clauses.append('supervising_pharmacist = :pharmacist') + self.query_parameter['pharmacist'] = None if self.record.pharmacist == '@' else self.record.pharmacist + + # 管理薬剤師名(カナ) + if self.record.pharmacist_kana != '': + set_clauses.append('supervising_pharmacist_kana = :pharmacist_kana') + self.query_parameter['pharmacist_kana'] = None if self.record.pharmacist_kana == '@' else self.record.pharmacist_kana + + # チェーン店本部コード + if self.record.franchise_hq_id != '': + set_clauses.append('franchise_hq_cd = :franchise_hq_cd') + if self.record.franchise_hq_id == '@': + self.query_parameter['close_flg'] = None + self.query_parameter['close_yearmonth'] = None + self.query_parameter['franchise_hq_yobi'] = None + else: + self.record.franchise_hq_id + self.record.franchise_hq_cd + self.record.franchise_hq_yobi + + + return set_clauses \ No newline at end of file