feat:树形数据
This commit is contained in:
@@ -161,7 +161,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
||||
ProjectRequestVo.RequestDescription req = new ProjectRequestVo.RequestDescription();
|
||||
BeanUtil.copyProperties(detail, req);
|
||||
req.setDays(CommonTimeFormatUtil.calculateDaysBetween(req.getStartTime(), req.getEndTime()));
|
||||
if (ObjectUtil.isEmpty(req.getParentDetailId())) {
|
||||
if ("0".equals(req.getParentDetailId())) {
|
||||
requestDescriptions.add(req);
|
||||
}
|
||||
for (StageDetail stageDetail : details) {
|
||||
|
||||
@@ -16,24 +16,22 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.nl.pmm.modular.stagedetail.entity.vo.TreeStageDetailVo;
|
||||
import org.nl.pmm.modular.stagedetail.param.*;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.nl.common.annotation.CommonLog;
|
||||
import org.nl.common.pojo.CommonResult;
|
||||
import org.nl.pmm.modular.stagedetail.entity.StageDetail;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailAddParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailEditParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailIdParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailPageParam;
|
||||
import org.nl.pmm.modular.stagedetail.service.StageDetailService;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 项目阶段明细控制器
|
||||
@@ -120,4 +118,24 @@ public class StageDetailController {
|
||||
public CommonResult<StageDetail> detail(@Valid StageDetailIdParam stageDetailIdParam) {
|
||||
return CommonResult.data(stageDetailService.detail(stageDetailIdParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询基础类型
|
||||
* @param detailTreeParam
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/pmm/stagedetail/loadClass")
|
||||
public CommonResult<List<TreeStageDetailVo>> loadClass(StageDetailTreeParam detailTreeParam) {
|
||||
return CommonResult.data(stageDetailService.loadClass(detailTreeParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前层级以及所有父类层级
|
||||
* @param detailTreeParam
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/pmm/stagedetail/superior")
|
||||
public CommonResult<List<TreeStageDetailVo>> superior(StageDetailTreeParam detailTreeParam) {
|
||||
return CommonResult.data(stageDetailService.getSuperior(detailTreeParam));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package org.nl.pmm.modular.stagedetail.entity.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author: lyd
|
||||
* @date: 2026/1/20
|
||||
*/
|
||||
@Data
|
||||
public class TreeStageDetailVo {
|
||||
/** 明细id */
|
||||
private String detailId;
|
||||
|
||||
/** 阶段id */
|
||||
private String stageId;
|
||||
|
||||
/** 父明细id */
|
||||
private String parentDetailId;
|
||||
|
||||
/** 序号 */
|
||||
private String seq;
|
||||
|
||||
/** 功能模块 */
|
||||
private String modelName;
|
||||
|
||||
/** 功能明细 */
|
||||
private String modelDetail;
|
||||
|
||||
/** 是否为叶子节点 */
|
||||
private Boolean isLeaf;
|
||||
|
||||
/** 子节点 */
|
||||
private List<TreeStageDetailVo> children;
|
||||
|
||||
}
|
||||
@@ -14,6 +14,10 @@ package org.nl.pmm.modular.stagedetail.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.pmm.modular.stagedetail.entity.StageDetail;
|
||||
import org.nl.pmm.modular.stagedetail.entity.vo.TreeStageDetailVo;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailTreeParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目阶段明细Mapper接口
|
||||
@@ -22,4 +26,8 @@ import org.nl.pmm.modular.stagedetail.entity.StageDetail;
|
||||
* @date 2025/11/17 20:34
|
||||
**/
|
||||
public interface StageDetailMapper extends BaseMapper<StageDetail> {
|
||||
/**
|
||||
* 树形加载
|
||||
*/
|
||||
List<TreeStageDetailVo> loadClass(StageDetailTreeParam detailTreeParam);
|
||||
}
|
||||
|
||||
@@ -2,4 +2,27 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.pmm.modular.stagedetail.mapper.StageDetailMapper">
|
||||
|
||||
<select id="loadClass" parameterType="org.nl.pmm.modular.stagedetail.param.StageDetailTreeParam"
|
||||
resultType="org.nl.pmm.modular.stagedetail.entity.vo.TreeStageDetailVo">
|
||||
select
|
||||
detail_id as detailId,
|
||||
stage_id as stageId,
|
||||
parent_detail_id as parentDetailId,
|
||||
seq,
|
||||
model_name as modelName,
|
||||
model_detail as modelDetail,
|
||||
case
|
||||
when exists(select 1 from pmm_stage_detail psd where psd.parent_detail_id = pmm_stage_detail.detail_id)
|
||||
then false else true end as isLeaf
|
||||
from pmm_stage_detail
|
||||
where stage_id = #{stageId}
|
||||
<if test="parentDetailId == null or parentDetailId == ''">
|
||||
and parent_detail_id is null
|
||||
</if>
|
||||
<if test="parentDetailId != null and parentDetailId != ''">
|
||||
and parent_detail_id = #{parentDetailId}
|
||||
</if>
|
||||
order by seq, detail_id
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -12,13 +12,14 @@
|
||||
*/
|
||||
package org.nl.pmm.modular.stagedetail.param;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fhs.core.trans.anno.Trans;
|
||||
import com.fhs.core.trans.constant.TransType;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -71,4 +72,36 @@ public class StageDetailAddParam {
|
||||
@Schema(description = "结束时间")
|
||||
private Date endTime;
|
||||
|
||||
/** 创建时间 */
|
||||
@Schema(description = "创建时间")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 创建人 */
|
||||
@Schema(description = "创建人")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Trans(type = TransType.RPC, targetClassName = "org.nl.sys.modular.user.entity.SysUser", fields = "name", alias = "createUser", ref = "createUserName")
|
||||
private String createUser;
|
||||
|
||||
/** 创建人名称 */
|
||||
@Schema(description = "创建人名称")
|
||||
@TableField(exist = false)
|
||||
private String createUserName;
|
||||
|
||||
/** 更新时间 */
|
||||
@Schema(description = "更新时间")
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 更新人 */
|
||||
@Schema(description = "更新人")
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
@Trans(type = TransType.RPC, targetClassName = "org.nl.sys.modular.user.entity.SysUser", fields = "name", alias = "updateUser", ref = "updateUserName")
|
||||
private String updateUser;
|
||||
|
||||
/** 更新人名称 */
|
||||
@Schema(description = "更新人名称")
|
||||
@TableField(exist = false)
|
||||
private String updateUserName;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.nl.pmm.modular.stagedetail.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author: lyd
|
||||
* @date: 2026/1/20
|
||||
*/
|
||||
@Data
|
||||
public class StageDetailTreeParam {
|
||||
/** 阶段id */
|
||||
@Schema(description = "阶段id")
|
||||
private String stageId;
|
||||
|
||||
/** 父明细id */
|
||||
@Schema(description = "父明细id")
|
||||
private String parentDetailId;
|
||||
|
||||
}
|
||||
@@ -15,10 +15,8 @@ package org.nl.pmm.modular.stagedetail.service;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.pmm.modular.stagedetail.entity.StageDetail;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailAddParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailEditParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailIdParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailPageParam;
|
||||
import org.nl.pmm.modular.stagedetail.entity.vo.TreeStageDetailVo;
|
||||
import org.nl.pmm.modular.stagedetail.param.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -79,4 +77,13 @@ public interface StageDetailService extends IService<StageDetail> {
|
||||
StageDetail queryEntity(String id);
|
||||
|
||||
List<StageDetail> getByStageId(String stageId);
|
||||
|
||||
/**
|
||||
* 获取当前父类的所有下一子集数据
|
||||
* @param detailTreeParam
|
||||
* @return
|
||||
*/
|
||||
List<TreeStageDetailVo> loadClass(StageDetailTreeParam detailTreeParam);
|
||||
|
||||
List<TreeStageDetailVo> getSuperior(StageDetailTreeParam detailTreeParam);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.pmm.modular.stagedetail.entity.vo.TreeStageDetailVo;
|
||||
import org.nl.pmm.modular.stagedetail.param.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.nl.common.enums.CommonSortOrderEnum;
|
||||
@@ -27,10 +29,6 @@ import org.nl.common.exception.CommonException;
|
||||
import org.nl.common.page.CommonPageRequest;
|
||||
import org.nl.pmm.modular.stagedetail.entity.StageDetail;
|
||||
import org.nl.pmm.modular.stagedetail.mapper.StageDetailMapper;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailAddParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailEditParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailIdParam;
|
||||
import org.nl.pmm.modular.stagedetail.param.StageDetailPageParam;
|
||||
import org.nl.pmm.modular.stagedetail.service.StageDetailService;
|
||||
|
||||
import java.util.List;
|
||||
@@ -100,4 +98,21 @@ public class StageDetailServiceImpl extends ServiceImpl<StageDetailMapper, Stage
|
||||
.orderByAsc(StageDetail::getSeq);
|
||||
return list(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TreeStageDetailVo> loadClass(StageDetailTreeParam detailTreeParam) {
|
||||
return this.baseMapper.loadClass(detailTreeParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前对应父节点的所有子节点,以及所有的父节点数据
|
||||
* <p>例:当前是顶层,则返回所有当前stageId的顶层(parentDetailId),
|
||||
* 如果当前是第三层,则获取当前节点的所有同父节点的数据以及所有第二层和所有第一层,并且保持上下级关系,子节点放到children字段中。
|
||||
* @param detailTreeParam
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<TreeStageDetailVo> getSuperior(StageDetailTreeParam detailTreeParam) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user