✨ 模板组复制功能
This commit is contained in:
@@ -64,11 +64,28 @@ public class TemplateGroupController {
|
||||
// @CreateOperationLogging(msg = "新增模板组" )
|
||||
@PostMapping
|
||||
// @PreAuthorize("@per.hasPermission('codegen:templategroup:add')" )
|
||||
public R save(@RequestBody TemplateGroup templateGroup) {
|
||||
public R<?> save(@RequestBody TemplateGroup templateGroup) {
|
||||
return templateGroupService.save(templateGroup) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增模板组失败");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 复制模板组
|
||||
* @param resourceId 原模板组id
|
||||
* @param templateGroup 新模板组实体
|
||||
* @return R
|
||||
*/
|
||||
@PostMapping("/{resourceId}")
|
||||
@ApiOperation(value = "复制模板组", notes = "复制模板组")
|
||||
public R<?> copy(@PathVariable Integer resourceId,
|
||||
@RequestBody TemplateGroup templateGroup) {
|
||||
return templateGroupService.copy(resourceId, templateGroup) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "复制模板组失败");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 修改模板组
|
||||
* @param templateGroup 模板组
|
||||
|
||||
@@ -30,6 +30,12 @@ public class TemplateInfo extends Model<TemplateInfo> {
|
||||
@ApiModelProperty(value = "目录项ID")
|
||||
private Integer directoryEntryId;
|
||||
|
||||
/**
|
||||
* 模板组Id
|
||||
*/
|
||||
@ApiModelProperty(value = "模板组Id")
|
||||
private Integer groupId;
|
||||
|
||||
/**
|
||||
* 模板名称
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.hccake.ballcat.codegen.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hccake.ballcat.codegen.model.bo.TemplateFile;
|
||||
import com.hccake.ballcat.codegen.model.dto.TemplateDirectoryCreateDTO;
|
||||
import com.hccake.ballcat.codegen.model.entity.TemplateDirectoryEntry;
|
||||
import com.hccake.ballcat.codegen.model.vo.TemplateDirectoryEntryVO;
|
||||
@@ -68,4 +69,17 @@ public interface TemplateDirectoryEntryService extends IService<TemplateDirector
|
||||
*/
|
||||
boolean removeEntry(Integer entryId, Integer mode);
|
||||
|
||||
/**
|
||||
* 获取模板文件
|
||||
* @param groupId 模板组Id
|
||||
* @return List 模板文件
|
||||
*/
|
||||
List<TemplateFile> findTemplateFiles(Integer groupId);
|
||||
|
||||
/**
|
||||
* 复制模板目录项文件
|
||||
* @param resourceId 原模板组
|
||||
* @param groupId 模板模板组
|
||||
*/
|
||||
void copy(Integer resourceId, Integer groupId);
|
||||
}
|
||||
@@ -38,4 +38,13 @@ public interface TemplateGroupService extends IService<TemplateGroup> {
|
||||
* @return List<SelectData<?>>
|
||||
*/
|
||||
List<SelectData<?>> getSelectData();
|
||||
|
||||
/**
|
||||
* 复制模板组
|
||||
*
|
||||
* @param resourceId
|
||||
* @param templateGroup 模板组
|
||||
* @return boolean 复制成功: true
|
||||
*/
|
||||
boolean copy(Integer resourceId, TemplateGroup templateGroup);
|
||||
}
|
||||
@@ -31,4 +31,10 @@ public interface TemplatePropertyService extends IService<TemplateProperty> {
|
||||
*/
|
||||
List<TemplatePropertyVO> list(Integer templateGroupId);
|
||||
|
||||
/**
|
||||
* 复制模板属性配置
|
||||
* @param resourceId 原模板组ID
|
||||
* @param groupId 模板模板组ID
|
||||
*/
|
||||
void copy(Integer resourceId, Integer groupId);
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.hccake.ballcat.codegen.constant.DirectoryEntryRemoveModeEnum;
|
||||
import com.hccake.ballcat.codegen.constant.DirectoryEntryTypeEnum;
|
||||
import com.hccake.ballcat.codegen.mapper.TemplateDirectoryEntryMapper;
|
||||
import com.hccake.ballcat.codegen.model.bo.TemplateFile;
|
||||
import com.hccake.ballcat.codegen.model.converter.TemplateModelConverter;
|
||||
import com.hccake.ballcat.codegen.model.dto.TemplateDirectoryCreateDTO;
|
||||
import com.hccake.ballcat.codegen.model.dto.TemplateInfoDTO;
|
||||
@@ -26,7 +27,8 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -187,6 +189,117 @@ public class TemplateDirectoryEntryServiceImpl extends ServiceImpl<TemplateDirec
|
||||
return SqlHelper.retBool(baseMapper.deleteById(entryId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制模板目录项文件
|
||||
*
|
||||
* @param resourceId 原模板组
|
||||
* @param groupId 模板模板组
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void copy(Integer resourceId, Integer groupId) {
|
||||
// 1. ===============获取模板目录项==================
|
||||
List<TemplateDirectoryEntry> list = baseMapper
|
||||
.selectList(Wrappers.<TemplateDirectoryEntry>lambdaQuery().eq(TemplateDirectoryEntry::getGroupId, resourceId));
|
||||
|
||||
// 2. ============== 复制模板文件 ===================
|
||||
Set<Integer> oldParentIdSet = new HashSet<>();
|
||||
List<Integer> originEntryIds = new ArrayList<>();
|
||||
for (TemplateDirectoryEntry entry : list) {
|
||||
originEntryIds.add(entry.getId());
|
||||
oldParentIdSet.add(entry.getParentId());
|
||||
|
||||
entry.setGroupId(groupId);
|
||||
entry.setId(null);
|
||||
entry.setCreateTime(null);
|
||||
entry.setUpdateTime(null);
|
||||
}
|
||||
this.saveBatch(list);
|
||||
|
||||
// 3. =============== 获取新老ID的映射表,key: oldId, value: newId ==========
|
||||
Map<Integer, Integer> idMap = new HashMap<>();
|
||||
for (int i = 0; i < originEntryIds.size(); i++) {
|
||||
idMap.put(originEntryIds.get(i), list.get(i).getId());
|
||||
}
|
||||
|
||||
// 4. =============== 更新复制出来的模板文件的父级ID ===============
|
||||
// 父节点为根节点的不需要修改
|
||||
oldParentIdSet.remove(GlobalConstants.TREE_ROOT_ID);
|
||||
for (Integer oldParentId : oldParentIdSet) {
|
||||
baseMapper.update(null, Wrappers.<TemplateDirectoryEntry>lambdaUpdate()
|
||||
.set(TemplateDirectoryEntry::getParentId, idMap.get(oldParentId))
|
||||
.eq(TemplateDirectoryEntry::getParentId, oldParentId)
|
||||
.eq(TemplateDirectoryEntry::getGroupId, groupId));
|
||||
}
|
||||
|
||||
|
||||
// 5. ================保存模板文件详情信息===================
|
||||
List<TemplateInfo> templateInfoList = templateInfoService.list(Wrappers.<TemplateInfo>lambdaQuery()
|
||||
.eq(TemplateInfo::getGroupId, resourceId));
|
||||
for (TemplateInfo templateInfo : templateInfoList) {
|
||||
Integer oldId = templateInfo.getDirectoryEntryId();
|
||||
Integer newId = idMap.get(oldId);
|
||||
templateInfo.setDirectoryEntryId(newId);
|
||||
|
||||
templateInfo.setCreateTime(null);
|
||||
templateInfo.setUpdateTime(null);
|
||||
}
|
||||
templateInfoService.saveBatch(templateInfoList);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模板文件
|
||||
* @param groupId 模板组Id
|
||||
* @return List 模板文件
|
||||
*/
|
||||
@Override
|
||||
public List<TemplateFile> findTemplateFiles(Integer groupId) {
|
||||
// 获取模板目录项
|
||||
List<TemplateDirectoryEntry> list = baseMapper.selectList(
|
||||
Wrappers.<TemplateDirectoryEntry>lambdaQuery().eq(TemplateDirectoryEntry::getGroupId, groupId));
|
||||
// 转树形目录结构
|
||||
List<TemplateDirectory> treeList = TreeUtil.buildTree(list, GlobalConstants.TREE_ROOT_ID,
|
||||
TemplateModelConverter.INSTANCE::entryPoToTree);
|
||||
|
||||
// 填充模板文件
|
||||
List<TemplateFile> templateFiles = new ArrayList<>();
|
||||
for (TemplateDirectory tree : treeList) {
|
||||
fillTemplateFiles(tree, templateFiles, "");
|
||||
}
|
||||
return templateFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充模板文件信息
|
||||
* @param current 当前目录项
|
||||
* @param list 模板文件列表
|
||||
* @param path 当前目录路径
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private void fillTemplateFiles(TemplateDirectory current, List<TemplateFile> list, String path) {
|
||||
|
||||
// 文件夹类型则递归子节点
|
||||
if (DirectoryEntryTypeEnum.FOLDER.getType().equals(current.getType())) {
|
||||
List<TemplateDirectory> children = (List<TemplateDirectory>) current.getChildren();
|
||||
// 递归调用子节点,查找叶子节点
|
||||
if (CollectionUtil.isNotEmpty(children)) {
|
||||
for (TemplateDirectory child : children) {
|
||||
fillTemplateFiles(child, list, path + current.getFileName() + File.separator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 目录项类型为文件则记录(文件必然是叶子节点)
|
||||
if (DirectoryEntryTypeEnum.FILE.getType().equals(current.getType())) {
|
||||
// 查找对应的模板文件详情信息
|
||||
TemplateInfo templateInfo = templateInfoService.getById(current.getId());
|
||||
TemplateFile templateFile = new TemplateFile().setFileName(current.getFileName()).setFilePath(path)
|
||||
.setContent(templateInfo.getContent()).setEngineType(templateInfo.getEngineType());
|
||||
list.add(templateFile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建一个目录项
|
||||
* @param entryDTO 目录项新建传输对象
|
||||
|
||||
@@ -1,32 +1,25 @@
|
||||
package com.hccake.ballcat.codegen.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.hccake.ballcat.codegen.constant.DirectoryEntryTypeEnum;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.hccake.ballcat.codegen.mapper.TemplateGroupMapper;
|
||||
import com.hccake.ballcat.codegen.model.bo.TemplateFile;
|
||||
import com.hccake.ballcat.codegen.model.converter.TemplateModelConverter;
|
||||
import com.hccake.ballcat.codegen.model.entity.TemplateDirectoryEntry;
|
||||
import com.hccake.ballcat.codegen.model.entity.TemplateGroup;
|
||||
import com.hccake.ballcat.codegen.model.entity.TemplateInfo;
|
||||
import com.hccake.ballcat.codegen.model.qo.TemplateGroupQO;
|
||||
import com.hccake.ballcat.codegen.model.vo.TemplateDirectory;
|
||||
import com.hccake.ballcat.codegen.model.vo.TemplateGroupVO;
|
||||
import com.hccake.ballcat.codegen.service.TemplateDirectoryEntryService;
|
||||
import com.hccake.ballcat.codegen.service.TemplateGroupService;
|
||||
import com.hccake.ballcat.codegen.service.TemplateInfoService;
|
||||
import com.hccake.ballcat.common.core.constant.GlobalConstants;
|
||||
import com.hccake.ballcat.common.core.util.TreeUtil;
|
||||
import com.hccake.ballcat.codegen.service.TemplatePropertyService;
|
||||
import com.hccake.ballcat.common.core.vo.SelectData;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -39,12 +32,9 @@ import java.util.List;
|
||||
@RequiredArgsConstructor
|
||||
public class TemplateGroupServiceImpl extends ServiceImpl<TemplateGroupMapper, TemplateGroup>
|
||||
implements TemplateGroupService {
|
||||
|
||||
private final static String TABLE_ALIAS_PREFIX = "tg.";
|
||||
|
||||
private final TemplateDirectoryEntryService templateDirectoryEntryService;
|
||||
|
||||
private final TemplateInfoService templateInfoService;
|
||||
private final TemplatePropertyService templatePropertyService;
|
||||
|
||||
/**
|
||||
* 根据QueryObject查询分页数据
|
||||
@@ -66,20 +56,7 @@ public class TemplateGroupServiceImpl extends ServiceImpl<TemplateGroupMapper, T
|
||||
*/
|
||||
@Override
|
||||
public List<TemplateFile> findTemplateFiles(Integer groupId) {
|
||||
// 获取模板目录项
|
||||
List<TemplateDirectoryEntry> list = templateDirectoryEntryService
|
||||
.list(Wrappers.<TemplateDirectoryEntry>lambdaQuery().eq(TemplateDirectoryEntry::getGroupId, groupId));
|
||||
// 转树形目录结构
|
||||
List<TemplateDirectory> treeList = TreeUtil.buildTree(list, GlobalConstants.TREE_ROOT_ID,
|
||||
TemplateModelConverter.INSTANCE::entryPoToTree);
|
||||
|
||||
// 填充模板文件
|
||||
List<TemplateFile> templateFiles = new ArrayList<>();
|
||||
for (TemplateDirectory tree : treeList) {
|
||||
fillTemplateFiles(tree, templateFiles, "");
|
||||
}
|
||||
|
||||
return templateFiles;
|
||||
return templateDirectoryEntryService.findTemplateFiles(groupId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,33 +69,27 @@ public class TemplateGroupServiceImpl extends ServiceImpl<TemplateGroupMapper, T
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充模板文件信息
|
||||
* @param current 当前目录项
|
||||
* @param list 模板文件列表
|
||||
* @param path 当前目录路径
|
||||
* 复制模板组
|
||||
*
|
||||
*
|
||||
* @param resourceId 原资源组id
|
||||
* @param templateGroup 模板组
|
||||
* @return boolean 复制成功: true
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private void fillTemplateFiles(TemplateDirectory current, List<TemplateFile> list, String path) {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean copy(Integer resourceId, TemplateGroup templateGroup) {
|
||||
// 清空id
|
||||
templateGroup.setId(null);
|
||||
int insertFlag = baseMapper.insert(templateGroup);
|
||||
Assert.isTrue(SqlHelper.retBool(insertFlag), "复制模板组时,保存模板组失败:[{}]", templateGroup);
|
||||
// 获取落库成功后的自增ID
|
||||
Integer groupId = templateGroup.getId();
|
||||
// 复制模板目录文件
|
||||
templateDirectoryEntryService.copy(resourceId, groupId);
|
||||
// 复制模板属性配置
|
||||
templatePropertyService.copy(resourceId, groupId);
|
||||
|
||||
// 文件夹类型则递归子节点
|
||||
if (DirectoryEntryTypeEnum.FOLDER.getType().equals(current.getType())) {
|
||||
List<TemplateDirectory> children = (List<TemplateDirectory>) current.getChildren();
|
||||
// 递归调用子节点,查找叶子节点
|
||||
if (CollectionUtil.isNotEmpty(children)) {
|
||||
for (TemplateDirectory child : children) {
|
||||
fillTemplateFiles(child, list, path + current.getFileName() + File.separator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 目录项类型为文件则记录(文件必然是叶子节点)
|
||||
if (DirectoryEntryTypeEnum.FILE.getType().equals(current.getType())) {
|
||||
// 查找对应的模板文件详情信息
|
||||
TemplateInfo templateInfo = templateInfoService.getById(current.getId());
|
||||
TemplateFile templateFile = new TemplateFile().setFileName(current.getFileName()).setFilePath(path)
|
||||
.setContent(templateInfo.getContent()).setEngineType(templateInfo.getEngineType());
|
||||
list.add(templateFile);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.hccake.ballcat.codegen.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.hccake.ballcat.codegen.mapper.TemplatePropertyMapper;
|
||||
import com.hccake.ballcat.codegen.model.converter.TemplatePropertyConverter;
|
||||
import com.hccake.ballcat.codegen.model.entity.TemplateProperty;
|
||||
import com.hccake.ballcat.codegen.model.vo.TemplatePropertyVO;
|
||||
import com.hccake.ballcat.codegen.model.qo.TemplatePropertyQO;
|
||||
import com.hccake.ballcat.codegen.mapper.TemplatePropertyMapper;
|
||||
import com.hccake.ballcat.codegen.model.vo.TemplatePropertyVO;
|
||||
import com.hccake.ballcat.codegen.service.TemplatePropertyService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -54,4 +55,26 @@ public class TemplatePropertyServiceImpl extends ServiceImpl<TemplatePropertyMap
|
||||
return templateProperties.stream().map(TemplatePropertyConverter.INSTANCE::poToVo).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制模板属性配置
|
||||
* @param resourceId 原模板组ID
|
||||
* @param groupId 模板模板组ID
|
||||
*/
|
||||
@Override
|
||||
public void copy(Integer resourceId, Integer groupId) {
|
||||
|
||||
List<TemplateProperty> templateProperties = baseMapper
|
||||
.selectList(Wrappers.<TemplateProperty>lambdaQuery().eq(TemplateProperty::getGroupId, resourceId));
|
||||
|
||||
if (CollectionUtil.isNotEmpty(templateProperties)) {
|
||||
List<TemplateProperty> list = templateProperties.stream().peek(x -> {
|
||||
x.setId(null);
|
||||
x.setCreateTime(null);
|
||||
x.setUpdateTime(null);
|
||||
x.setGroupId(groupId);
|
||||
}).collect(Collectors.toList());
|
||||
this.saveBatch(list);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,22 +2,10 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.hccake.ballcat.codegen.mapper.TemplateInfoMapper">
|
||||
|
||||
<resultMap id="templateMap" type="com.hccake.ballcat.codegen.model.entity.TemplateInfo">
|
||||
<id property="directoryEntryId" column="directory_entry_id"/>
|
||||
<result property="groupId" column="group_id"/>
|
||||
<result property="title" column="title"/>
|
||||
<result property="content" column="content"/>
|
||||
<result property="engineType" column="engine_type"/>
|
||||
<result property="remarks" column="remarks"/>
|
||||
<result property="deleted" column="deleted"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
directory_entry_id, title, content, engine_type, remarks, deleted, create_time, update_time </sql>
|
||||
directory_entry_id, group_id, title, content, engine_type, remarks, deleted, create_time, update_time </sql>
|
||||
|
||||
<sql id="Base_Alias_Column_List">
|
||||
t.directory_entry_id, t.title, t.content, t.engine_type, t.remarks, t.deleted, t.create_time, t.update_time </sql>
|
||||
t.directory_entry_id, t.group_id, t.title, t.content, t.engine_type, t.remarks, t.deleted, t.create_time, t.update_time </sql>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user