Browse Source

환자관리, 의료진관리 메뉴에서 접근이력 로그 남기는처리

huiwonseo 4 years ago
parent
commit
a193b80973

+ 27 - 45
src/main/java/com/lemon/lifecenter/common/LifeCenterQueryLog.java

@@ -20,8 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import com.lemon.lifecenter.dto.QueryLogDTO;
-import com.lemon.lifecenter.service.QueryLogService;
+import com.lemon.lifecenter.dto.PrivateLogDTO;
+import com.lemon.lifecenter.service.PrivateLogService;
 
 /*
    @Intercepts(@Signature(
@@ -33,22 +33,19 @@ import com.lemon.lifecenter.service.QueryLogService;
 @Intercepts({ @Signature(type = StatementHandler.class, method = "update", args = { Statement.class }),
         @Signature(type = StatementHandler.class, method = "query", args = { Statement.class, ResultHandler.class }) })
 public class LifeCenterQueryLog implements Interceptor {
-
-    @Autowired
-    private QueryLogService queryLogService;
     
     @Override
     public Object intercept(Invocation invocation) throws Throwable {
-        String method = invocation.getMethod().getName();
-        
-        StatementHandler handler = (StatementHandler) invocation.getTarget();
-        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();
-
-        String sql = bindSql(handler); // SQL 추출
-        String param = handler.getParameterHandler().getParameterObject()!=null ?
-                handler.getParameterHandler().getParameterObject().toString() : "";
-        
-        Object session = request.getSession().getAttribute( "sesId" );
+//        String method = invocation.getMethod().getName();
+//        
+//        StatementHandler handler = (StatementHandler) invocation.getTarget();
+//        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();
+//
+//        String sql = bindSql(handler); // SQL 추출
+//        String param = handler.getParameterHandler().getParameterObject()!=null ?
+//                handler.getParameterHandler().getParameterObject().toString() : "";
+//        
+//        Object session = request.getSession().getAttribute( "sesId" );
 //        String url  = request.getRequestURI().toString();
 //        String port = String.valueOf(request.getServerPort());
 //        Object groupIdx = request.getSession().getAttribute( "sesGroupIdx" );
@@ -56,39 +53,24 @@ public class LifeCenterQueryLog implements Interceptor {
 //        Object sesPasswordChange = request.getSession().getAttribute( "sesPasswordChange" );
 //        Object sesAcceptCheck = request.getSession().getAttribute( "sesAcceptCheck" );
 //        Object sesPermissions = request.getSession().getAttribute( "sesPermissions" );
-        System.err.println( param );
-        if( sql.contains( "-- insertSysQueryLog" ) ) {
-            System.err.println( param );
-        }
-        if( session != null ) {
-            if( !param.contains( "com.lemon.lifecenter.dto.LoginDTO" ) ) {
-                if( !sql.contains( "-- selectNowPathRoleCheckTotal" ) &&
-                        !sql.contains( "-- selectNowPathRoleCheckData" ) && 
-                        !sql.contains( "-- insertMenuAccessLog" ) &&
-                        !sql.contains( "-- selectSideMenuList" ) && 
-                        !sql.contains( "-- insertSysQueryLog" ) ) {
-                    
+//        System.err.println( param );
+//        if( sql.contains( "-- insertSysQueryLog" ) ) {
+//            System.err.println( param );
+//        }
+//        if( session != null ) {
+//            if( !param.contains( "com.lemon.lifecenter.dto.LoginDTO" ) ) {
+//                if( !sql.contains( "-- selectNowPathRoleCheckTotal" ) &&
+//                        !sql.contains( "-- selectNowPathRoleCheckData" ) && 
+//                        !sql.contains( "-- insertMenuAccessLog" ) &&
+//                        !sql.contains( "-- selectSideMenuList" ) && 
+//                        !sql.contains( "-- insertSysQueryLog" ) ) {
+//                    
 //                    System.err.println("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
 //                    System.err.println(sql);
 //                    System.err.println("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
-                    
-                    
-                    QueryLogDTO dto = new QueryLogDTO();
-                    
-                    System.err.println( session.toString() );
-                    System.err.println( LifeCenterFunction.getRemoteAddr( request )  );
-                    System.err.println( LifeCenterFunction.getFullURL( request ) );
-                    
-                    
-                    dto.setId( session.toString() );
-                    dto.setIp( LifeCenterFunction.getRemoteAddr( request ) );
-                    dto.setQueryLog( sql );
-                    dto.setFullUrl( LifeCenterFunction.getFullURL( request ) );
-                    
-//                    queryLogService.insertSysQueryLog(dto);
-                }
-            }
-        }
+//                }
+//            }
+//        }
         
 //        if ( url.contains( "/error" ) || url.contains( "/nonface/wait" ) || url.contains( "/mobile/call" ) ||
 //             url.contains( "/store" ) || url.contains( "/favicon.ico" )  || url.contains( "/mobile/getAppVersion" ) ||

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

@@ -8,6 +8,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
 import java.net.URLEncoder;
 import java.security.GeneralSecurityException;
 import java.text.DecimalFormat;
@@ -56,11 +57,13 @@ import com.lemon.lifecenter.common.LifeCenterSessionController;
 import com.lemon.lifecenter.dto.CenterInfoDTO;
 import com.lemon.lifecenter.dto.FileDownloadDTO;
 import com.lemon.lifecenter.dto.PatientDTO;
+import com.lemon.lifecenter.dto.PrivateLogDTO;
 import com.lemon.lifecenter.dto.PushDTO;
 import com.lemon.lifecenter.dto.StaffDTO;
 import com.lemon.lifecenter.service.CenterService;
 import com.lemon.lifecenter.service.FileDownloadService;
 import com.lemon.lifecenter.service.PatientService;
+import com.lemon.lifecenter.service.PrivateLogService;
 import com.lemon.lifecenter.service.PushService;
 import com.lemon.lifecenter.service.StaffService;
 
@@ -87,6 +90,9 @@ public class PatientController extends LifeCenterController {
     @Autowired
     private LifeCenterConfigVO config;
     
+    @Autowired
+    private PrivateLogService privateLogService;
+    
     private LifeCenterPaging paging;
     
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -104,10 +110,23 @@ public class PatientController extends LifeCenterController {
             
             HttpServletRequest request,HttpServletResponse response) {
         
+        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
         String sesCenterCode  = LifeCenterSessionController.getSession( request, "sesCenterCode" );
         String sesGroupIdx    = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String processingContents = "환자리스트 조회";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
         
-        // 권한이 SYSTEM일경우
         
         PatientDTO dto = new PatientDTO();
         dto.setCenterCode(Integer.parseInt(sesCenterCode));
@@ -166,6 +185,25 @@ public class PatientController extends LifeCenterController {
         ModelAndView mv = setMV("patient/new");
         String sesCenterCode  = LifeCenterSessionController.getSession( request, "sesCenterCode" );
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        
+        
+        //개인정보로그
+        String processingContents = "신규환자등록페이지 접속";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
         
         // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
         CenterInfoDTO dto = new CenterInfoDTO();
@@ -211,6 +249,9 @@ public class PatientController extends LifeCenterController {
             HttpServletRequest request,HttpServletResponse response ) throws Exception {
         int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
         
         //patientCare Insert
         //System.out.println( "dto.getJumin().substring(2) : " + dto.getJumin().replace( "-" , "" ).substring(2) );
@@ -242,6 +283,26 @@ public class PatientController extends LifeCenterController {
         patientService.insertPatientCare( dto );  // 환지 기본정보 insert
         
         int patientIdx = dto.getPatientIdx();
+        
+        
+        
+        //개인정보로그
+        String processingContents = "신규환자 생성";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
+        
+        
+        
+        
         dto.setPatientIdx( patientIdx );
         
         //patientDisease Insert
@@ -268,8 +329,27 @@ public class PatientController extends LifeCenterController {
         ModelAndView mv = setMV("patient/info");
 
         int patientIdx = dto.getPatientIdx();
+        
+        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        
         dto = patientService.selectPatientOne(dto);
         
+        //개인정보로그
+        String processingContents = "환자상세 조회 ";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
         String jumin = dto.getJumin();
         jumin = LifeCenterFunction.changeJuminToBirthday(jumin);
         dto.setJumin(jumin);
@@ -380,10 +460,27 @@ public class PatientController extends LifeCenterController {
         } else {
             // patientService.deletePatientCare(dto);
             // 환자데이터를 삭제하지않고 flag 값을 변경 (21.04.12 수정)
+            PatientDTO patientOne = patientService.selectPatientOne(dto);
+            
             dto.setUseYn( "N" );
             dto.setDeleteReason( deleteReason );
             patientService.updatePatientCareUseYn(dto);
             
+            
+            String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+            String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+            String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+            
+            String processingContents = "환자삭제 [사유:"+deleteReason+"]";
+            PrivateLogDTO logDTO = new PrivateLogDTO();
+            logDTO.setId( sesId );
+            logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+            logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+            logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+            logDTO.setProcessingTarget( "(환자)" + patientOne.getPatientName() + "["+patientOne.getPatientIdx()+"]" );
+            logDTO.setProcessingContents( processingContents );
+            privateLogService.insertPrivateAccessLog( logDTO );
         }
         
         LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '환자정보가 삭제되었습니다. ', callBack : function(){ location.href='./list'; } });" );
@@ -405,6 +502,23 @@ public class PatientController extends LifeCenterController {
         if (cnt > 0) {
             patientDTO = patientService.selectPatientOne( patientDTO );
             
+            
+            String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+            String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+            String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+            
+            String processingContents = "환자수정페이지 접속";
+            PrivateLogDTO logDTO = new PrivateLogDTO();
+            logDTO.setId( sesId );
+            logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+            logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+            logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+            logDTO.setProcessingTarget( "(환자)" + patientDTO.getPatientName() + "["+patientDTO.getPatientIdx()+"]" );
+            logDTO.setProcessingContents( processingContents );
+            privateLogService.insertPrivateAccessLog( logDTO );
+            
+            
+            
             // 세션의 센터코드 들고와서 치료센터명 조회후 view 전달
             // 센터가 존재하는지 체크
             CenterInfoDTO dto = new CenterInfoDTO();
@@ -472,7 +586,7 @@ public class PatientController extends LifeCenterController {
     @RequestMapping("/edit/update")
     @Transactional(propagation=Propagation.REQUIRED)
     public String patientEditUpdate(
-            @ModelAttribute("dto") final PatientDTO dto,
+            @ModelAttribute("dto") PatientDTO dto,
             HttpServletRequest request,HttpServletResponse response ) throws Exception {
         int sesCenterCode = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
         String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
@@ -480,6 +594,8 @@ public class PatientController extends LifeCenterController {
         int patientIdx = dto.getPatientIdx();
         dto.setPatientIdx( patientIdx );
         
+        PatientDTO originPatientData = patientService.selectPatientOne( dto );
+        
         //patientCare Update
         String jumin = dto.getJumin();
         jumin = LifeCenterFunction.removeStringChar(jumin, "-");
@@ -514,8 +630,67 @@ public class PatientController extends LifeCenterController {
         
         dto.setBloodPressureLevel( dto.getBloodPressureLevelCon() + "|" + dto.getBloodPressureLevelRel() );
         
+        
+        System.err.println( dto.toString() );
         patientService.updatePatientSymptom( dto );
         
+        dto = new PatientDTO();
+        dto.setPatientIdx( patientIdx );
+        PatientDTO newPatientData = patientService.selectPatientOne( dto );
+        
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        
+        String processingDetail   = "[수정내역 :";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        
+        int cnt = 0;
+        try{
+            Object objNew=newPatientData;
+            for (Field field : objNew.getClass().getDeclaredFields()){
+                Object objOrigin=originPatientData;
+                
+                for (Field field1 : objOrigin.getClass().getDeclaredFields()){
+                    if( field1.getName().equals( field.getName() ) ) {
+                        field1.setAccessible(true);
+                        Object valueOrigin = field1.get(objOrigin);
+                        String originVal = valueOrigin == null ? "": valueOrigin.toString();
+                        
+                        field.setAccessible(true);
+                        Object valueNew=field.get(objNew);
+                        String newVal = valueNew == null ? "": valueNew.toString();
+                        
+//                        System.err.println(field.getName()+","+originVal + " -> " + newVal);
+                        
+                        if( !originVal.equals( newVal ) ) {
+//                            System.out.println(field.getName()+","+originVal + " -> " + newVal);
+                            String nv = cnt >= 1 ? ", " : " "; 
+                            processingDetail += nv + field.getName()+"컬럼 값 변경 ("+originVal + " -> " + newVal +")";
+                            cnt ++;
+                        }
+                    }
+                }
+                
+            }
+            
+            processingDetail +="]";
+        }catch (Exception e){
+            e.printStackTrace(); 
+        }
+        
+        String processingContents = "환자정보 수정 [총 " + cnt + "건 항목] " + processingDetail;
+        System.err.println( "processingContents : " + processingContents );
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(환자)" + dto.getPatientName() + "["+dto.getPatientIdx()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
         return "redirect:/patient/info?patientIdx=" + patientIdx;
     }
 

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

@@ -1,5 +1,6 @@
 package com.lemon.lifecenter.controller;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -28,10 +29,12 @@ import com.lemon.lifecenter.common.LifeCenterSessionController;
 import com.lemon.lifecenter.dto.CenterInfoDTO;
 import com.lemon.lifecenter.dto.GroupListDTO;
 import com.lemon.lifecenter.dto.LoginDTO;
+import com.lemon.lifecenter.dto.PrivateLogDTO;
 import com.lemon.lifecenter.dto.StaffDTO;
 import com.lemon.lifecenter.service.CenterService;
 import com.lemon.lifecenter.service.GroupListService;
 import com.lemon.lifecenter.service.LoginService;
+import com.lemon.lifecenter.service.PrivateLogService;
 import com.lemon.lifecenter.service.StaffService;
 
 // 의료진관리 contorller
@@ -56,11 +59,27 @@ public class StaffController extends LifeCenterController {
     @Autowired
     private CenterService centerService;
     
+    @Autowired
+    private PrivateLogService privateLogService;
+    
     @RequestMapping("/new")
     public ModelAndView staffNew( HttpServletRequest request,HttpServletResponse response ) throws Exception {
         int sesCenterCode  = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesCenterCode" ) ) ;
-        int sesGroupIdx    = Integer.valueOf( LifeCenterSessionController.getSession( request, "sesGroupIdx" ) );
         String sesId       = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String processingContents = "의료진 신규 등록 페이지 접속";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
         
         CenterInfoDTO cDto  = new CenterInfoDTO();
         cDto.setCenterCode(sesCenterCode);
@@ -84,6 +103,7 @@ public class StaffController extends LifeCenterController {
     @RequestMapping("/new/regist")
     public String staffNewRegist(
             @ModelAttribute("dto") final StaffDTO dto,
+            HttpServletRequest request,
             @RequestParam(value="encryptIdx", required=true) String encryptIdx,
             @RequestParam(value="passwordConfirm", required=true) String passwordConfirm ) throws Exception {
         
@@ -105,6 +125,22 @@ public class StaffController extends LifeCenterController {
         
         memberService.insertStaff( dto );
         
+        String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String processingContents = "의료진 신규 등록 완료";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + dto.getName() + "["+dto.getId()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
         return "redirect:../info?staffId=" + dto.getId();
     }
     
@@ -112,14 +148,30 @@ public class StaffController extends LifeCenterController {
     public ModelAndView staffInfo(
             HttpServletRequest request,HttpServletResponse response,
             @RequestParam(value="staffId", required=false, defaultValue="") String staffID) throws Exception {
-        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
-        
+        String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
         
         StaffDTO dto = new StaffDTO();
         dto.setId(staffID);
         
         dto = memberService.selectMemberInfo(dto);
         
+        
+        
+        String processingContents = "의료진 정보 상세 페이지 접속";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + dto.getName() + "["+dto.getId()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
         dto.setPhoneNumber( LifeCenterFunction.phone( dto.getPhoneNumber() ) );
         
         String enMemberId = LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, staffID );
@@ -135,12 +187,31 @@ public class StaffController extends LifeCenterController {
 
     @RequestMapping("/edit")
     public ModelAndView staffEdit(
+            HttpServletRequest request,HttpServletResponse response,
             @RequestParam(value="staffId", required=false, defaultValue="") String staffId) throws Exception {
+        String sesId          = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        
         
 //        List<CenterInfoDTO> centerList = memberService.selectCenterList();
         StaffDTO dto = new StaffDTO();
         dto.setId(staffId);
         dto = memberService.selectMemberInfo(dto);
+        
+        String processingContents = "의료진 정보 변경 페이지 접속";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + dto.getName() + "["+dto.getId()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
         String groupIdx = LifeCenterFunction.aesEncrypt(config.aesKey, config.IV, String.valueOf(dto.getGroupIdx()));
         int centerCode = dto.getCenterCode();
         
@@ -166,6 +237,16 @@ public class StaffController extends LifeCenterController {
             HttpServletRequest request,HttpServletResponse response,
             @RequestParam(value="encGroupIdx", required=false, defaultValue = "") String encGroupIdx,
             @ModelAttribute("dto") StaffDTO dto ) throws Exception {
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String memberId = dto.getId();
+        
+        StaffDTO originMemberData = new StaffDTO();
+        StaffDTO newMemberData    = new StaffDTO();
+        originMemberData.setId( memberId );
+        originMemberData = memberService.selectMemberInfo(originMemberData);
         
         String decryptIdx = "";
         
@@ -180,17 +261,85 @@ public class StaffController extends LifeCenterController {
         
         int rts = memberService.updateEditMember(dto);
         
+        newMemberData = new StaffDTO();
+        newMemberData.setId( memberId );
+        newMemberData = memberService.selectMemberInfo(newMemberData);
+        
+        
+        String processingDetail   = "[수정내역 :";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        
+        int cnt = 0;
+        try{
+            Object objNew=newMemberData;
+            for (Field field : objNew.getClass().getDeclaredFields()){
+                Object objOrigin=originMemberData;
+                
+                for (Field field1 : objOrigin.getClass().getDeclaredFields()){
+                    if( field1.getName().equals( field.getName() ) ) {
+                        field1.setAccessible(true);
+                        Object valueOrigin = field1.get(objOrigin);
+                        String originVal = valueOrigin == null ? "": valueOrigin.toString();
+                        
+                        field.setAccessible(true);
+                        Object valueNew=field.get(objNew);
+                        String newVal = valueNew == null ? "": valueNew.toString();
+                        
+//                        System.err.println(field.getName()+","+originVal + " -> " + newVal);
+                        
+                        if( !originVal.equals( newVal ) ) {
+//                            System.out.println(field.getName()+","+originVal + " -> " + newVal);
+                            String nv = cnt >= 1 ? ", " : " "; 
+                            processingDetail += nv + field.getName()+"컬럼 값 변경 ("+originVal + " -> " + newVal +")";
+                            cnt ++;
+                        }
+                    }
+                }
+                
+            }
+            
+            processingDetail +="]";
+        }catch (Exception e){
+            e.printStackTrace(); 
+        }
+        
+        String processingContents = "의료진 정보 수정 [총 " + cnt + "건 항목] " + processingDetail;
+        System.err.println( "processingContents : " + processingContents );
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + originMemberData.getName() + "["+originMemberData.getId()+"]"  );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
         return "redirect:/staff/info?staffId=" + dto.getId();
     }
     
     @RequestMapping("/myinfo")
     public ModelAndView staffMyinfo(HttpServletRequest request,HttpServletResponse response) {
-        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesId         = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName       = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
         
         StaffDTO dto = new StaffDTO();
         dto.setId(sesId);
         dto = memberService.selectMemberInfo(dto);
         
+        
+        String processingContents = "내정보 변경 페이지 접속";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + dto.getName() + "["+dto.getId()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
         String referer  = request.getHeader( "Referer" );
         ModelAndView mv = setMV("staff/myinfo");
         mv.addObject("info", dto);
@@ -206,6 +355,19 @@ public class StaffController extends LifeCenterController {
             @RequestParam(value="passwordNew", required=false, defaultValue="") String passwordNew,
             @RequestParam(value="passwordConfirm", required=false, defaultValue="") String passwordConfirm,
             @RequestParam(value="returnUrl", required=false, defaultValue="") String returnUrl) throws Exception {
+        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String memberId = dto.getId();
+        
+        StaffDTO originMemberData = new StaffDTO();
+        StaffDTO newMemberData    = new StaffDTO();
+        originMemberData.setId( memberId );
+        originMemberData = memberService.selectMemberInfo(originMemberData);
+        
+        
         
         Object sesPasswordChange = request.getSession().getAttribute( "sesPasswordChange" );
         String encryptPw = LifeCenterFunction.sha256Encrypt(dto.getPassword());
@@ -225,6 +387,63 @@ public class StaffController extends LifeCenterController {
             memberService.updateMember(dto);
             LifeCenterSessionController.setSession( request, "sesName", dto.getName() );
             
+            
+            
+            newMemberData = new StaffDTO();
+            newMemberData.setId( memberId );
+            newMemberData = memberService.selectMemberInfo(newMemberData);
+            
+            
+            String processingDetail   = "[수정내역 :";
+            PrivateLogDTO logDTO = new PrivateLogDTO();
+            
+            int cnt = 0;
+            try{
+                Object objNew=newMemberData;
+                for (Field field : objNew.getClass().getDeclaredFields()){
+                    Object objOrigin=originMemberData;
+                    
+                    for (Field field1 : objOrigin.getClass().getDeclaredFields()){
+                        if( field1.getName().equals( field.getName() ) ) {
+                            field1.setAccessible(true);
+                            Object valueOrigin = field1.get(objOrigin);
+                            String originVal = valueOrigin == null ? "": valueOrigin.toString();
+                            
+                            field.setAccessible(true);
+                            Object valueNew=field.get(objNew);
+                            String newVal = valueNew == null ? "": valueNew.toString();
+                            
+//                            System.err.println(field.getName()+","+originVal + " -> " + newVal);
+                            
+                            if( !originVal.equals( newVal ) ) {
+//                                System.out.println(field.getName()+","+originVal + " -> " + newVal);
+                                String nv = cnt >= 1 ? ", " : " "; 
+                                processingDetail += nv + field.getName()+"컬럼 값 변경 ("+originVal + " -> " + newVal +")";
+                                cnt ++;
+                            }
+                        }
+                    }
+                    
+                }
+                
+                processingDetail +="]";
+            }catch (Exception e){
+                e.printStackTrace(); 
+            }
+            
+            String processingContents = "내정보 수정 [총 " + cnt + "건 항목] " + processingDetail;
+            System.err.println( "processingContents : " + processingContents );
+            logDTO.setId( sesId );
+            logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+            logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+            logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+            logDTO.setProcessingTarget( "(의료진)" + originMemberData.getName() + "["+originMemberData.getId()+"]"  );
+            logDTO.setProcessingContents( processingContents );
+            privateLogService.insertPrivateAccessLog( logDTO );
+            
+            
+            
+            
             LifeCenterFunction.scriptMessage( response, "alertBox({ txt : '변경되었습니다', callBack : function(){ location.href='/staff/myinfo'; } });" );
             return "/common/blank";
         } else {
@@ -249,6 +468,22 @@ public class StaffController extends LifeCenterController {
         String sesGroupIdx  = LifeCenterSessionController.getSession( request, "sesGroupIdx" );
         String sesCenterCode  = LifeCenterSessionController.getSession( request, "sesCenterCode" );
         
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        String processingContents = "의료진 리스트 조회";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
         if (selectState.equals("sId")) {
             dto.setId(sData);
         } else if (selectState.equals("sName")) {
@@ -312,9 +547,33 @@ public class StaffController extends LifeCenterController {
     @RequestMapping( value="/passwordReset", method = RequestMethod.POST )
     @ResponseBody
     public boolean passwordReset(
+            HttpServletRequest request,
             @RequestParam( value="staffId", required = true ) String id,
             @RequestParam( value="type", required = true ) String type) throws Exception {
-
+        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
+        
+        StaffDTO info = new StaffDTO();
+        info.setId(id);
+        
+        info = memberService.selectMemberInfo(info);
+        
+        
+        String processingContents = "의료진 비밀번호 초기화 처리";
+        PrivateLogDTO logDTO = new PrivateLogDTO();
+        logDTO.setId( sesId );
+        logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+        logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+        logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+        logDTO.setProcessingTarget( "(의료진)" + info.getName() + "["+info.getId()+"]" );
+        logDTO.setProcessingContents( processingContents );
+        privateLogService.insertPrivateAccessLog( logDTO );
+        
+        
+        
         boolean result = false;
         String pw = "";
         StaffDTO dto = new StaffDTO();
@@ -339,8 +598,20 @@ public class StaffController extends LifeCenterController {
     @Transactional(propagation=Propagation.REQUIRED)
     public String memberDelete( @RequestParam( value="enMemberId", required = true ) String enMemberId,
             HttpServletRequest request,HttpServletResponse response ) throws Exception {
+        String sesId  = LifeCenterSessionController.getSession( request, "sesId" );
+        String sesName        = LifeCenterSessionController.getSession( request, "sesName" );
+        String sesCenterName  = LifeCenterSessionController.getSession( request, "sesCenterName" );
+        String logCenterName  = !sesCenterName.equals( "" )? "["+sesCenterName+"]" : "";
+        
         String memberId = LifeCenterFunction.aesDecrypt( config.aesKey, config.IV, enMemberId );
         
+        StaffDTO info = new StaffDTO();
+        info.setId(memberId);
+        
+        info = memberService.selectMemberInfo(info);
+        
+        
+        
         StaffDTO dto = new StaffDTO();
         dto.setId( memberId );
         
@@ -354,6 +625,17 @@ public class StaffController extends LifeCenterController {
             return "/common/blank";
         } else {
             memberService.deleteMember(dto);
+            
+            
+            String processingContents = "의료진 삭제 처리";
+            PrivateLogDTO logDTO = new PrivateLogDTO();
+            logDTO.setId( sesId );
+            logDTO.setAccessorDetail( logCenterName + sesName + " (" + sesId + ")" );
+            logDTO.setIp( LifeCenterFunction.getRemoteAddr( request ) );
+            logDTO.setFullUrl( LifeCenterFunction.getFullURL( request ) );
+            logDTO.setProcessingTarget( "(의료진)" + info.getName() + "["+info.getId()+"]" );
+            logDTO.setProcessingContents( processingContents );
+            privateLogService.insertPrivateAccessLog( logDTO );
         }
         
         LifeCenterFunction.scriptMessage( response, "alertBox({ txt: '사용자가 삭제되었습니다. ', callBack : function(){ location.href='./list'; } });" );

+ 22 - 8
src/main/java/com/lemon/lifecenter/dto/QueryLogDTO.java

@@ -1,13 +1,21 @@
 package com.lemon.lifecenter.dto;
 
-public class QueryLogDTO {
+public class PrivateLogDTO {
     private int logIdx;
     private String id = "";
     private String ip = "";
     private String createDate = "";
-    private String queryLog = "";
     private String fullUrl = "";
+    private String processingTarget="";
+    private String processingContents="";
+    private String accessorDetail="";
     
+    public String getAccessorDetail() {
+        return accessorDetail;
+    }
+    public void setAccessorDetail(String accessorDetail) {
+        this.accessorDetail = accessorDetail;
+    }
     public int getLogIdx() {
         return logIdx;
     }
@@ -32,16 +40,22 @@ public class QueryLogDTO {
     public void setCreateDate(String createDate) {
         this.createDate = createDate;
     }
-    public String getQueryLog() {
-        return queryLog;
-    }
-    public void setQueryLog(String queryLog) {
-        this.queryLog = queryLog;
-    }
     public String getFullUrl() {
         return fullUrl;
     }
     public void setFullUrl(String fullUrl) {
         this.fullUrl = fullUrl;
     }
+    public String getProcessingTarget() {
+        return processingTarget;
+    }
+    public void setProcessingTarget(String processingTarget) {
+        this.processingTarget = processingTarget;
+    }
+    public String getProcessingContents() {
+        return processingContents;
+    }
+    public void setProcessingContents(String processingContents) {
+        this.processingContents = processingContents;
+    }
 }

+ 3 - 3
src/main/java/com/lemon/lifecenter/mapper/QueryLogMapper.java

@@ -3,10 +3,10 @@ package com.lemon.lifecenter.mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
-import com.lemon.lifecenter.dto.QueryLogDTO;
+import com.lemon.lifecenter.dto.PrivateLogDTO;
 
 @Repository
 @Mapper
-public interface QueryLogMapper {
-    public void insertSysQueryLog( QueryLogDTO dto );
+public interface PrivateLogMapper {
+    public void insertPrivateAccessLog( PrivateLogDTO dto );
 }

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

@@ -0,0 +1,17 @@
+package com.lemon.lifecenter.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.lemon.lifecenter.dto.PrivateLogDTO;
+import com.lemon.lifecenter.mapper.PrivateLogMapper;
+
+@Service
+public class PrivateLogService {
+    @Autowired
+    private PrivateLogMapper mapper;
+    
+    public void insertPrivateAccessLog( PrivateLogDTO dto ) {
+        mapper.insertPrivateAccessLog(dto);
+    }
+}

+ 0 - 17
src/main/java/com/lemon/lifecenter/service/QueryLogService.java

@@ -1,17 +0,0 @@
-package com.lemon.lifecenter.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.lemon.lifecenter.dto.QueryLogDTO;
-import com.lemon.lifecenter.mapper.QueryLogMapper;
-
-@Service
-public class QueryLogService {
-    @Autowired
-    private QueryLogMapper mapper;
-    
-    public void insertSysQueryLog( QueryLogDTO dto ) {
-        mapper.insertSysQueryLog(dto);
-    }
-}

+ 4 - 2
src/main/resources/application.properties

@@ -2,7 +2,7 @@ spring.mvc.view.prefix=/WEB-INF/jsp/
 spring.mvc.view.suffix=.jsp
 #spring.mvc.static-path-pattern=/resources
 #spring.resources.static-locations=classpath:/resources/
-mybatis.config-location=classpath:mybatis-config.xml
+#mybatis.config-location=classpath:mybatis-config.xml
 #spring.datasource.driver-class-name=cubrid.jdbc.driver.CUBRIDDriver
 #spring.datasource.url=jdbc:cubrid:localhost:30000:LIFE_CENTER:::?charset=UTF-8
 spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
@@ -27,4 +27,6 @@ logging.level.root=debug
 spring.profiles.active=local
 spring.devtools.livereload.enabled=true
 spring.servlet.multipart.max-file-size=10MB
-spring.servlet.multipart.max-request-size=10MB
+spring.servlet.multipart.max-request-size=10MB
+
+

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

@@ -0,0 +1,14 @@
+<?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>

+ 0 - 14
src/main/resources/mybatis/mapper/queryLog/queryLog.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.QueryLogMapper">
-    <insert id="insertSysQueryLog" parameterType="QueryLogDTO">
-        <![CDATA[
-            -- insertSysQueryLog
-            INSERT 
-              INTO SYS_QUERY_LOG
-                   ( ID,    IP,    CREATE_DATE, QUERY_LOG,   FULL_URL   )
-             VALUE ( #{id}, #{ip}, NOW(),       #{queryLog}, #{fullUrl} )
-        ]]>
-    </insert>
-</mapper>