diff --git a/operation-control-platform.iml b/operation-control-platform.iml
new file mode 100644
index 0000000000000000000000000000000000000000..dea2777f8256cd17cf45cc62d055b77b712c2ff2
--- /dev/null
+++ b/operation-control-platform.iml
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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/AppArrangeController.java b/src/main/java/com/pms/ocp/controller/AppArrangeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..097df8224ee6a3d7547654b04d6e2c3792fdab03
--- /dev/null
+++ b/src/main/java/com/pms/ocp/controller/AppArrangeController.java
@@ -0,0 +1,40 @@
+package com.pms.ocp.controller;
+
+import com.pms.ocp.model.entity.OcpTenantGroup;
+import com.pms.ocp.model.vo.ResponseVO;
+import com.pms.ocp.service.AppArrangeService;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @className: AppArrangeController
+ * @Description:应用分类管理接口
+ * @atuthor: pei-chenxi
+ * @DateTime: 2022/3/9 14:15
+ */
+@Slf4j
+@RestController
+@RequestMapping("/app-arrange/vl")
+@Api(tags = "应用分类管理接口")
+public class AppArrangeController {
+
+
+ @Autowired
+ private AppArrangeService appArrangeService;
+
+ @PostMapping("/update/app")
+ @ApiOperation("应用分类修改")
+ public ResponseVO updateApp(@RequestBody OcpTenantGroup ocpTenantGroup){
+ boolean flag = appArrangeService.updateApp(ocpTenantGroup);
+ if (flag){
+ return ResponseVO.ok();
+ }
+ return ResponseVO.error("您输入的分类编码重复,请重新输入");
+ }
+}
diff --git a/src/main/java/com/pms/ocp/controller/ModelBaseController.java b/src/main/java/com/pms/ocp/controller/ModelBaseController.java
index 5c67a401ebb2f53ca0090f648caab4b320b9d724..5e9f1caa2c2adf0b43bea0619b8da85857203241 100644
--- a/src/main/java/com/pms/ocp/controller/ModelBaseController.java
+++ b/src/main/java/com/pms/ocp/controller/ModelBaseController.java
@@ -19,7 +19,6 @@ 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/AppArrangeMapper.java b/src/main/java/com/pms/ocp/mapper/AppArrangeMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..21b32e67a03723cf9984a2bd2b096a572ae2f478
--- /dev/null
+++ b/src/main/java/com/pms/ocp/mapper/AppArrangeMapper.java
@@ -0,0 +1,17 @@
+package com.pms.ocp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.pms.ocp.model.entity.OcpTenantGroup;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * @className: AppArrangeMapper
+ * @Description:应用分类数据层
+ * @atuthor: pei-chenxi
+ * @DateTime: 2022/3/9 14:18
+ */
+@Mapper
+public interface AppArrangeMapper extends BaseMapper {
+
+}
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..fa5281796e36020139e53730f4a4c177676c5760
--- /dev/null
+++ b/src/main/java/com/pms/ocp/model/vo/OcpModelGroupVO.java
@@ -0,0 +1,103 @@
+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;
+
+ /**
+ * 上级模型分类id
+ */
+ @ApiModelProperty(value = "上级模型分类名称")
+ @TableField(exist = false)
+ private String modelGroupPName;
+ /**
+ * 分类版本
+ */
+ @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/AppArrangeService.java b/src/main/java/com/pms/ocp/service/AppArrangeService.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d1ff0ab6932c926391c7262ac7e4d9e69195a28
--- /dev/null
+++ b/src/main/java/com/pms/ocp/service/AppArrangeService.java
@@ -0,0 +1,18 @@
+package com.pms.ocp.service;
+
+import com.pms.ocp.model.entity.OcpTenantGroup;
+
+/**
+ * @className: AppArrangeService
+ * @Description:应用分类业务层接口
+ * @atuthor: pei-chenxi
+ * @DateTime: 2022/3/9 14:17
+ */
+public interface AppArrangeService {
+ /**
+ * @Description:应用分类修改
+ * @param ocpTenantGroup
+ * @return
+ */
+ boolean updateApp(OcpTenantGroup ocpTenantGroup);
+}
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/AppArrangeServiceImpl.java b/src/main/java/com/pms/ocp/service/impl/AppArrangeServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..0da47c30b9814b0ed2ecdbb6d3e9e10fd5d486d9
--- /dev/null
+++ b/src/main/java/com/pms/ocp/service/impl/AppArrangeServiceImpl.java
@@ -0,0 +1,45 @@
+package com.pms.ocp.service.impl;
+
+import com.pms.ocp.mapper.AppArrangeMapper;
+import com.pms.ocp.model.entity.OcpApiGroup;
+import com.pms.ocp.model.entity.OcpTenantGroup;
+import com.pms.ocp.service.AppArrangeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @className: AppArrangeServiceImpl
+ * @Description:应用分类业务层
+ * @atuthor: pei-chenxi
+ * @DateTime: 2022/3/9 14:17
+ */
+@Service
+@Slf4j
+public class AppArrangeServiceImpl implements AppArrangeService {
+
+ @Autowired
+ private AppArrangeMapper appArrangeMapper;
+
+ /**
+ * @Description: 应用分类修改
+ * @param ocpTenantGroup
+ * @return falg
+ **/
+ @Override
+ public boolean updateApp(OcpTenantGroup ocpTenantGroup) {
+ boolean falg = true;
+ List ocpTenantGroups = appArrangeMapper.selectList(null);
+ for (OcpTenantGroup tenantGroup : ocpTenantGroups) {
+ String code = tenantGroup.getTenantGroupCode();
+ if (code == ocpTenantGroup.getTenantGroupCode()) {
+ falg = false;
+ break;
+ }
+ }
+ appArrangeMapper.updateById(ocpTenantGroup);
+ return falg;
+ }
+}
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..2bc92f48def4364c77b6a6061eac1bad674861d4
--- /dev/null
+++ b/src/main/java/com/pms/ocp/service/impl/ModelClassifyServiceImpl.java
@@ -0,0 +1,162 @@
+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.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @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,subclassGroupName);
+ Map groupByCode = ocpModelGroupVOList.stream().collect(Collectors.toMap(OcpModelGroupVO::getModelGroupCode, Function.identity(), (key1, key2) -> key2));
+ OcpModelGroupVO ocpModelGroupVO = groupByCode.get(parentGroupCode);
+ List childrenList = findChildren(ocpModelGroupVOList, ocpModelGroupVO, new LinkedList<>());
+ 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 childMenu
+ * @return void
+ **/
+ private List findChildren(List menuList, OcpModelGroupVO parent,List childMenu) {
+ for (OcpModelGroupVO vo : menuList) {
+ //遍历出父id等于参数的id,add进子节点集合
+ if (parent.getModelGroupCode() != null && parent.getModelGroupCode().equals(vo.getModelGroupPcode())) {
+ //递归遍历下一级
+ vo.setModelGroupPName(parent.getModelGroupName());
+ childMenu.add(vo);
+ childMenu = findChildren(menuList, vo, childMenu);
+ }
+ }
+ return 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[1]), "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 {
+}