From 9696cac273f24d3ebef28c770eb30082ab99644a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Tue, 22 Nov 2022 18:48:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=EC=A4=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dbnt/faisp/config/BaseController.java | 24 ++- .../dbnt/faisp/config/FaispInterceptor.java | 27 ++- .../java/com/dbnt/faisp/config/LogStatus.java | 28 --- .../com/dbnt/faisp/config/SecurityConfig.java | 48 ++++- .../com/dbnt/faisp/config/WebMvcConfig.java | 11 +- .../crackdownStatus/CrackdownStatus.java | 2 +- ...pController.java => PoliceController.java} | 81 ++++---- ...Controller.java => UserMgtController.java} | 31 ++- .../main/userInfo/mapper/UserInfoMapper.java | 13 +- .../main/userInfo/model/UserInoutLog.java | 41 ++++ .../main/userInfo/model/UserRequestLog.java | 50 +++++ .../repository/UserInoutLogRepository.java | 8 + .../repository/UserRequestLogRepository.java | 8 + .../main/userInfo/service/PoliceService.java | 130 ++++++++++++ .../userInfo/service/UserInfoService.java | 110 +---------- .../main/userInfo/service/UserLogService.java | 53 +++++ src/main/java/com/dbnt/faisp/util/Utils.java | 22 +++ .../mybatisMapper/UserInfoMapper.xml | 34 ++++ .../static/js/{faisp => police}/careerMgt.js | 16 +- .../static/js/{faisp => police}/edu.js | 12 +- .../js/{faisp => police}/personnelStatus.js | 10 +- .../static/js/{faisp => police}/police.js | 20 +- .../resources/static/js/userMgt/userLog.js | 29 +++ .../templates/adminPage/userLog/inoutLog.html | 180 +++++++++++++++++ .../adminPage/userLog/requestLog.html | 185 ++++++++++++++++++ .../resources/templates/fragments/header.html | 2 +- .../career/careerFormModal.html | 0 .../{faisp => police}/career/careerMgt.html | 4 +- .../{faisp => police}/career/careerModal.html | 0 .../career/kwmsCareerModal.html | 0 .../education/eduEditModal.html | 0 .../education/educationMgt.html | 4 +- .../personnelStatus/personnelStatus.html | 4 +- .../personnelStatusHistory.html | 0 .../personnelStatus/personnelStatusRow.html | 0 .../police/policeEditModal.html | 0 .../police/policeHistory.html | 0 .../{faisp => police}/police/policeList.html | 4 +- 38 files changed, 951 insertions(+), 240 deletions(-) delete mode 100644 src/main/java/com/dbnt/faisp/config/LogStatus.java rename src/main/java/com/dbnt/faisp/main/userInfo/{FaispController.java => PoliceController.java} (83%) rename src/main/java/com/dbnt/faisp/main/userInfo/{userMgtController.java => UserMgtController.java} (68%) create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/model/UserInoutLog.java create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/model/UserRequestLog.java create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/repository/UserInoutLogRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/repository/UserRequestLogRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/service/PoliceService.java create mode 100644 src/main/java/com/dbnt/faisp/main/userInfo/service/UserLogService.java rename src/main/resources/static/js/{faisp => police}/careerMgt.js (94%) rename src/main/resources/static/js/{faisp => police}/edu.js (94%) rename src/main/resources/static/js/{faisp => police}/personnelStatus.js (96%) rename src/main/resources/static/js/{faisp => police}/police.js (93%) create mode 100644 src/main/resources/static/js/userMgt/userLog.js create mode 100644 src/main/resources/templates/adminPage/userLog/inoutLog.html create mode 100644 src/main/resources/templates/adminPage/userLog/requestLog.html rename src/main/resources/templates/{faisp => police}/career/careerFormModal.html (100%) rename src/main/resources/templates/{faisp => police}/career/careerMgt.html (99%) rename src/main/resources/templates/{faisp => police}/career/careerModal.html (100%) rename src/main/resources/templates/{faisp => police}/career/kwmsCareerModal.html (100%) rename src/main/resources/templates/{faisp => police}/education/eduEditModal.html (100%) rename src/main/resources/templates/{faisp => police}/education/educationMgt.html (98%) rename src/main/resources/templates/{faisp => police}/personnelStatus/personnelStatus.html (98%) rename src/main/resources/templates/{faisp => police}/personnelStatus/personnelStatusHistory.html (100%) rename src/main/resources/templates/{faisp => police}/personnelStatus/personnelStatusRow.html (100%) rename src/main/resources/templates/{faisp => police}/police/policeEditModal.html (100%) rename src/main/resources/templates/{faisp => police}/police/policeHistory.html (100%) rename src/main/resources/templates/{faisp => police}/police/policeList.html (99%) diff --git a/src/main/java/com/dbnt/faisp/config/BaseController.java b/src/main/java/com/dbnt/faisp/config/BaseController.java index 81bb7791..988d6a65 100644 --- a/src/main/java/com/dbnt/faisp/config/BaseController.java +++ b/src/main/java/com/dbnt/faisp/config/BaseController.java @@ -1,5 +1,6 @@ package com.dbnt.faisp.config; +import com.dbnt.faisp.main.codeMgt.model.CodeMgt; import com.dbnt.faisp.main.menuMgt.service.MenuMgtService; import com.dbnt.faisp.main.organMgt.service.OrganConfigService; import com.dbnt.faisp.main.userInfo.model.UserInfo; @@ -13,6 +14,8 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; +import java.util.List; +import java.util.Map; @RestController @RequiredArgsConstructor @@ -71,6 +74,25 @@ public class BaseController { loginUser.setDownOrganCdList(organConfigService.selectDownOrganListWhereUserOgCd(loginUser.getOgCd())); loginUser.setUpOrganCdList(organConfigService.selectUpOrganListWhereUserOgCd(loginUser.getOgCd())); session.setAttribute("menuList", menuMgtService.selectAccessMenuListWhereUserSeq(loginUser.getUserSeq())); - session.setAttribute("commonCode", codeMgtService.getCommonCode()); + Map> codeMap = codeMgtService.getCommonCode(); + session.setAttribute("commonCode", codeMap); + String belongValue = ""; + belongValue += searchCodeValue(loginUser.getOgCd(), codeMap.get("OG")); + belongValue += searchCodeValue(loginUser.getOfcCd(), codeMap.get("OFC")); + belongValue += searchCodeValue(loginUser.getTitleCd(), codeMap.get("JT")); + belongValue += loginUser.getUserNm()+"("+loginUser.getUserId()+")"; + session.setAttribute("belongValue", belongValue); + } + private String searchCodeValue(String itemCd, List codeList){ + if(itemCd==null){ + return ""; + }else{ + for(CodeMgt code: codeList){ + if(itemCd.equals(code.getItemCd())){ + return code.getItemValue()+" "; + } + } + } + return ""; } } diff --git a/src/main/java/com/dbnt/faisp/config/FaispInterceptor.java b/src/main/java/com/dbnt/faisp/config/FaispInterceptor.java index afcbed42..d97f2188 100644 --- a/src/main/java/com/dbnt/faisp/config/FaispInterceptor.java +++ b/src/main/java/com/dbnt/faisp/config/FaispInterceptor.java @@ -1,27 +1,42 @@ package com.dbnt.faisp.config; +import com.dbnt.faisp.main.userInfo.model.UserInfo; +import com.dbnt.faisp.main.userInfo.model.UserRequestLog; +import com.dbnt.faisp.main.userInfo.service.UserInfoService; +import com.dbnt.faisp.main.userInfo.service.UserLogService; +import com.dbnt.faisp.util.Utils; +import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component +@RequiredArgsConstructor public class FaispInterceptor implements HandlerInterceptor { private Logger logger = LoggerFactory.getLogger(this.getClass()); + private final UserLogService userLogService; @Override - public boolean preHandle( + public void afterCompletion( HttpServletRequest request, HttpServletResponse response, - Object handler + Object handler, + Exception ex ) throws Exception { - System.out.println(request.getUserPrincipal()); - System.out.println(request.getRequestURI()); - - return true; + //페이지 렌더링 후 실행. + UserRequestLog log = new UserRequestLog(); + log.setContactIp(Utils.getClientIP(request)); + log.setRequestUrl(request.getRequestURI()); + log.setRequestMethod(request.getMethod()); + log.setSearchParams(request.getQueryString()); + log.setHandlerDescription(((HandlerMethod) handler).toString()); + log.setUserBelong((String) request.getSession().getAttribute("belongValue")); + userLogService.saveRequestLog(log); } } diff --git a/src/main/java/com/dbnt/faisp/config/LogStatus.java b/src/main/java/com/dbnt/faisp/config/LogStatus.java deleted file mode 100644 index c1363647..00000000 --- a/src/main/java/com/dbnt/faisp/config/LogStatus.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.dbnt.faisp.config; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.HashMap; - -@AllArgsConstructor -@Getter -public enum LogStatus { - WRITE("작성"), - MODIFY("수정"), - MOVE("이동"), - DELETE("삭제"), - FILE_ADD("파일추가"), - FILE_REMOVE("파일삭제"), - FILE_DOWN("파일다운로드"); - - private String value; - - public static HashMap getStatusMap(){ - HashMap statusMap = new HashMap<>(); - for(LogStatus status: LogStatus.values()){ - statusMap.put(status.name(), status.getValue()); - } - return statusMap; - } -} diff --git a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java index d48d3bd7..99e017aa 100644 --- a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java +++ b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java @@ -1,6 +1,9 @@ package com.dbnt.faisp.config; import com.dbnt.faisp.main.userInfo.model.UserInfo; +import com.dbnt.faisp.main.userInfo.model.UserInoutLog; +import com.dbnt.faisp.main.userInfo.service.UserLogService; +import com.dbnt.faisp.util.Utils; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +17,9 @@ import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.DefaultRedirectStrategy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @@ -27,6 +32,7 @@ import javax.servlet.http.HttpServletResponse; public class SecurityConfig{ private final Logger log = LoggerFactory.getLogger(getClass()); private final BaseController baseController; + private final UserLogService userLogService; @Bean public PasswordEncoder passwordEncoder(){ @@ -61,6 +67,14 @@ public class SecurityConfig{ return (request, response, authentication) -> { SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request,response); baseController.setSession((UserInfo)authentication.getPrincipal(), request.getSession()); + + UserInoutLog inoutLog = new UserInoutLog(); + inoutLog.setInoutType("IOT001"); + inoutLog.setContactIp(Utils.getClientIP(request)); + inoutLog.setSessionId(request.getSession().getId()); + inoutLog.setUserBelong((String) request.getSession().getAttribute("belongValue")); + userLogService.saveInoutLog(inoutLog); + if(savedRequest != null){ String targetUrl = savedRequest.getRedirectUrl(); new DefaultRedirectStrategy().sendRedirect(request,response,targetUrl); @@ -69,6 +83,30 @@ public class SecurityConfig{ } }; } + @Bean + public AuthenticationFailureHandler loginFailureHandler(){ + return (request, response, exception) -> { + UserInoutLog inoutLog = new UserInoutLog(); + inoutLog.setInoutType("IOT002"); + inoutLog.setContactIp(Utils.getClientIP(request)); + userLogService.saveInoutLog(inoutLog); + + new DefaultRedirectStrategy().sendRedirect(request, response, "/login-error"); + }; + } + @Bean + public LogoutSuccessHandler logoutSuccessHandler(){ + return (request, response, authentication) -> { + UserInoutLog inoutLog = new UserInoutLog(); + inoutLog.setInoutType("IOT003"); + inoutLog.setContactIp(Utils.getClientIP(request)); + inoutLog.setSessionId(request.getSession().getId()); + inoutLog.setUserBelong((String) request.getSession().getAttribute("belongValue")); + userLogService.saveInoutLog(inoutLog); + + new DefaultRedirectStrategy().sendRedirect(request, response, "/"); + }; + } @Bean protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { @@ -88,7 +126,7 @@ public class SecurityConfig{ "/affairResult/**", "/faStatistics/**", "/translator/**", - "/faisp/**", + "/police/**", "/sri/**" ).hasRole(Role.USER.name()) // USER 접근 허용 .antMatchers( @@ -110,15 +148,11 @@ public class SecurityConfig{ ).permitAll() // 로그인 페이지는 권한 없이 접근 허용 .and() // 로그인 설정 .formLogin().loginPage("/login") // Custom login form 사용 - .failureUrl("/login-error") // 로그인 실패 시 이동 - .defaultSuccessUrl("/") // 로그인 성공 시 이동 - /*.failureHandler((request, response, exception) -> { - - })*/ // 로그인 실패시 동작 수행 + .failureHandler(loginFailureHandler()) // 로그인 실패시 동작 수행 .successHandler(loginSuccessHandler()) // 로그인 성공시 동작 수행. .and() // 로그아웃 설정 .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")) // 로그아웃 시 URL 재정의 - .logoutSuccessUrl("/") // 로그아웃 성공 시 redirect 이동 + .logoutSuccessHandler(logoutSuccessHandler()) // 로그아웃 성공시 동작 수행. .invalidateHttpSession(true) // HTTP Session 초기화 .deleteCookies("JSESSIONID") // 특정 쿠키 제거 .and() // 403 예외처리 핸들링 diff --git a/src/main/java/com/dbnt/faisp/config/WebMvcConfig.java b/src/main/java/com/dbnt/faisp/config/WebMvcConfig.java index eef23ae4..f80e70fd 100644 --- a/src/main/java/com/dbnt/faisp/config/WebMvcConfig.java +++ b/src/main/java/com/dbnt/faisp/config/WebMvcConfig.java @@ -1,17 +1,24 @@ package com.dbnt.faisp.config; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { - + private final FaispInterceptor faispInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new FaispInterceptor()) + + registry.addInterceptor(faispInterceptor) .addPathPatterns("/**") .excludePathPatterns( + "/", + "/favicon.ico", + "/editorFileDisplay", + "/fileDisplay", "/css/**", "/img/**", "/js/**", diff --git a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/crackdownStatus/CrackdownStatus.java b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/crackdownStatus/CrackdownStatus.java index 50fd2e51..7a488afe 100644 --- a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/crackdownStatus/CrackdownStatus.java +++ b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/crackdownStatus/CrackdownStatus.java @@ -60,7 +60,7 @@ public class CrackdownStatus extends CrackdownStatusBaseEntity { @Transient private String boatNnySi; @Transient - private Integer tonCnt; + private Double tonCnt; @Transient private String boat_material; @Transient diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java b/src/main/java/com/dbnt/faisp/main/userInfo/PoliceController.java similarity index 83% rename from src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java rename to src/main/java/com/dbnt/faisp/main/userInfo/PoliceController.java index 3962bf2e..cdf95cd8 100644 --- a/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java +++ b/src/main/java/com/dbnt/faisp/main/userInfo/PoliceController.java @@ -3,23 +3,17 @@ package com.dbnt.faisp.main.userInfo; import com.dbnt.faisp.kwms.service.KwmsService; import com.dbnt.faisp.main.authMgt.service.AuthMgtService; -import com.dbnt.faisp.main.codeMgt.model.CodeMgt; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; -import com.dbnt.faisp.main.fipTarget.model.PartInfo; -import com.dbnt.faisp.main.fipTarget.model.ShipInfo; import com.dbnt.faisp.main.userInfo.model.*; +import com.dbnt.faisp.main.userInfo.service.PoliceService; import com.dbnt.faisp.main.userInfo.service.UserInfoService; -import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.Utils; import lombok.RequiredArgsConstructor; import java.io.IOException; import java.time.LocalDateTime; -import java.util.Collections; -import java.util.Comparator; import java.util.List; -import java.util.Map; import javax.servlet.http.HttpServletResponse; @@ -29,18 +23,19 @@ import org.springframework.web.servlet.ModelAndView; @RestController @RequiredArgsConstructor -@RequestMapping("/faisp") -public class FaispController { +@RequestMapping("/police") +public class PoliceController { private final AuthMgtService authMgtService; private final CodeMgtService codeMgtService; private final UserInfoService userInfoService; + private final PoliceService policeService; private final KwmsService kwmsService; @GetMapping("/policeList") public ModelAndView policeList(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response) { - ModelAndView mav = new ModelAndView("faisp/police/policeList"); + ModelAndView mav = new ModelAndView("police/police/policeList"); userInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); if(userInfo.getUserStatus() == null) { userInfo.setUserStatus("USC003"); @@ -75,7 +70,7 @@ public class FaispController { } //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/policeList").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/policeList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); userInfo.setQueryInfo(); mav.addObject("policeList", userInfoService.selectPoliceList(userInfo)); @@ -89,7 +84,7 @@ public class FaispController { @GetMapping("/policeEditModal") public ModelAndView policeEditModal(@AuthenticationPrincipal UserInfo loginUser,UserInfo userInfo){ - ModelAndView mav = new ModelAndView("/faisp/police/policeEditModal"); + ModelAndView mav = new ModelAndView("police/police/policeEditModal"); mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG", "")); mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC", "")); mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT", "")); @@ -99,7 +94,7 @@ public class FaispController { mav.addObject("statusList", codeMgtService.selectCodeMgtList("USC", "")); //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/policeList").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/policeList").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); mav.addObject("userInfo", userInfoService.selectUserInfo(userInfo.getUserSeq())); return mav; @@ -113,8 +108,8 @@ public class FaispController { @GetMapping("/policeHistory") public ModelAndView policeHistory(@AuthenticationPrincipal UserInfo loginUser,UserInfoHistory userInfoHistory){ - ModelAndView mav = new ModelAndView("/faisp/police/policeHistory"); - mav.addObject("userStatus", userInfoService.selectuserStatus(userInfoHistory)); + ModelAndView mav = new ModelAndView("police/police/policeHistory"); + mav.addObject("userStatus", userInfoService.selectUserStatus(userInfoHistory)); mav.addObject("policeList", userInfoService.selectPoliceHisList(userInfoHistory)); return mav; @@ -123,7 +118,7 @@ public class FaispController { @GetMapping("/policeHistoryView") @ResponseBody public UserInfoHistory policeHistoryView(UserInfoHistory userInfoHistory){ - return userInfoService.selectpoliceHistoryView(userInfoHistory); + return userInfoService.selectPoliceHistoryView(userInfoHistory); } @PostMapping("/policeStatusUpdate") @@ -151,9 +146,9 @@ public class FaispController { @GetMapping("/personnelStatus") public ModelAndView personnelStatus(@AuthenticationPrincipal UserInfo loginUser, PersonnelStatus personnelStatus){ - ModelAndView mav = new ModelAndView("faisp/personnelStatus/personnelStatus"); + ModelAndView mav = new ModelAndView("police/personnelStatus/personnelStatus"); //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/personnelStatus").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/personnelStatus").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); if(personnelStatus.getYear()==null){ @@ -162,7 +157,7 @@ public class FaispController { personnelStatus.setDownOrganCdList(loginUser.getDownOrganCdList()); mav.addObject("searchParams", personnelStatus); mav.addObject("jtList", codeMgtService.selectCodeMgtList("JT", "reverse")); - List statusList = userInfoService.selectPersonnelStatusList(personnelStatus); + List statusList = policeService.selectPersonnelStatusList(personnelStatus); statusList = calcStatusList(statusList); mav.addObject("statusSummary", makeStatusSummary(statusList)); mav.addObject("statusList", statusList); @@ -171,42 +166,42 @@ public class FaispController { @GetMapping("/personnelStatusRow") public ModelAndView personnelStatusRow(@AuthenticationPrincipal UserInfo loginUser){ - ModelAndView mav = new ModelAndView("faisp/personnelStatus/personnelStatusRow"); + ModelAndView mav = new ModelAndView("police/personnelStatus/personnelStatusRow"); mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); return mav; } @GetMapping("/selectPersonnelStatus") public PersonnelStatus selectPersonnelStatus(PersonnelStatus personnelStatus){ - return userInfoService.selectPersonnelStatusLastVersion(personnelStatus); + return policeService.selectPersonnelStatusLastVersion(personnelStatus); } @GetMapping("/nowPersonnelStatus") public PersonnelStatus nowPersonnelStatus(String ogCd){ - return userInfoService.nowPersonnelStatus(ogCd); + return policeService.nowPersonnelStatus(ogCd); } @PostMapping("/savePersonnelStatus") @ResponseBody public void savePersonnelStatus(@AuthenticationPrincipal UserInfo loginUser, @RequestBody List personnelStatusList){ - userInfoService.savePersonnelStatus(loginUser, personnelStatusList); + policeService.savePersonnelStatus(loginUser, personnelStatusList); } @GetMapping("/personnelStatusHistory") public ModelAndView personnelStatusHistory(PersonnelStatus status){ - ModelAndView mav = new ModelAndView("faisp/personnelStatus/personnelStatusHistory"); + ModelAndView mav = new ModelAndView("police/personnelStatus/personnelStatusHistory"); mav.addObject("jtList", codeMgtService.selectCodeMgtList("JT", "reverse")); - List statusList = userInfoService.selectPersonnelStatusHistoryList(status); + List statusList = policeService.selectPersonnelStatusHistoryList(status); mav.addObject("statusList", calcStatusList(statusList)); return mav; } @GetMapping("/careerMgt") public ModelAndView careerMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){ - ModelAndView mav = new ModelAndView("faisp/career/careerMgt"); + ModelAndView mav = new ModelAndView("police/career/careerMgt"); userInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); if(userInfo.getUserStatus() == null) { userInfo.setUserStatus("USC003"); } //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/careerMgt").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/careerMgt").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); userInfo.setQueryInfo(); mav.addObject("policeList", userInfoService.selectPoliceList(userInfo)); @@ -219,21 +214,21 @@ public class FaispController { } @GetMapping("/careerModal") public ModelAndView careerModal(@AuthenticationPrincipal UserInfo loginUser, UserCareer career){ - ModelAndView mav = new ModelAndView("faisp/career/careerModal"); + ModelAndView mav = new ModelAndView("police/career/careerModal"); //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/careerMgt").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/careerMgt").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); mav.addObject("selectedTab", career.getCareerCd()); mav.addObject("crcList", codeMgtService.selectCodeMgtList("CRC", "")); - mav.addObject("userInfo", userInfoService.selectPoliceInfo(career.getUserSeq())); - mav.addObject("careerList", userInfoService.selectCareerList(career.getUserSeq())); + mav.addObject("userInfo", policeService.selectPoliceInfo(career.getUserSeq())); + mav.addObject("careerList", policeService.selectCareerList(career.getUserSeq())); mav.addObject("userSeq", loginUser.getUserSeq()); return mav; } @GetMapping("/careerFormModal") public ModelAndView careerFormModal(@AuthenticationPrincipal UserInfo loginUser, UserCareer career){ - ModelAndView mav = new ModelAndView("faisp/career/careerFormModal"); + ModelAndView mav = new ModelAndView("police/career/careerFormModal"); mav.addObject("crcList", codeMgtService.selectCodeMgtList("CRC", "")); mav.addObject("dsnList", codeMgtService.selectCodeMgtList("DSN", "")); mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG", "")); @@ -250,7 +245,7 @@ public class FaispController { career.setWrtUserGrd(loginUser.getTitleCd()); career.setWrtUserNm(loginUser.getUserNm()); career.setWrtDt(LocalDateTime.now()); - userInfoService.saveCareer(career); + policeService.saveCareer(career); } @PostMapping("/saveCareerList") public void saveCareerList(@AuthenticationPrincipal UserInfo loginUser, UserCareer info){ @@ -262,23 +257,23 @@ public class FaispController { career.setWrtUserNm(loginUser.getUserNm()); career.setWrtDt(LocalDateTime.now()); } - userInfoService.saveCareerList(info.getCareerList()); + policeService.saveCareerList(info.getCareerList()); } @PostMapping("/deleteCareer") public void deleteCareer(UserCareer career){ - userInfoService.deleteCareer(career); + policeService.deleteCareer(career); } @GetMapping("/educationMgt") public ModelAndView educationMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){ - ModelAndView mav = new ModelAndView("faisp/education/educationMgt"); + ModelAndView mav = new ModelAndView("police/education/educationMgt"); userInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); if(userInfo.getUserStatus() == null) { userInfo.setUserStatus("USC003"); } //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/educationMgt").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); userInfo.setQueryInfo(); mav.addObject("policeList", userInfoService.selectPoliceList(userInfo)); @@ -292,13 +287,13 @@ public class FaispController { @GetMapping("/eduEditModal") public ModelAndView eduEditModal(@AuthenticationPrincipal UserInfo loginUser,UserEdu userEdu){ - ModelAndView mav = new ModelAndView("/faisp/education/eduEditModal"); + ModelAndView mav = new ModelAndView("police/education/eduEditModal"); //메뉴권한 확인 - String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth(); + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/police/educationMgt").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); - mav.addObject("userInfo", userInfoService.selectPoliceInfo(userEdu.getUserSeq())); - mav.addObject("eduList", userInfoService.selectEduList(userEdu)); + mav.addObject("userInfo", policeService.selectPoliceInfo(userEdu.getUserSeq())); + mav.addObject("eduList", policeService.selectEduList(userEdu)); mav.addObject("userSeq", loginUser.getUserSeq()); return mav; } @@ -306,13 +301,13 @@ public class FaispController { @PostMapping("/saveEdu") @ResponseBody public int saveEdu(@AuthenticationPrincipal UserInfo loginUser,@RequestBody List userEdu){ - return userInfoService.saveEdu(loginUser,userEdu); + return policeService.saveEdu(loginUser,userEdu); } @PostMapping("/deleteEdu") @ResponseBody public int deleteEdu(@RequestBody UserEdu userEdu) { - return userInfoService.deleteEdu(userEdu); + return policeService.deleteEdu(userEdu); } private List calcStatusList(List statusList) { diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/userMgtController.java b/src/main/java/com/dbnt/faisp/main/userInfo/UserMgtController.java similarity index 68% rename from src/main/java/com/dbnt/faisp/main/userInfo/userMgtController.java rename to src/main/java/com/dbnt/faisp/main/userInfo/UserMgtController.java index e31c10ea..384b6299 100644 --- a/src/main/java/com/dbnt/faisp/main/userInfo/userMgtController.java +++ b/src/main/java/com/dbnt/faisp/main/userInfo/UserMgtController.java @@ -2,8 +2,11 @@ package com.dbnt.faisp.main.userInfo; import com.dbnt.faisp.kwms.service.KwmsService; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.main.userInfo.model.UserInoutLog; +import com.dbnt.faisp.main.userInfo.model.UserRequestLog; import com.dbnt.faisp.main.userInfo.service.UserInfoService; import com.dbnt.faisp.main.userInfo.model.UserInfo; +import com.dbnt.faisp.main.userInfo.service.UserLogService; import lombok.RequiredArgsConstructor; import java.util.List; @@ -16,9 +19,10 @@ import org.springframework.web.servlet.ModelAndView; @RestController @RequiredArgsConstructor @RequestMapping("/userMgt") -public class userMgtController { +public class UserMgtController { private final UserInfoService userInfoService; + private final UserLogService userLogService; private final CodeMgtService codeMgtService; private final KwmsService kwmsService; @@ -91,4 +95,29 @@ public class userMgtController { return ""; } } + + @GetMapping("/userLog/requestLog") + public ModelAndView requestLog(@AuthenticationPrincipal UserInfo loginUser, UserRequestLog requestLog){ + ModelAndView mav = new ModelAndView("adminPage/userLog/requestLog"); + requestLog.setDownOrganCdList(loginUser.getDownOrganCdList()); + requestLog.setQueryInfo(); + mav.addObject("logList", userLogService.selectRequestLogList(requestLog)); + requestLog.setContentCnt(userLogService.selectRequestLogListCnt(requestLog)); + requestLog.setPaginationInfo(); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + mav.addObject("searchParams", requestLog); + return mav; + } + @GetMapping("/userLog/inoutLog") + public ModelAndView inoutLog(@AuthenticationPrincipal UserInfo loginUser, UserInoutLog inoutLog){ + ModelAndView mav = new ModelAndView("adminPage/userLog/inoutLog"); + inoutLog.setDownOrganCdList(loginUser.getDownOrganCdList()); + inoutLog.setQueryInfo(); + mav.addObject("logList", userLogService.selectInoutLogList(inoutLog)); + inoutLog.setContentCnt(userLogService.selectInoutLogListCnt(inoutLog)); + inoutLog.setPaginationInfo(); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + mav.addObject("searchParams", inoutLog); + return mav; + } } diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/mapper/UserInfoMapper.java b/src/main/java/com/dbnt/faisp/main/userInfo/mapper/UserInfoMapper.java index 56a8e15b..4926c7a8 100644 --- a/src/main/java/com/dbnt/faisp/main/userInfo/mapper/UserInfoMapper.java +++ b/src/main/java/com/dbnt/faisp/main/userInfo/mapper/UserInfoMapper.java @@ -1,10 +1,6 @@ package com.dbnt.faisp.main.userInfo.mapper; -import com.dbnt.faisp.main.userInfo.model.DashboardConfig; -import com.dbnt.faisp.main.userInfo.model.PersonnelStatus; -import com.dbnt.faisp.main.userInfo.model.UserEdu; -import com.dbnt.faisp.main.userInfo.model.UserInfo; -import com.dbnt.faisp.main.userInfo.model.UserInfoHistory; +import com.dbnt.faisp.main.userInfo.model.*; import com.dbnt.faisp.util.ParamMap; import org.apache.ibatis.annotations.Mapper; @@ -37,4 +33,11 @@ public interface UserInfoMapper { List selectEduList(UserEdu userEdu); + List selectRequestLogList(UserRequestLog requestLog); + + Integer selectRequestLogListCnt(UserRequestLog requestLog); + + List selectInoutLogList(UserInoutLog inoutLog); + + Integer selectInoutLogListCnt(UserInoutLog inoutLog); } diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/model/UserInoutLog.java b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserInoutLog.java new file mode 100644 index 00000000..344b4d16 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserInoutLog.java @@ -0,0 +1,41 @@ +package com.dbnt.faisp.main.userInfo.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.time.LocalDateTime; + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "user_inout_log") +public class UserInoutLog extends BaseModel { + @Id + @Column(name = "inout_key") + private String inoutKey; + @Column(name = "inout_type") + private String inoutType; + @Column(name = "contact_ip") + private String contactIp; + @Column(name = "session_id") + private String sessionId; + @Column(name = "user_belong") + private String userBelong; + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDateTime wrtDt; + +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/model/UserRequestLog.java b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserRequestLog.java new file mode 100644 index 00000000..93727134 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserRequestLog.java @@ -0,0 +1,50 @@ +package com.dbnt.faisp.main.userInfo.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.time.LocalDateTime; + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "user_request_log") +public class UserRequestLog extends BaseModel { + @Id + @Column(name = "ul_key") + private String ulKey; + @Column(name = "contact_ip") + private String contactIp; + @Column(name = "request_url") + private String requestUrl; + @Column(name = "request_method") + private String requestMethod; + @Column(name = "search_params") + private String searchParams; + @Column(name = "handler_description") + private String handlerDescription; + @Column(name = "user_belong") + private String userBelong; + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDateTime wrtDt; + + @Transient + private String organValue; + @Transient + private String officeValue; + @Transient + private String titleValue; + @Transient + private String userNm; + @Transient + private String userId; +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserInoutLogRepository.java b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserInoutLogRepository.java new file mode 100644 index 00000000..fdce3fdb --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserInoutLogRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.main.userInfo.repository; + +import com.dbnt.faisp.main.userInfo.model.UserInoutLog; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface UserInoutLogRepository extends JpaRepository { +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserRequestLogRepository.java b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserRequestLogRepository.java new file mode 100644 index 00000000..025e6414 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserRequestLogRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.main.userInfo.repository; + +import com.dbnt.faisp.main.userInfo.model.UserRequestLog; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface UserRequestLogRepository extends JpaRepository { +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/service/PoliceService.java b/src/main/java/com/dbnt/faisp/main/userInfo/service/PoliceService.java new file mode 100644 index 00000000..7296d2f6 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/service/PoliceService.java @@ -0,0 +1,130 @@ +package com.dbnt.faisp.main.userInfo.service; + +import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper; +import com.dbnt.faisp.main.userInfo.model.PersonnelStatus; +import com.dbnt.faisp.main.userInfo.model.UserCareer; +import com.dbnt.faisp.main.userInfo.model.UserEdu; +import com.dbnt.faisp.main.userInfo.model.UserInfo; +import com.dbnt.faisp.main.userInfo.repository.PersonnelStatusRepository; +import com.dbnt.faisp.main.userInfo.repository.UserCareerRepository; +import com.dbnt.faisp.main.userInfo.repository.UserEduRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class PoliceService { + + private final UserCareerRepository userCareerRepository; + private final UserEduRepository userEduRepository; + private final PersonnelStatusRepository personnelStatusRepository; + private final UserInfoMapper userInfoMapper; + + + public void saveCareer(UserCareer career) { + UserCareer lastCareer = userCareerRepository.findTop1ByUserSeqOrderByCareerSeqDesc(career.getUserSeq()).orElse(null); + career.setCareerSeq(lastCareer==null?1:(lastCareer.getCareerSeq()+1)); + career.setWorkMonth((int) ChronoUnit.MONTHS.between(career.getStartDate(), career.getEndDate())); + career.setWorkDay((int) ChronoUnit.DAYS.between(career.getStartDate(), career.getEndDate())); + userCareerRepository.save(career); + } + + public void saveCareerList(List careerList) { + UserCareer lastCareer = userCareerRepository.findTop1ByUserSeqOrderByCareerSeqDesc(careerList.get(0).getUserSeq()).orElse(null); + int careerSeq = lastCareer==null?1:(lastCareer.getCareerSeq()+1); + for(UserCareer career: careerList){ + career.setCareerSeq(careerSeq++); + } + userCareerRepository.saveAll(careerList); + } + + public List selectCareerList(Integer userSeq) { + return userCareerRepository.findByUserSeqOrderByStartDateDesc(userSeq); + } + + public void deleteCareer(UserCareer career) { + userCareerRepository.deleteById(new UserCareer.UserCareerId(career.getUserSeq(), career.getCareerSeq())); + } + + @Transactional + public int saveEdu(@AuthenticationPrincipal UserInfo loginUser, List userEdu) { + int userSeq = 0; + for(UserEdu ue : userEdu ) { + UserEdu dbEdu = userEduRepository.findTopByUserSeqOrderByEduSeqDesc(ue.getUserSeq()); + if (dbEdu == null) { + ue.setEduSeq(1); + ue.setWrtOrgan(loginUser.getOgCd()); + ue.setWrtPart(loginUser.getOfcCd()); + ue.setWrtTitle(loginUser.getTitleCd()); + ue.setWrtUserSeq(loginUser.getUserSeq()); + ue.setWrtNm(loginUser.getUserNm()); + ue.setWrtDt(LocalDateTime.now()); + userEduRepository.save(ue); + } else { + ue.setEduSeq(dbEdu.getEduSeq()+ 1); + ue.setWrtOrgan(loginUser.getOgCd()); + ue.setWrtPart(loginUser.getOfcCd()); + ue.setWrtTitle(loginUser.getTitleCd()); + ue.setWrtUserSeq(loginUser.getUserSeq()); + ue.setWrtNm(loginUser.getUserNm()); + ue.setWrtDt(LocalDateTime.now()); + userEduRepository.save(ue); + } + userSeq = ue.getUserSeq(); + } + return userSeq; + } + public List selectEduList(UserEdu userEdu) { + return userInfoMapper.selectEduList(userEdu); + } + + @Transactional + public int deleteEdu(UserEdu userEdu) { + userEduRepository.deleteById(new UserEdu.UserEduId(userEdu.getEduSeq(), userEdu.getUserSeq())); + return userEdu.getUserSeq(); + } + + + + public List selectPersonnelStatusList(PersonnelStatus personnelStatus) { + return userInfoMapper.selectPersonnelStatusList(personnelStatus); + } + public PersonnelStatus selectPersonnelStatusLastVersion(PersonnelStatus personnelStatus) { + return personnelStatusRepository + .findTop1ByYearAndOgCdOrderByVersionNoDesc + (personnelStatus.getYear(), personnelStatus.getOgCd()).orElse(personnelStatus); + } + + @Transactional + public void savePersonnelStatus(UserInfo loginUser, List personnelStatusList) { + for(PersonnelStatus status: personnelStatusList){ + PersonnelStatus lastVersion = personnelStatusRepository.findTop1ByYearAndOgCdOrderByVersionNoDesc(status.getYear(), status.getOgCd()).orElse(null); + status.setVersionNo(lastVersion==null?1:(lastVersion.getVersionNo()+1)); + status.setWrtOrgan(loginUser.getOgCd()); + status.setWrtPart(loginUser.getOfcCd()); + status.setWrtUserSeq(loginUser.getUserSeq()); + status.setWrtUserNm(loginUser.getUserNm()); + status.setWrtUserGrd(loginUser.getTitleCd()); + status.setWrtDt(LocalDateTime.now()); + } + personnelStatusRepository.saveAll(personnelStatusList); + } + + public PersonnelStatus nowPersonnelStatus(String ogCd) { + return userInfoMapper.nowPersonnelStatus(ogCd); + } + + public List selectPersonnelStatusHistoryList(PersonnelStatus status) { + return personnelStatusRepository.findByYearAndOgCdOrderByVersionNoDesc(status.getYear(), status.getOgCd()); + } + + public UserInfo selectPoliceInfo(Integer userSeq) { + return userInfoMapper.selectPoliceInfo(userSeq); + } +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/service/UserInfoService.java b/src/main/java/com/dbnt/faisp/main/userInfo/service/UserInfoService.java index 96578a5d..b26b2380 100644 --- a/src/main/java/com/dbnt/faisp/main/userInfo/service/UserInfoService.java +++ b/src/main/java/com/dbnt/faisp/main/userInfo/service/UserInfoService.java @@ -3,13 +3,11 @@ package com.dbnt.faisp.main.userInfo.service; import com.dbnt.faisp.config.Role; import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper; import com.dbnt.faisp.main.userInfo.model.*; -import com.dbnt.faisp.main.userInfo.model.UserEdu.UserEduId; import com.dbnt.faisp.main.userInfo.repository.*; import com.dbnt.faisp.util.ParamMap; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; @@ -18,8 +16,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.time.Period; -import java.time.temporal.ChronoUnit; import java.util.List; @Service @@ -29,9 +25,6 @@ public class UserInfoService implements UserDetailsService { private final UserInfoRepository userInfoRepository; private final UserInfoHistoryRepository userInfoHistoryRepository; private final DashboardConfigRepository dashboardConfigRepository; - private final PersonnelStatusRepository personnelStatusRepository; - private final UserCareerRepository userCareerRepository; - private final UserEduRepository userEduRepository; private final UserInfoMapper userInfoMapper; @Transactional @@ -285,110 +278,11 @@ public class UserInfoService implements UserDetailsService { return userInfoMapper.selectPoliceHisList(userInfoHistory); } - public UserInfoHistory selectpoliceHistoryView(UserInfoHistory userInfoHistory) { + public UserInfoHistory selectPoliceHistoryView(UserInfoHistory userInfoHistory) { return userInfoMapper.selectpoliceHistoryView(userInfoHistory); } - public String selectuserStatus(UserInfoHistory userInfoHistory) { + public String selectUserStatus(UserInfoHistory userInfoHistory) { return userInfoRepository.getUserStatus(userInfoHistory.getUserSeq()); } - public List selectPersonnelStatusList(PersonnelStatus personnelStatus) { - return userInfoMapper.selectPersonnelStatusList(personnelStatus); - } - public PersonnelStatus selectPersonnelStatusLastVersion(PersonnelStatus personnelStatus) { - return personnelStatusRepository - .findTop1ByYearAndOgCdOrderByVersionNoDesc - (personnelStatus.getYear(), personnelStatus.getOgCd()).orElse(personnelStatus); - } - - @Transactional - public void savePersonnelStatus(UserInfo loginUser, List personnelStatusList) { - for(PersonnelStatus status: personnelStatusList){ - PersonnelStatus lastVersion = personnelStatusRepository.findTop1ByYearAndOgCdOrderByVersionNoDesc(status.getYear(), status.getOgCd()).orElse(null); - status.setVersionNo(lastVersion==null?1:(lastVersion.getVersionNo()+1)); - status.setWrtOrgan(loginUser.getOgCd()); - status.setWrtPart(loginUser.getOfcCd()); - status.setWrtUserSeq(loginUser.getUserSeq()); - status.setWrtUserNm(loginUser.getUserNm()); - status.setWrtUserGrd(loginUser.getTitleCd()); - status.setWrtDt(LocalDateTime.now()); - } - personnelStatusRepository.saveAll(personnelStatusList); - } - - public PersonnelStatus nowPersonnelStatus(String ogCd) { - return userInfoMapper.nowPersonnelStatus(ogCd); - } - - public List selectPersonnelStatusHistoryList(PersonnelStatus status) { - return personnelStatusRepository.findByYearAndOgCdOrderByVersionNoDesc(status.getYear(), status.getOgCd()); - } - - public UserInfo selectPoliceInfo(Integer userSeq) { - return userInfoMapper.selectPoliceInfo(userSeq); - } - - public void saveCareer(UserCareer career) { - UserCareer lastCareer = userCareerRepository.findTop1ByUserSeqOrderByCareerSeqDesc(career.getUserSeq()).orElse(null); - career.setCareerSeq(lastCareer==null?1:(lastCareer.getCareerSeq()+1)); - career.setWorkMonth((int) ChronoUnit.MONTHS.between(career.getStartDate(), career.getEndDate())); - career.setWorkDay((int) ChronoUnit.DAYS.between(career.getStartDate(), career.getEndDate())); - userCareerRepository.save(career); - } - - public void saveCareerList(List careerList) { - UserCareer lastCareer = userCareerRepository.findTop1ByUserSeqOrderByCareerSeqDesc(careerList.get(0).getUserSeq()).orElse(null); - int careerSeq = lastCareer==null?1:(lastCareer.getCareerSeq()+1); - for(UserCareer career: careerList){ - career.setCareerSeq(careerSeq++); - } - userCareerRepository.saveAll(careerList); - } - - public List selectCareerList(Integer userSeq) { - return userCareerRepository.findByUserSeqOrderByStartDateDesc(userSeq); - } - - public void deleteCareer(UserCareer career) { - userCareerRepository.deleteById(new UserCareer.UserCareerId(career.getUserSeq(), career.getCareerSeq())); - } - - @Transactional - public int saveEdu(@AuthenticationPrincipal UserInfo loginUser,List userEdu) { - int userSeq = 0; - for(UserEdu ue : userEdu ) { - UserEdu dbEdu = userEduRepository.findTopByUserSeqOrderByEduSeqDesc(ue.getUserSeq()); - if (dbEdu == null) { - ue.setEduSeq(1); - ue.setWrtOrgan(loginUser.getOgCd()); - ue.setWrtPart(loginUser.getOfcCd()); - ue.setWrtTitle(loginUser.getTitleCd()); - ue.setWrtUserSeq(loginUser.getUserSeq()); - ue.setWrtNm(loginUser.getUserNm()); - ue.setWrtDt(LocalDateTime.now()); - userEduRepository.save(ue); - } else { - ue.setEduSeq(dbEdu.getEduSeq()+ 1); - ue.setWrtOrgan(loginUser.getOgCd()); - ue.setWrtPart(loginUser.getOfcCd()); - ue.setWrtTitle(loginUser.getTitleCd()); - ue.setWrtUserSeq(loginUser.getUserSeq()); - ue.setWrtNm(loginUser.getUserNm()); - ue.setWrtDt(LocalDateTime.now()); - userEduRepository.save(ue); - } - userSeq = ue.getUserSeq(); - } - return userSeq; - } - public List selectEduList(UserEdu userEdu) { - return userInfoMapper.selectEduList(userEdu); - } - - @Transactional - public int deleteEdu(UserEdu userEdu) { - userEduRepository.deleteById(new UserEduId(userEdu.getEduSeq(), userEdu.getUserSeq())); - return userEdu.getUserSeq(); - } - } diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/service/UserLogService.java b/src/main/java/com/dbnt/faisp/main/userInfo/service/UserLogService.java new file mode 100644 index 00000000..acb3f3e2 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/service/UserLogService.java @@ -0,0 +1,53 @@ +package com.dbnt.faisp.main.userInfo.service; + +import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper; +import com.dbnt.faisp.main.userInfo.model.UserInoutLog; +import com.dbnt.faisp.main.userInfo.model.UserRequestLog; +import com.dbnt.faisp.main.userInfo.repository.UserInoutLogRepository; +import com.dbnt.faisp.main.userInfo.repository.UserRequestLogRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class UserLogService { + private final UserRequestLogRepository requestLogRepository; + private final UserInoutLogRepository inoutLogRepository; + private final UserInfoMapper userInfoMapper; + + @Transactional + public void saveRequestLog(UserRequestLog requestLog){ + LocalDateTime dateTime = LocalDateTime.now(); + requestLog.setUlKey(dateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))); + requestLog.setWrtDt(dateTime); + requestLogRepository.save(requestLog); + } + @Transactional + public void saveInoutLog(UserInoutLog inoutLog){ + LocalDateTime dateTime = LocalDateTime.now(); + inoutLog.setInoutKey(dateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))); + inoutLog.setWrtDt(dateTime); + inoutLogRepository.save(inoutLog); + } + + public List selectRequestLogList(UserRequestLog requestLog) { + return userInfoMapper.selectRequestLogList(requestLog); + } + + public Integer selectRequestLogListCnt(UserRequestLog requestLog) { + return userInfoMapper.selectRequestLogListCnt(requestLog); + } + + public List selectInoutLogList(UserInoutLog inoutLog) { + return userInfoMapper.selectInoutLogList(inoutLog); + } + + public Integer selectInoutLogListCnt(UserInoutLog inoutLog) { + return userInfoMapper.selectInoutLogListCnt(inoutLog); + } +} diff --git a/src/main/java/com/dbnt/faisp/util/Utils.java b/src/main/java/com/dbnt/faisp/util/Utils.java index bbfb569f..9c8459a1 100644 --- a/src/main/java/com/dbnt/faisp/util/Utils.java +++ b/src/main/java/com/dbnt/faisp/util/Utils.java @@ -9,6 +9,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -1069,5 +1070,26 @@ public class Utils { } + public static String getClientIP(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + + if (ip == null) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null) { + ip = request.getRemoteAddr(); + } + + return ip; + } } diff --git a/src/main/resources/mybatisMapper/UserInfoMapper.xml b/src/main/resources/mybatisMapper/UserInfoMapper.xml index c21952b4..80912433 100644 --- a/src/main/resources/mybatisMapper/UserInfoMapper.xml +++ b/src/main/resources/mybatisMapper/UserInfoMapper.xml @@ -314,4 +314,38 @@ where user_seq = #{userSeq} order by edu_seq desc + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/faisp/careerMgt.js b/src/main/resources/static/js/police/careerMgt.js similarity index 94% rename from src/main/resources/static/js/faisp/careerMgt.js rename to src/main/resources/static/js/police/careerMgt.js index 5bccc429..2b49123c 100644 --- a/src/main/resources/static/js/faisp/careerMgt.js +++ b/src/main/resources/static/js/police/careerMgt.js @@ -1,15 +1,15 @@ $(document).on('click', '#previousTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/careerMgt?userStatus="+userStatus; + location.href = "/police/careerMgt?userStatus="+userStatus; }) $(document).on('click', '#presentTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/careerMgt?userStatus="+userStatus; + location.href = "/police/careerMgt?userStatus="+userStatus; }) $(document).on('click', '#notPoliceTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/careerMgt?userStatus="+userStatus; + location.href = "/police/careerMgt?userStatus="+userStatus; }) $(document).on('click', '.policeTr', function (){ @@ -18,7 +18,7 @@ $(document).on('click', '.policeTr', function (){ $(document).on('click', '.careerAddBtn', function (){ $.ajax({ - url: '/faisp/careerFormModal', + url: '/police/careerFormModal', data: { userSeq: $("#mngModelUserSeq").val(), careerCd: $(this).attr("data-careercd") @@ -70,7 +70,7 @@ $(document).on('click', '#kwmsModalSelectBtn', function (){ $.ajax({ type : 'POST', data : formData, - url : "/faisp/saveCareerList", + url : "/police/saveCareerList", processData: false, contentType: false, beforeSend: function (xhr){ @@ -115,7 +115,7 @@ $(document).on('click', '#saveBtn', function (){ $.ajax({ type : 'POST', data : formData, - url : "/faisp/saveCareer", + url : "/police/saveCareer", processData: false, contentType: false, beforeSend: function (xhr){ @@ -141,7 +141,7 @@ $(document).on('click', '.deleteCareerBtn', function (){ const tabCd = $(this).attr("data-tab") $.ajax({ type : 'POST', - url : "/faisp/deleteCareer", + url : "/police/deleteCareer", data : { userSeq: userSeq, careerSeq: $(this).attr("data-careerseq") @@ -164,7 +164,7 @@ $(document).on('click', '.deleteCareerBtn', function (){ function getCareerModal(userSeq, careerCd){ $.ajax({ - url: '/faisp/careerModal', + url: '/police/careerModal', data: {userSeq: userSeq, careerCd: careerCd}, type: 'GET', dataType:"html", diff --git a/src/main/resources/static/js/faisp/edu.js b/src/main/resources/static/js/police/edu.js similarity index 94% rename from src/main/resources/static/js/faisp/edu.js rename to src/main/resources/static/js/police/edu.js index a2bb9cd1..2a908f31 100644 --- a/src/main/resources/static/js/faisp/edu.js +++ b/src/main/resources/static/js/police/edu.js @@ -11,7 +11,7 @@ $(document).on('click', '.policeTr', function (event){ function showModal(userSeq){ $.ajax({ - url: '/faisp/eduEditModal', + url: '/police/eduEditModal', data: {userSeq: userSeq}, type: 'GET', dataType:"html", @@ -32,16 +32,16 @@ function showModal(userSeq){ $(document).on('click', '#previousTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/educationMgt?userStatus="+userStatus; + location.href = "/police/educationMgt?userStatus="+userStatus; }) $(document).on('click', '#presentTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/educationMgt?userStatus="+userStatus; + location.href = "/police/educationMgt?userStatus="+userStatus; }) $(document).on('click', '#notPoliceTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/educationMgt?userStatus="+userStatus; + location.href = "/police/educationMgt?userStatus="+userStatus; }) $(document).on('click', '#eduAddBtn', function (){ @@ -119,7 +119,7 @@ $(document).on('click', '#saveBtn', function (){ $.ajax({ type : 'POST', data : JSON.stringify(eduList), - url : "/faisp/saveEdu", + url : "/police/saveEdu", contentType: 'application/json', beforeSend: function (xhr){ xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); @@ -144,7 +144,7 @@ $(document).on('click', '#deleteBtn', function (){ if(confirm("삭제하시겠습니까?")){ $.ajax({ type : 'POST', - url : "/faisp/deleteEdu", + url : "/police/deleteEdu", data : JSON.stringify({eduSeq:eduSeq, userSeq:userSeq}), contentType: 'application/json', diff --git a/src/main/resources/static/js/faisp/personnelStatus.js b/src/main/resources/static/js/police/personnelStatus.js similarity index 96% rename from src/main/resources/static/js/faisp/personnelStatus.js rename to src/main/resources/static/js/police/personnelStatus.js index 285a594e..6d3555a7 100644 --- a/src/main/resources/static/js/faisp/personnelStatus.js +++ b/src/main/resources/static/js/police/personnelStatus.js @@ -13,7 +13,7 @@ $(document).on('click', '#personnelStatusEditModalBtn', function (){ $(document).on('click', '#personnelStatusAddBtn', function (){ $.ajax({ - url: '/faisp/personnelStatusRow', + url: '/police/personnelStatusRow', type: 'GET', dataType:"html", success: function(html){ @@ -34,7 +34,7 @@ $(document).on('change', '.ogCd', function (){ if(this.value !== ''){ personnelStatusRow.find(".nowPersonnelStatusBtn")[0].className = "btn btn-sm btn-success nowPersonnelStatusBtn"; $.ajax({ - url: '/faisp/selectPersonnelStatus', + url: '/police/selectPersonnelStatus', type: 'GET', data: {year: new Date().getFullYear(), ogCd: this.value}, dataType:"json", @@ -66,7 +66,7 @@ $(document).on('change', '.ogCd', function (){ $(document).on('click', '.nowPersonnelStatusBtn', function (){ const personnelStatusRow = $(this).parents(".personnelStatusRow"); $.ajax({ - url: '/faisp/nowPersonnelStatus', + url: '/police/nowPersonnelStatus', type: 'GET', data: {ogCd: personnelStatusRow.find(".ogCd").val()}, dataType:"json", @@ -121,7 +121,7 @@ $(document).on('click', '#saveBtn', function (){ $.ajax({ type : 'POST', data : JSON.stringify(personnelStatusList), - url : "/faisp/savePersonnelStatus", + url : "/police/savePersonnelStatus", contentType: 'application/json', beforeSend: function (xhr){ xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); @@ -144,7 +144,7 @@ $(document).on('click', '#saveBtn', function (){ $(document).on('click', '.statusTr', function (){ const statusTr = $(this); $.ajax({ - url: '/faisp/personnelStatusHistory', + url: '/police/personnelStatusHistory', type: 'GET', data: {year: statusTr.attr("data-year"), ogCd: statusTr.attr("data-ogcd")}, dataType:"html", diff --git a/src/main/resources/static/js/faisp/police.js b/src/main/resources/static/js/police/police.js similarity index 93% rename from src/main/resources/static/js/faisp/police.js rename to src/main/resources/static/js/police/police.js index c81a3ba9..d3d0db3d 100644 --- a/src/main/resources/static/js/faisp/police.js +++ b/src/main/resources/static/js/police/police.js @@ -8,7 +8,7 @@ $(document).on('click', '.policeTr', function (event){ function showModal(userSeq){ $.ajax({ - url: '/faisp/policeEditModal', + url: '/police/policeEditModal', data: {userSeq: userSeq}, type: 'GET', dataType:"html", @@ -42,7 +42,7 @@ $(document).on('click', '#syncToKwmsBtn', function (){ function syncUserInfoToKwms(userList){ $.ajax({ type : 'POST', - url : "/faisp/syncUserInfoToKwms", + url : "/police/syncUserInfoToKwms", data : JSON.stringify(userList), contentType: 'application/json', beforeSend: function (xhr){ @@ -67,7 +67,7 @@ $(document).on('click', '#updateBtn', function (){ $.ajax({ type : 'POST', data : formData, - url : "/faisp/updateUserInfo", + url : "/police/updateUserInfo", processData: false, contentType: false, success : function(data) { @@ -86,7 +86,7 @@ $(document).on('click', '#updateBtn', function (){ $(document).on('click', '#historyTab', function (){ const userSeq = (Number($(this).data('userseq'))); $.ajax({ - url: '/faisp/policeHistory', + url: '/police/policeHistory', data: {userSeq: userSeq}, type: 'GET', dataType:"html", @@ -112,7 +112,7 @@ $(document).on('click', '.historyInfoTr', function (){ $(this).find('.hisChk').prop('checked',true) } $.ajax({ - url: '/faisp/policeHistoryView', + url: '/police/policeHistoryView', data: { userSeq: Number($(this).find(".userSeq").val()), versionNo : Number($(this).find(".verNo").val()) @@ -146,16 +146,16 @@ $(document).on('click', '.historyInfoTr', function (){ $(document).on('click', '#previousTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/policeList?userStatus="+userStatus; + location.href = "/police/policeList?userStatus="+userStatus; }) $(document).on('click', '#presentTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/policeList?userStatus="+userStatus; + location.href = "/police/policeList?userStatus="+userStatus; }) $(document).on('click', '#notPoliceTab', function (){ const userStatus = $(this).data('userstatus'); - location.href = "/faisp/policeList?userStatus="+userStatus; + location.href = "/police/policeList?userStatus="+userStatus; }) $(document).on('click', '#outBtn', function (){ @@ -173,7 +173,7 @@ $(document).on('click', '#outBtn', function (){ }) $.ajax({ type : 'POST', - url : "/faisp/policeStatusUpdate", + url : "/police/policeStatusUpdate", data : JSON.stringify(checkArr), contentType: 'application/json', beforeSend: function (xhr){ @@ -205,7 +205,7 @@ $(document).on('click', '#inBtn', function (){ }) $.ajax({ type : 'POST', - url : "/faisp/policeStatusUpdate", + url : "/police/policeStatusUpdate", data : JSON.stringify(checkArr), contentType: 'application/json', beforeSend: function (xhr){ diff --git a/src/main/resources/static/js/userMgt/userLog.js b/src/main/resources/static/js/userMgt/userLog.js new file mode 100644 index 00000000..b5135c06 --- /dev/null +++ b/src/main/resources/static/js/userMgt/userLog.js @@ -0,0 +1,29 @@ + +$(document).on('click', '#requestTab', function (){ + location.href='/userMgt/userLog/requestLog'; +}) +$(document).on('click', '#inoutTab', function (){ + location.href='/userMgt/userLog/inoutLog'; +}) + +$(document).on('click', '.requestLogTr', function (){ + const logTr = $(this); + $("#contactIp").val(logTr.find(".contactIp").val()); + $("#requestUrl").val(logTr.find(".requestUrl").val()); + $("#requestMethod").val(logTr.find(".requestMethod").val()); + $("#searchParams").val(logTr.find(".searchParams").val()); + $("#handlerDescription").val(logTr.find(".handlerDescription").val()); + $("#userBelong").val(logTr.find(".userBelong").val()); + $("#wrtDt").val(logTr.find(".wrtDt").val()); + $("#requestLogModal").modal("show") +}) + +$(document).on('click', '.inoutLogTr', function (){ + const logTr = $(this); + $("#contactIp").val(logTr.find(".contactIp").val()); + $("#inoutType").val(logTr.find(".inoutType").val()); + $("#sessionId").val(logTr.find(".sessionId").val()); + $("#userBelong").val(logTr.find(".userBelong").val()); + $("#wrtDt").val(logTr.find(".wrtDt").val()); + $("#inoutLogModal").modal("show") +}) \ No newline at end of file diff --git a/src/main/resources/templates/adminPage/userLog/inoutLog.html b/src/main/resources/templates/adminPage/userLog/inoutLog.html new file mode 100644 index 00000000..b48383fa --- /dev/null +++ b/src/main/resources/templates/adminPage/userLog/inoutLog.html @@ -0,0 +1,180 @@ + + + + + +
+
+

외사경찰 관리

+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
접속아이피결과사용자등록일
+ + + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/adminPage/userLog/requestLog.html b/src/main/resources/templates/adminPage/userLog/requestLog.html new file mode 100644 index 00000000..85f7c7d3 --- /dev/null +++ b/src/main/resources/templates/adminPage/userLog/requestLog.html @@ -0,0 +1,185 @@ + + + + + +
+
+

외사경찰 관리

+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
접속아이피요청 URL접근 방식사용자등록일
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/fragments/header.html b/src/main/resources/templates/fragments/header.html index 4b0b5faa..62c2f7cf 100644 --- a/src/main/resources/templates/fragments/header.html +++ b/src/main/resources/templates/fragments/header.html @@ -28,7 +28,7 @@
  • 외사경찰관리
  • 권한설정
  • -
  • 사용자로그
  • +
  • 사용자로그
  • 접속설정
  • diff --git a/src/main/resources/templates/faisp/career/careerFormModal.html b/src/main/resources/templates/police/career/careerFormModal.html similarity index 100% rename from src/main/resources/templates/faisp/career/careerFormModal.html rename to src/main/resources/templates/police/career/careerFormModal.html diff --git a/src/main/resources/templates/faisp/career/careerMgt.html b/src/main/resources/templates/police/career/careerMgt.html similarity index 99% rename from src/main/resources/templates/faisp/career/careerMgt.html rename to src/main/resources/templates/police/career/careerMgt.html index 8f75f555..6c89d2e9 100644 --- a/src/main/resources/templates/faisp/career/careerMgt.html +++ b/src/main/resources/templates/police/career/careerMgt.html @@ -3,7 +3,7 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}"> - +
    @@ -31,7 +31,7 @@
    -
    +
    diff --git a/src/main/resources/templates/faisp/career/careerModal.html b/src/main/resources/templates/police/career/careerModal.html similarity index 100% rename from src/main/resources/templates/faisp/career/careerModal.html rename to src/main/resources/templates/police/career/careerModal.html diff --git a/src/main/resources/templates/faisp/career/kwmsCareerModal.html b/src/main/resources/templates/police/career/kwmsCareerModal.html similarity index 100% rename from src/main/resources/templates/faisp/career/kwmsCareerModal.html rename to src/main/resources/templates/police/career/kwmsCareerModal.html diff --git a/src/main/resources/templates/faisp/education/eduEditModal.html b/src/main/resources/templates/police/education/eduEditModal.html similarity index 100% rename from src/main/resources/templates/faisp/education/eduEditModal.html rename to src/main/resources/templates/police/education/eduEditModal.html diff --git a/src/main/resources/templates/faisp/education/educationMgt.html b/src/main/resources/templates/police/education/educationMgt.html similarity index 98% rename from src/main/resources/templates/faisp/education/educationMgt.html rename to src/main/resources/templates/police/education/educationMgt.html index 5547e9b7..9ca74f71 100644 --- a/src/main/resources/templates/faisp/education/educationMgt.html +++ b/src/main/resources/templates/police/education/educationMgt.html @@ -3,7 +3,7 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}"> - +
    @@ -31,7 +31,7 @@
    - + diff --git a/src/main/resources/templates/faisp/personnelStatus/personnelStatus.html b/src/main/resources/templates/police/personnelStatus/personnelStatus.html similarity index 98% rename from src/main/resources/templates/faisp/personnelStatus/personnelStatus.html rename to src/main/resources/templates/police/personnelStatus/personnelStatus.html index 43516f77..0dec5d07 100644 --- a/src/main/resources/templates/faisp/personnelStatus/personnelStatus.html +++ b/src/main/resources/templates/police/personnelStatus/personnelStatus.html @@ -3,7 +3,7 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}"> - +
    @@ -13,7 +13,7 @@
    - +