1、修改bug
This commit is contained in:
@@ -124,8 +124,8 @@ public class TmplTpController extends AbstractFileUploadController implements Bu
|
||||
//获取分类树
|
||||
@GetMapping("/tree")
|
||||
@Operation(summary = "获得分类树--上级")
|
||||
public CommonResult<List<TmplTpTreeVO>> getTree() {
|
||||
List<TmplTpTreeVO> tree = tmplTpService.buildTree();
|
||||
public CommonResult<List<TmplTpTreeVO>> getTree(@RequestParam(value = "num",required = false) String num,@RequestParam(value = "name",required = false) String name) {
|
||||
List<TmplTpTreeVO> tree = tmplTpService.buildTree(num,name);
|
||||
return success(tree);
|
||||
}
|
||||
|
||||
|
||||
@@ -42,5 +42,10 @@ public class TmplFldRespVO {
|
||||
|
||||
@Schema(description = "字段状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("字段状态")
|
||||
private String sts;
|
||||
private Integer sts;
|
||||
|
||||
@Schema(description = "创建人名", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建人名")
|
||||
private String creatorName;
|
||||
|
||||
}
|
||||
|
||||
@@ -47,6 +47,11 @@ public class TmplItmRespVO {
|
||||
|
||||
@Schema(description = "字段状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("字段状态")
|
||||
private String sts;
|
||||
private Integer sts;
|
||||
|
||||
|
||||
@Schema(description = "创建人名", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建人名")
|
||||
private String creatorName;
|
||||
|
||||
}
|
||||
|
||||
@@ -25,5 +25,5 @@ public class TmplItmSaveReqVO {
|
||||
private String itmVal;
|
||||
|
||||
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "启用 or 禁用")
|
||||
private String sts;
|
||||
private Integer sts;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public class TmplTpFldSaveReqVO {
|
||||
@Schema(description = "是否必填", requiredMode = Schema.RequiredMode.REQUIRED, example = "Y or N")
|
||||
private String isMust;
|
||||
|
||||
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "启用 or 禁用")
|
||||
private String sts;
|
||||
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "启用 or 禁用(0或1)")
|
||||
private Integer sts;
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ public class TmplItmDO extends BusinessBaseDO {
|
||||
private String itmVal;
|
||||
|
||||
@TableField("STS")
|
||||
private String sts;
|
||||
private Integer sts;
|
||||
|
||||
}
|
||||
|
||||
@@ -75,5 +75,5 @@ public class TmplTpFldDO extends BusinessBaseDO { // 继承业务基类,自动
|
||||
private String orgnTp;
|
||||
|
||||
@TableField("STS")
|
||||
private String sts;
|
||||
private Integer sts;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public interface TmplTpFldMapper extends BaseMapperX<TmplTpFldDO> {
|
||||
default PageResult<TmplTpFldDO> selectPage(TmplFldPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<TmplTpFldDO>()
|
||||
.likeIfPresent(TmplTpFldDO::getFldName, reqVO.getFldName())
|
||||
.eqIfPresent(TmplTpFldDO::getFldKy, reqVO.getFldKy())
|
||||
.likeIfPresent(TmplTpFldDO::getFldKy, reqVO.getFldKy())
|
||||
.eqIfPresent(TmplTpFldDO::getFldDoc, reqVO.getFldDoc())
|
||||
.eqIfPresent(TmplTpFldDO::getIsMust, reqVO.getIsMust())
|
||||
.eqIfPresent(TmplTpFldDO::getDatTp, reqVO.getDatTp())
|
||||
|
||||
@@ -212,13 +212,17 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void publishTemplateInstance(List<PublishTemplateInstanceReqVO> publishReqVOS) {
|
||||
// 校验当前状态是否能够进行发布
|
||||
publishReqVOS.forEach(reqVO -> {
|
||||
TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(reqVO.getId());
|
||||
if (templateInstanceDO.getCntt()==null||templateInstanceDO.getCntt().isEmpty()){
|
||||
throw exception(TEMPLATE_INSTANCE_FILE_NOT_EXISTS);
|
||||
}
|
||||
String currentStatus = reqVO.getCurrentStatus();
|
||||
if (currentStatus.isEmpty()) {
|
||||
currentStatus = templateInstanceMapper.selectById(reqVO.getId()).getSts();
|
||||
currentStatus =templateInstanceDO.getSts();
|
||||
}
|
||||
PublishStatusEnum status = PublishStatusEnum.fromCode(currentStatus);
|
||||
boolean transitionAllowed = false;
|
||||
@@ -237,7 +241,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService {
|
||||
.in(TemplateInstanceDO::getId, publishReqVOS.stream()
|
||||
.map(PublishTemplateInstanceReqVO::getId)
|
||||
.collect(Collectors.toSet()))
|
||||
.set(TemplateInstanceDO::getSts, TmplStsEnum.PUBLISHED.getCode()));
|
||||
.set(TemplateInstanceDO::getSts, TmplStsEnum.PUBLISHED.getCode()).set(TemplateInstanceDO::getPublishTime, LocalDateTime.now()));
|
||||
log.info("更新模版实例状态成功【{}】", publishReqVOS.stream().map(PublishTemplateInstanceReqVO::getId));
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import java.util.List;
|
||||
|
||||
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.TMPL_ITM_NAME_EXISTS;
|
||||
import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.TMPL_ITM_NAME_CODE_EXISTS;
|
||||
import static com.zt.plat.module.tmpltp.enums.ErrorCodeConstants.TMPL_ITM_NOT_EXISTS;
|
||||
|
||||
@Service
|
||||
@@ -32,9 +32,10 @@ public class TmplItmServiceImpl extends ServiceImpl<TmplItmMapper, TmplItmDO> im
|
||||
@Override
|
||||
public TmplItmRespVO createTmplItm(TmplItmSaveReqVO tmplItmSaveReqVO) {
|
||||
//验证条款名是否存在
|
||||
validateTmplLtmNameExists(tmplItmSaveReqVO.getItmName());
|
||||
validateTmplLtmNameAndCodeExists(tmplItmSaveReqVO.getItmName(), tmplItmSaveReqVO.getItmNum());
|
||||
tmplItmSaveReqVO.setId(null);
|
||||
TmplItmDO bean = BeanUtils.toBean(tmplItmSaveReqVO, TmplItmDO.class);
|
||||
bean.setSts(1);
|
||||
baseMapper.insert(bean);
|
||||
return BeanUtils.toBean(bean, TmplItmRespVO.class);
|
||||
}
|
||||
@@ -59,9 +60,13 @@ public class TmplItmServiceImpl extends ServiceImpl<TmplItmMapper, TmplItmDO> im
|
||||
throw exception(TMPL_ITM_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
private void validateTmplLtmNameExists(String name){
|
||||
if (baseMapper.selectCount(new LambdaQueryWrapper<TmplItmDO>().eq(TmplItmDO::getItmName,name).eq(TmplItmDO::getDeleted,0).eq(TmplItmDO::getCompanyId, CompanyContextHolder.getCompanyId()))>0) {
|
||||
throw exception(TMPL_ITM_NAME_EXISTS);
|
||||
private void validateTmplLtmNameAndCodeExists(String name, String code){
|
||||
if (baseMapper.selectCount(new LambdaQueryWrapper<TmplItmDO>()
|
||||
.eq(TmplItmDO::getDeleted, 0)
|
||||
.eq(TmplItmDO::getCompanyId, CompanyContextHolder.getCompanyId())
|
||||
.and(wrapper -> wrapper.eq(TmplItmDO::getItmName, name).or().eq(TmplItmDO::getItmNum, code))
|
||||
) > 0) {
|
||||
throw exception(TMPL_ITM_NAME_CODE_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ public class TmplTpFldServiceImpl extends ServiceImpl<TmplTpFldMapper, TmplTpFld
|
||||
public TmplFldRespVO createTmplFld(TmplTpFldSaveReqVO tmplTpFldSaveReqVO) {
|
||||
TmplTpFldDO tmplTpFldDO = BeanUtils.toBean(tmplTpFldSaveReqVO, TmplTpFldDO.class);
|
||||
validateTmplFldCodeExists(tmplTpFldSaveReqVO.getFldKy());
|
||||
tmplTpFldDO.setSts("启用");
|
||||
tmplTpFldDO.setSts(1);
|
||||
baseMapper.insert(tmplTpFldDO);
|
||||
log.info("创建模板字段成功,模板字段信息:【{}】", tmplTpFldDO);
|
||||
return BeanUtils.toBean(tmplTpFldDO, TmplFldRespVO.class);
|
||||
|
||||
@@ -83,7 +83,7 @@ public interface TmplTpService extends IService<TmplTpDO> {
|
||||
*
|
||||
* @return 模板分类
|
||||
*/
|
||||
List<TmplTpTreeVO> buildTree();
|
||||
List<TmplTpTreeVO> buildTree(String num, String name);
|
||||
|
||||
/**
|
||||
* 更新模板分类状态
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.zt.plat.module.base.service.tmpltp;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.zt.plat.module.base.controller.admin.templtp.vo.*;
|
||||
|
||||
import com.zt.plat.module.base.dal.dataobject.tmpltp.TmplFldRelDO;
|
||||
@@ -154,49 +155,6 @@ public class TmplTpServiceImpl extends ServiceImpl<TmplTpMapper, TmplTpDO> imple
|
||||
return baseMapper.getClause(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TmplTpTreeVO> buildTree() {
|
||||
// 1. 查询所有数据
|
||||
List<TmplTpDO> allNodes = baseMapper.selectList(new QueryWrapper<>());
|
||||
|
||||
// 2. 转换为树节点VO
|
||||
List<TmplTpTreeVO> treeNodes = allNodes.stream()
|
||||
.map(this::convertToTreeVO)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 3. 构建树形结构
|
||||
return buildTreeStructure(treeNodes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换实体类到树节点VO
|
||||
*/
|
||||
private TmplTpTreeVO convertToTreeVO(TmplTpDO entity) {
|
||||
return BeanUtils.toBean(entity, TmplTpTreeVO.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建树形结构
|
||||
*/
|
||||
private List<TmplTpTreeVO> buildTreeStructure(List<TmplTpTreeVO> treeNodes) {
|
||||
Map<String, List<TmplTpTreeVO>> groupByPrnId = treeNodes.stream()
|
||||
.collect(Collectors.groupingBy(node ->
|
||||
node.getPrnId() != null ? node.getPrnId().toString() : "null"));
|
||||
|
||||
// 2. 设置子节点并排序
|
||||
treeNodes.forEach(node -> {
|
||||
List<TmplTpTreeVO> children = groupByPrnId.get(node.getId().toString());
|
||||
if (children != null && !children.isEmpty()) {
|
||||
// 按排序序号升序排列
|
||||
children.sort(Comparator.comparing(TmplTpTreeVO::getSrt));
|
||||
node.setChildren(children);
|
||||
}
|
||||
});
|
||||
|
||||
// 3. 返回根节点(父ID为NULL的节点)
|
||||
return groupByPrnId.getOrDefault("0", new ArrayList<>());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateStatus(Long id, String status) {
|
||||
@@ -285,4 +243,181 @@ public class TmplTpServiceImpl extends ServiceImpl<TmplTpMapper, TmplTpDO> imple
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TmplTpTreeVO> buildTree(String num, String name) {
|
||||
// 如果没有查询条件,返回完整树结构
|
||||
if ((num == null || num.isEmpty()) && (name == null || name.isEmpty())) {
|
||||
return buildFullTree();
|
||||
}
|
||||
|
||||
// 1. 根据条件查询匹配的节点
|
||||
List<TmplTpDO> matchedNodes = baseMapper.selectList(new LambdaQueryWrapper<TmplTpDO>()
|
||||
.eq(name != null && !name.isEmpty(), TmplTpDO::getName, name)
|
||||
.eq(num != null && !num.isEmpty(), TmplTpDO::getNum, num));
|
||||
|
||||
if (matchedNodes.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// 2. 获取匹配节点的ID集合
|
||||
Set<String> rootIds = matchedNodes.stream()
|
||||
.map(node -> node.getId().toString())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 3. 一次性查询所有数据(用于后续过滤)
|
||||
List<TmplTpDO> allNodes = baseMapper.selectList(null);
|
||||
|
||||
// 4. 转换为VO
|
||||
List<TmplTpTreeVO> allTreeNodes = allNodes.stream()
|
||||
.map(this::convertToTreeVO)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 5. 过滤出匹配节点及其所有子孙节点
|
||||
Set<String> validNodeIds = new HashSet<>(rootIds);
|
||||
findAllDescendantIds(allTreeNodes, rootIds, validNodeIds);
|
||||
|
||||
// 6. 只保留有效节点
|
||||
List<TmplTpTreeVO> filteredNodes = allTreeNodes.stream()
|
||||
.filter(node -> validNodeIds.contains(node.getId().toString()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 7. 构建树形结构
|
||||
return buildTreeStructure(filteredNodes, rootIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建完整树结构(从真正的根节点开始)
|
||||
*/
|
||||
private List<TmplTpTreeVO> buildFullTree() {
|
||||
// 1. 查询所有数据
|
||||
List<TmplTpDO> allNodes = baseMapper.selectList(null);
|
||||
|
||||
if (allNodes.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// 2. 转换为树节点VO
|
||||
List<TmplTpTreeVO> treeNodes = allNodes.stream()
|
||||
.map(this::convertToTreeVO)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 3. 创建ID到节点的映射
|
||||
Map<String, TmplTpTreeVO> nodeMap = treeNodes.stream()
|
||||
.collect(Collectors.toMap(
|
||||
node -> node.getId().toString(),
|
||||
node -> node
|
||||
));
|
||||
|
||||
// 4. 收集所有节点ID,用于判断哪些是根节点
|
||||
Set<String> allNodeIds = nodeMap.keySet();
|
||||
List<TmplTpTreeVO> roots = new ArrayList<>();
|
||||
|
||||
// 5. 构建父子关系,并识别根节点
|
||||
for (TmplTpTreeVO node : treeNodes) {
|
||||
String parentId = node.getPrnId() != null ? node.getPrnId().toString() : null;
|
||||
|
||||
if (parentId != null && nodeMap.containsKey(parentId)) {
|
||||
// 有父节点,建立父子关系
|
||||
TmplTpTreeVO parent = nodeMap.get(parentId);
|
||||
if (parent.getChildren() == null) {
|
||||
parent.setChildren(new ArrayList<>());
|
||||
}
|
||||
parent.getChildren().add(node);
|
||||
} else {
|
||||
// 没有父节点或父节点不存在,视为根节点
|
||||
roots.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 对所有节点的子节点进行排序
|
||||
nodeMap.values().forEach(node -> {
|
||||
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
|
||||
node.getChildren().sort(Comparator.comparing(TmplTpTreeVO::getSrt));
|
||||
}
|
||||
});
|
||||
|
||||
// 7. 对根节点排序
|
||||
if (!roots.isEmpty()) {
|
||||
roots.sort(Comparator.comparing(TmplTpTreeVO::getSrt));
|
||||
}
|
||||
|
||||
return roots;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从内存中查找所有子孙节点ID
|
||||
*/
|
||||
private void findAllDescendantIds(List<TmplTpTreeVO> allNodes,
|
||||
Set<String> parentIds,
|
||||
Set<String> resultIds) {
|
||||
// 查找直接子节点
|
||||
Set<String> childIds = allNodes.stream()
|
||||
.filter(node -> node.getPrnId() != null
|
||||
&& parentIds.contains(node.getPrnId().toString()))
|
||||
.map(node -> node.getId().toString())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (childIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 添加到结果集
|
||||
resultIds.addAll(childIds);
|
||||
|
||||
// 递归查找子节点的子节点
|
||||
findAllDescendantIds(allNodes, childIds, resultIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换实体类到树节点VO
|
||||
*/
|
||||
private TmplTpTreeVO convertToTreeVO(TmplTpDO entity) {
|
||||
return BeanUtils.toBean(entity, TmplTpTreeVO.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建树形结构(指定根节点ID集合)
|
||||
*/
|
||||
private List<TmplTpTreeVO> buildTreeStructure(List<TmplTpTreeVO> treeNodes, Set<String> rootIds) {
|
||||
// 1. 创建ID到节点的映射
|
||||
Map<String, TmplTpTreeVO> nodeMap = treeNodes.stream()
|
||||
.collect(Collectors.toMap(
|
||||
node -> node.getId().toString(),
|
||||
node -> node
|
||||
));
|
||||
|
||||
// 2. 构建父子关系
|
||||
List<TmplTpTreeVO> roots = new ArrayList<>();
|
||||
|
||||
for (TmplTpTreeVO node : treeNodes) {
|
||||
String nodeId = node.getId().toString();
|
||||
String parentId = node.getPrnId() != null ? node.getPrnId().toString() : null;
|
||||
|
||||
// 如果是查询条件匹配的根节点
|
||||
if (rootIds.contains(nodeId)) {
|
||||
roots.add(node);
|
||||
}
|
||||
|
||||
// 如果有父节点且父节点在当前节点集合中,建立父子关系
|
||||
if (parentId != null && nodeMap.containsKey(parentId)) {
|
||||
TmplTpTreeVO parent = nodeMap.get(parentId);
|
||||
if (parent.getChildren() == null) {
|
||||
parent.setChildren(new ArrayList<>());
|
||||
}
|
||||
parent.getChildren().add(node);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 对所有节点的子节点进行排序
|
||||
nodeMap.values().forEach(node -> {
|
||||
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
|
||||
node.getChildren().sort(Comparator.comparing(TmplTpTreeVO::getSrt));
|
||||
}
|
||||
});
|
||||
|
||||
// 4. 对根节点排序
|
||||
roots.sort(Comparator.comparing(TmplTpTreeVO::getSrt));
|
||||
|
||||
return roots;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user