From 1bfb4060416046128693507fe506ae397d294787 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 18 Feb 2024 21:47:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=96=20CRM=EF=BC=9Acode=20review=20?= =?UTF-8?q?=E5=BE=85=E6=8F=90=E9=86=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/clue/vo/CrmClueRespVO.java | 101 +++++++++--------- .../admin/clue/vo/CrmClueSaveReqVO.java | 69 ++++++------ .../admin/contract/CrmContractController.java | 1 - .../admin/customer/CrmCustomerController.java | 13 +-- .../customer/vo/CrmCustomerPageReqVO.java | 5 +- .../crm/dal/dataobject/clue/CrmClueDO.java | 96 +++++++++-------- .../dataobject/customer/CrmCustomerDO.java | 88 +++++++-------- .../crm/dal/mysql/clue/CrmClueMapper.java | 9 +- .../dal/mysql/contract/CrmContractMapper.java | 15 ++- .../dal/mysql/customer/CrmCustomerMapper.java | 19 ++-- .../mysql/receivable/CrmReceivableMapper.java | 6 +- .../receivable/CrmReceivablePlanMapper.java | 9 +- .../service/customer/CrmCustomerService.java | 1 + 13 files changed, 213 insertions(+), 219 deletions(-) diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueRespVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueRespVO.java index 35d30956e..b36c0a51d 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueRespVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueRespVO.java @@ -24,73 +24,47 @@ public class CrmClueRespVO { @ExcelProperty("编号") private Long id; - @Schema(description = "转化状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") - @ExcelProperty(value = "转化状态", converter = DictConvert.class) - @DictFormat(DictTypeConstants.BOOLEAN_STRING) - private Boolean transformStatus; + @Schema(description = "线索名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "线索xxx") + @ExcelProperty("线索名称") + private String name; @Schema(description = "跟进状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") @ExcelProperty(value = "跟进状态", converter = DictConvert.class) @DictFormat(DictTypeConstants.BOOLEAN_STRING) private Boolean followUpStatus; - @Schema(description = "线索名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "线索xxx") - @ExcelProperty("线索名称") - private String name; - - @Schema(description = "客户 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "520") - // TODO 这里需要导出成客户名称 - @ExcelProperty("客户id") - private Long customerId; + @Schema(description = "最后跟进时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ExcelProperty("最后跟进时间") + private LocalDateTime contactLastTime; @Schema(description = "下次联系时间", example = "2023-10-18 01:00:00") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @ExcelProperty("下次联系时间") private LocalDateTime contactNextTime; - @Schema(description = "电话", example = "18000000000") - @ExcelProperty("电话") - private String telephone; + @Schema(description = "负责人编号") + @ExcelProperty("负责人的用户编号") + // TODO 这里需要导出成负责人的名字 + private Long ownerUserId; + + @Schema(description = "转化状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @ExcelProperty(value = "转化状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.BOOLEAN_STRING) + private Boolean transformStatus; + + @Schema(description = "客户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "520") + // TODO 这里需要导出成客户名称 + @ExcelProperty("客户编号") + private Long customerId; @Schema(description = "手机号", example = "18000000000") @ExcelProperty("手机号") private String mobile; - @Schema(description = "地址", example = "北京市海淀区") - @ExcelProperty("地址") - private String address; - - @Schema(description = "负责人编号") - @ExcelProperty("负责人的用户编号") - private Long ownerUserId; - - @Schema(description = "最后跟进时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ExcelProperty("最后跟进时间") - private LocalDateTime contactLastTime; - - @Schema(description = "备注", example = "随便") - @ExcelProperty("备注") - private String remark; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") - private LocalDateTime createTime; - - @Schema(description = "所属行业", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") - @ExcelProperty(value = "所属行业", converter = DictConvert.class) - @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_INDUSTRY) - private Integer industryId; - - @Schema(description = "客户等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") - @ExcelProperty(value = "客户等级", converter = DictConvert.class) - @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_LEVEL) - private Integer level; - - @Schema(description = "客户来源", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") - @ExcelProperty(value = "客户来源", converter = DictConvert.class) - @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_SOURCE) - private Integer source; + @Schema(description = "电话", example = "18000000000") + @ExcelProperty("电话") + private String telephone; @Schema(description = "网址", example = "25682") @ExcelProperty("网址") @@ -108,8 +82,35 @@ public class CrmClueRespVO { @ExcelProperty("email") private String email; + @Schema(description = "地址", example = "北京市海淀区") + @ExcelProperty("地址") + private String address; + + @Schema(description = "所属行业", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") + @ExcelProperty(value = "所属行业", converter = DictConvert.class) + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_INDUSTRY) + private Integer industryId; + + @Schema(description = "客户等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") + @ExcelProperty(value = "客户等级", converter = DictConvert.class) + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_LEVEL) + private Integer level; + + @Schema(description = "客户来源", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") + @ExcelProperty(value = "客户来源", converter = DictConvert.class) + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_SOURCE) + private Integer source; + @Schema(description = "客户描述", example = "25682") @ExcelProperty("客户描述") private String description; + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueSaveReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueSaveReqVO.java index 4ca004a59..e121438bb 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueSaveReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/clue/vo/CrmClueSaveReqVO.java @@ -21,7 +21,7 @@ import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_INDUSTRY; -@Schema(description = "管理后台 - CRM 线索 创建/更新 Request VO") +@Schema(description = "管理后台 - CRM 线索创建/更新 Request VO") @Data public class CrmClueSaveReqVO { @@ -33,50 +33,28 @@ public class CrmClueSaveReqVO { @NotEmpty(message = "线索名称不能为空") private String name; + @Schema(description = "最后跟进时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @DiffLogField(name = "最后跟进时间") + private LocalDateTime contactLastTime; + @Schema(description = "下次联系时间", example = "2023-10-18 01:00:00") @DiffLogField(name = "下次联系时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime contactNextTime; - @Schema(description = "电话", example = "18000000000") - @DiffLogField(name = "电话") - @Telephone - private String telephone; + @Schema(description = "负责人编号", example = "2048") + private Long ownerUserId; @Schema(description = "手机号", example = "18000000000") @DiffLogField(name = "手机号") @Mobile private String mobile; - @Schema(description = "地址", example = "北京市海淀区") - @DiffLogField(name = "地址") - private String address; - - @Schema(description = "最后跟进时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @DiffLogField(name = "最后跟进时间") - private LocalDateTime contactLastTime; - - @Schema(description = "负责人编号", example = "2048") - private Long ownerUserId; - - @Schema(description = "备注", example = "随便") - @DiffLogField(name = "备注") - private String remark; - - @Schema(description = "所属行业", example = "1") - @DiffLogField(name = "所属行业", function = CrmCustomerIndustryParseFunction.NAME) - @DictFormat(CRM_CUSTOMER_INDUSTRY) - private Integer industryId; - - @Schema(description = "客户等级", example = "2") - @DiffLogField(name = "客户等级", function = CrmCustomerLevelParseFunction.NAME) - @InEnum(CrmCustomerLevelEnum.class) - private Integer level; - - @Schema(description = "客户来源", example = "3") - @DiffLogField(name = "客户来源", function = CrmCustomerSourceParseFunction.NAME) - private Integer source; + @Schema(description = "电话", example = "18000000000") + @DiffLogField(name = "电话") + @Telephone + private String telephone; @Schema(description = "网址", example = "https://www.baidu.com") @DiffLogField(name = "网址") @@ -98,8 +76,31 @@ public class CrmClueSaveReqVO { @Size(max = 255, message = "邮箱长度不能超过 255 个字符") private String email; + @Schema(description = "地址", example = "北京市海淀区") + @DiffLogField(name = "地址") + private String address; + + @Schema(description = "所属行业", example = "1") + @DiffLogField(name = "所属行业", function = CrmCustomerIndustryParseFunction.NAME) + @DictFormat(CRM_CUSTOMER_INDUSTRY) + private Integer industryId; + + @Schema(description = "客户等级", example = "2") + @DiffLogField(name = "客户等级", function = CrmCustomerLevelParseFunction.NAME) + @InEnum(CrmCustomerLevelEnum.class) + private Integer level; + + @Schema(description = "客户来源", example = "3") + @DiffLogField(name = "客户来源", function = CrmCustomerSourceParseFunction.NAME) + private Integer source; + @Schema(description = "客户描述", example = "任意文字") @DiffLogField(name = "客户描述") @Size(max = 4096, message = "客户描述长度不能超过 4096 个字符") private String description; + + @Schema(description = "备注", example = "随便") + @DiffLogField(name = "备注") + private String remark; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java index c283f4acd..3951d1ebd 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java @@ -191,7 +191,6 @@ public class CrmContractController { return success(contractService.getCheckContractCount(getLoginUserId())); } - @GetMapping("/end-contract-count") @Operation(summary = "获得即将到期的合同数量") @PreAuthorize("@ss.hasPermission('crm:contract:query')") diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java index 51eb7c3e6..3c1806d51 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java @@ -152,19 +152,17 @@ public class CrmCustomerController { @Operation(summary = "获得待进入公海客户数量") @PreAuthorize("@ss.hasPermission('crm:customer:query')") public CommonResult getPutInPoolRemindCustomerCount() { - // 获取公海配置 TODO @dbh52:合并到 getPutInPoolRemindCustomerPage 会更合适哈; + // 获取公海配置 CrmCustomerPoolConfigDO poolConfigDO = customerPoolConfigService.getCustomerPoolConfig(); if (ObjUtil.isNull(poolConfigDO) || Boolean.FALSE.equals(poolConfigDO.getEnabled()) || Boolean.FALSE.equals(poolConfigDO.getNotifyEnabled())) { throw exception(CUSTOMER_POOL_CONFIG_NOT_EXISTS_OR_DISABLED); } - - CrmCustomerPageReqVO pageVO = new CrmCustomerPageReqVO(); - pageVO.setPool(null); - pageVO.setContactStatus(CrmCustomerPageReqVO.CONTACT_TODAY); - pageVO.setSceneType(CrmSceneTypeEnum.OWNER.getType()); - + CrmCustomerPageReqVO pageVO = new CrmCustomerPageReqVO() + .setPool(null) + .setContactStatus(CrmCustomerPageReqVO.CONTACT_TODAY) + .setSceneType(CrmSceneTypeEnum.OWNER.getType()); return success(customerService.getPutInPoolRemindCustomerCount(pageVO, poolConfigDO, getLoginUserId())); } @@ -182,7 +180,6 @@ public class CrmCustomerController { return success(customerService.getFollowCustomerCount(getLoginUserId())); } - /** * 获取距离进入公海的时间 * diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java index 1fd2a1981..15b0529e6 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java @@ -50,10 +50,7 @@ public class CrmCustomerPageReqVO extends PageParam { private Boolean pool; // null 则表示为不是公海数据 @Schema(description = "联系状态", example = "1") - private Integer contactStatus; // backlog查询条件, null 则表示为不做查询 - - @Schema(description = "跟进状态", example = "true") - private Boolean followUpStatus; // backlog查询条件, null 则表示为不做查询 + private Integer contactStatus; // backlog 查询条件 @Schema(description = "跟进状态", example = "true") private Boolean followUpStatus; diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/CrmClueDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/CrmClueDO.java index 5ea1dea28..44a628503 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/CrmClueDO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/CrmClueDO.java @@ -10,7 +10,6 @@ import lombok.*; import java.time.LocalDateTime; -// TODO 芋艿:字段的顺序,需要整理下; /** * 线索 DO * @@ -32,67 +31,51 @@ public class CrmClueDO extends BaseDO { @TableId private Long id; /** - * 转化状态 + * 线索名称 */ - private Boolean transformStatus; + private String name; + /** * 跟进状态 */ private Boolean followUpStatus; /** - * 线索名称 + * 最后跟进时间 TODO 添加跟进记录时更新该值 */ - private String name; - /** - * 客户 id - * - * 关联 {@link CrmCustomerDO#getId()} - */ - private Long customerId; + private LocalDateTime contactLastTime; /** * 下次联系时间 */ private LocalDateTime contactNextTime; + /** - * 电话 + * 负责人的用户编号 + * + * 关联 AdminUserDO 的 id 字段 */ - private String telephone; + private Long ownerUserId; + + /** + * 转化状态 + * + * true 表示已转换,会更新 {@link #customerId} 字段 + */ + private Boolean transformStatus; + /** + * 客户编号 + * + * 关联 {@link CrmCustomerDO#getId()} + */ + private Long customerId; + /** * 手机号 */ private String mobile; /** - * 地址 + * 电话 */ - private String address; - /** - * 最后跟进时间 TODO 添加跟进记录时更新该值 - */ - private LocalDateTime contactLastTime; - /** - * 备注 - */ - private String remark; - /** - * 负责人的用户编号 - * 关联 AdminUserDO 的 id 字段 - */ - private Long ownerUserId; - /** - * 所属行业 - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_INDUSTRY} - */ - private Integer industryId; - /** - * 客户等级 - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_LEVEL} - */ - private Integer level; - /** - * 客户来源 - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_SOURCE} - */ - private Integer source; + private String telephone; /** * 网址 */ @@ -109,8 +92,35 @@ public class CrmClueDO extends BaseDO { * email */ private String email; + /** + * 地址 + */ + private String address; + /** + * 所属行业 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_INDUSTRY} + */ + private Integer industryId; + /** + * 客户等级 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_LEVEL} + */ + private Integer level; + /** + * 客户来源 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_SOURCE} + */ + private Integer source; /** * 客户描述 */ private String description; + /** + * 备注 + */ + private String remark; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/customer/CrmCustomerDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/customer/CrmCustomerDO.java index 2bd614f57..bf94c053a 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/customer/CrmCustomerDO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/customer/CrmCustomerDO.java @@ -9,8 +9,6 @@ import lombok.*; import java.time.LocalDateTime; -// TODO 芋艿:调整下字段 - /** * CRM 客户 DO * @@ -35,10 +33,35 @@ public class CrmCustomerDO extends BaseDO { * 客户名称 */ private String name; + /** * 跟进状态 */ private Boolean followUpStatus; + /** + * 最后跟进时间 + */ + private LocalDateTime contactLastTime; + /** + * 最后跟进内容 + */ + private String contactLastContent; + /** + * 下次联系时间 + */ + private LocalDateTime contactNextTime; + + /** + * 负责人的用户编号 + * + * 关联 AdminUserDO 的 id 字段 + */ + private Long ownerUserId; + /** + * 最后接收时间 + */ + private LocalDateTime receiveTime; + /** * 锁定状态 */ @@ -47,24 +70,7 @@ public class CrmCustomerDO extends BaseDO { * 成交状态 */ private Boolean dealStatus; - /** - * 所属行业 - * - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_INDUSTRY} - */ - private Integer industryId; - /** - * 客户等级 - * - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_LEVEL} - */ - private Integer level; - /** - * 客户来源 - * - * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_SOURCE} - */ - private Integer source; + /** * 手机 */ @@ -89,20 +95,6 @@ public class CrmCustomerDO extends BaseDO { * email */ private String email; - /** - * 客户描述 - */ - private String description; - /** - * 备注 - */ - private String remark; - /** - * 负责人的用户编号 - * - * 关联 AdminUserDO 的 id 字段 - */ - private Long ownerUserId; /** * 所在地 * @@ -113,23 +105,31 @@ public class CrmCustomerDO extends BaseDO { * 详细地址 */ private String detailAddress; - /** - * 最后接收时间 + * 所属行业 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_INDUSTRY} */ - private LocalDateTime receiveTime; + private Integer industryId; /** - * 最后跟进时间 + * 客户等级 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_LEVEL} */ - private LocalDateTime contactLastTime; - + private Integer level; /** - * 最后跟进内容 + * 客户来源 + * + * 对应字典 {@link DictTypeConstants#CRM_CUSTOMER_SOURCE} */ - private String contactLastContent; + private Integer source; /** - * 下次联系时间 + * 客户描述 */ - private LocalDateTime contactNextTime; + private String description; + /** + * 备注 + */ + private String remark; } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/CrmClueMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/CrmClueMapper.java index 9d5594d06..4c5206472 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/CrmClueMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/CrmClueMapper.java @@ -55,17 +55,16 @@ public interface CrmClueMapper extends BaseMapperX { return selectJoinList(CrmClueDO.class, query); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getFollowLeadsCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_LEADS.getType(), CrmClueDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - - // 未跟进, 未转化 + // 未跟进 + 未转化 TODO @dhb52:是不是 eq 会更好哈;mysql 不等于,对索引不友好 query.ne(CrmClueDO::getFollowUpStatus, true) .ne(CrmClueDO::getTransformStatus, true); - return selectCount(query); } + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java index 4a842a2a0..b96c0eeb2 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java @@ -6,7 +6,6 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO; -import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; @@ -89,33 +88,31 @@ public interface CrmContractMapper extends BaseMapperX { return selectCount(CrmContractDO::getBusinessId, businessId); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getCheckContractCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - // 未提交 or 审核不通过 query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); - return selectCount(query); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getEndContractCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - // 即将到期 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); + // TODO: @芋艿 需要配置 提前提醒天数 int REMIND_DAYS = 20; query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS)); - return selectCount(query); } + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java index c0507b3d3..075f55fb3 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java @@ -99,8 +99,7 @@ public interface CrmCustomerMapper extends BaseMapperX { // backlog 查询 if (ObjUtil.isNotNull(pageReqVO.getContactStatus())) { - Assert.isNull(pageReqVO.getPool(), "[是否为公海数据]必须是null"); - + Assert.isNull(pageReqVO.getPool(), "pool 必须是 null"); LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); if (pageReqVO.getContactStatus().equals(CrmCustomerPageReqVO.CONTACT_TODAY)) { // 今天需联系 @@ -113,7 +112,6 @@ public interface CrmCustomerMapper extends BaseMapperX { throw new IllegalArgumentException("未知联系状态:" + pageReqVO.getContactStatus()); } } - return selectJoinPage(pageReqVO, CrmCustomerDO.class, query); } @@ -150,31 +148,28 @@ public interface CrmCustomerMapper extends BaseMapperX { return selectCount(query); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getTodayCustomerCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), CrmCustomerDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - // 今天需联系 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now()); query.between(CrmCustomerDO::getContactNextTime, beginOfToday, endOfToday); - return selectCount(query); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getFollowCustomerCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), CrmCustomerDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - - // 未跟进 + // 未跟进 TODO @dhb52:是不是 eq 会更好哈;mysql 不等于,对索引不友好 query.ne(CrmClueDO::getFollowUpStatus, true); - return selectCount(query); } + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java index 36345f01f..faa8f5449 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java @@ -62,16 +62,14 @@ public interface CrmReceivableMapper extends BaseMapperX { return selectJoinList(CrmReceivableDO.class, query); } + // TODO @dhb52:db 统一都是 select 关键字; default Long getCheckReceivablesCount(Long userId) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - // 未提交 or 审核不通过 query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); - return selectCount(query); } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java index 14c0a4ed9..778aa9369 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java @@ -79,19 +79,18 @@ public interface CrmReceivablePlanMapper extends BaseMapperX query = new MPJLambdaWrapperX<>(); - - // 我负责的, 非公海 + // 我负责的 + 非公海 CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), CrmReceivablePlanDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); - - // 待回款 + // 待回款 TODO @dhb52:to_days(return_time) <= to_days(now())+ remind_days 看看怎么改成,不用数据库自己去计算这样的时间; LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); query.isNull(CrmReceivablePlanDO::getReceivableId) .gt(CrmReceivablePlanDO::getReturnTime, beginOfToday) .apply("to_days(return_time) <= to_days(now())+ remind_days"); - return selectCount(query); } + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java index 5485cd637..cd1f5ece3 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java @@ -179,4 +179,5 @@ public interface CrmCustomerService { * @return 提醒数量 */ Long getFollowCustomerCount(Long userId); + }