From 7c9f240ace09726c1d2935e68466f0b5a22eb69b Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 3 Apr 2025 17:25:23 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/cmn/config/CustomUserDetails.java | 39 +- .../cmn/config/CustomUserDetailsService.java | 18 +- .../itn/admin/cmn/config/SecurityConfig.java | 35 +- .../itn/admin/cmn/config/UserInterceptor.java | 2 +- .../cmn/util/scheduled/ScheduledTasks.java | 6 +- .../cmn/util/thymeleafUtils/TCodeUtils.java | 10 + src/main/java/com/itn/admin/cmn/vo/CmnVO.java | 7 + .../admin/commute/service/CommuteService.java | 1 - .../service/impl/CommuteServiceImpl.java | 147 +------ .../commute/web/CommuteRestController.java | 14 +- .../admin/itn/code/mapper/domain/CodeVO.java | 2 +- .../itn/code/server/CodeDetailService.java | 2 + .../server/impl/CodeDetailServiceImpl.java | 1 + .../commute/service/ItnCommuteService.java | 3 + .../service/impl/ItnCommuteServiceImpl.java | 206 +++++++++- .../itn/mjon/spam/mapper/domain/SpamVO.java | 7 +- .../itn/admin/itn/user/mapper/UserMapper.java | 15 +- .../admin/itn/user/mapper/domain/UserVO.java | 53 +-- .../admin/itn/user/service/UserService.java | 6 + .../user/service/impl/UserServiceImpl.java | 32 ++ .../itn/user/web/UserRestController.java | 45 ++- .../resources/mapper/itn/user/UserMapper.xml | 68 +++- .../templates/fragments/mainsidebar.html | 17 +- .../resources/templates/itn/code/list.html | 4 +- .../resources/templates/itn/commute/list.html | 2 +- .../resources/templates/itn/user/list.html | 365 ++++++++++++++---- 26 files changed, 760 insertions(+), 347 deletions(-) diff --git a/src/main/java/com/itn/admin/cmn/config/CustomUserDetails.java b/src/main/java/com/itn/admin/cmn/config/CustomUserDetails.java index a601036..7bff81d 100644 --- a/src/main/java/com/itn/admin/cmn/config/CustomUserDetails.java +++ b/src/main/java/com/itn/admin/cmn/config/CustomUserDetails.java @@ -1,47 +1,39 @@ package com.itn.admin.cmn.config; +import com.itn.admin.itn.user.mapper.domain.UserVO; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; +import java.util.Collections; +import java.util.Optional; public class CustomUserDetails implements UserDetails { - private final String username; - private final String password; - private final String userId; - private final String id; - private final Collection authorities; + private final UserVO user; - public CustomUserDetails(String username, String password, String userId, String id, Collection authorities) { - this.username = username; - this.password = password; - this.userId = userId; - this.id = id; - this.authorities = authorities; + public CustomUserDetails(UserVO user) { + this.user = user; } - public String getUserId() { - return userId; - } - - public String getId() { - return id; + public UserVO getUser() { + return this.user; } @Override public Collection getAuthorities() { - return authorities; + return Collections.singletonList(new SimpleGrantedAuthority(user.getRole().name())); } @Override public String getPassword() { - return password; + return user.getPassword(); } @Override public String getUsername() { - return username; + return user.getUserId(); // userName으로 바꿔도 무관 } @Override @@ -61,6 +53,11 @@ public class CustomUserDetails implements UserDetails { @Override public boolean isEnabled() { - return true; + return "Y".equalsIgnoreCase(Optional.ofNullable(user.getActiveYn()).orElse("N")); + } + + // 도메인 정보 쉽게 접근할 수 있게 추가적인 getter + public String getId() { + return user.getUniqId(); } } diff --git a/src/main/java/com/itn/admin/cmn/config/CustomUserDetailsService.java b/src/main/java/com/itn/admin/cmn/config/CustomUserDetailsService.java index 60aabf0..7e3128c 100644 --- a/src/main/java/com/itn/admin/cmn/config/CustomUserDetailsService.java +++ b/src/main/java/com/itn/admin/cmn/config/CustomUserDetailsService.java @@ -2,35 +2,39 @@ package com.itn.admin.cmn.config; import com.itn.admin.itn.user.mapper.UserMapper; import com.itn.admin.itn.user.mapper.domain.UserVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.Collection; import java.util.Collections; +@Slf4j @Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserMapper userMapper; +// @Autowired +// private PasswordEncoder passwordEncoder; + @Override public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException { - UserVO user = userMapper.getUserById(userId); + UserVO user = userMapper.getLoadUserByUsername(userId); if (user == null) { throw new UsernameNotFoundException("User not found"); } + log.info("DB Password: {}", user.getPassword()); +// log.info("Encoded password: {}", passwordEncoder.encode("내가 입력한 비밀번호")); +// log.info("match? {}", passwordEncoder.matches("내가 입력한 비밀번호", user.getPassword())); - // 사용자 권한을 SimpleGrantedAuthority로 변환 - GrantedAuthority authority = new SimpleGrantedAuthority(user.getRole().name()); - Collection authorities = Collections.singletonList(authority); - - // CustomUserDetails 객체 생성 - return new CustomUserDetails(user.getUserId(), user.getPassword(), user.getUserId(), user.getUniqId(), authorities); + return new CustomUserDetails(user); } } diff --git a/src/main/java/com/itn/admin/cmn/config/SecurityConfig.java b/src/main/java/com/itn/admin/cmn/config/SecurityConfig.java index 5c00865..4e542e5 100644 --- a/src/main/java/com/itn/admin/cmn/config/SecurityConfig.java +++ b/src/main/java/com/itn/admin/cmn/config/SecurityConfig.java @@ -1,9 +1,12 @@ package com.itn.admin.cmn.config; import com.fasterxml.jackson.databind.ObjectMapper; +import com.itn.admin.itn.user.mapper.UserMapper; +import com.itn.admin.itn.user.mapper.domain.UserVO; import com.itn.admin.itn.user.service.UserService; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; @@ -22,6 +25,7 @@ import org.springframework.security.web.session.SessionInformationExpiredStrateg import java.net.URL; import java.io.PrintWriter; +@Slf4j @Configuration // Spring의 설정 클래스임을 나타냄 @EnableWebSecurity // Spring Security의 웹 보안 기능을 활성화 public class SecurityConfig { @@ -31,16 +35,23 @@ public class SecurityConfig { // 사용자 관련 비즈니스 로직을 처리하는 서비스 private final UserService userService; + private final UserMapper userMapper; + + // 생성자를 통해 의존성 주입 - public SecurityConfig(CustomUserDetailsService customUserDetailsService, UserService userService) { + public SecurityConfig(CustomUserDetailsService customUserDetailsService, UserService userService, UserMapper userMapper) { this.customUserDetailsService = customUserDetailsService; this.userService = userService; + this.userMapper = userMapper; } // 비밀번호 암호화를 위한 BCryptPasswordEncoder 빈 생성 @Bean - PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); + public PasswordEncoder passwordEncoder() { + PasswordEncoder encoder = new BCryptPasswordEncoder(); + log.info(" + UserRestController 등록된 PasswordEncoder instance: {}", encoder); + + return encoder; } // Spring Security의 보안 필터 체인을 설정하는 핵심 메서드 @@ -130,6 +141,24 @@ public class SecurityConfig { public AuthenticationFailureHandler customAuthenticationFailureHandler() { return (request, response, exception) -> { // 실패 원인을 콘솔에 출력 (디버깅용) + String username = request.getParameter("username"); // 입력한 ID + String rawPassword = request.getParameter("password"); // 입력한 비번 + + log.info("로그인 실패 - 입력한 ID: [{}]", username); + log.info("로그인 실패 - 입력한 비번(raw): [{}]", rawPassword); + + // DB 비밀번호 가져오기 (직접 조회) + UserVO user = userMapper.getLoadUserByUsername(username); // userMapper로 직접 조회해도 OK + if (user != null) { + log.info("로그인 실패 - DB 비번(encoded): [{}]", user.getPassword()); + + // 비번 매칭 테스트 + boolean match = passwordEncoder().matches(rawPassword, user.getPassword()); + log.info("비밀번호 일치 여부: [{}]", match); + } else { + log.warn("로그인 실패 - 아이디에 해당하는 사용자 없음"); + } + System.out.println("Authentication failed. Exception: " + exception.getMessage()); response.setStatus(HttpStatus.UNAUTHORIZED.value()); // HTTP 상태 코드 401 설정 response.sendRedirect("/user/login?error=true"); // 로그인 페이지로 리다이렉트 (에러 표시) diff --git a/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java b/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java index 3317d16..45e3571 100644 --- a/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java +++ b/src/main/java/com/itn/admin/cmn/config/UserInterceptor.java @@ -41,7 +41,7 @@ public class UserInterceptor implements HandlerInterceptor { if (principal instanceof UserVO) { // principal이 UserVO 타입인 경우 UserVO loggedInUser = (UserVO) principal; // principal 객체를 UserVO 타입으로 변환 id = loggedInUser.getUserId(); // UserVO 객체에서 userId 값을 가져옴 - userName = loggedInUser.getUsername(); // UserVO 객체에서 username 값을 가져옴 + userName = loggedInUser.getUserName(); // UserVO 객체에서 username 값을 가져옴 } else if (principal instanceof User) { // principal이 User 타입인 경우 User loggedInUser = (User) principal; // principal 객체를 User 타입으로 변환 id = loggedInUser.getUsername(); // User 객체에서 username 값을 가져옴 (userId로 사용) diff --git a/src/main/java/com/itn/admin/cmn/util/scheduled/ScheduledTasks.java b/src/main/java/com/itn/admin/cmn/util/scheduled/ScheduledTasks.java index bc4a284..23b84a6 100644 --- a/src/main/java/com/itn/admin/cmn/util/scheduled/ScheduledTasks.java +++ b/src/main/java/com/itn/admin/cmn/util/scheduled/ScheduledTasks.java @@ -3,6 +3,7 @@ package com.itn.admin.cmn.util.scheduled; import com.itn.admin.commute.mapper.domain.CommuteVO; import com.itn.admin.commute.service.CommuteService; import com.itn.admin.etc.crawling.morak.service.MorakService; +import com.itn.admin.itn.commute.service.ItnCommuteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; @@ -31,6 +32,9 @@ public class ScheduledTasks { @Autowired private CommuteService commuteService; + @Autowired + private ItnCommuteService itnCommuteService; + // @Scheduled(cron = "*/50 * * * * MON-FRI") @Scheduled(cron = "0 40 10 * * MON-FRI") public void noonJob() throws IOException { @@ -40,6 +44,6 @@ public class ScheduledTasks { @Scheduled(cron = "0 0 10 * * MON-FRI") public void commuteJob() throws IOException { CommuteVO commuteVO = new CommuteVO(); - commuteService.transfer(commuteVO); + itnCommuteService.transfer(commuteVO); } } diff --git a/src/main/java/com/itn/admin/cmn/util/thymeleafUtils/TCodeUtils.java b/src/main/java/com/itn/admin/cmn/util/thymeleafUtils/TCodeUtils.java index 183a7e3..8e6b4c8 100644 --- a/src/main/java/com/itn/admin/cmn/util/thymeleafUtils/TCodeUtils.java +++ b/src/main/java/com/itn/admin/cmn/util/thymeleafUtils/TCodeUtils.java @@ -1,10 +1,16 @@ package com.itn.admin.cmn.util.thymeleafUtils; +import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; +import com.itn.admin.itn.code.mapper.domain.CodeVO; import com.itn.admin.itn.code.server.CodeDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.thymeleaf.util.StringUtils; +import java.util.List; + + +// Tag Code Utils @Component public class TCodeUtils { @@ -17,5 +23,9 @@ public class TCodeUtils { }; return codeDetailService.getCodeName(codeGroupId, codeValue); } + public List getCodeList(String codeGroupId) { + return codeDetailService.getDetailsByGroupId(codeGroupId); + + } } diff --git a/src/main/java/com/itn/admin/cmn/vo/CmnVO.java b/src/main/java/com/itn/admin/cmn/vo/CmnVO.java index eaced8e..f5a45c9 100644 --- a/src/main/java/com/itn/admin/cmn/vo/CmnVO.java +++ b/src/main/java/com/itn/admin/cmn/vo/CmnVO.java @@ -1,9 +1,11 @@ package com.itn.admin.cmn.vo; import lombok.*; +import lombok.experimental.SuperBuilder; @NoArgsConstructor @AllArgsConstructor +@SuperBuilder @Getter @Setter public class CmnVO { @@ -17,6 +19,11 @@ public class CmnVO { private int totalPageCount; // 총 페이지 수 private int startPage; // 페이지네이션의 시작 페이지 번호 private int endPage; // 페이지네이션의 끝 페이지 번호 + private String frstRegisterId; + private String frstRegistPnttm; + private String lastUpdusrId; + private String lastUpdtPnttm; + // 페이징을 위한 offset과 limit을 계산하는 메서드 public void calculatePaging(int totalRecordCount) { diff --git a/src/main/java/com/itn/admin/commute/service/CommuteService.java b/src/main/java/com/itn/admin/commute/service/CommuteService.java index 1c4910e..630a6c8 100644 --- a/src/main/java/com/itn/admin/commute/service/CommuteService.java +++ b/src/main/java/com/itn/admin/commute/service/CommuteService.java @@ -11,6 +11,5 @@ public interface CommuteService { Map getList(CommuteVO commuteVO); - Map transfer(CommuteVO commuteVO); } diff --git a/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java b/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java index dcc2361..0c26918 100644 --- a/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java +++ b/src/main/java/com/itn/admin/commute/service/impl/CommuteServiceImpl.java @@ -39,15 +39,9 @@ public class CommuteServiceImpl implements CommuteService { @Autowired CommuteMapper commuteMapper; - @Autowired - ItnCommuteMapper itnCommuteMapper; - @Autowired HolidayMapper holidayMapper; - @Autowired - CodeDetailService codeDetailService; - @Autowired private UserMapper userMapper; @@ -70,141 +64,6 @@ public class CommuteServiceImpl implements CommuteService { - @Override - @Transactional - public Map transfer(CommuteVO commuteVO) { - - log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchYear()); - log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchMonth()); - log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchDay()); - - if(StringUtils.isEmpty(commuteVO.getSearchYear())){ - - Map map = DateUtils.getPreviousBusinessDay(); - commuteVO.setSearchYear(map.get("year")); - commuteVO.setSearchMonth(map.get("month")); - commuteVO.setSearchDay(map.get("day")); - } - - // 년월일로 select 조건 : 관리자콘솔 정보 select를 위함 - CommuteVO searchVO = getSearchVO(commuteVO); - - // 임직원 정보 select - List userAllVO = userMapper.findByBiostarIdIsNotNull(); - - List holidayList = holidayMapper.selectHolidaysByDateRange(DateUtils.getYesterdayDate(commuteVO)); - - String workDt = searchVO.getStartDate().split(" ")[0]; - - workDt = DateUtils.getFormatToStandardDate(workDt); - - Integer groupId = itnCommuteMapper.findByCommuteGroupIdFromItnCommuteWhereWordDt(workDt); - // groupId가 없으면 groupId insert - if(groupId == null) { - ItnCommuteGroupVO itnGroupVO = new ItnCommuteGroupVO(); - itnGroupVO.setWorkDt(workDt); - itnCommuteMapper.insertCommuteGroup(itnGroupVO); - groupId = itnGroupVO.getCommuteGroupId(); - } - List itnCommuteList = new ArrayList<>(); - for(UserVO userVO : userAllVO){ - - ItnCommuteVO itnCommuteVO = new ItnCommuteVO(); - itnCommuteVO.setCommuteGroupId(groupId); - - String biostarId = userVO.getBiostarId(); - searchVO.setBiostarId(biostarId); - - commuteVO = commuteMapper.findByUsridAndSrvdtBetween(searchVO); - - // 휴가 유형 확인 - Optional holidayOpt = holidayList.stream() - .filter(h -> h.getUserId().equals(userVO.getGwId())) - .findFirst(); - - String holidayType = holidayOpt.map(h -> HolidayAnalyzer.determineHolidayType(h)).orElse(""); - - - itnCommuteVO.setUniqId(userVO.getUniqId()); - itnCommuteVO.setWorkDt(workDt); - itnCommuteVO.setHoliCode(holidayType); - - if(commuteVO == null){ - itnCommuteList.add(itnCommuteVO); - continue; - } - - - // 지각 체크; - itnCommuteVO.setStartTime(commuteVO.getFirstActivityTime().split(" ")[1]); - itnCommuteVO.setStartRslt(this.getLateChk(commuteVO.getFirstActivityTime())); - // 조기퇴근 체크 - itnCommuteVO.setEndTime(commuteVO.getLastActivityTime().split(" ")[1]); - itnCommuteVO.setEndRslt(this.getLeaveWorkEarly(commuteVO.getLastActivityTime())); - itnCommuteList.add(itnCommuteVO); - } - log.info("itnCommuteList.size() :: [{}]", itnCommuteList.size()); - itnCommuteMapper.upsertCommuteList(itnCommuteList); - -/* - - - - - List commuteList = makeList(commuteVO); - - String startDate = commuteVO.getStartDate(); - - - String workDt = startDate.split(" ")[0]; - - workDt = DateUtils.getFormatToStandardDate(workDt); - - - Integer groupId = itnCommuteMapper.findByCommuteGroupIdFromItnCommuteWhereWordDt(workDt); - - // groupId가 없으면 groupId insert - if(groupId == null) { - ItnCommuteGroupVO itnGroupVO = new ItnCommuteGroupVO(); - itnGroupVO.setWorkDt(workDt); - itnCommuteMapper.insertCommuteGroup(itnGroupVO); - groupId = itnGroupVO.getCommuteGroupId(); - } - System.out.println("groupId : "+groupId); - - - List itnCommuteList = new ArrayList<>(); - - for(CommuteVO vo : commuteList) { - ItnCommuteVO itnCommuteVO = new ItnCommuteVO(); - itnCommuteVO.setCommuteGroupId(groupId); - itnCommuteVO.setUniqId(vo.getUniqId()); - itnCommuteVO.setWorkDt(workDt); - - itnCommuteVO.setUserName(vo.getUsrid()); - itnCommuteVO.setUserRank(vo.getPstn()); - - itnCommuteVO.setStartTime(vo.getFirstActivityTime()); - itnCommuteVO.setStartRslt(vo.getFirstActivityTimeMemo()); - - itnCommuteVO.setEndTime(vo.getLastActivityTime()); - itnCommuteVO.setEndRslt(vo.getLastActivityTimeMemo()); - - itnCommuteList.add(itnCommuteVO); - } - - itnCommuteMapper.upsertCommuteList(itnCommuteList); - -*/ - - // controller에 return - Map map = new HashMap(); - -// map.put("resultList", commuteList); - map.put("commuteVO", commuteVO); - return map; - } - public List makeList(CommuteVO commuteVO){ @@ -249,7 +108,7 @@ public class CommuteServiceImpl implements CommuteService { log.info("matchedUser : [{}] : [{}]", matchedUser, t.getUsrid()); if( matchedUser != null ){ - t.setUsrid(matchedUser.getUsername()); + t.setUsrid(matchedUser.getUserName()); t.setPstn(matchedUser.getUserRank()); t.setUniqId(matchedUser.getUniqId()); } @@ -259,6 +118,7 @@ public class CommuteServiceImpl implements CommuteService { t.setLastActivityTime(t.getLastActivityTime().split(" ")[1]); }); + commuteList.forEach(t -> log.info("userVO : [{}][{}]", t.getBiostarId(), t) ); // 출근안한사람 체크하기 for (UserEnum user : UserEnum.values()) { @@ -279,6 +139,7 @@ public class CommuteServiceImpl implements CommuteService { commuteTempVO.setFirstActivityTime("-"); // 기본값 설정 commuteTempVO.setLastActivityTime("-"); // 기본값 설정 commuteList.add(commuteTempVO); // 수정된 리스트에 추가 + log.info(" : commuteTempVO : [{}]", commuteTempVO); } } @@ -286,7 +147,7 @@ public class CommuteServiceImpl implements CommuteService { commuteList.forEach(commute -> System.out.println(commute.toString())); - commuteList.removeIf(t -> "유인식".equals(t.getUsrid()) + commuteList.removeIf(t -> "&@~Z/Uti3tzksl96ByRRZT7AQ==".equals(t.getUsrid()) || "itn6".equals(t.getUsrid()) ); diff --git a/src/main/java/com/itn/admin/commute/web/CommuteRestController.java b/src/main/java/com/itn/admin/commute/web/CommuteRestController.java index 76cb2e9..f7c8c7c 100644 --- a/src/main/java/com/itn/admin/commute/web/CommuteRestController.java +++ b/src/main/java/com/itn/admin/commute/web/CommuteRestController.java @@ -3,6 +3,7 @@ package com.itn.admin.commute.web; import com.itn.admin.cmn.msg.RestResponse; import com.itn.admin.commute.mapper.domain.CommuteVO; import com.itn.admin.commute.service.CommuteService; +import com.itn.admin.itn.commute.service.ItnCommuteService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -25,15 +26,22 @@ public class CommuteRestController { private CommuteService commuteService; + private ItnCommuteService itnCommuteService; + @Autowired public void setCommuteService(CommuteService commuteService) { this.commuteService = commuteService; } + @Autowired + public void setItnCommuteService(ItnCommuteService itnCommuteService) { + this.itnCommuteService = itnCommuteService; + } + @GetMapping(value = "/api/commute/transfer") public ResponseEntity list(@ModelAttribute("commuteVO") CommuteVO commuteVO, Model model) { // 서비스 메서드 호출 - Map resultMap = commuteService.transfer(commuteVO); + Map resultMap = itnCommuteService.transfer(commuteVO); return ResponseEntity.ok().body(new RestResponse(HttpStatus.OK,"성공적으로 조회했습니다.",resultMap)); /* */ @@ -77,7 +85,7 @@ public class CommuteRestController { // commuteService.transfer 호출 try { - Map dailyResult = commuteService.transfer(commuteVO); + Map dailyResult = itnCommuteService.transfer(commuteVO); resultMap.put(formattedDate, dailyResult); log.info(":: Processed date :: [{}] - Result: [{}]", formattedDate, dailyResult); } catch (Exception e) { @@ -140,7 +148,7 @@ public class CommuteRestController { // commuteService.transfer 호출 try { - Map dailyResult = commuteService.transfer(commuteVO); + Map dailyResult = itnCommuteService.transfer(commuteVO); resultMap.put(formattedDate, dailyResult); log.info(":: Processed date :: [{}] - Result: [{}]", formattedDate, dailyResult); } catch (Exception e) { diff --git a/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeVO.java b/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeVO.java index 0388446..cd05ca5 100644 --- a/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeVO.java +++ b/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeVO.java @@ -6,7 +6,7 @@ import lombok.*; @Setter @NoArgsConstructor @AllArgsConstructor -public class CodeVO { +public class CodeVO extends CodeDetailVO { private String codeGroupId; private String codeGroupName; private String description; diff --git a/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java b/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java index e71c5b6..5689dc6 100644 --- a/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java +++ b/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java @@ -2,6 +2,7 @@ package com.itn.admin.itn.code.server; import com.itn.admin.cmn.msg.RestResponse; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; +import com.itn.admin.itn.code.mapper.domain.CodeVO; import java.util.List; @@ -24,4 +25,5 @@ public interface CodeDetailService { void deleteCodeDetail(String codeGroupId, String codeId); String getCodeName(String codeGroupId, String codeId); + } diff --git a/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java b/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java index 2a6cb87..25b4d83 100644 --- a/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java @@ -6,6 +6,7 @@ import com.itn.admin.cmn.config.SecurityUtil; import com.itn.admin.cmn.msg.RestResponse; import com.itn.admin.itn.code.mapper.CodeDetailMapper; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; +import com.itn.admin.itn.code.mapper.domain.CodeVO; import com.itn.admin.itn.code.server.CodeDetailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/itn/admin/itn/commute/service/ItnCommuteService.java b/src/main/java/com/itn/admin/itn/commute/service/ItnCommuteService.java index e6b416c..ea300a3 100644 --- a/src/main/java/com/itn/admin/itn/commute/service/ItnCommuteService.java +++ b/src/main/java/com/itn/admin/itn/commute/service/ItnCommuteService.java @@ -1,5 +1,6 @@ package com.itn.admin.itn.commute.service; +import com.itn.admin.commute.mapper.domain.CommuteVO; import com.itn.admin.commute.mapper.domain.ItnCommuteVO; import com.itn.admin.itn.commute.mapper.domain.ItnCommuteBackVO; @@ -12,4 +13,6 @@ public interface ItnCommuteService { Map getList(ItnCommuteBackVO itnCommuteBackVO); Map getCommuteList(ItnCommuteVO itnCommuteVO); + + Map transfer(CommuteVO commuteVO); } diff --git a/src/main/java/com/itn/admin/itn/commute/service/impl/ItnCommuteServiceImpl.java b/src/main/java/com/itn/admin/itn/commute/service/impl/ItnCommuteServiceImpl.java index f81859d..9b1da16 100644 --- a/src/main/java/com/itn/admin/itn/commute/service/impl/ItnCommuteServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/commute/service/impl/ItnCommuteServiceImpl.java @@ -1,7 +1,13 @@ package com.itn.admin.itn.commute.service.impl; import com.itn.admin.cmn.util.DateUtils; +import com.itn.admin.commute.mapper.CommuteMapper; +import com.itn.admin.commute.mapper.domain.CommuteVO; +import com.itn.admin.commute.mapper.domain.ItnCommuteGroupVO; import com.itn.admin.commute.mapper.domain.ItnCommuteVO; +import com.itn.admin.commute.service.HolidayAnalyzer; +import com.itn.admin.gw.holiday.mapper.HolidayMapper; +import com.itn.admin.gw.holiday.mapper.domain.HolidayVO; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import com.itn.admin.itn.code.server.CodeDetailService; import com.itn.admin.itn.commute.mapper.ItnCommuteMapper; @@ -13,19 +19,20 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.util.*; @Slf4j @Service public class ItnCommuteServiceImpl implements ItnCommuteService { + @Autowired + CommuteMapper commuteMapper; @Autowired ItnCommuteMapper itnCommuteMapper; @@ -33,6 +40,9 @@ public class ItnCommuteServiceImpl implements ItnCommuteService { @Autowired CodeDetailService codeDetailService; + @Autowired + HolidayMapper holidayMapper; + @Autowired private UserMapper userMapper; @@ -89,6 +99,142 @@ public class ItnCommuteServiceImpl implements ItnCommuteService { } + @Override + @Transactional + public Map transfer(CommuteVO commuteVO) { + + log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchYear()); + log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchMonth()); + log.info(" :: commuteVO.getSearchYear() :: [{}]", commuteVO.getSearchDay()); + + if(StringUtils.isEmpty(commuteVO.getSearchYear())){ + + Map map = DateUtils.getPreviousBusinessDay(); + commuteVO.setSearchYear(map.get("year")); + commuteVO.setSearchMonth(map.get("month")); + commuteVO.setSearchDay(map.get("day")); + } + + // 년월일로 select 조건 : 관리자콘솔 정보 select를 위함 + CommuteVO searchVO = getSearchVO(commuteVO); + + // 임직원 정보 select + List userAllVO = userMapper.findByBiostarIdIsNotNull(); + + List holidayList = holidayMapper.selectHolidaysByDateRange(DateUtils.getYesterdayDate(commuteVO)); + + String workDt = searchVO.getStartDate().split(" ")[0]; + + workDt = DateUtils.getFormatToStandardDate(workDt); + + Integer groupId = itnCommuteMapper.findByCommuteGroupIdFromItnCommuteWhereWordDt(workDt); + // groupId가 없으면 groupId insert + if(groupId == null) { + ItnCommuteGroupVO itnGroupVO = new ItnCommuteGroupVO(); + itnGroupVO.setWorkDt(workDt); + itnCommuteMapper.insertCommuteGroup(itnGroupVO); + groupId = itnGroupVO.getCommuteGroupId(); + } + List itnCommuteList = new ArrayList<>(); + for(UserVO userVO : userAllVO){ + + ItnCommuteVO itnCommuteVO = new ItnCommuteVO(); + itnCommuteVO.setCommuteGroupId(groupId); + + String biostarId = userVO.getBiostarId(); + searchVO.setBiostarId(biostarId); + + commuteVO = commuteMapper.findByUsridAndSrvdtBetween(searchVO); + + // 휴가 유형 확인 + Optional holidayOpt = holidayList.stream() + .filter(h -> h.getUserId().equals(userVO.getGwId())) + .findFirst(); + + String holidayType = holidayOpt.map(h -> HolidayAnalyzer.determineHolidayType(h)).orElse(""); + + + itnCommuteVO.setUniqId(userVO.getUniqId()); + itnCommuteVO.setWorkDt(workDt); + itnCommuteVO.setHoliCode(holidayType); + + if(commuteVO == null){ + itnCommuteList.add(itnCommuteVO); + continue; + } + + + // 지각 체크; + itnCommuteVO.setStartTime(commuteVO.getFirstActivityTime().split(" ")[1]); + itnCommuteVO.setStartRslt(this.getLateChk(commuteVO.getFirstActivityTime())); + // 조기퇴근 체크 + itnCommuteVO.setEndTime(commuteVO.getLastActivityTime().split(" ")[1]); + itnCommuteVO.setEndRslt(this.getLeaveWorkEarly(commuteVO.getLastActivityTime())); + itnCommuteList.add(itnCommuteVO); + } + log.info("itnCommuteList.size() :: [{}]", itnCommuteList.size()); + itnCommuteMapper.upsertCommuteList(itnCommuteList); + +/* + + + + + List commuteList = makeList(commuteVO); + + String startDate = commuteVO.getStartDate(); + + + String workDt = startDate.split(" ")[0]; + + workDt = DateUtils.getFormatToStandardDate(workDt); + + + Integer groupId = itnCommuteMapper.findByCommuteGroupIdFromItnCommuteWhereWordDt(workDt); + + // groupId가 없으면 groupId insert + if(groupId == null) { + ItnCommuteGroupVO itnGroupVO = new ItnCommuteGroupVO(); + itnGroupVO.setWorkDt(workDt); + itnCommuteMapper.insertCommuteGroup(itnGroupVO); + groupId = itnGroupVO.getCommuteGroupId(); + } + System.out.println("groupId : "+groupId); + + + List itnCommuteList = new ArrayList<>(); + + for(CommuteVO vo : commuteList) { + ItnCommuteVO itnCommuteVO = new ItnCommuteVO(); + itnCommuteVO.setCommuteGroupId(groupId); + itnCommuteVO.setUniqId(vo.getUniqId()); + itnCommuteVO.setWorkDt(workDt); + + itnCommuteVO.setUserName(vo.getUsrid()); + itnCommuteVO.setUserRank(vo.getPstn()); + + itnCommuteVO.setStartTime(vo.getFirstActivityTime()); + itnCommuteVO.setStartRslt(vo.getFirstActivityTimeMemo()); + + itnCommuteVO.setEndTime(vo.getLastActivityTime()); + itnCommuteVO.setEndRslt(vo.getLastActivityTimeMemo()); + + itnCommuteList.add(itnCommuteVO); + } + + itnCommuteMapper.upsertCommuteList(itnCommuteList); + +*/ + + // controller에 return + Map map = new HashMap(); + +// map.put("resultList", commuteList); + map.put("commuteVO", commuteVO); + return map; + } + + private String addSeconds(String startTimeStr) { @@ -117,6 +263,58 @@ public class ItnCommuteServiceImpl implements ItnCommuteService { } + // 조기 퇴근 여부를 확인하는 함수 + private String getLeaveWorkEarly(String p_lastActivityTime) { + // 마지막 활동 시간을 LocalTime으로 변환 + LocalTime activityTime = parseActivityTime(p_lastActivityTime); + // 기준 시간(18:30) 설정 + LocalTime checkTime = LocalTime.of(18, 30); + // 활동 시간이 기준 시간보다 이전이면 조기 퇴근 + if (activityTime.isBefore(checkTime)) { + return "70"; //""조기퇴근"; + } + // 그렇지 않으면 빈 문자열 반환 + return ""; + } + // 지각 여부를 확인하는 함수 + private static String getLateChk(String p_firstActivityTime) { + // 첫 활동 시간을 LocalTime으로 변환 + LocalTime activityTime = parseActivityTime(p_firstActivityTime); + // 기준 시간(09:30) 설정 + LocalTime checkTime = LocalTime.of(9, 30); + + // 활동 시간이 기준 시간보다 이후면 지각 + if (activityTime.isAfter(checkTime)) { + return "60"; // 지각 시 60 반환 (공통코드 COMMUTE) + } + // 그렇지 않으면 빈 문자열 반환 + return ""; + } + + // 입력된 시간 문자열을 LocalTime 객체로 변환하는 함수 + private static LocalTime parseActivityTime(String activityTimeString) { + // "yyyy-MM-dd HH:mm:ss" 패턴의 포매터 생성 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 문자열을 LocalDateTime으로 파싱 + LocalDateTime dateTime = LocalDateTime.parse(activityTimeString, formatter); + // LocalDateTime에서 시간 부분만 추출하여 반환 + return dateTime.toLocalTime(); + } + + private static CommuteVO getSearchVO(CommuteVO commuteVO) { + commuteVO.setStartDate(commuteVO.getSearchYear()+"-"+ commuteVO.getSearchMonth()+"-"+ commuteVO.getSearchDay()+" 06:00:00"); + commuteVO.setEndDate(commuteVO.getSearchYear()+"-"+ commuteVO.getSearchMonth()+"-"+ commuteVO.getSearchDay()+" 23:59:59"); + + // 테이블명 생성 + // biostar(관리자콘솔)은 테이블명이 "t_lg년월"로 이루어져 있음. + String tableNmM = commuteVO.getSearchMonth().length() <2 + ? "0"+ commuteVO.getSearchMonth() + : commuteVO.getSearchMonth(); + + commuteVO.setTableNm("t_lg"+ commuteVO.getSearchYear()+tableNmM); + + return commuteVO; + } } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java index 7f68286..46dfc0a 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java @@ -3,6 +3,7 @@ package com.itn.admin.itn.mjon.spam.mapper.domain; import com.itn.admin.cmn.vo.CmnVO; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import lombok.*; +import lombok.experimental.SuperBuilder; import java.io.Serializable; import java.time.LocalDateTime; @@ -22,7 +23,7 @@ import java.util.List; */ @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @Getter @Setter @ToString @@ -38,10 +39,6 @@ public class SpamVO extends CmnVO implements Serializable { private String chcKeywords; // 스팸에 해당하는 단어 private LocalDateTime timestamp; // 요청 시간 private String categ; // 스팸종류 - private String frstRegisterId; // 최초등록자ID - private LocalDateTime frstRegistPnttm; // 최초등록일자 - private String lastUpdusrId; // 최종수정자ID - private LocalDateTime lastUpdtPnttm; // 최종수정일자 private List CodeDetailList; // 최종수정일자 diff --git a/src/main/java/com/itn/admin/itn/user/mapper/UserMapper.java b/src/main/java/com/itn/admin/itn/user/mapper/UserMapper.java index d12da35..b0e93ce 100644 --- a/src/main/java/com/itn/admin/itn/user/mapper/UserMapper.java +++ b/src/main/java/com/itn/admin/itn/user/mapper/UserMapper.java @@ -4,24 +4,26 @@ import com.itn.admin.itn.user.mapper.domain.UserVO; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.springframework.core.annotation.Order; import java.util.List; @Mapper public interface UserMapper { -// UserVO save(UserVO userVO); - @Select("SELECT uniq_id, user_id AS userId, user_pw AS password, user_name AS username, role FROM users WHERE user_id = #{userId}") - UserVO getUserById(String userId); + UserVO getLoadUserByUsername(String userId); - @Select("SELECT uniq_id, user_id AS userId, user_pw AS password, user_name AS username, role FROM users WHERE uniq_id = #{uniqId}") + @Select("SELECT * FROM users WHERE uniq_id = #{uniqId}") UserVO findById(String uniqId); @Insert("INSERT INTO users (uniq_id, user_id, user_pw, user_name, role) VALUES (#{uniqId}, #{userId}, #{password}, #{username}, #{role})") void save(UserVO userVO); + @Select("SELECT * FROM users order by active_yn desc") List findAll(); + List findByBiostarIdIsNotNull(); void updateRole(UserVO user); @@ -33,4 +35,9 @@ public interface UserMapper { /// 진행중 @Insert("INSERT INTO request_logs (uniqId, FRST_REGIST_PNTTM) VALUES (#{uniqId}, now())") void requestLogs(String uniqId, String requestURL); + + void updateUserInfo(UserVO userVO); + + + void changepassword(UserVO userVO); } diff --git a/src/main/java/com/itn/admin/itn/user/mapper/domain/UserVO.java b/src/main/java/com/itn/admin/itn/user/mapper/domain/UserVO.java index 13feb13..c5f251b 100644 --- a/src/main/java/com/itn/admin/itn/user/mapper/domain/UserVO.java +++ b/src/main/java/com/itn/admin/itn/user/mapper/domain/UserVO.java @@ -1,9 +1,8 @@ package com.itn.admin.itn.user.mapper.domain; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import com.itn.admin.cmn.vo.CmnVO; +import lombok.*; +import lombok.experimental.SuperBuilder; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -14,8 +13,10 @@ import java.util.Collections; @Getter @Setter @NoArgsConstructor +@AllArgsConstructor +@SuperBuilder @ToString -public class UserVO implements UserDetails { +public class UserVO extends CmnVO { private String uniqId; private String userId; private String password; @@ -23,44 +24,10 @@ public class UserVO implements UserDetails { private String userRank; private String gwId; private String biostarId; + private String deptCd; + private String activeYn; private Role role; // 단일 역할로 변경 - private String lastUpdtPnttm; - - - @Override - public Collection getAuthorities() { - return Collections.singletonList(new SimpleGrantedAuthority(role.name())); - } - - @Override - public String getPassword() { - return password; - } - - @Override - public String getUsername() { - return userName; - } - - @Override - public boolean isAccountNonExpired() { - return true; - } - - @Override - public boolean isAccountNonLocked() { - return true; - } - - @Override - public boolean isCredentialsNonExpired() { - return true; - } - - @Override - public boolean isEnabled() { - return true; - } - + private String hireDate; // 입사일 + private String resignDate; // 퇴사일 } diff --git a/src/main/java/com/itn/admin/itn/user/service/UserService.java b/src/main/java/com/itn/admin/itn/user/service/UserService.java index a8f9e57..db8c17f 100644 --- a/src/main/java/com/itn/admin/itn/user/service/UserService.java +++ b/src/main/java/com/itn/admin/itn/user/service/UserService.java @@ -18,4 +18,10 @@ public interface UserService { void loginLog(String id); void requestLogs(String id, String requestURL); + + RestResponse findByUniqId(String uniqId); + + RestResponse updateUserInfo(UserVO userVO); + + RestResponse changepassword(UserVO userVO); } diff --git a/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java b/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java index dc26599..e6ab200 100644 --- a/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/user/service/impl/UserServiceImpl.java @@ -84,5 +84,37 @@ public class UserServiceImpl implements UserService { // userMapper.requestLogs(id, requestURL); } + @Override + public RestResponse findByUniqId(String uniqId) { + + UserVO user = userMapper.findById(uniqId); + return RestResponse.builder() + .status(HttpStatus.OK) // 200 성공 + .data(user) +// .msg("수정되었습니다.") + .build(); + + } + + @Override + public RestResponse updateUserInfo(UserVO userVO) { + userMapper.updateUserInfo(userVO); + return RestResponse.builder() + .status(HttpStatus.OK) // 200 성공 + .data(userVO.getUserName()) + .msg("수정되었습니다.") + .build(); + } + + @Override + public RestResponse changepassword(UserVO userVO) { + userMapper.changepassword(userVO); + return RestResponse.builder() + .status(HttpStatus.OK) // 200 성공 + .data(userVO.getUserName()) + .msg("수정되었습니다.") + .build(); + } + } diff --git a/src/main/java/com/itn/admin/itn/user/web/UserRestController.java b/src/main/java/com/itn/admin/itn/user/web/UserRestController.java index ec197d7..7a7bed3 100644 --- a/src/main/java/com/itn/admin/itn/user/web/UserRestController.java +++ b/src/main/java/com/itn/admin/itn/user/web/UserRestController.java @@ -1,10 +1,15 @@ package com.itn.admin.itn.user.web; +import com.itn.admin.cmn.config.CustomUserDetails; +import com.itn.admin.cmn.msg.RestResponse; +import com.itn.admin.itn.code.mapper.domain.CodeVO; import com.itn.admin.itn.user.mapper.domain.Role; import com.itn.admin.itn.user.mapper.domain.UserVO; import com.itn.admin.itn.user.service.UserService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -12,18 +17,54 @@ import org.springframework.web.bind.annotation.*; import java.util.Map; +@Slf4j @RestController public class UserRestController { @Autowired private UserService userService; - @Autowired - private PasswordEncoder passwordEncoder; + private final PasswordEncoder passwordEncoder; + + public UserRestController(PasswordEncoder passwordEncoder) { + log.info(" + UserRestController 등록된 PasswordEncoder instance: {}", passwordEncoder); + this.passwordEncoder = passwordEncoder; + } @PostMapping("/user/updateRole") @ResponseBody public ResponseEntity updateRole(@RequestParam("uniqId") String uniqId, @RequestParam("role") Role role) { return ResponseEntity.ok(userService.updateRole(uniqId, role)); } + + + // 특정 코드 그룹을 ID로 가져오는 메서드 + @GetMapping("/api/admin/user/{uniqId}") + public ResponseEntity findByUniqId(@PathVariable String uniqId) { + log.info("getCodeGroupById uniqId={}", uniqId); + return ResponseEntity.ok(userService.findByUniqId(uniqId)); + } + // 코드 그룹 수정 메서드 + @PutMapping("/api/admin/user/{uniqId}") + public ResponseEntity updateUserInfo(@PathVariable String uniqId, @RequestBody UserVO userVO) { + return ResponseEntity.ok().body(userService.updateUserInfo(userVO)); + + } + // 코드 그룹 수정 메서드 + @PostMapping("/api/admin/user/{uniqId}/change-password") + public ResponseEntity changePassword(@PathVariable String uniqId, + @RequestBody UserVO userVO, + @AuthenticationPrincipal CustomUserDetails loginUser) { + + String newPassword = passwordEncoder.encode(userVO.getPassword()); + UserVO setUserVO = UserVO.builder() + .uniqId(uniqId) + .password(newPassword) + .lastUpdusrId(loginUser.getUser().getUserName()) + .build(); + + + return ResponseEntity.ok().body(userService.changepassword(setUserVO)); + + } } diff --git a/src/main/resources/mapper/itn/user/UserMapper.xml b/src/main/resources/mapper/itn/user/UserMapper.xml index 65ff59b..70fb528 100644 --- a/src/main/resources/mapper/itn/user/UserMapper.xml +++ b/src/main/resources/mapper/itn/user/UserMapper.xml @@ -5,23 +5,6 @@ - + + UPDATE users SET role = #{role} WHERE uniq_id = #{uniqId} + + + + UPDATE users SET + user_name = #{username} + , user_rank = #{userRank} + , dept_cd = #{deptCd} + + ,role = #{role} + + + ,gw_id = #{gwId} + + + ,biostar_id = #{biostarId} + + , active_yn = #{activeYn} + , hire_date = #{hireDate} + , resign_date = #{resignDate} + , LAST_UPDT_PNTTM = now() + WHERE uniq_id = #{uniqId} + + + UPDATE users SET + user_pw = #{password} + , LAST_UPDUSR_ID = #{lastUpdusrId} + , LAST_UPDT_PNTTM = now() + WHERE uniq_id = #{uniqId} + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/mainsidebar.html b/src/main/resources/templates/fragments/mainsidebar.html index 1f0dd49..eb738ea 100644 --- a/src/main/resources/templates/fragments/mainsidebar.html +++ b/src/main/resources/templates/fragments/mainsidebar.html @@ -40,6 +40,14 @@