Commit b5560fa0be71cdbda972fdc2d14510638a7ef6a1
1 parent
9cf4cfca
code review:CRM 线索表的逻辑
Showing
7 changed files
with
31 additions
and
35 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
| @@ -15,8 +15,8 @@ public interface ErrorCodeConstants { | @@ -15,8 +15,8 @@ public interface ErrorCodeConstants { | ||
| 15 | // ========== 线索管理 1-020-001-000 ========== | 15 | // ========== 线索管理 1-020-001-000 ========== |
| 16 | ErrorCode CLUE_NOT_EXISTS = new ErrorCode(1_020_001_000, "线索不存在"); | 16 | ErrorCode CLUE_NOT_EXISTS = new ErrorCode(1_020_001_000, "线索不存在"); |
| 17 | 17 | ||
| 18 | - // ========== 商机管理 1-020-001-000 ========== | ||
| 19 | - ErrorCode BUSINESS_NOT_EXISTS = new ErrorCode(1_020_001_000, "商机不存在"); | 18 | + // ========== 商机管理 1-020-002-000 ========== |
| 19 | + ErrorCode BUSINESS_NOT_EXISTS = new ErrorCode(1_020_002_000, "商机不存在"); | ||
| 20 | 20 | ||
| 21 | // TODO @liuhongfeng:错误码分段; | 21 | // TODO @liuhongfeng:错误码分段; |
| 22 | ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_030_000_001, "回款管理不存在"); | 22 | ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_030_000_001, "回款管理不存在"); |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmCluePageReqVO.java
| @@ -11,6 +11,7 @@ import lombok.ToString; | @@ -11,6 +11,7 @@ import lombok.ToString; | ||
| 11 | @EqualsAndHashCode(callSuper = true) | 11 | @EqualsAndHashCode(callSuper = true) |
| 12 | @ToString(callSuper = true) | 12 | @ToString(callSuper = true) |
| 13 | public class CrmCluePageReqVO extends PageParam { | 13 | public class CrmCluePageReqVO extends PageParam { |
| 14 | + | ||
| 14 | @Schema(description = "线索名称", example = "线索xxx") | 15 | @Schema(description = "线索名称", example = "线索xxx") |
| 15 | private String name; | 16 | private String name; |
| 16 | 17 | ||
| @@ -19,4 +20,5 @@ public class CrmCluePageReqVO extends PageParam { | @@ -19,4 +20,5 @@ public class CrmCluePageReqVO extends PageParam { | ||
| 19 | 20 | ||
| 20 | @Schema(description = "手机号", example = "18000000000") | 21 | @Schema(description = "手机号", example = "18000000000") |
| 21 | private String mobile; | 22 | private String mobile; |
| 23 | + | ||
| 22 | } | 24 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueUpdateReqVO.java
| 1 | package cn.iocoder.yudao.module.crm.controller.admin.clue.vo; | 1 | package cn.iocoder.yudao.module.crm.controller.admin.clue.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | -import lombok.*; | ||
| 5 | -import java.util.*; | ||
| 6 | -import javax.validation.constraints.*; | 4 | +import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | ||
| 6 | +import lombok.ToString; | ||
| 7 | + | ||
| 8 | +import javax.validation.constraints.NotNull; | ||
| 7 | 9 | ||
| 8 | @Schema(description = "管理后台 - 线索更新 Request VO") | 10 | @Schema(description = "管理后台 - 线索更新 Request VO") |
| 9 | @Data | 11 | @Data |
| @@ -11,8 +13,8 @@ import javax.validation.constraints.*; | @@ -11,8 +13,8 @@ import javax.validation.constraints.*; | ||
| 11 | @ToString(callSuper = true) | 13 | @ToString(callSuper = true) |
| 12 | public class CrmClueUpdateReqVO extends CrmClueBaseVO { | 14 | public class CrmClueUpdateReqVO extends CrmClueBaseVO { |
| 13 | 15 | ||
| 14 | - @Schema(description = "编号,主键自增", requiredMode = Schema.RequiredMode.REQUIRED, example = "10969") | ||
| 15 | - @NotNull(message = "编号,主键自增不能为空") | 16 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10969") |
| 17 | + @NotNull(message = "编号不能为空") | ||
| 16 | private Long id; | 18 | private Long id; |
| 17 | 19 | ||
| 18 | } | 20 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/clue/CrmClueConvert.java
| @@ -25,8 +25,6 @@ public interface CrmClueConvert { | @@ -25,8 +25,6 @@ public interface CrmClueConvert { | ||
| 25 | 25 | ||
| 26 | CrmClueRespVO convert(CrmClueDO bean); | 26 | CrmClueRespVO convert(CrmClueDO bean); |
| 27 | 27 | ||
| 28 | - List<CrmClueRespVO> convertList(List<CrmClueDO> list); | ||
| 29 | - | ||
| 30 | PageResult<CrmClueRespVO> convertPage(PageResult<CrmClueDO> page); | 28 | PageResult<CrmClueRespVO> convertPage(PageResult<CrmClueDO> page); |
| 31 | 29 | ||
| 32 | List<CrmClueExcelVO> convertList02(List<CrmClueDO> list); | 30 | List<CrmClueExcelVO> convertList02(List<CrmClueDO> list); |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/CrmClueDO.java
| @@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | @@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | import com.baomidou.mybatisplus.annotation.KeySequence; | 4 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | -import com.sun.xml.bind.v2.TODO; | ||
| 8 | import lombok.*; | 7 | import lombok.*; |
| 9 | 8 | ||
| 10 | import java.time.LocalDateTime; | 9 | import java.time.LocalDateTime; |
| @@ -32,14 +31,10 @@ public class CrmClueDO extends BaseDO { | @@ -32,14 +31,10 @@ public class CrmClueDO extends BaseDO { | ||
| 32 | private Long id; | 31 | private Long id; |
| 33 | /** | 32 | /** |
| 34 | * 转化状态 | 33 | * 转化状态 |
| 35 | - * | ||
| 36 | - * 枚举 {@link TODO infra_boolean_string 对应的类} | ||
| 37 | */ | 34 | */ |
| 38 | private Boolean transformStatus; | 35 | private Boolean transformStatus; |
| 39 | /** | 36 | /** |
| 40 | * 跟进状态 | 37 | * 跟进状态 |
| 41 | - * | ||
| 42 | - * 枚举 {@link TODO infra_boolean_string 对应的类} | ||
| 43 | */ | 38 | */ |
| 44 | private Boolean followUpStatus; | 39 | private Boolean followUpStatus; |
| 45 | /** | 40 | /** |
| @@ -47,7 +42,9 @@ public class CrmClueDO extends BaseDO { | @@ -47,7 +42,9 @@ public class CrmClueDO extends BaseDO { | ||
| 47 | */ | 42 | */ |
| 48 | private String name; | 43 | private String name; |
| 49 | /** | 44 | /** |
| 50 | - * 客户id | 45 | + * 客户 id |
| 46 | + * | ||
| 47 | + * // TODO @wanwan:要写下关联的实体,以及对应的属性哈 | ||
| 51 | */ | 48 | */ |
| 52 | private Long customerId; | 49 | private Long customerId; |
| 53 | /** | 50 | /** |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImpl.java
| 1 | package cn.iocoder.yudao.module.crm.service.clue; | 1 | package cn.iocoder.yudao.module.crm.service.clue; |
| 2 | 2 | ||
| 3 | -import org.springframework.stereotype.Service; | ||
| 4 | -import javax.annotation.Resource; | ||
| 5 | -import org.springframework.validation.annotation.Validated; | ||
| 6 | - | ||
| 7 | -import java.util.*; | ||
| 8 | -import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.*; | ||
| 9 | -import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; | 3 | +import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.collection.ListUtil; | ||
| 10 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 11 | - | 6 | +import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueCreateReqVO; |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueExportReqVO; | ||
| 8 | +import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmCluePageReqVO; | ||
| 9 | +import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueUpdateReqVO; | ||
| 12 | import cn.iocoder.yudao.module.crm.convert.clue.CrmClueConvert; | 10 | import cn.iocoder.yudao.module.crm.convert.clue.CrmClueConvert; |
| 11 | +import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; | ||
| 13 | import cn.iocoder.yudao.module.crm.dal.mysql.clue.CrmClueMapper; | 12 | import cn.iocoder.yudao.module.crm.dal.mysql.clue.CrmClueMapper; |
| 13 | +import org.springframework.stereotype.Service; | ||
| 14 | +import org.springframework.validation.annotation.Validated; | ||
| 14 | 15 | ||
| 15 | -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 16 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | 16 | +import javax.annotation.Resource; |
| 17 | +import java.util.Collection; | ||
| 18 | +import java.util.List; | ||
| 17 | 19 | ||
| 18 | -import cn.hutool.core.collection.CollUtil; | ||
| 19 | -import cn.hutool.core.collection.ListUtil; | 20 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 21 | +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CLUE_NOT_EXISTS; | ||
| 20 | 22 | ||
| 21 | /** | 23 | /** |
| 22 | * 线索 Service 实现类 | 24 | * 线索 Service 实现类 |
| @@ -32,6 +34,7 @@ public class CrmClueServiceImpl implements CrmClueService { | @@ -32,6 +34,7 @@ public class CrmClueServiceImpl implements CrmClueService { | ||
| 32 | 34 | ||
| 33 | @Override | 35 | @Override |
| 34 | public Long createClue(CrmClueCreateReqVO createReqVO) { | 36 | public Long createClue(CrmClueCreateReqVO createReqVO) { |
| 37 | + // TODO @wanwan:校验客户是否存在;以及类似的逻辑哈;如果目前还缺对应的模块的 service,可以先给自己写 todo; | ||
| 35 | // 插入 | 38 | // 插入 |
| 36 | CrmClueDO clue = CrmClueConvert.INSTANCE.convert(createReqVO); | 39 | CrmClueDO clue = CrmClueConvert.INSTANCE.convert(createReqVO); |
| 37 | clueMapper.insert(clue); | 40 | clueMapper.insert(clue); |
| @@ -41,8 +44,10 @@ public class CrmClueServiceImpl implements CrmClueService { | @@ -41,8 +44,10 @@ public class CrmClueServiceImpl implements CrmClueService { | ||
| 41 | 44 | ||
| 42 | @Override | 45 | @Override |
| 43 | public void updateClue(CrmClueUpdateReqVO updateReqVO) { | 46 | public void updateClue(CrmClueUpdateReqVO updateReqVO) { |
| 47 | + // TODO @wanwan:校验客户是否存在;以及类似的逻辑哈;如果目前还缺对应的模块的 service,可以先给自己写 todo; | ||
| 44 | // 校验存在 | 48 | // 校验存在 |
| 45 | validateClueExists(updateReqVO.getId()); | 49 | validateClueExists(updateReqVO.getId()); |
| 50 | + | ||
| 46 | // 更新 | 51 | // 更新 |
| 47 | CrmClueDO updateObj = CrmClueConvert.INSTANCE.convert(updateReqVO); | 52 | CrmClueDO updateObj = CrmClueConvert.INSTANCE.convert(updateReqVO); |
| 48 | clueMapper.updateById(updateObj); | 53 | clueMapper.updateById(updateObj); |
yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImplTest.java
| @@ -144,17 +144,9 @@ public class CrmClueServiceImplTest extends BaseDbUnitTest { | @@ -144,17 +144,9 @@ public class CrmClueServiceImplTest extends BaseDbUnitTest { | ||
| 144 | clueMapper.insert(cloneIgnoreId(dbClue, o -> o.setCreateTime(null))); | 144 | clueMapper.insert(cloneIgnoreId(dbClue, o -> o.setCreateTime(null))); |
| 145 | // 准备参数 | 145 | // 准备参数 |
| 146 | CrmCluePageReqVO reqVO = new CrmCluePageReqVO(); | 146 | CrmCluePageReqVO reqVO = new CrmCluePageReqVO(); |
| 147 | - reqVO.setTransformStatus(null); | ||
| 148 | - reqVO.setFollowUpStatus(null); | ||
| 149 | reqVO.setName(null); | 147 | reqVO.setName(null); |
| 150 | - reqVO.setCustomerId(null); | ||
| 151 | - reqVO.setContactNextTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||
| 152 | reqVO.setTelephone(null); | 148 | reqVO.setTelephone(null); |
| 153 | reqVO.setMobile(null); | 149 | reqVO.setMobile(null); |
| 154 | - reqVO.setAddress(null); | ||
| 155 | - reqVO.setOwnerUserId(null); | ||
| 156 | - reqVO.setContactLastTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||
| 157 | - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||
| 158 | 150 | ||
| 159 | // 调用 | 151 | // 调用 |
| 160 | PageResult<CrmClueDO> pageResult = clueService.getCluePage(reqVO); | 152 | PageResult<CrmClueDO> pageResult = clueService.getCluePage(reqVO); |