账权平台

项目技术说明书
版本 1.0.0 2026-08-05 cn.apes

目录

  1. 项目概述
  2. 系统架构
  3. 后端服务 (saas-service)
  4. 前端应用 (saas-web)
  5. 核心功能模块
  6. LLM / AI Agent 平台
  7. 多租户与权限体系
  8. API 接口概览
  9. 部署与配置
  10. 项目目录结构

1项目概述

账权平台是一套面向农业产业链的 多租户 SaaS 综合管理平台,涵盖智慧农业、产品溯源、自助过磅、AI 智能助手等核心业务域。平台采用前后端分离架构,后端基于 Spring Boot + MyBatis Plus,前端基于 Vue 2 + Element UI,通过多租户动态数据源实现企业级数据隔离。

62
后端 Controller
85+
前端页面
10+
业务模块
85+
Mapper 接口

项目组成

子项目技术栈说明端口
saas-service Java 11 / Spring Boot 2.2.1 后端服务,提供全部 REST API 7777(生产) / 8202(开发)
saas-web Vue 2.7 / Element UI 2.15 前端管理控制台 8201(开发)

核心业务域

智慧农业
园区/地块/作物管理、灌溉计划、水肥一体机、电磁阀控制、农事计划、投入品管理、设备数据上报、摄像头监控
产品溯源
溯源码生成与绑定、码货关联、采收/加工/质检全链条、仓储出入库、物流追踪、溯源大屏
自助过磅
车辆/司机/IC卡管理、北斗卡借还追踪、称重票据、报警规则、过磅工作台、小票打印
AI Agent 平台
多厂商 LLM 配置、Agent 编排、Groovy 动态工具、Function Calling、技能注入、多轮对话、调用审计
多租户 SaaS
企业认证、套餐配额管理、角色权限体系、SSO 单点登录、AccessToken 开放平台
伙伴云集成
伙伴云低代码平台深度对接、表结构同步、数据 CRUD 代理、SSO 登录、AMIS 页面配置

2系统架构

整体架构图

浏览器 / 移动端 / 外部系统
Nginx 反向代理
saas-web
Vue 2 + Element UI
saas-service
Spring Boot REST API
MySQL
cloud (主库)
MySQL
user (租户库)
Redis
DB7 / DB9
阿里云 OSS
文件存储
阿里云 DashScope
LLM API
伙伴云 OpenAPI
低代码平台
萤石云 API
视频监控
阿里云 ASR
语音识别
n8n
工作流引擎

技术栈总览

类别后端 (saas-service)前端 (saas-web)
核心框架Spring Boot 2.2.1 / Java 11Vue 2.7.14
路由/状态Vue Router 3.5 / Vuex 3.1
ORM / 数据MyBatis Plus 3.5.7 + 动态数据源 3.6.1
UI 组件Element UI 2.15.13
缓存Redis + Redisson 3.35.0localStorage
HTTPSpring MVCAxios 0.18.1
对象存储阿里云 OSS SDK 3.17.4
LLM / AIDashScope (OpenAI 兼容) + Groovy 3.0.19Monaco Editor / marked / highlight.js
WebSocketSpring WebSocket + Java-WebSocket原生 WebSocket (ASR)
工具库Hutool 5.8.16 / Lombok / Apache POIECharts 5.4 / 高德地图 / WangEditor
构建工具MavenVue CLI 4.4.4 / Webpack

3后端服务 (saas-service)

3.1 基本信息

GroupId / ArtifactIdcn.apes / saas-service
版本1.0.0-SNAPSHOT
主启动类cn.apes.CloudApplication(启用 @EnableAsync / @EnableScheduling)
根包cn.apes.cloud
生产端口7777
开发端口8202

3.2 包结构

cn.apes.cloud ├── config/ # 配置类(12个):RedissonConfig, OssConfig, DataSourceConfig... ├── controller/ # REST 控制器(62个) │ └── traceability/ # 溯源模块控制器(9个) ├── domain/ # 数据模型层 │ ├── entity/ # 核心实体(43个) │ ├── dto/ # 数据传输对象(35个) │ ├── vo/ # 视图对象(5个) │ ├── huoban/ # 伙伴云数据模型(11个) │ ├── traceability/ # 溯源数据模型(22个) │ └── weight/ # 称重数据模型(13个) ├── filter/ # AccessToken 鉴权过滤器 ├── groovy/ # Groovy 脚本执行引擎 │ ├── GroovyExecutorService.java # 编译+缓存+执行 │ ├── GroovyToolExecutor.java # 工具接口 │ └── JsonSchemaValidator.java # 入参校验 ├── mapper/ # MyBatis Mapper(85个) │ └── traceability/ # 溯源 Mapper(20个) ├── service/ # 业务逻辑层 │ ├── impl/ # 服务实现(90个) │ │ └── huoban/ # 伙伴云服务(6个) ├── task/ # 定时任务(摄像头抓图) ├── util/ # 工具类 └── websocket/ # ASR 语音识别 WebSocket 代理

3.3 数据源配置

采用 baomidou dynamic-datasource 实现多数据源动态切换,通过自定义 @TenantSource 注解 + AOP 切面,根据请求头 X-Tenant-ID 自动切换数据源。

数据源目标数据库用途
cloud(主库)MySQL 192.168.1.161:3306/cloud平台核心数据(用户、企业、权限、LLM 配置等)
user(租户库)MySQL 192.168.1.161:3306/user租户业务数据(溯源、农业、称重等)
huoban伙伴云 MySQL直连伙伴云数据库(数据同步/CRUD)
多租户切换原理:请求头 X-Tenant-ID 值为 user/zx/plant 时,DataSourceHeaderAspect 切面自动调用 DynamicDataSourceContextHolder.push() 切换到对应数据源。默认使用 user 数据源。

3.4 核心配置类

配置类功能
RedissonConfigurationRedisson 客户端,DB7(主业务)+ DB9(辅助),JsonJackson 编解码
OssConfiguration阿里云 OSS,桶 zq-cloud,区域 oss-cn-beijing
DataSourceHeaderAspect多租户数据源切换 AOP 切面
AccessTokenFilterConfigAccessToken 外部 API 鉴权过滤器注册
WebSocketConfigASR 语音识别 WebSocket 端点 /asr/ws

3.5 定时任务

摄像头定时抓图 (CameraCaptureTask)
每小时执行一次,遍历所有摄像头调用萤石云 API 抓图,记录成功/失败统计日志。

4前端应用 (saas-web)

4.1 基本信息

项目名称saas-web(账权平台)
框架Vue 2.7.14 + Vue Router 3.5.2 (History 模式) + Vuex 3.1.0
UI 组件库Element UI 2.15.13(中文语言包)
构建工具Vue CLI 4.4.4 + Webpack + Sass
开发端口8201(host: 0.0.0.0)
输出目录saas-web

4.2 目录结构

src/ ├── main.js # 应用入口 ├── App.vue # 根组件 ├── api/ # API 接口层(35个文件) ├── assets/ # 静态资源 ├── components/ # 公共组件(面包屑/标签页/AI助手/大屏组件等) ├── config/ # 全局配置 ├── layout/ # 布局(TopHeader + Sidebar + TagsView) ├── router/ # 路由配置(静态路由 + 动态路由注册) ├── store/ # Vuex(user / settings / tagsView) ├── styles/ # 全局样式(SCSS 变量/Mixin/Element UI 覆盖) ├── utils/ # 工具函数(16个文件) └── views/ # 页面视图(85+文件,41个子目录)

4.3 布局架构

layout/index.vue(主布局容器)
TopHeader
Logo + 应用Tab + 用户菜单
Sidebar
三级树形菜单
el-main
TagsView + keep-alive
router-view(页面内容)
iframeView(内嵌页面)
独立大屏页面noLayout: true)不使用主布局,可脱离侧栏/顶栏独立访问,支持通过 URL Token 参数从外部系统直接跳转。包括:智慧农业大屏、武鸣沃柑大脑、溯源大屏。

4.4 动态路由系统

前端路由分为静态路由(登录/注册/认证等)和动态路由两部分。动态路由通过 menuApi.handleMenu() 根据后端返回的菜单数据动态注册:

menuType类型路由前缀加载方式
1普通页面/common/{menuPath}动态 import vuePath 组件
2伙伴云内嵌/common/huoban/{id}加载 huoban/index 组件
3支付页面/common/payment/{id}加载 payment/index 组件
4Web 内嵌/common/web/{id}加载 web/index 组件

4.5 Vuex 状态管理

模块核心 State说明
user loginUser, menuList, currentCustomer, huobanToken, appList, currentApp, allAppMenus 用户登录态、企业信息、菜单树、多应用切换
settings sidebarCollapsed 侧栏折叠状态
tagsView visitedViews, cachedViews 标签页管理,支持 localStorage 持久化

4.6 第三方库

ECharts 5.4
数据可视化图表,用于大屏和报表
高德地图
园区地图标注、物流轨迹追踪
Monaco Editor
VS Code 内核代码编辑器,支持 Java/Groovy/JSON/SQL 语法高亮
WangEditor
富文本编辑器,用于内容编辑
html2canvas
网页截图,用于大屏导出
marked + highlight.js
Markdown 渲染 + 代码高亮,用于 AI 对话展示
qrcodejs2
二维码生成,用于溯源码
萤石云 SDK
视频监控实时流播放

5核心功能模块

5.1 用户与企业认证

5.2 智慧农业(飞翼)

5.3 产品溯源

5.4 自助过磅

5.5 套餐与配额管理

5.6 伙伴云集成

6LLM / AI Agent 平台

平台内置完整的 LLM Agent 管理引擎,支持多厂商模型配置、Agent 编排、Groovy 动态工具、Function Calling 多轮对话、技能注入和全链路审计。

6.1 架构层次

Agent 配置 (LlmAgentConfig)
System Prompt / User Prompt / Output Type
厂商配置
LlmProviderConfig
模型配置
LlmModelConfig
关联工具
LlmAgentTool → LlmTool
关联技能
LlmAgentSkill → AiSkill
LLM 调用 (DashScope OpenAI 兼容 API)
多轮对话 + Function Calling(最多10轮)
GroovyExecutorService
动态编译执行工具脚本
LlmConversationMessage
消息持久化
LlmCallLog
调用日志审计
LlmToolLog
工具执行日志

6.2 核心能力

多厂商模型配置
支持配置多个 LLM 厂商(API Key、BaseUrl),每个厂商下可配置多个模型(chat/embedding/image),支持视觉模型
Function Calling
自动检测 LLM 返回的 tool_calls,执行对应 Groovy 工具脚本,将结果回传给 LLM 继续推理,最多 10 轮防止死循环
Groovy 动态工具
使用 GroovyClassLoader 动态编译脚本,编译结果缓存(ConcurrentHashMap),支持 JSON Schema 入参校验,无需重启即可添加新工具
技能系统
AiSkill 技能内容注入 System Prompt,为 Agent 提供领域知识,一个 Agent 可关联多个技能
多轮对话
LlmConversation 会话管理 + LlmConversationMessage 消息持久化,支持 system/user/assistant/tool_call/tool_result 多种消息类型
提示词模板
支持 {{variable}} 格式的变量替换,通过 userParams 传入动态参数
多模态输入
支持图片 URL(image_url)和视频 URL(video_url)输入,兼容视觉理解模型
输出类型控制
支持 text / json / markdown 三种输出格式,通过 response_format 控制
全链路审计
LlmCallLog 记录每次调用的 Token 用量、耗时、状态;LlmToolLog 记录工具执行的输入/输出/耗时/错误
ASR 语音识别
WebSocket 代理阿里云实时 ASR(fun-asr-realtime),PCM 16kHz 音频流式传输,前端实时显示转写结果

6.3 前端 AI 页面

页面路径功能
智能对话/ai/chat多轮对话界面,支持图片/视频上传、Markdown 渲染
Agent 配置/system/agentAgent CRUD、工具/技能关联、调试
模型管理/system/model厂商/模型配置
工具管理/system/toolGroovy 工具脚本编辑(Monaco Editor)+ 执行测试
技能管理/system/skillAI 技能 CRUD
对话历史/ai/conversation会话列表 + 消息详情
调用日志/system/callLogLLM 调用日志查询 + 统计

7多租户与权限体系

7.1 多租户架构

实现方式:基于 baomidou dynamic-datasource + 自定义 @TenantSource 注解 + AOP 切面,通过 HTTP 请求头 X-Tenant-ID 实现透明数据源切换。
租户标识数据源说明
user(默认)user 数据库标准租户业务数据
zxzx 数据库专线租户
plantplant 数据库种植租户

7.2 权限体系

套餐 (PackagePlan)
应用 (App)
菜单 (Menu)
权限 (Permission)
角色 (Role)
成员 (Member)

7.3 AccessToken 开放平台

为外部系统提供安全的 API 调用机制:

8API 接口概览

后端共 62 个 Controller,提供 300+ REST API 端点。所有接口前缀为 /api/user-service/(通过 Nginx 代理)。

8.1 接口模块总览

模块主要 Controller路径前缀核心端点
用户认证UserController/userloginPwd, register, getCurrentUser, selectCustomer, certifyEnterprise
CommonController/commonupload, code2Session, huobanWebLogin
客户管理CustomerController/customerpageCustomer, saveCustomer, employee/page, auditCertification, syncTenantsToHuoban
权限管理PermissionController/permissioncurrentMenus, getMyPermissionCodes, saveRole, setRolePermission, setMemberRole
AccessTokenAccessTokenController/sysAccessTokencreate, page, revoke, regenerate
LLM / AILlmChatController/llmChatstart(新对话), continue(多轮对话)
LlmAgentConfigController/llmAgentpage, add, update, delete, debug, call/{id}
LlmProviderConfigController/llmProviderpage, add, update, delete, list
LlmModelConfigController/llmModelpage, add, update, delete, list
LlmToolController + GroovyToolExecuteController/llmToolCRUD, execute(执行 Groovy 脚本), clearCache
LlmConversationController/llmConversationadd, detail, listByAgent, messages, close, delete
LlmCallLogController/llmCallLogpage, detail, statistics, batchDelete
伙伴云HuobanController / Huoban2Controller/huoban / /huoban2syncTables, data, create, update, upsert, webLogin, automationCall
溯源TraceCodeController/trace/codetask/generate, list/bind, bind/batchImport, relation/add
TraceCategoryController/trace/category分类 CRUD
TraceWarehouseController/trace/warehouse入库/出库 CRUD
TraceQualityController/trace/quality质检 CRUD
智慧农业FeiParkInfoController / PlotInfoController/park / /fei/plot园区/地块 CRUD
FeiIrrigationPlanController/irrigation/plan灌溉计划 CRUD + toggle 开关
FeiFertigationDeviceController/fertigation-device设备 CRUD, dosing(加药), save-layout
称重WeightController/weightticket(磅单), device, driver, card, beidou, alarmRule
套餐配额CustomerPackageController/customerPackagemyPackages, increaseQuota, decreaseQuota, submitExtendApply
开放平台OpenController/opentrackingConfig/getByCustomerId, customerPackage/decreaseQuota

8.2 前端 API 代理配置

代理前缀目标路径重写
/api/user-servicehttp://localhost:8202^/api/user-service/
/n8nhttps://n8n.ccoop.cc^/n8n""

9部署与配置

9.1 后端部署

配置项生产环境 (prod)开发环境 (local)
服务端口77778202
主数据源192.168.1.161:3306/cloud192.168.31.201:3389/cloud
伙伴云数据源192.168.1.161:3306/user192.168.31.201:3389/user
Redis192.168.1.165:6403, DB7192.168.31.201:7890, DB7
OSSoss-cn-beijing.aliyuncs.com, bucket: zq-cloud
伙伴云 APIhttps://hb.zhangquyun.com/server/api
LLM APIhttps://dashscope.aliyuncs.com/compatible-mode/v1
文件上传限制max-file-size: 20MB, max-request-size: 200MB
构建命令mvn clean package -Pprod./publish.sh
启动命令java -jar saas-service.jar --spring.profiles.active=prod

9.2 前端部署

配置项
开发启动npm run dev(端口 8201)
生产构建npm run build:prod → 输出到 saas-web/ 目录
预发布构建npm run build:stage
构建脚本./publish.sh
部署方式Nginx 静态文件 + 反向代理到后端

9.3 数据库

数据库引擎:MySQL 8.0+,字符集 UTF-8,时区 GMT+8
逻辑删除:全局字段 isDel(1=已删除,0=正常),MyBatis Plus 自动处理
数据库导出:db-export/cloud_full_*.sql(完整建库脚本)

9.4 环境依赖

组件版本要求用途
JDK11+后端运行时
Maven3.6+后端构建
Node.js8.9+前端构建
MySQL8.0+数据库
Redis6.0+缓存/分布式锁
Nginx1.18+反向代理/静态文件

10项目目录结构

10.1 后端 (service-master)

service-master/ ├── pom.xml # Maven 配置 ├── publish.sh # 发布脚本 ├── src/ │ ├── main/ │ │ ├── java/cn/apes/ │ │ │ ├── CloudApplication.java # 主启动类 │ │ │ └── cloud/ │ │ │ ├── config/ # 配置类(12个) │ │ │ ├── controller/ # 控制器(62个) │ │ │ ├── domain/ # 数据模型 │ │ │ ├── filter/ # 过滤器 │ │ │ ├── groovy/ # Groovy 引擎 │ │ │ ├── mapper/ # Mapper 接口(85个) │ │ │ ├── service/ # 业务逻辑(90个实现类) │ │ │ ├── task/ # 定时任务 │ │ │ ├── util/ # 工具类 │ │ │ └── websocket/ # WebSocket 处理器 │ │ └── resources/ │ │ ├── application.yml # 主配置 │ │ ├── application-prod.yml # 生产配置 │ │ └── application-local.yml # 开发配置 │ └── test/ # 测试代码 ├── docs/ # API 文档(15个) ├── sql/ # SQL 脚本 ├── db-export/ # 数据库导出 └── logs/ # 日志文件

10.2 前端 (web-master)

web-master/ ├── package.json # 依赖配置 ├── vue.config.js # Vue CLI 配置 ├── publish.sh # 发布脚本 ├── src/ │ ├── main.js # 应用入口 │ ├── App.vue # 根组件 │ ├── api/ # API 接口(35个文件) │ │ └── fei/ # 智慧农业子接口 │ ├── assets/ # 静态资源 │ ├── components/ # 公共组件 │ │ ├── ai/ # AI 组件 │ │ ├── brain/ # 大脑组件 │ │ └── tracing/screen/ # 溯源大屏组件(18个) │ ├── config/ # 全局配置 │ ├── layout/ # 布局组件 │ │ └── components/ # TopHeader / Sidebar / TagsView │ ├── router/ # 路由配置 │ ├── store/ # Vuex(user / settings / tagsView) │ ├── styles/ # 全局样式 │ ├── utils/ # 工具函数(16个文件) │ └── views/ # 页面视图(85+文件) │ ├── ai/ # AI 对话 │ ├── customer/ # 客户管理 │ ├── fei/ # 智慧农业 │ ├── huoban/ # 伙伴云 │ ├── system/ # 系统管理 │ ├── trace/ # 溯源管理 │ ├── tracing/ # 溯源追踪 │ └── weight/ # 自助过磅 ├── docs/ # 文档 ├── public/ # 公共静态文件 └── logs/ # 日志