新增加Dify相关接口WeChatMentalAlertController用于接收信息调用企业微信发送消息给铺导员,新增加对有心理问题学生的数据库表存储student_mental_rating,新增加对student_mental_rating表的所有查询和学号精准查询
This commit is contained in:
@@ -0,0 +1,129 @@
|
|||||||
|
package com.srs.web.controller.common;
|
||||||
|
|
||||||
|
import com.srs.common.core.controller.BaseController;
|
||||||
|
import com.srs.common.core.domain.AjaxResult;
|
||||||
|
import com.srs.common.core.domain.entity.SysUser;
|
||||||
|
import com.srs.common.core.domain.model.LoginUser;
|
||||||
|
import com.srs.common.utils.WeChatUtil;
|
||||||
|
import com.srs.framework.web.service.TokenService;
|
||||||
|
import com.srs.system.domain.StudentMentalRating;
|
||||||
|
import com.srs.system.mapper.StudentMentalRatingMapper;
|
||||||
|
import com.srs.system.mapper.SysUserMapper;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dify心理问题发送企业微信 知无涯
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/wechat")
|
||||||
|
public class WeChatMentalAlertController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SysUserMapper sysUserMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WeChatUtil weChatUtil;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TokenService tokenService;
|
||||||
|
@Autowired
|
||||||
|
private StudentMentalRatingMapper studentMentalRatingMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理心理预警通知请求
|
||||||
|
*/
|
||||||
|
@PostMapping("/mentalAlert")
|
||||||
|
public AjaxResult handleMentalAlert(@RequestBody MentalAlertRequest request,
|
||||||
|
HttpServletRequest httpRequest) {
|
||||||
|
|
||||||
|
// 校验 token 是否有效
|
||||||
|
LoginUser loginUser = tokenService.getLoginUser(httpRequest);
|
||||||
|
if (loginUser == null) {
|
||||||
|
return AjaxResult.error("Token无效或已过期");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询辅导员信息
|
||||||
|
SysUser teacher = sysUserMapper.selectTeacherByStuNo(request.getUserId());
|
||||||
|
if (teacher == null || !StringUtils.hasText(teacher.getUserName())) {
|
||||||
|
log.error("辅导员信息不完整,学号: {}", request.getUserId());
|
||||||
|
return AjaxResult.error("未分配辅导员或信息不完整");
|
||||||
|
}
|
||||||
|
/* 保存学生心理问题评级 */
|
||||||
|
StudentMentalRating record = new StudentMentalRating();
|
||||||
|
record.setStudentId(request.getUserId());
|
||||||
|
record.setRating(request.getRating());
|
||||||
|
studentMentalRatingMapper.insert(record);
|
||||||
|
|
||||||
|
// 构建并发送消息
|
||||||
|
try {
|
||||||
|
String content = buildContent(request, teacher);
|
||||||
|
weChatUtil.sendTextMessage(teacher.getUserName(), content);
|
||||||
|
return AjaxResult.success("消息已发送至辅导员");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送企业微信失败", e);
|
||||||
|
return AjaxResult.error("发送失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建企业微信消息内容
|
||||||
|
*/
|
||||||
|
private String buildContent(MentalAlertRequest request, SysUser teacher) {
|
||||||
|
String teacherName = StringUtils.hasText(teacher.getNickName())
|
||||||
|
? teacher.getNickName()
|
||||||
|
: teacher.getUserName();
|
||||||
|
return String.format(
|
||||||
|
"【心理预警通知】\n" +
|
||||||
|
"辅导员:%s(%s)\n" +
|
||||||
|
"学生姓名:%s\n" +
|
||||||
|
"学号:%s\n" +
|
||||||
|
"问题描述:%s\n" +
|
||||||
|
"AI建议:%s\n" +
|
||||||
|
"心理问题评级:%s",
|
||||||
|
teacherName,
|
||||||
|
teacher.getUserName(),
|
||||||
|
request.getUserName(),
|
||||||
|
request.getUserId(),
|
||||||
|
request.getStudentQuestion(),
|
||||||
|
request.getAiAnswer(),
|
||||||
|
request.getRating()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class MentalAlertRequest {
|
||||||
|
private String userId; // 学生学号
|
||||||
|
private String userName; // 学生姓名
|
||||||
|
private String studentQuestion; // 学生提问内容
|
||||||
|
private String aiAnswer; // AI回复内容
|
||||||
|
private String rating; // 心理问题评级
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取全部学生心理评级记录
|
||||||
|
*/
|
||||||
|
@GetMapping("/rating/all")
|
||||||
|
public AjaxResult allRatings() {
|
||||||
|
return AjaxResult.success(studentMentalRatingMapper.selectAll());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据学号获取全部记录
|
||||||
|
*/
|
||||||
|
@GetMapping("/rating/{stuNo}")
|
||||||
|
public AjaxResult listByStuNo(@PathVariable String stuNo) {
|
||||||
|
return AjaxResult.success(studentMentalRatingMapper.selectByStuNo(stuNo));
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,49 @@
|
|||||||
|
package com.srs.system.domain;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.srs.common.core.domain.BaseEntity;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生心理问题评级表 知无涯
|
||||||
|
*/
|
||||||
|
public class StudentMentalRating extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String studentId;
|
||||||
|
private String rating;
|
||||||
|
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStudentId() {
|
||||||
|
return studentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStudentId(String studentId) {
|
||||||
|
this.studentId = studentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRating() {
|
||||||
|
return rating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRating(String rating) {
|
||||||
|
this.rating = rating;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
|
private Date createdTime;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
|
private Date updatedTime;
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
package com.srs.system.mapper;
|
||||||
|
|
||||||
|
import com.srs.system.domain.StudentMentalRating;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface StudentMentalRatingMapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按学号查询 知无涯
|
||||||
|
*/
|
||||||
|
StudentMentalRating selectByStudentId(String studentId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插入
|
||||||
|
*/
|
||||||
|
int insert(StudentMentalRating record);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按学号更新评级
|
||||||
|
*/
|
||||||
|
int updateRatingByStudentId(StudentMentalRating record);
|
||||||
|
|
||||||
|
/** 全部记录 */
|
||||||
|
List<StudentMentalRating> selectAll();
|
||||||
|
|
||||||
|
/** 单学号全部记录 */
|
||||||
|
List<StudentMentalRating> selectByStuNo(@Param("stuNo") String stuNo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.srs.system.mapper.StudentMentalRatingMapper">
|
||||||
|
<!-- 添加 知无涯-->
|
||||||
|
<select id="selectByStudentId" resultType="com.srs.system.domain.StudentMentalRating">
|
||||||
|
SELECT id, student_id, rating, created_time, updated_time
|
||||||
|
FROM student_mental_rating
|
||||||
|
WHERE student_id = #{studentId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insert" parameterType="com.srs.system.domain.StudentMentalRating"
|
||||||
|
useGeneratedKeys="true" keyProperty="id">
|
||||||
|
INSERT INTO student_mental_rating(student_id, rating)
|
||||||
|
VALUES (#{studentId}, #{rating})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<update id="updateRatingByStudentId" parameterType="com.srs.system.domain.StudentMentalRating">
|
||||||
|
UPDATE student_mental_rating
|
||||||
|
SET rating = #{rating}
|
||||||
|
WHERE student_id = #{studentId}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- 心理查询全部:知无涯 -->
|
||||||
|
<select id="selectAll" resultType="com.srs.system.domain.StudentMentalRating">
|
||||||
|
SELECT id,
|
||||||
|
student_id AS studentId,
|
||||||
|
rating,
|
||||||
|
created_time AS createdTime,
|
||||||
|
updated_time AS updatedTime
|
||||||
|
FROM student_mental_rating
|
||||||
|
ORDER BY created_time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 根据学号查询心理:知无涯 -->
|
||||||
|
<select id="selectByStuNo" resultType="com.srs.system.domain.StudentMentalRating">
|
||||||
|
SELECT id,
|
||||||
|
student_id AS studentId,
|
||||||
|
rating,
|
||||||
|
created_time AS createdTime,
|
||||||
|
updated_time AS updatedTime
|
||||||
|
FROM student_mental_rating
|
||||||
|
WHERE student_id = #{stuNo}
|
||||||
|
ORDER BY created_time DESC
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Reference in New Issue
Block a user