diff --git a/src/main/java/com/project/ding/application/AdminWhitrListApplicationService.java b/src/main/java/com/project/ding/application/AdminWhitrListApplicationService.java new file mode 100644 index 0000000..810e943 --- /dev/null +++ b/src/main/java/com/project/ding/application/AdminWhitrListApplicationService.java @@ -0,0 +1,8 @@ +package com.project.ding.application; + +public interface AdminWhitrListApplicationService { + /** + * 查询用户职位为经理、主管、总监的用户,添加进白名单 + */ + int addManagersToAdminWhiteList(); +} diff --git a/src/main/java/com/project/ding/application/impl/AdminWhitrListApplicationServiceImpl.java b/src/main/java/com/project/ding/application/impl/AdminWhitrListApplicationServiceImpl.java new file mode 100644 index 0000000..90f01c3 --- /dev/null +++ b/src/main/java/com/project/ding/application/impl/AdminWhitrListApplicationServiceImpl.java @@ -0,0 +1,67 @@ +package com.project.ding.application.impl; + +import com.project.ding.application.AdminWhitrListApplicationService; +import com.project.ding.domain.entity.AdminWhiteListEntity; +import com.project.ding.domain.entity.UserEntity; +import com.project.ding.domain.service.AdminWhitrListBaseService; +import com.project.ding.mapper.AdminWhiteListMapper; +import com.project.ding.mapper.DepartmentMapper; +import com.project.ding.mapper.UserMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class AdminWhitrListApplicationServiceImpl implements AdminWhitrListApplicationService { + @Autowired + private UserMapper userMapper; + @Autowired + private AdminWhiteListMapper adminWhiteListMapper; + @Autowired + private AdminWhitrListBaseService adminWhitrListBaseService; + + + @Override + public int addManagersToAdminWhiteList() { + // 查询 title 包含经理、主管、总监的用户 + List userEntityList = userMapper.selectUsersByTitleKeywords(); + + if (userEntityList == null || userEntityList.isEmpty()) { + return 0; + } + + //查询白名单用户 + List adminWhiteListEntities = adminWhiteListMapper.selectList(null); + // 提取已存在的 userId 集合 + Set existingUserIds = adminWhiteListEntities.stream() + .map(AdminWhiteListEntity::getUserId) + .collect(Collectors.toSet()); + + // 过滤掉已存在的用户 + List toSaveList = userEntityList.stream() + .filter(user -> !existingUserIds.contains(user.getId())) + .map(user -> { + AdminWhiteListEntity whiteList = new AdminWhiteListEntity(); + whiteList.setUserId(user.getId()); + whiteList.setUserName(user.getName()); + return whiteList; + }) + .collect(Collectors.toList()); + + if (toSaveList.isEmpty()) { + log.info("所有用户已在白名单中,无需添加"); + return 0; + } + + //新增 + adminWhitrListBaseService.saveBatch(toSaveList); + log.info("成功添加 " + toSaveList.size() + " 人到 admin 白名单"); + + return toSaveList.size(); + } +} diff --git a/src/main/java/com/project/ding/controller/AdminWhitrListController.java b/src/main/java/com/project/ding/controller/AdminWhitrListController.java new file mode 100644 index 0000000..db467f9 --- /dev/null +++ b/src/main/java/com/project/ding/controller/AdminWhitrListController.java @@ -0,0 +1,24 @@ +package com.project.ding.controller; + +import com.project.base.domain.result.Result; +import com.project.ding.application.AdminWhitrListApplicationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Slf4j +@RequestMapping("/api/admin/adminWhitr") +public class AdminWhitrListController { + + @Autowired + private AdminWhitrListApplicationService adminWhitrApplicationService; + + @PostMapping("/addAdmin") + public Result addAdmin(){ + int count = adminWhitrApplicationService.addManagersToAdminWhiteList(); + return Result.success("已将" + count + "名管理人员加入 admin 白名单"); + } +} diff --git a/src/main/java/com/project/ding/domain/entity/AdminWhiteListEntity.java b/src/main/java/com/project/ding/domain/entity/AdminWhiteListEntity.java index 83c7645..59566d1 100644 --- a/src/main/java/com/project/ding/domain/entity/AdminWhiteListEntity.java +++ b/src/main/java/com/project/ding/domain/entity/AdminWhiteListEntity.java @@ -26,9 +26,8 @@ public class AdminWhiteListEntity extends BaseEntity { @Id private Long id; - @Column(name = "user_id", nullable = false) - @Comment("用户ID (关联evaluator_user的id)") - private Long userId; + @Column(name = "user_id", nullable = false, columnDefinition = "varchar(500) comment '用户ID (关联evaluator_user的id)'") + private String userId; @Column(name = "user_name", length = 100) @Comment("用户姓名 (冗余字段,方便管理后台直接查看)") diff --git a/src/main/java/com/project/ding/domain/service/AdminWhitrListBaseService.java b/src/main/java/com/project/ding/domain/service/AdminWhitrListBaseService.java new file mode 100644 index 0000000..74caf43 --- /dev/null +++ b/src/main/java/com/project/ding/domain/service/AdminWhitrListBaseService.java @@ -0,0 +1,7 @@ +package com.project.ding.domain.service; + +import com.project.base.domain.service.IBaseService; +import com.project.ding.domain.entity.AdminWhiteListEntity; + +public interface AdminWhitrListBaseService extends IBaseService { +} diff --git a/src/main/java/com/project/ding/domain/service/impl/AdminWhitrListBaseServiceImpl.java b/src/main/java/com/project/ding/domain/service/impl/AdminWhitrListBaseServiceImpl.java new file mode 100644 index 0000000..8d7c6f0 --- /dev/null +++ b/src/main/java/com/project/ding/domain/service/impl/AdminWhitrListBaseServiceImpl.java @@ -0,0 +1,12 @@ +package com.project.ding.domain.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.project.base.domain.service.IBaseService; +import com.project.ding.domain.entity.AdminWhiteListEntity; +import com.project.ding.domain.service.AdminWhitrListBaseService; +import com.project.ding.mapper.AdminWhiteListMapper; +import org.springframework.stereotype.Service; + +@Service +public class AdminWhitrListBaseServiceImpl extends ServiceImpl implements AdminWhitrListBaseService { +} diff --git a/src/main/java/com/project/ding/mapper/UserMapper.java b/src/main/java/com/project/ding/mapper/UserMapper.java index 3d29053..173d4ed 100644 --- a/src/main/java/com/project/ding/mapper/UserMapper.java +++ b/src/main/java/com/project/ding/mapper/UserMapper.java @@ -3,6 +3,16 @@ package com.project.ding.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.project.base.mapper.BatchUpsertMapper; import com.project.ding.domain.entity.UserEntity; +import org.apache.ibatis.annotations.Select; + +import java.util.List; public interface UserMapper extends BaseMapper , BatchUpsertMapper { + + /** + * 查询 title 包含经理、主管、总监的用户 + * @return 用户列表 + */ + @Select("SELECT * FROM evaluator_user WHERE deleted = 0 and title LIKE '%经理%' OR title LIKE '%主管%' OR title LIKE '%总监%'") + List selectUsersByTitleKeywords(); }