From b00a99b185a4b4caf8b5d5c196e147fde6d07338 Mon Sep 17 00:00:00 2001 From: guoyuqi Date: Tue, 1 Apr 2025 11:25:43 +0800 Subject: [PATCH] refactor: personal add module judgement --- .../dto/response/CustomerRepeatResponse.java | 6 ++++ .../system/constants/SystemResultCode.java | 3 +- .../controller/PersonalCenterController.java | 33 +++++++++++++++++-- .../system/service/PersonalCenterService.java | 25 +++++++++++--- .../i18n/cordys-crm_en_US.properties | 2 ++ .../i18n/cordys-crm_zh_CN.properties | 2 ++ 6 files changed, 62 insertions(+), 9 deletions(-) diff --git a/backend/crm/src/main/java/io/cordys/crm/customer/dto/response/CustomerRepeatResponse.java b/backend/crm/src/main/java/io/cordys/crm/customer/dto/response/CustomerRepeatResponse.java index 6f67cee12..213ff5f22 100644 --- a/backend/crm/src/main/java/io/cordys/crm/customer/dto/response/CustomerRepeatResponse.java +++ b/backend/crm/src/main/java/io/cordys/crm/customer/dto/response/CustomerRepeatResponse.java @@ -30,4 +30,10 @@ public class CustomerRepeatResponse { @Schema(description = "商机重复数据数量") private int opportunityCount; + @Schema(description = "线索模块是否开启") + private boolean clueModuleEnable; + + @Schema(description = "商机模块是否开启") + private boolean opportunityModuleEnable; + } diff --git a/backend/crm/src/main/java/io/cordys/crm/system/constants/SystemResultCode.java b/backend/crm/src/main/java/io/cordys/crm/system/constants/SystemResultCode.java index 96279474a..076d38319 100644 --- a/backend/crm/src/main/java/io/cordys/crm/system/constants/SystemResultCode.java +++ b/backend/crm/src/main/java/io/cordys/crm/system/constants/SystemResultCode.java @@ -8,7 +8,8 @@ import io.cordys.common.exception.IResultCode; public enum SystemResultCode implements IResultCode { ROLE_EXIST(101001, "role.exist"), - INTERNAL_ROLE_PERMISSION(101002, "internal.role.permission.error"); + INTERNAL_ROLE_PERMISSION(101002, "internal.role.permission.error"), + MODULE_ENABLE(101003, "internal.role.permission.error"); private final int code; diff --git a/backend/crm/src/main/java/io/cordys/crm/system/controller/PersonalCenterController.java b/backend/crm/src/main/java/io/cordys/crm/system/controller/PersonalCenterController.java index 0779ed12c..d3364f862 100644 --- a/backend/crm/src/main/java/io/cordys/crm/system/controller/PersonalCenterController.java +++ b/backend/crm/src/main/java/io/cordys/crm/system/controller/PersonalCenterController.java @@ -2,18 +2,22 @@ package io.cordys.crm.system.controller; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import io.cordys.common.constants.InternalUser; +import io.cordys.common.constants.ModuleKey; import io.cordys.common.constants.PermissionConstants; +import io.cordys.common.exception.GenericException; import io.cordys.common.pager.PageUtils; import io.cordys.common.pager.Pager; import io.cordys.common.pager.PagerWithOption; import io.cordys.context.OrganizationContext; -import io.cordys.crm.clue.dto.response.ClueListResponse; import io.cordys.crm.clue.dto.response.ClueRepeatListResponse; import io.cordys.crm.customer.dto.response.CustomerRepeatResponse; import io.cordys.crm.follow.dto.request.FollowUpPlanPageRequest; import io.cordys.crm.follow.dto.response.FollowUpPlanListResponse; import io.cordys.crm.follow.service.FollowUpPlanService; import io.cordys.crm.opportunity.dto.response.OpportunityRepeatResponse; +import io.cordys.crm.system.constants.SystemResultCode; +import io.cordys.crm.system.domain.Module; import io.cordys.crm.system.dto.request.PersonalInfoRequest; import io.cordys.crm.system.dto.request.PersonalPasswordRequest; import io.cordys.crm.system.dto.request.RepeatCustomerDetailPageRequest; @@ -21,11 +25,15 @@ import io.cordys.crm.system.dto.request.RepeatCustomerPageRequest; import io.cordys.crm.system.dto.response.UserResponse; import io.cordys.crm.system.mapper.ExtUserRoleMapper; import io.cordys.crm.system.service.PersonalCenterService; +import io.cordys.mybatis.BaseMapper; +import io.cordys.mybatis.lambda.LambdaQueryWrapper; import io.cordys.security.SessionUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.validation.annotation.Validated; @@ -48,14 +56,22 @@ public class PersonalCenterController { @Resource private ExtUserRoleMapper extUserRoleMapper; + @Resource + private BaseMapper moduleMapper; + @PostMapping("/repeat/customer") @Operation(summary = "获取重复客户相关数据") @RequiresPermissions(value = {PermissionConstants.CUSTOMER_MANAGEMENT_READ, PermissionConstants.OPPORTUNITY_MANAGEMENT_READ, PermissionConstants.CLUE_MANAGEMENT_READ}, logical = Logical.OR) public Pager> getRepeatCustomer(@Validated @RequestBody RepeatCustomerPageRequest request) { List permissions = extUserRoleMapper.selectPermissionsByUserId(SessionUtils.getUserId()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Module::getOrganizationId, OrganizationContext.getOrganizationId()); + queryWrapper.eq(Module::getEnable, true); + List modules = moduleMapper.selectListByLambda(queryWrapper); + List keyList = modules.stream().map(Module::getModuleKey).toList(); Page page = PageHelper.startPage(request.getCurrent(), request.getPageSize()); - return PageUtils.setPageInfo(page, personalCenterService.getRepeatCustomer(request,permissions,OrganizationContext.getOrganizationId(), SessionUtils.getUserId())); + return PageUtils.setPageInfo(page, personalCenterService.getRepeatCustomer(request,permissions,keyList,OrganizationContext.getOrganizationId(), SessionUtils.getUserId())); } @@ -63,8 +79,19 @@ public class PersonalCenterController { @Operation(summary = "获取重复线索相关数据") @RequiresPermissions(value = {PermissionConstants.CLUE_MANAGEMENT_READ}) public Pager> getRepeatClue(@Validated @RequestBody RepeatCustomerPageRequest request) { + List permissions = extUserRoleMapper.selectPermissionsByUserId(SessionUtils.getUserId()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Module::getOrganizationId, OrganizationContext.getOrganizationId()); + queryWrapper.eq(Module::getEnable, true); + queryWrapper.eq(Module::getModuleKey, ModuleKey.CLUE.getKey()); + List modules = moduleMapper.selectListByLambda(queryWrapper); Page page = PageHelper.startPage(request.getCurrent(), request.getPageSize()); - return PageUtils.setPageInfo(page, personalCenterService.getRepeatClue(request,OrganizationContext.getOrganizationId())); + //模块关闭,但是有权限,返回指定code + if ((permissions.indexOf(PermissionConstants.CLUE_MANAGEMENT_READ) > 0 || StringUtils.equalsIgnoreCase(SessionUtils.getUserId(), InternalUser.ADMIN.getValue()) && CollectionUtils.isEmpty(modules))) { + throw new GenericException(SystemResultCode.MODULE_ENABLE); + }else { + return PageUtils.setPageInfo(page, personalCenterService.getRepeatClue(request,OrganizationContext.getOrganizationId())); + } } diff --git a/backend/crm/src/main/java/io/cordys/crm/system/service/PersonalCenterService.java b/backend/crm/src/main/java/io/cordys/crm/system/service/PersonalCenterService.java index 3a5a14e19..b90b363cf 100644 --- a/backend/crm/src/main/java/io/cordys/crm/system/service/PersonalCenterService.java +++ b/backend/crm/src/main/java/io/cordys/crm/system/service/PersonalCenterService.java @@ -6,6 +6,7 @@ import io.cordys.aspectj.constants.LogType; import io.cordys.aspectj.context.OperationLogContext; import io.cordys.aspectj.dto.LogContextInfo; import io.cordys.common.constants.InternalUser; +import io.cordys.common.constants.ModuleKey; import io.cordys.common.constants.PermissionConstants; import io.cordys.common.dto.OptionCountDTO; import io.cordys.common.dto.OptionDTO; @@ -19,6 +20,8 @@ import io.cordys.crm.customer.mapper.ExtCustomerMapper; import io.cordys.crm.opportunity.dto.response.OpportunityRepeatResponse; import io.cordys.crm.opportunity.mapper.ExtOpportunityMapper; import io.cordys.crm.system.constants.RepeatType; +import io.cordys.crm.system.constants.SystemResultCode; +import io.cordys.crm.system.domain.Module; import io.cordys.crm.system.domain.Product; import io.cordys.crm.system.domain.User; import io.cordys.crm.system.dto.request.PersonalInfoRequest; @@ -31,6 +34,7 @@ import io.cordys.crm.system.mapper.ExtProductMapper; import io.cordys.crm.system.mapper.ExtUserMapper; import io.cordys.crm.system.utils.MailSender; import io.cordys.mybatis.BaseMapper; +import io.cordys.mybatis.lambda.LambdaQueryWrapper; import jakarta.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -167,20 +171,25 @@ public class PersonalCenterService { return userDetail; } - public List getRepeatCustomer(RepeatCustomerPageRequest request, List permissions, String organizationId, String userId) { + public List getRepeatCustomer(RepeatCustomerPageRequest request, List permissions, List keyList, String organizationId, String userId) { + //模块关闭,但是有权限,返回指定code + if ((permissions.indexOf(PermissionConstants.CUSTOMER_MANAGEMENT_READ) > 0 || StringUtils.equalsIgnoreCase(userId, InternalUser.ADMIN.getValue()) && !keyList.contains(ModuleKey.CUSTOMER.getKey()))) { + throw new GenericException(SystemResultCode.MODULE_ENABLE); + } //1.查询当前用户权限 + List customers; if (permissions.indexOf(PermissionConstants.CUSTOMER_MANAGEMENT_READ) > 0 || StringUtils.equalsIgnoreCase(userId, InternalUser.ADMIN.getValue())) { + customers = extCustomerMapper.checkRepeatCustomerByName(request.getName(), organizationId); + } else { return new ArrayList<>(); } - List customers = extCustomerMapper.checkRepeatCustomerByName(request.getName(), organizationId); - //查商机 Map repeatCountMap = new HashMap<>(); if (permissions.indexOf(PermissionConstants.OPPORTUNITY_MANAGEMENT_READ) > 0 || StringUtils.equalsIgnoreCase(userId, InternalUser.ADMIN.getValue())) { if (CollectionUtils.isNotEmpty(customers)) { List customerIds = customers.stream().map(CustomerRepeatResponse::getId).collect(Collectors.toList()); List repeatCountDTOList = extOpportunityMapper.getRepeatCountMap(customerIds); - repeatCountMap = repeatCountDTOList.stream().collect(Collectors.toMap(OptionDTO::getId,OptionDTO::getName)); + repeatCountMap = repeatCountDTOList.stream().collect(Collectors.toMap(OptionDTO::getId, OptionDTO::getName)); } } @@ -190,9 +199,12 @@ public class PersonalCenterService { if (CollectionUtils.isNotEmpty(customers)) { List customerNames = customers.stream().map(CustomerRepeatResponse::getName).collect(Collectors.toList()); List repeatCountDTOList = extClueMapper.getRepeatCountMap(customerNames); - clueRepeatCountMap = repeatCountDTOList.stream().collect(Collectors.toMap(OptionDTO::getId,OptionDTO::getName)); + clueRepeatCountMap = repeatCountDTOList.stream().collect(Collectors.toMap(OptionDTO::getId, OptionDTO::getName)); } } + boolean clueModuleEnable = keyList.contains(ModuleKey.CLUE.getKey()); + + boolean opportunityModuleEnable = keyList.contains(ModuleKey.BUSINESS.getKey()); for (CustomerRepeatResponse customer : customers) { if (StringUtils.equalsIgnoreCase(customer.getName(), request.getName())) { @@ -205,6 +217,9 @@ public class PersonalCenterService { customer.setOpportunityCount(Integer.parseInt(StringUtils.isBlank(opportunity) ? "0" : opportunity)); String clue = clueRepeatCountMap.get(customer.getName()); customer.setClueCount(Integer.parseInt(StringUtils.isBlank(clue) ? "0" : clue)); + customer.setOpportunityModuleEnable(opportunityModuleEnable); + customer.setClueModuleEnable(clueModuleEnable); + } return customers; } diff --git a/backend/crm/src/main/resources/i18n/cordys-crm_en_US.properties b/backend/crm/src/main/resources/i18n/cordys-crm_en_US.properties index aedd9bbf4..9a30f4562 100644 --- a/backend/crm/src/main/resources/i18n/cordys-crm_en_US.properties +++ b/backend/crm/src/main/resources/i18n/cordys-crm_en_US.properties @@ -109,6 +109,8 @@ module.form.not_exist=Module form does not exist module.form.business_field.deleted=Form business fields cannot be deleted module.field.not_exist=Module field does not exist module.field.not_match_type=Mismatched field types +module.has.closed=Module is closed + # permission name permission.system.name=System diff --git a/backend/crm/src/main/resources/i18n/cordys-crm_zh_CN.properties b/backend/crm/src/main/resources/i18n/cordys-crm_zh_CN.properties index 9d6f33b9b..6af95fe37 100644 --- a/backend/crm/src/main/resources/i18n/cordys-crm_zh_CN.properties +++ b/backend/crm/src/main/resources/i18n/cordys-crm_zh_CN.properties @@ -110,6 +110,8 @@ module.form.not_exist=模块表单不存在 module.form.business_field.deleted=表单业务字段无法删除 module.field.not_exist=字段不存在 module.field.not_match_type=不匹配的字段类型 +module.has.closed=模块已关闭 + # permission name permission.system.name=系统管理