From 16a62a9cfc431c6c309580ed56d0d47e1b948e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Tue, 6 Jun 2023 11:43:18 +0900 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E5=B8=AB=E6=83=85=E5=A0=B1=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=E7=B5=90=E6=9E=9C=EF=BC=91=E4=BB=B6=E8=A1=A8=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/ultmarc.py | 39 +- .../src/model/db/ultmarc_doctor_info.py | 18 + .../src/model/db/ultmarc_doctor_wrkplace.py | 15 + .../model/db/ultmarc_doctor_wrkplace_his.py | 16 + .../src/model/db/ultmarc_sosiety.py | 10 + .../model/db/ultmarc_specialist_license.py | 10 + .../src/model/db/ultmarc_trt_course.py | 9 + .../view/ultmarc_doctor_info_view_model.py | 97 ++++ .../repositories/ultmarc_doctor_repository.py | 39 +- .../ultmarc_dr_wrkplace_his_repository.py | 39 ++ .../ultmarc_dr_wrkplace_repository.py | 39 ++ .../ultmarc_sosiety_repository.py | 30 ++ .../ultmarc_specialist_license_repository.py | 31 ++ .../ultmarc_trt_course_repository.py | 31 ++ .../src/services/ultmarc_view_service.py | 53 +- ecs/jskult-webapp/src/templates/docInfo.html | 486 ++++++++++++++++++ .../src/templates/docSearch.html | 24 +- 17 files changed, 969 insertions(+), 17 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py create mode 100644 ecs/jskult-webapp/src/templates/docInfo.html diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index 133f6c64..399ca6e4 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -7,10 +7,8 @@ from starlette import status from src.depends.services import get_service from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel -from src.model.view.bio_view_model import BioViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService -from src.services.bio_view_service import BioViewService from src.services.ultmarc_view_service import UltmarcViewService from src.services.session_service import set_session from src.system_var import constants @@ -97,3 +95,40 @@ def search_doc( headers={'session_key': session_key} ) return templates_response + + +@router.get('/docInfo') +def ultmarc_doctor_info_view( + request: Request, + id: str, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # if batch_status_service.is_batch_processing(): + # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) + + # 医師情報の取得 + ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'docInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py new file mode 100644 index 00000000..6f20dfb9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_info.py @@ -0,0 +1,18 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorInfoDBModel(BaseDBModel): + dcf_pcf_dr_cd: Optional[str] + dr_name: Optional[str] + dr_name_kana: Optional[str] + sex: Optional[str] + birthday: Optional[str] + alma: Optional[str] + hometown: Optional[str] + grad_y: Optional[str] + drday_y: Optional[str] + estab_y: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py new file mode 100644 index 00000000..c8f555cc --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace.py @@ -0,0 +1,15 @@ +from typing import Optional +from datetime import date + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + inst_name_kanji: Optional[str] + blng_sec_name: Optional[str] + univ_post_name: Optional[str] + post_name: Optional[str] + aply_start_ymd: Optional[date] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py new file mode 100644 index 00000000..3fe3de38 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_his.py @@ -0,0 +1,16 @@ +from typing import Optional +from datetime import date + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceHisDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + inst_name_kanji: Optional[str] + blng_sec_name: Optional[str] + univ_post_name: Optional[str] + post_name: Optional[str] + aply_start_ymd: Optional[date] + aply_end_ymd: Optional[date] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py b/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py new file mode 100644 index 00000000..ab76e4db --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_sosiety.py @@ -0,0 +1,10 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcSosietyDBModel(BaseDBModel): + sosiety_cd: Optional[str] + sosiety_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py b/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py new file mode 100644 index 00000000..8cccb4eb --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_specialist_license.py @@ -0,0 +1,10 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcSpecialistLicenseDBModel(BaseDBModel): + specialist_cd: Optional[str] + specialist_license_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py new file mode 100644 index 00000000..23908fce --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcTrtCoursedbmodel(BaseDBModel): + trt_course_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py new file mode 100644 index 00000000..1cfbcf5f --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -0,0 +1,97 @@ +import json +from collections import OrderedDict +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel +from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel +from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel +from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel + +from src.system_var import environment + + +class UltmarcDoctorInfoViewModel(BaseModel): + subtitle: str = '医師情報' + is_batch_processing: Optional[bool] + doctor_info_data: Optional[UltmarcDoctorInfoDBModel] + trt_coursed_data: Optional[list[UltmarcTrtCoursedbmodel]] + sosiety_data: Optional[list[UltmarcSosietyDBModel]] + specialist_license_data: Optional[list[UltmarcSpecialistLicenseDBModel]] + doctor_wrkplace_data: Optional[list[UltmarcDoctorWrkplaceDBModel]] + doctor_wrkplace_his_data: Optional[list[UltmarcDoctorWrkplaceHisDBModel]] + + def ultmarc_data_json_str(self): + def date_handler(obj): + return obj.isoformat() if hasattr(obj, 'isoformat') else obj + return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + + # 医師コード + def is_input_dcf_pcf_dr_cd(self): + return self.doctor_info_data.dcf_pcf_dr_cd or '' + + # 氏名(漢字) + def is_input_dr_name(self): + return self.doctor_info_data.dr_name or '' + + # 氏名(かな・カナ) + def is_input_dr_name_kana(self): + return self.doctor_info_data.dr_name_kana or '' + + # 性別 + def is_input_sex(self): + return self.doctor_info_data.sex or '' + + # 出身大学 + def is_input_alma(self): + return self.doctor_info_data.alma or '' + + # 出身県 + def is_input_hometown(self): + return self.doctor_info_data.hometown or '' + + # 卒年 + def is_input_grad_y(self): + return self.doctor_info_data.grad_y or '' + + # 登録年 + def is_input_drday_y(self): + return self.doctor_info_data.drday_y or '' + + # 開業年 + def is_input_estab_y(self): + return self.doctor_info_data.estab_y or '' + + def is_input_birthday_fromat(self): + return self._format_date_string(self.doctor_info_data.birthday) + + def is_input_trt_course_data_size(self): + return len(self.trt_coursed_data) + + def is_data_string_empty_fromat(self, data_string): + return data_string or '' + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + + def _format_date_string(self, date_string): + if date_string is None: + return '' + date = datetime.strptime(date_string, '%Y%m%d') + return date.strftime('%Y/%m/%d') + + def _selected_value(self, form_value: str, current_value: str): + return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index f9293893..60f1543d 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -2,6 +2,7 @@ from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel +from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -15,7 +16,7 @@ class UltmarcDoctorRepository(BaseRepository): com_inst.form_inst_name_kanji, com_inst.dcf_dsf_inst_cd, com_blng_sec.blng_sec_name, - com_trt_course.trt_course_name, + GROUP_CONCAT(com_trt_course.trt_course_name separator ' / ') AS trt_course_name, com_post.form_post_name, com_alma.alma, com_dr.grad_y, @@ -33,6 +34,7 @@ class UltmarcDoctorRepository(BaseRepository): LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd WHERE {where_clause} + GROUP BY com_dr.dcf_pcf_dr_cd ORDER BY com_dr.dcf_pcf_dr_cd, com_dr_wrkplace.dcf_dsf_inst_cd, @@ -128,3 +130,38 @@ class UltmarcDoctorRepository(BaseRepository): where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str + + FETCH_ONE_SQL = """\ + SELECT + com_dr.dcf_pcf_dr_cd, + com_dr.dr_name, + com_dr.dr_name_kana, + com_sex.sex, + com_dr.birthday, + com_alma.alma, + com_hometown.hometown, + com_dr.grad_y, + com_dr.drday_y, + com_dr.estab_y + FROM src05.com_dr + LEFT JOIN src05.com_sex ON com_dr.sex_cd = com_sex.sex_cd + LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd + LEFT JOIN src05.com_hometown ON com_dr.hometown_cd = com_hometown.hometown_cd + WHERE dcf_pcf_dr_cd = :id + """ + + def fetch_one(self, id) -> UltmarcDoctorInfoDBModel: + try: + self._database.connect() + query = self.FETCH_ONE_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorInfoDBModel(**r) for r in result] + if len(models) == 0: + return None + return models[0] + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py new file mode 100644 index 00000000..14f0de45 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py @@ -0,0 +1,39 @@ +from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcDoctorWrkplaceHisRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name AS univ_post_name, + post.form_post_name AS post_name, + com_dr_wrkplace.aply_start_ymd + FROM src05.com_dr + LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd + LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd + LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_dr_wrkplace.aply_start_ymd DESC + """ + + def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceHisDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceHisDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py new file mode 100644 index 00000000..fd1295d7 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py @@ -0,0 +1,39 @@ +from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcDoctorWrkplaceRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name AS univ_post_name, + post.form_post_name AS post_name, + com_dr_wrkplace.aply_start_ymd + FROM src05.com_dr + LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd + LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd + LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_dr_wrkplace.aply_start_ymd DESC + """ + + def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py new file mode 100644 index 00000000..e3c9ac13 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py @@ -0,0 +1,30 @@ +from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcSosietyRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT com_sosiety.sosiety_cd, com_sosiety.sosiety_name + FROM src05.com_dr + LEFT JOIN src05.com_dr_sosiety ON com_dr.dcf_pcf_dr_cd = com_dr_sosiety.dcf_pcf_dr_cd + LEFT JOIN src05.com_sosiety ON com_dr_sosiety.sosiety_cd = com_sosiety.sosiety_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_sosiety.sosiety_cd + """ + + def fetch_many(self, id) -> list[UltmarcSosietyDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcSosietyDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py new file mode 100644 index 00000000..35632081 --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcSpecialistLicenseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT + com_specialist_license.specialist_cd, com_specialist_license.specialist_license_name + FROM src05.com_dr + LEFT JOIN src05.com_sp_field ON com_dr.dcf_pcf_dr_cd = com_sp_field.dcf_pcf_dr_cd + LEFT JOIN src05.com_specialist_license ON com_sp_field.specialist_cd = com_specialist_license.specialist_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_specialist_license.specialist_cd + """ + + def fetch_many(self, id) -> UltmarcSpecialistLicenseDBModel: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcSpecialistLicenseDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py new file mode 100644 index 00000000..f50fc02a --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.repositories.base_repository import BaseRepository + + +class UltmarcTrtCourseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT trt_course_name + FROM src05.com_dr + LEFT JOIN src05.com_dr_trt_course ON com_dr.dcf_pcf_dr_cd = com_dr_trt_course.dcf_pcf_dr_cd + LEFT JOIN src05.com_trt_course ON com_dr_trt_course.trt_course_cd = com_trt_course.trt_course_cd + WHERE com_dr.dcf_pcf_dr_cd = :id + ORDER BY com_trt_course.trt_course_cd + """ + + def fetch_many(self, id) -> list[UltmarcTrtCoursedbmodel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + + models = [UltmarcTrtCoursedbmodel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 140863e7..1b207c5e 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -9,9 +9,15 @@ from src.aws.s3 import S3Client from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel +from src.model.view.ultmarc_doctor_info_view_model import UltmarcDoctorInfoViewModel from src.repositories.base_repository import BaseRepository from src.repositories.prefc_master_repository import PrefcMasterRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository +from src.repositories.ultmarc_trt_course_repository import UltmarcTrtCourseRepository +from src.repositories.ultmarc_sosiety_repository import UltmarcSosietyRepository +from src.repositories.ultmarc_dr_wrkplace_repository import UltmarcDoctorWrkplaceRepository +from src.repositories.ultmarc_dr_wrkplace_his_repository import UltmarcDoctorWrkplaceHisRepository +from src.repositories.ultmarc_specialist_license_repository import UltmarcSpecialistLicenseRepository from src.services.base_service import BaseService from src.system_var import constants, environment @@ -19,16 +25,31 @@ from src.system_var import constants, environment class UltmarcViewService(BaseService): REPOSITORIES = { 'ultmarc_doctor_repository': UltmarcDoctorRepository, - 'prefc_repository': PrefcMasterRepository + 'prefc_repository': PrefcMasterRepository, + 'ultmarc_trt_course_repository': UltmarcTrtCourseRepository, + 'ultmarc_sosiety_repository': UltmarcSosietyRepository, + 'ultmarc_doctor_wrkplace_repository': UltmarcDoctorWrkplaceRepository, + 'ultmarc_doctor_wrkplace_his_repository': UltmarcDoctorWrkplaceHisRepository, + 'ultmarc_specialist_license_repository': UltmarcSpecialistLicenseRepository } ultmarc_doctor_repository: UltmarcDoctorRepository prefc_repository: PrefcMasterRepository + ultmarc_trt_course_repository: UltmarcTrtCourseRepository + ultmarc_sosiety_repository: UltmarcSosietyRepository + ultmarc_doctor_wrkplace_repository: UltmarcDoctorWrkplaceRepository + ultmarc_doctor_wrkplace_his_repository: UltmarcDoctorWrkplaceHisRepository + ultmarc_specialist_license_repository: UltmarcSpecialistLicenseRepository def __init__(self, repositories: dict[str, BaseRepository], clients: dict[str, AWSAPIClient]) -> None: super().__init__(repositories, clients) self.ultmarc_doctor_repository = repositories['ultmarc_doctor_repository'] self.prefc_repository = repositories['prefc_repository'] + self.ultmarc_trt_course_repository = repositories['ultmarc_trt_course_repository'] + self.ultmarc_sosiety_repository = repositories['ultmarc_sosiety_repository'] + self.ultmarc_doctor_wrkplace_repository = repositories['ultmarc_doctor_wrkplace_repository'] + self.ultmarc_doctor_wrkplace_his_repository = repositories['ultmarc_doctor_wrkplace_his_repository'] + self.ultmarc_specialist_license_repository = repositories['ultmarc_specialist_license_repository'] def prepare_ultmarc_doctor_view( self, @@ -46,3 +67,33 @@ class UltmarcViewService(BaseService): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) return ultmarc_doctor_data + + def info_ultmarc_doctor_view( + self, + id, + session: UserSession + ) -> UltmarcDoctorInfoViewModel: + + # 医師情報画面の表示データ取得 + # 医師情報を取得 + doctor_info = self.ultmarc_doctor_repository.fetch_one(id) + # 診療科目情報を取得 + trt_course = self.ultmarc_trt_course_repository.fetch_many(id) + # 所属学会情報を取得 + sosiety = self.ultmarc_sosiety_repository.fetch_many(id) + # 所属学会専門医情報を取得 + specialist_license = self.ultmarc_specialist_license_repository.fetch_many(id) + # 勤務先情報を取得 + wrkplace = self.ultmarc_doctor_wrkplace_repository.fetch_many(id) + # 勤務先履歴情報を取得 + wrkplace_his = self.ultmarc_doctor_wrkplace_his_repository.fetch_many(id) + + ultmarc = UltmarcDoctorInfoViewModel( + doctor_info_data=doctor_info, + trt_coursed_data=trt_course, + sosiety_data=sosiety, + specialist_license_data=specialist_license, + doctor_wrkplace_data=wrkplace, + doctor_wrkplace_his_data=wrkplace_his + ) + return ultmarc diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html new file mode 100644 index 00000000..e9214447 --- /dev/null +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -0,0 +1,486 @@ + + + + {% with subtitle = ultmarc.subtitle %} + {% include '_header.html' %} + {% endwith %} + 医師情報 + + + + + + + + + + + + + + + + + + +

医師情報

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
医師コード:氏名(漢字):氏名(カナ):
性別:生年月日:
+ 出身大学: + + 出身県: + + 卒年: + + 登録年: + + 開業年: + +
+ 診療科目: + + {% for trt_coursed_data in ultmarc.trt_coursed_data %} + + {% endfor %} + + + + {% for i in range(5-ultmarc.is_input_trt_course_data_size())%} + + {% endfor %} + +
+ + + + + + + + +
+

所属学会

+
+ + + + + + + + + + {% for sosiety_data in ultmarc.sosiety_data %} + + + + + {% endfor %} + +
コード所属学会
{{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_cd)}}{{ultmarc.is_data_string_empty_fromat(sosiety_data.sosiety_name)}}
+
+
+

所属学会専門医

+
+ + + + + + + + + {% for specialist_license_data in ultmarc.specialist_license_data %} + + + + + {% endfor %} + + +
コード専門医資格名
{{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_cd)}}{{ultmarc.is_data_string_empty_fromat(specialist_license_data.specialist_license_name)}}
+
+
+ +

勤務先履歴

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + + + {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + + + + + + + + + + + +
ULT施設コード勤務先略名所属部科名役職名職位開始年月日終了年月日
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}
+
+ + + + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 475578fa..2168aa3e 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -20,19 +20,17 @@ - - - - - - - -

医師検索一覧

- {% if ultmarc.is_batch_processing %} -
日次バッチ処理中のため、データが正しく表示されない可能性があります
- {% endif %} -
- + + + + + + +

医師検索一覧

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} +