ソースを参照

同步-排序调整为顺序排序

LHB 2 ヶ月 前
コミット
6d8ea1be72

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java

@@ -149,4 +149,10 @@ public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
 
     void updateSortByPId(@Param("pId") Long pId,
                          @Param("sort") Integer sort);
+
+    /**
+     * 批量修改排序
+     * @param resourceData
+     */
+    void updateSortBatchByPKeyId(List<WbsTreeContract> resourceData);
 }

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -823,6 +823,13 @@
             sort = sort +1
         where p_id = #{pId} and sort >= #{sort}
     </update>
+    <update id="updateSortBatchByPKeyId">
+        <foreach item="item" collection="list" separator=";">
+            UPDATE m_wbs_tree_contract
+            <set>sort = #{sort}</set>
+            where p_key_id = #{item.pKeyId}
+        </foreach>
+    </update>
 
     <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">
         select *

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

@@ -146,4 +146,6 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
 
     void updateSortByPId(@Param("pId") Long pId,
                          @Param("sort") Integer sort);
+
+    void updateSortBatchByPKeyId(List<WbsTreePrivate> resourceData);
 }

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -934,6 +934,13 @@
         set sort = sort + 1
         where p_id = #{pId} and sort >= #{sort}
     </update>
+    <update id="updateSortBatchByPKeyId">
+        <foreach item="item" collection="list" separator=";">
+            UPDATE m_wbs_tree_private
+            <set>sort = #{sort}</set>
+            where p_key_id = #{item.pKeyId}
+        </foreach>
+    </update>
 
     <select id="linkNodeTreeBynodeId" resultType="java.lang.Long" >
         select p_key_id from m_wbs_tree_private where `type` = 1 and is_deleted = 0

+ 45 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -80,7 +81,27 @@ public class WbsSynchronousEViSaServiceImpl {
 
 
     @Transactional(rollbackFor = Exception.class)
-    public void updatePrivate(Long createUserId, List<WbsTreePrivate> list ) {
+    public void updatePrivate(String type, Long pId, Long createUserId, List<WbsTreePrivate> list) {
+        //排序调整
+        if (type.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));
+            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());
+            }
+        }
+
         for (WbsTreePrivate treePrivate : list) {
             treePrivate.setUpdateTime(DateTime.now());
             treePrivate.setUpdateUser(createUserId);
@@ -89,7 +110,27 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void updateContract(Long createUserId, List<WbsTreeContract> list) {
+    public void updateContract(String type, Long pId,Long createUserId, List<WbsTreeContract> list) {
+        //排序调整
+        if (type.contains("7")) {
+            list.sort(Comparator.comparingInt(WbsTreeContract::getSort));
+            //获取节点下的当前表单
+            List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                    .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
+                    .eq(WbsTreeContract::getPId, pId)
+                    .eq(WbsTreeContract::getIsDeleted, 0)
+                    .orderByAsc(WbsTreeContract::getSort));
+            for (int i = 0; i < resourceData.size(); i++) {
+                resourceData.get(i).setSort(i + 1);
+            }
+            //修改排序为连续排序
+            wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
+
+            for (WbsTreeContract wbsTreePrivate : list) {
+                wbsTreeContractMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
+            }
+        }
+
         for (WbsTreeContract treeContract : list) {
             treeContract.setUpdateTime(DateTime.now());
             treeContract.setUpdateUser(createUserId);
@@ -98,10 +139,10 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void saveFormula(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> list){
+    public void saveFormula(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> list) {
         Map<Long, List<WbsTreePrivate>> collect = list.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
         Set<Long> ids = collect.keySet();
-        if(CollectionUtil.isEmpty(ids)){
+        if (CollectionUtil.isEmpty(ids)) {
             return;
         }
         List<ElementFormulaMapping> elementFormulaMappings = elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery()

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

@@ -513,16 +513,9 @@ public class WbsSynchronousServiceImpl {
         for (Long pId : pIds) {
             nodeNumEnd++;
             List<WbsTreePrivate> list = collect1.get(pId);
-            //排序调整
-            if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                list.sort(Comparator.comparingInt(WbsTreePrivate::getSort));
-                for (WbsTreePrivate wbsTreePrivate : list) {
-                    wbsTreePrivateMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
-                }
-            }
 
             //更新最新节点
-            wbsSynchronousEViSaService.updatePrivate(wbsTreeSynchronousRecord.getCreateUserId(), list);
+            wbsSynchronousEViSaService.updatePrivate(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list);
 
             synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
                     .set(WbsTreeSynchronousRecord::getNodeNumEnd, nodeNumEnd)
@@ -798,15 +791,8 @@ public class WbsSynchronousServiceImpl {
         for (Long pId : pIds) {
             nodeNumEnd++;
             List<WbsTreeContract> list = collect1.get(pId);
-            //排序调整
-            if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                list.sort(Comparator.comparingInt(WbsTreeContract::getSort));
-                for (WbsTreeContract wbsTreeContract : list) {
-                    wbsTreePrivateMapper.updateSortByPId(pId, wbsTreeContract.getSort());
-                }
-            }
 
-            wbsSynchronousEViSaService.updateContract(wbsTreeSynchronousRecord.getCreateUserId(), list);
+            wbsSynchronousEViSaService.updateContract(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list);
             synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
                     .set(WbsTreeSynchronousRecord::getNodeNumEnd, nodeNumEnd)
                     .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
@@ -932,21 +918,32 @@ public class WbsSynchronousServiceImpl {
             List<List<Long>> partition = Lists.partition(pIds, 100);
 
             for (List<Long> data : partition) {
-                for (Long datum : data) {
-                    List<WbsTreePrivate> list = collect.get(datum);
-                    //修改排序
+                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));
+                        for (int i = 0; i < resourceData.size(); i++) {
+                            resourceData.get(i).setSort(i + 1);
+                        }
+                        //修改排序为连续排序
+                        wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
+
                         for (WbsTreePrivate wbsTreePrivate : list) {
-                            Integer sort = wbsTreePrivate.getSort();
-                            if (sort != null) {
-                                wbsTreePrivateMapper.updateSortByPId(datum, wbsTreePrivate.getSort());
-                            }
+                            wbsTreePrivateMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
                         }
                     }
+
                     boolean b = saveData.addAll(list);
                 }
 
+
                 //单个批次一个事务,只会回滚当前批次数据
                 Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(saveData);
                 //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
@@ -1047,16 +1044,25 @@ public class WbsSynchronousServiceImpl {
         //按最小节点批量新增
         List<List<Long>> partition = Lists.partition(pIds, 100);
         for (List<Long> data : partition) {
-            for (Long datum : data) {
-                List<WbsTreeContract> list = collect.get(datum);
-                //修改排序
+            for (Long pId : data) {
+                List<WbsTreeContract> list = collect.get(pId);
+                //排序调整
                 if (wbsTreeSynchronousRecord.getType().contains("7")) {
                     list.sort(Comparator.comparingInt(WbsTreeContract::getSort));
-                    for (WbsTreeContract wbsTreeContract : list) {
-                        Integer sort = wbsTreeContract.getSort();
-                        if (sort != null) {
-                            wbsTreeContractMapper.updateSortByPId(datum, wbsTreeContract.getSort());
-                        }
+                    //获取节点下的当前表单
+                    List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                            .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
+                            .eq(WbsTreeContract::getPId, pId)
+                            .eq(WbsTreeContract::getIsDeleted, 0)
+                            .orderByAsc(WbsTreeContract::getSort));
+                    for (int i = 0; i < resourceData.size(); i++) {
+                        resourceData.get(i).setSort(i + 1);
+                    }
+                    //修改排序为连续排序
+                    wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
+
+                    for (WbsTreeContract wbsTreePrivate : list) {
+                        wbsTreeContractMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
                     }
                 }
                 boolean b = saveData.addAll(list);