weaver-hrm-salary/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java

206 lines
9.0 KiB
Java
Raw Normal View History

2024-07-26 11:35:17 +08:00
package com.engine.salary.service.auth;
2024-07-29 09:46:01 +08:00
import cn.hutool.core.collection.CollUtil;
2024-09-26 19:20:37 +08:00
import cn.hutool.core.util.StrUtil;
2024-07-26 11:35:17 +08:00
import com.engine.core.impl.Service;
2024-09-24 10:19:06 +08:00
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.config.SalaryElogConfig;
2024-07-26 11:35:17 +08:00
import com.engine.salary.constant.SalaryDefaultTenantConstant;
2024-08-30 17:22:10 +08:00
import com.engine.salary.entity.auth.dto.AuthRoleEmpDTO;
2024-09-26 19:20:37 +08:00
import com.engine.salary.entity.auth.param.AuthMemberQueryParam;
2024-07-26 11:35:17 +08:00
import com.engine.salary.entity.auth.param.AuthMemberSaveParam;
2024-08-06 10:46:33 +08:00
import com.engine.salary.entity.auth.param.AuthSyncParam;
2024-07-26 11:35:17 +08:00
import com.engine.salary.entity.auth.po.AuthMemberPO;
2024-07-26 16:35:51 +08:00
import com.engine.salary.entity.auth.po.AuthRoleEmpPO;
2024-07-26 11:35:17 +08:00
import com.engine.salary.entity.auth.po.AuthRolePO;
2024-09-24 10:19:06 +08:00
import com.engine.salary.enums.OperateTypeEnum;
2024-07-30 17:45:02 +08:00
import com.engine.salary.enums.auth.MemberTargetTypeEnum;
2024-07-26 11:35:17 +08:00
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.auth.AuthMemberMapper;
2024-07-26 14:30:14 +08:00
import com.engine.salary.mapper.auth.AuthRoleEmpMapper;
2024-07-26 11:35:17 +08:00
import com.engine.salary.mapper.auth.AuthRoleMapper;
2024-07-26 16:35:51 +08:00
import com.engine.salary.util.SalaryEntityUtil;
2024-09-24 10:19:06 +08:00
import com.engine.salary.util.SalaryI18nUtil;
2024-07-26 11:35:17 +08:00
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
2024-07-29 09:46:01 +08:00
import com.google.common.collect.Lists;
2025-09-18 15:38:13 +08:00
import org.apache.commons.lang3.StringUtils;
2024-07-26 11:35:17 +08:00
2024-07-26 16:35:51 +08:00
import java.util.*;
import java.util.stream.Collectors;
2024-07-26 11:35:17 +08:00
public class AuthMemberServiceImpl extends Service implements AuthMemberService {
private AuthMemberMapper getAuthMemberMapper() {
return MapperProxyFactory.getProxy(AuthMemberMapper.class);
}
private AuthRoleMapper getAuthRoleMapper() {
return MapperProxyFactory.getProxy(AuthRoleMapper.class);
}
2024-07-26 14:30:14 +08:00
private AuthRoleEmpMapper getAuthRoleEmpMapper() {
return MapperProxyFactory.getProxy(AuthRoleEmpMapper.class);
}
2024-07-26 11:35:17 +08:00
2024-07-29 13:28:46 +08:00
@Override
2024-07-30 17:45:02 +08:00
public List<AuthMemberPO> list(Long roleId) {
2024-07-29 13:28:46 +08:00
return getAuthMemberMapper().listSome(AuthMemberPO.builder().roleId(roleId).build());
}
2024-07-26 11:35:17 +08:00
@Override
2024-08-08 10:01:41 +08:00
public void save(List<AuthMemberSaveParam> params) {
params.forEach(param -> {
AuthRolePO rolePO = getAuthRoleMapper().getById(param.getRoleId());
if (rolePO == null) {
throw new SalaryRunTimeException("角色不存在!");
}
Date now = new Date();
2024-08-22 15:37:50 +08:00
if (param.getId() == null) {
AuthMemberPO po = AuthMemberPO.builder()
.id(IdGenerator.generate())
.roleId(param.getRoleId())
.target(param.getTarget())
.targetType(param.getTargetType().getValue())
.targetName(param.getTargetName())
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(0)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
getAuthMemberMapper().insertIgnoreNull(po);
2024-09-24 10:19:06 +08:00
LoggerContext<AuthMemberPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(rolePO.getId() + "");
loggerContext.setTargetName(rolePO.getName() + "成员:" + po.getId());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
loggerContext.setNewValues(po);
SalaryElogConfig.authLinkLoggerTemplate.write(loggerContext);
2024-08-22 15:37:50 +08:00
} else {
AuthMemberPO oldPO = getAuthMemberMapper().getById(param.getId());
AuthMemberPO newPo = AuthMemberPO.builder()
.id(param.getId())
.target(param.getTarget())
.targetType(param.getTargetType().getValue())
.targetName(param.getTargetName())
.creator((long) user.getUID())
.updateTime(now)
.deleteType(0)
.build();
getAuthMemberMapper().updateIgnoreNull(newPo);
2024-09-24 10:19:06 +08:00
LoggerContext<AuthMemberPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(rolePO.getId() + "");
loggerContext.setTargetName(rolePO.getName() + "成员:" + newPo.getId());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑成员"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑成员"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(newPo);
SalaryElogConfig.authLinkLoggerTemplate.write(loggerContext);
2024-08-22 15:37:50 +08:00
}
2024-08-08 10:01:41 +08:00
});
2024-07-26 11:35:17 +08:00
}
@Override
2024-08-06 10:46:33 +08:00
public void delete(List<Long> ids) {
ids.forEach(id -> {
AuthMemberPO po = getAuthMemberMapper().getById(id);
if (po == null) {
throw new SalaryRunTimeException("成员不存在!");
}
getAuthMemberMapper().deleteByIds(Collections.singleton(id));
2024-09-24 10:19:06 +08:00
AuthRolePO rolePO = getAuthRoleMapper().getById(po.getRoleId());
LoggerContext<AuthMemberPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(rolePO.getId() + "");
loggerContext.setTargetName(rolePO.getName() + "成员:" + po.getId());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除成员"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除成员"));
loggerContext.setNewValues(po);
SalaryElogConfig.authLinkLoggerTemplate.write(loggerContext);
2024-08-06 10:46:33 +08:00
});
2024-07-26 11:35:17 +08:00
}
@Override
2024-08-06 10:46:33 +08:00
public void sync(AuthSyncParam param) {
Long roleId = param.getRoleId();
2024-07-26 14:30:14 +08:00
AuthRolePO rolePO = getAuthRoleMapper().getById(roleId);
if (rolePO == null) {
throw new SalaryRunTimeException("角色不存在!");
}
//1、获取成员
List<AuthMemberPO> members = getAuthMemberMapper().listSome(AuthMemberPO.builder().roleId(roleId).build());
2024-07-26 16:35:51 +08:00
Map<Integer, Set<String>> targetTypeMap = SalaryEntityUtil.group2Map(members, AuthMemberPO::getTargetType, AuthMemberPO::getTarget);
2024-07-26 14:30:14 +08:00
//2、获取人员
2024-07-26 16:35:51 +08:00
Set<Long> empIds = new HashSet<>();
for (Integer targetType : targetTypeMap.keySet()) {
Set<String> targetIds = targetTypeMap.get(targetType);
2024-07-30 17:45:02 +08:00
List<Long> ids = MemberTargetTypeEnum.parseByValue(targetType).getEmpIds(targetIds);
2024-07-26 16:35:51 +08:00
empIds.addAll(ids);
}
2024-07-26 14:30:14 +08:00
//3、更新成员关系
getAuthRoleEmpMapper().deleteByRoleId(roleId);
2024-07-26 16:35:51 +08:00
Date now = new Date();
List<AuthRoleEmpPO> roleEmpPOS = empIds.stream()
.map(empId -> AuthRoleEmpPO.builder()
.id(IdGenerator.generate())
.employeeId(empId)
.roleId(roleId)
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(0)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build())
.collect(Collectors.toList());
2024-07-29 09:46:01 +08:00
if (CollUtil.isNotEmpty(roleEmpPOS)) {
List<List<AuthRoleEmpPO>> partition = Lists.partition(roleEmpPOS, 100);
partition.forEach(list -> getAuthRoleEmpMapper().batchInsert(list));
}
2024-09-24 10:19:06 +08:00
LoggerContext<AuthMemberPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(rolePO.getId() + "");
loggerContext.setTargetName(rolePO.getName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "同步成员"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "同步成员"));
SalaryElogConfig.authLinkLoggerTemplate.write(loggerContext);
2024-07-26 11:35:17 +08:00
}
2024-08-23 09:38:54 +08:00
@Override
public void deleteByRoleId(Long roleId) {
getAuthMemberMapper().deleteByRoleId(roleId);
getAuthRoleEmpMapper().deleteByRoleId(roleId);
}
2024-08-30 17:22:10 +08:00
@Override
2024-09-26 19:20:37 +08:00
public List<AuthRoleEmpDTO> listRoleEmp(AuthMemberQueryParam param) {
List<AuthRoleEmpDTO> empDTOS = getAuthRoleEmpMapper().getByRoleId(param.getRoleId());
if(StrUtil.isNotEmpty(param.getUsername())){
2025-09-18 15:38:13 +08:00
empDTOS = empDTOS.stream().filter(item -> StringUtils.isNotBlank(item.getUsername()) && item.getUsername().contains(param.getUsername())).collect(Collectors.toList());
2024-09-26 19:20:37 +08:00
}
return empDTOS;
2024-08-30 17:22:10 +08:00
}
2024-07-26 11:35:17 +08:00
}