fix: 修复 CRM 的一些 bug

This commit is contained in:
puhui999 2024-01-20 22:49:47 +08:00
parent 8920b9787d
commit d293fdd474
7 changed files with 42 additions and 6 deletions

View File

@ -44,6 +44,11 @@ public class CrmFollowUpRecordRespVO {
@Schema(description = "关联的联系人名称数组") @Schema(description = "关联的联系人名称数组")
private List<String> contactNames; private List<String> contactNames;
@Schema(description = "图片")
private List<String> picUrls;
@Schema(description = "附件")
private List<String> fileUrls;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@ -37,8 +37,12 @@ public class CrmFollowUpRecordSaveReqVO {
@Schema(description = "关联的商机编号数组") @Schema(description = "关联的商机编号数组")
private List<Long> businessIds; private List<Long> businessIds;
@Schema(description = "关联的联系人编号数组") @Schema(description = "关联的联系人编号数组")
private List<Long> contactIds; private List<Long> contactIds;
@Schema(description = "图片")
private List<String> picUrls;
@Schema(description = "附件")
private List<String> fileUrls;
} }

View File

@ -28,6 +28,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
import java.util.stream.Stream;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@ -103,7 +104,12 @@ public class CrmPermissionController {
// 拼接数据 // 拼接数据
List<AdminUserRespDTO> userList = adminUserApi.getUserList(convertSet(permission, CrmPermissionDO::getUserId)); List<AdminUserRespDTO> userList = adminUserApi.getUserList(convertSet(permission, CrmPermissionDO::getUserId));
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userList, AdminUserRespDTO::getDeptId)); Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userList, AdminUserRespDTO::getDeptId));
Set<Long> postIds = CollectionUtils.convertSetByFlatMap(userList, AdminUserRespDTO::getPostIds, Collection::stream); Set<Long> postIds = CollectionUtils.convertSetByFlatMap(userList, AdminUserRespDTO::getPostIds, item -> {
if (item == null) {
return Stream.empty();
}
return item.stream();
});
Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds); Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds);
return success(CrmPermissionConvert.INSTANCE.convert(permission, userList, deptMap, postMap)); return success(CrmPermissionConvert.INSTANCE.convert(permission, userList, deptMap, postMap));
} }

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.crm.convert.permission; package cn.iocoder.yudao.module.crm.convert.permission;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionCreateReqVO; import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionCreateReqVO;
@ -49,11 +48,11 @@ public interface CrmPermissionConvert {
findAndThen(userMap, item.getUserId(), user -> { findAndThen(userMap, item.getUserId(), user -> {
item.setNickname(user.getNickname()); item.setNickname(user.getNickname());
findAndThen(deptMap, user.getDeptId(), deptRespDTO -> item.setDeptName(deptRespDTO.getName())); findAndThen(deptMap, user.getDeptId(), deptRespDTO -> item.setDeptName(deptRespDTO.getName()));
List<PostRespDTO> postRespList = MapUtils.getList(Multimaps.forMap(postMap), user.getPostIds()); if (user.getPostIds() == null) {
if (CollUtil.isEmpty(postRespList)) {
item.setPostNames(Collections.emptySet()); item.setPostNames(Collections.emptySet());
return; return;
} }
List<PostRespDTO> postRespList = MapUtils.getList(Multimaps.forMap(postMap), user.getPostIds());
item.setPostNames(CollectionUtils.convertSet(postRespList, PostRespDTO::getName)); item.setPostNames(CollectionUtils.convertSet(postRespList, PostRespDTO::getName));
}); });
return item; return item;

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.followup;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
import cn.iocoder.yudao.framework.mybatis.core.type.StringListTypeHandler;
import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
import cn.iocoder.yudao.module.crm.enums.DictTypeConstants; import cn.iocoder.yudao.module.crm.enums.DictTypeConstants;
@ -66,6 +67,18 @@ public class CrmFollowUpRecordDO extends BaseDO {
*/ */
private LocalDateTime nextTime; private LocalDateTime nextTime;
/**
* 图片
*/
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> picUrls;
/**
* 附件
*/
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> fileUrls;
/** /**
* 关联的商机编号数组 * 关联的商机编号数组
* *
@ -81,4 +94,5 @@ public class CrmFollowUpRecordDO extends BaseDO {
@TableField(typeHandler = LongListTypeHandler.class) @TableField(typeHandler = LongListTypeHandler.class)
private List<Long> contactIds; private List<Long> contactIds;
} }

View File

@ -53,6 +53,11 @@ public interface CrmPermissionMapper extends BaseMapperX<CrmPermissionDO> {
.eq(CrmPermissionDO::getId, id).eq(CrmPermissionDO::getUserId, userId)); .eq(CrmPermissionDO::getId, id).eq(CrmPermissionDO::getUserId, userId));
} }
default CrmPermissionDO selectByBizIdAndUserId(Long id, Long userId) {
return selectOne(new LambdaQueryWrapperX<CrmPermissionDO>()
.eq(CrmPermissionDO::getBizId, id).eq(CrmPermissionDO::getUserId, userId));
}
default int deletePermission(Integer bizType, Long bizId) { default int deletePermission(Integer bizType, Long bizId) {
return delete(new LambdaQueryWrapperX<CrmPermissionDO>() return delete(new LambdaQueryWrapperX<CrmPermissionDO>()
.eq(CrmPermissionDO::getBizType, bizType) .eq(CrmPermissionDO::getBizType, bizType)

View File

@ -167,7 +167,10 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
throw exception(CRM_PERMISSION_DELETE_FAIL); throw exception(CRM_PERMISSION_DELETE_FAIL);
} }
// 校验操作人是否为负责人 // 校验操作人是否为负责人
CrmPermissionDO permission = permissionMapper.selectByIdAndUserId(permissions.get(0).getBizId(), userId); CrmPermissionDO permission = permissionMapper.selectByBizIdAndUserId(permissions.getFirst().getBizId(), userId);
if (permission == null) {
throw exception(CRM_PERMISSION_DELETE_DENIED);
}
if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) { if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) {
throw exception(CRM_PERMISSION_DELETE_DENIED); throw exception(CRM_PERMISSION_DELETE_DENIED);
} }