文章目录
一、项目演示
项目演示地址: 视频地址
二、项目介绍
项目描述:这是一个基于SpringBoot+Vue框架 开发的心理健康咨询系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个心理健康咨询系统该有的所有功能。
项目功能:此项目分为三个 角色:普通用户 、咨询师 和管理员 。
普通用户 有登录、注册、筛选咨询师信息、下单咨询、和咨询师在线沟通、评价咨询师、在线心理测评、查看心理文章、收藏心理文章等等功能。
咨询师 有登录、管理个人资质证书、申请成为咨询师、在线和下单用户聊天、管理个人发布的心理文章、管理个人订单管理、查看个人评价信息、查看个人数据统计等等功能。
管理员有登录、查看数据统计信息、管理所有用户信息、审核咨询师信息、管理所有咨询师资质证书信息、管理所有心理测评信息、管理所有心理测评题库信息、管理所有心理文章信息、管理所有订单信息、管理所有评价信息等等功能。
应用技术:SpringBoot3 + Vue3 + MySQL + MyBatis + Redis + ElementUI-Plus + Vite
运行环境:IntelliJ IDEA + MySQL + Redis5.0.5 + JDK17 + Maven3.6.3 + Node + Visual Studio Code(以上工具在项目压缩包中都自带)
三、运行截图























四、主要代码
1.发送消息代码
java
/**
* 发送消息
* @param chatMessageDTO
* @return
*/
@Override
public ResponseDTO<Boolean> sendMessage(ChatMessageDTO chatMessageDTO) {
String senderId = chatMessageDTO.getSenderId();
String receiverId = chatMessageDTO.getReceiverId();
String content = chatMessageDTO.getContent();
if (CommonUtil.isEmpty(senderId) || CommonUtil.isEmpty(receiverId) || CommonUtil.isEmpty(content)) {
return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
}
ResponseDTO<Orders> orderCheck = checkConsultOrder(senderId, receiverId);
if (orderCheck.getCode() != 0) {
return ResponseDTO.errorByMsg(orderCheck.getCode(), orderCheck.getMsg());
}
Orders orders = orderCheck.getData();
if (orders != null) {
if (orders.getState() == 1 && orders.getStartDate() == null) {
orders.setState(2);
orders.setStartDate(new Date());
ordersMapper.updateById(orders);
} else if (orders.getState() == 2 && orders.getStartDate() != null) {
long diffMinutes = (new Date().getTime() - orders.getStartDate().getTime()) / (1000 * 60);
if (diffMinutes >= 50) {
orders.setState(3);
ordersMapper.updateById(orders);
return ResponseDTO.errorByMsg(CodeMsg.CONSULT_TIME_EXPIRED);
}
}
}
ChatMessage chatMessage = new ChatMessage();
chatMessage.setId(UuidUtil.getShortUuid());
chatMessage.setSenderId(senderId);
chatMessage.setReceiverId(receiverId);
chatMessage.setContent(content);
chatMessage.setType(chatMessageDTO.getType() != null ? chatMessageDTO.getType() : 1);
chatMessage.setReadStatus(0);
chatMessage.setCreateTime(new Date());
if (chatMessageMapper.insert(chatMessage) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.MESSAGE_SEND_ERROR);
}
ChatMessageDTO pushDto = new ChatMessageDTO();
pushDto.setId(chatMessage.getId());
pushDto.setSenderId(senderId);
pushDto.setReceiverId(receiverId);
pushDto.setContent(content);
pushDto.setType(chatMessage.getType());
pushDto.setTime(formatTime(chatMessage.getCreateTime()));
pushDto.setIsSelf(false);
String messageJson = JSON.toJSONString(pushDto);
webSocketHandler.sendMessage(receiverId, messageJson);
return ResponseDTO.successByMsg(true, "发送成功!");
}
2.创建咨询订单代码
java
/**
* 创建订单
* @param ordersDTO
* @return
*/
@Override
public ResponseDTO<Boolean> createOrder(OrdersDTO ordersDTO) {
ResponseDTO<UserDTO> loginUser = getLoginUser(ordersDTO.getToken());
if (loginUser.getCode() != 0) {
return ResponseDTO.errorByMsg(CodeMsg.USER_SESSION_EXPIRED);
}
ordersDTO.setUserId(loginUser.getData().getId());
CodeMsg validate = ValidateEntityUtil.validate(ordersDTO);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validate);
}
Orders orders = CopyUtil.copy(ordersDTO, Orders.class);
orders.setId(UuidUtil.getShortUuid());
orders.setState(1);
orders.setCreateTime(new Date());
if (ordersMapper.insert(orders) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.ORDER_ADD_ERROR);
}
return ResponseDTO.successByMsg(true, "下单成功!");
}
3.保存咨询师信息
java
/**
* 保存咨询师信息
*
* @param consultantDTO
* @return
*/
@Override
public ResponseDTO<Boolean> saveConsultant(ConsultantDTO consultantDTO) {
CodeMsg validate = ValidateEntityUtil.validate(consultantDTO);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validate);
}
Consultant consultant = CopyUtil.copy(consultantDTO, Consultant.class);
if (CommonUtil.isEmpty(consultant.getId())) {
consultant.setId(UuidUtil.getShortUuid());
consultant.setRating(new BigDecimal("0.00"));
consultant.setRatingCount(0);
consultant.setConsultCount(0);
consultant.setStatus(2);
if (consultantMapper.insert(consultant) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.CONSULTANT_ADD_ERROR);
}
} else {
if (consultantMapper.updateById(consultant) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.CONSULTANT_EDIT_ERROR);
}
}
return ResponseDTO.successByMsg(true, "保存成功!");
}