소스 검색

后管项目列表优化

lvy 1 개월 전
부모
커밋
2f4fafb813
14개의 변경된 파일417개의 추가작업 그리고 8개의 파일을 삭제
  1. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ContractInfo.java
  2. 15 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java
  3. 83 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/UserProjectInfoCollect.java
  4. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ContractInfoVO.java
  5. 17 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO.java
  6. 33 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ProjectInfoVO3.java
  7. 24 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserViewProjectContractController.java
  8. 51 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  9. 110 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java
  10. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  11. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.java
  12. 37 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml
  13. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IProjectInfoService.java
  14. 31 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java

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

@@ -181,6 +181,12 @@ public class ContractInfo extends BaseEntity {
     @ApiModelProperty(value = "卷盒规格")
     private String specification;
 
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
     public BigDecimal getProjectMileage() {
         if (projectMileage == null){
             return null;

+ 15 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java

@@ -210,5 +210,19 @@ public class ProjectInfo extends BaseEntity {
     @ApiModelProperty(value = "监理后缀")
     private String jlSuffix;
 
-
+    /**
+     * 项目状态
+     */
+    @ApiModelProperty(value = "项目状态, 0:未开始, 1:配置中, 2: 进行中, 3: 已完成")
+    private Integer projectStatus;
+    /**
+     * 项目排序
+     */
+    @ApiModelProperty(value = "项目排序")
+    private Integer sort;
+    /**
+     * 项目负责人
+     */
+    @ApiModelProperty(value = "项目负责人")
+    private Long projectLeader;
 }

+ 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;
+}

+ 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;
+
 
 }

+ 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;
+
+}
 

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

@@ -23,6 +23,7 @@ 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;
@@ -49,6 +50,7 @@ import java.net.URLConnection;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @RestController
@@ -268,18 +270,37 @@ 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);
+            //排序项目
+            String pIds = projectInfoVOS.stream().map(projectInfoVO -> projectInfoVO.getId() + "").collect(Collectors.joining(","));
+            List<Long> collectIds = jdbcTemplate.query("select project_id from m_user_project_collect where is_deleted = 0 and user_id = " + AuthUtil.getUserId() + " and project_id in ( " + pIds + ")",
+                    new BeanPropertyRowMapper<>(Long.class));
+            Map<Long, Long> collect = collectIds.stream().collect(Collectors.toMap(v -> v, v -> v, (k1, k2) -> k1));
+            // 按是否收藏进行排序,然后按照sort 进行排序
+            projectInfoVOS.sort((o1, o2) -> {
+                if (collect.containsKey(o1.getId())) {
+                    if (!collect.containsKey(o2.getId())) {
+                        return -1;
+                    }
+                } else {
+                    if (collect.containsKey(o2.getId())) {
+                        return 1;
+                    }
+                }
+                if (o1.getSort() != null && o2.getSort() != null) {
+                    return o1.getSort().compareTo(o2.getSort());
+                }
+                return 0;
+            });
             //将合同段中业主合同段排在最前面
             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.comparingInt(ContractInfoVO::getSort));
                     }
                 }
             }

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

@@ -13,6 +13,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 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.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -22,6 +23,7 @@ import org.springblade.manager.dto.FindAllUserByConditionDTO;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.entity.ContractRelationJlyz;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.SaveUserInfoByProjectService;
@@ -104,19 +106,65 @@ 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(","));
+        List<MeterContractInfo> meterContractInfoList = jdbcTemplate.query("SELECT * FROM s_meter_contract_info WHERE contract_id in ( " + contractIds + ")", new BeanPropertyRowMapper<>(MeterContractInfo.class));
+        String ids = contractInfoVOS.stream().map(contractInfo -> contractInfo.getId() + "").collect(Collectors.joining(","));
+        List<ContractRelationJlyz> query = jdbcTemplate.query("select * from  m_contract_relation_jlyz where contract_id_jlyz in ( " + ids + ")", new BeanPropertyRowMapper<>(ContractRelationJlyz.class));
+        Map<Long, List<ContractRelationJlyz>> relationMap = query.stream().collect(Collectors.groupingBy(ContractRelationJlyz::getContractIdJlyz));
+        Map<Long, ContractInfo> contractInfoMap = contractInfoVOS.stream().collect(Collectors.toMap(ContractInfo::getId, vo -> vo));
+        Map<Long, List<MeterContractInfo>> collect = meterContractInfoList.stream().collect(Collectors.groupingBy(MeterContractInfo::getContractId));
         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((o1, o2) -> o2.getSort().compareTo(o1.getSort()));
         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, "排序保存失败");
+        }
+    }
+
 
     /**
      * 分页 合同段信息

+ 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(@RequestBody 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);
+    }
 
 }

+ 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}

+ 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);
 }

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

@@ -152,5 +152,42 @@
         FROM m_project_info
         WHERE id = #{id}
     </select>
+    <select id="pageList" resultType="org.springblade.manager.vo.ProjectInfoVO">
+        select 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} 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 and b.is_deleted = 0
+        </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>

+ 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);
 }

+ 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;
+    }
+
 }