Quellcode durchsuchen

개인정보접근이력 페이지 개발

huiwonseo vor 4 Jahren
Ursprung
Commit
3bbe4f94a5

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

@@ -115,7 +115,7 @@ public class PatientController extends LifeCenterController {
         String sesGroupIdx    = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String processingContents = "환자리스트 조회";
         PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -187,7 +187,7 @@ public class PatientController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         
         
@@ -251,7 +251,7 @@ public class PatientController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         //patientCare Insert
         //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
@@ -333,7 +333,7 @@ public class PatientController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         
         dto = patientService.selectPatientOne(dto);
@@ -470,7 +470,7 @@ public class PatientController extends LifeCenterController {
             String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
             String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
             String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
             
             String processingContents = "환자삭제 [사유:"+deleteReason+"]";
             PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -505,7 +505,7 @@ public class PatientController extends LifeCenterController {
             
             String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
             String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
             
             String processingContents = "환자수정페이지 접속";
             PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -640,7 +640,7 @@ public class PatientController extends LifeCenterController {
         
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         
         String processingDetail   = "[수정내역 :";

+ 61 - 0
src/main/java/com/lemon/lifecenter/controller/PrivateLogController.java

@@ -0,0 +1,61 @@
+package com.lemon.lifecenter.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.lemon.lifecenter.common.LifeCenterConfigVO;
+import com.lemon.lifecenter.common.LifeCenterController;
+import com.lemon.lifecenter.common.LifeCenterPaging;
+import com.lemon.lifecenter.dto.PrivateLogDTO;
+import com.lemon.lifecenter.service.PrivateLogService;
+
+@Controller
+@RequestMapping( "/private" )
+public class PrivateLogController extends LifeCenterController {
+    @Autowired
+    private PrivateLogService privateLogService;
+    
+    @Autowired
+    private LifeCenterConfigVO config;
+    private LifeCenterPaging paging;
+    
+    @RequestMapping( "/list" )
+    public ModelAndView list( @ModelAttribute("dto") PrivateLogDTO dto,
+            @RequestParam(value="page", required=false, defaultValue="1") int page ) {
+        
+        dto.setLimit( ( Integer.valueOf( page ) - 1 ) * config.pageDataSize );
+        dto.setLimitMax( config.pageDataSize );
+        
+        int total = privateLogService.selectPrivateAccessLogTotal(dto);
+        List<PrivateLogDTO> logList = new ArrayList<PrivateLogDTO>();
+        
+        if( total > 0 ) {
+            logList = privateLogService.selectPrivateAccessLogList(dto);
+        }
+        
+        String param = "searchType="+dto.getSearchType()+"&q="+dto.getQ()+"&startDate="+dto.getStartDate()+"&endDate="+dto.getEndDate();
+        paging = LifeCenterPaging.getInstance();
+        paging.paging(config, total, page, param);
+        
+        
+        ModelAndView mv = setMV( "/private/list" );
+        
+        mv.addObject( "startDate", dto.getStartDate() );
+        mv.addObject( "endDate", dto.getEndDate() );
+        mv.addObject( "q", dto.getQ() );
+        mv.addObject( "paging", paging );
+        mv.addObject( "page", page );
+        mv.addObject( "pageSize", dto.getLimitMax() );
+        mv.addObject( "total", total );
+        mv.addObject( "logList", logList );
+        
+        return mv;
+    }
+}

+ 10 - 10
src/main/java/com/lemon/lifecenter/controller/StaffController.java

@@ -68,7 +68,7 @@ public class StaffController extends LifeCenterController {
         String sesId       = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String processingContents = "의료진 신규 등록 페이지 접속";
         PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -128,7 +128,7 @@ public class StaffController extends LifeCenterController {
         String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String processingContents = "의료진 신규 등록 완료";
         PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -151,7 +151,7 @@ public class StaffController extends LifeCenterController {
         String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         StaffDTO dto = new StaffDTO();
         dto.setId(staffID);
@@ -192,7 +192,7 @@ public class StaffController extends LifeCenterController {
         String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         
         
@@ -239,7 +239,7 @@ public class StaffController extends LifeCenterController {
             @ModelAttribute("dto") StaffDTO dto ) throws Exception {
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String memberId = dto.getId();
         
@@ -323,7 +323,7 @@ public class StaffController extends LifeCenterController {
         String sesId         = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName       = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         StaffDTO dto = new StaffDTO();
         dto.setId(sesId);
@@ -358,7 +358,7 @@ public class StaffController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String memberId = dto.getId();
         
@@ -470,7 +470,7 @@ public class StaffController extends LifeCenterController {
         
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String processingContents = "의료진 리스트 조회";
         PrivateLogDTO logDTO = new PrivateLogDTO();
@@ -553,7 +553,7 @@ public class StaffController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         
         StaffDTO info = new StaffDTO();
@@ -601,7 +601,7 @@ public class StaffController extends LifeCenterController {
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
         String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
-        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"] " : "";
         
         String memberId = LifeCenterFunction.aesDecrypt( config.aesKey, config.IV, enMemberId );
         

+ 44 - 0
src/main/java/com/lemon/lifecenter/dto/PrivateLogDTO.java

@@ -10,6 +10,50 @@ public class PrivateLogDTO {
     private String processingContents="";
     private String accessorDetail="";
     
+    private String startDate="";
+    private String endDate="";
+    private String q="";
+    private String searchType="";
+    private int limit;
+    private int limitMax;
+    
+    
+    public int getLimit() {
+        return limit;
+    }
+    public void setLimit(int limit) {
+        this.limit = limit;
+    }
+    public int getLimitMax() {
+        return limitMax;
+    }
+    public void setLimitMax(int limitMax) {
+        this.limitMax = limitMax;
+    }
+    public String getQ() {
+        return q;
+    }
+    public void setQ(String q) {
+        this.q = q;
+    }
+    public String getSearchType() {
+        return searchType;
+    }
+    public void setSearchType(String searchType) {
+        this.searchType = searchType;
+    }
+    public String getStartDate() {
+        return startDate;
+    }
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+    public String getEndDate() {
+        return endDate;
+    }
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
     public String getAccessorDetail() {
         return accessorDetail;
     }

+ 4 - 0
src/main/java/com/lemon/lifecenter/mapper/PrivateLogMapper.java

@@ -1,5 +1,7 @@
 package com.lemon.lifecenter.mapper;
 
+import java.util.List;
+
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
@@ -9,4 +11,6 @@ import com.lemon.lifecenter.dto.PrivateLogDTO;
 @Mapper
 public interface PrivateLogMapper {
     public void insertPrivateAccessLog( PrivateLogDTO dto );
+    public int selectPrivateAccessLogTotal( PrivateLogDTO dto );
+    public List<PrivateLogDTO> selectPrivateAccessLogList( PrivateLogDTO dto );
 }

+ 8 - 0
src/main/java/com/lemon/lifecenter/service/PrivateLogService.java

@@ -1,5 +1,7 @@
 package com.lemon.lifecenter.service;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -14,4 +16,10 @@ public class PrivateLogService {
     public void insertPrivateAccessLog( PrivateLogDTO dto ) {
         mapper.insertPrivateAccessLog(dto);
     }
+    public int selectPrivateAccessLogTotal( PrivateLogDTO dto ) {
+        return mapper.selectPrivateAccessLogTotal(dto);
+    }
+    public List<PrivateLogDTO> selectPrivateAccessLogList( PrivateLogDTO dto ){
+        return mapper.selectPrivateAccessLogList(dto);
+    }
 }

+ 118 - 0
src/main/resources/mybatis/mapper/private/private.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.lemon.lifecenter.mapper.PrivateLogMapper">
+    <insert id="insertPrivateAccessLog" parameterType="PrivateLogDTO">
+        <![CDATA[
+            -- insertPrivateAccessLog
+            INSERT 
+              INTO PRIVATE_ACCESS_LOG
+                   ( ID,    IP,    ACCESSOR_DETAIL,   CREATE_DATE, FULL_URL,   PROCESSING_CONTENTS,   PROCESSING_TARGET )
+             VALUE ( #{id}, #{ip}, #{accessorDetail}, NOW(),       #{fullUrl}, #{processingContents}, #{processingTarget}  )
+        ]]>
+    </insert>
+    
+    
+    <select id="selectPrivateAccessLogTotal" parameterType="PrivateLogDTO" resultType="int">
+        <![CDATA[
+            SELECT COUNT(*) total
+              FROM private_access_log PA
+             WHERE 1 = 1
+        ]]>
+        
+        <if test='startDate != null and startDate != ""'>
+            <![CDATA[
+               AND DATE_FORMAT(PA.CREATE_DATE, '%Y-%m-%d') >= #{startDate}
+            ]]>
+        </if>
+        <if test='endDate != null and endDate != ""'>
+            <![CDATA[
+               AND DATE_FORMAT(PA.CREATE_DATE, '%Y-%m-%d') <= #{endDate}
+            ]]>
+        </if>
+        
+        <if test='searchType != null and searchType != ""'>
+            <if test='searchType == "id" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.ID LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "ip" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.IP LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "url" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.FULL_URL LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "target" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.PROCESSING_TARGET LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+        </if>
+    </select>
+    
+    
+    <select id="selectPrivateAccessLogList" parameterType="PrivateLogDTO" resultType="PrivateLogDTO">
+        <![CDATA[
+            SELECT PA.idx,
+                   PA.id,
+                   PA.ip,
+                   PA.accessor_detail                              AS accessorDetail,
+                   DATE_FORMAT( PA.create_date, '%Y-%m-%d %H:%i' ) AS createDate,
+                   PA.full_url                                     AS fullUrl,
+                   PA.processing_contents                          AS processingContents,
+                   PA.processing_target                            AS processingTarget
+              FROM private_access_log PA
+             WHERE 1 = 1
+        ]]>
+        
+        <if test='startDate != null and startDate != ""'>
+            <![CDATA[
+               AND DATE_FORMAT(PA.CREATE_DATE, '%Y-%m-%d') >= #{startDate}
+            ]]>
+        </if>
+        <if test='endDate != null and endDate != ""'>
+            <![CDATA[
+               AND DATE_FORMAT(PA.CREATE_DATE, '%Y-%m-%d') <= #{endDate}
+            ]]>
+        </if>
+        
+        <if test='searchType != null and searchType != ""'>
+            <if test='searchType == "id" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.ID LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "ip" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.IP LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "url" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.FULL_URL LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+            
+            <if test='searchType == "target" and q != null and q !=""'>
+                <![CDATA[
+                       AND PA.PROCESSING_TARGET LIKE CONCAT('%', #{q}, '%')
+                ]]>
+            </if>
+        </if>
+        
+        <![CDATA[
+             ORDER BY PA.idx DESC
+             LIMIT ${limit}, ${limitMax}
+        ]]>
+    </select>
+</mapper>

+ 0 - 14
src/main/resources/mybatis/mapper/privateLog/privateLog.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.lemon.lifecenter.mapper.PrivateLogMapper">
-    <insert id="insertPrivateAccessLog" parameterType="PrivateLogDTO">
-        <![CDATA[
-            -- insertPrivateAccessLog
-            INSERT 
-              INTO PRIVATE_ACCESS_LOG
-                   ( ID,    IP,    ACCESSOR_DETAIL,   CREATE_DATE, FULL_URL,   PROCESSING_CONTENTS,   PROCESSING_TARGET )
-             VALUE ( #{id}, #{ip}, #{accessorDetail}, NOW(),       #{fullUrl}, #{processingContents}, #{processingTarget}  )
-        ]]>
-    </insert>
-</mapper>

+ 221 - 0
src/main/webapp/WEB-INF/jsp/private/list.jsp

@@ -0,0 +1,221 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
+<script>
+var startDate = "<c:out value='${startDate}'/>";
+var endDate   = "<c:out value='${endDate}'/>";
+
+    $(function() {
+        $("input[name=\"startDate\"]").daterangepicker({
+            singleDatePicker : true,
+            showDropdowns : true,
+//             startDate : "<c:out value='${startDate}'/>",
+            locale : {
+                //format : "M/DD hh:mm A"
+                format : "YYYY-MM-DD"
+            }
+        });
+        $("input[name=\"endDate\"]").daterangepicker({
+            singleDatePicker : true,
+            showDropdowns : true,
+//             startDate : "<c:out value='${endDate}'/>",
+            locale : {
+                //format : "M/DD hh:mm A"
+                format : "YYYY-MM-DD"
+            }
+        });
+        
+        $("input[name=\"startDate\"]").val( startDate );
+        $("input[name=\"endDate\"]").val( endDate );
+    });
+</script>
+</head>
+<body>
+    <div class="wrapper">
+        <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include>
+        
+        <div class="main">
+            <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
+
+            <main class="content">
+                <div class="container-fluid p-0">
+                    <!-- 환지관리 START -->
+                    <div class="row">
+                        <div class="col-12 col-lg-6">
+                            <h1 class="h3 mb-3">개인정보접속로그</h1>
+                        </div>
+                        <div class="col-12 col-lg-6  text-right">
+                            <nav aria-label="breadcrumb">
+                                <ol class="breadcrumb">
+                                    <li class="breadcrumb-item"><a href="javscript:;">Home</a></li>
+                                    <li class="breadcrumb-item">개인정보접속로그</li>
+                                    <li class="breadcrumb-item active">개인정보접속리스트</li>
+                                </ol>
+                            </nav>
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-12">
+                            <div class="card">
+                                <form action="?" method="get">
+                                    <div class="card-body">
+                                        <table class="table mobile-table">
+                                            <colgroup>
+                                                <col style="width:10%">
+                                                <col style="width:40%">
+                                                <col style="width:10%">
+                                                <col style="width:40%">
+                                            </colgroup>
+                                            <tr>
+                                                <th>접속일자</th>
+                                                <td>
+                                                    <div class="row">
+                                                        <div class="col-5">
+                                                            <div class="form-group mb-xl-0">
+                                                                <input class="form-control date-no-req" type="text" name="startDate" value="" onKeyup="inputYMDNumber(this);" autocomplete="off"  placeholder="검색 시작일자">
+                                                            </div>
+                                                        </div>
+                                                        <div
+                                                            class="col-2 text-center">
+                                                            ~</div>
+                                                        <div class="col-5">
+                                                            <div class="form-group mb-xl-0">
+                                                                <input class="form-control date-no-req" type="text" name="endDate" value="" onKeyup="inputYMDNumber(this);" autocomplete="off" placeholder="검색 종료일자">
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                                <th></th>
+                                                <td>
+                                                    <div class="form-row">
+                                                        <div class="col-6">
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                            </tr>
+                                            <tr>
+                                                <th>검색 조건</th>
+                                                <td>
+                                                    <div class="form-row">
+                                                        <div class="col-6">
+                                                            <select class="custom-select  form-control" id="searchType" name="searchType">
+                                                              <option value="id" <c:if test="${searchType eq 'id'}"> selected="selected"</c:if>>아이디</option>
+                                                              <option value="ip" <c:if test="${searchType eq 'ip'}"> selected="selected"</c:if>>접속 IP</option>
+                                                              <option value="url" <c:if test="${searchType eq 'url'}"> selected="selected"</c:if>>URL</option>
+                                                              <option value="target" <c:if test="${searchType eq 'target'}"> selected="selected"</c:if>>정보주체</option>
+                                                            </select>
+                                                        </div>
+                                                        <div class="col-6">
+                                                            <input type="text" class="form-control" name="q" value='<c:out value="${q}"/>' placeholder="">
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                                <td colspan="2">
+                                                    <div class="form-row">
+                                                        <div class="col-6">
+                                                            <button class="btn btn-primary">검색</button>
+                                                        </div>
+                                                    </div>
+                                                </td>
+                                            </tr>
+                                        </table>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-12">
+                            <div class="card">
+                                <div class="card-body">
+                                    <div class="row mb-3">
+                                        <div class="col-6">전체 :
+                                            <fmt:formatNumber value="${total}" pattern="#,###" />
+                                        </div>
+                                        <div class="col-6 text-right">
+                                        </div>
+                                    </div>
+                                    <div class="table-responsive">
+                                        <table class="table table-striped text-center">
+                                            <colgroup>
+                                                <col style="width: 6%;">
+                                                <col style="width: 6%;">
+                                                <col style="width: 12%;">
+                                                <col style="width: 6%;">
+                                                <col style="width: 6%;">
+                                                <col style="width: 15%;">
+                                                <col style="">
+                                                <col style="width: 10%;">
+                                            </colgroup>
+                                            <thead>
+                                                <tr>
+                                                    <th>번호</th>
+                                                    <th>접속아이디</th>
+                                                    <th>접속자 정보</th>
+                                                    <th>접속 IP</th>
+                                                    <th>접속일자</th>
+                                                    <th>URL</th>
+                                                    <th>수행업무 및 처리내용</th>
+                                                    <th>정보 주체</th>
+                                                </tr>
+                                            </thead>
+                                            <tbody>
+                                                <c:choose>
+                                                    <c:when test="${total > 0}">
+                                                        <c:forEach var="ll" items="${logList}" varStatus="lStatus">
+                                                            <c:set var="pageNum" value="${ ( total - lStatus.index ) - ( (page - 1) * pageSize ) }" />
+                                                            <tr>
+                                                                <td><fmt:formatNumber value="${pageNum}" pattern="#,###" /></td>
+                                                                <td><c:out value="${ll.id}" /></td>
+                                                                <td><c:out value="${ll.accessorDetail}" /></td>
+                                                                <td><c:out value="${ll.ip}" /></td>
+                                                                <td><c:out value="${ll.createDate}" /></td>
+                                                                <td class="text-left"><c:out value="${ll.fullUrl}" /></td>
+                                                                <td class="text-left"><c:out value="${ll.processingContents}" /></td>
+                                                                <td><c:out value="${ll.processingTarget}" /></td>
+                                                            </tr>
+                                                        </c:forEach>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <tr>
+                                                            <td colspan="8">이력이 없습니다</td>
+                                                        </tr>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </tbody>
+                                        </table>
+                                    </div>
+                                    <div class="row mt-5">
+                                        <div class="col-12 col-lg-6 mb-2">
+                                        </div>
+                                        <div class="col-12 col-lg-6 mb-2">
+                                            <jsp:include page="${data._INCLUDE}/paging.jsp" flush="true">
+                                                <jsp:param name="firstPageNo" value="${paging.firstPageNo}" />
+                                                <jsp:param name="prevPageNo"  value="${paging.prevPageNo}" />
+                                                <jsp:param name="startPageNo" value="${paging.startPageNo}" />
+                                                <jsp:param name="pageNo"      value="${paging.pageNo}" />
+                                                <jsp:param name="endPageNo"   value="${paging.endPageNo}" />
+                                                <jsp:param name="nextPageNo"  value="${paging.nextPageNo}" />
+                                                <jsp:param name="finalPageNo" value="${paging.finalPageNo}" />
+                                                <jsp:param name="preFix"      value="${paging.preFix}" />
+                                                <jsp:param name="url"         value="${paging.url}" />
+                                                <jsp:param name="total"       value="${paging.totalCount}" />
+                                            </jsp:include>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 환자관리 END -->
+                </div>
+            </main>
+
+            <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include>
+        </div>
+    </div>
+</body>
+</html>