package cn.iocoder.yudao.module.crm.dal.mysql.statistics; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.RandomUtil; import cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.*; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; /** * CRM 客户分析 Mapper * * @author dhb52 */ @Mapper public interface CrmStatisticsCustomerMapper { /** * 新建客户数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerCreateCountGroupByDate(CrmStatisticsCustomerReqVO reqVO); /** * 成交客户数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCountGroupByDate(CrmStatisticsCustomerReqVO reqVO); /** * 新建客户数(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerCreateCountGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 成交客户数(按用户) * * @param reqVO 请求参数@param reqVO 请求参数@param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCountGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 合同总金额(按用户) * * @return 统计数据@return 统计数据@param reqVO 请求参数 * @return 统计数据 */ List selectContractPriceGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 合同回款金额(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ List selectReceivablePriceGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 跟进次数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ List selectFollowUpRecordCountGroupByDate(CrmStatisticsCustomerReqVO reqVO); /** * 跟进客户数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ List selectFollowUpCustomerCountGroupByDate(CrmStatisticsCustomerReqVO reqVO); /** * 跟进次数(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ List selectFollowUpRecordCountGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 跟进客户数(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ List selectFollowUpCustomerCountGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 首次合同、回款信息(用于【客户转化率】页面) * * @param reqVO 请求参数 * @return 统计数据 */ List selectContractSummary(CrmStatisticsCustomerReqVO reqVO); /** * 跟进次数(按类型) * * @param reqVO 请求参数 * @return 统计数据 */ List selectFollowUpRecordCountGroupByType(CrmStatisticsCustomerReqVO reqVO); /** * 进入公海客户数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ // TODO: @芋艿 模拟数据, 需要增加 crm_owner_record 表 default List selectPoolCustomerPutCountByDate(CrmStatisticsCustomerReqVO reqVO) { LocalDateTime currrentDate = LocalDateTimeUtil.beginOfDay(reqVO.getTimes()[0]); LocalDateTime endDate = LocalDateTimeUtil.endOfDay(reqVO.getTimes()[1]); List voList = new ArrayList<>(); while (currrentDate.isBefore(endDate)) { voList.add(new CrmStatisticsPoolSummaryByDateRespVO() .setTime(LocalDateTimeUtil.format(currrentDate, "yyyy-MM-dd")) .setCustomerPutCount(RandomUtil.randomInt(0, 10)) .setCustomerTakeCount(RandomUtil.randomInt(0, 10))); currrentDate = currrentDate.plusDays(1); } return voList; } /** * 公海领取客户数(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ // TODO: @芋艿 模拟数据, 需要增加 crm_owner_record 表 default List selectPoolCustomerTakeCountByDate(CrmStatisticsCustomerReqVO reqVO) { return selectPoolCustomerPutCountByDate(reqVO); } /** * 进入公海客户数(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ // TODO: @芋艿 模拟数据, 需要增加 crm_owner_record 表 default List selectPoolCustomerPutCountByUser(CrmStatisticsCustomerReqVO reqVO) { return convertList(reqVO.getUserIds(), userId -> (CrmStatisticsPoolSummaryByUserRespVO) new CrmStatisticsPoolSummaryByUserRespVO() .setCustomerPutCount(RandomUtil.randomInt(0, 10)) .setCustomerTakeCount(RandomUtil.randomInt(0, 10)) .setOwnerUserId(userId)); } /** * 公海领取客户数(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ // TODO: @芋艿 模拟数据, 需要增加 crm_owner_record 表 default List selectPoolCustomerTakeCountByUser(CrmStatisticsCustomerReqVO reqVO) { return selectPoolCustomerPutCountByUser(reqVO); } /** * 客户成交周期(按日期) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCycleGroupByDate(CrmStatisticsCustomerReqVO reqVO); /** * 客户成交周期(按用户) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCycleGroupByUser(CrmStatisticsCustomerReqVO reqVO); /** * 客户成交周期(按区域) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCycleGroupByAreaId(CrmStatisticsCustomerReqVO reqVO); /** * 客户成交周期(按产品) * * @param reqVO 请求参数 * @return 统计数据 */ List selectCustomerDealCycleGroupByProductId(CrmStatisticsCustomerReqVO reqVO); }