mirror of
https://github.com/1Panel-dev/CordysCRM.git
synced 2026-05-14 19:32:10 +08:00
feat: pool support admin
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package io.cordys.crm.clue.service;
|
||||
|
||||
import io.cordys.common.constants.InternalUser;
|
||||
import io.cordys.common.dto.BasePageRequest;
|
||||
import io.cordys.common.exception.GenericException;
|
||||
import io.cordys.common.uid.IDGenerator;
|
||||
@@ -30,6 +31,7 @@ import io.cordys.mybatis.lambda.LambdaQueryWrapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -329,6 +331,9 @@ public class CluePoolService {
|
||||
* @param accessUserId 访问用户ID
|
||||
*/
|
||||
private void checkPoolOwner(CluePool pool, String accessUserId) {
|
||||
if (StringUtils.equals(accessUserId, InternalUser.ADMIN.getValue())) {
|
||||
return;
|
||||
}
|
||||
List<String> ownerIds = JSON.parseArray(pool.getOwnerId(), String.class);
|
||||
List<String> ownerUserIds = extUserMapper.getUserIdsByScope(ownerIds, pool.getOrganizationId());
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ public class PoolCustomerController {
|
||||
@PostMapping("/batch-pick")
|
||||
@Operation(summary = "批量领取客户")
|
||||
@RequiresPermissions(value = {PermissionConstants.CUSTOMER_MANAGEMENT_PICK})
|
||||
public void batchPick(@Validated @RequestBody PoolCustomerBatchRequest request) {
|
||||
public void batchPick(@Validated @RequestBody PoolCustomerBatchPickRequest request) {
|
||||
poolCustomerService.batchPick(request, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package io.cordys.crm.customer.dto.request;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PoolCustomerBatchPickRequest extends PoolCustomerBatchRequest{
|
||||
|
||||
@NotBlank
|
||||
@Schema(description = "公海ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String poolId;
|
||||
}
|
||||
@@ -13,8 +13,4 @@ public class PoolCustomerBatchRequest {
|
||||
@NotNull
|
||||
@Schema(description = "批量ID集合")
|
||||
private List<String> batchIds;
|
||||
|
||||
@NotBlank
|
||||
@Schema(description = "公海ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String poolId;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.cordys.crm.customer.service;
|
||||
|
||||
import io.cordys.common.constants.InternalUser;
|
||||
import io.cordys.common.dto.BasePageRequest;
|
||||
import io.cordys.common.exception.GenericException;
|
||||
import io.cordys.common.uid.IDGenerator;
|
||||
@@ -29,13 +30,11 @@ import io.cordys.mybatis.lambda.LambdaQueryWrapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@@ -266,6 +265,9 @@ public class CustomerPoolService {
|
||||
* @param accessUserId 访问用户ID
|
||||
*/
|
||||
private void checkPoolOwner(CustomerPool pool, String accessUserId) {
|
||||
if (StringUtils.equals(accessUserId, InternalUser.ADMIN.getValue())) {
|
||||
return;
|
||||
}
|
||||
List<String> ownerIds = JSON.parseArray(pool.getOwnerId(), String.class);
|
||||
List<String> ownerUserIds = extUserMapper.getUserIdsByScope(ownerIds, pool.getOrganizationId());
|
||||
if (!ownerUserIds.contains(accessUserId)) {
|
||||
|
||||
@@ -8,7 +8,7 @@ import io.cordys.crm.customer.domain.Customer;
|
||||
import io.cordys.crm.customer.domain.CustomerPool;
|
||||
import io.cordys.crm.customer.domain.CustomerPoolPickRule;
|
||||
import io.cordys.crm.customer.dto.request.PoolCustomerBatchAssignRequest;
|
||||
import io.cordys.crm.customer.dto.request.PoolCustomerBatchRequest;
|
||||
import io.cordys.crm.customer.dto.request.PoolCustomerBatchPickRequest;
|
||||
import io.cordys.crm.customer.dto.request.PoolCustomerPickRequest;
|
||||
import io.cordys.crm.customer.mapper.ExtCustomerCapacityMapper;
|
||||
import io.cordys.crm.system.mapper.ExtUserMapper;
|
||||
@@ -106,7 +106,7 @@ public class PoolCustomerService {
|
||||
* @param currentUser 当前用户ID
|
||||
* @param currentOrgId 当前组织ID
|
||||
*/
|
||||
public void batchPick(PoolCustomerBatchRequest request, String currentUser, String currentOrgId) {
|
||||
public void batchPick(PoolCustomerBatchPickRequest request, String currentUser, String currentOrgId) {
|
||||
validateCapacity(request.getBatchIds().size(), currentUser, currentOrgId);
|
||||
LambdaQueryWrapper<CustomerPoolPickRule> pickRuleWrapper = new LambdaQueryWrapper<>();
|
||||
pickRuleWrapper.eq(CustomerPoolPickRule::getPoolId, request.getPoolId());
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
"readable": true,
|
||||
"editable": true,
|
||||
"fieldWidth": 0.5,
|
||||
"datetype": "date",
|
||||
"dateType": "date",
|
||||
"rules": [
|
||||
{"key": "required"}
|
||||
]
|
||||
@@ -736,7 +736,7 @@
|
||||
"name": "跟进时间",
|
||||
"internalKey": "recordTime",
|
||||
"type": "DATE_TIME",
|
||||
"datetype": "date",
|
||||
"dateType": "date",
|
||||
"showLabel": true,
|
||||
"readable": true,
|
||||
"editable": true,
|
||||
@@ -867,7 +867,7 @@
|
||||
"name": "预计开始时间",
|
||||
"internalKey": "planStartTime",
|
||||
"type": "DATE_TIME",
|
||||
"datetype": "date",
|
||||
"dateType": "date",
|
||||
"showLabel": true,
|
||||
"readable": true,
|
||||
"editable": true,
|
||||
|
||||
@@ -94,12 +94,6 @@ public class CluePoolControllerTests extends BaseTest {
|
||||
request.setPickRule(pickRule);
|
||||
CluePoolRecycleRuleDTO recycleRule = CluePoolRecycleRuleDTO.builder().expireNotice(true).noticeDays(10).build();
|
||||
request.setRecycleRule(recycleRule);
|
||||
MvcResult mvcResult = this.requestPost("/clue-pool/update", request).andExpect(status().is5xxServerError()).andReturn();
|
||||
assert mvcResult.getResponse().getContentAsString().contains(Translator.get("clue_pool_access_fail"));
|
||||
// update owner id by sql
|
||||
cluePool.setOwnerId(JSON.toJSONString(List.of("admin")));
|
||||
cluePoolMapper.updateById(cluePool);
|
||||
request.setOwnerIds(List.of("admin"));
|
||||
this.requestPostWithOk("/clue-pool/update", request);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,13 +16,19 @@ import io.cordys.crm.customer.dto.request.CustomerPoolAddRequest;
|
||||
import io.cordys.crm.customer.dto.request.CustomerPoolUpdateRequest;
|
||||
import io.cordys.crm.system.dto.RuleConditionDTO;
|
||||
import io.cordys.mybatis.BaseMapper;
|
||||
import io.cordys.security.SessionUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
|
||||
import java.util.List;
|
||||
@@ -95,12 +101,6 @@ public class CustomerPoolControllerTests extends BaseTest {
|
||||
CustomerPoolRecycleRuleDTO recycleRule = CustomerPoolRecycleRuleDTO.builder()
|
||||
.expireNotice(true).noticeDays(10).build();
|
||||
request.setRecycleRule(recycleRule);
|
||||
MvcResult mvcResult = this.requestPost("/customer-pool/update", request).andExpect(status().is5xxServerError()).andReturn();
|
||||
assert mvcResult.getResponse().getContentAsString().contains(Translator.get("customer_pool_access_fail"));
|
||||
// update owner id by sql
|
||||
customerPool.setOwnerId(JSON.toJSONString(List.of("admin")));
|
||||
customerPoolMapper.updateById(customerPool);
|
||||
request.setOwnerIds(List.of("admin"));
|
||||
this.requestPostWithOk("/customer-pool/update", request);
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ public class PoolCustomerControllerTests extends BaseTest {
|
||||
rule.setPickNumber(1);
|
||||
customerPoolPickRuleMapper.insert(rule);
|
||||
customerCapacityMapper.deleteByLambda(new LambdaQueryWrapper<>());
|
||||
PoolCustomerBatchRequest request = new PoolCustomerBatchRequest();
|
||||
PoolCustomerBatchPickRequest request = new PoolCustomerBatchPickRequest();
|
||||
request.setBatchIds(List.of(testDataId));
|
||||
request.setPoolId("test-pool-id");
|
||||
MvcResult mvcResult = this.requestPost(BATCH_PICK, request).andExpect(status().is5xxServerError()).andReturn();
|
||||
@@ -153,7 +153,6 @@ public class PoolCustomerControllerTests extends BaseTest {
|
||||
PoolCustomerBatchAssignRequest request = new PoolCustomerBatchAssignRequest();
|
||||
request.setBatchIds(List.of("aaa"));
|
||||
request.setAssignUserId("cc");
|
||||
request.setPoolId("test-pool-id");
|
||||
MvcResult mvcResult = this.requestPost(BATCH_ASSIGN, request).andExpect(status().is5xxServerError()).andReturn();
|
||||
assert mvcResult.getResponse().getContentAsString().contains(Translator.get("customer.not.exist"));
|
||||
requestPostPermissionTest(PermissionConstants.CUSTOMER_MANAGEMENT_ASSIGN, BATCH_ASSIGN, request);
|
||||
@@ -164,7 +163,6 @@ public class PoolCustomerControllerTests extends BaseTest {
|
||||
void batchDeleteSuccess() throws Exception {
|
||||
PoolCustomerBatchRequest request = new PoolCustomerBatchRequest();
|
||||
request.setBatchIds(List.of(testDataId));
|
||||
request.setPoolId("test-pool-id");
|
||||
this.requestPostWithOk(BATCH_DELETE, request);
|
||||
requestPostPermissionTest(PermissionConstants.CUSTOMER_MANAGEMENT_DELETE, BATCH_DELETE, request);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user