在现有的springboot项目中加入一个网页版在线客服功能
这个你要自己做,可以用 websocket
外加一些ui,说白了就是一个可以滚动的div,下面是一个textarea
客服是聊天功能
是要接入客服聊天系统吗
自己做不划算,买三方吧,嵌入js就行。自己做就用websocket
/**
* mallAdminApplication
*
* @author lyc
**/
@EnableDubboConfiguration
@SpringBootApplication(exclude = {SpringBootConfiguration.class, DruidDataSourceAutoConfigure.class, DataSourceAutoConfiguration.class})
@EnableSwaggerAutoConfig
@EnableScheduling
public class MallAdminApplication {
public static void main(String[] args) {
SpringApplication.run(MallAdminApplication.class, args);
}
}
/**
* 线程池配置
*
* @author lyc
**/
@Configuration
@Slf4j
public class ThreadPoolConfig {
@Bean
public Executor asyncServiceExecutor() {
log.info("start asyncServiceExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(5);
//配置最大线程数
executor.setMaxPoolSize(5);
//配置队列大小
executor.setQueueCapacity(99999);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("async-service-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
return executor;
}
}
/**
* 定时任务,用于添加测试数据
*
* @author lyc
**/
@Component
@Slf4j
public class ScheduledTaskConfig {
@Reference
private IPmsProductService pmsProductService;
@Reference
private IOmsOrderService omsOrderService;
@Reference
private IUmsMemberService umsMemberService;
private Snowflake snowflake = IdUtil.getSnowflake(1L, 1L);
/**
*使用自定义的线程池执行任务
**/
@Autowired
@Qualifier("asyncServiceExecutor")
private Executor executor;
@Scheduled(cron = "*/1 * * * * ?")
@Async("asyncServiceExecutor")
public void scheduledInsertPmsProduct() {
for (int i = 0; i < 100; i++) {
CompletableFuture.runAsync(() -> {
String randomUUID = IdUtil.randomUUID();
String name = "商品名称" + randomUUID;
log.info(">>>>>>>>>>>>>开始插入商品数据: {}", name);
pmsProductService.save(new PmsProduct().setName(name)
.setDescription("商品描述" + randomUUID)
.setProductSn("no" + randomUUID));
}, executor);
}
}
@Scheduled(cron = "*/1 * * * * ?")
@Async("asyncServiceExecutor")
public void scheduledInsertUmsMember() {
for (int i = 0; i < 100; i++) {
CompletableFuture.runAsync(() -> {
String snowflakeStr = snowflake.nextIdStr();
String name = "user" + snowflakeStr;
String nickname = "昵称" + snowflakeStr;
Random random = new Random();
log.info(">>>>>>>>>>>>>开始插入用户数据: {}", name);
umsMemberService.save(new UmsMember()
.setNickname(nickname)
.setUsername(name)
.setPassword(snowflakeStr)
.setGender(random.nextInt(3)));
}, executor);
}
}
}
思路:
在前端页面中嵌入客服系统的聊天窗口,可使用第三方的在线客服系统,如QQ客服、阿里旺旺等,也可以使用自己公司的客服系统。
在后端中增加接口,用于处理客服系统的请求,如获取客服人员列表、客户聊天记录等。
在后端中增加WebSocket服务,用于客服人员与客户之间的实时通讯。
在后端中增加数据库,用于存储客户和客服人员的聊天记录。
代码示例:
<!-- 引入QQ客服代码 -->
<script type="text/javascript" src="http://wpa.b.qq.com/cgi/wpa.php"></script>
<!-- 在需要显示客服窗口的位置添加以下代码 -->
<a href="http://wpa.qq.com/msgrd?v=3&uin=123456789&site=qq&menu=yes" target="_blank">在线客服</a>
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
private ChatService chatService;
@GetMapping("/users")
public List<User> getUserList() {
return chatService.getUserList();
}
@GetMapping("/messages")
public List<Message> getMessageList(@RequestParam("userId") Long userId) {
return chatService.getMessageList(userId);
}
@PostMapping("/send")
public void sendMessage(@RequestBody Message message) {
chatService.sendMessage(message);
}
}
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(chatWebSocketHandler(), "/chat").setAllowedOrigins("*");
}
@Bean
public WebSocketHandler chatWebSocketHandler() {
return new ChatWebSocketHandler();
}
}
CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(50),
avatar VARCHAR(100)
);
CREATE TABLE message (
id BIGINT PRIMARY KEY,
sender_id BIGINT,
receiver_id BIGINT,
content VARCHAR(1000),
create_time TIMESTAMP
);
以上代码仅供参考,具体实现需要根据项目需求进行调整。