From 268c7dcdc8e073f3566d249efd5a4f7bf161cf2f Mon Sep 17 00:00:00 2001 From: lizhengwei Date: Wed, 12 Nov 2025 18:32:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81H5=E4=BF=9D=E5=AD=98=E3=80=81?= =?UTF-8?q?=E5=88=86=E7=BB=84=E4=BF=9D=E5=AD=98=E7=AD=89=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-site/ruoyi-h5/doc/h5_groups.sql | 63 ++++++ ruoyi-site/ruoyi-h5/doc/h5_project_groups.sql | 34 ++++ ruoyi-site/ruoyi-h5/doc/h5_projects.sql | 41 ++++ .../api/controller/H5GroupController.java | 125 ++++++++++++ .../api/controller/H5ProjectController.java | 173 +++++++++++++++++ .../luban/api/convert/H5ProjectConvert.java | 54 ++++++ .../java/com/luban/api/dao/H5GroupDao.java | 17 ++ .../java/com/luban/api/dao/H5ProjectDao.java | 17 ++ .../com/luban/api/dao/H5ProjectGroupDao.java | 17 ++ .../dao/mongo/H5ProjectContentRepository.java | 14 ++ .../java/com/luban/api/dto/H5ProjectDTO.java | 79 ++++++++ .../java/com/luban/api/entity/H5Group.java | 66 +++++++ .../java/com/luban/api/entity/H5Project.java | 91 +++++++++ .../com/luban/api/entity/H5ProjectGroup.java | 46 +++++ .../api/entity/mongo/H5ProjectContent.java | 37 ++++ .../com/luban/api/service/H5GroupService.java | 15 ++ .../api/service/H5ProjectGroupService.java | 15 ++ .../luban/api/service/H5ProjectService.java | 62 ++++++ .../api/service/impl/H5GroupServiceImpl.java | 19 ++ .../impl/H5ProjectGroupServiceImpl.java | 19 ++ .../service/impl/H5ProjectServiceImpl.java | 180 ++++++++++++++++++ .../com/luban/api/vo/H5ProjectDetailVO.java | 37 ++++ .../java/com/luban/api/vo/H5ProjectVO.java | 94 +++++++++ 23 files changed, 1315 insertions(+) create mode 100644 ruoyi-site/ruoyi-h5/doc/h5_groups.sql create mode 100644 ruoyi-site/ruoyi-h5/doc/h5_project_groups.sql create mode 100644 ruoyi-site/ruoyi-h5/doc/h5_projects.sql create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5GroupController.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5ProjectController.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/convert/H5ProjectConvert.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5GroupDao.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectDao.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectGroupDao.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/mongo/H5ProjectContentRepository.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dto/H5ProjectDTO.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Group.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Project.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5ProjectGroup.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/mongo/H5ProjectContent.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5GroupService.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectGroupService.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectService.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5GroupServiceImpl.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectGroupServiceImpl.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectServiceImpl.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectDetailVO.java create mode 100644 ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectVO.java diff --git a/ruoyi-site/ruoyi-h5/doc/h5_groups.sql b/ruoyi-site/ruoyi-h5/doc/h5_groups.sql new file mode 100644 index 000000000..2dc5d2437 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/doc/h5_groups.sql @@ -0,0 +1,63 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80023 + Source Host : localhost:3306 + Source Schema : h5 + + Target Server Type : MySQL + Target Server Version : 80023 + File Encoding : 65001 + + Date: 12/11/2025 15:00:00 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for h5_groups +-- ---------------------------- +DROP TABLE IF EXISTS `h5_groups`; +CREATE TABLE `h5_groups` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分组名称', + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父级分组ID,0表示一级分组', + `type` int NOT NULL COMMENT '分组类型:1-物料 2-用途 3-行业', + `sort` int NOT NULL DEFAULT 0 COMMENT '排序', + `status` int NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-启用', + `create_time` bigint NULL DEFAULT NULL COMMENT '创建时间戳', + `update_time` bigint NULL DEFAULT NULL COMMENT '更新时间戳', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_parent_id`(`parent_id`) USING BTREE, + INDEX `idx_type`(`type`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'H5分组表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- 插入默认分组数据 +-- ---------------------------- +INSERT INTO `h5_groups` VALUES (1, '物料', 0, 1, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); +INSERT INTO `h5_groups` VALUES (2, '用途', 0, 2, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); +INSERT INTO `h5_groups` VALUES (3, '行业', 0, 3, 3, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +-- ---------------------------- +-- 插入二级分组数据 - 物料 +-- ---------------------------- +INSERT INTO `h5_groups` VALUES (4, '长页', 1, 1, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); +INSERT INTO `h5_groups` VALUES (5, '翻页', 1, 1, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +-- ---------------------------- +-- 插入二级分组数据 - 用途 +-- ---------------------------- +INSERT INTO `h5_groups` VALUES (6, '通用', 2, 2, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); +INSERT INTO `h5_groups` VALUES (7, '祝福问候', 2, 2, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +-- ---------------------------- +-- 插入二级分组数据 - 行业 +-- ---------------------------- +INSERT INTO `h5_groups` VALUES (8, '金融', 3, 3, 1, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); +INSERT INTO `h5_groups` VALUES (9, '医疗', 3, 3, 2, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/doc/h5_project_groups.sql b/ruoyi-site/ruoyi-h5/doc/h5_project_groups.sql new file mode 100644 index 000000000..fd59790b0 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/doc/h5_project_groups.sql @@ -0,0 +1,34 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80023 + Source Host : localhost:3306 + Source Schema : h5 + + Target Server Type : MySQL + Target Server Version : 80023 + File Encoding : 65001 + + Date: 12/11/2025 15:00:00 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for h5_project_groups +-- ---------------------------- +DROP TABLE IF EXISTS `h5_project_groups`; +CREATE TABLE `h5_project_groups` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `project_id` bigint NOT NULL COMMENT '项目ID', + `group_id` bigint NOT NULL COMMENT '分组ID', + `create_time` bigint NULL DEFAULT NULL COMMENT '创建时间戳', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_project_id`(`project_id`) USING BTREE, + INDEX `idx_group_id`(`group_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'H5项目与分组关联表' ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/doc/h5_projects.sql b/ruoyi-site/ruoyi-h5/doc/h5_projects.sql new file mode 100644 index 000000000..cb7a72579 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/doc/h5_projects.sql @@ -0,0 +1,41 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80023 + Source Host : localhost:3306 + Source Schema : h5 + + Target Server Type : MySQL + Target Server Version : 80023 + File Encoding : 65001 + + Date: 12/11/2025 14:30:00 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for h5_projects +-- ---------------------------- +DROP TABLE IF EXISTS `h5_projects`; +CREATE TABLE `h5_projects` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `type` varchar(10) NULL DEFAULT NULL COMMENT '类型', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题', + `content_id` varchar(255) not NULL DEFAULT NULL COMMENT '内容在MongoDB中的ID', + `content_updated_at` bigint NULL DEFAULT NULL COMMENT '内容更新时间戳', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', + `preview_url` varchar(500) NULL DEFAULT NULL COMMENT '预览图URL', + `preview_url_watermark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '水印预览图URL', + `preview_width` int NULL DEFAULT NULL COMMENT '预览图宽度', + `preview_height` int NULL DEFAULT NULL COMMENT '预览图高度', + `status` tinyint NULL DEFAULT NULL COMMENT '状态', + `create_time` bigint NULL DEFAULT NULL COMMENT '创建时间戳', + `update_time` bigint NULL DEFAULT NULL COMMENT '更新时间戳', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'H5项目表' ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5GroupController.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5GroupController.java new file mode 100644 index 000000000..ddfe163eb --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5GroupController.java @@ -0,0 +1,125 @@ +package com.luban.api.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.luban.api.entity.H5Group; +import com.luban.api.service.H5GroupService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * H5分组 前端控制器 + *

+ * + * @author your-name + */ +@RestController +@RequestMapping("/h5-groups") +@Tag(name = "H5分组管理", description = "H5分组管理") +@Slf4j +public class H5GroupController { + + @Autowired + private H5GroupService h5GroupService; + + /** + * 查询所有H5分组 + * + * @return H5分组列表 + */ + @Operation(summary = "查询所有H5分组") + @GetMapping + public List listAllH5Groups() { + return h5GroupService.list(); + } + + /** + * 分页查询H5分组 + * + * @param pageNum 页码 + * @param pageSize 每页大小 + * @return H5分组分页数据 + */ + @Operation(summary = "分页查询H5分组") + @GetMapping("/page") + public IPage listH5GroupsByPage(@RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + IPage page = new Page<>(pageNum, pageSize); + return h5GroupService.page(page); + } + + /** + * 根据ID查询H5分组 + * + * @param id H5分组ID + * @return H5分组信息 + */ + @Operation(summary = "根据ID查询H5分组") + @GetMapping("/{id}") + public H5Group getH5GroupById(@PathVariable Long id) { + return h5GroupService.getById(id); + } + + /** + * 根据父级ID查询子分组 + * + * @param parentId 父级ID + * @return 子分组列表 + */ + @Operation(summary = "根据父级ID查询子分组") + @GetMapping("/children/{parentId}") + public List getChildrenByParentId(@PathVariable Long parentId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(H5Group::getParentId, parentId); + return h5GroupService.list(queryWrapper); + } + + /** + * 创建H5分组 + * + * @param h5Group H5分组信息 + * @return 创建结果 + */ + @Operation(summary = "创建H5分组") + @PostMapping + public boolean createH5Group(@RequestBody H5Group h5Group) { + long currentTime = System.currentTimeMillis() / 1000; + h5Group.setCreateTime(currentTime); + h5Group.setUpdateTime(currentTime); + return h5GroupService.save(h5Group); + } + + /** + * 更新H5分组 + * + * @param id H5分组ID + * @param h5Group H5分组信息 + * @return 更新结果 + */ + @Operation(summary = "更新H5分组") + @PutMapping("/{id}") + public boolean updateH5Group(@PathVariable Long id, @RequestBody H5Group h5Group) { + h5Group.setId(id); + h5Group.setUpdateTime(System.currentTimeMillis() / 1000); + return h5GroupService.updateById(h5Group); + } + + /** + * 删除H5分组 + * + * @param id H5分组ID + * @return 删除结果 + */ + @Operation(summary = "删除H5分组") + @DeleteMapping("/{id}") + public boolean deleteH5Group(@PathVariable Long id) { + return h5GroupService.removeById(id); + } +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5ProjectController.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5ProjectController.java new file mode 100644 index 000000000..6b434bd13 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/controller/H5ProjectController.java @@ -0,0 +1,173 @@ +package com.luban.api.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.luban.api.entity.H5Project; +import com.luban.api.service.H5ProjectService; +import com.luban.api.vo.H5ProjectDetailVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * H5项目 前端控制器 + *

+ * + * @author your-name + */ +@RestController +@RequestMapping("/h5-projects") +@Tag(name = "H5项目管理", description = "H5项目管理") +@Slf4j +public class H5ProjectController { + + @Autowired + private H5ProjectService h5ProjectService; + + /** + * 查询所有H5项目 + * + * @return H5项目列表 + */ + @Operation(summary = "查询所有H5项目") + @GetMapping + public List listAllH5Projects() { + return h5ProjectService.list(); + } + + /** + * 分页查询H5项目 + * + * @param pageNum 页码 + * @param pageSize 每页大小 + * @return H5项目分页数据 + */ + @Operation(summary = "分页查询H5项目") + @GetMapping("/page") + public IPage listH5ProjectsByPage(@RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + IPage page = new Page<>(pageNum, pageSize); + return h5ProjectService.page(page); + } + + /** + * 根据ID查询H5项目 + * + * @param id H5项目ID + * @return H5项目信息 + */ + @Operation(summary = "根据ID查询H5项目") + @GetMapping("/{id}") + public H5ProjectDetailVO getH5ProjectById(@PathVariable Long id) { + H5Project h5Project = h5ProjectService.getH5ProjectWithContent(id); + + H5ProjectDetailVO detailVO = new H5ProjectDetailVO(); + detailVO.setProject(h5Project); + + // 获取项目内容 + if (h5Project != null && h5Project.getContentId() != null) { + String content = h5ProjectService.getProjectContent(h5Project.getContentId()); + detailVO.setContent(content); + } + + // 获取项目关联的分组ID列表 + List groupIds = h5ProjectService.getProjectGroupIds(id); + detailVO.setGroupIds(groupIds); + + return detailVO; + } + + /** + * 创建H5项目 + * + * @param request 包含H5项目信息和内容的请求 + * @return 项目ID + */ + @Operation(summary = "创建H5项目") + @PostMapping + public Long createH5Project(@RequestBody CreateH5ProjectRequest request) { + H5Project h5Project = new H5Project(); + h5Project.setType(request.getType()); + h5Project.setTitle(request.getTitle()); + h5Project.setContentUpdatedAt(request.getContentUpdatedAt()); + h5Project.setDescription(request.getDescription()); + h5Project.setPreviewUrl(request.getPreviewUrl()); + h5Project.setPreviewUrlWatermark(request.getPreviewUrlWatermark()); + h5Project.setPreviewWidth(request.getPreviewWidth()); + h5Project.setPreviewHeight(request.getPreviewHeight()); + h5Project.setStatus(request.getStatus()); + + boolean success = h5ProjectService.saveH5ProjectWithContent(h5Project, request.getContent(), request.getGroupIds()); + if (success) { + return h5Project.getId(); + } else { + throw new RuntimeException("创建项目失败"); + } + } + + /** + * 更新H5项目 + * + * @param id H5项目ID + * @param request 包含H5项目信息和内容的请求 + * @return 是否更新成功 + */ + @Operation(summary = "更新H5项目") + @PutMapping("/{id}") + public Boolean updateH5Project(@PathVariable Long id, @RequestBody CreateH5ProjectRequest request) { + H5Project h5Project = h5ProjectService.getById(id); + if (h5Project == null) { + throw new RuntimeException("项目不存在"); + } + + h5Project.setType(request.getType()); + h5Project.setTitle(request.getTitle()); + h5Project.setContentUpdatedAt(request.getContentUpdatedAt()); + h5Project.setDescription(request.getDescription()); + h5Project.setPreviewUrl(request.getPreviewUrl()); + h5Project.setPreviewUrlWatermark(request.getPreviewUrlWatermark()); + h5Project.setPreviewWidth(request.getPreviewWidth()); + h5Project.setPreviewHeight(request.getPreviewHeight()); + h5Project.setStatus(request.getStatus()); + + return h5ProjectService.updateH5ProjectWithContent(h5Project, request.getContent(), request.getGroupIds()); + } + + /** + * 删除H5项目 + * + * @param id H5项目ID + * @return 是否删除成功 + */ + @Operation(summary = "删除H5项目") + @DeleteMapping("/{id}") + public Boolean deleteH5Project(@PathVariable Long id) { + return h5ProjectService.removeH5ProjectWithContent(id); + } + + /** + * 创建H5项目请求类 + */ + @Getter + @Setter + public static class CreateH5ProjectRequest { + private String type; + private String title; + private String content; + private Long contentUpdatedAt; + private String description; + private String previewUrl; + private String previewUrlWatermark; + private Integer previewWidth; + private Integer previewHeight; + private Integer status; + private List groupIds; + } +} diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/convert/H5ProjectConvert.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/convert/H5ProjectConvert.java new file mode 100644 index 000000000..5b8ec8d1f --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/convert/H5ProjectConvert.java @@ -0,0 +1,54 @@ +package com.luban.api.convert; + +import com.luban.api.entity.H5Project; +import com.luban.api.vo.H5ProjectVO; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * H5项目转换器 + * + * @author your-name + */ +public class H5ProjectConvert { + + /** + * 将H5Project实体转换为H5ProjectVO视图对象 + * + * @param entity H5Project实体 + * @return H5ProjectVO视图对象 + */ + public static H5ProjectVO toVO(H5Project entity) { + H5ProjectVO vo = new H5ProjectVO(); + BeanUtils.copyProperties(entity, vo); + return vo; + } + + /** + * 将H5Project实体列表转换为H5ProjectVO视图对象列表 + * + * @param entitys H5Project实体列表 + * @return H5ProjectVO视图对象列表 + */ + public static List toVO(List entitys) { + List voList = new ArrayList<>(); + for (H5Project entity : entitys) { + voList.add(toVO(entity)); + } + return voList; + } + + /** + * 将H5ProjectVO视图对象转换为H5Project实体 + * + * @param vo H5ProjectVO视图对象 + * @return H5Project实体 + */ + public static H5Project toEntity(H5ProjectVO vo) { + H5Project entity = new H5Project(); + BeanUtils.copyProperties(vo, entity); + return entity; + } +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5GroupDao.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5GroupDao.java new file mode 100644 index 000000000..fca886c74 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5GroupDao.java @@ -0,0 +1,17 @@ +package com.luban.api.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luban.api.entity.H5Group; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * H5分组 Mapper 接口 + *

+ * + * @author your-name + */ +@Mapper +public interface H5GroupDao extends BaseMapper { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectDao.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectDao.java new file mode 100644 index 000000000..eaedec5a7 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectDao.java @@ -0,0 +1,17 @@ +package com.luban.api.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luban.api.entity.H5Project; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * H5项目 Mapper 接口 + *

+ * + * @author your-name + */ +@Mapper +public interface H5ProjectDao extends BaseMapper { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectGroupDao.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectGroupDao.java new file mode 100644 index 000000000..8227f8c3f --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/H5ProjectGroupDao.java @@ -0,0 +1,17 @@ +package com.luban.api.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.luban.api.entity.H5ProjectGroup; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * H5项目与分组关联 Mapper 接口 + *

+ * + * @author your-name + */ +@Mapper +public interface H5ProjectGroupDao extends BaseMapper { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/mongo/H5ProjectContentRepository.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/mongo/H5ProjectContentRepository.java new file mode 100644 index 000000000..554e0ddd3 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dao/mongo/H5ProjectContentRepository.java @@ -0,0 +1,14 @@ +package com.luban.api.dao.mongo; + +import com.luban.api.entity.mongo.H5ProjectContent; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +/** + * H5项目内容 Repository + * + * @author your-name + */ +@Repository +public interface H5ProjectContentRepository extends MongoRepository { +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dto/H5ProjectDTO.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dto/H5ProjectDTO.java new file mode 100644 index 000000000..dc7b4534d --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/dto/H5ProjectDTO.java @@ -0,0 +1,79 @@ +package com.luban.api.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * H5项目数据传输对象 + * + * @author your-name + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@Schema(title = "H5项目DTO") +public class H5ProjectDTO { + + /** + * 项目ID + */ + private Long projectId; + + /** + * 分组ID + */ + private Long groupId; + + /** + * 类型 + */ + private String type; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 内容更新时间戳 + */ + private Long contentUpdatedAt; + + /** + * 描述 + */ + private String description; + + /** + * 预览图URL + */ + private String previewUrl; + + /** + * 水印预览图URL + */ + private String previewUrlWatermark; + + /** + * 预览图宽度 + */ + private Integer previewWidth; + + /** + * 预览图高度 + */ + private Integer previewHeight; + + /** + * 状态 + */ + private Integer status; + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Group.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Group.java new file mode 100644 index 000000000..8b1e4e310 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Group.java @@ -0,0 +1,66 @@ +package com.luban.api.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * H5分组实体类 + * + * @author your-name + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@TableName("h5_groups") +@Schema(title = "H5分组对象") +public class H5Group implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 分组名称 + */ + private String name; + + /** + * 父级分组ID,0表示一级分组 + */ + private Long parentId; + + /** + * 分组类型:1-物料 2-用途 3-行业 + */ + private Integer type; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态:0-禁用 1-启用 + */ + private Integer status; + + /** + * 创建时间戳 + */ + private Long createTime; + + /** + * 更新时间戳 + */ + private Long updateTime; + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Project.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Project.java new file mode 100644 index 000000000..ea4907bee --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5Project.java @@ -0,0 +1,91 @@ +package com.luban.api.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * H5项目实体类 + * + * @author your-name + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@TableName("h5_projects") +@Schema(title = "H5项目对象") +public class H5Project implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 类型 + */ + private String type; + + /** + * 标题 + */ + private String title; + + /** + * 内容在MongoDB中的ID + */ + private String contentId; + + /** + * 内容更新时间戳 + */ + private Long contentUpdatedAt; + + /** + * 描述 + */ + private String description; + + /** + * 预览图URL + */ + private String previewUrl; + + /** + * 水印预览图URL + */ + private String previewUrlWatermark; + + /** + * 预览图宽度 + */ + private Integer previewWidth; + + /** + * 预览图高度 + */ + private Integer previewHeight; + + /** + * 状态 + */ + private Integer status; + + /** + * 创建时间戳 + */ + private Long createTime; + + /** + * 更新时间戳 + */ + private Long updateTime; + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5ProjectGroup.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5ProjectGroup.java new file mode 100644 index 000000000..1b78a6e6e --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/H5ProjectGroup.java @@ -0,0 +1,46 @@ +package com.luban.api.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * H5项目与分组关联实体类 + * + * @author your-name + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@TableName("h5_project_groups") +@Schema(title = "H5项目与分组关联对象") +public class H5ProjectGroup implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 分组ID + */ + private Long groupId; + + /** + * 创建时间戳 + */ + private Long createTime; + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/mongo/H5ProjectContent.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/mongo/H5ProjectContent.java new file mode 100644 index 000000000..f49155cda --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/entity/mongo/H5ProjectContent.java @@ -0,0 +1,37 @@ +package com.luban.api.entity.mongo; + +import lombok.Data; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +/** + * H5项目内容实体类 (存储在MongoDB中) + * + * @author your-name + */ +@Data +@Document(collection = "h5_project_content") +public class H5ProjectContent { + + /** + * 主键ID,与MySQL中H5Project的contentId对应 + */ + @Id + private String id; + + /** + * 内容 + */ + private String content; + + /** + * 创建时间戳 + */ + private Long createTime; + + /** + * 更新时间戳 + */ + private Long updateTime; + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5GroupService.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5GroupService.java new file mode 100644 index 000000000..3fc00be80 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5GroupService.java @@ -0,0 +1,15 @@ +package com.luban.api.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.luban.api.entity.H5Group; + +/** + *

+ * H5分组 服务类 + *

+ * + * @author your-name + */ +public interface H5GroupService extends IService { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectGroupService.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectGroupService.java new file mode 100644 index 000000000..07665979f --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectGroupService.java @@ -0,0 +1,15 @@ +package com.luban.api.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.luban.api.entity.H5ProjectGroup; + +/** + *

+ * H5项目与分组关联 服务类 + *

+ * + * @author your-name + */ +public interface H5ProjectGroupService extends IService { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectService.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectService.java new file mode 100644 index 000000000..6aa7a8a47 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/H5ProjectService.java @@ -0,0 +1,62 @@ +package com.luban.api.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.luban.api.entity.H5Project; + +import java.util.List; + +/** + *

+ * H5项目 服务类 + *

+ * + * @author your-name + */ +public interface H5ProjectService extends IService { + + /** + * 保存H5项目及其内容 + * @param h5Project H5项目信息 + * @param content 项目内容 + * @param groupIds 分组ID列表 + * @return 是否保存成功 + */ + boolean saveH5ProjectWithContent(H5Project h5Project, String content, List groupIds); + + /** + * 更新H5项目及其内容 + * @param h5Project H5项目信息 + * @param content 项目内容 + * @param groupIds 分组ID列表 + * @return 是否更新成功 + */ + boolean updateH5ProjectWithContent(H5Project h5Project, String content, List groupIds); + + /** + * 根据ID获取H5项目及其内容 + * @param id H5项目ID + * @return H5项目信息及内容 + */ + H5Project getH5ProjectWithContent(Long id); + + /** + * 删除H5项目及其内容 + * @param id H5项目ID + * @return 是否删除成功 + */ + boolean removeH5ProjectWithContent(Long id); + + /** + * 获取项目关联的分组ID列表 + * @param projectId 项目ID + * @return 分组ID列表 + */ + List getProjectGroupIds(Long projectId); + + /** + * 获取项目内容 + * @param contentId 内容ID + * @return 项目内容 + */ + String getProjectContent(String contentId); +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5GroupServiceImpl.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5GroupServiceImpl.java new file mode 100644 index 000000000..78aa968f7 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5GroupServiceImpl.java @@ -0,0 +1,19 @@ +package com.luban.api.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luban.api.dao.H5GroupDao; +import com.luban.api.entity.H5Group; +import com.luban.api.service.H5GroupService; +import org.springframework.stereotype.Service; + +/** + *

+ * H5分组 服务实现类 + *

+ * + * @author your-name + */ +@Service +public class H5GroupServiceImpl extends ServiceImpl implements H5GroupService { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectGroupServiceImpl.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectGroupServiceImpl.java new file mode 100644 index 000000000..7b57a6b88 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectGroupServiceImpl.java @@ -0,0 +1,19 @@ +package com.luban.api.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luban.api.dao.H5ProjectGroupDao; +import com.luban.api.entity.H5ProjectGroup; +import com.luban.api.service.H5ProjectGroupService; +import org.springframework.stereotype.Service; + +/** + *

+ * H5项目与分组关联 服务实现类 + *

+ * + * @author your-name + */ +@Service +public class H5ProjectGroupServiceImpl extends ServiceImpl implements H5ProjectGroupService { + +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectServiceImpl.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectServiceImpl.java new file mode 100644 index 000000000..433100311 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/service/impl/H5ProjectServiceImpl.java @@ -0,0 +1,180 @@ +package com.luban.api.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.luban.api.dao.H5ProjectDao; +import com.luban.api.dao.H5ProjectGroupDao; +import com.luban.api.dao.mongo.H5ProjectContentRepository; +import com.luban.api.entity.H5Project; +import com.luban.api.entity.H5ProjectGroup; +import com.luban.api.entity.mongo.H5ProjectContent; +import com.luban.api.service.H5ProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + *

+ * H5项目 服务实现类 + *

+ * + * @author your-name + */ +@Service +public class H5ProjectServiceImpl extends ServiceImpl implements H5ProjectService { + + @Autowired + private H5ProjectContentRepository h5ProjectContentRepository; + + @Autowired + private H5ProjectGroupDao h5ProjectGroupDao; + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveH5ProjectWithContent(H5Project h5Project, String content, List groupIds) { + // 设置创建和更新时间戳 + long currentTime = System.currentTimeMillis() / 1000; + h5Project.setCreateTime(currentTime); + h5Project.setUpdateTime(currentTime); + + // 先保存H5Project基本信息到MySQL + boolean saved = this.save(h5Project); + + if (saved && StringUtils.hasText(content)) { + // 生成contentId + String contentId = UUID.randomUUID().toString(); + h5Project.setContentId(contentId); + h5Project.setUpdateTime(System.currentTimeMillis() / 1000); + this.updateById(h5Project); + + // 创建H5ProjectContent并保存到MongoDB + H5ProjectContent h5ProjectContent = new H5ProjectContent(); + h5ProjectContent.setId(contentId); + h5ProjectContent.setContent(content); + h5ProjectContent.setCreateTime(currentTime); + h5ProjectContent.setUpdateTime(currentTime); + + h5ProjectContentRepository.save(h5ProjectContent); + } + + // 保存项目与分组的关联关系 + if (saved && groupIds != null && !groupIds.isEmpty()) { + saveProjectGroups(h5Project.getId(), groupIds, currentTime); + } + + return saved; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateH5ProjectWithContent(H5Project h5Project, String content, List groupIds) { + // 设置更新时间戳 + long currentTime = System.currentTimeMillis() / 1000; + h5Project.setUpdateTime(currentTime); + + // 更新H5Project基本信息到MySQL + boolean updated = this.updateById(h5Project); + + if (updated && StringUtils.hasText(content)) { + // 更新或创建H5ProjectContent到MongoDB + String contentId = h5Project.getContentId(); + if (contentId == null) { + contentId = UUID.randomUUID().toString(); + h5Project.setContentId(contentId); + h5Project.setUpdateTime(System.currentTimeMillis() / 1000); + this.updateById(h5Project); + } + + H5ProjectContent h5ProjectContent = h5ProjectContentRepository.findById(contentId).orElse(new H5ProjectContent()); + h5ProjectContent.setId(contentId); + h5ProjectContent.setContent(content); + h5ProjectContent.setUpdateTime(currentTime); + + h5ProjectContentRepository.save(h5ProjectContent); + } + + // 更新项目与分组的关联关系 + if (updated && groupIds != null) { + h5ProjectGroupDao.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(H5ProjectGroup::getProjectId, h5Project.getId())); + + if (!groupIds.isEmpty()) { + saveProjectGroups(h5Project.getId(), groupIds, currentTime); + } + } + + return updated; + } + + @Override + public H5Project getH5ProjectWithContent(Long id) { + // 获取MySQL中的H5Project基本信息 + H5Project h5Project = this.getById(id); + + if (h5Project != null && h5Project.getContentId() != null) { + // 获取MongoDB中的内容 + H5ProjectContent h5ProjectContent = h5ProjectContentRepository.findById(h5Project.getContentId()).orElse(null); + // 可以在这里将content设置到h5Project的某个属性中,如果需要的话 + } + + return h5Project; + } + + @Override + public String getProjectContent(String contentId) { + if (contentId != null) { + H5ProjectContent content = h5ProjectContentRepository.findById(contentId).orElse(null); + return content != null ? content.getContent() : null; + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean removeH5ProjectWithContent(Long id) { + H5Project h5Project = this.getById(id); + if (h5Project != null) { + // 先删除MongoDB中的内容 + if (h5Project.getContentId() != null) { + h5ProjectContentRepository.deleteById(h5Project.getContentId()); + } + + // 删除项目与分组的关联关系 + h5ProjectGroupDao.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(H5ProjectGroup::getProjectId, id)); + + // 再删除MySQL中的记录 + return this.removeById(id); + } + return false; + } + + /** + * 保存项目与分组的关联关系 + * @param projectId 项目ID + * @param groupIds 分组ID列表 + * @param currentTime 当前时间戳 + */ + private void saveProjectGroups(Long projectId, List groupIds, long currentTime) { + for (Long groupId : groupIds) { + H5ProjectGroup projectGroup = new H5ProjectGroup(); + projectGroup.setProjectId(projectId); + projectGroup.setGroupId(groupId); + projectGroup.setCreateTime(currentTime); + h5ProjectGroupDao.insert(projectGroup); + } + } + + @Override + public List getProjectGroupIds(Long projectId) { + return h5ProjectGroupDao.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(H5ProjectGroup::getProjectId, projectId)) + .stream() + .map(H5ProjectGroup::getGroupId) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectDetailVO.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectDetailVO.java new file mode 100644 index 000000000..9f0c29fb5 --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectDetailVO.java @@ -0,0 +1,37 @@ +package com.luban.api.vo; + +import com.luban.api.entity.H5Project; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * H5项目详情VO + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@Schema(title = "H5项目详情") +public class H5ProjectDetailVO { + + /** + * 项目基本信息 + */ + @Schema(title = "项目基本信息") + private H5Project project; + + /** + * 项目内容 + */ + @Schema(title = "项目内容") + private String content; + + /** + * 项目关联的分组ID列表 + */ + @Schema(title = "项目关联的分组ID列表") + private List groupIds; +} \ No newline at end of file diff --git a/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectVO.java b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectVO.java new file mode 100644 index 000000000..7ee3585af --- /dev/null +++ b/ruoyi-site/ruoyi-h5/src/main/java/com/luban/api/vo/H5ProjectVO.java @@ -0,0 +1,94 @@ +package com.luban.api.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * H5项目视图对象 + * + * @author your-name + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +@Schema(title = "H5项目视图对象") +public class H5ProjectVO { + + /** + * 主键ID + */ + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 分组ID + */ + private Long groupId; + + /** + * 类型 + */ + private String type; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 内容更新时间戳 + */ + private Long contentUpdatedAt; + + /** + * 描述 + */ + private String description; + + /** + * 预览图URL + */ + private String previewUrl; + + /** + * 水印预览图URL + */ + private String previewUrlWatermark; + + /** + * 预览图宽度 + */ + private Integer previewWidth; + + /** + * 预览图高度 + */ + private Integer previewHeight; + + /** + * 状态 + */ + private Integer status; + + /** + * 创建时间戳 + */ + private Long createTime; + + /** + * 更新时间戳 + */ + private Long updateTime; + +} \ No newline at end of file