西藏巴青项目

共同富裕项目技术方案.md 11KB

共同富裕项目 — 技术方案

依据:同目录 共同富裕项目功能需求.md。本模块为共富项目 CRUD + 发布/下架 + 运营图片(1~3 张);运营视频、封面选填。


1. 技术架构

说明
后端 RuoYi v3.9.2springboot2 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid
数据库 MySQL 5.7.39,InnoDB,utf8mb4
前端 若依 Vue2;图片/视频/封面上传复用 POST /common/upload
代码包 com.ruoyi.web.modules.commonprosperity(建议)

分层Controller(校验、权限、AjaxResult / TableDataInfo)→ Service(发布状态机、运营图子表维护、删物理文件)→ Mapper/XML → domain

发布状态(摘要)

操作 前置 publish_status 结果
新增 / 修改 / 删除 / 发布 0(未发布) 发布 → 1,写 publish_time;删除 → 删主表 + 子表 + 物理文件
下架 1(已发布) 0,写 offline_time不删附件
修改 / 删除 / 发布 1 拒绝

附件:表内存 URL + 存储路径(file_path);不入库文件大小。运营图片用子表(1~3 条),封面与运营视频存主表


2. 数据库设计

2.1 主表 biz_common_prosperity_project

字段 类型 非空 默认值 说明
id bigint(20) Y 自增 主键
project_name varchar(64) Y 项目名称(1~20 字)
project_type tinyint(4) Y 1 合作共赢,2 农文旅融合,3 认养农业
introduction varchar(200) Y 项目简介(1~50 字)
project_content varchar(600) Y 项目内容(1~500 字)
impl_start_date date Y 实施开始日期
impl_end_date date Y 实施结束日期(≥ 开始日)
video_file_url varchar(512) N NULL 运营视频 URL,选填
video_file_path varchar(512) N NULL 运营视频存储路径,选填
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_create_time (create_time)KEY idx_project_type (project_type)KEY idx_publish (publish_status)KEY idx_impl_start (impl_start_date)

2.2 子表 biz_common_prosperity_project_op_image(运营图片)

字段 类型 非空 默认值 说明
id bigint(20) Y 自增 主键
project_id bigint(20) Y 关联主表 id
file_url varchar(512) Y 图片访问 URL
file_path varchar(512) Y 图片存储路径
sort_order tinyint(4) Y 1 排序 13(展示顺序)
create_time datetime N NULL 创建时间

索引PRIMARY KEY (id)KEY idx_project_id (project_id)

约束(Service 层):每个 project_id 对应 1~3 条记录;sort_order 在同一项目内不重复。

2.3 DDL(MySQL 5.7)

CREATE TABLE `biz_common_prosperity_project` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `project_name` varchar(64) NOT NULL COMMENT '项目名称',
  `project_type` tinyint(4) NOT NULL COMMENT '1合作共赢 2农文旅融合 3认养农业',
  `introduction` varchar(200) NOT NULL COMMENT '项目简介',
  `project_content` varchar(600) NOT NULL COMMENT '项目内容',
  `impl_start_date` date NOT NULL COMMENT '实施开始日期',
  `impl_end_date` date NOT NULL COMMENT '实施结束日期',
  `video_file_url` varchar(512) DEFAULT NULL COMMENT '运营视频URL',
  `video_file_path` varchar(512) DEFAULT 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_create_time` (`create_time`),
  KEY `idx_project_type` (`project_type`),
  KEY `idx_publish` (`publish_status`),
  KEY `idx_impl_start` (`impl_start_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='共同富裕项目';

CREATE TABLE `biz_common_prosperity_project_op_image` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `project_id` bigint(20) NOT NULL COMMENT '项目ID',
  `file_url` varchar(512) NOT NULL COMMENT '图片URL',
  `file_path` varchar(512) NOT NULL COMMENT '图片存储路径',
  `sort_order` tinyint(4) NOT NULL DEFAULT '1' COMMENT '排序1-3',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='共同富裕项目-运营图片';

2.4 枚举常量

字段 含义
project_type 1 合作共赢
2 农文旅融合
3 认养农业
publish_status 0 未发布
1 已发布

3. 接口设计

统一响应AjaxResultcode / msg / data)或分页 TableDataInforowstotal)。

权限标识(示例)commonProsperity:project:list|query|add|edit|remove|publish|offline

Base Path(示例)/commonProsperity/project

# 说明 Method URI 权限 要点
3.1 分页列表 GET /commonProsperity/project/list commonProsperity:project:list Query 3.1.1;排序 create_time DESC, id DESCrowsopImageCount(子表 count)
3.2 详情 GET /commonProsperity/project/{id} commonProsperity:project:query 主表全字段 + operationImages[](按 sort_order 升序)
3.3 新增 POST /commonProsperity/project commonProsperity:project:add Body 3.3.1;事务写主表 + 子表;publish_status=0
3.4 修改 PUT /commonProsperity/project commonProsperity:project:edit publish_status=0;全量替换子表;删被移除图片及旧视频/封面物理文件
3.5 删除 DELETE /commonProsperity/project/{ids} commonProsperity:project:remove publish_status=0;删主表、子表及全部关联物理文件
3.6 发布 POST /commonProsperity/project/publish/{id} commonProsperity:project:publish 前置 0;校验必填与子表 1~3 张;publish_status=1publish_time=now()
3.7 下架 POST /commonProsperity/project/offline/{id} commonProsperity:project:offline 前置 1publish_status=0offline_time=now()

3.1.1 列表 Query

参数 类型 必填 说明
pageNum / pageSize int N 默认 1 / 20
projectName string N 项目名称模糊匹配
projectType int N 13 精确匹配
publishStatus int N 0 / 1 精确匹配

App / 前台:调用同一列表接口时固定传 publishStatus=1,仅展示已发布项目。

3.3.1 新增 / 修改 Body(JSON,驼峰)

字段 必填 说明
id 修改 Y 主键
projectName Y 1~20 字符
projectType Y 13
introduction Y 1~50 字符
projectContent Y 1~500 字符
implStartDate Y yyyy-MM-dd
implEndDate Y implStartDate
operationImages Y 数组,1~3 项;每项见下表
videoFileUrl / videoFilePath N 运营视频;二者同时有或同时无
coverFileUrl / coverFilePath N 封面;二者同时有或同时无
remark N 备注

operationImages[] 元素

字段 必填 说明
fileUrl Y 上传 /common/upload 返回的 url
filePath Y 上传返回的 fileName(存储路径)
sortOrder Y 13,同请求内不重复

列表/详情响应(除 Body 字段外)

字段 说明
publishStatus / publishTime / offlineTime 发布状态与时间
opImageCount 仅列表:运营图片数量
operationImages 仅详情:图片数组
createBy / createTime / updateBy / updateTime 审计字段

3.4 服务端校验(摘要)

规则
项目名称 非空,1~20
项目类型 ∈ {1,2,3}
项目简介 非空,1~50
项目内容 非空,1~500
实施日期 implEndDateimplStartDate
运营图片 1~3 张;后缀 jpg,jpeg,png;单张 ≤ 10 MB
运营视频 可空;有则后缀 mp4(可扩展);≤ 100 MB(与产品确认)
封面 可空;有则 jpg,jpeg,png;≤ 10 MB
状态 已发布禁止修改、删除;未发布禁止下架

3.5 附件与 Service 流程

  1. 前端 POST /common/upload → 取 urlfileName(作 filePath)。
  2. 新增:插主表 → 批量插子表。
  3. 修改:比对旧子表 path、旧视频/封面 path → 事务内更新主表、删子表再插 → 提交后删差异物理文件。
  4. 删除 / 下架:下架不删文件;删除主记录时删子表并删全部 file_path / video_file_path / cover_file_path

4. 菜单与权限 SQL(示例)

类型 名称 权限标识
目录 共同富裕
菜单 共同富裕项目 commonProsperity:project:list
按钮 查询 commonProsperity:project:query
按钮 新增 commonProsperity:project:add
按钮 修改 commonProsperity:project:edit
按钮 删除 commonProsperity:project:remove
按钮 发布 commonProsperity:project:publish
按钮 下架 commonProsperity:project:offline

组件路径建议:commonProsperity/project/index;API 文件 ruoyi-ui/src/api/commonProsperity/project.js


5. 交付清单

  • biz_common_prosperity_projectbiz_common_prosperity_project_op_image DDL 及菜单权限 SQL(sql/biz_common_prosperity_project.sql
  • BizCommonProsperityProject Domain(含 operationImages 非表字段)、子表 Mapper、Service、Controller
  • 前端:列表筛选、表单多图上传(限 3)、视频/封面、发布/下架与状态矩阵
  • 用例:运营图 1~3 校验、发布/下架、已发布不可改删、改图删旧文件、App 仅 publishStatus=1

6. 修订记录

版本 说明
1.0 初稿:对齐功能需求;主表 + 运营图片子表;发布/下架与产业政策宣传一致