Jelajahi Sumber

后管-同步
1、添加根据项目查询数据
2、从后管同步-调整新增表单的逻辑

LHB 5 hari lalu
induk
melakukan
41dffc92bb

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

@@ -0,0 +1,17 @@
+package org.springblade.manager.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.manager.entity.WbsTreeSynchronousRecord;
+
+/**
+ * @author LHB
+ */
+@Data
+public class WbsTreeSynchronousRecordDTO extends WbsTreeSynchronousRecord {
+    @ApiModelProperty("进度")
+    private Integer progress = 0;
+
+    @ApiModelProperty("剩余数量")
+    private Integer surplusCount = 0;
+}

+ 29 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeSynchronousRecordController.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.manager.entity.ProjectInfo;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.dto.WbsTreeSynchronousRecordDTO;
 import org.springblade.manager.entity.WbsTreeSynchronousRecord;
 import org.springblade.manager.service.WbsTreeSynchronousRecordService;
 import org.springblade.core.mp.support.Condition;
@@ -18,8 +18,9 @@ import org.springblade.manager.vo.WbsTreeSynchronousRecordVo;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * WBS同步记录表(MWbsTreeSynchronousRecord)表控制层
@@ -160,11 +161,33 @@ public class WbsTreeSynchronousRecordController {
      */
     @ApiOperation(value = "添加同步记录查询功能")
     @GetMapping("querySyncRecord")
-    public R<List<WbsTreeSynchronousRecord>> querySyncRecord(@RequestParam Long projectId) {
-        return R.data(this.mWbsTreeSynchronousRecordService.list(new QueryWrapper<WbsTreeSynchronousRecord>().lambda()
+    public R<List<WbsTreeSynchronousRecordDTO>> querySyncRecord(@RequestParam Long projectId) {
+        List<WbsTreeSynchronousRecord> list = this.mWbsTreeSynchronousRecordService.list(new QueryWrapper<WbsTreeSynchronousRecord>().lambda()
                 .eq(WbsTreeSynchronousRecord::getProjectId, projectId)
                 .ne(WbsTreeSynchronousRecord::getStatus, 2)
-        ));
+        );
+        List<WbsTreeSynchronousRecordDTO> collect = list.stream().map(m -> {
+            WbsTreeSynchronousRecordDTO wbsTreeSynchronousRecordDTO = new WbsTreeSynchronousRecordDTO();
+            try {
+                BeanUtils.copyProperties(m, wbsTreeSynchronousRecordDTO); // 复制属性
+            } catch (IllegalAccessException | InvocationTargetException e) {
+                throw new RuntimeException(e);
+            }
+            if(m.getNodeNum() != 0){
+                wbsTreeSynchronousRecordDTO.setSurplusCount(m.getNodeNum() - m.getNodeNumEnd());
+                int i = m.getNodeNumEnd() * 100 / m.getNodeNum();
+                if (m.getStatus() == 2 || i > 100) {
+                    i = 100;
+                }
+                wbsTreeSynchronousRecordDTO.setProgress(i);
+            }else{
+                wbsTreeSynchronousRecordDTO.setSurplusCount(0);
+                wbsTreeSynchronousRecordDTO.setProgress(0);
+            }
+
+            return wbsTreeSynchronousRecordDTO;
+        }).collect(Collectors.toList());
+        return R.data(collect);
     }
 }
 

+ 55 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java

@@ -319,4 +319,59 @@ public class WbsSynchronousEViSaServiceImpl {
         Integer i = wbsTreeContractMapper.insertBatchSomeColumn(list);
         return i;
     }
+
+    /**
+     * 新增表单
+     * @param wbsTreeSynchronousRecord
+     * @param list
+     * @param pId
+     */
+    public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> list, Long pId) {
+        //排序调整
+        if (wbsTreeSynchronousRecord.getType().contains("7")) {
+            list.sort(Comparator.comparingInt(WbsTreePrivate::getSort));
+            //获取节点下的当前表单
+            List<WbsTreePrivate> resourceData = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                    .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getSort)
+                    .eq(WbsTreePrivate::getPId, pId)
+                    .eq(WbsTreePrivate::getIsDeleted, 0)
+                    .orderByAsc(WbsTreePrivate::getSort));
+            if (CollectionUtil.isNotEmpty(resourceData)) {
+                for (int i = 0; i < resourceData.size(); i++) {
+                    resourceData.get(i).setSort(i + 1);
+                }
+                //修改排序为连续排序
+                wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
+            }
+
+
+            for (WbsTreePrivate wbsTreePrivate : list) {
+                wbsTreePrivateMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
+            }
+        }
+        //单个批次一个事务,只会回滚当前批次数据
+        Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(list);
+
+        //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
+        if (i == 0) {
+            //这里可以保存到数据库指定错误日志表
+        } else {
+            //排序调整-连续排序
+            if (wbsTreeSynchronousRecord.getType().contains("7")) {
+                //获取节点下的当前表单
+                List<WbsTreePrivate> resourceData = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                        .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getSort)
+                        .eq(WbsTreePrivate::getPId, pId)
+                        .eq(WbsTreePrivate::getIsDeleted, 0)
+                        .orderByAsc(WbsTreePrivate::getSort));
+                if (CollectionUtil.isNotEmpty(resourceData)) {
+                    for (int j = 0; j < resourceData.size(); j++) {
+                        resourceData.get(j).setSort(j + 1);
+                    }
+                    //修改排序为连续排序
+                    wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
+                }
+            }
+        }
+    }
 }

+ 31 - 75
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -246,6 +246,7 @@ public class WbsSynchronousServiceImpl {
         ProjectInfo tempProject = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery()
                 .eq(ProjectInfo::getId, wbsTreeSynchronousRecord.getTemplateId()));
 
+        List<WbsTreePrivate> addData = new ArrayList<>();
         List<WbsTreePrivate> editData = new ArrayList<>();
 
         for (String primaryKeyId : nodeIds) {
@@ -512,7 +513,8 @@ public class WbsSynchronousServiceImpl {
                     switch (i) {
                         //添加表单
                         case 1:
-                            insertPrivateForm(wbsTreeSynchronousRecord, wbsTreePrivates, addPrivateNodes);
+                            List<WbsTreePrivate> list = insertPrivateForm(wbsTreeSynchronousRecord, wbsTreePrivates, addPrivateNodes);
+                            addData.addAll(list);
                             updateEViSa(collect, wbsTreeSynchronousRecord.getTemplateId(), projectInfo.getId(), templateNodes, addPrivateNodes);
                             break;
                         //清表
@@ -541,17 +543,32 @@ public class WbsSynchronousServiceImpl {
                 }
             }
         }
+        Set<Long> pIdsNew = new HashSet<>();
+        Map<Long, List<WbsTreePrivate>> addMap = addData.stream().collect(Collectors.groupingBy(WbsTreePrivate::getPId));
+        pIdsNew.addAll(addMap.keySet());
+
+
         //更新数据的同时统计最小节点数量
         Map<Long, List<WbsTreePrivate>> collect1 = editData.stream().collect(Collectors.groupingBy(WbsTreePrivate::getPId));
-        Set<Long> pIds = collect1.keySet();
+        pIdsNew.addAll(collect1.keySet());
         Integer nodeNumEnd = 0;
-        for (Long pId : pIds) {
+        //修改需要操作的数量
+        synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
+                .set(WbsTreeSynchronousRecord::getNodeNum, pIdsNew.size())
+                .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
+                .eq(WbsTreeSynchronousRecord::getId, wbsTreeSynchronousRecord.getId()));
+        for (Long pId : pIdsNew) {
             nodeNumEnd++;
+            //新增数据
+            List<WbsTreePrivate> addList = addMap.get(pId);
+            if (CollectionUtil.isNotEmpty(addList)) {
+                wbsSynchronousEViSaService.insertPrivateForm(wbsTreeSynchronousRecord, addList, pId);
+            }
             List<WbsTreePrivate> list = collect1.get(pId);
-
-            //更新最新节点
-            wbsSynchronousEViSaService.updatePrivate(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list);
-
+            if(CollectionUtil.isNotEmpty(list)){
+                //更新最新节点
+                wbsSynchronousEViSaService.updatePrivate(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list);
+            }
             synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
                     .set(WbsTreeSynchronousRecord::getNodeNumEnd, nodeNumEnd)
                     .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
@@ -871,7 +888,11 @@ public class WbsSynchronousServiceImpl {
 
         //需要记录历史html的表单
         Map<Long, List<WbsTreeContract>> collect3 = oldHtml.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
-
+        //修改需要操作的数量
+        synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
+                .set(WbsTreeSynchronousRecord::getNodeNum, pIdsNew.size())
+                .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
+                .eq(WbsTreeSynchronousRecord::getId, wbsTreeSynchronousRecord.getId()));
         for (Long pId : pIdsNew) {
             nodeNumEnd++;
 
@@ -937,7 +958,7 @@ public class WbsSynchronousServiceImpl {
      * @param wbsTreePrivates          当前项目对应节点的子节点
      * @param addPrivateNodes          需要新增的节点
      */
-    public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
+    public List<WbsTreePrivate> insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
         List<WbsTreePrivate> addData = new ArrayList<>();
 
         //------------------------------------------------新增-------------------------------------------------------------------------
@@ -1014,73 +1035,8 @@ public class WbsSynchronousServiceImpl {
                 e.printStackTrace();
                 throw new ServiceException("重置表单路径错误");
             }
-
-            //新增-----------------------------------------------------------------------------------------------------------------
-            Map<Long, List<WbsTreePrivate>> collect = addData.stream().collect(Collectors.groupingBy(WbsTreePrivate::getPId));
-            Set<Long> longs = collect.keySet();
-
-            List<Long> pIds = new ArrayList<>(longs);
-            //按最小节点批量新增
-            List<List<Long>> partition = Lists.partition(pIds, 100);
-            int sum = 0;
-            for (List<Long> data : partition) {
-                for (Long pId : data) {
-                    List<WbsTreePrivate> list = collect.get(pId);
-                    //排序调整
-                    if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                        list.sort(Comparator.comparingInt(WbsTreePrivate::getSort));
-                        //获取节点下的当前表单
-                        List<WbsTreePrivate> resourceData = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                                .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getSort)
-                                .eq(WbsTreePrivate::getPId, pId)
-                                .eq(WbsTreePrivate::getIsDeleted, 0)
-                                .orderByAsc(WbsTreePrivate::getSort));
-                        if (CollectionUtil.isNotEmpty(resourceData)) {
-                            for (int i = 0; i < resourceData.size(); i++) {
-                                resourceData.get(i).setSort(i + 1);
-                            }
-                            //修改排序为连续排序
-                            wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
-                        }
-
-
-                        for (WbsTreePrivate wbsTreePrivate : list) {
-                            wbsTreePrivateMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
-                        }
-                    }
-
-                    //单个批次一个事务,只会回滚当前批次数据
-                    Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(list);
-                    //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
-                    if (i == 0) {
-                        List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
-                        //这里可以保存到数据库指定错误日志表
-                        throw new ServiceException("添加失败:" + StringUtil.join(collect1, ","));
-                    } else {
-                        //排序调整-连续排序
-                        if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                            //获取节点下的当前表单
-                            List<WbsTreePrivate> resourceData = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                                    .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getSort)
-                                    .eq(WbsTreePrivate::getPId, pId)
-                                    .eq(WbsTreePrivate::getIsDeleted, 0)
-                                    .orderByAsc(WbsTreePrivate::getSort));
-                            if (CollectionUtil.isNotEmpty(resourceData)) {
-                                for (int j = 0; j < resourceData.size(); j++) {
-                                    resourceData.get(j).setSort(j + 1);
-                                }
-                                //修改排序为连续排序
-                                wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
-                            }
-                        }
-                        synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
-                                .set(WbsTreeSynchronousRecord::getNodeNumEnd, sum++)
-                                .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
-                                .eq(WbsTreeSynchronousRecord::getId, wbsTreeSynchronousRecord.getId()));
-                    }
-                }
-            }
         }
+        return addData;
     }
 
     /**