初始化表结构

This commit is contained in:
lizhengwei 2025-11-13 18:12:17 +08:00
parent 00f898ab7e
commit 0cc70434fc
10 changed files with 3880 additions and 53 deletions

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,6 @@ CREATE TABLE `h5_project`
`id` bigint PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`type` varchar(10) NOT NULL COMMENT '类型',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题',
`content_id` varchar(255) NOT 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',

View File

@ -72,8 +72,8 @@ public class H5ProjectController {
detailVO.setProject(h5Project);
// 获取项目内容
if (h5Project != null && h5Project.getContentId() != null) {
String content = h5ProjectService.getProjectContent(h5Project.getContentId());
if (h5Project != null) {
String content = h5ProjectService.getProjectContent(h5Project.getId());
detailVO.setContent(content);
}

View File

@ -1,6 +1,8 @@
package com.luban.api.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -38,10 +40,6 @@ public class H5Project implements Serializable {
*/
private String title;
/**
* 内容在MongoDB中的ID
*/
private String contentId;
/**
* 内容更新时间戳

View File

@ -8,5 +8,5 @@ import org.springframework.data.mongodb.repository.MongoRepository;
*
* @author your-name
*/
public interface H5ProjectContentRepository extends MongoRepository<H5ProjectContent, String> {
public interface H5ProjectContentRepository extends MongoRepository<H5ProjectContent, Long> {
}

View File

@ -14,10 +14,10 @@ import org.springframework.data.mongodb.core.mapping.Document;
public class H5ProjectContent {
/**
* 主键ID与MySQL中H5Project的contentId对应
* 主键ID与MySQL中H5Project的ID对应
*/
@Id
private String id;
private Long id;
/**
* 内容

View File

@ -16,24 +16,27 @@ public interface H5ProjectService extends IService<H5Project> {
/**
* 保存H5项目及其内容
*
* @param h5Project H5项目信息
* @param content 项目内容
* @param groupIds 分组ID列表
* @param content 项目内容
* @param groupIds 分组ID列表
* @return 是否保存成功
*/
boolean saveH5ProjectWithContent(H5Project h5Project, String content, List<Long> groupIds);
/**
* 更新H5项目及其内容
*
* @param h5Project H5项目信息
* @param content 项目内容
* @param groupIds 分组ID列表
* @param content 项目内容
* @param groupIds 分组ID列表
* @return 是否更新成功
*/
boolean updateH5ProjectWithContent(H5Project h5Project, String content, List<Long> groupIds);
/**
* 根据ID获取H5项目及其内容
*
* @param id H5项目ID
* @return H5项目信息及内容
*/
@ -41,6 +44,7 @@ public interface H5ProjectService extends IService<H5Project> {
/**
* 删除H5项目及其内容
*
* @param id H5项目ID
* @return 是否删除成功
*/
@ -48,6 +52,7 @@ public interface H5ProjectService extends IService<H5Project> {
/**
* 获取项目关联的分组ID列表
*
* @param projectId 项目ID
* @return 分组ID列表
*/
@ -55,8 +60,9 @@ public interface H5ProjectService extends IService<H5Project> {
/**
* 获取项目内容
*
* @param contentId 内容ID
* @return 项目内容
*/
String getProjectContent(String contentId);
String getProjectContent(Long contentId);
}

View File

@ -3,9 +3,9 @@ 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.mongo.dao.H5ProjectContentRepository;
import com.luban.api.entity.H5Project;
import com.luban.api.entity.H5ProjectGroup;
import com.luban.api.mongo.dao.H5ProjectContentRepository;
import com.luban.api.mongo.entity.H5ProjectContent;
import com.luban.api.service.H5ProjectService;
import org.springframework.beans.factory.annotation.Autowired;
@ -14,7 +14,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@ -37,7 +36,7 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
@Transactional(rollbackFor = Exception.class)
public boolean saveH5ProjectWithContent(H5Project h5Project, String content, List<Long> groupIds) {
// 设置创建和更新时间戳
long currentTime = System.currentTimeMillis() / 1000;
long currentTime = System.currentTimeMillis();
h5Project.setCreateTime(currentTime);
h5Project.setUpdateTime(currentTime);
@ -45,15 +44,9 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
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到MongoDB
H5ProjectContent h5ProjectContent = new H5ProjectContent();
h5ProjectContent.setId(contentId);
h5ProjectContent.setId(h5Project.getId());
h5ProjectContent.setContent(content);
h5ProjectContent.setCreateTime(currentTime);
h5ProjectContent.setUpdateTime(currentTime);
@ -73,7 +66,7 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
@Transactional(rollbackFor = Exception.class)
public boolean updateH5ProjectWithContent(H5Project h5Project, String content, List<Long> groupIds) {
// 设置更新时间戳
long currentTime = System.currentTimeMillis() / 1000;
long currentTime = System.currentTimeMillis();
h5Project.setUpdateTime(currentTime);
// 更新H5Project基本信息到MySQL
@ -81,16 +74,8 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
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 h5ProjectContent = h5ProjectContentRepository.findById(h5Project.getId()).orElse(new H5ProjectContent());
h5ProjectContent.setId(h5Project.getId());
h5ProjectContent.setContent(content);
h5ProjectContent.setUpdateTime(currentTime);
@ -115,9 +100,9 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
// 获取MySQL中的H5Project基本信息
H5Project h5Project = this.getById(id);
if (h5Project != null && h5Project.getContentId() != null) {
if (h5Project != null) {
// 获取MongoDB中的内容
H5ProjectContent h5ProjectContent = h5ProjectContentRepository.findById(h5Project.getContentId()).orElse(null);
H5ProjectContent h5ProjectContent = h5ProjectContentRepository.findById(id).orElse(null);
// 可以在这里将content设置到h5Project的某个属性中如果需要的话
}
@ -125,10 +110,15 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
}
@Override
public String getProjectContent(String contentId) {
public String getProjectContent(Long contentId) {
if (contentId != null) {
H5ProjectContent content = h5ProjectContentRepository.findById(contentId).orElse(null);
return content != null ? content.getContent() : null;
try {
Long id = Long.valueOf(contentId);
H5ProjectContent content = h5ProjectContentRepository.findById(id).orElse(null);
return content != null ? content.getContent() : null;
} catch (NumberFormatException e) {
return null;
}
}
return null;
}
@ -139,9 +129,7 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
H5Project h5Project = this.getById(id);
if (h5Project != null) {
// 先删除MongoDB中的内容
if (h5Project.getContentId() != null) {
h5ProjectContentRepository.deleteById(h5Project.getContentId());
}
h5ProjectContentRepository.deleteById(id);
// 删除项目与分组的关联关系
h5ProjectGroupDao.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<H5ProjectGroup>()
@ -155,8 +143,9 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
/**
* 保存项目与分组的关联关系
* @param projectId 项目ID
* @param groupIds 分组ID列表
*
* @param projectId 项目ID
* @param groupIds 分组ID列表
* @param currentTime 当前时间戳
*/
private void saveProjectGroups(Long projectId, List<Long> groupIds, long currentTime) {
@ -172,7 +161,7 @@ public class H5ProjectServiceImpl extends ServiceImpl<H5ProjectDao, H5Project> i
@Override
public List<Long> getProjectGroupIds(Long projectId) {
return h5ProjectGroupDao.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<H5ProjectGroup>()
.eq(H5ProjectGroup::getProjectId, projectId))
.eq(H5ProjectGroup::getProjectId, projectId))
.stream()
.map(H5ProjectGroup::getGroupId)
.collect(Collectors.toList());