Files
smartDriveEE/src/main/java/com/rj/scheduler/TopSalesMockInsertDataScheduler.java
2025-10-01 21:20:56 +08:00

118 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.rj.scheduler;
import com.rj.controller.biz.TopSalesController;
import com.rj.dto.TopSalesScoreRequestDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.Random;
/**
* TopSales评分结果模拟数据定时生成器
* 每天凌晨1:30循环50次调用TopSales评分接口插入模拟的评分数据
* 数据取值范围参考 topsales_score_result 表结构
*
* Author: 自动生成
* Date: 2025/01/30
*/
@Slf4j
@Component
public class TopSalesMockInsertDataScheduler {
@Autowired
private TopSalesController topSalesController;
// 销售顾问数据 - 参考 AudioMockInsertDataScheduler
private static final String[][] SALES_PEOPLE = {
{"1972975619388026881", "江叶", "1899263500"},
{"1972975623548776449", "许莲", "1894165677"},
{"1972975624127590401", "叶洋", "1887059943"},
{"1972975624584769537", "曾艺", "1883632473"},
{"1972975625037754369", "赵眉", "1502041762"},
{"1972975625520099329", "付婵", "1506166863"}
};
// 经销商门店数据 - 参考 AudioMockInsertDataScheduler
private static final String[][] DEALERSHIPS = {
{"1957424710587330562", "广州奔驰4S店", "020-12345678"},
{"1957424711560409089", "北京奥迪4S店", "010-87654321"},
{"1957424714953601026", "上海宝马4S店", "021-11223344"},
{"1957424739267981313", "深圳雷克萨斯4S店", "0755-55667788"},
{"1957424740000000001", "成都保时捷4S店", "028-99887766"},
{"1957424740000000017", "昆明威兹曼4S店", "0871-55443322"}
};
// 模拟的销售对话内容覆盖15个评分维度
private static final String[] MOCK_SALES_CHATS = {
"销售顾问您好欢迎来到我们奔驰展厅我是张明很高兴为您服务。客户你好我想了解一下C级车。销售顾问好的C级车是我们奔驰的经典车型请问您平时主要用车场景是什么呢客户主要是上下班代步。销售顾问那您对油耗和舒适性有什么要求吗客户希望省油一些舒适性要好。销售顾问请问您的购车预算大概在什么范围客户30-40万左右。销售顾问这个价位段我们有多款车型可以选择C级、E级都有合适的配置。根据您的需求我推荐C260L运动版2.0T发动机动力充沛9速自动变速箱平顺省油还有全景天窗和柏林之声音响。奔驰在安全方面一直领先C级配备了主动刹车、盲点监测、车道保持等多项安全配置还有9个安全气囊全方位保护。我们的车内空气质量经过严格检测使用环保材料还有PM2.5过滤系统为您的健康保驾护航。C级搭载了最新的MBUX智能人机交互系统支持语音控制、手机互联还有AR实景导航科技感十足。光听介绍不如亲身体验我们安排您试驾一下感受一下奔驰的驾驶质感。客户好的什么时候可以试驾销售顾问现在就可以我带您去试驾。如果您今天订车我们可以给您额外的优惠包括免费保养和延保服务。客户让我考虑一下。销售顾问好的我给您一份详细的报价单您可以和家人商量一下。",
"销售顾问欢迎光临奔驰展厅请问您贵姓客户我姓李。销售顾问李先生您好请坐我给您倒杯水。今天是想了解哪款车型呢客户我想看看E级车。销售顾问E级是我们奔驰的中大型豪华轿车奔驰作为百年豪华品牌一直秉承着'汽车发明者'的理念我们的每一款车都体现了德国工艺的精髓。请问您平时用车主要是商务还是家用客户主要是商务接待。销售顾问那E级商务版很适合您后排空间宽敞配置豪华是商务接待的理想选择。您的购车预算大概在什么范围客户50万左右。销售顾问这个价位段E级很合适我推荐E300L豪华版这款车配置丰富性价比很高。E级商务版配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置让您的客户感受到尊贵的体验。奔驰的安全技术一直领先E级配备了智能驾驶辅助系统包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测使用环保材料还有负离子空气净化系统为您的健康保驾护航。E级搭载了最新的MBUX系统支持语音控制、手势操作还有AR实景导航科技感十足。光听介绍不如亲身体验我们安排您试驾一下E级感受一下奔驰的驾驶质感。客户好的什么时候可以试驾销售顾问现在就可以我带您去试驾大概30分钟。如果您今天订车我们可以给您额外的优惠包括免费保养、延保服务还有金融政策支持。客户让我考虑一下。销售顾问好的我给您一份详细的报价单您可以和家人商量一下。",
"销售顾问您好欢迎来到奔驰展厅我是李华很高兴为您服务。客户你好我想了解一下GLC。销售顾问GLC是我们奔驰的中型豪华SUV请问您主要关注哪些方面客户空间和通过性。销售顾问GLC在空间方面很宽敞通过性也很好适合家庭使用。奔驰作为豪华品牌我们的服务理念是'客户至上'从售前到售后我们都会为您提供最优质的服务。请问您平时用车主要是商务还是家用客户主要是家用。销售顾问那GLC很适合您空间宽敞通过性好适合家庭使用。您的购车预算大概在什么范围客户45万左右。销售顾问这个价位段GLC很合适我推荐GLC 300L豪华版这款车配置丰富空间宽敞适合家庭使用。GLC配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置让您的家人感受到尊贵的体验。奔驰的安全技术一直领先GLC配备了智能驾驶辅助系统包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测使用环保材料还有负离子空气净化系统为您的健康保驾护航。GLC搭载了最新的MBUX系统支持语音控制、手势操作还有AR实景导航科技感十足。光听介绍不如亲身体验我们安排您试驾一下GLC感受一下奔驰的驾驶质感。客户好的什么时候可以试驾销售顾问现在就可以我带您去试驾大概30分钟。如果您今天订车我们可以给您额外的优惠包括免费保养、延保服务还有金融政策支持。客户让我考虑一下。销售顾问好的我给您一份详细的报价单您可以和家人商量一下。",
"销售顾问欢迎光临奔驰展厅请问您贵姓客户我姓王。销售顾问王先生您好请坐我给您介绍一下我们最新的A级车。客户A级车我比较感兴趣。销售顾问A级是奔驰的入门级豪华车性价比很高适合年轻消费者。奔驰作为豪华品牌我们的设计理念是'感性·纯粹'每一款车都体现了奔驰的设计美学。请问您平时用车主要是代步还是商务客户主要是代步。销售顾问那A级很适合您油耗低操控灵活还有丰富的科技配置。您的购车预算大概在什么范围客户25万左右。销售顾问这个价位段A级很合适我推荐A200L运动版这款车配置丰富性价比很高。A级配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置让您的驾驶体验更加舒适。奔驰的安全技术一直领先A级配备了主动安全系统包括主动刹车、盲点监测等让驾驶更安全。我们的车内环境经过严格检测使用环保材料还有负离子空气净化系统为您的健康保驾护航。A级配备了最新的MBUX系统支持语音控制、手机互联还有AR实景导航科技感十足。光听介绍不如亲身体验我们安排您试驾一下A级感受一下奔驰的驾驶质感。客户好的什么时候可以试驾销售顾问现在就可以我带您去试驾大概30分钟。如果您今天订车我们可以给您额外的优惠包括免费保养、延保服务还有金融政策支持。客户让我考虑一下。销售顾问好的我给您一份详细的报价单您可以和家人商量一下。",
"销售顾问您好欢迎来到奔驰展厅我是王强很高兴为您服务。客户你好我想了解一下S级车。销售顾问S级是我们奔驰的旗舰豪华轿车请问您主要关注哪些方面客户舒适性和豪华感。销售顾问S级在舒适性方面有空气悬架豪华感方面有后排娱乐系统是商务接待的理想选择。奔驰作为百年豪华品牌一直秉承着'汽车发明者'的理念我们的每一款车都体现了德国工艺的精髓。请问您平时用车主要是商务还是家用客户主要是商务接待。销售顾问那S级很适合您后排空间宽敞配置豪华是商务接待的理想选择。您的购车预算大概在什么范围客户80万左右。销售顾问这个价位段S级很合适我推荐S400L豪华版这款车配置丰富性价比很高。S级配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置让您的客户感受到尊贵的体验。奔驰的安全技术一直领先S级配备了智能驾驶辅助系统包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测使用环保材料还有负离子空气净化系统为您的健康保驾护航。S级搭载了最新的MBUX系统支持语音控制、手势操作还有AR实景导航科技感十足。光听介绍不如亲身体验我们安排您试驾一下S级感受一下奔驰的驾驶质感。客户好的什么时候可以试驾销售顾问现在就可以我带您去试驾大概30分钟。如果您今天订车我们可以给您额外的优惠包括免费保养、延保服务还有金融政策支持。客户让我考虑一下。销售顾问好的我给您一份详细的报价单您可以和家人商量一下。"
};
private final Random random = new Random();
/**
* 每天 01:30 触发
*/
@Scheduled(cron = "0 30 1 * * ?")
public void generateDailyTopSalesData() {
try {
log.info("开始执行TopSales评分模拟数据任务时间{}", LocalDateTime.now());
int success = 0;
for (int i = 0; i < 50; i++) {
TopSalesScoreRequestDto requestDto = buildMockTopSalesRequest();
ResponseEntity<Map<String, Object>> resp = topSalesController.saveMockData(requestDto);
if (resp != null && resp.getStatusCode().is2xxSuccessful()) {
success++;
} else {
log.warn("第{}次插入失败,返回:{}", i + 1, resp == null ? "null" : resp.getStatusCode());
}
}
log.info("TopSales评分模拟数据任务完成共尝试50次成功 {} 次", success);
} catch (Exception e) {
log.error("TopSales评分模拟数据任务异常", e);
}
}
private TopSalesScoreRequestDto buildMockTopSalesRequest() {
TopSalesScoreRequestDto requestDto = new TopSalesScoreRequestDto();
// 随机选择销售人员和经销商
String[] sales = pick(SALES_PEOPLE);
String[] dealer = pick(DEALERSHIPS);
// 设置基本信息
requestDto.setChat(pick(MOCK_SALES_CHATS));
requestDto.setSalespersonName(sales[1]);
requestDto.setSalespersonPhone(sales[2]);
requestDto.setDealerName(dealer[1]);
requestDto.setDealerPhone(dealer[2]);
// 设置来源信息
requestDto.setSrcContent(requestDto.getChat());
requestDto.setSrcId("mock_src_" + System.currentTimeMillis() + "_" + random.nextInt(1000));
requestDto.setSrcDesc("模拟销售对话数据 - " + sales[1] + "" + dealer[1]);
return requestDto;
}
private String[] pick(String[][] arr) {
return arr[random.nextInt(arr.length)];
}
private String pick(String[] arr) {
return arr[random.nextInt(arr.length)];
}
}