# 数据资产服务中心 — 技术方案 > 依据:同目录 `数据资产服务中心功能需求.md`。数据发送记录 **CRUD** + **逻辑删除**;本期无对外真实发送、无附件。 --- ## 1. 技术架构 | 项 | 说明 | | --- | --- | | **后端** | RuoYi **v3.9.2**(**springboot2** 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid | | **数据库** | MySQL **5.7.39**,InnoDB,`utf8mb4` | | **前端** | 若依 Vue2(本方案不展开页面实现) | **分层**:`Controller` → `Service`(`DataSendRecordValidation` 校验)→ `Mapper`/XML → `domain`。 **代码位置(建议)**:`baqing-admin` → `com.ruoyi.web.modules.datahub`(`BizDataSendRecord`、Mapper、Service、Controller)。 **业务摘要** | 场景 | 行为 | | --- | --- | | 新增/修改 | 校验必填与长度;`del_flag='0'` | | 列表/详情 | 仅 `del_flag='0'`;排序 `send_time DESC, id DESC` | | 列表筛选 | `send_time` **日期部分**闭区间;`receiver_name` **精确**匹配(**不区分大小写**) | | 删除 | **逻辑删除**:`del_flag` 置 `'2'` | --- ## 2. 数据库设计 ### 2.1 表 `biz_data_send_record`(数据发送记录) | 字段 | 类型 | 非空 | 说明 | | --- | --- | --- | --- | | `id` | `bigint(20)` | Y | 主键 | | `send_time` | `datetime` | Y | 发送时间 | | `send_content` | `varchar(2000)` | Y | 发送内容 | | `receiver_name` | `varchar(128)` | Y | 接收方名称 | | `receiver_address` | `varchar(512)` | Y | 接收方地址 | | `del_flag` | `char(1)` | Y | `0` 存在 `2` 删除 | | `create_by` / `create_time` / `update_by` / `update_time` | 若依惯例 | — | 审计 | | `remark` | `varchar(500)` | N | 备注(可选) | **索引**:`PRIMARY KEY (id)`;`KEY idx_send_time (send_time)`;`KEY idx_receiver_name (receiver_name)`;`KEY idx_del_flag (del_flag)`。 **DDL(MySQL 5.7)** ```sql CREATE TABLE `biz_data_send_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `send_time` datetime NOT NULL COMMENT '发送时间', `send_content` varchar(2000) NOT NULL COMMENT '发送内容', `receiver_name` varchar(128) NOT NULL COMMENT '接收方名称', `receiver_address` varchar(512) NOT NULL COMMENT '接收方地址', `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '0存在 2删除', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_send_time` (`send_time`), KEY `idx_receiver_name` (`receiver_name`), KEY `idx_del_flag` (`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据发送记录'; ``` ### 2.2 枚举 | 字段 | 值 | 含义 | | --- | --- | --- | | `del_flag` | `0` | 正常 | | | `2` | 已逻辑删除 | --- ## 3. 接口设计 **统一响应**:`AjaxResult`(`code` / `msg` / `data`)或分页 `TableDataInfo`(`rows`、`total`)。 **权限标识**:`dataHub:dataSendRecord:list|query|add|edit|remove` **Base Path**:`/dataHub/dataSendRecord` | # | 说明 | Method | URI | 权限 | | --- | --- | --- | --- | --- | | 3.1 | 分页列表 | GET | `/dataHub/dataSendRecord/list` | `list` | | 3.2 | 详情 | GET | `/dataHub/dataSendRecord/{id}` | `query` | | 3.3 | 新增 | POST | `/dataHub/dataSendRecord` | `add` | | 3.4 | 修改 | PUT | `/dataHub/dataSendRecord` | `edit` | | 3.5 | 删除 | DELETE | `/dataHub/dataSendRecord/{ids}` | `remove` | > 删除接口沿用若依 `{ids}` 形式;**本期前端仅单条删除**,传单个 id 即可。 #### 3.1.1 列表 Query | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `pageNum` / `pageSize` | int | N | 默认 `1` / `20` | | `startDate` | string | N | 发送日期起 `yyyy-MM-dd`(界面 daterange 起) | | `endDate` | string | N | 发送日期止 `yyyy-MM-dd`;`DATE(send_time)` **闭区间** | | `receiverName` | string | N | 接收方名称**精确**匹配;比较时 **不区分大小写**(`LOWER` 或 `utf8mb4_general_ci`) | **区间校验**:`startDate`、`endDate` 均非空且 `startDate > endDate` 时抛业务异常。 #### 3.2.1 详情响应 `data`(驼峰) | 字段 | 说明 | | --- | --- | | `id` | 主键 | | `sendTime` | `yyyy-MM-dd HH:mm:ss` | | `sendContent` | 发送内容 | | `receiverName` | 接收方名称 | | `receiverAddress` | 接收方地址 | | `createBy` / `createTime` / `updateBy` / `updateTime` | 审计 | | `remark` | 备注 | #### 3.3.1 新增 / 修改 Body(驼峰) | 字段 | 必填 | 说明 | | --- | --- | --- | | `id` | 修改 Y | 主键 | | `sendTime` | Y | `yyyy-MM-dd HH:mm:ss` | | `sendContent` | Y | 去首尾空白后非空;≤ 2000 字 | | `receiverName` | Y | 1~128 字 | | `receiverAddress` | Y | 1~512 字 | | `remark` | N | ≤ 500 字 | #### 3.5.1 删除 - `DELETE /dataHub/dataSendRecord/{ids}`,`ids` 逗号分隔。 - 逻辑删除:`del_flag='2'`,仅更新 `del_flag='0'` 的记录。 - 详情/修改前须校验记录存在且未删除。 ### 3.3 Mapper 约定 - 列表、详情、更新条件均带 `del_flag = '0'`。 - 列表排序:`ORDER BY send_time DESC, id DESC`。 - 发送日期筛选:`DATE(send_time) >= #{startDate} AND DATE(send_time) <= #{endDate}`(参数非空时生效)。 - 接收方名称:`LOWER(receiver_name) = LOWER(#{receiverName})`(参数非空时)。 ### 3.4 服务端校验(`DataSendRecordValidation`) | 项 | 规则 | | --- | --- | | `sendTime` | 非空 | | `sendContent` | trim 后非空;长度 ≤ 2000 | | `receiverName` | trim 后非空;长度 1~128 | | `receiverAddress` | trim 后非空;长度 1~512 | | 列表日期区间 | `startDate ≤ endDate`(均填时) | | 修改/删除 | `id` 对应记录存在且 `del_flag='0'` | 常量类建议:`DataSendRecordRules`(长度上限、`del_flag` 取值)。 --- ## 4. 菜单与权限(示例) | 类型 | 名称 | 权限标识 | | --- | --- | --- | | 菜单 | 数据资产服务中心 | `dataHub:dataSendRecord:list` | | 按钮 | 查询 | `dataHub:dataSendRecord:query` | | 按钮 | 新增 | `dataHub:dataSendRecord:add` | | 按钮 | 修改 | `dataHub:dataSendRecord:edit` | | 按钮 | 删除 | `dataHub:dataSendRecord:remove` | 组件路径:`dataHub/dataSendRecord/index`(挂载「牧业产业数据中枢」目录下)。 --- ## 5. 交付清单 - [ ] `sql/biz_data_send_record.sql`、菜单与按钮权限 SQL - [ ] `BizDataSendRecord` Domain / Mapper / Service / Controller - [ ] `DataSendRecordRules`、`DataSendRecordValidation` - [ ] 逻辑删除;列表日期区间与接收方精确匹配 - [ ] 单元测试 / MockMvc(list 筛选、CRUD、校验失败) --- ## 6. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初稿:`biz_data_send_record`;CRUD + 逻辑删除;发送日期按 `send_time` 日期筛选;接收方名称不区分大小写精确匹配 |