Przeglądaj źródła

后管项目列表/wbs动态库/清表列表等后台管理页面优化

lvy 1 miesiąc temu
rodzic
commit
1c6a5eedd7
36 zmienionych plików z 895 dodań i 53 usunięć
  1. 17 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsInfoDTO.java
  2. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ContractInfo.java
  3. 83 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/UserProjectInfoCollect.java
  4. 13 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsInfo.java
  5. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ContractInfoVO.java
  6. 19 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ExcelTabVO.java
  7. 17 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO.java
  8. 33 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO3.java
  9. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java
  10. 1 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java
  11. 39 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateQueryVO.java
  12. 34 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateTableVO.java
  13. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO.java
  14. 24 6
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserViewProjectContractController.java
  15. 57 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  16. 11 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  17. 110 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java
  18. 40 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsInfoController.java
  19. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  20. 66 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  21. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  22. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.java
  23. 54 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml
  24. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.java
  25. 38 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml
  26. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsInfoMapper.java
  27. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsInfoMapper.xml
  28. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  29. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IProjectInfoService.java
  30. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsInfoService.java
  31. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  32. 88 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  33. 31 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java
  34. 59 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsInfoServiceImpl.java
  35. 2 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  36. 16 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 17 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsInfoDTO.java

@@ -4,8 +4,11 @@ import io.swagger.annotations.ApiModelProperty;
 import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.entity.WbsInfo;
 
+import java.util.List;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class WbsInfoDTO extends WbsInfo {
@@ -27,5 +30,19 @@ public class WbsInfoDTO extends WbsInfo {
      */
     private Integer status;
 
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称")
+    private String projectId;
+
+    List<ProjectInfo> projectInfoList;
+
 
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ContractInfo.java

@@ -196,6 +196,12 @@ public class ContractInfo extends BaseEntity {
     @ApiModelProperty(value = "通信key")
     private String sealCommKey;
 
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
     public BigDecimal getProjectMileage() {
         if (projectMileage == null){
             return null;

+ 83 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/UserProjectInfoCollect.java

@@ -0,0 +1,83 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+@TableName("m_user_project_collect")
+public class UserProjectInfoCollect implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键id")
+    @JsonProperty(value = "id")
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 项目Id
+     */
+    @JsonProperty(value = "projectId")
+    @ApiModelProperty(name = "projectId", value = "项目Id", required = true)
+    private Long projectId;
+
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    /**
+     * 用户id
+     */
+    @JsonProperty(value = "userId")
+    @ApiModelProperty(name = "userId", value = "用户id", required = true)
+    private Long userId;
+
+
+    @JsonProperty(value = "createUser")
+    @ApiModelProperty(name = "createUser", value = "创建人", required = true)
+    private Long createUser;
+
+    @JsonProperty(value = "updateUser")
+    @ApiModelProperty(name = "updateUser", value = "更新人", required = true)
+    private Long updateUser;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+
+    @ApiModelProperty("更新时间")
+    private Date updateTime = new Date();
+
+    @ApiModelProperty("状态")
+    private Integer status = 1;
+
+    @TableLogic
+    @ApiModelProperty("是否已删除")
+    private Integer isDeleted = 0;
+}

+ 13 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsInfo.java

@@ -1,10 +1,13 @@
 package org.springblade.manager.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.mp.base.BaseEntity;
 
+import java.util.List;
+
 @Data
 @TableName("m_wbs_info")
 @EqualsAndHashCode(callSuper = true)
@@ -21,5 +24,15 @@ public class WbsInfo extends BaseEntity {
      */
     private Integer wbsType;
 
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 项目列表
+     */
+    @TableField(exist = false)
+    private List<ProjectInfo> projectInfoList;
 
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ContractInfoVO.java

@@ -40,5 +40,11 @@ public class ContractInfoVO extends ContractInfo {
     @ApiModelProperty("计量合同段-关联详情信息")
     private MeterContractInfo meterContractInfo;
 
+    /**
+     * 关联合同段
+     */
+    @ApiModelProperty("关联合同段")
+    private List<ContractInfo> relationContractInfo;
+
 
 }

+ 19 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ExcelTabVO.java

@@ -20,6 +20,9 @@ import io.swagger.annotations.ApiModelProperty;
 import org.springblade.manager.entity.ExcelTab;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.ProjectInfo;
+
+import java.util.List;
 
 /**
  * 清表基础数据表视图实体类
@@ -35,4 +38,20 @@ public class ExcelTabVO extends ExcelTab {
     @ApiModelProperty(value = "清表模板类型名称")
     private String tableTemplateTypeName;
 
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    List<ProjectInfoVO1> projectInfoList;
+
+    @ApiModelProperty(value = "项目使用数量")
+    private Integer projectUseNumber;
+
+    @ApiModelProperty(value = "清表使用数量")
+    private Integer excelUseNumber;
+
+    @ApiModelProperty(value = "创建人名称")
+    private String createUserName;
 }

+ 17 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO.java

@@ -38,4 +38,21 @@ public class ProjectInfoVO extends ProjectInfo {
     @ApiModelProperty(value = "wbsType")
     private Integer wbsType;
 
+    /**
+     * 项目负责人
+     */
+    @ApiModelProperty(value = "项目负责人姓名")
+    private String projectLeaderName;
+
+    /**
+     * 是否收藏
+     */
+    @ApiModelProperty(value = "是否收藏 0 否, 1 是")
+    private Integer isCollect;
+
+    /**
+     * wbs 类型
+     */
+    @ApiModelProperty(value = "wbs 类型")
+    private List<Integer> wbsTypes;
 }

+ 33 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO3.java

@@ -1,5 +1,38 @@
 package org.springblade.manager.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.manager.entity.ProjectInfo;
+import java.io.Serializable;
+@Data
+public class ProjectInfoVO3 implements Serializable {
+    private static final long serialVersionUID = 1L;
 
+    /**
+     * 项目名称、别名
+     */
+    @ApiModelProperty(value = "项目名称、别名")
+    private String name;
+    /**
+     * 项目状态, 0:未开始, 1:配置中, 2: 进行中, 3: 已完成, null: 全部
+     */
+    @ApiModelProperty(value = "项目状态, 0:未开始, 1:配置中, 2: 进行中, 3: 已完成, null: 全部。 默认值:null")
+    private Integer status;
+    /**
+     * 排序方式,0:默认排序, 1:收藏优先, 2:创建时间, 3:我负责的
+     */
+    @ApiModelProperty(value = "排序方式,0:默认排序, 1:收藏优先, 2:创建时间, 3:我负责的。默认值:0")
+    private Integer sort = 0;
+    /**
+     * 是否收藏,0:全部, 1:收藏
+     */
+    @ApiModelProperty(value = "是否收藏,0:全部, 1:收藏。 默认值:1")
+    private Integer isCollect = 1;
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id, 可以不传值")
+    private Long userId;
+
+}
 

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import org.springblade.core.tool.node.BaseNode;
 import org.springblade.core.tool.node.TreeNode;
 
+import java.util.Date;
+
 @Data
 public class TreeNodeVO extends BaseNode<TreeNode> {
     private static final long serialVersionUID = 1L;
@@ -55,6 +57,10 @@ public class TreeNodeVO extends BaseNode<TreeNode> {
 
     private String erTreeId;
 
+    private Long updateUser;
+    private Date updateTime;
+    private String updateUserName;
+
     public TreeNodeVO() {
     }
 

+ 1 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java

@@ -92,5 +92,6 @@ public class WbsNodeTableVO implements Serializable {
     private String htmlUrl;
 
     private String nodeType;
+    private Integer wbsType;
 
 }

+ 39 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateQueryVO.java

@@ -0,0 +1,39 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class WbsTreePrivateQueryVO {
+
+    @ApiModelProperty(value = "wbs Id", required = true)
+    @NotBlank(message = "wbsId不能为空")
+    private String wbsId;
+
+    @ApiModelProperty(value = "项目id", required = true)
+    @NotBlank(message = "projectId不能为空")
+    private String projectId;
+
+    @ApiModelProperty("搜索内容")
+    private String queryValue;
+
+    @ApiModelProperty("节点类型")
+    private Integer nodeType;
+
+    @ApiModelProperty("内业资料类型")
+    private Integer majorDataType;
+
+    @ApiModelProperty("标准分类")
+    private Integer className;
+
+    @ApiModelProperty(value = "单元名称")
+    private Integer unitName;
+
+    @ApiModelProperty(value = "是否在客户端新增时隐藏,0否1是")
+    private Integer isAddConceal;
+
+    @ApiModelProperty("参数掩码")
+    private String uniqueCode;
+}

+ 34 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateTableVO.java

@@ -0,0 +1,34 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.manager.entity.WbsTree;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class WbsTreePrivateTableVO  implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 标题
+     */
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "表单list")
+    List<WbsNodeTableVO> list;
+
+    public WbsTreePrivateTableVO() {
+    }
+    public WbsTreePrivateTableVO(String title, List<WbsNodeTableVO> list) {
+        this.title = title;
+        this.list = list;
+    }
+}

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO.java

@@ -76,5 +76,9 @@ public class WbsTreePrivateVO extends WbsTreePrivate implements INode<WbsTreePri
      */
     private List<String> tableFileTypes;
 
+    /**
+     * 项目名称
+     */
+    private String updateUserName;
 
 }

+ 24 - 6
blade-service/blade-business/src/main/java/org/springblade/business/controller/UserViewProjectContractController.java

@@ -23,18 +23,21 @@ import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.entity.SignPfxFile;
+import org.springblade.manager.entity.UserProjectInfoCollect;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectAssignmentUserClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springblade.manager.feign.SignPfxClient;
 import org.springblade.manager.vo.ContractInfoVO;
 import org.springblade.manager.vo.ProjectInfoVO;
+import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.system.entity.Role;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.SingleColumnRowMapper;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -46,9 +49,7 @@ import java.io.InputStream;
 import java.math.BigDecimal;
 import java.net.URL;
 import java.net.URLConnection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -268,18 +269,35 @@ public class UserViewProjectContractController {
                     contractInfoList.sort(Comparator.comparingInt(ContractInfoVO::getIsDefault).reversed());
                     vo.setContractInfoList(contractInfoList);
                 });
-                //排序项目
-                projectInfoVOS.sort(Comparator.comparingInt(ProjectInfoVO::getIsDefault).reversed());
             }
 
             //剔除没有合同段的项目
             projectInfoVOS.removeIf(next -> next.getContractInfoList().size() == 0);
+            //排序项目
+            List<UserProjectInfoCollect> collectIds = new ArrayList<>();
+            if (!projectInfoVOS.isEmpty()) {
+                String pIds = projectInfoVOS.stream().map(projectInfoVO -> projectInfoVO.getId() + "").collect(Collectors.joining(","));
+                collectIds = jdbcTemplate.query("select project_id,sort from m_user_project_collect where is_deleted = 0 and user_id = " + AuthUtil.getUserId() + " and project_id in ( " + pIds + ")",
+                        new BeanPropertyRowMapper<>(UserProjectInfoCollect.class));
+            }
+            Map<Long, Integer> collect = collectIds.stream().collect(Collectors.toMap(UserProjectInfoCollect::getProjectId, UserProjectInfoCollect::getSort, (k1, k2) -> k1));
+            for (ProjectInfoVO vo : projectInfoVOS) {
+                vo.setIsCollect(collect.getOrDefault(vo.getId(), 999));
+            }
+            // 按是否收藏进行排序,然后按照sort 进行排序, 按照创建时间倒序排序
+            projectInfoVOS.sort(Comparator.comparing(ProjectInfoVO::getIsCollect, Comparator.nullsLast(Comparator.naturalOrder()))
+                    .thenComparing(ProjectInfoVO::getSort, Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(ProjectInfoVO::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())));
+
             //将合同段中业主合同段排在最前面
             if(ObjectUtil.isNotEmpty(projectInfoVOS)){
                 for (ProjectInfoVO projectInfoVO : projectInfoVOS) {
                     if(ObjectUtil.isNotEmpty(projectInfoVO.getContractInfoList())){
                         List<ContractInfoVO> contractInfoList = projectInfoVO.getContractInfoList();
-                        contractInfoList.sort(Comparator.comparingInt(contractInfo->contractInfo.getContractType() == 3 ? -1:0));
+                        contractInfoList.sort(Comparator
+                                .comparing(ContractInfoVO::getSort, Comparator.nullsLast(Comparator.naturalOrder()))
+                                .thenComparing(
+                                        ContractInfoVO::getCreateTime,
+                                        Comparator.nullsLast(Comparator.reverseOrder())));
                     }
                 }
             }

+ 57 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -27,6 +27,7 @@ import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.SaveUserInfoByProjectService;
@@ -110,19 +111,72 @@ public class ContractInfoController extends BladeController {
     public R<List<ContractInfoVO>> findContractInfoByPid(String pid) {
         List<ContractInfo> contractInfoVOS = contractInfoService.selectContractInfoPageByPid(pid);
         List<ContractInfoVO> resultAll = new ArrayList<>();
+        String contractIds = contractInfoVOS.stream().filter(contractInfo -> contractInfo.getContractType().equals(4)).map(contractInfo -> contractInfo.getId() + "").collect(Collectors.joining(","));
+        Map<Long, List<MeterContractInfo>> collect = new HashMap<>();
+        if (StringUtils.isNotBlank(contractIds)) {
+            List<MeterContractInfo> meterContractInfoList = jdbcTemplate.query("SELECT * FROM s_meter_contract_info WHERE contract_id in ( " + contractIds + ")", new BeanPropertyRowMapper<>(MeterContractInfo.class));
+            collect = meterContractInfoList.stream().collect(Collectors.groupingBy(MeterContractInfo::getContractId));
+        }
+        String ids = contractInfoVOS.stream().map(contractInfo -> contractInfo.getId() + "").collect(Collectors.joining(","));
+        Map<Long, List<ContractRelationJlyz>> relationMap = new HashMap<>();
+        if (StringUtils.isNotBlank(ids)) {
+            List<ContractRelationJlyz> query = jdbcTemplate.query("select * from  m_contract_relation_jlyz where contract_id_jlyz in ( " + ids + ")", new BeanPropertyRowMapper<>(ContractRelationJlyz.class));
+            relationMap = query.stream().collect(Collectors.groupingBy(ContractRelationJlyz::getContractIdJlyz));
+        }
+        Map<Long, ContractInfo> contractInfoMap = contractInfoVOS.stream().collect(Collectors.toMap(ContractInfo::getId, vo -> vo));
         for (ContractInfo contractInfo : contractInfoVOS) {
             ContractInfoVO vo = new ContractInfoVO();
             BeanUtil.copyProperties(contractInfo, vo);
             if (contractInfo.getContractType().equals(4)) {
-                MeterContractInfo meterContractInfo = jdbcTemplate.query("SELECT * FROM s_meter_contract_info WHERE contract_id = " + contractInfo.getId(), new BeanPropertyRowMapper<>(MeterContractInfo.class)).stream().findAny().orElse(null);
-                if (meterContractInfo != null) {
-                    vo.setMeterContractInfo(meterContractInfo);
+                List<MeterContractInfo> meterContractInfoList1 = collect.get(contractInfo.getId());
+                if (meterContractInfoList1 != null && !meterContractInfoList1.isEmpty()) {
+                    vo.setMeterContractInfo(meterContractInfoList1.get(0));
                 }
             }
+            List<ContractRelationJlyz> relationJlyzList = relationMap.get(contractInfo.getId());
+            if (relationJlyzList != null && !relationJlyzList.isEmpty()) {
+                List<ContractInfo> list = new ArrayList<>();
+                for (ContractRelationJlyz relation : relationJlyzList) {
+                    list.add(contractInfoMap.get(relation.getContractIdSg()));
+                }
+                vo.setRelationContractInfo(list);
+            }
             resultAll.add(vo);
         }
+        resultAll.sort(Comparator.comparing(ContractInfoVO::getSort, Comparator.nullsLast(Comparator.naturalOrder()))
+                .thenComparing(ContractInfoVO::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())));
         return R.data(resultAll);
     }
+    /**
+     * 排序
+     */
+    @PostMapping("/sort")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "排序", notes = "传入排序好的ids")
+    public R<Boolean> sort(@RequestBody List<Long> contractIds) {
+        int sort = 0;
+        if (contractIds == null || contractIds.isEmpty()) {
+            return R.data(false);
+        }
+        List<ContractInfo> updateList = new ArrayList<>(contractIds.size());
+        Long userId = AuthUtil.getUserId();
+        for (Long id : contractIds) {
+            ContractInfo temp = new ContractInfo();
+            temp.setSort(++sort);
+            temp.setUpdateUser(userId);
+            temp.setUpdateTime(new Date());
+            temp.setId(id);
+            updateList.add(temp);
+        }
+        try {
+            boolean result = contractInfoService.updateBatchById(updateList);
+            return R.data(result);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(200, "排序保存失败");
+        }
+    }
+
 
     /**
      * 分页 合同段信息

+ 11 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -187,6 +187,17 @@ public class ExcelTabController extends BladeController {
         return R.data(ExcelTabWrapper.build().entityVO(detail));
     }
 
+    /**
+     * 详情
+     */
+    @GetMapping("/templateDetail")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "详情", notes = "传入excelTab")
+    public R<ExcelTabVO> templateDetail(@RequestParam Long id) {
+        ExcelTabVO vo = excelTabService.templateDetail(id);
+        return R.data(vo);
+    }
+
     /**
      * 分页 清表基础数据表
      */

+ 110 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java

@@ -8,12 +8,15 @@ import lombok.AllArgsConstructor;
 
 import javax.validation.Valid;
 
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.dto.ProjectInfoDTO;
 import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.UserProjectInfoCollect;
 import org.springblade.manager.service.*;
 import org.springblade.manager.vo.*;
 import org.springframework.dao.EmptyResultDataAccessException;
@@ -26,8 +29,10 @@ import org.springblade.manager.wrapper.ProjectInfoWrapper;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -258,5 +263,110 @@ public class ProjectInfoController extends BladeController {
         List<Map<String, Object>> result = wbsTreeService.findProjectAndContractList(userId);
         return R.data(result);
     }
+    /**
+     * 分页 项目表
+     */
+    @GetMapping("/pageList")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "分页", notes = "传入projectInfo")
+    public R<IPage<ProjectInfoVO>> pageList(ProjectInfoVO3 vo, Query query) {
+        // 名称搜索,项目状态,收藏夹  排序
+        vo.setUserId(AuthUtil.getUserId());
+        IPage<ProjectInfoVO> pages = projectInfoService.pageList(Condition.getPage(query), vo);
+        return R.data(pages);
+    }
+
+    /**
+     * 收藏项目、取消收藏项目
+     */
+    @PostMapping("/collectProject")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "收藏项目、取消收藏项目", notes = "传入项目id")
+    public R<Boolean> collectProject(@RequestParam Long projectId) {
+        Long userId = AuthUtil.getUserId();
+        if (userId == null) {
+            return R.fail("用户未登录");
+        }
+        if (projectId == null || projectId <= 0) {
+            return R.fail("项目不存在");
+        }
+        ProjectInfo projectInfo = projectInfoService.getById(projectId);
+        if (projectInfo == null || projectInfo.getIsDeleted() == 1) {
+            return R.fail("项目不存在或者已被删除");
+        }
+        List<UserProjectInfoCollect> query = jdbcTemplate.query("select * from m_user_project_collect where project_id = ? and user_id = ?", new Object[]{projectId, userId}, new BeanPropertyRowMapper<>(UserProjectInfoCollect.class));
+        if (query.isEmpty()) {
+            // 收藏该项目
+            String sql = "insert into m_user_project_collect (id,project_id,user_id,create_user,update_user) values (?,?,?,?,?)";
+            int result = jdbcTemplate.update(sql,SnowFlakeUtil.getId(), projectId, userId, userId, userId);
+            return R.data(result > 0);
+        } else {
+            UserProjectInfoCollect collect = query.get(0);
+            String sql = "update m_user_project_collect set is_deleted = if(is_deleted = 0, 1, 0), update_user = ? where id = ?";
+            int result = jdbcTemplate.update(sql, userId, collect.getId());
+            return R.data(result > 0);
+        }
+    }
+
+    /**
+     * 项目排序
+     */
+    @PostMapping("/sortProject")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "项目排序", notes = "传入排序好的项目ids")
+    public R<Boolean> sortProject(@RequestBody List<Long> projectIds) {
+        int sort = 0;
+        if (projectIds == null || projectIds.isEmpty()) {
+            return R.data(false);
+        }
+        List<ProjectInfo> updateList = new ArrayList<>(projectIds.size());
+        Long userId = AuthUtil.getUserId();
+        for (Long id : projectIds) {
+            ProjectInfo temp = new ProjectInfo();
+            temp.setSort(++sort);
+            temp.setUpdateUser(userId);
+            temp.setUpdateTime(new Date());
+            temp.setId(id);
+            updateList.add(temp);
+        }
+        try {
+            boolean result = projectInfoService.updateBatchById(updateList);
+            return R.data(result);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(200, "排序保存失败");
+        }
+    }
+
+    /**
+     * 收藏项目排序
+     */
+    @PostMapping("/sortProjectCollect")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "收藏项目排序", notes = "传入排序好的项目ids")
+    public R<Boolean> sortProjectCollect(@RequestBody List<Long> projectIds) {
+        int sort = 0;
+        if (projectIds == null || projectIds.isEmpty()) {
+            return R.data(false);
+        }
+        String ids = projectIds.stream().filter(id -> id != null && id > 0).map(id -> id + "").collect(Collectors.joining(","));
+        Long userId = AuthUtil.getUserId();
+        List<UserProjectInfoCollect> query = jdbcTemplate.query("select id, project_id, user_id from m_user_project_collect where user_id = " + userId + " and project_id in (" + ids + ")",
+                new BeanPropertyRowMapper<>(UserProjectInfoCollect.class));
+        Map<Long, Long> map = query.stream().collect(Collectors.toMap(UserProjectInfoCollect::getProjectId, UserProjectInfoCollect::getId, (key1, key2) -> key2));
+        List<Object[]> batchArgs = new ArrayList<>(map.size());
+        for (Long id : projectIds) {
+            Long l = map.get(id);
+            if (l == null) {
+                continue;
+            }
+            Object[] args = new Object[]{++sort, userId, new Date(), l};
+            batchArgs.add(args);
+        }
+        if (!batchArgs.isEmpty()) {
+            jdbcTemplate.batchUpdate("update m_user_project_collect set sort = ?, update_user = ?, update_time = ? where id = ?", batchArgs);
+        }
+        return R.data(true);
+    }
 
 }

+ 40 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsInfoController.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -9,9 +10,12 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.dto.WbsInfoDTO;
+import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.WbsInfo;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
@@ -26,6 +30,8 @@ import org.springblade.manager.wrapper.WbsInfoWrapper;
 import org.springblade.manager.service.IWbsInfoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @RestController
@@ -67,7 +73,9 @@ public class WbsInfoController extends BladeController {
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "分页", notes = "传入wbsInfo")
     public R<IPage<WbsInfoVO>> list(WbsInfoDTO wbsInfo, Query query) {
-        IPage<WbsInfo> pages = wbsInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(wbsInfo));
+        QueryWrapper<WbsInfo> wrapper = Condition.getQueryWrapper(wbsInfo);
+        wrapper.orderByAsc("sort");
+        IPage<WbsInfo> pages = wbsInfoService.page(Condition.getPage(query), wrapper);
         return R.data(WbsInfoWrapper.build().pageVO(pages));
     }
 
@@ -82,7 +90,7 @@ public class WbsInfoController extends BladeController {
             @ApiImplicitParam(name = "current", value = "当前页", required = true),
             @ApiImplicitParam(name = "size", value = "每页的数量", required = true)
     })
-    public R<IPage<WbsInfo>> page(WbsInfo wbsInfo, Query query) {
+    public R<IPage<WbsInfo>> page(WbsInfoDTO wbsInfo, Query query) {
         IPage<WbsInfo> pages = wbsInfoService.selectWbsInfoPage(Condition.getPage(query), wbsInfo);
         return R.data(pages);
     }
@@ -179,5 +187,35 @@ public class WbsInfoController extends BladeController {
         return R.status(wbsInfoService.tabNodeSort(Func.toStrList(primaryKeyIds)));
     }
 
+    /**
+     * 排序
+     */
+    @PostMapping("/sort")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "排序", notes = "传入排序好的ids")
+    public R<Boolean> sort(@RequestBody List<Long> wbsInfoIds) {
+        int sort = 0;
+        if (wbsInfoIds == null || wbsInfoIds.isEmpty()) {
+            return R.data(false);
+        }
+        List<WbsInfo> updateList = new ArrayList<>(wbsInfoIds.size());
+        Long userId = AuthUtil.getUserId();
+        for (Long id : wbsInfoIds) {
+            WbsInfo temp = new WbsInfo();
+            temp.setSort(++sort);
+            temp.setUpdateUser(userId);
+            temp.setUpdateTime(new Date());
+            temp.setId(id);
+            updateList.add(temp);
+        }
+        try {
+            boolean result = wbsInfoService.updateBatchById(updateList);
+            return R.data(result);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(200, "排序保存失败");
+        }
+    }
+
 
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -538,8 +538,8 @@ public class WbsTreeController extends BladeController {
     @GetMapping("/getQueryValueByNodeType")
     @ApiOperationSupport(order = 21)
     @ApiOperation(value = "根据节点类型,内业资料类型查询节点数据", notes = "传入wbsId、projectId、nodeType、majorDataType")
-    public Object getQueryValueByNodeType(@RequestParam String wbsId, @RequestParam String projectId, @RequestParam String queryValue, @RequestParam(required = false,defaultValue = "6") Integer nodeType, @RequestParam(required = false, defaultValue = "-1") Integer majorDataType) {
-        Object result = wbsTreeService.getQueryValueByNodeType(wbsId, projectId, queryValue, nodeType, majorDataType);
+    public Object getQueryValueByNodeType(WbsTreePrivateQueryVO vo) {
+        Object result = wbsTreeService.getQueryValueByNodeType(vo);
         return R.data(result);
     }
 

+ 66 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -31,6 +31,8 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.wrapper.WbsTreePrivateWrapper;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -386,6 +388,62 @@ public class WbsTreePrivateController extends BladeController {
         return R.fail(200, "未查询到数据");
     }
 
+    /**
+     * 查询当前节点下所有表单(根据节点ID查询当前表单)
+     */
+    @GetMapping("/get-group-node-tables")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "查询当前节点下所有元素表并分类", notes = "传入父节点id、wbsId、projectId")
+    public R<List<WbsTreePrivateTableVO>> findAndGroupNodeTableByCondition(@RequestParam("parentId") String parentId,
+                                                            @RequestParam("wbsId") String wbsId,
+                                                            @RequestParam("projectId") String projectId) {
+        R<List<WbsNodeTableVO>> r = findNodeTableByCondition(parentId, wbsId, projectId);
+        List<WbsNodeTableVO> data = r.getData();
+        List<WbsTreePrivateTableVO> list = new ArrayList<>();
+        if (data != null && !data.isEmpty()) {
+            Integer wbsType = data.get(0).getWbsType();
+            Map<Integer, List<WbsNodeTableVO>> groupMap;
+            if (wbsType != null && wbsType == 1) {
+                groupMap = data.stream().collect(Collectors.groupingBy(vo -> {
+                    String tableOwner = vo.getTableOwner();
+                    if (StringUtil.isNumeric(tableOwner)) {
+                        int i = Integer.parseInt(tableOwner);
+                        if (i > 0 && i <= 3) {
+                            return 1;
+                        } else if (i > 3 && i <= 6) {
+                            return 2;
+                        }
+                    }
+                    return 3;
+                }));
+            } else if (wbsType != null && wbsType == 2) {
+                groupMap = data.stream().collect(Collectors.groupingBy(vo -> {
+                    String tableType = vo.getTableType();
+                    if (StringUtil.isNumeric(tableType)) {
+                        int i = Integer.parseInt(tableType);
+                        if (i == 1 ) {
+                            return 2;
+                        } else if (i == 2 ) {
+                            return 1;
+                        }
+                    }
+                    return 3;
+                }));
+            } else {
+                list.add(new WbsTreePrivateTableVO("", data));
+                return R.data(list);
+            }
+            String[][] titles = {{"施工方", "监理方", "其他"}, {"报告表", "记录表", "其他"}};
+            for (int i = 1; i <= 3; i++) {
+                List<WbsNodeTableVO> wbsNodeTableVOS = groupMap.get(i);
+                if (wbsNodeTableVOS != null && !wbsNodeTableVOS.isEmpty()) {
+                    list.add(new WbsTreePrivateTableVO(titles[wbsType - 1][i - 1], wbsNodeTableVOS));
+                }
+            }
+            return R.data(list);
+        }
+        return R.fail(200, "未查询到数据");
+    }
 
     @GetMapping("/remove-table")
     @ApiOperationSupport(order = 4)
@@ -450,7 +508,14 @@ public class WbsTreePrivateController extends BladeController {
         WbsTreePrivate detail = wbsTreePrivateService.getOne(Condition.getQueryWrapper(wbsTree));
         if (detail != null) {
             detail.setFullName(detail.getImportMatchingInfo());
-            return R.data(WbsTreePrivateWrapper.build().entityVO(detail));
+            WbsTreePrivateVO wbsTreePrivateVO = WbsTreePrivateWrapper.build().entityVO(detail);
+            if (detail.getUpdateUser() != null) {
+                List<User> users = jdbcTemplate.query("select name from blade_user where id = " + detail.getUpdateUser(), new BeanPropertyRowMapper<>(User.class));
+                if (!users.isEmpty()) {
+                    wbsTreePrivateVO.setUpdateUserName(users.get(0).getName());
+                }
+            }
+            return R.data(wbsTreePrivateVO);
         }
         return R.fail(200, "未查询到信息");
     }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -121,7 +121,7 @@
     </delete>
 
     <select id="selectContractByProjectIds" resultMap="contractInfoResultMap">
-        select id, p_id, contract_name, contract_number, contract_type ,template_type from m_contract_info where is_deleted = 0 and
+        select id, p_id, contract_name, contract_number, contract_type ,template_type, sort from m_contract_info where is_deleted = 0 and
         p_id in
         <foreach collection="ids" item="pId" open="(" separator="," close=")">
             #{pId}

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.java

@@ -28,6 +28,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.vo.ExcelTabWbsTypeVO;
 import org.springblade.manager.vo.WbsTreeVO;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
@@ -79,4 +80,8 @@ public interface ExcelTabMapper extends BaseMapper<ExcelTab> {
     ExcelTab getWaterByTableId(@Param("id") Long excelId);
 
     List<WbsFormElement> getUnMatchField(@Param("tabId") Long tabId, @Param("set") Set<String> set);
+
+    List<ExcelTabVO> selectRootExcelTab(IPage<ExcelTabVO> page, @Param("vo") ExcelTabVO vo,@Param("rootIds") Collection<Long> rootIds);
+
+    List<ExcelTabVO> getByIds(Collection<Long> ids);
 }

+ 54 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml

@@ -199,7 +199,7 @@
         ORDER BY dept.create_time
     </select>
     <select id="selectExcelTabPage" resultType="org.springblade.manager.vo.ExcelTabVO">
-        select x.id,x.create_time,x.name,x.table_template_type,
+        select x.id,x.create_time,x.name,x.table_template_type,x.tab_type,
         (SELECT bdb.dict_value from blade_dict_biz bdb WHERE code = 'table_template_type' AND dict_key = x.table_template_type) as tableTemplateTypeName,
         (SELECT count(1) from m_excel_tab a where FIND_IN_SET(x.id,a.alias) and a.is_deleted = 0 and a.file_type=3) as
         tab_cout
@@ -207,6 +207,15 @@
         <if test="excelTab.name!=null and excelTab.name!=''">
             AND x.name like concat(concat('%', #{excelTab.name}),'%')
         </if>
+        <if test="excelTab.parentId == null or excelTab.parentId == 0">
+            <if test="excelTab.tabType != null">
+                AND x.tab_type = #{excelTab.tabType}
+            </if>
+            <if test="param2.tableTemplateType != null">
+                AND x.table_template_type = #{excelTab.tableTemplateType}
+            </if>
+        </if>
+        order by x.sort
     </select>
     <select id="getWaterByTableId" resultType="org.springblade.manager.entity.ExcelTab">
         select * from m_excel_tab met WHERE met.parent_id = 0 AND met.table_template_type = 2 AND met.is_deleted = 0
@@ -220,6 +229,50 @@
             #{item}
         </foreach>
     </select>
+    <select id="selectRootExcelTab" resultType="org.springblade.manager.vo.ExcelTabVO">
+        SELECT distinct
+        a.project_id as projectId,
+        b.project_name as projectName,
+        d.id as id
+        FROM m_wbs_tree_private a
+        inner join m_project_info b on b.id = a.project_id
+        inner join m_excel_tab c on c.id = a.excel_id
+        inner join m_excel_tab d on d.id = SUBSTRING_INDEX(c.alias, ',', 1)
+        WHERE a.type = 2 AND a.is_deleted = 0 AND a.excel_id IS NOT NULL
+        <if test="vo != null ">
+            <if test="vo.projectId != null">
+                AND a.project_id = #{vo.projectId}
+            </if>
+            <if test="vo.name!=null and vo.name!=''">
+                AND d.name like concat(concat('%', #{vo.name}),'%')
+            </if>
+            <if test="vo.parentId == null or vo.parentId == 0">
+                <if test="vo.tabType != null">
+                    AND d.tab_type = #{vo.tabType}
+                </if>
+                <if test="vo.tableTemplateType != null">
+                    AND d.table_template_type = #{vo.tableTemplateType}
+                </if>
+            </if>
+        </if>
+        <if test="rootIds != null and rootIds.size() > 0">
+            and d.id IN
+            <foreach collection="rootIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        order by d.sort
+    </select>
+    <select id="getByIds" resultType="org.springblade.manager.vo.ExcelTabVO">
+        select *, (select name from blade_user where id = a.create_user) as createUserName, (SELECT bdb.dict_value from blade_dict_biz bdb WHERE code = 'table_template_type' AND dict_key = a.table_template_type) as tableTemplateTypeName
+        from m_excel_tab a where is_deleted = 0
+        <if test="ids !=null">
+            and id in
+            <foreach collection="ids" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 
 
     <delete id="removeBussTabInfoById">

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.java

@@ -5,6 +5,7 @@ import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.vo.ProjectInfoVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.manager.vo.ProjectInfoVO3;
 import org.springblade.manager.vo.ProjectUserAmountVO;
 import org.springblade.manager.vo.SingPfxManagementVO;
 
@@ -30,4 +31,5 @@ public interface ProjectInfoMapper extends BaseMapper<ProjectInfo> {
 
     ProjectInfo selectOneAndWbsTypeById(Long id);
 
+    IPage<ProjectInfoVO> pageList(IPage<ProjectInfoVO> page, @Param("vo") ProjectInfoVO3 vo);
 }

+ 38 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml

@@ -153,5 +153,43 @@
         FROM m_project_info
         WHERE id = #{id}
     </select>
+    <select id="pageList" resultType="org.springblade.manager.vo.ProjectInfoVO">
+        select distinct a.*, if(b.id is null , 0, 1) as isCollect, (select name from blade_user where id = a.project_leader) as projectLeaderName from m_project_info a left join m_user_project_collect b
+            on a.id = b.project_id and b.user_id = #{vo.userId} and b.is_deleted = 0 where a.is_deleted = 0
+        <if test="vo.name != null and vo.name != ''">
+            and (a.project_name like concat('%',#{vo.name},'%') or a.project_alias like concat('%',#{vo.name},'%'))
+        </if>
+        <if test="vo.status != null">
+            and a.project_status = #{vo.status}
+        </if>
+        <if test="vo.isCollect != null and vo.isCollect == 1">
+            and b.id is not null
+        </if>
+        <choose>
+            <when test="vo.sort == 0">
+                order by
+                IF(b.sort is null, 999, b.sort),
+                a.sort,
+                a.create_time desc
+            </when>
+            <when test="vo.sort == 1">
+                order by
+                IF(b.sort is null, 999, b.sort),
+                a.sort,
+                a.create_time desc
+            </when>
+            <when test="vo.sort == 2">
+                order by
+                    b.create_time desc
+            </when>
+            <when test="vo.sort == 3">
+                order by
+                    if(a.project_leader = #{vo.userId}, 0, 1 ),
+                    IF(b.sort is null, 999, b.sort),
+                    a.sort,
+                    a.create_time desc
+            </when>
+        </choose>
+    </select>
 
 </mapper>

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsInfoMapper.java

@@ -2,13 +2,15 @@ package org.springblade.manager.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.lettuce.core.dynamic.annotation.Param;
+import org.springblade.manager.dto.WbsInfoDTO;
 import org.springblade.manager.entity.WbsInfo;
 
 import java.util.List;
 
 public interface WbsInfoMapper extends BaseMapper<WbsInfo> {
 
-    List<WbsInfo> selectWbsInfoPage(IPage page, WbsInfo wbsInfo);
+    List<WbsInfoDTO> selectWbsInfoPage(IPage page, @Param("wbsInfo") WbsInfo wbsInfo);
 
     List<WbsInfo> selectAll(Integer type);
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsInfoMapper.xml

@@ -14,6 +14,7 @@
         <result column="is_deleted" property="isDeleted"/>
         <result column="wbs_name" property="wbsName"/>
         <result column="wbs_type" property="wbsType"/>
+        <result column="sort" property="sort"/>
     </resultMap>
     <resultMap id="resultMap2" type="org.springblade.manager.vo.WbsInfoVO">
         <result column="id" property="id"/>
@@ -42,7 +43,7 @@
         GROUP BY
         wbs_name
         ORDER BY
-        create_time
+        sort,create_time
     </select>
 
     <select id="selectById2" resultMap="wbsInfoResultMap">

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -19,6 +19,7 @@ package org.springblade.manager.service;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 import org.jsoup.nodes.Document;
 import org.springblade.business.dto.TrialSelfInspectionRecordDTO;
 import org.springblade.core.mp.base.BaseService;
@@ -222,4 +223,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     void expailHtmlInfo(String thmlUrl, Long id, String s) throws Exception ;
 
     R batchAddNumbers(BatchAddNumbersDTO dto) throws Exception;
+
+    ExcelTabVO templateDetail(Long id);
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IProjectInfoService.java

@@ -27,4 +27,5 @@ public interface IProjectInfoService extends BaseService<ProjectInfo> {
 
     Long getProjectIdbyName(String projectName);
 
+    IPage<ProjectInfoVO> pageList(IPage<ProjectInfoVO> page, ProjectInfoVO3 vo);
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsInfoService.java

@@ -11,7 +11,7 @@ import java.util.List;
 
 public interface IWbsInfoService extends BaseService<WbsInfo> {
 
-    IPage<WbsInfo> selectWbsInfoPage(IPage<WbsInfo> page, WbsInfo wbsInfo);
+    IPage<WbsInfo> selectWbsInfoPage(IPage<WbsInfo> page, WbsInfoDTO wbsInfo);
 
     List<WbsInfo> findByWbsType(String type);
 

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -80,5 +80,5 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     List<WbsTreePrivate> getTitleRange(String projectId,Integer wbsType);
 
-    Object getQueryValueByNodeType(String wbsId, String projectId, String queryValue, Integer nodeType, Integer majorDataType);
+    Object getQueryValueByNodeType(WbsTreePrivateQueryVO vo);
 }

+ 88 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.RegexUtils;
@@ -71,6 +72,7 @@ import org.springblade.manager.mapper.ExcelTabMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.*;
 import org.springblade.manager.vo.*;
+import org.springblade.manager.wrapper.ExcelTabWrapper;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -141,7 +143,92 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public IPage<ExcelTabVO> selectExcelTabPage(IPage<ExcelTabVO> page, ExcelTabVO excelTab) {
-        return page.setRecords(baseMapper.selectExcelTabPage(page, excelTab));
+        if (excelTab.getProjectId() != null && excelTab.getProjectId() > 0 && (excelTab.getParentId() == null || excelTab.getParentId() == 0)) {
+            List<ExcelTabVO> records  = baseMapper.selectRootExcelTab(page, excelTab, null);
+            if (!records.isEmpty()) {
+                List<Long> ids = records.stream().map(ExcelTabVO::getId).collect(Collectors.toList());
+                List<ExcelTabVO> excelTabs = this.baseMapper.getByIds(ids);
+                Map<Long, ExcelTabVO> map = excelTabs.stream().collect(toMap(ExcelTabVO::getId, v -> v));
+                List<ExcelTabVO> projectInfoList  = baseMapper.selectRootExcelTab(new Page<>(), null, ids);
+                Map<Long, List<ExcelTabVO>> collect = projectInfoList.stream().collect(Collectors.groupingBy(ExcelTabVO::getId));
+                records.forEach(v -> {
+                    ProjectInfoVO1 projectInfoVO1 = new ProjectInfoVO1();
+                    projectInfoVO1.setProjectId(v.getProjectId());
+                    projectInfoVO1.setProjectName(v.getProjectName());
+                    if (map.get(v.getId()) != null) {
+                        BeanUtil.copyProperties(map.get(v.getId()), v);
+                    }
+                    List<ExcelTabVO> excelTabVOS = collect.get(v.getId());
+                    if (excelTabVOS != null) {
+                        List<ProjectInfoVO1> list = excelTabVOS.stream().map(vo -> {
+                            ProjectInfoVO1 projectInfoVO2 = new ProjectInfoVO1();
+                            projectInfoVO2.setProjectId(vo.getProjectId());
+                            projectInfoVO2.setProjectName(vo.getProjectName());
+                            return projectInfoVO2;
+                        }).collect(Collectors.toList());
+                        v.setProjectInfoList(list);
+                    } else {
+                        v.setProjectInfoList(Collections.singletonList(projectInfoVO1));
+                    }
+                });
+            }
+            return page.setRecords(records);
+        }
+        List<ExcelTabVO> records = baseMapper.selectExcelTabPage(page, excelTab);
+        if (!records.isEmpty() && (excelTab.getParentId() == null || excelTab.getParentId() == 0)) {
+            Set<Long> set = records.stream().map(ExcelTabVO::getId).collect(Collectors.toSet());
+            List<ExcelTabVO> projectInfoList  = baseMapper.selectRootExcelTab(new Page<>(), null, set);
+            Map<Long, List<ExcelTabVO>> collect = projectInfoList.stream().collect(Collectors.groupingBy(ExcelTabVO::getId));
+            records.forEach(v -> {
+                List<ExcelTabVO> excelTabVOS = collect.get(v.getId());
+                if (excelTabVOS != null) {
+                    List<ProjectInfoVO1> list = excelTabVOS.stream().map(vo -> {
+                        ProjectInfoVO1 projectInfoVO1 = new ProjectInfoVO1();
+                        projectInfoVO1.setProjectId(vo.getProjectId());
+                        projectInfoVO1.setProjectName(vo.getProjectName());
+                        return projectInfoVO1;
+                    }).collect(Collectors.toList());
+                    v.setProjectInfoList(list);
+                }
+            });
+        }
+        return page.setRecords(records);
+    }
+
+    @Override
+    public ExcelTabVO templateDetail(Long id) {
+        List<ExcelTabVO> excelTabVOs = this.baseMapper.getByIds(Collections.singleton(id));
+        if (excelTabVOs == null || excelTabVOs.isEmpty()) {
+            return new ExcelTabVO();
+        }
+        ExcelTabVO excelTabVO = excelTabVOs.get(0);
+        if (excelTabVO == null || (excelTabVO.getParentId() != null && excelTabVO.getParentId() > 0)) {
+            return excelTabVO;
+        }
+        Map<String, Object> map = jdbcTemplate.queryForMap("SELECT count(a.id) as total,count(t.id) as useNum from m_excel_tab a LEFT JOIN ( select excel_id as id from m_wbs_tree_private where type = 2 and is_deleted = 0 and excel_id is not null GROUP BY excel_id ) as t " +
+                "on a.id = t.id where a.is_deleted = 0 and file_type = 3 and alias like '" + id + "%'");
+        if (map.get("total") == null) {
+            excelTabVO.setTabCout(0);
+        } else {
+            excelTabVO.setTabCout(Integer.parseInt(map.get("total").toString()));
+        }
+        if (map.get("useNum") == null) {
+            excelTabVO.setExcelUseNumber(0);
+        } else {
+            excelTabVO.setExcelUseNumber(Integer.parseInt(map.get("useNum").toString()));
+        }
+        List<ExcelTabVO> projectInfoList  = baseMapper.selectRootExcelTab(new Page<>(), null, Collections.singleton(id));
+        if (projectInfoList != null && !projectInfoList.isEmpty()) {
+            List<ProjectInfoVO1> list = projectInfoList.stream().map(vo -> {
+                ProjectInfoVO1 projectInfoVO1 = new ProjectInfoVO1();
+                projectInfoVO1.setProjectId(vo.getProjectId());
+                projectInfoVO1.setProjectName(vo.getProjectName());
+                return projectInfoVO1;
+            }).collect(Collectors.toList());
+            excelTabVO.setProjectInfoList(list);
+            excelTabVO.setProjectUseNumber(list.size());
+        }
+        return excelTabVO;
     }
 
     @Override

+ 31 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java

@@ -2,6 +2,7 @@ package org.springblade.manager.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.Data;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.manager.entity.ContractInfo;
@@ -12,12 +13,14 @@ import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.manager.wrapper.ProjectInfoWrapper;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -155,4 +158,32 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
         return projectInfos.get(0).getId();
     }
 
+    @Override
+    public IPage<ProjectInfoVO> pageList(IPage<ProjectInfoVO> page, ProjectInfoVO3 vo) {
+        IPage<ProjectInfoVO> pagedList = baseMapper.pageList(page, vo);
+        List<ProjectInfoVO> records = pagedList.getRecords();
+        if (records != null && !records.isEmpty()) {
+            records.forEach(item -> {
+                List<Integer> wbsTypes = new ArrayList<>();
+                if (item.getReferenceWbsTemplateId() != null && item.getReferenceWbsTemplateId() > 0) {
+                    wbsTypes.add(1);
+                }
+                if (item.getReferenceWbsTemplateIdTrial() != null && item.getReferenceWbsTemplateIdTrial() > 0) {
+                    wbsTypes.add(2);
+                }
+                if (item.getReferenceLogWbsTemplateId() != null && item.getReferenceLogWbsTemplateId() > 0) {
+                    wbsTypes.add(3);
+                }
+                if (item.getReferenceWbsTemplateIdMeter() != null && item.getReferenceWbsTemplateIdMeter() > 0) {
+                    wbsTypes.add(4);
+                }
+                if (item.getReferenceWbsTemplateIdLar() != null && item.getReferenceWbsTemplateIdLar() > 0) {
+                    wbsTypes.add(5);
+                }
+                item.setWbsTypes(wbsTypes);
+            });
+        }
+        return pagedList;
+    }
+
 }

+ 59 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsInfoServiceImpl.java

@@ -1,24 +1,28 @@
 package org.springblade.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.dto.WbsInfoDTO;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.mapper.WbsInfoMapper;
 import org.springblade.manager.service.IWbsInfoService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.entity.WbsInfo;
 import org.springblade.manager.vo.WbsInfoVO;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import java.util.*;
 
 @Service
 @AllArgsConstructor
@@ -28,8 +32,60 @@ public class WbsInfoServiceImpl extends BaseServiceImpl<WbsInfoMapper, WbsInfo>
     private final JdbcTemplate jdbcTemplate;
 
     @Override
-    public IPage<WbsInfo> selectWbsInfoPage(IPage<WbsInfo> page, WbsInfo wbsInfo) {
-        return page.setRecords(baseMapper.selectWbsInfoPage(page, wbsInfo));
+    public IPage<WbsInfo> selectWbsInfoPage(IPage<WbsInfo> page, WbsInfoDTO wbsInfo) {
+        Set<Long> wbsIds = new HashSet<>();
+        if (StringUtil.hasText(wbsInfo.getProjectName()) || StringUtil.isNumeric(wbsInfo.getProjectId())) {
+            List<ProjectInfo> projectInfoList;
+            if (StringUtil.isNumeric(wbsInfo.getProjectId())) {
+                projectInfoList = jdbcTemplate.query("select * from m_project_info where id = " + wbsInfo.getProjectId(), new BeanPropertyRowMapper<>(ProjectInfo.class));
+            } else {
+                projectInfoList = jdbcTemplate.query("select * from m_project_info where project_name like '%" + wbsInfo.getProjectName() + "%'", new BeanPropertyRowMapper<>(ProjectInfo.class));
+            }
+            if (projectInfoList.isEmpty()) {
+                return page;
+            }
+            for (ProjectInfo projectInfo : projectInfoList) {
+                if (projectInfo.getReferenceWbsTemplateId() != null) {
+                    wbsIds.add(projectInfo.getReferenceWbsTemplateId());
+                }
+                if (projectInfo.getReferenceWbsTemplateIdTrial() != null) {
+                    wbsIds.add(projectInfo.getReferenceWbsTemplateIdTrial());
+                }
+                if (projectInfo.getReferenceWbsTemplateIdLar() != null) {
+                    wbsIds.add(projectInfo.getReferenceWbsTemplateIdLar());
+                }
+                if (projectInfo.getReferenceWbsTemplateIdMeter() != null) {
+                    wbsIds.add(projectInfo.getReferenceWbsTemplateIdMeter());
+                }
+                if (projectInfo.getReferenceWbsTemplateIdLar() != null) {
+                    wbsIds.add(projectInfo.getReferenceWbsTemplateIdLar());
+                }
+            }
+        }
+        LambdaQueryWrapper<WbsInfo> query = Wrappers.lambdaQuery();
+        if (!wbsIds.isEmpty()) {
+            query.in(WbsInfo::getId, wbsIds);
+        }
+        if (StringUtil.hasText(wbsInfo.getWbsName())) {
+            query.like(WbsInfo::getWbsName, wbsInfo.getWbsName());
+        }
+        if (wbsInfo.getWbsType() != null) {
+            query.eq(WbsInfo::getWbsType, wbsInfo.getWbsType());
+        }
+        IPage<WbsInfo> infoIPage = baseMapper.selectPage(page, query);
+        List<WbsInfo> records = infoIPage.getRecords();
+        if (!records.isEmpty()) {
+            for (WbsInfo record : records) {
+                List<ProjectInfo> projectInfoList = jdbcTemplate.query("select id, project_name from m_project_info where reference_log_wbs_template_id = ? " +
+                                "or reference_wbs_template_id = ? or reference_wbs_template_id_trial = ? or reference_wbs_template_id_lar = ? or reference_wbs_template_id_meter = ?"
+                        ,new Object[]{record.getId(), record.getId(), record.getId(), record.getId(), record.getId()} ,new BeanPropertyRowMapper<>(ProjectInfo.class));
+                if (!projectInfoList.isEmpty()) {
+                    record.setProjectInfoList(projectInfoList);
+                }
+            }
+            records.sort(Comparator.comparing(WbsInfo::getSort));
+        }
+        return infoIPage;
     }
 
     @Override

+ 2 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -132,6 +132,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submit(WbsTreePrivate wbsTreePrivate) {
+        wbsTreePrivate.setUpdateTime(new Date());
+        wbsTreePrivate.setUpdateUser(AuthUtil.getUserId());
         //修改
         if (wbsTreePrivate.getPKeyId() != null) {
             Long pKeyId = wbsTreePrivate.getPKeyId();
@@ -437,21 +439,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         for (WbsTreePrivateDTO2 wbsTreePrivate : wbsTreeDTO) {
             wbsTreePrivate.setSort(number);
             baseMapper.updateSortById2(wbsTreePrivate.getPKeyId(), wbsTreePrivate.getSort());
-
-            WbsTreePrivate objPrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getPKeyId()));
-            if (objPrivate != null) {
-                String projectId = objPrivate.getProjectId();
-                String wbsId = objPrivate.getWbsId();
-                Long id = objPrivate.getId();
-
-//                //合同段wbs树同步排序
-//                LambdaUpdateWrapper<WbsTreeContract> updateWrapper = new LambdaUpdateWrapper<>();
-//                updateWrapper.eq(WbsTreeContract::getWbsId, wbsId);
-//                updateWrapper.eq(WbsTreeContract::getProjectId, projectId);
-//                updateWrapper.eq(WbsTreeContract::getId, id);
-//                updateWrapper.set(WbsTreeContract::getSort, number);
-//                wbsTreeContractMapper.update(null, updateWrapper);
-            }
             number++;
         }
         return true;

+ 16 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -569,25 +569,27 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public Object getQueryValueByNodeType(String wbsId, String projectId, String queryValue, Integer nodeType, Integer majorDataType) {
-        Set<WbsTreePrivate> resultNodes = new HashSet<>();
-        LambdaQueryWrapper<WbsTreePrivate> wrapper = Wrappers.<WbsTreePrivate>lambdaQuery()
-                .eq(WbsTreePrivate::getType, 1).eq(WbsTreePrivate::getWbsId, wbsId).eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getNodeType, nodeType);
-        if (majorDataType != null) {
-            if (majorDataType > 0) {
-                wrapper.eq(WbsTreePrivate::getMajorDataType, majorDataType);
-            } else if (majorDataType == -1) {
-                wrapper.and(wrapper1 -> wrapper1.isNull(WbsTreePrivate::getMajorDataType).or().eq(WbsTreePrivate::getMajorDataType, 0));
+    public Object getQueryValueByNodeType(WbsTreePrivateQueryVO vo) {
+        LambdaQueryWrapper<WbsTreePrivate> wrapper = Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getType, 1).eq(WbsTreePrivate::getWbsId, vo.getWbsId()).eq(WbsTreePrivate::getProjectId, vo.getProjectId());
+        wrapper.eq(vo.getNodeType() != null, WbsTreePrivate::getNodeType, vo.getNodeType());
+        wrapper.eq(vo.getIsAddConceal() != null, WbsTreePrivate::getIsAddConceal, vo.getIsAddConceal());
+        wrapper.eq(vo.getClassName() != null, WbsTreePrivate::getClassName, vo.getClassName());
+        wrapper.eq(vo.getUnitName() != null, WbsTreePrivate::getUnitName, vo.getUnitName());
+        wrapper.like(vo.getQueryValue() != null && !vo.getQueryValue().isEmpty() ,WbsTreePrivate::getNodeName, vo.getQueryValue());
+        wrapper.like(vo.getUniqueCode() != null && !vo.getUniqueCode().isEmpty() ,WbsTreePrivate::getUniqueCode, vo.getUniqueCode());
+        if (vo.getMajorDataType() != null) {
+            if (vo.getMajorDataType() > 0) {
+                wrapper.eq(WbsTreePrivate::getMajorDataType, vo.getMajorDataType());
+            } else if (vo.getMajorDataType() == -1) {
+                wrapper.and( wrapper1 -> wrapper1.isNull(WbsTreePrivate::getMajorDataType).or().eq(WbsTreePrivate::getMajorDataType, 0));
             }
         }
-        if (queryValue != null && !queryValue.trim().isEmpty()) {
-            wrapper.like(WbsTreePrivate::getNodeName, queryValue);
-        }
         List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(wrapper);
-        this.getParentNodesPrivateWbs(wbsTreePrivates, resultNodes, projectId, wbsId);
+        Set<WbsTreePrivate> resultNodes = new HashSet<>();
+        this.getParentNodesPrivateWbs(wbsTreePrivates, resultNodes, vo.getProjectId(), vo.getWbsId());
         resultNodes.addAll(wbsTreePrivates);
         List<WbsTreePrivateQueryValueVO> wbsTreePrivateQueryValueVOS = BeanUtil.copyProperties(resultNodes, WbsTreePrivateQueryValueVO.class);
-        if (wbsTreePrivateQueryValueVOS.size() > 0) {
+        if (!wbsTreePrivateQueryValueVOS.isEmpty()) {
             List<WbsTreePrivateQueryValueVO> listRoot = wbsTreePrivateQueryValueVOS.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
             Map<Long, List<WbsTreePrivateQueryValueVO>> mapAll = wbsTreePrivateQueryValueVOS.stream().collect(Collectors.groupingBy(WbsTreePrivateQueryValueVO::getParentId));
             this.buildWbsTreePrivateByGetQueryValueByType(listRoot, mapAll);