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 extends GrantedAuthority> authorities;
+ private final UserVO user;
- public CustomUserDetails(String username, String password, String userId, String id, Collection extends GrantedAuthority> 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 extends GrantedAuthority> 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 extends GrantedAuthority> 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 extends GrantedAuthority> 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 @@
-