diff --git a/src/main/java/com/pms/ocp/common/constants/Constants.java b/src/main/java/com/pms/ocp/common/constants/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..68563c1b631a41fa4b5c305f3203da368b09b3ab --- /dev/null +++ b/src/main/java/com/pms/ocp/common/constants/Constants.java @@ -0,0 +1,15 @@ +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; + } +} diff --git a/src/main/java/com/pms/ocp/common/utils/TreeUtils.java b/src/main/java/com/pms/ocp/common/utils/TreeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..7c733a478ce761afea44379986d6c6c906ebdcd9 --- /dev/null +++ b/src/main/java/com/pms/ocp/common/utils/TreeUtils.java @@ -0,0 +1,68 @@ +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 List build(List treeNodes, Long pid) { + + List treeList = new ArrayList<>(); + for(T treeNode : treeNodes) { + if (pid.equals(treeNode.getPid())) { + treeList.add(findChildren(treeNodes, treeNode)); + } + } + + return treeList; + } + + /** + * 查找子节点 + */ + private static T findChildren(List treeNodes, T rootNode) { + for(T treeNode : treeNodes) { + if(rootNode.getId().equals(treeNode.getPid())) { + rootNode.getChildren().add(findChildren(treeNodes, treeNode)); + } + } + return rootNode; + } + + /** + * 构建树节点 + */ + public static List build(List treeNodes) { + List result = new ArrayList<>(); + + //list转map + Map 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; + } + +} diff --git a/src/main/java/com/pms/ocp/controller/ModelBaseController.java b/src/main/java/com/pms/ocp/controller/ModelBaseController.java index 0c33a09f1334916dcc104e15d5653f8eaf221ba7..4912f8433c0628f5a7c31dd7d6a30929401bf403 100644 --- a/src/main/java/com/pms/ocp/controller/ModelBaseController.java +++ b/src/main/java/com/pms/ocp/controller/ModelBaseController.java @@ -14,10 +14,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; 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.SUCCESS; /** * @Auther: wangjian diff --git a/src/main/java/com/pms/ocp/controller/ModelClassifyController.java b/src/main/java/com/pms/ocp/controller/ModelClassifyController.java new file mode 100644 index 0000000000000000000000000000000000000000..921492c8c23d618da70894fdbaa3d5b80587c112 --- /dev/null +++ b/src/main/java/com/pms/ocp/controller/ModelClassifyController.java @@ -0,0 +1,88 @@ +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> getModelNavigation(String searchCondition) { + return modelClassifyService.getModelNavigation(searchCondition); + } + + /** + * 右侧子类详情列表 + * + * @return pms.ocp.model.vo.ResponseVO + * @author huxiuwu + * @date 2022/3/9 + **/ + @ApiOperation("右侧子类详情列表") + @GetMapping("/subclassDetailsList") + public ResponseVO> 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 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 list) { + return modelClassifyService.update(list); + } +} diff --git a/src/main/java/com/pms/ocp/mapper/ModelClassifyMapper.java b/src/main/java/com/pms/ocp/mapper/ModelClassifyMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d5385ed287cffb739b54a7ecf8ddb258c6013c75 --- /dev/null +++ b/src/main/java/com/pms/ocp/mapper/ModelClassifyMapper.java @@ -0,0 +1,14 @@ +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 { +} diff --git a/src/main/java/com/pms/ocp/mapper/OcpModelGroupMapper.java b/src/main/java/com/pms/ocp/mapper/OcpModelGroupMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..8cb94989d8da046134b0897e93b74d88c4ddf3cc --- /dev/null +++ b/src/main/java/com/pms/ocp/mapper/OcpModelGroupMapper.java @@ -0,0 +1,14 @@ +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 { +} diff --git a/src/main/java/com/pms/ocp/model/dto/ModelClassifyDTO.java b/src/main/java/com/pms/ocp/model/dto/ModelClassifyDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..8bb7560e29c0ebf676c4a49081a2f33548ca95b7 --- /dev/null +++ b/src/main/java/com/pms/ocp/model/dto/ModelClassifyDTO.java @@ -0,0 +1,14 @@ +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; +} diff --git a/src/main/java/com/pms/ocp/model/dto/PageRequest.java b/src/main/java/com/pms/ocp/model/dto/PageRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..0058ee990b3746f69afb278b99fc13d736475c2d --- /dev/null +++ b/src/main/java/com/pms/ocp/model/dto/PageRequest.java @@ -0,0 +1,32 @@ +package com.pms.ocp.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @param + * @author admin + */ +@Data +@ApiModel(value = "分页工具类",description = "分页工具类") +public class PageRequest { + + 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 diff --git a/src/main/java/com/pms/ocp/model/entity/TreeNode.java b/src/main/java/com/pms/ocp/model/entity/TreeNode.java new file mode 100644 index 0000000000000000000000000000000000000000..98fcc445f46a56ad3b0179e88fb25a71eb2778c3 --- /dev/null +++ b/src/main/java/com/pms/ocp/model/entity/TreeNode.java @@ -0,0 +1,51 @@ +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 implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + private Long id; + /** + * 上级ID + */ + private Long pid; + /** + * 子节点列表 + */ + private List 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 getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + +} diff --git a/src/main/java/com/pms/ocp/model/vo/OcpModelGroupVO.java b/src/main/java/com/pms/ocp/model/vo/OcpModelGroupVO.java new file mode 100644 index 0000000000000000000000000000000000000000..d9f9cd2e2fe68d4a4a27749bd5b78e5fc5a714d0 --- /dev/null +++ b/src/main/java/com/pms/ocp/model/vo/OcpModelGroupVO.java @@ -0,0 +1,96 @@ +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 childrenList; + + +} + + + + diff --git a/src/main/java/com/pms/ocp/service/ModelClassifyService.java b/src/main/java/com/pms/ocp/service/ModelClassifyService.java new file mode 100644 index 0000000000000000000000000000000000000000..7052d1de9ea0166ea77449fd3e4d4c3fde20c3aa --- /dev/null +++ b/src/main/java/com/pms/ocp/service/ModelClassifyService.java @@ -0,0 +1,22 @@ +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> getModelNavigation(String searchCondition); + + ResponseVO insert(List list); + + ResponseVO subclassDetailsList(int pageSize,int pageNum,String parentGroupCode,String subclassGroupName); + + ResponseVO update(List list); +} diff --git a/src/main/java/com/pms/ocp/service/OcpModelGroupService.java b/src/main/java/com/pms/ocp/service/OcpModelGroupService.java new file mode 100644 index 0000000000000000000000000000000000000000..8a8677ddcabe8a77c408ccd878583d993af5fc4f --- /dev/null +++ b/src/main/java/com/pms/ocp/service/OcpModelGroupService.java @@ -0,0 +1,12 @@ +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 { +} diff --git a/src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java b/src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5d0c375da2f64ba0b8a9a23540b53042f7d72b53 --- /dev/null +++ b/src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java @@ -0,0 +1,159 @@ +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 + * @author huxiuwu + * @date 2022/3/8 + **/ + @Override + public ResponseVO> getModelNavigation(String searchCondition) { + //根据是否传入搜索条件创建构造器进行查询 + List modelTypeList = this.selectByCondition(searchCondition, null); + if (CollectionUtil.isEmpty(modelTypeList)) { + return ResponseVO.error(CodeEnum.NO_DATA); + } + //对模型分类信息进行处理 + List resultList = this.build(modelTypeList); + return ResponseVO.ok(resultList); + } + + /** + * 右侧子类详情列表 + * + * @return pms.ocp.model.vo.ResponseVO + * @author huxiuwu + * @date 2022/3/9 + **/ + @Override + public ResponseVO> subclassDetailsList(int pageSize,int pageNum,String parentGroupCode,String subclassGroupName) { + PageHelper.startPage(pageSize,pageNum); + List ocpModelGroupVOList = this.selectByCondition(null,null); + LinkedList childrenList = new LinkedList<>(); + findChildren(ocpModelGroupVOList, parentGroupCode,childrenList); + PageInfo 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 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 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 menuList, String pid,List 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 build(List treeNodes) { + List result = new ArrayList<>(); + //list转map =>将每个对象的id作为key,自己作为value. + Map 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 selectByCondition(String... searchCondition) { + QueryWrapper 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); + } +} diff --git a/src/main/java/com/pms/ocp/service/impl/OcpModelGroupServiceImpl.java b/src/main/java/com/pms/ocp/service/impl/OcpModelGroupServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6f379f640275d285fc722f3d5548b0f4f0937315 --- /dev/null +++ b/src/main/java/com/pms/ocp/service/impl/OcpModelGroupServiceImpl.java @@ -0,0 +1,16 @@ +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 ServiceImplimplements OcpModelGroupService { +}