|
|
|
|
@ -5,12 +5,11 @@ import cn.hutool.core.util.ObjUtil;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.convert.permission.CrmPermissionConvert;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.enums.common.PermissionTypeEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.enums.common.TransferTypeEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.framework.enums.CrmEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.framework.enums.CrmBizTypeEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateBO;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionUpdateBO;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.service.permission.bo.TransferCrmPermissionBO;
|
|
|
|
|
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmTransferPermissionReqBO;
|
|
|
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
|
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@ -18,10 +17,11 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
|
|
|
|
|
import static cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum.isOwner;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* crm 数据权限 Service 接口实现类
|
|
|
|
|
@ -41,10 +41,9 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Long createCrmPermission(CrmPermissionCreateBO createBO) {
|
|
|
|
|
// TODO @puhui999:createDO 改成 permission,保持统一哈;
|
|
|
|
|
CrmPermissionDO createDO = CrmPermissionConvert.INSTANCE.convert(createBO);
|
|
|
|
|
crmPermissionMapper.insert(createDO);
|
|
|
|
|
return createDO.getId();
|
|
|
|
|
CrmPermissionDO permission = CrmPermissionConvert.INSTANCE.convert(createBO);
|
|
|
|
|
crmPermissionMapper.insert(permission);
|
|
|
|
|
return permission.getId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ -64,64 +63,67 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|
|
|
|
crmPermissionMapper.deleteById(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public CrmPermissionDO getPermissionByBizTypeAndBizIdAndUserId(Integer bizType, Long bizId, Long userId) {
|
|
|
|
|
return crmPermissionMapper.selectByBizTypeAndBizIdByUserId(bizType, bizId, userId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<CrmPermissionDO> getPermissionByBizTypeAndBizId(Integer bizType, Long bizId) {
|
|
|
|
|
return crmPermissionMapper.selectByBizTypeAndBizId(bizType, bizId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void validateCrmPermissionExists(Long id) {
|
|
|
|
|
if (crmPermissionMapper.selectById(id) == null) {
|
|
|
|
|
throw exception(CRM_PERMISSION_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public CrmPermissionDO getCrmPermissionByCrmTypeAndCrmDataId(Integer crmType, Long crmDataId) {
|
|
|
|
|
return crmPermissionMapper.selectByCrmTypeAndCrmDataId(crmType, crmDataId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO @puhui999:参数名,是不是 transferReqBO
|
|
|
|
|
@Override
|
|
|
|
|
public void transferCrmPermission(TransferCrmPermissionBO transferCrmPermissionBO) {
|
|
|
|
|
// 1.1 校验商机是否存在
|
|
|
|
|
// TODO puhui999:这里直接调用 crmPermissionMapper 的 selectByCrmTypeAndCrmDataId 方法,会更简洁一点;
|
|
|
|
|
CrmPermissionDO permission = getCrmPermissionByCrmTypeAndCrmDataId(transferCrmPermissionBO.getCrmType(),
|
|
|
|
|
transferCrmPermissionBO.getCrmDataId());
|
|
|
|
|
String crmName = CrmEnum.getNameByType(transferCrmPermissionBO.getCrmType());
|
|
|
|
|
if (permission == null) {
|
|
|
|
|
throw exception(CRM_PERMISSION_MODEL_NOT_EXISTS, crmName);
|
|
|
|
|
}
|
|
|
|
|
// 1.2 校验转移对象是否已经是该负责人
|
|
|
|
|
if (ObjUtil.equal(permission.getOwnerUserId(), permission.getOwnerUserId())) {
|
|
|
|
|
// TODO @puhui999:是不是这个错误码不太对。。。
|
|
|
|
|
throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS, crmName);
|
|
|
|
|
public void transferCrmPermission(CrmTransferPermissionReqBO transferReqBO) {
|
|
|
|
|
// 1. 校验数据权限-是否是负责人,只有负责人才可以转移
|
|
|
|
|
CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId(transferReqBO.getBizType(),
|
|
|
|
|
transferReqBO.getBizId(), transferReqBO.getUserId());
|
|
|
|
|
String crmName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
|
|
|
|
|
// TODO 校验是否为超级管理员 || 1
|
|
|
|
|
if (oldPermission == null || !isOwner(oldPermission.getPermissionLevel())) {
|
|
|
|
|
throw exception(CRM_PERMISSION_DENIED, crmName);
|
|
|
|
|
}
|
|
|
|
|
// 1.3 校验新负责人是否存在
|
|
|
|
|
AdminUserRespDTO user = adminUserApi.getUser(permission.getOwnerUserId());
|
|
|
|
|
if (user == null) {
|
|
|
|
|
|
|
|
|
|
// 2. 校验转移对象是否已经是该负责人
|
|
|
|
|
if (ObjUtil.equal(transferReqBO.getNewOwnerUserId(), oldPermission.getUserId())) {
|
|
|
|
|
throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS, crmName);
|
|
|
|
|
}
|
|
|
|
|
// TODO 校验是否为超级管理员 || 1.4
|
|
|
|
|
// 1.4 校验是否有写权限
|
|
|
|
|
// TODO puhui999:CollUtil.contains 就够了,不用后面写个表达式;
|
|
|
|
|
if (!CollUtil.contains(permission.getRwUserIds(), id -> ObjUtil.equal(id, transferCrmPermissionBO.getUserId()))) {
|
|
|
|
|
throw exception(CRM_PERMISSION_DENIED, crmName);
|
|
|
|
|
// 2.1 校验新负责人是否存在
|
|
|
|
|
AdminUserRespDTO user = adminUserApi.getUser(transferReqBO.getNewOwnerUserId());
|
|
|
|
|
if (user == null) {
|
|
|
|
|
throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS, crmName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. 权限转移
|
|
|
|
|
CrmPermissionDO updateCrmPermission = new CrmPermissionDO().setId(permission.getId())
|
|
|
|
|
.setOwnerUserId(transferCrmPermissionBO.getOwnerUserId());
|
|
|
|
|
if (ObjUtil.equal(TransferTypeEnum.TEAM.getType(), transferCrmPermissionBO.getTransferType())) {
|
|
|
|
|
if (ObjUtil.equal(PermissionTypeEnum.READONLY.getType(), transferCrmPermissionBO.getPermissionType())) {
|
|
|
|
|
Set<Long> roUserIds = permission.getRoUserIds();
|
|
|
|
|
roUserIds.add(permission.getOwnerUserId()); // 老负责人加入团队有只读权限
|
|
|
|
|
updateCrmPermission.setRoUserIds(roUserIds);
|
|
|
|
|
}
|
|
|
|
|
if (ObjUtil.equal(PermissionTypeEnum.READ_AND_WRITE.getType(), transferCrmPermissionBO.getPermissionType())) {
|
|
|
|
|
Set<Long> rwUserIds = permission.getRwUserIds();
|
|
|
|
|
rwUserIds.add(permission.getOwnerUserId()); // 老负责人加入团队有读写权限
|
|
|
|
|
updateCrmPermission.setRoUserIds(rwUserIds);
|
|
|
|
|
}
|
|
|
|
|
// 3. 权限转移
|
|
|
|
|
List<CrmPermissionDO> permissions = crmPermissionMapper.selectByBizTypeAndBizId(
|
|
|
|
|
transferReqBO.getBizType(), transferReqBO.getBizId()); // 获取所有团队成员
|
|
|
|
|
// 3.1 校验新负责人是否在团队成员中
|
|
|
|
|
CrmPermissionDO permission = CollUtil.findOne(permissions,
|
|
|
|
|
item -> ObjUtil.equal(item.getUserId(), transferReqBO.getNewOwnerUserId()));
|
|
|
|
|
if (permission == null) { // 不存在则以负责人的级别加入这个团队
|
|
|
|
|
crmPermissionMapper.insert(new CrmPermissionDO().setBizType(transferReqBO.getBizType())
|
|
|
|
|
.setBizId(transferReqBO.getBizId()).setUserId(transferReqBO.getNewOwnerUserId())
|
|
|
|
|
.setPermissionLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
|
|
|
|
|
|
|
|
|
|
} else { // 存在则修改权限级别
|
|
|
|
|
crmPermissionMapper.updateById(new CrmPermissionDO().setId(permission.getId())
|
|
|
|
|
.setPermissionLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
|
|
|
|
|
}
|
|
|
|
|
crmPermissionMapper.updateById(updateCrmPermission);
|
|
|
|
|
|
|
|
|
|
// 3. TODO 记录机转移日志
|
|
|
|
|
// TODO @puhui999:是不是交给业务记录哈;
|
|
|
|
|
// 4. 老负责人处理
|
|
|
|
|
if (transferReqBO.getJoinTeam()) { // 加入团队
|
|
|
|
|
crmPermissionMapper.updateById(new CrmPermissionDO().setId(oldPermission.getId())
|
|
|
|
|
.setPermissionLevel(transferReqBO.getPermissionLevel())); // 设置加入团队后的级别
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
crmPermissionMapper.deleteById(oldPermission.getId()); // 移除
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|