Commit 79dfca17 authored by huxiuwu's avatar huxiuwu

胡秀武:模型分类接口

parent c5c54e7b
package com.pms.ocp.common.constants;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 17:09
*/
public interface Constants {
/**
* 数字产量
*/
interface NumberConstant{
Integer ZERO = 0;
}
}
package com.pms.ocp.common.utils;
import com.pms.ocp.model.entity.TreeNode;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 17:51
*/
public class TreeUtils {
/**
* 根据pid,构建树节点
*/
public static <T extends TreeNode> List<T> build(List<T> treeNodes, Long pid) {
List<T> treeList = new ArrayList<>();
for(T treeNode : treeNodes) {
if (pid.equals(treeNode.getPid())) {
treeList.add(findChildren(treeNodes, treeNode));
}
}
return treeList;
}
/**
* 查找子节点
*/
private static <T extends TreeNode> T findChildren(List<T> treeNodes, T rootNode) {
for(T treeNode : treeNodes) {
if(rootNode.getId().equals(treeNode.getPid())) {
rootNode.getChildren().add(findChildren(treeNodes, treeNode));
}
}
return rootNode;
}
/**
* 构建树节点
*/
public static <T extends TreeNode> List<T> build(List<T> treeNodes) {
List<T> result = new ArrayList<>();
//list转map
Map<Long, T> nodeMap = new LinkedHashMap<>(treeNodes.size());
for(T treeNode : treeNodes){
nodeMap.put(treeNode.getId(), treeNode);
}
for(T node : nodeMap.values()) {
T parent = nodeMap.get(node.getPid());
if(parent != null && !(node.getId().equals(parent.getId()))){
parent.getChildren().add(node);
continue;
}
result.add(node);
}
return result;
}
}
...@@ -14,10 +14,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -14,10 +14,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.pms.ocp.common.constants.CodeEnum.REQUIRED_PARAMETER_EMPTY; import static com.pms.ocp.common.constants.CodeEnum.REQUIRED_PARAMETER_EMPTY;
import static com.pms.ocp.common.constants.CodeEnum.SUCCESS;
/** /**
* @Auther: wangjian * @Auther: wangjian
......
package com.pms.ocp.controller;
import com.github.pagehelper.PageInfo;
import com.pms.ocp.model.entity.ModelType;
import com.pms.ocp.model.vo.OcpModelGroupVO;
import com.pms.ocp.model.vo.ResponseVO;
import com.pms.ocp.service.ModelClassifyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 15:08
*/
@Slf4j
@RequestMapping("/modelClassify")
@RestController
@Api(tags = "模型分类")
public class ModelClassifyController {
@Autowired
private ModelClassifyService modelClassifyService;
/**
* 模型分类导航
*
* @param searchCondition 分类名称
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@ApiOperation("模型分类导航")
@GetMapping("/navigation")
public ResponseVO<List<OcpModelGroupVO>> getModelNavigation(String searchCondition) {
return modelClassifyService.getModelNavigation(searchCondition);
}
/**
* 右侧子类详情列表
*
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@ApiOperation("右侧子类详情列表")
@GetMapping("/subclassDetailsList")
public ResponseVO<PageInfo<OcpModelGroupVO>> subclassDetailsList(@RequestParam(required = false) int pageSize,
@RequestParam(required = false) int pageNum,
@RequestParam(required = false,defaultValue = "") String parentGroupCode,
@RequestParam(required = false) String subclassGroupName
) {
return modelClassifyService.subclassDetailsList(pageSize, pageNum, parentGroupCode, subclassGroupName);
}
/**
* 新增
*
* @param list 新增分类列表
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@ApiOperation("新增")
@PostMapping("/insert")
public ResponseVO insert(@RequestBody List<ModelType> list) {
return modelClassifyService.insert(list);
}
/**
* 修改
*
* @param list 修改list
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@ApiOperation("修改")
@PostMapping("/update")
public ResponseVO update(@RequestBody List<ModelType> list) {
return modelClassifyService.update(list);
}
}
package com.pms.ocp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pms.ocp.model.vo.OcpModelGroupVO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 15:22
*/
@Mapper
public interface ModelClassifyMapper extends BaseMapper<OcpModelGroupVO> {
}
package com.pms.ocp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pms.ocp.model.entity.ModelType;
import org.apache.ibatis.annotations.Mapper;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/9 9:47
*/
@Mapper
public interface OcpModelGroupMapper extends BaseMapper<ModelType> {
}
package com.pms.ocp.model.dto;
import lombok.Data;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/9 10:27
*/
@Data
public class ModelClassifyDTO {
private String parentGroupCode;
private String subclassGroupName;
}
package com.pms.ocp.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @param <T>
* @author admin
*/
@Data
@ApiModel(value = "分页工具类",description = "分页工具类")
public class PageRequest<T> {
private static final long serialVersionUID = 8167917284229912157L;
@ApiModelProperty(value = "当前页码")
private int pageSize;
@ApiModelProperty(value = "每页大小")
private int pageNum;
@ApiModelProperty(value = "其他查询条件")
private T query;
public int getPageSize() {
return pageSize == 0 ? 10 : pageSize;
}
public int getPageNum() {
return pageNum == 0 ? 1 : pageNum;
}
}
\ No newline at end of file
package com.pms.ocp.model.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 17:53
*/
public class TreeNode<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 上级ID
*/
private Long pid;
/**
* 子节点列表
*/
private List<T> children = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
public List<T> getChildren() {
return children;
}
public void setChildren(List<T> children) {
this.children = children;
}
}
package com.pms.ocp.model.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 模型分类表(OcpModelGroupMapper)实体类
*
* @author huxiuwu
* @since 2022-03-08 11:12:56
*/
@Data
@TableName("ocp_model_group")
public class OcpModelGroupVO implements Serializable {
private static final long serialVersionUID = 800319672890485601L;
/**
* 主键
*/
@ApiModelProperty(value = "主键")
private String objId;
/**
* 模型分类名称
*/
@ApiModelProperty(value = "模型分类名称")
private String modelGroupName;
/**
* 模型分类编码
*/
@ApiModelProperty(value = "模型分类编码")
private String modelGroupCode;
/**
* 上级模型分类id
*/
@ApiModelProperty(value = "上级模型分类id")
private String modelGroupPcode;
/**
* 分类版本
*/
@ApiModelProperty(value = "分类版本")
private String groupVersion;
/**
* 展示顺序
*/
@ApiModelProperty(value = "展示顺序")
private Integer groupOrderNo;
/**
* 所属公司
*/
@ApiModelProperty(value = "所属公司")
private String groupCompanyCode;
/**
* 提交人id
*/
@ApiModelProperty(value = "提交人id")
private String groupUserId;
/**
* 提交人姓名
*/
@ApiModelProperty(value = "提交人姓名")
private String groupUserName;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private Date groupCtime;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间")
private Date groupMtime;
/**
* 是否已删除0未删除 1未删除
*/
@ApiModelProperty(value = "是否已删除0未删除 1未删除")
private Integer isDelete;
/**
* 子类集合
*/
@TableField(exist = false)
@ApiModelProperty(value = "子类集合")
List<OcpModelGroupVO> childrenList;
}
package com.pms.ocp.service;
import com.pms.ocp.model.entity.ModelType;
import com.pms.ocp.model.vo.OcpModelGroupVO;
import com.pms.ocp.model.vo.ResponseVO;
import java.util.List;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 15:19
*/
public interface ModelClassifyService {
ResponseVO<List<OcpModelGroupVO>> getModelNavigation(String searchCondition);
ResponseVO insert(List<ModelType> list);
ResponseVO subclassDetailsList(int pageSize,int pageNum,String parentGroupCode,String subclassGroupName);
ResponseVO update(List<ModelType> list);
}
package com.pms.ocp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pms.ocp.model.entity.ModelType;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/9 9:44
*/
public interface OcpModelGroupService extends IService<ModelType> {
}
package com.pms.ocp.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pms.ocp.common.constants.CodeEnum;
import com.pms.ocp.mapper.ModelClassifyMapper;
import com.pms.ocp.model.entity.ModelType;
import com.pms.ocp.model.vo.OcpModelGroupVO;
import com.pms.ocp.model.vo.ResponseVO;
import com.pms.ocp.service.ModelClassifyService;
import com.pms.ocp.service.OcpModelGroupService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/8 15:20
*/
@Service
public class ModelClassifyServiceImpl implements ModelClassifyService {
@Resource
private ModelClassifyMapper classifyMapper;
@Resource
private OcpModelGroupService ocpService;
/**
* 模型分类-导航树
*
* @param searchCondition 搜索条件
* @return List<com.pms.ocp.model.vo.OcpModelGroupVO>
* @author huxiuwu
* @date 2022/3/8
**/
@Override
public ResponseVO<List<OcpModelGroupVO>> getModelNavigation(String searchCondition) {
//根据是否传入搜索条件创建构造器进行查询
List<OcpModelGroupVO> modelTypeList = this.selectByCondition(searchCondition, null);
if (CollectionUtil.isEmpty(modelTypeList)) {
return ResponseVO.error(CodeEnum.NO_DATA);
}
//对模型分类信息进行处理
List<OcpModelGroupVO> resultList = this.build(modelTypeList);
return ResponseVO.ok(resultList);
}
/**
* 右侧子类详情列表
*
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@Override
public ResponseVO<PageInfo<OcpModelGroupVO>> subclassDetailsList(int pageSize,int pageNum,String parentGroupCode,String subclassGroupName) {
PageHelper.startPage(pageSize,pageNum);
List<OcpModelGroupVO> ocpModelGroupVOList = this.selectByCondition(null,null);
LinkedList<OcpModelGroupVO> childrenList = new LinkedList<>();
findChildren(ocpModelGroupVOList, parentGroupCode,childrenList);
PageInfo<OcpModelGroupVO> pageInfo = new PageInfo<>(childrenList);
return ResponseVO.ok(pageInfo);
}
/**
* 修改
*
* @param list 修改list
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@Override
public ResponseVO update(List<ModelType> list) {
boolean isUpdateSucceed = ocpService.saveOrUpdateBatch(list);
if (!isUpdateSucceed) {
ResponseVO.error(CodeEnum.UP_DATA_FAIL);
}
return ResponseVO.ok();
}
/**
* 新增
*
* @param list 新增分类列表
* @return pms.ocp.model.vo.ResponseVO
* @author huxiuwu
* @date 2022/3/9
**/
@Override
public ResponseVO insert(List<ModelType> list) {
boolean result = ocpService.saveBatch(list);
if (!result) {
return ResponseVO.error(CodeEnum.INSERT_FAIL);
}
return ResponseVO.ok();
}
/**
* 获取父节点下的所有子节点放入list中
* @author huxiuwu
* @date 2022/3/9
* @param menuList
* @param pid
* @param childMenu
* @return void
**/
private void findChildren(List<OcpModelGroupVO> menuList, String pid,List<OcpModelGroupVO> childMenu) {
for (OcpModelGroupVO mu : menuList) {
//遍历出父id等于参数的id,add进子节点集合
if (pid != null && pid.equals(mu.getModelGroupPcode())) {
//递归遍历下一级
childMenu.add(mu);
findChildren(menuList, mu.getModelGroupCode(), childMenu);
}
}
}
/**
* 构建树节点
*/
private List<OcpModelGroupVO> build(List<OcpModelGroupVO> treeNodes) {
List<OcpModelGroupVO> result = new ArrayList<>();
//list转map =>将每个对象的id作为key,自己作为value.
Map<String, OcpModelGroupVO> nodeMap = new LinkedHashMap<>(treeNodes.size());
for (OcpModelGroupVO treeNode : treeNodes) {
nodeMap.put(treeNode.getModelGroupCode(), treeNode);
}
for (OcpModelGroupVO node : nodeMap.values()) {
//得到自己的父类
OcpModelGroupVO parent = nodeMap.get(node.getModelGroupPcode());
if (parent != null && !(node.getModelGroupCode().equals(parent.getModelGroupCode()))) {
if (parent.getChildrenList() == null) {
parent.setChildrenList(new LinkedList<>());
}
parent.getChildrenList().add(node);
continue;
}
result.add(node);
}
return result;
}
private List<OcpModelGroupVO> selectByCondition(String... searchCondition) {
QueryWrapper<OcpModelGroupVO> queryWrapper = new QueryWrapper<>();
//根据是否传入搜索条件创建构造器进行查询
queryWrapper.eq(StringUtils.isNotEmpty(searchCondition[0]), "model_group_pcode", searchCondition[1])
.like(StringUtils.isNotEmpty(searchCondition[0]), "model_group_name", searchCondition[0]);
return classifyMapper.selectList(queryWrapper);
}
}
package com.pms.ocp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pms.ocp.mapper.OcpModelGroupMapper;
import com.pms.ocp.model.entity.ModelType;
import com.pms.ocp.service.OcpModelGroupService;
import org.springframework.stereotype.Service;
/**
* @author huxiuwu
* @version 1.0
* @date 2022/3/9 9:45
*/
@Service
public class OcpModelGroupServiceImpl extends ServiceImpl<OcpModelGroupMapper,ModelType>implements OcpModelGroupService {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment