|
@@ -1,17 +1,18 @@
|
|
package cn.cslg.permission.service;
|
|
package cn.cslg.permission.service;
|
|
|
|
|
|
|
|
+import cn.cslg.permission.common.model.vo.AssoTenantVipTypeAndFunctionVO;
|
|
import cn.cslg.permission.common.model.vo.FunctionVO;
|
|
import cn.cslg.permission.common.model.vo.FunctionVO;
|
|
|
|
+import cn.cslg.permission.common.model.vo.TenantVO;
|
|
import cn.cslg.permission.common.utils.CacheUtils;
|
|
import cn.cslg.permission.common.utils.CacheUtils;
|
|
import cn.cslg.permission.common.utils.DataUtils;
|
|
import cn.cslg.permission.common.utils.DataUtils;
|
|
import cn.cslg.permission.common.utils.Response;
|
|
import cn.cslg.permission.common.utils.Response;
|
|
import cn.cslg.permission.domain.Application;
|
|
import cn.cslg.permission.domain.Application;
|
|
import cn.cslg.permission.domain.Function;
|
|
import cn.cslg.permission.domain.Function;
|
|
-import cn.cslg.permission.domain.associate.AssoTenantFunction;
|
|
|
|
|
|
+import cn.cslg.permission.exception.XiaoShiException;
|
|
|
|
+import cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper;
|
|
import cn.cslg.permission.mapper.FunctionMapper;
|
|
import cn.cslg.permission.mapper.FunctionMapper;
|
|
-import cn.cslg.permission.mapper.TenantEntityMapper;
|
|
|
|
-import cn.cslg.permission.mapper.TenantVipTypeMapper;
|
|
|
|
|
|
+import cn.cslg.permission.mapper.TenantMapper;
|
|
import cn.cslg.permission.service.associate.RoleFunctionDataService;
|
|
import cn.cslg.permission.service.associate.RoleFunctionDataService;
|
|
-import cn.cslg.permission.service.associate.TenantFunctionService;
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.lang.tree.Tree;
|
|
import cn.hutool.core.lang.tree.Tree;
|
|
@@ -21,6 +22,7 @@ import cn.hutool.core.lang.tree.TreeUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -35,16 +37,16 @@ import java.util.stream.Collectors;
|
|
* @description 功能类 Service 层
|
|
* @description 功能类 Service 层
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+@Slf4j
|
|
@Service
|
|
@Service
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
|
|
public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
|
|
private final ApplicationService applicationService;
|
|
private final ApplicationService applicationService;
|
|
private final RoleFunctionDataService roleFunctionDataService;
|
|
private final RoleFunctionDataService roleFunctionDataService;
|
|
- private final TenantFunctionService tenantFunctionService;
|
|
|
|
|
|
+ //private final TenantFunctionService tenantFunctionService;
|
|
private final FunctionMapper functionMapper;
|
|
private final FunctionMapper functionMapper;
|
|
- //private final TenantMapper tenantMapper;
|
|
|
|
- private final TenantVipTypeMapper tenantVipTypeMapper;
|
|
|
|
-
|
|
|
|
|
|
+ private final AssoTenantVipTypeFunctionMapper assoTenantVipTypeFunctionMapper;
|
|
|
|
+ private final TenantMapper tenantMapper;
|
|
private final CacheUtils cacheUtils;
|
|
private final CacheUtils cacheUtils;
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -78,34 +80,73 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
|
|
}
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public String deleteFunction(FunctionVO functionVO) {
|
|
|
|
|
|
+ public void deleteFunction(FunctionVO functionVO) {
|
|
|
|
+// try {
|
|
|
|
+// LambdaQueryWrapper<AssoTenantFunction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+// lambdaQueryWrapper.eq(AssoTenantFunction::getFunctionId, functionVO.getId());
|
|
|
|
+// List<AssoTenantFunction> tenantFunctionList = tenantFunctionService.list(lambdaQueryWrapper);
|
|
|
|
+//
|
|
|
|
+// if (tenantFunctionList.size() > 0) {
|
|
|
|
+// return Response.error("该功能仍有使用者,无法删除");
|
|
|
|
+// } else {
|
|
|
|
+// List<Function> lst = functionMapper.getFunctionInPathByIdWithoutType(functionVO.getId());
|
|
|
|
+// if (lst.size() > 0) {
|
|
|
|
+// this.removeByIds(lst.stream().map(Function::getId).collect(Collectors.toList()));
|
|
|
|
+// tenantFunctionService.delete(null, null, lst.stream().map(Function::getId).collect(Collectors.toList()));
|
|
|
|
+// roleFunctionDataService.delete(null, null, lst.stream().map(Function::getId).collect(Collectors.toList()), null);
|
|
|
|
+// } else {
|
|
|
|
+// Function function = new Function();
|
|
|
|
+// function.setId(functionVO.getId());
|
|
|
|
+// function.deleteById();
|
|
|
|
+//
|
|
|
|
+// tenantFunctionService.delete(null, functionVO.getId(), null);
|
|
|
|
+// roleFunctionDataService.delete(null, functionVO.getId(), null, null);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
+// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
|
+// e.printStackTrace();
|
|
|
|
+// }
|
|
|
|
+// return Response.success(true);
|
|
|
|
+ log.info("开始处理【删除功能】的业务,参数为:{}", functionVO);
|
|
try {
|
|
try {
|
|
- LambdaQueryWrapper<AssoTenantFunction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
- lambdaQueryWrapper.eq(AssoTenantFunction::getFunctionId, functionVO.getId());
|
|
|
|
- List<AssoTenantFunction> tenantFunctionList = tenantFunctionService.list(lambdaQueryWrapper);
|
|
|
|
|
|
+ Integer functionId = functionVO.getId();
|
|
|
|
+ //根据功能id查询所有拥有该功能的会员类型ids
|
|
|
|
+ List<Integer> tenantVipTypeIds = assoTenantVipTypeFunctionMapper.selectTenantVipTypeIdsByFunctionId(functionId);
|
|
|
|
+ //根据会员类型ids统计选择了这些会员类型的租户的数量,如果数量大于0则意味着该功能有租户正在使用,禁止删除
|
|
|
|
+ int count = tenantMapper.countByTenantVipTypes(tenantVipTypeIds);
|
|
|
|
+ if (count > 0) {
|
|
|
|
+ String message = "删除功能失败,该功能仍有使用者,无法删除";
|
|
|
|
+ log.info("{}", message);
|
|
|
|
+ throw new XiaoShiException(message);
|
|
|
|
+ }
|
|
|
|
|
|
- if (tenantFunctionList.size() > 0) {
|
|
|
|
- return Response.error("该功能仍有使用者,无法删除");
|
|
|
|
|
|
+ List<Function> functions = functionMapper.getFunctionInPathByIdWithoutType(functionId);
|
|
|
|
+ if (functions.size() > 0) {
|
|
|
|
+ List<Integer> functionIds = functions.stream().map(Function::getId).collect(Collectors.toList());
|
|
|
|
+ //批量删除功能表数据
|
|
|
|
+ this.removeByIds(functionIds);
|
|
|
|
+ //批量删除租户会员类型和功能关联表数据
|
|
|
|
+ assoTenantVipTypeFunctionMapper.deleteByFunctionIds(functionIds);
|
|
|
|
+ //批量删除角色和功能关联表数据
|
|
|
|
+ roleFunctionDataService.delete(null, null, functionIds, null);
|
|
} else {
|
|
} else {
|
|
- List<Function> lst = functionMapper.getFunctionInPathByIdWithoutType(functionVO.getId());
|
|
|
|
- if (lst.size() > 0) {
|
|
|
|
- this.removeByIds(lst.stream().map(Function::getId).collect(Collectors.toList()));
|
|
|
|
- tenantFunctionService.delete(null, null, lst.stream().map(Function::getId).collect(Collectors.toList()));
|
|
|
|
- roleFunctionDataService.delete(null, null, lst.stream().map(Function::getId).collect(Collectors.toList()), null);
|
|
|
|
- } else {
|
|
|
|
- Function function = new Function();
|
|
|
|
- function.setId(functionVO.getId());
|
|
|
|
- function.deleteById();
|
|
|
|
-
|
|
|
|
- tenantFunctionService.delete(null, functionVO.getId(), null);
|
|
|
|
- roleFunctionDataService.delete(null, functionVO.getId(), null, null);
|
|
|
|
- }
|
|
|
|
|
|
+ Function function = new Function();
|
|
|
|
+ function.setId(functionId);
|
|
|
|
+ //删除功能表数据
|
|
|
|
+ function.deleteById();
|
|
|
|
+ //删除租户会员类型和功能关联表数据
|
|
|
|
+ assoTenantVipTypeFunctionMapper.deleteByFunctionId(functionId);
|
|
|
|
+ //删除角色和功能关联表数据
|
|
|
|
+ roleFunctionDataService.delete(null, functionId, null, null);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
- return Response.success(true);
|
|
|
|
|
|
+
|
|
|
|
+ log.info("删除功能完成");
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -272,17 +313,36 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
|
|
}
|
|
}
|
|
|
|
|
|
public String getFuncListByTypeIsShow(String tenant) {
|
|
public String getFuncListByTypeIsShow(String tenant) {
|
|
- //获得当前登陆人所属的租户的租户id
|
|
|
|
- Integer tenantId = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt()).getTenantId();
|
|
|
|
- LambdaQueryWrapper<AssoTenantFunction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
|
+// 获取当前登陆人所属的租户的租户id
|
|
|
|
+// Integer tenantId = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt()).getTenantId();
|
|
|
|
+// LambdaQueryWrapper<AssoTenantFunction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+// if (tenant != null && !tenant.equals("")) {
|
|
|
|
+// lambdaQueryWrapper.eq(AssoTenantFunction::getTenantId, tenant);
|
|
|
|
+// } else {
|
|
|
|
+// lambdaQueryWrapper.eq(AssoTenantFunction::getTenantId, tenantId);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// List<Integer> functionIds = tenantFunctionService.list(lambdaQueryWrapper).stream().map(AssoTenantFunction::getFunctionId).collect(Collectors.toList());
|
|
|
|
+ log.info("开始处理【查询类型为展示的功能】的业务,参数为:{}", tenant);
|
|
|
|
+ Integer tenantVipType = null;
|
|
|
|
+ //如果前端传来了tenant(租户id)就直接用,如果没传来租户id就获取当前登陆人所属的租户的租户id
|
|
if (tenant != null && !tenant.equals("")) {
|
|
if (tenant != null && !tenant.equals("")) {
|
|
- lambdaQueryWrapper.eq(AssoTenantFunction::getTenantId, tenant);
|
|
|
|
|
|
+ int tenantId = Integer.parseInt(tenant);
|
|
|
|
+ TenantVO tenantVO = tenantMapper.getStandardById(tenantId);
|
|
|
|
+ tenantVipType = tenantVO.getTenantVipType();
|
|
} else {
|
|
} else {
|
|
- lambdaQueryWrapper.eq(AssoTenantFunction::getTenantId, tenantId);
|
|
|
|
|
|
+ //获取当前登陆人所属的租户的租户id
|
|
|
|
+ Integer tenantId = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt()).getTenantId();
|
|
|
|
+ TenantVO tenantVO = tenantMapper.getStandardById(tenantId);
|
|
|
|
+ tenantVipType = tenantVO.getTenantVipType();
|
|
}
|
|
}
|
|
|
|
|
|
- List<Integer> functionIds = tenantFunctionService.list(lambdaQueryWrapper).stream().map(AssoTenantFunction::getFunctionId).collect(Collectors.toList());
|
|
|
|
-
|
|
|
|
|
|
+ List<AssoTenantVipTypeAndFunctionVO> assoTenantVipTypeAndFunctionVOS = assoTenantVipTypeFunctionMapper.selectByTenantVipTypeId(tenantVipType);
|
|
|
|
+ ArrayList<Integer> functionIds = new ArrayList<>();
|
|
|
|
+ for (AssoTenantVipTypeAndFunctionVO assoTenantVipTypeAndFunctionVO : assoTenantVipTypeAndFunctionVOS) {
|
|
|
|
+ Integer functionId = assoTenantVipTypeAndFunctionVO.getFunctionId();
|
|
|
|
+ functionIds.add(functionId);
|
|
|
|
+ }
|
|
|
|
|
|
LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
|
|
queryWrapper
|
|
queryWrapper
|