# 鱼测云分润管理系统需求规格说明书 ## 1. 文档说明 ### 1.1 编写目的 本文档基于当前代码仓库 `profit-sharing-management-master` 的后端实现,对系统业务范围、角色权限、核心流程、功能需求和非功能需求进行还原和整理,用于: - 帮助快速理解项目覆盖的业务域 - 作为后续需求澄清、系统改造和前后端联调的基础文档 - 为补齐前端、测试用例、实施手册提供输入 ### 1.2 编写依据 本文档主要依据以下内容整理: - `fishery-admin` 中的业务控制器 - `fishery-core` 中的领域模型、服务实现、SQL 映射 - `fishery-system` 中的登录、用户、权限能力 - `fishery-quartz` 中的定时任务 - `application.yml` 与 `application-dev.yml` 中的运行配置 ### 1.3 说明与边界 - 当前仓库主要是后端工程,未包含完整前端页面源码,因此界面交互以接口能力反推。 - README 为占位内容,业务口径以代码实现为准。 - 本文档区分“已明确实现的能力”和“根据实现推断的业务含义”。 - 对于角色名称、菜单文案、审批组织关系等未在代码中直接定义的内容,仅做合理归纳,不作为最终主数据标准。 ## 2. 项目概述 ### 2.1 系统名称 - 系统工程描述:鱼测云分润管理系统 - 运行入口名称:`fishery-admin` - 默认访问上下文:`/equipment` ### 2.2 业务定位 该系统是一个“养殖设备管理 + 分润结算”的后台与移动端支撑系统,围绕鱼塘/池塘设备、充值订单、经销分润和提现结算展开,覆盖以下业务链路: 1. 设备接入与设备归属管理 2. 池塘与设备监测数据查询 3. 告警信息查看与控制器开关控制 4. 经销/层级用户分润比例配置 5. 充值订单自动分润计算 6. 分润记录统计、退款冲销 7. 用户提现申请与打款处理 8. 短信验证码登录与 APP 用户管理 ### 2.3 总体架构 系统为多模块 Spring Boot 单体工程,采用动态数据源。 - `fishery-admin` 说明:Web API 入口、业务控制器 - `fishery-system` 说明:系统管理能力,如登录、用户、角色、菜单、部门、字典、日志 - `fishery-core` 说明:分润、设备绑定、提现、监测大屏等业务核心 - `fishery-quartz` 说明:定时任务,包括分润计算、设备绑定同步、告警码处理 - `fishery-generator` 说明:代码生成 - `fishery-demo` 说明:示例模块 - `fishery-common` 说明:通用基础组件 ### 2.4 数据源边界 系统至少涉及两套业务数据。 - 主数据源 `master` 说明:本系统后台管理数据,如 `sys_*`、`basic_*` - 辅助数据源 `test` 说明:外部设备/订单/APP 用户数据,如 `aqu_user`、`aqu_device`、`aqu_pay_device`、`aqu_message_warn` - 另有 `taos` 数据源配置 说明:已配置 TDengine 连接,当前在本仓库业务代码中未见明确使用 ## 3. 业务角色 ### 3.1 平台管理员 负责系统级维护和业务全局管理,预期能力包括: - 系统用户、角色、部门、菜单管理 - 分润基础规则维护 - 用户分润档案维护 - 设备绑定关系维护 - 分润记录全量查询、导出、退款处理 - 提现记录审核与打款处理 - 告警电话维护 - APP 用户管理 ### 3.2 业务管理者 根据代码中的数据权限判断,部分角色可按部门或经销体系查看数据,预期能力包括: - 查看本部门或本经销体系下的设备绑定 - 查看分润记录报表 - 查询提现记录 - 维护下级用户相关业务数据 说明:代码中通过角色 ID 和部门树控制数据范围,但未直接给出正式角色名称。 ### 3.3 分润用户 即参与分润结算的业务用户,预期能力包括: - 查看本人分润记录 - 查看本人提现记录 - 维护本人分润档案和收款信息 - 提交提现申请 ### 3.4 APP 用户/养殖端用户 该类用户来自 `aqu_user`,预期能力包括: - 通过手机号验证码或密码登录 - 查看塘口与设备 - 查看监测历史数据和告警 - 控制控制器设备开关 ## 4. 业务范围 ### 4.1 已覆盖业务域 - 系统管理 - APP/短信登录 - 池塘与设备监测 - 设备绑定 - 分润规则管理 - 用户分润档案管理 - 分润记录管理 - 提现管理 - 退款冲销 - 告警电话管理 - 定时任务管理 ### 4.2 明显未完成或实现不完整的业务 - 语音告警电话的自动拨号任务仅有占位逻辑,未完成实际拨打 - 前端页面与交互细节未随仓库提供 - 部分 XML 映射文件存在错配痕迹,说明代码仍有整理空间 ## 5. 核心业务对象 ### 5.1 分润基础规则 `basic_profit_sharing` - 等级名称 `name` - 等级编码 `code` - 测氧仪分润比例 `omRatio` - 控制器分润比例 `controlRatio` 用途:定义分润级别或档位的基础比例。 ### 5.2 用户分润档案 `basic_profit_sharing_user` - 关联用户 `userId` - 分润级别 `sharingCode` - 测氧仪比例 `omRatio` - 控制器比例 `controlRatio` - 公司名称 `company` - 开户行 `bank` - 银行卡号 `bankNumber` - 收款人姓名 `name` 用途:存储参与分润的用户档案和收款信息。 ### 5.3 用户设备绑定 `basic_user_bind_info` - 绑定用户 `userId` - 设备编号 `deviceName` - 产品 Key `productKey` - IoT 唯一标识 `iotId` - 设备类型 `type` - 绑定时间 `bindTime` - 分润状态 `profitStatus` - 关联 APP 用户信息 用途:建立后台分润用户与业务设备之间的归属关系。 ### 5.4 分润记录 `basic_profit_sharing_record` - 分润用户 `userId` - 分润金额 `amount` - 来源 `fromWay` - 标题 `title` - 原始订单号 `orderNo` - 设备编号 `deviceName` - 分润状态 `status` - 提现状态 `withdrawalStatus` - 打款状态 `paymentStatus` - 驳回原因 `paymentReason` - 关联提现单 `withdrawId` 用途:记录每一笔可分配收益及其后续结算状态。 ### 5.5 提现记录 `basic_user_withdraw` - 提现用户 `userId` - 标题 `title` - 申请时间 `withdrawTime` - 提现总额 `totalAmount` - 收款信息 `bank`、`bankNumber`、`name` - 实际打款金额 `paymentAmount` - 打款状态 `paymentStatus` - 打款时间 `paymentTime` 用途:记录按批次发起的提现申请和财务打款结果。 ### 5.6 外部设备与订单对象 - `aqu_user` 说明:APP 用户 - `aqu_pond` 说明:池塘/塘口 - `aqu_device` 说明:设备主表 - `aqu_device_data_history` 说明:设备历史监测数据 - `aqu_device_switch` 说明:控制器开关 - `aqu_message_warn` 说明:告警消息 - `aqu_pay_device` 说明:设备充值或付费明细,是分润计算的直接来源 ## 6. 功能需求 ### 6.1 系统管理 系统应提供标准后台管理能力,包括: - 用户管理 - 角色管理 - 部门管理 - 岗位管理 - 菜单管理 - 字典管理 - 参数配置 - 公告管理 - 在线用户管理 - 登录日志与操作日志 - 定时任务管理 - 缓存查看 - 服务监控 - 文件上传下载 说明:以上能力来自 `fishery-system` 与 `fishery-quartz` 通用模块。 ### 6.2 登录与认证 #### 6.2.1 后台登录 系统应支持后台账号密码登录,并具备: - 图形验证码校验 - JWT Token 签发 - 登录日志记录 - 登录错误重试限制 #### 6.2.2 APP/短信登录 系统应支持 `/sms/**` 匿名访问的移动端登录能力,包括: - 手机号获取短信验证码 - 手机号 + 验证码登录 - 手机号/用户名 + 密码登录 - APP Token 签发 补充说明: - APP 用户既可能来自本系统 `sys_user`,也可能来自外部 `aqu_user` - 代码中预留了微信 `openid`、手机号换取能力,但当前接口未形成完整微信登录闭环 ### 6.3 池塘与设备监测 系统应支持移动端或大屏使用者按本人数据范围查看养殖场景信息。 #### 6.3.1 塘口查询 系统应支持查询当前用户所属塘口列表。 输入: - 当前登录用户 输出: - 塘口 ID - 塘口名称 #### 6.3.2 设备列表查询 系统应支持按塘口和设备类型查询设备。 筛选条件: - 用户 ID - 塘口 ID 列表 - 设备类型 输出内容至少包括: - 设备编号 - 设备名称 - 设备类型 - 当前监测值 - 在线状态 - 告警参数 - 控制器开关信息 #### 6.3.3 设备历史数据查询 系统应支持查询设备历史趋势数据。 能力包括: - 单设备历史曲线查询 - 多设备历史对比查询 - 按最近 N 天统计 - 30 分钟粒度聚合 监测指标包括: - 溶氧 - 温度 - 饱和度 - pH - 盐度 #### 6.3.4 告警信息查询 系统应支持: - 查询当前用户告警列表 - 按设备查询告警列表 - 返回告警总数用于分页 #### 6.3.5 控制器开关控制 系统应支持控制器设备开关下发。 输入: - `iotId` - 开关序号 `index` - 开关目标状态 `0/1` 输出: - 下发是否成功 ### 6.4 APP 用户管理 系统应支持对外部 `aqu_user` 用户进行后台管理。 功能包括: - APP 用户列表查询 - 修改是否开通大屏权限 `hasScreen` - 修改用户标题 `title` ### 6.5 设备绑定管理 系统应支持维护后台分润用户与设备的绑定关系。 #### 6.5.1 绑定列表查询 系统应支持查询绑定列表,并依据权限限制数据范围。 筛选条件至少包括: - 用户 - 设备编号 - 设备类型 - APP 用户手机号 #### 6.5.2 绑定详情查询 系统应支持查看绑定详情,并补充外部业务库中的设备归属信息。 #### 6.5.3 新增绑定 系统应支持新增用户设备绑定,规则包括: - 若未传用户,则默认绑定到当前登录人 - 若按用户 ID 指定绑定对象,应自动回填用户名 - 同一设备编号不可重复绑定 - 若外部业务库可查到该设备,应合并其业务侧设备信息 #### 6.5.4 修改与删除绑定 系统应支持修改和删除绑定关系。 #### 6.5.5 设备数据补充查询 围绕绑定设备,系统应支持: - 查询设备监测数据及历史数据 - 查询控制器信息 - 查询告警信息 ### 6.6 分润基础规则管理 系统应支持维护基础分润档位。 功能包括: - 分润规则列表查询 - 分润规则详情查询 - 新增分润规则 - 修改分润规则 - 删除分润规则 - 导出分润规则 规则属性包括: - 等级名称 - 等级编码 - 测氧设备比例 - 控制器比例 ### 6.7 用户分润档案管理 系统应支持维护分润用户档案及其收款信息。 功能包括: - 分润档案列表查询 - 分润档案详情查询 - 新增分润档案 - 修改分润档案 - 删除分润档案 - 导出分润档案 业务规则包括: 1. 档案主键与用户 ID 对齐。 2. 若用户修改的是本人档案,可直接处理。 3. 若用户修改他人档案,需要具备管理员权限。 4. 用户档案不存在时,不允许直接修改,需先新增。 5. 分润比例需通过层级校验。 #### 6.7.1 分润比例校验规则 系统应校验同一条用户链路上的累计比例不超过 100%。 - 测氧设备比例累计不得超过 100% - 控制器比例累计不得超过 100% 说明: - 系统会沿 `sys_user.parent_id` 向上累加上级比例 - 超出比例时,应阻止保存 ### 6.8 分润计算与分润记录管理 #### 6.8.1 分润记录查询 系统应支持分润记录列表查询、详情查询和导出。 查询维度至少包括: - 用户 - 来源 - 分润状态 - 设备编号 - 打款状态 - 提现单号 - 时间区间 - 电话号码 #### 6.8.2 分润报表 系统应支持统计报表接口,输出至少包括: - 分润总额 `total` - 已分润金额 `fr` - 已提现金额 `tx` 统计维度包括: - 时间范围 - 用户范围 - 部门范围 #### 6.8.3 自动分润计算 系统应通过定时任务,根据外部订单数据自动生成分润记录。 计算来源: - `aqu_pay_device` 处理逻辑: 1. 定时拉取指定时间窗口内的订单明细。 2. 按设备编号找到参与分润的用户链路。 3. 根据设备类型选择对应比例。 4. 计算分润金额并生成记录。 5. 将原订单标记为已参与分润。 分润公式: - 分润金额 = 支付金额 × 分润比例 / 100 设备类型: - `1`:溶氧设备 - `2`:控制器设备 #### 6.8.4 分润记录状态流转 分润记录至少应支持以下状态维度: - 分润状态 `status` - `0`:待处理或已申请提现待打款 - `1`:已生成有效分润 - `9`:无效 - 提现状态 `withdrawalStatus` - `0`:未提现 - `1`:已提现申请 - 打款状态 `paymentStatus` - `0`:未打款 - `1`:已打款 - `9`:驳回或失效 说明:以上语义基于字段注释和代码行为归纳。 #### 6.8.5 退款处理 系统应支持按订单号对分润记录进行退款冲销。 处理规则: - 同一订单号下的所有有效分润记录均应被置为无效 - 同步记录驳回原因 - 如该分润记录已关联提现单,应同步冲减提现单剩余可打款金额 ### 6.9 提现管理 #### 6.9.1 提现记录查询 系统应支持提现记录列表查询、详情查询和导出。 查询维度至少包括: - 用户 - 标题 - 提现时间 - 昵称 - 手机号 #### 6.9.2 用户提现申请 系统应支持分润用户发起提现申请。 规则包括: 1. 仅可提取本人记录。 2. 仅可提取未提现的分润记录。 3. 当前实现中,仅允许提取生成时间早于当前 30 天的分润记录。 4. 用户必须先维护完整收款信息。 5. 提现申请成功后,应生成一张提现单。 6. 被纳入本次提现的分润记录应回填 `withdrawId`。 提现单生成内容包括: - 提现标题 - 提现总额 - 提现时间 - 收款公司/开户行 - 收款卡号 - 收款人姓名 - 用户昵称和手机号 - 初始打款状态 #### 6.9.3 打款处理 系统应支持后台修改提现单状态,并在打款成功后更新金额。 预期规则: - `paymentStatus = 1` 表示已打款 - 打款金额可小于总额 - 若后续发生退款或驳回,应同步冲减可打款金额 ### 6.10 告警电话管理 系统应支持维护语音报警手机号。 功能包括: - 电话列表查询 - 新增电话 - 修改电话 - 删除电话 字段包括: - 手机号 - 是否启用 说明:定时拨号任务尚未完成。 ### 6.11 定时任务 #### 6.11.1 分润计算任务 `profitTask` 系统应支持定时执行分润计算。 能力包括: - 订单读取 - 分润链路展开 - 分润记录批量生成 - 原订单状态更新 #### 6.11.2 设备绑定同步任务 系统应支持补齐尚未关联 `device_id` 的绑定记录。 处理逻辑: - 查询本地绑定表中缺失设备 ID 的记录 - 根据设备编号到外部业务库查找设备 - 回填设备 ID 等信息 #### 6.11.3 告警码处理任务 `WarnCodeTask` 系统应支持在设备充值成功后重置设备告警码。 #### 6.11.4 语音拨号任务 `CellTask` 当前仅有框架和号码查询逻辑,实际拨打能力未实现。 ## 7. 关键业务流程 ### 7.1 分润准备流程 1. 管理员创建系统用户和组织关系。 2. 管理员维护用户分润档案。 3. 管理员维护用户与设备的绑定关系。 4. 系统根据用户层级和设备归属建立可分润链路。 ### 7.2 充值分润流程 1. 设备在外部业务库产生充值/支付记录。 2. 定时任务读取最近时间窗口内的支付明细。 3. 系统按设备编号匹配绑定用户及上级链路。 4. 系统按设备类型套用比例,生成分润记录。 5. 系统将支付明细标记为已分润,避免重复计算。 ### 7.3 提现流程 1. 分润用户完善收款资料。 2. 用户发起提现申请。 3. 系统筛选满足条件的分润记录并汇总金额。 4. 系统生成提现单,并将分润记录关联到提现单。 5. 管理员审核并打款。 6. 若发生退款或驳回,系统同步调整金额状态。 ### 7.4 设备监测流程 1. APP 用户登录。 2. 查询本人塘口列表。 3. 查询塘口下设备列表。 4. 查看实时值、历史值、告警记录。 5. 对控制器设备执行开关控制。 ## 8. 业务规则 ### 8.1 数据权限规则 - 普通用户默认仅能查看本人分润记录和提现记录 - 部分高权限角色可查看更大范围数据 - 设备绑定列表按用户/部门树控制查询范围 说明:具体角色编码需以生产环境主数据为准。 ### 8.2 分润比例规则 - 上下级累计比例不可超过 100% - 不同设备类型使用不同分润比例字段 ### 8.3 设备类型规则 - `1` 表示溶氧监测设备 - `2` 表示控制器设备 ### 8.4 提现规则 - 仅未提现记录可参与提现 - 当前实现限制为 30 天前产生的分润记录 - 未维护收款信息时不得发起提现 ### 8.5 退款规则 - 退款会使相关分润记录失效 - 退款会影响提现单剩余可打款金额 ## 9. 接口与模块清单 ### 9.1 业务接口模块 - `/sms` 说明:短信验证码与 APP 登录 - `/screen` 说明:塘口、设备、历史、告警、控制 - `/basic/profitSharing` 说明:分润基础规则 - `/basic/sharingUser` 说明:用户分润档案 - `/basic/sharingRecord` 说明:分润记录与报表、退款 - `/basic/userBind` 说明:设备绑定、监测数据、控制器信息、告警 - `/basic/withdraw` 说明:提现申请与提现记录 - `/basic/user` 说明:APP 用户管理 - `/sys/tel` 说明:语音报警电话 ### 9.2 通用后台模块 - `/login` - `/system/user` - `/system/role` - `/system/dept` - `/system/menu` - `/system/dict` - `/system/config` - `/system/notice` - `/monitor/*` - `/tool/gen/*` ## 10. 非功能需求 ### 10.1 技术要求 - Java 8 - Spring Boot 2.5.x - MyBatis Plus - Redis - JWT - Druid 动态数据源 ### 10.2 性能要求 - 常规列表查询应支持分页 - 历史数据查询需使用缓存降低数据库压力 - 设备在线状态应短时缓存 - 定时任务应具备批量处理能力 ### 10.3 安全要求 - 后台接口需基于权限控制访问 - APP 登录验证码需具备有效期 - 登录行为需记录日志 - 上传下载需校验文件合法性 ### 10.4 可维护性要求 - 业务模块与系统模块分层清晰 - 关键业务实体应保留创建/更新时间 - 定时任务应可配置、可查看执行日志 ## 11. 当前实现中的风险与待确认事项 ### 11.1 业务待确认 - 角色 ID 与业务角色名称的正式映射关系 - 控制器设备为何固定叠加 `ID = 101` 的分润档案 - 提现记录的审核流程是否应区分“申请中、审核通过、已打款、已驳回” - 退款是否应按提现单冲减全部关联记录,而非单笔金额 ### 11.2 实现待修正 - `BasicProfitSharingUserMapper.xml` 内容与文件名不匹配,疑似误复制 - 语音拨号任务尚未实现 - 若按当前代码执行,部分提现记录状态更新逻辑可能未完全落库 - 部分接口的权限注解被注释,需确认是否为正式设计 - 退款接口中的订单号非空校验逻辑疑似反向 ### 11.3 文档待补充 - 前端页面原型 - 角色菜单矩阵 - 数据字典 - 完整表结构设计 - 对账和财务闭环说明 ## 12. 结论 从现有代码看,该项目不是单纯的“后台管理模板”,而是面向鱼塘养殖设备场景的分润结算系统。其核心业务主线是: 1. 维护用户与设备关系 2. 采集设备与充值业务数据 3. 按层级和设备类型计算分润 4. 支持分润查询、提现和退款冲销 5. 为 APP/大屏提供设备监测、告警和控制能力 如果要继续推进项目建设,建议下一步优先补齐以下内容: 1. 角色与组织模型说明 2. 表结构与状态机说明 3. 前端页面清单 4. 提现审核与财务流程口径 5. 语音告警闭环设计