Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -7,7 +7,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.srs.common.core.controller.BaseController;
|
||||
|
||||
// OkHttp 显式导入
|
||||
import com.srs.common.core.domain.model.LoginUser;
|
||||
import com.srs.common.exception.ServiceException;
|
||||
import com.srs.common.utils.SecurityUtils;
|
||||
import com.srs.teacher.domain.dto.ConversationDTO;
|
||||
@@ -17,15 +16,15 @@ import okhttp3.*;
|
||||
import com.srs.common.core.domain.AjaxResult; // ✅ RuoYi 的返回结果类
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -40,49 +39,69 @@ import java.util.concurrent.CompletableFuture;
|
||||
@RestController
|
||||
@RequestMapping("/aitutor/aichat")
|
||||
public class AiChatController extends BaseController {
|
||||
/**
|
||||
* Dify API的URL地址
|
||||
* 用于发送聊天消息请求到Dify服务
|
||||
*/
|
||||
|
||||
private static final String DIFY_API_URL = "http://47.112.118.149:8100/v1/chat-messages";
|
||||
//private static final String DIFY_API_URL = "http://localhost:8080/v1/chat-messages";
|
||||
|
||||
/**
|
||||
* Dify反馈API的基础URL
|
||||
* 用于提交消息反馈(点赞、点踩等)
|
||||
*/
|
||||
private static final String DIFY_FEEDBACK_BASE_URL = "http://47.112.118.149:8100/v1/messages";
|
||||
//private static final String DIFY_FEEDBACK_BASE_URL = "http://localhost:8080/v1/messages";
|
||||
|
||||
private static final String DIFY_API_HISTORY_URL = "http://47.112.118.149:8100/v1/messages";
|
||||
//private static final String DIFY_API_HISTORY_URL = "http://localhost:8080/v1/messages";
|
||||
|
||||
/**
|
||||
* Dify会话API的基础URL
|
||||
* 用于获取会话列表
|
||||
*/
|
||||
private static final String DIFY_CONVERSATIONS_URL = "http://47.112.118.149:8100/v1/conversations";
|
||||
//private static final String DIFY_CONVERSATIONS_URL = "http://localhost:8080/v1/conversations";
|
||||
|
||||
//文件上传
|
||||
private static final String DIFY_FILES_URL = "http://47.112.118.149:8100/v1/files/upload";
|
||||
|
||||
/**
|
||||
* Dify API的访问密钥
|
||||
* 用于身份验证,授权访问Dify服务
|
||||
*/
|
||||
private static final String DIFY_API_KEY = "app-2wjqcYI9n6igHTVHdH8qXlnh";
|
||||
//private static final String DIFY_API_KEY = "app-";
|
||||
|
||||
/**
|
||||
* Dify API的URL地址
|
||||
* 用于发送聊天消息请求到Dify服务
|
||||
*/
|
||||
|
||||
private static final String DIFY_API_URL = "http://47.112.118.149:8100/v1/chat-messages";
|
||||
|
||||
/**
|
||||
* Dify反馈API的基础URL
|
||||
* 用于提交消息反馈(点赞、点踩等)
|
||||
*/
|
||||
private static final String DIFY_FEEDBACK_BASE_URL = "http://47.112.118.149:8100/v1/messages";
|
||||
|
||||
/**
|
||||
* Dify获取反馈API的基础URL
|
||||
* 用于获取消息反馈(点赞、点踩等)
|
||||
*/
|
||||
private static final String DIFY_API_FEEDBACK_URL = "http://47.112.118.149:8100/v1/app/feedbacks?page=";
|
||||
|
||||
/**
|
||||
* Dify消息历史记录API的基础URL
|
||||
* 用于获取消息历史记录
|
||||
*/
|
||||
private static final String DIFY_API_HISTORY_URL = "http://47.112.118.149:8100/v1/messages";
|
||||
|
||||
/**
|
||||
* Dify会话API的基础URL
|
||||
* 用于获取会话列表
|
||||
*/
|
||||
private static final String DIFY_CONVERSATIONS_URL = "http://47.112.118.149:8100/v1/conversations";
|
||||
|
||||
/**
|
||||
* Dify文件上传API的URL地址
|
||||
* 用于上传文件到Dify服务,支持图文多模态理解
|
||||
*/
|
||||
private static final String DIFY_FILES_URL = "http://47.112.118.149:8100/v1/files/upload";
|
||||
|
||||
/**
|
||||
* HTTP客户端实例
|
||||
* 配置了5分钟的读取超时时间,用于与Dify API进行通信
|
||||
*/
|
||||
private final OkHttpClient client = new OkHttpClient.Builder()
|
||||
.readTimeout(Duration.ofMinutes(5))
|
||||
.connectTimeout(Duration.ofSeconds(5)) // 建连超时
|
||||
.readTimeout(Duration.ofSeconds(12)) // 读超时(服务端应在此内有数据返回)
|
||||
.writeTimeout(Duration.ofSeconds(12)) // 写超时
|
||||
.retryOnConnectionFailure(true)
|
||||
.build();
|
||||
/** 为本次请求设置 “总超时”(含连接/读写),避免无限挂起 */
|
||||
private Response execWithTimeouts(Request req, int callSecs, int readSecs, int writeSecs) throws IOException {
|
||||
OkHttpClient shortClient = client.newBuilder()
|
||||
.callTimeout(java.time.Duration.ofSeconds(callSecs)) // 整次调用最大时长
|
||||
.readTimeout(java.time.Duration.ofSeconds(readSecs)) // 读超时(这段时间没有字节到达就超时)
|
||||
.writeTimeout(java.time.Duration.ofSeconds(writeSecs)) // 写超时
|
||||
.build();
|
||||
return shortClient.newCall(req).execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* JSON对象映射器
|
||||
@@ -162,8 +181,21 @@ public class AiChatController extends BaseController {
|
||||
bodyMap.put("user", currentUsername); // 用户标识
|
||||
bodyMap.put("response_mode", "streaming"); // 设置为流式响应模式
|
||||
|
||||
// 如果存在对话ID,则添加到请求参数中
|
||||
if (requestData.containsKey("conversation_id")) {
|
||||
// 如果请求中没有提供conversation_id,则尝试获取或创建一个
|
||||
if (!requestData.containsKey("conversation_id") || requestData.get("conversation_id") == null) {
|
||||
try {
|
||||
List<ConversationDTO> conversations = getConversations(currentUsername, null, 1, "-updated_at");
|
||||
if (conversations != null && !conversations.isEmpty()) {
|
||||
// 使用已有的会话ID
|
||||
bodyMap.put("conversation_id", conversations.get(0).getId());
|
||||
}
|
||||
// 如果没有会话,Dify会自动创建一个新的会话
|
||||
} catch (Exception e) {
|
||||
System.out.println("获取用户会话时出错: " + e.getMessage());
|
||||
// 继续执行,让Dify自动创建新会话
|
||||
}
|
||||
} else {
|
||||
// 如果存在对话ID,则添加到请求参数中
|
||||
bodyMap.put("conversation_id", requestData.get("conversation_id"));
|
||||
}
|
||||
|
||||
@@ -375,12 +407,9 @@ public class AiChatController extends BaseController {
|
||||
// 参数校验和限制
|
||||
int limitValue = Math.min(Math.max(Integer.parseInt(limit), 1), 100);
|
||||
|
||||
// 构建请求URL
|
||||
String url = "http://47.112.118.149:8100/v1/app/feedbacks?page=" + page + "&limit=" + limitValue;
|
||||
|
||||
// 构建请求
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.url(DIFY_API_FEEDBACK_URL + page + "&limit=" + limitValue)
|
||||
.addHeader("Authorization", "Bearer " + DIFY_API_KEY)
|
||||
.addHeader("Content-Type", "application/json")
|
||||
.get()
|
||||
@@ -409,27 +438,6 @@ public class AiChatController extends BaseController {
|
||||
feedbackItem.put("app_id", feedbackNode.has("app_id") ? feedbackNode.get("app_id").asText() : null);
|
||||
feedbackItem.put("conversation_id", feedbackNode.has("conversation_id") ? feedbackNode.get("conversation_id").asText() : null);
|
||||
|
||||
// 提取用户信息
|
||||
if (feedbackNode.has("from_end_user")) {
|
||||
JsonNode userNode = feedbackNode.get("from_end_user");
|
||||
Map<String, Object> userMap = new HashMap<>();
|
||||
userMap.put("id", userNode.has("id") ? userNode.get("id").asText() : null);
|
||||
userMap.put("name", userNode.has("name") ? userNode.get("name").asText() : null);
|
||||
userMap.put("email", userNode.has("email") ? userNode.get("email").asText() : null);
|
||||
feedbackItem.put("from_end_user", userMap);
|
||||
}
|
||||
|
||||
// 提取消息内容
|
||||
if (feedbackNode.has("message")) {
|
||||
JsonNode messageNode = feedbackNode.get("message");
|
||||
Map<String, Object> messageMap = new HashMap<>();
|
||||
messageMap.put("id", messageNode.has("id") ? messageNode.get("id").asText() : null);
|
||||
messageMap.put("query", messageNode.has("query") ? messageNode.get("query").asText() : null);
|
||||
messageMap.put("answer", messageNode.has("answer") ? messageNode.get("answer").asText() : null);
|
||||
messageMap.put("created_at", messageNode.has("created_at") ? messageNode.get("created_at").asLong() : null);
|
||||
feedbackItem.put("message", messageMap);
|
||||
}
|
||||
|
||||
feedbackList.add(feedbackItem);
|
||||
}
|
||||
}
|
||||
@@ -464,219 +472,60 @@ public class AiChatController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
/* @GetMapping("/history")
|
||||
public AjaxResult getHistoryMessagesToAdmin(@RequestParam String user,
|
||||
@RequestParam(required = false) String firstId,
|
||||
@RequestParam(defaultValue = "20") int limit) {
|
||||
//调用查询会话
|
||||
String conversation_id = conversations(user);
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 获取会话历史消息的端点
|
||||
* <p>
|
||||
* 该方法接收客户端发送的请求,获取指定会话的历史消息记录。
|
||||
* </p>
|
||||
* <p>
|
||||
* //@param conversation_id 会话ID
|
||||
*
|
||||
* @param firstId 当前页第一条聊天记录的ID,默认null
|
||||
* @param limit 一次请求返回多少条记录,默认20条
|
||||
* @return AjaxResult 返回会话历史消息的结果
|
||||
*/
|
||||
@GetMapping("/history")
|
||||
public AjaxResult getHistoryMessages(
|
||||
//@RequestParam(required = false) String conversation_id,
|
||||
@RequestParam(required = false) String firstId,
|
||||
@RequestParam(defaultValue = "20") int limit) {
|
||||
try {
|
||||
/* // 获取当前用户
|
||||
String currentUsername = SecurityUtils.getLoginUser().getUsername();
|
||||
// 获取会话列表的id
|
||||
String conversation_id = conversations(currentUsername);
|
||||
if(conversation_id == null){
|
||||
return error("没有会话");
|
||||
}*/
|
||||
|
||||
|
||||
// 验证conversationId是否为空
|
||||
/*if (conversation_id == null || conversation_id.trim().isEmpty()) {
|
||||
return error("会话ID不能为空后端");
|
||||
}*/
|
||||
String conversation_id = "8fb04ac4-ac9f-470b-9ac4-fee1ebec6412";
|
||||
String currentUsername = SecurityUtils.getLoginUser().getUsername();
|
||||
System.out.println(currentUsername);
|
||||
System.out.println(conversation_id);
|
||||
|
||||
// 构建请求参数
|
||||
HttpUrl.Builder urlBuilder = HttpUrl.parse(DIFY_API_HISTORY_URL).newBuilder();
|
||||
urlBuilder.addQueryParameter("conversation_id", conversation_id);
|
||||
urlBuilder.addQueryParameter("user", currentUsername);
|
||||
if (firstId != null) {
|
||||
urlBuilder.addQueryParameter("first_id", firstId);
|
||||
}
|
||||
urlBuilder.addQueryParameter("limit", String.valueOf(limit));
|
||||
System.out.println(currentUsername);
|
||||
// 构建HTTP请求
|
||||
Request request = new Request.Builder()
|
||||
.url(urlBuilder.build())
|
||||
.addHeader("Authorization", "Bearer " + DIFY_API_KEY)
|
||||
.get()
|
||||
.build();
|
||||
|
||||
// 执行HTTP请求
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
// 检查响应是否成功
|
||||
if (!response.isSuccessful()) {
|
||||
return error("Dify 请求失败: " + response.code() + " " + response.message());
|
||||
}
|
||||
|
||||
// 解析JSON响应
|
||||
JsonNode rootNode = mapper.readTree(response.body().string());
|
||||
boolean hasMore = rootNode.path("has_more").asBoolean(false);
|
||||
List<Map<String, Object>> data = mapper.convertValue(rootNode.path("data"), List.class);
|
||||
|
||||
// 构建返回结果
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("limit", limit);
|
||||
result.put("has_more", hasMore);
|
||||
result.put("data", data);
|
||||
|
||||
return success(result);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return error("获取会话历史消息失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会话列表
|
||||
* <p>
|
||||
* 该方法用于获取当前用户的会话列表,默认返回最近的 20 条。
|
||||
* </p>
|
||||
*
|
||||
* @param user 用户标识符,由开发者定义规则,需保证用户标识在应用内唯一
|
||||
* @param lastId 当前页最后一条记录的 ID,默认 null
|
||||
* @param limit 一次请求返回多少条记录,默认 20 条,最大 100 条,最小 1 条
|
||||
* @param sortBy 排序字段,默认 -updated_at (按更新时间倒序排列)
|
||||
* @return AjaxResult 返回会话列表的结果
|
||||
*/
|
||||
/*@GetMapping("/getConversationsToUser")
|
||||
public AjaxResult getConversationsToUser(
|
||||
@RequestParam String user,
|
||||
@RequestParam(required = false) String lastId,
|
||||
@RequestParam(defaultValue = "20") int limit,
|
||||
@RequestParam(defaultValue = "-updated_at") String sortBy) {
|
||||
try {
|
||||
// 获取当前用户
|
||||
String currentUsername = SecurityUtils.getLoginUser().getUsername();
|
||||
// 获取会话列表的id
|
||||
String conversation_id = conversations(currentUsername);
|
||||
|
||||
return AjaxResult.success(conversation_id);*/
|
||||
/*// 参数校验
|
||||
if (user == null || user.trim().isEmpty()) {
|
||||
return error("用户标识不能为空");
|
||||
}
|
||||
|
||||
// 限制limit的范围在1-100之间
|
||||
if (limit < 1 || limit > 100) {
|
||||
return error("limit参数必须在1到100之间");
|
||||
}
|
||||
|
||||
// 构建请求参数
|
||||
HttpUrl.Builder urlBuilder = HttpUrl.parse(DIFY_CONVERSATIONS_URL).newBuilder();
|
||||
urlBuilder.addQueryParameter("user", user);
|
||||
if (lastId != null) {
|
||||
urlBuilder.addQueryParameter("last_id", lastId);
|
||||
}
|
||||
urlBuilder.addQueryParameter("limit", String.valueOf(limit));
|
||||
urlBuilder.addQueryParameter("sort_by", sortBy);
|
||||
|
||||
// 构建HTTP请求
|
||||
Request request = new Request.Builder()
|
||||
.url(urlBuilder.build())
|
||||
.addHeader("Authorization", "Bearer " + DIFY_API_KEY)
|
||||
.get()
|
||||
.build();
|
||||
|
||||
// 执行HTTP请求
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
// 检查响应是否成功
|
||||
if (!response.isSuccessful()) {
|
||||
return error("Dify 请求失败: " + response.code() + " " + response.message());
|
||||
}
|
||||
|
||||
// 解析JSON响应
|
||||
JsonNode rootNode = mapper.readTree(response.body().string());
|
||||
int resLimit = rootNode.path("limit").asInt();
|
||||
boolean hasMore = rootNode.path("has_more").asBoolean(false);
|
||||
List<Map<String, Object>> data = new ArrayList<>();
|
||||
|
||||
// 解析会话列表数据
|
||||
JsonNode dataArray = rootNode.path("data");
|
||||
if (dataArray.isArray()) {
|
||||
for (JsonNode conversationNode : dataArray) {
|
||||
Map<String, Object> conversation = new HashMap<>();
|
||||
conversation.put("id", conversationNode.path("id").asText());
|
||||
conversation.put("name", conversationNode.path("name").asText());
|
||||
conversation.put("inputs", mapper.convertValue(conversationNode.path("inputs"), Map.class));
|
||||
conversation.put("status", conversationNode.path("status").asText());
|
||||
conversation.put("introduction", conversationNode.path("introduction").asText());
|
||||
conversation.put("created_at", conversationNode.path("created_at").asLong());
|
||||
conversation.put("updated_at", conversationNode.path("updated_at").asLong());
|
||||
data.add(conversation);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建返回结果
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("limit", resLimit);
|
||||
result.put("has_more", hasMore);
|
||||
result.put("data", data);
|
||||
|
||||
return success(result);
|
||||
}*/
|
||||
/* } catch (IOException e) {
|
||||
return error("获取会话列表失败: " + e.getMessage());
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
// 权限标识为辅导员
|
||||
@PreAuthorize("@ss.hasPermi('cph:teacher:list')")
|
||||
@GetMapping("/getMessagesToAdmin")
|
||||
public AjaxResult getMessagesToAdmin(@RequestParam String user,
|
||||
@RequestParam(required = false) String lastId,
|
||||
@RequestParam(required = false) String firstId,
|
||||
@RequestParam(defaultValue = "20") int limit,
|
||||
@RequestParam(defaultValue = "-updated_at") String sortBy) {
|
||||
|
||||
try {
|
||||
List<ConversationDTO> conversations = getConversations(user);
|
||||
|
||||
if (conversations == null || conversations.isEmpty()) {
|
||||
return AjaxResult.error("暂无会话记录");
|
||||
}
|
||||
|
||||
String conversation_id = conversations.get(0).getId();
|
||||
System.out.println(conversation_id);
|
||||
return success(getConversationHistoryMessages(conversation_id, user, null, 20));
|
||||
Map<String, Object> result = getConversationHistoryMessages(conversation_id, user, firstId, limit);
|
||||
|
||||
AjaxResult successResult = success(result);
|
||||
return successResult;
|
||||
} catch (IOException e) {
|
||||
return AjaxResult.error("网络请求失败,请稍后重试",error());
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("网络请求失败,请稍后重试");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("请求处理失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 权限标识为学生
|
||||
@GetMapping("/getMessagesToUser")
|
||||
public AjaxResult getMessagesToUser(@RequestParam(required = false) String lastId,
|
||||
public AjaxResult getMessagesToUser(@RequestParam(required = false) String firstId,
|
||||
@RequestParam(defaultValue = "20") int limit,
|
||||
@RequestParam(defaultValue = "-updated_at") String sortBy) {
|
||||
|
||||
try {
|
||||
String user = SecurityUtils.getLoginUser().getUsername();
|
||||
List<ConversationDTO> conversations = getConversations(user);
|
||||
|
||||
if (conversations == null || conversations.isEmpty()) {
|
||||
return AjaxResult.error("暂无会话记录");
|
||||
}
|
||||
|
||||
String conversation_id = conversations.get(0).getId();
|
||||
return success(getConversationHistoryMessages(conversation_id, user, null, 20));
|
||||
Map<String, Object> result = getConversationHistoryMessages(conversation_id, user, firstId, limit);
|
||||
|
||||
AjaxResult successResult = success(result);
|
||||
return successResult;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("网络请求失败,请稍后重试");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error("请求处理失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -702,13 +551,14 @@ public class AiChatController extends BaseController {
|
||||
.build();
|
||||
|
||||
// 执行请求
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
try (Response response = execWithTimeouts(request, 8, 8, 8)) {
|
||||
if (!response.isSuccessful()) {
|
||||
throw new IOException("Dify API 请求失败: " + response.code() + " " + response.message());
|
||||
}
|
||||
|
||||
// 读取响应体
|
||||
String responseBodyString = response.body().string();
|
||||
System.out.println("Raw Response: " + responseBodyString); // 打印原始数据
|
||||
JsonNode rootNode = mapper.readTree(responseBodyString);
|
||||
|
||||
// 提取 data 数组
|
||||
@@ -738,11 +588,11 @@ public class AiChatController extends BaseController {
|
||||
}
|
||||
|
||||
public List<ConversationDTO> getConversations(String user) throws IOException {
|
||||
return getConversations(user, null, 0, null);
|
||||
return getConversations(user, null, 1, "-updated_at");
|
||||
}
|
||||
|
||||
public List<ConversationDTO> getConversations(String user, String lastId) throws IOException {
|
||||
return getConversations(user, lastId, 0, null);
|
||||
return getConversations(user, lastId, 1, "-updated_at");
|
||||
}
|
||||
|
||||
public List<ConversationDTO> getConversations(String user, Integer limit, String sortBy) throws IOException {
|
||||
@@ -785,7 +635,7 @@ public class AiChatController extends BaseController {
|
||||
.get()
|
||||
.build();
|
||||
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
try (Response response = execWithTimeouts(request, 8, 8, 8)) {
|
||||
|
||||
if (!response.isSuccessful()) {
|
||||
String body = response.body() != null ? response.body().string() : "No body";
|
||||
@@ -822,7 +672,6 @@ public class AiChatController extends BaseController {
|
||||
result.put("data", data);
|
||||
result.put("has_more", hasMore);
|
||||
result.put("limit", finalLimit);
|
||||
|
||||
return result; // 直接返回,调用方直接丢给前端
|
||||
|
||||
} catch (IOException e) {
|
||||
@@ -844,8 +693,7 @@ public class AiChatController extends BaseController {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*//**
|
||||
/**
|
||||
* 文件上传接口
|
||||
* <p>
|
||||
* 上传文件并在发送消息时使用,可实现图文多模态理解。支持应用程序所支持的所有格式。
|
||||
@@ -855,7 +703,7 @@ public class AiChatController extends BaseController {
|
||||
* @param file 要上传的文件
|
||||
* @param user 用户标识,用于定义终端用户的身份
|
||||
* @return 包含文件信息的统一响应结果
|
||||
*//*
|
||||
*/
|
||||
@PostMapping("/files/upload")
|
||||
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file,
|
||||
@RequestParam("user") String user) {
|
||||
@@ -903,5 +751,5 @@ public class AiChatController extends BaseController {
|
||||
} catch (Exception e) {
|
||||
return AjaxResult.error("文件上传异常: " + e.getMessage());
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
@@ -284,4 +284,11 @@ public class CphAuditDetailsController extends BaseController {
|
||||
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||
return toAjax(cphAuditDetailsService.deleteCphAuditDetailsByIds(ids));
|
||||
}
|
||||
/**
|
||||
* 撤销审核
|
||||
*/
|
||||
@PostMapping("/cancelAudit/{id}")
|
||||
public AjaxResult cancelAudit(@PathVariable("id") Long id) {
|
||||
return toAjax(cphAuditDetailsService.cancelAuditById(id));
|
||||
}
|
||||
}
|
||||
|
@@ -94,7 +94,9 @@ public class CphGoodApplyController extends BaseController {
|
||||
Object total = ajaxResult.get("data");
|
||||
Page page = (Page) total;
|
||||
list.add("rwgl-" + page.getTotal());
|
||||
String username = new String();
|
||||
return AjaxResult.success(list);
|
||||
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('home:fdy:undo1')")
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package com.srs.dormitory.controller;
|
||||
package com.srs.web.controller.dormitory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package com.srs.routine.controller;
|
||||
package com.srs.web.controller.routine;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package com.srs.teacher.controller;
|
||||
package com.srs.web.controller.teacher;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@@ -6,16 +6,16 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 审核明细Mapper接口
|
||||
*
|
||||
*
|
||||
* @author 邓
|
||||
* @date 2023-07-04
|
||||
*/
|
||||
@Mapper
|
||||
public interface CphAuditDetailsMapper
|
||||
public interface CphAuditDetailsMapper
|
||||
{
|
||||
/**
|
||||
* 查询审核明细
|
||||
*
|
||||
*
|
||||
* @param id 审核明细主键
|
||||
* @return 审核明细
|
||||
*/
|
||||
@@ -25,12 +25,12 @@ public interface CphAuditDetailsMapper
|
||||
|
||||
/**
|
||||
* 查询审核明细列表
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 审核明细集合
|
||||
*/
|
||||
public List<CphAuditDetails> selectCphAuditDetailsList(CphAuditDetails cphAuditDetails);
|
||||
|
||||
|
||||
/**
|
||||
* 查询已审核
|
||||
* @author zhy
|
||||
@@ -50,7 +50,7 @@ public interface CphAuditDetailsMapper
|
||||
|
||||
/**
|
||||
* 新增审核明细
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -58,7 +58,7 @@ public interface CphAuditDetailsMapper
|
||||
|
||||
/**
|
||||
* 修改审核明细
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -66,7 +66,7 @@ public interface CphAuditDetailsMapper
|
||||
|
||||
/**
|
||||
* 删除审核明细
|
||||
*
|
||||
*
|
||||
* @param id 审核明细主键
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -74,9 +74,11 @@ public interface CphAuditDetailsMapper
|
||||
|
||||
/**
|
||||
* 批量删除审核明细
|
||||
*
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteCphAuditDetailsByIds(Long[] ids);
|
||||
public int cancelAuditById(Long id);
|
||||
public int cancelCphAudiDetailsById(Long id);
|
||||
}
|
||||
|
@@ -11,11 +11,11 @@ import com.srs.comprehensive.domain.Vo.CphSearch;
|
||||
|
||||
/**
|
||||
* 审核明细Service接口
|
||||
*
|
||||
*
|
||||
* @author 邓
|
||||
* @date 2023-07-04
|
||||
*/
|
||||
public interface ICphAuditDetailsService
|
||||
public interface ICphAuditDetailsService
|
||||
{
|
||||
|
||||
public int reSub(CphResub param);
|
||||
@@ -30,7 +30,7 @@ public interface ICphAuditDetailsService
|
||||
|
||||
/**
|
||||
* 查询审核明细
|
||||
*
|
||||
*
|
||||
* @param id 审核明细主键
|
||||
* @return 审核明细
|
||||
*/
|
||||
@@ -48,7 +48,7 @@ public interface ICphAuditDetailsService
|
||||
|
||||
/**
|
||||
* 查询审核明细列表
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 审核明细集合
|
||||
*/
|
||||
@@ -64,7 +64,7 @@ public interface ICphAuditDetailsService
|
||||
|
||||
/**
|
||||
* 新增审核明细
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -72,7 +72,7 @@ public interface ICphAuditDetailsService
|
||||
|
||||
/**
|
||||
* 修改审核明细
|
||||
*
|
||||
*
|
||||
* @param cphAuditDetails 审核明细
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -85,6 +85,12 @@ public interface ICphAuditDetailsService
|
||||
*/
|
||||
public int auditOpera(CphAuditDetails cphAuditDetails);
|
||||
|
||||
/**
|
||||
* 批量同意
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
|
||||
/**
|
||||
* 批量同意
|
||||
* @param
|
||||
@@ -94,15 +100,17 @@ public interface ICphAuditDetailsService
|
||||
|
||||
/**
|
||||
* 批量删除审核明细
|
||||
*
|
||||
*
|
||||
* @param ids 需要删除的审核明细主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteCphAuditDetailsByIds(Long[] ids);
|
||||
//撤销
|
||||
public int cancelAuditById(Long id);
|
||||
|
||||
/**
|
||||
* 删除审核明细信息
|
||||
*
|
||||
*
|
||||
* @param id 审核明细主键
|
||||
* @return 结果
|
||||
*/
|
||||
|
@@ -435,8 +435,8 @@ public class CphAuditDetailsServiceImpl implements ICphAuditDetailsService {
|
||||
temp.setId(cphAuditDetails.getProjectId());
|
||||
temp.setAuditStatus(cphAuditDetails.getStatusCode().toString());
|
||||
cphIamService.updateCphIam(temp);
|
||||
|
||||
if (cphAuditDetails.getStatusCode() == 6L)//判断审核状态是否完成
|
||||
Long statusCode=cphAuditDetailsMapper.selectCphAuditDetailsById(cphAuditDetails.getId()).getStatusCode();
|
||||
if (statusCode == 6L)//判断审核状态是否完成
|
||||
{
|
||||
SrsStudent stu = _stuService.selectSrsStudentByStuId(cphAuditDetails.getSubmitterId());
|
||||
SrsAddRecord srsAddRecord = new SrsAddRecord();//加分记录表
|
||||
@@ -519,7 +519,13 @@ public class CphAuditDetailsServiceImpl implements ICphAuditDetailsService {
|
||||
public int deleteCphAuditDetailsByIds(Long[] ids) {
|
||||
return cphAuditDetailsMapper.deleteCphAuditDetailsByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int cancelAuditById(Long id) {
|
||||
int result=0;
|
||||
result=cphAuditDetailsMapper.cancelAuditById(id);
|
||||
result+= cphAuditDetailsMapper.cancelCphAudiDetailsById(id);
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* 删除审核明细信息
|
||||
*
|
||||
|
@@ -19,8 +19,10 @@ import com.srs.comprehensive.mapper.ClassCounMapper;
|
||||
import com.srs.comprehensive.mapper.Gxsdxy02JzgxxMapper;
|
||||
import com.srs.comprehensive.mapper.InfoTeacherMapper;
|
||||
import com.srs.comprehensive.util.ListSliceUtil;
|
||||
import com.srs.system.domain.QgzxTeacher;
|
||||
import com.srs.system.domain.SysPost;
|
||||
import com.srs.system.domain.SysUserRole;
|
||||
import com.srs.system.mapper.QgzxTeacherMapper;
|
||||
import com.srs.system.mapper.SysRoleMapper;
|
||||
import com.srs.system.mapper.SysUserMapper;
|
||||
import com.srs.system.mapper.SysUserRoleMapper;
|
||||
@@ -47,6 +49,8 @@ public class CphTeacherServiceImpl implements ICphTeacherService
|
||||
{
|
||||
@Autowired
|
||||
private CphTeacherMapper cphTeacherMapper;
|
||||
@Autowired
|
||||
private QgzxTeacherMapper qgzxTeacherMapper;
|
||||
|
||||
@Autowired
|
||||
private Gxsdxy02JzgxxMapper teacherMapper;
|
||||
@@ -350,14 +354,121 @@ public class CphTeacherServiceImpl implements ICphTeacherService
|
||||
}
|
||||
|
||||
//同步辅导员
|
||||
// @Override
|
||||
// @Transactional(rollbackFor = Exception.class)
|
||||
// public void sqlserverSynchronousMYSQL(List<Map> list) {
|
||||
// //辅导员列表
|
||||
// List<CphTeacher> cphTeachers = cphTeacherMapper.selectTeacherList();
|
||||
// //查找重复值
|
||||
// List<Map> updateMap = list.stream()
|
||||
// .filter(obj1 -> cphTeachers
|
||||
// .stream().anyMatch(obj2 -> {
|
||||
// Object xhObj = obj1.get("zgh");
|
||||
// if (xhObj != null) {
|
||||
// String zgh = xhObj.toString();
|
||||
// return obj2.getEmployeeId().equals(zgh);
|
||||
// }
|
||||
// return false;
|
||||
// }))
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// //添加需要
|
||||
// List<String> kshList2 = cphTeachers.stream()
|
||||
// .map(CphTeacher::getEmployeeId)
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// List<Map> insertMap = list.stream()
|
||||
// .filter(obj -> {
|
||||
// Object xhObj = obj.get("zgh");
|
||||
// return xhObj != null && !kshList2.contains(xhObj.toString());
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
// //添加
|
||||
// List<CphTeacher> insertStudentList = new ArrayList<>();
|
||||
// for (Map map:insertMap){
|
||||
// CphTeacher cphTeacher = new CphTeacher();
|
||||
// Object xmObj = map.get("xm");
|
||||
// if (xmObj != null) {
|
||||
// cphTeacher.setName(xmObj.toString());
|
||||
// }
|
||||
// Object xbObj = map.get("xb");
|
||||
// if (xbObj != null) {
|
||||
// String s = xbObj.toString();
|
||||
// if (!Objects.equals(s, "NULL") && !Objects.equals(s, "null")&&!Objects.equals(s," ")) {
|
||||
// cphTeacher.setGender(xbObj.toString());
|
||||
// }
|
||||
// }
|
||||
// Object zghObj = map.get("zgh");
|
||||
// if (zghObj != null) {
|
||||
// cphTeacher.setEmployeeId(zghObj.toString());
|
||||
// }
|
||||
// //学院id
|
||||
// Object yxdmObj = map.get("yxdm");
|
||||
// if (yxdmObj!=null) {
|
||||
// Long deptId = cphTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
// if (deptId != null) {
|
||||
// cphTeacher.setDeptId(deptId);
|
||||
// }
|
||||
// }
|
||||
// cphTeacher.setStatus("1");
|
||||
// cphTeacher.setCreateTime(DateUtils.getNowDate());
|
||||
// insertStudentList.add(cphTeacher);
|
||||
// }
|
||||
// if (insertStudentList.size()!=0) {
|
||||
// cphTeacherMapper.insertBatchSomeColumn(insertStudentList);
|
||||
// }
|
||||
// //修改
|
||||
// List<CphTeacher> updateSrsStudent = new ArrayList<>();
|
||||
// for (Map map:updateMap){
|
||||
// CphTeacher cphTeacher = new CphTeacher();
|
||||
// Object xmObj = map.get("xm");
|
||||
// if (xmObj != null) {
|
||||
// cphTeacher.setName(xmObj.toString());
|
||||
// }
|
||||
// Object xbObj = map.get("xb");
|
||||
// if (xbObj != null) {
|
||||
// String s = xbObj.toString();
|
||||
// if (!Objects.equals(s, "NULL") && !Objects.equals(s, "null")&&!Objects.equals(s," ")) {
|
||||
// cphTeacher.setGender(xbObj.toString());
|
||||
// }
|
||||
// }
|
||||
// Object zghObj = map.get("zgh");
|
||||
// if (zghObj != null) {
|
||||
// cphTeacher.setEmployeeId(zghObj.toString());
|
||||
// }
|
||||
// //学院id
|
||||
// Object yxdmObj = map.get("yxdm");
|
||||
// if (yxdmObj!=null) {
|
||||
// Long ksh = cphTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
// if (ksh != null) {
|
||||
// cphTeacher.setDeptId(ksh);
|
||||
// }
|
||||
// }
|
||||
// cphTeacher.setUpdateTime(DateUtils.getNowDate());
|
||||
// updateSrsStudent.add(cphTeacher);
|
||||
// }
|
||||
// /*if (updateSrsStudent.size()!=0) {
|
||||
// List<List<CphTeacher>> lists = ListSliceUtil.updateSlice(updateSrsStudent);
|
||||
// if (lists != null) {
|
||||
// for (List<CphTeacher> studentList : lists) {
|
||||
// cphTeacherMapper.updateSrsClassList(studentList);
|
||||
// }
|
||||
// }
|
||||
// }*/
|
||||
//
|
||||
//
|
||||
//
|
||||
// }
|
||||
|
||||
//同步教职工表
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void sqlserverSynchronousMYSQL(List<Map> list) {
|
||||
//辅导员列表
|
||||
List<CphTeacher> cphTeachers = cphTeacherMapper.selectTeacherList();
|
||||
//教职工列表
|
||||
List<QgzxTeacher> qgzxTeachers = qgzxTeacherMapper.selectTeacherList();
|
||||
//查找重复值
|
||||
List<Map> updateMap = list.stream()
|
||||
.filter(obj1 -> cphTeachers
|
||||
.filter(obj1 -> qgzxTeachers
|
||||
.stream().anyMatch(obj2 -> {
|
||||
Object xhObj = obj1.get("zgh");
|
||||
if (xhObj != null) {
|
||||
@@ -369,8 +480,8 @@ public class CphTeacherServiceImpl implements ICphTeacherService
|
||||
.collect(Collectors.toList());
|
||||
|
||||
//添加需要
|
||||
List<String> kshList2 = cphTeachers.stream()
|
||||
.map(CphTeacher::getEmployeeId)
|
||||
List<String> kshList2 = qgzxTeachers.stream()
|
||||
.map(QgzxTeacher::getEmployeeId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Map> insertMap = list.stream()
|
||||
@@ -380,68 +491,68 @@ public class CphTeacherServiceImpl implements ICphTeacherService
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
//添加
|
||||
List<CphTeacher> insertStudentList = new ArrayList<>();
|
||||
List<QgzxTeacher> insertStudentList = new ArrayList<>();
|
||||
for (Map map:insertMap){
|
||||
CphTeacher cphTeacher = new CphTeacher();
|
||||
QgzxTeacher qgzxTeacher = new QgzxTeacher();
|
||||
Object xmObj = map.get("xm");
|
||||
if (xmObj != null) {
|
||||
cphTeacher.setName(xmObj.toString());
|
||||
qgzxTeacher.setName(xmObj.toString());
|
||||
}
|
||||
Object xbObj = map.get("xb");
|
||||
if (xbObj != null) {
|
||||
String s = xbObj.toString();
|
||||
if (!Objects.equals(s, "NULL") && !Objects.equals(s, "null")&&!Objects.equals(s," ")) {
|
||||
cphTeacher.setGender(xbObj.toString());
|
||||
qgzxTeacher.setGender(xbObj.toString());
|
||||
}
|
||||
}
|
||||
Object zghObj = map.get("zgh");
|
||||
if (zghObj != null) {
|
||||
cphTeacher.setEmployeeId(zghObj.toString());
|
||||
qgzxTeacher.setEmployeeId(zghObj.toString());
|
||||
}
|
||||
//学院id
|
||||
Object yxdmObj = map.get("yxdm");
|
||||
if (yxdmObj!=null) {
|
||||
Long deptId = cphTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
Long deptId = qgzxTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
if (deptId != null) {
|
||||
cphTeacher.setDeptId(deptId);
|
||||
qgzxTeacher.setDeptId(deptId);
|
||||
}
|
||||
}
|
||||
cphTeacher.setStatus("1");
|
||||
cphTeacher.setCreateTime(DateUtils.getNowDate());
|
||||
insertStudentList.add(cphTeacher);
|
||||
qgzxTeacher.setStatus("1");
|
||||
qgzxTeacher.setCreateTime(DateUtils.getNowDate());
|
||||
insertStudentList.add(qgzxTeacher);
|
||||
}
|
||||
if (insertStudentList.size()!=0) {
|
||||
cphTeacherMapper.insertBatchSomeColumn(insertStudentList);
|
||||
qgzxTeacherMapper.insertBatchSomeColumn(insertStudentList);
|
||||
}
|
||||
//修改
|
||||
List<CphTeacher> updateSrsStudent = new ArrayList<>();
|
||||
List<QgzxTeacher> updateSrsStudent = new ArrayList<>();
|
||||
for (Map map:updateMap){
|
||||
CphTeacher cphTeacher = new CphTeacher();
|
||||
QgzxTeacher qgzxTeacher = new QgzxTeacher();
|
||||
Object xmObj = map.get("xm");
|
||||
if (xmObj != null) {
|
||||
cphTeacher.setName(xmObj.toString());
|
||||
qgzxTeacher.setName(xmObj.toString());
|
||||
}
|
||||
Object xbObj = map.get("xb");
|
||||
if (xbObj != null) {
|
||||
String s = xbObj.toString();
|
||||
if (!Objects.equals(s, "NULL") && !Objects.equals(s, "null")&&!Objects.equals(s," ")) {
|
||||
cphTeacher.setGender(xbObj.toString());
|
||||
qgzxTeacher.setGender(xbObj.toString());
|
||||
}
|
||||
}
|
||||
Object zghObj = map.get("zgh");
|
||||
if (zghObj != null) {
|
||||
cphTeacher.setEmployeeId(zghObj.toString());
|
||||
qgzxTeacher.setEmployeeId(zghObj.toString());
|
||||
}
|
||||
//学院id
|
||||
Object yxdmObj = map.get("yxdm");
|
||||
if (yxdmObj!=null) {
|
||||
Long ksh = cphTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
Long ksh = qgzxTeacherMapper.selectDeptCode(yxdmObj.toString());
|
||||
if (ksh != null) {
|
||||
cphTeacher.setDeptId(ksh);
|
||||
qgzxTeacher.setDeptId(ksh);
|
||||
}
|
||||
}
|
||||
cphTeacher.setUpdateTime(DateUtils.getNowDate());
|
||||
updateSrsStudent.add(cphTeacher);
|
||||
qgzxTeacher.setUpdateTime(DateUtils.getNowDate());
|
||||
updateSrsStudent.add(qgzxTeacher);
|
||||
}
|
||||
/*if (updateSrsStudent.size()!=0) {
|
||||
List<List<CphTeacher>> lists = ListSliceUtil.updateSlice(updateSrsStudent);
|
||||
|
@@ -3,7 +3,7 @@
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.srs.comprehensive.mapper.CphAuditDetailsMapper">
|
||||
|
||||
|
||||
<resultMap type="CphAuditDetails" id="CphAuditDetailsResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="projectName" column="project_name" />
|
||||
@@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<select id="selectCphAuditDetailsList" parameterType="CphAuditDetails" resultMap="CphAuditDetailsResult">
|
||||
<include refid="selectCphAuditDetailsVo"/>
|
||||
<where>
|
||||
<where>
|
||||
<if test="projectName != null and projectName != ''"> and project_name like concat('%', #{projectName}, '%')</if>
|
||||
<if test="submitterId != null "> and submitter_id = #{submitterId}</if>
|
||||
<if test="submitterName != null and submitterName != ''"> and submitter_name like concat('%', #{submitterName}, '%')</if>
|
||||
@@ -101,7 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
order by stu_no,id desc
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="selectCphAuditDetailsById" parameterType="Long" resultMap="CphAuditDetailsResult">
|
||||
<include refid="selectCphAuditDetailsVo"/>
|
||||
where ad.id = #{id}
|
||||
@@ -111,7 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectCphAuditDetailsVo"/>
|
||||
where ad.project_id = #{id}
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertCphAuditDetails" parameterType="CphAuditDetails" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into cph_audit_details
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
@@ -159,9 +159,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</delete>
|
||||
|
||||
<delete id="deleteCphAuditDetailsByIds" parameterType="String">
|
||||
delete from cph_audit_details where id in
|
||||
delete from cph_audit_details where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
<update id="cancelAuditById" parameterType="Long">
|
||||
update cph_iam set audit_status=1 where id=#{id}
|
||||
</update>
|
||||
<update id="cancelCphAudiDetailsById" parameterType="Long">
|
||||
update cph_audit_details set status_code=1 where project_id=#{id}
|
||||
</update>
|
||||
</mapper>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?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">
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.srs.comprehensive.mapper.CphGoodApplyMapper">
|
||||
|
||||
<resultMap type="CphGoodApply" id="CphGoodApplyResult">
|
||||
@@ -66,25 +66,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select t2.* ,sc.class_name,
|
||||
(select count(1) from srs_student where `status` = '01' and class_id = sc.class_id) as class_count,
|
||||
(select count(1) from srs_student as f1
|
||||
left join srs_class as f2 on f1.class_id = f2.class_id
|
||||
left join srs_class as f2 on f1.class_id = f2.class_id
|
||||
where f1.`status` = '01' and f2.major_id = sc.major_id and f2.grade_id = sc.grade_id) as major_count
|
||||
from
|
||||
(select t1.* from (
|
||||
select a.stu_no,a.stu_year_id,b.stu_year_name,a.stu_score,a.cph_score,a.sport_score,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.cph_score DESC ) as cph_class_rank,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_class_rank,
|
||||
RANK() OVER(PARTITION BY d.major_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_major_rank
|
||||
from cph_total_score as a
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
left join srs_student as c on a.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
)as t1
|
||||
where t1.stu_no = #{stuNo} and t1.stu_year_id in (
|
||||
select id from srs_stu_year as b where b.`status` = 1
|
||||
)
|
||||
select a.stu_no,a.stu_year_id,b.stu_year_name,a.stu_score,a.cph_score,a.sport_score,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.cph_score DESC ) as cph_class_rank,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_class_rank,
|
||||
RANK() OVER(PARTITION BY d.major_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_major_rank
|
||||
from cph_total_score as a
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
left join srs_student as c on a.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
)as t1
|
||||
where t1.stu_no = #{stuNo} and t1.stu_year_id in (
|
||||
select id from srs_stu_year as b where b.`status` = 1
|
||||
)
|
||||
)as t2
|
||||
left join srs_student as ss on t2.stu_no = ss.stu_no
|
||||
left join srs_class as sc on ss.class_id = sc.class_id
|
||||
left join srs_student as ss on t2.stu_no = ss.stu_no
|
||||
left join srs_class as sc on ss.class_id = sc.class_id
|
||||
</select>
|
||||
|
||||
<select id="listOwnYearCourseScore" resultType="CphCourseNameScore">
|
||||
@@ -102,7 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select count(a.is_pass) as course_count,sum(case when a.is_pass='true' then 1 else 0 end ) as pass_count,
|
||||
sum(case when a.is_pass='false' then 1 else 0 end ) as unpass_count , b.stu_year_name
|
||||
from cph_stu_score_middle as a
|
||||
left join srs_stu_year as b on a.xndm = b.xndm
|
||||
left join srs_stu_year as b on a.xndm = b.xndm
|
||||
where a.stu_no = #{stuNo}
|
||||
GROUP BY b.id
|
||||
</select>
|
||||
@@ -124,31 +124,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select count(a.is_pass) as course_count,sum(case when a.is_pass='1' then 1 else 0 end ) as pass_count,
|
||||
sum(case when a.is_pass='0' then 1 else 0 end ) as unpass_count , b.stu_year_name
|
||||
from cph_stu_score_middle as a
|
||||
left join srs_stu_year as b on a.xndm = b.xndm
|
||||
left join srs_stu_year as b on a.xndm = b.xndm
|
||||
where a.stu_no = #{stuNo} and a.xndm = (select t2.xndm from cph_own_good_type as t1
|
||||
left join srs_stu_year as t2 on t1.stu_year_id = t2.id where t1.type_code = #{code})
|
||||
left join srs_stu_year as t2 on t1.stu_year_id = t2.id where t1.type_code = #{code})
|
||||
GROUP BY b.id
|
||||
</select>
|
||||
|
||||
<select id="getOwnIamCountByCode" resultType="CphIamSitCount">
|
||||
select d.stu_year_name,
|
||||
count(1) as iam_count,
|
||||
sum(case when c.max_score > 0 then 1 else 0 end ) as add_count,
|
||||
sum(case when c.max_score < 0 then 1 else 0 end ) as minus_count
|
||||
count(1) as iam_count,
|
||||
sum(case when c.max_score > 0 then 1 else 0 end ) as add_count,
|
||||
sum(case when c.max_score < 0 then 1 else 0 end ) as minus_count
|
||||
from cph_iam as a
|
||||
left join srs_student as b on a.to_add = b.stu_id
|
||||
left join cph_rules as c on a.rule_id = c.rule_id
|
||||
left join srs_stu_year as d on a.stu_year_id = d.id
|
||||
left join srs_student as b on a.to_add = b.stu_id
|
||||
left join cph_rules as c on a.rule_id = c.rule_id
|
||||
left join srs_stu_year as d on a.stu_year_id = d.id
|
||||
where b.stu_no = #{stuNo} and a.audit_status = 6
|
||||
and a.stu_year_id = (select stu_year_id from cph_own_good_type as t where t.type_code = #{code})
|
||||
and a.stu_year_id = (select stu_year_id from cph_own_good_type as t where t.type_code = #{code})
|
||||
GROUP BY a.stu_year_id
|
||||
</select>
|
||||
|
||||
<select id="listOwnXyjxjApply" resultType="com.srs.comprehensive.domain.Vo.CphGoodApplyVo">
|
||||
select a.* ,b.type_name,c.fdy_comment,c.dept_comment,c.final_comment
|
||||
from cph_good_apply as a
|
||||
left join cph_own_good_type as b on a.type_code = b.type_code
|
||||
left join cph_good_audit as c on a.id = c.apply_id
|
||||
left join cph_own_good_type as b on a.type_code = b.type_code
|
||||
left join cph_good_audit as c on a.id = c.apply_id
|
||||
where a.stu_no = #{stuNo} and b.parent_code = "XYJXJ"
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
@@ -156,11 +156,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="listFdyAudit" resultType="CphGoodAuditFdyVo" parameterType="CphSearch">
|
||||
select c.stu_no,c.`name` as stu_name,d.class_name,b.apply_status,f.type_name,a.*
|
||||
from cph_good_audit as a
|
||||
left join cph_good_apply as b on a.apply_id = b.id
|
||||
left join srs_student as c on b.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
left join cph_teacher as e on d.teacher_id = e.teacher_id
|
||||
left join cph_own_good_type as f on b.type_code = f.type_code
|
||||
left join cph_good_apply as b on a.apply_id = b.id
|
||||
left join srs_student as c on b.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
left join cph_teacher as e on d.teacher_id = e.teacher_id
|
||||
left join cph_own_good_type as f on b.type_code = f.type_code
|
||||
<where>
|
||||
e.employee_id = #{tNo}
|
||||
<if test="status != null and status != ''"> and b.apply_status = #{status}</if>
|
||||
@@ -173,13 +173,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<select id="listXwAudit" resultType="CphGoodAuditFdyVo" parameterType="CphSearch">
|
||||
select b.apply_status,c.stu_no,c.`name` as stu_name,d.class_name,f.type_name,a.*,e.major_id,e.major_name,e.major_type_name,
|
||||
d.class_name
|
||||
d.class_name
|
||||
from cph_good_audit as a
|
||||
left join cph_good_apply as b on a.apply_id = b.id
|
||||
left join srs_student as c on b.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
left join cph_own_good_type as f on b.type_code = f.type_code
|
||||
left join srs_majors as e on d.major_id = e.major_id
|
||||
left join cph_good_apply as b on a.apply_id = b.id
|
||||
left join srs_student as c on b.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
left join cph_own_good_type as f on b.type_code = f.type_code
|
||||
left join srs_majors as e on d.major_id = e.major_id
|
||||
<where>
|
||||
<if test="deptId != null and deptId != ''"> and e.college_id = #{deptId}</if>
|
||||
<if test="majorId != null and majorId != ''"> and d.major_id = #{majorId}</if>
|
||||
@@ -226,7 +226,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<select id="importShxs" resultType="CphGoodApplyVo" parameterType="CphSearch">
|
||||
select d.stu_year_name,e.class_name,a.stu_no,b.`name` as stu_name,c.type_name,NOW() as import_time,f.major_type_name,
|
||||
f.major_name,g.dept_name,
|
||||
f.major_name,g.dept_name,
|
||||
case
|
||||
when a.apply_status = 1 then '已提交待辅导员审核'
|
||||
when a.apply_status = 6 then '学工审核通过'
|
||||
@@ -293,7 +293,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="listXyjxjCanType" resultType="com.srs.comprehensive.domain.Vo.CphGoodTypeCode">
|
||||
select concat(b.stu_year_name,a.type_name) as type_name , a.type_code,a.stu_year_id
|
||||
from cph_own_good_type as a
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
where a.parent_code = 'XYJXJ' and enable_status = 1 and start_status = 1
|
||||
</select>
|
||||
|
||||
@@ -329,26 +329,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="getGrades" resultType="java.util.Map" parameterType="CphGoodApply">
|
||||
SELECT cph_good_apply.id as applyId,cph_good_apply.stu_no as stuNo,cph_good_apply.zzmm,cph_good_apply.born_time as bornTime
|
||||
,cph_good_apply.type_code as typeCode,cph_good_apply.class_post as classPost,
|
||||
cph_good_apply.good_his as goodHis,cph_good_apply.main_his as mainHis
|
||||
cph_good_apply.good_his as goodHis,cph_good_apply.main_his as mainHis
|
||||
,cph_good_apply.material,cph_good_apply.apply_status as applyStatus,cph_good_apply.apply_time as applyTime,
|
||||
cph_good_audit.*,cph_own_good_type.type_name as typeName,cph_own_good_type.stu_year_id as stuYearId
|
||||
,cph_good_audit.fdy_comment as fdyComment,cph_good_audit.dept_comment as deptComment,cph_good_audit.final_comment as finalComment
|
||||
,cph_good_apply.classtwo_sure as classtwoSure,cph_good_apply.youth_percent as youthPercent
|
||||
from cph_good_apply
|
||||
cph_good_audit.*,cph_own_good_type.type_name as typeName,cph_own_good_type.stu_year_id as stuYearId
|
||||
,cph_good_audit.fdy_comment as fdyComment,cph_good_audit.dept_comment as deptComment,cph_good_audit.final_comment as finalComment
|
||||
,cph_good_apply.classtwo_sure as classtwoSure,cph_good_apply.youth_percent as youthPercent
|
||||
from cph_good_apply
|
||||
LEFT JOIN cph_good_audit ON cph_good_apply.id = cph_good_audit.apply_id
|
||||
left join cph_own_good_type on cph_good_apply.type_code=cph_own_good_type.type_code
|
||||
left join cph_own_good_type on cph_good_apply.type_code=cph_own_good_type.type_code
|
||||
where stu_no = #{stuNo}
|
||||
and cph_good_apply.type_code like '%SHXS%'
|
||||
order by cph_good_apply.id desc
|
||||
</select>
|
||||
<select id="getMyApply" resultType="com.srs.comprehensive.domain.Vo.ApplyYxgbVo">
|
||||
select cpa.id, cpa.zzmm,cpa.class_post,stu_no, cpa.type_code, type_name, stu_year_name, apply_time,cpa.youth_percent,cpa.classtwo_sure,cpa.good_his,cpa.main_his, cpa.apply_status AS `status`,fdy_comment,dept_comment,final_comment
|
||||
from cph_good_apply cpa
|
||||
left join cph_good_audit cga on cpa.id = cga.apply_id
|
||||
left join cph_own_good_type cogt on cpa.type_code = cogt.type_code
|
||||
left join srs_stu_year ssy on cogt.stu_year_id = ssy.id
|
||||
where stu_no = #{username}
|
||||
and cpa.type_code like '%YXXSGB%'
|
||||
select cpa.id, cpa.zzmm,cpa.class_post,stu_no, cpa.type_code, type_name, stu_year_name, apply_time,cpa.youth_percent,cpa.classtwo_sure,cpa.good_his,cpa.main_his, cpa.apply_status AS `status`,fdy_comment,dept_comment,final_comment
|
||||
from cph_good_apply cpa
|
||||
left join cph_good_audit cga on cpa.id = cga.apply_id
|
||||
left join cph_own_good_type cogt on cpa.type_code = cogt.type_code
|
||||
left join srs_stu_year ssy on cogt.stu_year_id = ssy.id
|
||||
where stu_no = #{username}
|
||||
and cpa.type_code like '%YXXSGB%'
|
||||
order by cpa.id desc
|
||||
</select>
|
||||
|
||||
@@ -356,21 +356,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select t2.* ,sc.class_name,
|
||||
(select count(1) from srs_student where `status` = '01' and class_id = sc.class_id) as class_count,
|
||||
(select count(1) from srs_student as f1
|
||||
left join srs_class as f2 on f1.class_id = f2.class_id
|
||||
left join srs_class as f2 on f1.class_id = f2.class_id
|
||||
where f1.`status` = '01' and f2.major_id = sc.major_id and f2.grade_id = sc.grade_id) as major_count
|
||||
from
|
||||
(select t1.* from (
|
||||
select a.stu_no,a.stu_year_id,b.stu_year_name,a.stu_score,a.cph_score,a.sport_score,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.cph_score DESC ) as cph_class_rank,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_class_rank,
|
||||
RANK() OVER(PARTITION BY d.major_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_major_rank
|
||||
from cph_total_score as a
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
left join srs_student as c on a.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
)as t1
|
||||
where t1.stu_no = #{stuNo}
|
||||
and t1.stu_year_id = (
|
||||
select a.stu_no,a.stu_year_id,b.stu_year_name,a.stu_score,a.cph_score,a.sport_score,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.cph_score DESC ) as cph_class_rank,
|
||||
RANK() OVER(PARTITION BY c.class_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_class_rank,
|
||||
RANK() OVER(PARTITION BY d.major_id,a.stu_year_id,d.grade_id ORDER BY a.stu_score DESC ) as stu_major_rank
|
||||
from cph_total_score as a
|
||||
left join srs_stu_year as b on a.stu_year_id = b.id
|
||||
left join srs_student as c on a.stu_no = c.stu_no
|
||||
left join srs_class as d on c.class_id = d.class_id
|
||||
)as t1
|
||||
where t1.stu_no = #{stuNo}
|
||||
and t1.stu_year_id = (
|
||||
select stu_year_id from cph_own_good_type where type_code = #{code}
|
||||
))as t2
|
||||
left join srs_student as ss on t2.stu_no = ss.stu_no
|
||||
@@ -402,7 +402,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="material != null">material,</if>
|
||||
<if test="classtwoSure != null">classtwo_sure,</if>
|
||||
<if test="youthPercent != null">youth_percent,</if>
|
||||
</trim>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="stuNo != null">#{stuNo},</if>
|
||||
<if test="zzmm != null">#{zzmm},</if>
|
||||
@@ -425,7 +425,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="material != null">#{material},</if>
|
||||
<if test="classtwoSure != null">#{classtwoSure},</if>
|
||||
<if test="youthPercent != null">#{youthPercent},</if>
|
||||
</trim>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateCphGoodApply" parameterType="CphGoodApply">
|
||||
@@ -467,7 +467,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="countJwcUnDo" resultType="String">
|
||||
<select id="countJwcUnDo" resultType="String">
|
||||
select concat('good-',count(a.id)) as `all`
|
||||
from cph_good_apply as a
|
||||
where a.apply_status = 3
|
||||
@@ -491,6 +491,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select concat('zx-',count(a.id)) as `all`
|
||||
from srs_zxj_apply as a
|
||||
where a.`step` = 3
|
||||
<!-- 知无涯 教务困难资助-->
|
||||
union
|
||||
select concat('knzz-',count(a.id)) as `all`
|
||||
from knzz_tufa_apply as a
|
||||
where a.apply_status = 1
|
||||
/*宁博 6、困难资助-国家励志奖学金-学工审核代办*/
|
||||
union
|
||||
select concat('knzzgl-',count(a.id)) as `all`
|
||||
from knzz_gl_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1
|
||||
</select>
|
||||
|
||||
<select id="countStuUnDo" resultType="String" parameterType="String">
|
||||
@@ -517,99 +528,140 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select concat('zx-',count(a.id)) as `all`
|
||||
from srs_zxj_apply as a
|
||||
where a.`step` = 4 and a.xh = #{stuNo}
|
||||
<!-- 知无涯 学生困难资助申请驳回-->
|
||||
union
|
||||
select concat('knzz-',count(a.id)) as `all`
|
||||
from knzz_tufa_apply as a
|
||||
where a.apply_status = 6 and a.stu_no = #{stuNo}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="countXwUnDo" resultType="String" parameterType="Long">
|
||||
select concat('good-',count(a.id)) as `all`
|
||||
from cph_good_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 2 and b.dept_id = #{id}
|
||||
union
|
||||
select concat('lake-',count(a.id)) as `all`
|
||||
from cph_lake_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 2 and b.dept_id = #{id}
|
||||
union
|
||||
select concat('biye-',count(a.id)) as `all`
|
||||
from cph_biye_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 2 and b.dept_id = #{id}
|
||||
union
|
||||
select concat('dms-',count(a.id)) as `all`
|
||||
from dms_manage_application as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.`status` = 1 and b.dept_id = #{id}
|
||||
union
|
||||
select concat('kn-',count(a.id)) as `all`
|
||||
from srs_knrd_apply as a
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
where a.`step` = 3 and b.dept_id = #{id}
|
||||
and
|
||||
EXISTS(
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='stumanger' and m.component = 'poverty/povertyapply/xw'
|
||||
)
|
||||
and
|
||||
EXISTS(
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='stumanger' and m.component = 'poverty/povertyapply/xw'
|
||||
)
|
||||
union
|
||||
select concat('zx-',count(a.id)) as `all`
|
||||
from srs_zxj_apply as a
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
where a.`step` = 2 and b.dept_id = #{id}
|
||||
and
|
||||
EXISTS(
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='stumanger' and m.component = 'poverty/xw'
|
||||
)
|
||||
and
|
||||
EXISTS(
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='stumanger' and m.component = 'poverty/xw'
|
||||
)
|
||||
<!-- 知无涯 学务困难资助 -->
|
||||
union
|
||||
select concat('knzz-',count(a.id)) as `all`
|
||||
from knzz_tufa_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.dept_id = #{id}
|
||||
/*宁博 6、困难资助-国家励志奖学金-学务审核代办*/
|
||||
union
|
||||
select concat('knzzgl-',count(a.id)) as `all`
|
||||
from knzz_gl_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.dept_id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="countFdyUnDo" resultType="String" parameterType="String">
|
||||
select concat('good-',count(a.id)) as `all`
|
||||
from cph_good_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('lake-',count(a.id)) as `all`
|
||||
from cph_lake_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('biye-',count(a.id)) as `all`
|
||||
from cph_biye_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('dms-',count(a.id)) as `all`
|
||||
from dms_manage_application as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.`status` = 0 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('kn-',count(a.id)) as `all`
|
||||
from srs_knrd_apply as a
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
where a.`step` = 2 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('zx-',count(a.id)) as `all`
|
||||
from srs_zxj_apply as a
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
left join view_stu_info as b on a.xh = b.stu_no
|
||||
where a.`step` = 1 and b.t_no = #{tNo}
|
||||
union
|
||||
select concat('qgzxgw-',count(a.id)) as `all`
|
||||
from qgzx_stu_post as a
|
||||
left join qgzx_post as b on a.post_id = b.id
|
||||
left join sys_dept as c on b.dept_code = c.dept_code
|
||||
left join view_stu_info as d on a.stu_no = d.stu_no
|
||||
left join qgzx_post as b on a.post_id = b.id
|
||||
left join sys_dept as c on b.dept_code = c.dept_code
|
||||
left join view_stu_info as d on a.stu_no = d.stu_no
|
||||
where b.zdls_no = #{tNo} and a.apply_status = '1'
|
||||
union
|
||||
select concat('qgzxgzjl-',count(a.id)) as `all`
|
||||
from qgzx_stu_post as a
|
||||
left join qgzx_post as b on a.post_id = b.id
|
||||
left join sys_dept as c on b.dept_code = c.dept_code
|
||||
left join view_stu_info as d on a.stu_no = d.stu_no
|
||||
left join qgzx_post as b on a.post_id = b.id
|
||||
left join sys_dept as c on b.dept_code = c.dept_code
|
||||
left join view_stu_info as d on a.stu_no = d.stu_no
|
||||
where b.zdls_no = #{tNo} and a.apply_status = '1'
|
||||
<!-- 知无涯 辅导员困难资助-->
|
||||
union
|
||||
select concat('knzz-',count(a.id)) as `all`
|
||||
from knzz_tufa_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.t_no = #{tNo}
|
||||
<!-- 知无涯 统计待审核的离校申请 -->
|
||||
union
|
||||
select concat('leave-',count(a.return_school_id)) as `all`
|
||||
from sur_itinerary as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.leave_status = 1 and b.t_no = #{tNo}
|
||||
/*宁博 10、假期去向-学生返校-辅导员审核代办*/
|
||||
union
|
||||
select concat('return-',count(a.return_school_id)) as `all`
|
||||
from sur_itinerary as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.status = '1' and b.t_no = #{tNo}
|
||||
/*宁博 6、困难资助-国家励志奖学金-辅导员审核代办*/
|
||||
union
|
||||
select concat('knzzgl-',count(a.id)) as `all`
|
||||
from knzz_gl_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.t_no = #{tNo}
|
||||
</select>
|
||||
|
||||
|
||||
@@ -628,11 +680,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where a.penalty_status=3 and b.dept_id = #{id}
|
||||
and
|
||||
EXISTS(
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='Junior_college_leader'
|
||||
)
|
||||
SELECT m.* FROM sys_role r
|
||||
LEFT JOIN sys_role_menu rm on r.role_id = rm.role_id
|
||||
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
|
||||
where r.role_key ='Junior_college_leader'
|
||||
)
|
||||
<!-- 知无涯 书记困难资助-->
|
||||
union
|
||||
select concat('knzz-',count(a.id)) as `all`
|
||||
from knzz_tufa_apply as a
|
||||
left join view_stu_info as b on a.stu_no = b.stu_no
|
||||
where a.apply_status = 1 and b.dept_id = #{id}
|
||||
|
||||
</select>
|
||||
|
||||
|
@@ -89,7 +89,7 @@ private static final long serialVersionUID=1L;
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("学院")
|
||||
@TableField("dept_name=false")
|
||||
@TableField(exist=false)
|
||||
@Excel(name = "学院")
|
||||
private String deptName;
|
||||
|
||||
|
@@ -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;
|
||||
}
|
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.srs.system.domain.QgzxTeacher;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 教职工信息Mapper接口
|
||||
@@ -59,4 +60,8 @@ public interface QgzxTeacherMapper extends BaseMapper<QgzxTeacher> {
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteQgzxTeacherByTeacherIds(Long[] teacherIds);
|
||||
|
||||
public List<QgzxTeacher> selectTeacherList();
|
||||
Long selectDeptCode(String ksh);
|
||||
Integer insertBatchSomeColumn(@Param("list")List<QgzxTeacher> entityList);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
}
|
||||
|
@@ -39,7 +39,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectQgzxTeacherVo"/>
|
||||
where teacher_id = #{teacherId}
|
||||
</select>
|
||||
|
||||
<select id="selectTeacherList" resultType="com.srs.system.domain.QgzxTeacher">
|
||||
select * from qgzx_teacher
|
||||
</select>
|
||||
<select id="selectDeptCode" resultType="java.lang.Long">
|
||||
select a.dept_id
|
||||
from sys_dept as a
|
||||
where dept_code = #{ksh}
|
||||
</select>
|
||||
<insert id="insertQgzxTeacher" parameterType="QgzxTeacher" useGeneratedKeys="true" keyProperty="teacherId">
|
||||
insert into qgzx_teacher
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
@@ -65,6 +72,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<insert id="insertBatchSomeColumn">
|
||||
insert into qgzx_teacher(name,gender,age,employee_id,dept_id,status,create_time)
|
||||
values
|
||||
<foreach item="entity" collection="List" separator="," open="(" close=")">
|
||||
(
|
||||
<if test="entity.name != null and entity.name != ''">#{entity.name},</if>
|
||||
<if test="entity.gender != null and entity.gender != ''">#{entity.gender},</if>
|
||||
<if test="entity.age!=null">#{entity.age},</if>
|
||||
<if test="entity.employeeId != null and entity.employeeId != ''">#{entity.employeeId},</if>
|
||||
<if test="entity.deptId!=null">#{entity.deptId},</if>
|
||||
<if test="entity.status != null and entity.status != ''">#{entity.status},</if>
|
||||
<if test="entity.createTime!=null">#{entity.createTime},</if>
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<update id="updateQgzxTeacher" parameterType="QgzxTeacher">
|
||||
update qgzx_teacher
|
||||
|
@@ -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>
|
@@ -8,6 +8,8 @@ import com.srs.common.core.domain.entity.SysUser;
|
||||
import com.srs.common.enums.QgzxApplyStatus;
|
||||
import com.srs.comprehensive.domain.CphTeacher;
|
||||
import com.srs.comprehensive.mapper.CphTeacherMapper;
|
||||
import com.srs.system.domain.QgzxTeacher;
|
||||
import com.srs.system.mapper.QgzxTeacherMapper;
|
||||
import com.srs.system.mapper.SysDeptMapper;
|
||||
import com.srs.system.mapper.SysUserMapper;
|
||||
import com.srs.workstudy.domain.QgzxMoney;
|
||||
@@ -61,6 +63,8 @@ public class QgzxPostServiceImpl extends ServiceImpl<QgzxPostMapper,QgzxPost> im
|
||||
|
||||
@Autowired
|
||||
private CphTeacherMapper _teacherMapper;
|
||||
@Autowired
|
||||
private QgzxTeacherMapper _qgzxteacherMapper;
|
||||
|
||||
@Autowired
|
||||
private SysUserMapper _userMapper;
|
||||
@@ -383,10 +387,14 @@ public class QgzxPostServiceImpl extends ServiceImpl<QgzxPostMapper,QgzxPost> im
|
||||
}
|
||||
}
|
||||
|
||||
QueryWrapper<CphTeacher> fzrQuery = new QueryWrapper<>();
|
||||
fzrQuery.eq("employee_id", param.fzrNo)
|
||||
.last("limit 1");
|
||||
CphTeacher fzr = _teacherMapper.selectOne(fzrQuery);
|
||||
// QueryWrapper<CphTeacher> fzrQuery = new QueryWrapper<>();
|
||||
// fzrQuery.eq("employee_id", param.fzrNo)
|
||||
// .last("limit 1");
|
||||
// CphTeacher fzr = _teacherMapper.selectOne(fzrQuery);
|
||||
QueryWrapper<QgzxTeacher> fzrQuery = new QueryWrapper<>();
|
||||
fzrQuery.eq("employee_id", param.fzrNo)
|
||||
.last("limit 1");
|
||||
QgzxTeacher fzr = _qgzxteacherMapper.selectOne(fzrQuery);
|
||||
if (fzr == null) {
|
||||
throw new Exception("负责人工号不存在");
|
||||
} else {
|
||||
@@ -437,10 +445,14 @@ public class QgzxPostServiceImpl extends ServiceImpl<QgzxPostMapper,QgzxPost> im
|
||||
}
|
||||
}
|
||||
|
||||
QueryWrapper<CphTeacher> fzrQuery = new QueryWrapper<>();
|
||||
// QueryWrapper<CphTeacher> fzrQuery = new QueryWrapper<>();
|
||||
// fzrQuery.eq("employee_id", param.fzrNo)
|
||||
// .last("limit 1");
|
||||
// CphTeacher fzr = _teacherMapper.selectOne(fzrQuery);
|
||||
QueryWrapper<QgzxTeacher> fzrQuery = new QueryWrapper<>();
|
||||
fzrQuery.eq("employee_id", param.fzrNo)
|
||||
.last("limit 1");
|
||||
CphTeacher fzr = _teacherMapper.selectOne(fzrQuery);
|
||||
QgzxTeacher fzr = _qgzxteacherMapper.selectOne(fzrQuery);
|
||||
if (fzr == null) {
|
||||
throw new Exception("负责人工号不存在");
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user