依据:同目录
项目与补贴-补贴功能需求.md。台账 CRUD + 明细附件/封面管理 + 发布/下架。
| 项 | 说明 |
|---|---|
| 后端 | RuoYi v3.9.2(springboot2 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid |
| 数据库 | MySQL 5.7.39,InnoDB,utf8mb4 |
| 前端 | 若依 Vue2;上传复用 POST /common/upload |
| 文件 | 表存 URL、存储路径、明细附件原始名;不入库文件大小 |
分层:Controller → Service(字段校验、替换/删除物理文件)→ Mapper/XML → domain。
业务特征(摘要)
| 场景 | 行为 |
|---|---|
| 新增/修改 | 校验必填;明细附件三元组必填;替换附件成功后删旧 detail_file_path、cover_file_path |
| 列表/详情 | 默认 create_time DESC, id DESC;不区分发放状态限制删改 |
| 删除 | 删库表记录 + 明细附件 + 封面物理文件 |
发放状态:用户维护,1 申请中、2 已发放;新建未传时默认 1。
发布状态:与项目模块一致;publish_status 0/1;未发布可改删发布,已发布仅查看/下架。
biz_subsidy_matter(补贴事项台账)| 字段 | 类型 | 非空 | 默认值 | 说明 |
|---|---|---|---|---|
id |
bigint(20) |
Y | 自增 | 主键 |
subsidy_name |
varchar(64) |
Y | — | 补贴名称(1~20 字) |
introduction |
varchar(200) |
N | NULL | 补贴简介,选填(≤50 字) |
grant_status |
tinyint(4) |
Y | 1 |
1 申请中,2 已发放 |
detail_file_url |
varchar(512) |
Y | — | 补贴明细附件访问 URL |
detail_file_path |
varchar(512) |
Y | — | 明细附件存储路径 |
detail_file_name |
varchar(256) |
Y | — | 明细附件原始文件名 |
cover_file_url |
varchar(512) |
N | NULL | 封面 URL |
cover_file_path |
varchar(512) |
N | NULL | 封面存储路径 |
publish_status |
tinyint(4) |
Y | 0 |
0 未发布 1 已发布 |
publish_time |
datetime |
N | NULL | 发布时间 |
offline_time |
datetime |
N | NULL | 下架时间 |
create_by / create_time / update_by / update_time |
若依惯例 | — | — | 审计 |
remark |
varchar(500) |
N | NULL | 备注 |
索引:PRIMARY KEY (id);KEY idx_grant_status (grant_status);KEY idx_create_time (create_time);KEY idx_publish (publish_status)。
DDL(MySQL 5.7)
CREATE TABLE `biz_subsidy_matter` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`subsidy_name` varchar(64) NOT NULL COMMENT '补贴名称',
`introduction` varchar(200) DEFAULT NULL COMMENT '补贴简介',
`grant_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1申请中 2已发放',
`detail_file_url` varchar(512) NOT NULL COMMENT '明细附件URL',
`detail_file_path` varchar(512) NOT NULL COMMENT '明细附件存储路径',
`detail_file_name` varchar(256) NOT NULL COMMENT '明细附件原始文件名',
`cover_file_url` varchar(512) DEFAULT NULL COMMENT '封面URL',
`cover_file_path` varchar(512) DEFAULT NULL COMMENT '封面存储路径',
`publish_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0未发布 1已发布',
`publish_time` datetime DEFAULT NULL COMMENT '发布时间',
`offline_time` datetime DEFAULT NULL COMMENT '下架时间',
`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_grant_status` (`grant_status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_publish` (`publish_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目与补贴-补贴';
| 字段 | 值 | 含义 |
|---|---|---|
grant_status |
1 |
申请中 |
2 |
已发放 | |
publish_status |
0 |
未发布 |
1 |
已发布 |
统一响应:AjaxResult / 分页 TableDataInfo(rows、total)。
权限标识(示例):industryPolicy:subsidyMatter:list|query|add|edit|remove|publish|offline|export
Base Path(示例):/industryPolicy/subsidyMatter
| # | 说明 | Method | URI | 权限 | 要点 |
|---|---|---|---|---|---|
| 3.1 | 分页列表 | GET | /industryPolicy/subsidyMatter/list |
industryPolicy:subsidyMatter:list |
Query 3.1.1;排序 create_time DESC, id DESC |
| 3.2 | 详情 | GET | /industryPolicy/subsidyMatter/{id} |
industryPolicy:subsidyMatter:query |
全字段;附件下载/预览鉴权 |
| 3.3 | 新增 | POST | /industryPolicy/subsidyMatter |
industryPolicy:subsidyMatter:add |
Body 3.3.1;publish_status=0;grantStatus 缺省 1 |
| 3.4 | 修改 | PUT | /industryPolicy/subsidyMatter |
industryPolicy:subsidyMatter:edit |
仅 publish_status=0;替换附件删旧 |
| 3.5 | 删除 | DELETE | /industryPolicy/subsidyMatter/{ids} |
industryPolicy:subsidyMatter:remove |
仅 publish_status=0;删附件与封面 |
| 3.6 | 发布 | POST | /industryPolicy/subsidyMatter/publish/{id} |
industryPolicy:subsidyMatter:publish |
前置 0;校验明细附件等 |
| 3.7 | 下架 | POST | /industryPolicy/subsidyMatter/offline/{id} |
industryPolicy:subsidyMatter:offline |
前置 1;publish_status=0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
pageNum / pageSize |
int | N | 默认 1 / 20 |
keyword |
string | N | 补贴名称 / 简介 OR 模糊;空不过滤 |
grantStatus |
int | N | 1 / 2 精确;空不过滤 |
publishStatus |
int | N | 0 / 1 精确;空不过滤 |
| 字段 | 必填 | 说明 |
|---|---|---|
id |
修改 Y | 主键 |
subsidyName |
Y | 1~20 字符 |
introduction |
N | ≤50 字 |
grantStatus |
Y | 1 或 2 |
detailFileUrl / detailFilePath / detailFileName |
Y | 上传后填入,三者同时有效 |
coverFileUrl / coverFilePath |
N | 封面成对;可空 |
remark |
N | 备注 |
列表行字段(示例):id、subsidyName、introduction、grantStatus、detailFileName、coverFileUrl、createTime。
POST /common/upload → 取 url、fileName(path)、originalFilename(明细附件作 detailFileName)。detail_file_path、cover_file_path 物理文件。| 项 | 规则 |
|---|---|
| 补贴名称 | 非空,1~20 字符 |
| 补贴简介 | 可空;有值 ≤50 字 |
| 发放状态 | ∈ {1, 2} |
| 明细附件 | 必填;后缀 pdf,md,doc,docx,xls,xlsx,ppt,pptx;≤30MB |
| 封面 | 可空;有则 jpg,jpeg,png(可扩展 webp);≤10MB |
| 类型 | 名称 | 权限标识 |
|---|---|---|
| 菜单 | 项目与补贴-补贴 | industryPolicy:subsidyMatter:list |
| 按钮 | 查询/新增/修改/删除/发布/下架/导出 | …:query …:add …:edit …:remove …:publish …:offline …:export |
组件路径建议:policy/subsidyMatter/index。
biz_subsidy_matter DDL、菜单权限 SQLBizSubsidyMatter Domain / Mapper / Service / Controller| 日期 | 说明 |
|---|---|
| — | 初稿:对齐功能需求;台账 CRUD;grant_status 1/2;明细附件必填 |
| 1.1 | 草稿 §6:新增发布/下架字段与接口;已发布不可改删 |