feat: 提交校园智能助手后端工程源码(Spring Boot 2.7.18 + 平台 starter + JPA + Nacos)
build / build-push (push) Successful in 40s
build / build-push (push) Successful in 40s
- com.yunhai.agent,端口 8093,context-path /agent,制品 target/agent.jar;与 NoticeService 同构 - CAS 单点登录 + 三层角色权限(学生/教师/管理员/访客)+ 会话与工具调用审计落库 - DeepSeek 大模型编排 + 7 个业务模块工具(请假/公告/宿舍/活动/作业/资源库/教师发展) - 浏览器代执行协议(服务端挂起 → 前端用登录态代调 → toolResult 续跑)+ 调用失败深链兜底 - 登出修复:服务端真正 session.invalidate() + 前端两步登出 + logout-guard - 保留 projman 注入的 .gitea/workflows/build.yml 与 docker/Dockerfile;docker/application-prod.yml、run-app.sh 随工程入库
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
package com.yunhai.agent.tool.defs;
|
||||
|
||||
import com.yunhai.agent.tool.ToolDef;
|
||||
import com.yunhai.agent.tool.ToolParam;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 校园公告(校园通知)模块工具 —— 后端 CampusAnnouncement / NoticeFront,前缀 /api/notice。
|
||||
*/
|
||||
public final class CampusNoticeTools {
|
||||
|
||||
public static final String MODULE = "campusnotice";
|
||||
|
||||
private CampusNoticeTools() {
|
||||
}
|
||||
|
||||
public static List<ToolDef> defs() {
|
||||
List<ToolDef> list = new ArrayList<>();
|
||||
|
||||
list.add(ToolDef.of("notice.received", MODULE, "我收到的公告",
|
||||
"分页查询当前用户收到的校园公告。用户问“最近有什么通知”“有没有未读公告”时用它。",
|
||||
"GET", "/api/notice/List")
|
||||
.p(ToolParam.optional("pageIndex", "integer", "页码,从 1 开始").dft("1"),
|
||||
ToolParam.optional("pageSize", "integer", "每页条数,默认 10").dft("10"),
|
||||
ToolParam.optional("keyword", "string", "标题关键词"),
|
||||
ToolParam.optional("type", "integer", "重要程度:1 普通 / 2 重要"),
|
||||
ToolParam.optional("readType", "integer", "阅读状态:0 全部 / 1 未读 / 2 已读"))
|
||||
.readAt("/")
|
||||
.modId(null));
|
||||
|
||||
list.add(ToolDef.of("notice.readTabCount", MODULE, "公告未读统计",
|
||||
"查询当前用户公告的已收总数 / 未读数 / 已读数(回答“我还有几条没看”)。",
|
||||
"GET", "/api/notice/ReadTabCount")
|
||||
.readAt("/"));
|
||||
|
||||
list.add(ToolDef.of("notice.sent", MODULE, "我发出的公告",
|
||||
"分页查询我发布(或有权限查看)的公告,可按状态筛选(草稿/已发布/待审批/已驳回)。",
|
||||
"GET", "/api/notice/SendList")
|
||||
.p(ToolParam.optional("pageIndex", "integer", "页码").dft("1"),
|
||||
ToolParam.optional("pageSize", "integer", "每页条数").dft("10"),
|
||||
ToolParam.optional("scope", "string", "传 user 只查自己发布的"),
|
||||
ToolParam.optional("status", "integer", "0 草稿 / 1 已发布 / 2 待审批 / 3 已驳回"),
|
||||
ToolParam.optional("keyword", "string", "标题关键词"))
|
||||
.readAt("/list")
|
||||
.modId(null));
|
||||
|
||||
list.add(ToolDef.of("notice.detail", MODULE, "公告详情",
|
||||
"查看一条公告的正文、附件与已读情况。",
|
||||
"GET", "/api/notice/Detail")
|
||||
.p(ToolParam.required("serid", "integer", "公告 id"),
|
||||
ToolParam.optional("type", "integer", "1 查看并标记已读(默认) / 0 仅查看不标读").dft("1"))
|
||||
.readAt("/"));
|
||||
|
||||
list.add(ToolDef.of("notice.deptDics", MODULE, "发文部门字典",
|
||||
"查询可选的发文部门(发布公告时填 deptId 用)。",
|
||||
"GET", "/api/dict/List")
|
||||
.fix("type", "1")
|
||||
.readAt("/list/new"));
|
||||
|
||||
list.add(ToolDef.of("notice.publish", MODULE, "发布校园公告",
|
||||
"发布一条校园公告。调用前必须确认:标题 title、正文 content、发文部门 deptId;"
|
||||
+ "缺失就问用户,不要编造部门。",
|
||||
"POST_JSON", "/api/notice/Create")
|
||||
.p(ToolParam.required("title", "string", "公告标题")
|
||||
.label("公告标题").eg("关于国庆假期安排的通知"),
|
||||
ToolParam.required("content", "string", "公告正文(纯文本)")
|
||||
.label("公告正文").as("textarea").eg("各位老师、同学:经学校研究决定……"),
|
||||
ToolParam.required("deptId", "string", "发文部门 id,来自 notice.deptDics")
|
||||
.label("发文部门").optionsFrom("notice.deptDics"),
|
||||
ToolParam.optional("deptName", "string", "发文部门名称")
|
||||
.label("发文部门名称"),
|
||||
ToolParam.optional("type", "integer", "重要程度")
|
||||
.label("重要程度").dft("1")
|
||||
.options(new String[]{"1", "2"}, new String[]{"普通", "重要"}),
|
||||
ToolParam.optional("receiptFlag", "integer", "是否需要阅读回执")
|
||||
.label("需要阅读回执").dft("0")
|
||||
.options(new String[]{"0", "1"}, new String[]{"否", "是"}),
|
||||
ToolParam.optional("smsFlag", "integer", "是否同时发短信")
|
||||
.label("同时发短信").dft("0")
|
||||
.options(new String[]{"0", "1"}, new String[]{"否", "是"}),
|
||||
ToolParam.optional("publishType", "string", "发布方式")
|
||||
.label("发布方式").dft("direct")
|
||||
.options(new String[]{"direct", "draft", "approve"},
|
||||
new String[]{"直接发布", "存草稿", "提交审批"}))
|
||||
.write("/list/new")
|
||||
.modId(null));
|
||||
|
||||
list.add(ToolDef.of("notice.approvalList", MODULE, "待我审批的公告",
|
||||
"查询待我审批的公告列表(公告审批中心)。",
|
||||
"GET", "/api/notice/ApprovalList")
|
||||
.readAt("/approval")
|
||||
.p(ToolParam.optional("status", "string", "pending 待审批(默认) / approved 已通过 / rejected 已驳回 / all 全部").dft("pending"),
|
||||
ToolParam.optional("pageIndex", "integer", "页码").dft("1"),
|
||||
ToolParam.optional("pageSize", "integer", "每页条数").dft("10")));
|
||||
|
||||
list.add(ToolDef.of("notice.approve", MODULE, "通过公告审批",
|
||||
"审批通过一条公告(末步通过即真实发布)。",
|
||||
"POST_FORM", "/api/notice/Approve")
|
||||
.p(ToolParam.required("serid", "integer", "公告 id")
|
||||
.label("公告"),
|
||||
ToolParam.optional("opinion", "string", "审批意见")
|
||||
.label("审批意见").as("textarea").eg("内容符合要求,同意发布"))
|
||||
.write("/approval")
|
||||
.modId(null));
|
||||
|
||||
list.add(ToolDef.of("notice.reject", MODULE, "驳回公告审批",
|
||||
"驳回一条公告审批(意见必填,会退回发布人)。",
|
||||
"POST_FORM", "/api/notice/Reject")
|
||||
.p(ToolParam.required("serid", "integer", "公告 id")
|
||||
.label("公告"),
|
||||
ToolParam.required("remark", "string", "驳回意见")
|
||||
.label("驳回意见").as("textarea").eg("标题表述不清,请修改后重新提交"))
|
||||
.write("/approval")
|
||||
.modId(null));
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user