浏览代码

1. 환자 신규등록 - 외국인 구분추가, 담당자 ID 선택 추가
2. 환자 리스트 호실로도 검색 되도록 수정
3. 센터 관리 - 입소자, 퇴소자, 지정병원 이송, 협력 병원 표출 수정

huiwon.seo 4 年之前
父节点
当前提交
27bca55d58

+ 59 - 1
src/main/java/com/lemon/lifecenter/controller/PatientController.java

@@ -20,7 +20,6 @@ import org.apache.poi.ss.usermodel.IndexedColors;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.json.JSONObject;
 import org.slf4j.Logger;
@@ -44,8 +43,10 @@ import com.lemon.lifecenter.common.LifeCenterPaging;
 import com.lemon.lifecenter.common.LifeCenterSessionController;
 import com.lemon.lifecenter.dto.CenterInfoDTO;
 import com.lemon.lifecenter.dto.PatientDTO;
+import com.lemon.lifecenter.dto.StaffDTO;
 import com.lemon.lifecenter.service.CenterService;
 import com.lemon.lifecenter.service.PatientService;
+import com.lemon.lifecenter.service.StaffService;
 
 
 @Controller
@@ -58,6 +59,9 @@ public class PatientController extends LifeCenterController {
     @Autowired
     private CenterService centerService;
     
+    @Autowired
+    private StaffService staffService;
+    
     @Autowired
     private LifeCenterConfigVO config;
     
@@ -142,9 +146,26 @@ public class PatientController extends LifeCenterController {
             centerName = centerService.selectCenterInfoOne( dto ).getCenterName();
         }
         
+        StaffDTO staffDTO = new StaffDTO();
+        List<StaffDTO> staffList = new ArrayList<StaffDTO>();
+        
+        staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
+        staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
+        staffDTO.setUseYn( "" );
+        
+        int staffCount = staffService.selectMemberListCount( staffDTO );
+        
+        if( staffCount > 0 ) {
+            staffDTO.setLimit( 0 );
+            staffDTO.setLimitMax( staffCount );
+            
+            staffList = staffService.selectMemberList( staffDTO );
+        }
+        
         mv.addObject( "centerName", centerName );
         mv.addObject( "centerCount", centerCount );
         mv.addObject( "actionType", "new" );
+        mv.addObject( "staffList", staffList );
         
         return mv;
     }
@@ -230,12 +251,30 @@ public class PatientController extends LifeCenterController {
             strDisease = LifeCenterFunction.getDisease(dto);
         }
         
+        StaffDTO staffDTO = new StaffDTO();
+        List<StaffDTO> staffList = new ArrayList<StaffDTO>();
+        
+        staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
+        staffDTO.setCenterCode( Integer.valueOf( dto.getCenterCode() ) );
+        staffDTO.setUseYn( "" );
+        
+        int staffCount = staffService.selectMemberListCount( staffDTO );
+        
+        if( staffCount > 0 ) {
+            staffDTO.setLimit( 0 );
+            staffDTO.setLimitMax( staffCount );
+            
+            staffList = staffService.selectMemberList( staffDTO );
+        }
+        
         mv.addObject( "disease", strDisease );
         mv.addObject( "symptom", strSymptom );
         mv.addObject( "patientIdx", patientIdx );
         mv.addObject( "enIdx", LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, String.valueOf( patientIdx ) ) );
         mv.addObject( "info", dto );
         
+        mv.addObject( "staffList", staffList );
+        
         return mv;
     }
     
@@ -301,9 +340,28 @@ public class PatientController extends LifeCenterController {
                 patientDTO.setBloodPressureLevelRel(bloodPressureLevel[1]);
             }
             
+            
+            StaffDTO staffDTO = new StaffDTO();
+            List<StaffDTO> staffList = new ArrayList<StaffDTO>();
+            
+            staffDTO.setGroupIdx( 2 ); //2설정 set 조회시 해당센터 모든 의료진 리스트표출
+            staffDTO.setCenterCode( Integer.valueOf( sesCenterCode ) );
+            staffDTO.setUseYn( "" );
+            
+            int staffCount = staffService.selectMemberListCount( staffDTO );
+            
+            if( staffCount > 0 ) {
+                staffDTO.setLimit( 0 );
+                staffDTO.setLimitMax( staffCount );
+                
+                staffList = staffService.selectMemberList( staffDTO );
+            }
+            
             mv.addObject( "centerName", centerName );
             mv.addObject( "centerCount", centerCount );
             
+            mv.addObject( "staffList", staffList );
+            
             mv.addObject( "patientIdx", patientIdx );
             mv.addObject( "patientData", patientDTO );
             mv.addObject( "actionType", "edit" );

+ 29 - 0
src/main/java/com/lemon/lifecenter/dto/CenterInfoDTO.java

@@ -25,9 +25,38 @@ public class CenterInfoDTO {
     private String startDate = "";
     private String endDate = "";
     
+    private int totalPatientH=0;
+    private int totalPatientD=0;
+    private int totalPatientT=0;
+    private int totalPatientE=0;
+    
     private int limit = 0;
     private int limitMax = 0;
     
+    public int getTotalPatientH() {
+        return totalPatientH;
+    }
+    public void setTotalPatientH(int totalPatientH) {
+        this.totalPatientH = totalPatientH;
+    }
+    public int getTotalPatientD() {
+        return totalPatientD;
+    }
+    public void setTotalPatientD(int totalPatientD) {
+        this.totalPatientD = totalPatientD;
+    }
+    public int getTotalPatientT() {
+        return totalPatientT;
+    }
+    public void setTotalPatientT(int totalPatientT) {
+        this.totalPatientT = totalPatientT;
+    }
+    public int getTotalPatientE() {
+        return totalPatientE;
+    }
+    public void setTotalPatientE(int totalPatientE) {
+        this.totalPatientE = totalPatientE;
+    }
     public String getNum() {
         return num;
     }

+ 15 - 1
src/main/java/com/lemon/lifecenter/dto/PatientDTO.java

@@ -117,10 +117,24 @@ public class PatientDTO {
     private String appetiteLossCheck="N";
     private String dizzinessCheck="N";
     
+    private String foreignerYn = "N";
+    private String managerId = "";
+    
     private int limit;
     private int limitMax;
     
-    
+    public String getForeignerYn() {
+        return foreignerYn;
+    }
+    public void setForeignerYn(String foreignerYn) {
+        this.foreignerYn = foreignerYn;
+    }
+    public String getManagerId() {
+        return managerId;
+    }
+    public void setManagerId(String managerId) {
+        this.managerId = managerId;
+    }
     public String getTemperature() {
         return temperature;
     }

+ 5 - 0
src/main/resources/mybatis/mapper/center/center.xml

@@ -109,6 +109,11 @@
                    M.PHONE_NUMBER                                AS staffPhoneNumber,
                    CI.CENTER_NUMBER                              AS centerNumber,
                    CI.TOTAL_PATIENT                              AS totalPatient,
+                   ( SELECT COUNT(*) FROM patient_care WHERE center_code = CI.center_code AND state = 'H' ) AS totalPatientH,
+                   ( SELECT COUNT(*) FROM patient_care WHERE center_code = CI.center_code AND state = 'D' ) AS totalPatientD,
+                   ( SELECT COUNT(*) FROM patient_care WHERE center_code = CI.center_code AND state = 'T' ) AS totalPatientT,
+                   ( SELECT COUNT(*) FROM patient_care WHERE center_code = CI.center_code AND state = 'E' ) AS totalPatientE,
+                   ( SELECT cooperative_name FROM cooperative_hospital WHERE cooperative_code = CI.cooperative_code ) AS cooperativeName,
                    CI.TOTAL_CAPACITY                             AS totalCapacity,
                    CI.TOTAL_STAFF                                AS totalStaff,
                    DATE_FORMAT(CI.CREATE_DATE, '%Y-%m-%d %H:%i') AS createDate

+ 16 - 6
src/main/resources/mybatis/mapper/patient/patient.xml

@@ -20,7 +20,9 @@
         </if>
         <if test='patientName != null and patientName != ""'>
             <![CDATA[
-               AND PATIENT_NAME LIKE CONCAT('%', #{patientName}, '%')
+               AND (    PATIENT_NAME LIKE CONCAT('%', #{patientName}, '%')
+                      OR ROOM_NUMBER LIKE CONCAT('%', #{patientName}, '%')
+                      OR WARD_NUMBER LIKE CONCAT('%', #{patientName}, '%') )
             ]]>
         </if>
         <if test='state == "ALL"'>
@@ -166,7 +168,9 @@
                    nose_check                                                          AS noseCheck,
                    etc_check                                                           AS etcCheck,
                    etc_content                                                         AS etcContent,
-                   DATE_FORMAT(pss.create_date, '%Y-%m-%d %H:%i')                      AS createDate
+                   DATE_FORMAT(pss.create_date, '%Y-%m-%d %H:%i')                      AS createDate,
+                   pc.foreigner_yn                                                     AS foreignerYn,
+                   pc.manager_id                                                       AS managerId
               FROM PATIENT_CARE pc
               LEFT JOIN patient_phr_latest pl
                 ON pl.patient_idx = pc.patient_idx
@@ -193,7 +197,9 @@
         </if>
         <if test='patientName != null and patientName != ""'>
             <![CDATA[
-                AND PATIENT_NAME LIKE CONCAT('%', #{patientName}, '%')
+                AND (    PATIENT_NAME LIKE CONCAT('%', #{patientName}, '%')
+                      OR ROOM_NUMBER LIKE CONCAT('%', #{patientName}, '%')
+                      OR WARD_NUMBER LIKE CONCAT('%', #{patientName}, '%') )
             ]]>
         </if>
         <if test='state == "ALL"'>
@@ -312,12 +318,12 @@
                    ( patient_name,      gender,      ward_number,     room_number,        hospitalization_date, state, 
                      center_code,       jumin,       patient_phone,   guardian_phone,     symptom_start_date,   confirmation_date,    disisolation_date, 
                      basal_disease_yn,  drug_yn,     drug_content,    pregnancy_status,   pregnancy_week,       id,                   pw, 
-                     create_date,       create_by,   update_by, servey_yn )
+                     create_date,       create_by,   update_by,       servey_yn,          foreigner_yn,         manager_id )
                       
             VALUES ( #{patientName},    #{gender},   #{wardNumber},   #{roomNumber},      #{hospitalizationDate}, #{state}, 
                      #{centerCode},     #{jumin},    #{patientPhone}, #{guardianPhone},   #{symptomStartDate},    #{confirmationDate},    #{disisolationDate}, 
                      #{basalDiseaseYn}, #{drugYn},   #{drugContent},  #{pregnancyStatus}, #{pregnancyWeek},       #{id},                  #{pw}, 
-                     NOW(),             #{createBy}, '',        #{serveyYn} )
+                     NOW(),             #{createBy}, '',              #{serveyYn},        #{foreignerYn},         #{managerId} )
         ]]>
     </insert>
     
@@ -382,6 +388,8 @@
                    PC.CREATE_BY AS createBy,
                    PC.UPDATE_BY AS updateBy,
                    PC.SERVEY_YN AS serveyYn,
+                   PC.FOREIGNER_YN AS foreignerYn,
+                   PC.MANAGER_ID AS managerId,
             
                    PS.FEVER_CHECK AS feverCheck,
                    PS.COUGH_CHECK AS coughCheck,
@@ -470,7 +478,9 @@
                    pw = #{pw},
                    update_date = NOW(),
                    update_by = #{updateBy},
-                   servey_yn = #{serveyYn}
+                   servey_yn = #{serveyYn},
+                   foreigner_yn = #{foreignerYn},
+                   manager_id = #{managerId}
              WHERE patient_idx = #{patientIdx}
         ]]>
     </update>

+ 34 - 22
src/main/webapp/WEB-INF/jsp/center/list.jsp

@@ -132,27 +132,36 @@ var endDate   = "<c:out value='${endDate}'/>";
                                     <div class="table-responsive">
                                         <table class="table table-striped text-center">
                                             <colgroup>
-                                                <col style=" width: 11.1%; ">
-                                                <col style=" width: 20%; ">
-                                                <col style=" width: 11.1%; ">
-                                                <col style=" width: 11.1%; ">
-                                                <col style=" width: 11.1%; ">
-                                                <col style=" width: 7%; ">
-                                                <col style=" width: 7%; ">
-                                                <col style=" width: 7%; ">
-                                                <col style=" width: 11.1%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 14%; ">
+                                                <col style=" width: 6%; ">
+                                                <col style=" width: 12%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 8%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 6%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 5%; ">
+                                                <col style=" width: 6%; ">
+                                                <col style=" width: 8%; ">
                                             </colgroup>
                                             <thead>
                                                 <tr>
-                                                    <th>번호</th>
-                                                    <th>생활치료센터명</th>
-                                                    <th>지역</th>
-                                                    <th>담당자(ID)</th>
-                                                    <th>전화번호</th>
-                                                    <th>입소자 수(명)</th>
-                                                    <th>수용인원(명)</th>
-                                                    <th>의료진 수</th>
-                                                    <th>등록일시</th>
+                                                    <th rowspan="2">번호</th>
+                                                    <th rowspan="2">생활치료센터명</th>
+                                                    <th rowspan="2">지역</th>
+                                                    <th rowspan="2">협력병원</th>
+                                                    <th rowspan="2">담당자(ID)</th>
+                                                    <th rowspan="2">전화번호</th>
+                                                    <th colspan="5">인원 수 (단위 : 명)</th>
+                                                    <th rowspan="2">등록일시</th>
+                                                </tr>
+                                                <tr>
+                                                    <th>의료진</th>
+                                                    <th>총 수용인원</th>
+                                                    <th>입소</th>
+                                                    <th>퇴소</th>
+                                                    <th>지정병원이송</th>
                                                 </tr>
                                             </thead>
                                             <tbody>
@@ -168,11 +177,14 @@ var endDate   = "<c:out value='${endDate}'/>";
                                                                     <a href="${viewLink}"><c:out value="${l.centerName}" /></a>
                                                                 </td>
                                                                 <td><c:out value="${l.locationName}" /></td>
-                                                                <td><c:out value="${l.staffName}(${l.staffId})" /></td>
-                                                                <td><c:out value="${l.staffPhoneNumber}"></c:out></td>
-                                                                <td><c:out value="${l.totalPatient}" /></td>
-                                                                <td><c:out value="${l.totalCapacity}" /></td>
+                                                                <td><c:out value="${l.cooperativeName}" /></td>
+                                                                <td><c:out value="${l.staffName}"/><br/><c:out value="(${l.staffId})" /></td>
+                                                                <td><c:out value="${l.staffPhoneNumber}"/></td>
                                                                 <td><c:out value="${l.totalStaff}" /></td>
+                                                                <td><c:out value="${l.totalCapacity}" /></td>
+                                                                <td><c:out value="${l.totalPatientH}" /></td>
+                                                                <td><c:out value="${l.totalPatientD}" /></td>
+                                                                <td><c:out value="${l.totalPatientT}" /></td>
                                                                 <td><c:out value="${l.createDate}" /></td>
                                                             </tr>
                                                         </c:forEach>

+ 28 - 1
src/main/webapp/WEB-INF/jsp/patient/edit.jsp

@@ -179,6 +179,16 @@ $( function(){
             }
         });
     }
+    
+    $(document).on('click','input[name="foreignerYn"]',function(){
+        var foreigner = $(this).prop('checked');
+        
+        if(foreigner){
+          $('input[name="patientPhone"]').val('010-0000-0000').prop('readonly',true);
+        } else {
+          $('input[name="patientPhone"]').val('').prop('readonly',false);
+        }
+    });
 });
 </script>
 </head>
@@ -291,7 +301,13 @@ $( function(){
                                                 <tr>
                                                     <th><span class="fix">*</span>연락처</th>
                                                     <td>
-                                                        <input type="text" name="patientPhone" value="${patientData.patientPhone}" class="form-control" placeholder="연락처를 입력해주세요" required>
+                                                        <div class="form-check form-check-inline calendar-bar mb-xl-0">
+                                                            <input type="text" name="patientPhone" value="${patientData.patientPhone}" class="form-control" placeholder="연락처를 입력해주세요" required <c:if test="${patientData.foreignerYn eq 'Y'}">readonly</c:if>>
+                                                        </div>
+                                                        <label class="form-check form-check-inline">
+                                                            <input class="form-check-input" name="foreignerYn" type="checkbox" value="Y" <c:if test="${patientData.foreignerYn eq 'Y'}">checked="checked"</c:if>>
+                                                            <span class="form-check-label">외국인</span>
+                                                        </label>
                                                     </td>
                                                     <th>보호자 연락처</th>
                                                     <td>
@@ -336,6 +352,17 @@ $( function(){
                                                         </select>
                                                     </td>
                                                 </tr>
+                                                <tr>
+                                                    <th>담당 의료진</th>
+                                                    <td>
+                                                        <select class="custom-select valid" name="managerId" aria-invalid="false">
+                                                            <option value="">의료진 선택</option>
+                                                            <c:forEach var="sl" items="${staffList}">
+                                                                <option value="${sl.id}" <c:if test="${patientData.managerId eq sl.id}">selected="selected"</c:if>><c:out value="${sl.name} (${sl.id})"/></option>
+                                                            </c:forEach>
+                                                        </select>
+                                                    </td>
+                                                </tr>
                                                 <tr>
                                                     <th>문진작성(환자용 앱)</th>
                                                     <td colspan="3">

+ 9 - 1
src/main/webapp/WEB-INF/jsp/patient/info.jsp

@@ -102,7 +102,7 @@ function deleteConfirm(){
                                             <tr>
                                                 <th>연락처</th>
                                                 <td>
-                                                    <c:out value="${info.patientPhone}" />
+                                                    <c:out value="${info.patientPhone}" /> <c:if test="${info.foreignerYn eq 'Y'}"><span class="text-danger">(외국인)</span></c:if>
                                                 </td>
                                                 <th>보호자 연락처</th>
                                                 <td>
@@ -142,6 +142,14 @@ function deleteConfirm(){
                                                     <c:if test="${info.state eq 'E'}">기타</c:if>
                                                 </td>
                                             </tr>
+                                            <tr>
+                                                <th>담당 의료진</th>
+                                                <td>
+                                                    <c:forEach var="sl" items="${staffList}">
+                                                        <c:if test="${info.managerId eq sl.id}"><c:out value="${sl.name} (${sl.id})"/></c:if>
+                                                    </c:forEach>
+                                                </td>
+                                            </tr>
                                             <tr>
                                                 <th>문진작성(환자용 앱)</th>
                                                 <td colspan="3">

+ 2 - 2
src/main/webapp/WEB-INF/jsp/patient/list.jsp

@@ -170,9 +170,9 @@ tr.phr-info td span.no-data{color:#999999;}
                                                         <option value="T" <c:if test="${inputState eq 'T'}"> selected="selected"</c:if>>지정병원 이송</option>
                                                         <option value="E" <c:if test="${inputState eq 'E'}"> selected="selected"</c:if>>기타</option>
                                                     </select></td>
-                                                <th>환자명</th>
+                                                <th>검색어</th>
                                                 <td>
-                                                    <input type="text" class="form-control" id="inputPassword4" name="patientName" placeholder="환자명" value="<c:out value="${patientName}" />">
+                                                    <input type="text" class="form-control" id="inputPassword4" name="patientName" placeholder="환자명 or 호실 입력" value="<c:out value="${patientName}" />">
                                                 </td>
                                             </tr>
                                             <tr>

+ 31 - 2
src/main/webapp/WEB-INF/jsp/patient/new.jsp

@@ -185,6 +185,16 @@ $( function(){
             form.submit();
         }
     });
+    
+    $(document).on('click','input[name="foreignerYn"]',function(){
+        var foreigner = $(this).prop('checked');
+        
+        if(foreigner){
+          $('input[name="patientPhone"]').val('010-0000-0000').prop('readonly',true);
+        } else {
+          $('input[name="patientPhone"]').val('').prop('readonly',false);
+        }
+    });
 });
 </script>
 </head>
@@ -292,7 +302,13 @@ $( function(){
                                                 <tr>
                                                     <th><span class="fix">*</span>연락처</th>
                                                     <td>
-                                                        <input type="text" name="patientPhone" class="form-control" placeholder="연락처를 입력해주세요" required>
+                                                        <div class="form-check form-check-inline calendar-bar mb-xl-0">
+                                                            <input type="text" name="patientPhone" class="form-control" placeholder="연락처를 입력해주세요" required>
+                                                        </div>
+                                                        <label class="form-check form-check-inline">
+                                                            <input class="form-check-input" name="foreignerYn" type="checkbox" value="Y">
+                                                            <span class="form-check-label">외국인</span>
+                                                        </label>
                                                     </td>
                                                     <th>보호자 연락처</th>
                                                     <td>
@@ -310,10 +326,12 @@ $( function(){
                                                     <th><span class="fix">*</span>확진일</th>
                                                     <td>
                                                         <div class="form-group calendar-bar mb-xl-0">
-                                                            <input class="form-control date" type="text" name="confirmationDate" autocomplete="off">
+                                                            <input class="form-control date valid" type="text" name="confirmationDate" autocomplete="off" aria-invalid="false">
                                                             <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
                                                         </div>
                                                     </td>
+                                                    
+                                                    
                                                 </tr>
                                                 
                                                 <!-- 안보이도록처리 (신규등록 환자 상태는 무조건 입소, 빈값으로 submit) -->
@@ -327,6 +345,17 @@ $( function(){
                                                         </div>
                                                     </td>
                                                 </tr>
+                                                <tr>
+                                                    <th>담당 의료진</th>
+                                                    <td>
+                                                        <select class="custom-select valid" name="managerId" aria-invalid="false">
+                                                            <option value="">의료진 선택</option>
+                                                            <c:forEach var="sl" items="${staffList}">
+                                                                <option value="${sl.id}"><c:out value="${sl.name} (${sl.id})"/></option>
+                                                            </c:forEach>
+                                                        </select>
+                                                    </td>
+                                                </tr>
                                                 <tr>
                                                     <th>문진작성(환자용 앱)</th>
                                                     <td colspan="3">

+ 3 - 1
src/main/webapp/resources/css/common/classic.css

@@ -169,4 +169,6 @@ table#symptomDataTable tbody th { font-weight: normal; white-space: nowrap; }
 .legend li.pulse { background-image: url('../../images/device_connect_link_6.png'); }
 .error{color:red;margin:0;}
 .mt8{margin-top:8px;}
-.error-box{outline:none;width:0;height:0;margin:0;border:0;}
+.error-box{outline:none;width:0;height:0;margin:0;border:0;}
+.text-link{cursor:pointer;}
+.text-link:hover{text-decoration:underline;}