Merge pull request 'feat/infer_dev_260107' (#303) from feat/infer_dev_260107 into develop
Reviewed-on: https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-backoffice/pulls/303
This commit is contained in:
@@ -5,6 +5,7 @@ import com.kamco.cd.kamcoback.members.dto.MembersDto;
|
||||
import com.kamco.cd.kamcoback.members.dto.MembersDto.Basic;
|
||||
import com.kamco.cd.kamcoback.members.service.AdminService;
|
||||
import com.kamco.cd.kamcoback.members.service.MembersService;
|
||||
import com.kamco.cd.kamcoback.scheduler.service.MemberInactiveJobService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Content;
|
||||
@@ -34,6 +35,7 @@ public class MembersApiController {
|
||||
|
||||
private final MembersService membersService;
|
||||
private final AdminService adminService;
|
||||
private final MemberInactiveJobService memberInactiveJobService;
|
||||
|
||||
@Operation(summary = "회원정보 목록", description = "회원정보 조회")
|
||||
@ApiResponses(
|
||||
@@ -157,4 +159,13 @@ public class MembersApiController {
|
||||
String employeeNo) {
|
||||
return ApiResponseDto.ok(adminService.existsByEmployeeNo(employeeNo));
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "라벨러/검수자 최종로그인 28일 경과 이후 사용중지(스케줄링 실행)",
|
||||
description = "라벨러/검수자 최종로그인 28일 경과 이후 사용중지 처리")
|
||||
@GetMapping("/member-inactive-job")
|
||||
public ApiResponseDto<Void> memberInactiveJob() {
|
||||
memberInactiveJobService.memberActive28daysToInactive();
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.kamco.cd.kamcoback.postgres.core;
|
||||
|
||||
import com.kamco.cd.kamcoback.postgres.repository.members.MemberInactiveJobRepository;
|
||||
import com.kamco.cd.kamcoback.scheduler.dto.MemberInactiveJobDto.MemberInfo;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MemberInactiveJobCoreService {
|
||||
|
||||
private final MemberInactiveJobRepository memberInactiveJobRepository;
|
||||
|
||||
public List<MemberInfo> findInactiveLabelerReviewer() {
|
||||
return memberInactiveJobRepository.findInactiveLabelerReviewer();
|
||||
}
|
||||
|
||||
public void updateMemberStatusInactive(MemberInfo memberInfo) {
|
||||
memberInactiveJobRepository.updateMemberStatusInactive(memberInfo);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.kamco.cd.kamcoback.postgres.repository.members;
|
||||
|
||||
import com.kamco.cd.kamcoback.postgres.entity.MemberEntity;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface MemberInactiveJobRepository
|
||||
extends JpaRepository<MemberEntity, Long>, MemberInactiveJobRepositoryCustom {}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.kamco.cd.kamcoback.postgres.repository.members;
|
||||
|
||||
import com.kamco.cd.kamcoback.scheduler.dto.MemberInactiveJobDto.MemberInfo;
|
||||
import java.util.List;
|
||||
|
||||
public interface MemberInactiveJobRepositoryCustom {
|
||||
|
||||
List<MemberInfo> findInactiveLabelerReviewer();
|
||||
|
||||
void updateMemberStatusInactive(MemberInfo memberInfo);
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.kamco.cd.kamcoback.postgres.repository.members;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.enums.RoleType;
|
||||
import com.kamco.cd.kamcoback.common.enums.StatusType;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.QMemberEntity;
|
||||
import com.kamco.cd.kamcoback.scheduler.dto.MemberInactiveJobDto.MemberInfo;
|
||||
import com.querydsl.core.types.Projections;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class MemberInactiveJobRepositoryImpl implements MemberInactiveJobRepositoryCustom {
|
||||
|
||||
private final JPAQueryFactory queryFactory;
|
||||
private final QMemberEntity memberEntity = QMemberEntity.memberEntity;
|
||||
|
||||
@Override
|
||||
public List<MemberInfo> findInactiveLabelerReviewer() {
|
||||
ZonedDateTime checkTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).minusDays(14);
|
||||
return queryFactory
|
||||
.select(Projections.constructor(MemberInfo.class, memberEntity.id, memberEntity.employeeNo))
|
||||
.from(memberEntity)
|
||||
.where(
|
||||
memberEntity.userRole.in(RoleType.LABELER.getId(), RoleType.REVIEWER.getId()),
|
||||
memberEntity.status.eq(StatusType.ACTIVE.getId()),
|
||||
memberEntity.lastLoginDttm.lt(checkTime))
|
||||
.fetch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMemberStatusInactive(MemberInfo memberInfo) {
|
||||
queryFactory
|
||||
.update(memberEntity)
|
||||
.set(memberEntity.status, StatusType.INACTIVE.getId())
|
||||
.set(memberEntity.statusChgDttm, ZonedDateTime.now())
|
||||
.where(memberEntity.id.eq(memberInfo.getId()))
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.kamco.cd.kamcoback.scheduler.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
public class MemberInactiveJobDto {
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@RequiredArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class MemberInfo {
|
||||
|
||||
private Long id;
|
||||
private String employeeNo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.kamco.cd.kamcoback.scheduler.service;
|
||||
|
||||
import com.kamco.cd.kamcoback.postgres.core.MemberInactiveJobCoreService;
|
||||
import com.kamco.cd.kamcoback.scheduler.dto.MemberInactiveJobDto.MemberInfo;
|
||||
import jakarta.transaction.Transactional;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Log4j2
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MemberInactiveJobService {
|
||||
|
||||
private final MemberInactiveJobCoreService memberInactiveJobCoreService;
|
||||
|
||||
@Value("${spring.profiles.active}")
|
||||
private String profile;
|
||||
|
||||
private boolean isLocalProfile() {
|
||||
return "local".equalsIgnoreCase(profile);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Scheduled(cron = "0 0 1 * * *")
|
||||
public void memberActive28daysToInactive() {
|
||||
|
||||
if (isLocalProfile()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
List<MemberInfo> list = memberInactiveJobCoreService.findInactiveLabelerReviewer();
|
||||
|
||||
if (list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (MemberInfo memberInfo : list) {
|
||||
memberInactiveJobCoreService.updateMemberStatusInactive(memberInfo);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("배치 처리 중 예외", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user