Browse Source

wbs动态库优化

lvy 1 month ago
parent
commit
03cb1260ad

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

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

+ 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, "排序保存失败");
+        }
+    }
+
 
 }

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

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

+ 54 - 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,55 @@ 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())) {
+            List<ProjectInfo> 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