瀏覽代碼

项目wbs保存相关

liuyc 3 年之前
父節點
當前提交
c90eb2cd00
共有 15 個文件被更改,包括 310 次插入136 次删除
  1. 2 5
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeVO.java
  3. 11 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java
  4. 8 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  5. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  6. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  7. 30 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  8. 9 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  9. 42 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  10. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  11. 57 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  12. 132 90
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  13. 1 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/wrapper/WbsTreeWrapper.java
  14. 2 1
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
  15. 1 1
      doc/nacos/blade-dev.yaml

+ 2 - 5
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -126,11 +126,8 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 setFailCount(tenantId, username, count);
                 throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
             }
-            /**
-             *	用户存在但为封禁状态status=0,禁止登陆
-             *  @since 2022-06-08
-             *  @author liuyc
-             */
+
+            //用户存在但为封禁状态status=0,禁止登陆
             if (user.getStatus() == 0) {
                 throw new UserDeniedAuthorizationException(TokenUtil.USER_STATUS_BAN);
             }

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

@@ -67,4 +67,10 @@ public class WbsTreeVO extends WbsTree implements INode<WbsTreeVO> {
 	 * 表单类型
 	 */
 	private Integer tableType;
+
+
+	/**
+	 * wbs类型
+	 */
+	private Integer wbsType;
 }

+ 11 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java

@@ -211,16 +211,21 @@ public class ProjectInfoController extends BladeController {
     @PostMapping("/submitWbsTreeInProject")
     @ApiOperationSupport(order = 12)
     @ApiOperation(value = "保存或修改分配项目级wbs树", notes = "传入WbsTreeContractDTO")
-    public R submitWbsTreeInProject(@RequestBody WbsTreeContractDTO pawDTO) throws Exception {
+    public R submitWbsTreeInProject(@RequestBody WbsTreeContractDTO pawDTO){
         if (pawDTO.getWbsType() == 1) {
             boolean b = wbsTreeService.submitWbsTreeInProject1(pawDTO);
             if (b) {
-                return R.success("关联项目级树失败");
+                return R.success("关联质检项目级树失败");
             }
-            return R.fail("关联项目级树失败");
-        } else {
-            throw new Exception("试验功能暂未开放");
+            return R.fail(200,"关联质检项目级树失败");
+        } else if (pawDTO.getWbsType() == 2) {
+            boolean b = wbsTreeService.submitWbsTreeInProject1(pawDTO);
+            if (b) {
+                return R.success("关联试验项目级树失败");
+            }
+            return R.fail(200,"关联试验项目级树失败");
         }
+        return R.fail(200, "操作失败");
     }
 
     /**
@@ -233,4 +238,5 @@ public class ProjectInfoController extends BladeController {
         List<Map> result = wbsTreeService.findProjectAndContractList(userId);
         return R.data(result);
     }
+
 }

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

@@ -11,13 +11,16 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.WbsFormElement;
+import org.springblade.manager.entity.WbsInfo;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsTreeExcel;
+import org.springblade.manager.mapper.WbsInfoMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.vo.WbsFormElementVO;
@@ -51,6 +54,7 @@ public class WbsTreeController extends BladeController {
     private final IWbsTreeService wbsTreeService;
     private final IWbsFormElementService wbsFormElementService;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
+    private final WbsInfoMapper wbsInfoMapper;
 
     /**
      * 详情
@@ -62,7 +66,10 @@ public class WbsTreeController extends BladeController {
     public R<WbsTreeVO> detail(WbsTree wbsTree) {
         WbsTree detail = wbsTreeService.getOne(Condition.getQueryWrapper(wbsTree));
         if (detail != null) {
-            return R.data(WbsTreeWrapper.build().entityVO(detail));
+            WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, detail.getWbsId()));
+            WbsTreeVO wbsTreeVO = Objects.requireNonNull(BeanUtil.copy(detail, WbsTreeVO.class));
+            wbsTreeVO.setWbsType(wbsInfo.getWbsType());
+            return R.data(wbsTreeVO);
         }
         return R.fail(200, "未查询到信息");
     }

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

@@ -155,6 +155,7 @@ public class WbsTreePrivateController extends BladeController {
 
     /**
      * wbs私有库新增节点接口 同步合同段wbs库
+     * @Description  根据业务需求-暂时只修改,不新增
      */
     @PostMapping("/submit")
     @ApiOperationSupport(order = 2)

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

@@ -94,4 +94,7 @@ public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
 
     List<WbsTreeContract> selectContractList(String wbsId, String projectId,@Param("ids") List<Long> ids);
 
+    void updateBatchByIds(@Param("wbsTreeListNode") WbsTree wbsTreeListNode,@Param("id") Long id);
+
+    void updateBatchByIds2(@Param("wbsTreeListNode") WbsTreePrivate wbsTreeListNode,@Param("id")  Long id);
 }

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

@@ -570,6 +570,36 @@
         </where>
     </update>
 
+    <update id="updateBatchByIds">
+        UPDATE m_wbs_tree_contract
+        SET dept_name   = #{wbsTreeListNode.deptName},
+            full_name   =#{wbsTreeListNode.deptName},
+            dept_category  = #{wbsTreeListNode.deptCategory},
+            major_data_type = #{wbsTreeListNode.majorDataType},
+            unique_code = #{wbsTreeListNode.uniqueCode},
+            partition_code = #{wbsTreeListNode.partitionCode}
+        WHERE id = #{wbsTreeListNode.id}
+          AND contract_id = #{id}
+          AND type = 1
+          AND status = 1
+          AND is_deleted = 0
+    </update>
+
+    <update id="updateBatchByIds2">
+        UPDATE m_wbs_tree_contract
+        SET dept_name   = #{wbsTreeListNode.deptName},
+            full_name   =#{wbsTreeListNode.deptName},
+            dept_category  = #{wbsTreeListNode.deptCategory},
+            major_data_type = #{wbsTreeListNode.majorDataType},
+            unique_code = #{wbsTreeListNode.uniqueCode},
+            partition_code = #{wbsTreeListNode.partitionCode}
+        WHERE id = #{wbsTreeListNode.id}
+          AND contract_id = #{id}
+          AND type = 1
+          AND status = 1
+          AND is_deleted = 0
+    </update>
+
     <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">
         select * from m_wbs_tree_contract where is_deleted = 0 and contract_id = #{contractId} and (dept_name like concat('%',#{queryValue},'%') or full_name like concat('%',#{queryValue},'%')) and `type` = '1'
     </select>

+ 9 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -17,7 +17,8 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
     List<WbsTreePrivate> selectAll(Integer wbsType);
 
     List<WbsTreePrivateVO> tree(@Param("wbsId") String wbsId,
-                                @Param("projectId") String projectId);
+                                @Param("projectId") String projectId,
+                                @Param("wbsType") Integer wbsType);
 
 
     List<WbsTreePrivate> selectByCondition(@Param("id") String id,
@@ -37,9 +38,9 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
                                 @Param("wbsId") String wbsId);
 
     Integer insertCombination1(@Param("snowId") Long snowId,
-                                       @Param("wbsTree") WbsTree wbsTree,
-                                       @Param("wbsType") Integer wbsType,
-                                       @Param("projectId") String projectId);
+                               @Param("wbsTree") WbsTree wbsTree,
+                               @Param("wbsType") Integer wbsType,
+                               @Param("projectId") String projectId);
 
     Integer insertCombination2(@Param("snowId") Long snowId,
                                @Param("wbsTree") WbsTreePrivate wbsTree,
@@ -80,4 +81,8 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
     boolean updateBatchByPid(@Param("wbsTreePrivates") WbsTreePrivateDTO3 wbsTreePrivates);
 
     List<WbsTreePrivate> selectByIds(@Param("projectId") String projectId, @Param("ids") List<String> ids);
+
+    void updateBatchByIds(@Param("wbsTreeListNode") WbsTree wbsTreeListNode, @Param("projectId") String projectId);
+
+    void updateBatchByIds2(@Param("wbsTreeListNode") WbsTreePrivate wbsTreeListNode,@Param("projectId") String projectId,@Param("wbsId") String wbsId);
 }

+ 42 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -199,6 +199,37 @@
         WHERE p_key_id = #{wbsTreePrivates.pKeyId}
     </update>
 
+    <update id="updateBatchByIds">
+        UPDATE m_wbs_tree_private
+        SET dept_name   = #{wbsTreeListNode.deptName},
+            full_name   =#{wbsTreeListNode.deptName},
+            dept_category  = #{wbsTreeListNode.deptCategory},
+            major_data_type = #{wbsTreeListNode.majorDataType},
+            unique_code = #{wbsTreeListNode.uniqueCode},
+            partition_code = #{wbsTreeListNode.partitionCode}
+        WHERE id = #{wbsTreeListNode.id}
+        AND project_id = #{projectId}
+        AND type = 1
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+
+    <update id="updateBatchByIds2">
+        UPDATE m_wbs_tree_private
+        SET dept_name   = #{wbsTreeListNode.deptName},
+            full_name   =#{wbsTreeListNode.deptName},
+            dept_category  = #{wbsTreeListNode.deptCategory},
+            major_data_type = #{wbsTreeListNode.majorDataType},
+            unique_code = #{wbsTreeListNode.uniqueCode},
+            partition_code = #{wbsTreeListNode.partitionCode}
+        WHERE id = #{wbsTreeListNode.id}
+          AND project_id = #{projectId}
+          AND wbs_id = #{wbsId}
+          AND type = 1
+          AND status = 1
+          AND is_deleted = 0
+    </update>
+
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
         dept.p_key_id as "primaryKeyId",
@@ -260,7 +291,7 @@
         select p_key_id as "primaryKeyId",
         id, parent_id, dept_name as title,type as "type", id as "value", id as "key" ,
         dept_category AS "deptCategory", is_exist_form AS "isExistForm",
-        (select wbs_type from m_wbs_info where id = #{wbsId}) as "wbsType"
+        wbs_type as "wbsType"
         from m_wbs_tree_private
         where
         is_deleted = 0
@@ -272,6 +303,9 @@
         <if test="wbsId!=null and wbsId!=''">
             and wbs_id = #{wbsId}
         </if>
+        <if test="wbsType != null and wbsType != ''">
+            and wbs_type = #{wbsType}
+        </if>
         ORDER BY sort
     </select>
 
@@ -374,15 +408,15 @@
           AND project_id = #{projectId}
     </select>
     <select id="selectByNodeTable" resultType="org.springblade.manager.vo.WbsNodeTableVO">
-        SELECT wt.p_key_id    AS "pKeyId",
-               wt.id          AS id,
-               wt.dept_name   AS tableName,
-               wt.table_type  AS tableType,
-               wt.`status`    AS isCreateTable,
-               wt.table_owner as tableOwner,
+        SELECT wt.p_key_id                                                  AS "pKeyId",
+               wt.id                                                        AS id,
+               wt.dept_name                                                 AS tableName,
+               wt.table_type                                                AS tableType,
+               wt.`status`                                                  AS isCreateTable,
+               wt.table_owner                                               as tableOwner,
                wt.is_link_table,
                wt.init_table_name,
-               wt.excel_id    as excelId,
+               wt.excel_id                                                  as excelId,
                wt.sort,
                wt.status,
                (SELECT count(1) FROM m_wbs_form_element WHERE f_id = wt.id) AS "elementTotal"

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

@@ -3,6 +3,7 @@ package org.springblade.manager.service;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
+import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreePrivateVO;
@@ -34,4 +35,8 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     boolean updateBatchByPid(List<WbsTreePrivateDTO3> wbsTreePrivates);
 
     boolean updateStatus(String pKeyId);
+
+    boolean updateBatchByIds(List<WbsTree> wbsTreeListNodes, String projectId);
+
+    boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivateNodes, String projectId,String wbsId);
 }

+ 57 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -12,10 +12,7 @@ import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
-import org.springblade.manager.entity.ContractInfo;
-import org.springblade.manager.entity.WbsInfo;
-import org.springblade.manager.entity.WbsTreeContract;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.entity.*;
 
 import org.springblade.manager.mapper.ContractInfoMapper;
 import org.springblade.manager.mapper.WbsInfoMapper;
@@ -43,12 +40,18 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
-        return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId));
+        //获取wbsType
+        WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
+        if (wbsInfo != null) {
+            return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, wbsInfo.getWbsType()));
+        }
+        return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, null));
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submit(WbsTreePrivate wbsTreePrivate) {
+        //修改
         if (wbsTreePrivate.getPKeyId() != null) {
             Long pKeyId = wbsTreePrivate.getPKeyId();
             int row = baseMapper.updateByPKeyId(pKeyId, wbsTreePrivate);
@@ -59,12 +62,16 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 return true;
             }
 
+            //新增
         } else {
             wbsTreePrivate.setIsDeleted(0);
             wbsTreePrivate.setStatus(1);
             Long pKeyId = SnowFlakeUtil.getId();
             wbsTreePrivate.setPKeyId(pKeyId);
-            wbsTreePrivate.setWbsType(String.valueOf(1)); //默认质检
+            //获取wbsType
+            WbsInfo wbsInfo = wbsInfoMapper.selectById(wbsTreePrivate.getWbsId());
+            wbsTreePrivate.setWbsType(String.valueOf(wbsInfo.getWbsType())); //质检=1 试验=2 计量=3 日志=4
+
             WbsTreePrivate parent = baseMapper.getByCondition(wbsTreePrivate.getParentId(), wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId());
             if (parent != null) {
                 String ancestors = parent.getAncestors() + "," + wbsTreePrivate.getParentId();
@@ -101,14 +108,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 QueryWrapper<ContractInfo> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("p_id", wbsTreePrivate.getProjectId());
                 List<ContractInfo> contractInfos = contractInfoMapper.selectList(queryWrapper);
-                WbsInfo wbsInfo = wbsInfoMapper.selectById(wbsTreePrivate.getWbsId());
-                Integer wbsType = wbsInfo.getWbsType();
-                for (ContractInfo contractInfo : contractInfos) {
-                    //同步新增合同段wbs库
-                    Long pKeyId1 = SnowFlakeUtil.getId();
-                    wbsTreeContractMapper.insertByCondition(wbsTreePrivate, contractInfo.getId(), pKeyId1, wbsType);
+                if (contractInfos.size() > 0) {
+                    for (ContractInfo contractInfo : contractInfos) {
+                        //同步新增合同段wbs库
+                        Long pKeyId1 = SnowFlakeUtil.getId();
+                        wbsTreeContractMapper.insertByCondition(wbsTreePrivate, contractInfo.getId(), pKeyId1, Integer.valueOf(wbsTreePrivate.getWbsType()));
+                    }
+                    return true;
                 }
-                return true;
             }
         }
         return false;
@@ -255,5 +262,42 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return false;
     }
 
+    @Override
+    public boolean updateBatchByIds(List<WbsTree> wbsTreeListNodes, String projectId) {
+        //获取当前项目下所有合同段信息
+        List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
+
+        for (WbsTree wbsTreeListNode : wbsTreeListNodes) {
+            //修改项目wbs信息
+            baseMapper.updateBatchByIds(wbsTreeListNode, projectId);
+
+            for (ContractInfo contractInfo : contractInfos) {
+                //修改合同段wbs信息
+                wbsTreeContractMapper.updateBatchByIds(wbsTreeListNode, contractInfo.getId());
+            }
+        }
+
+        return true;
+    }
+
+
+    @Override
+    public boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivateNodes, String projectId, String wbsId) {
+        //获取当前项目下所有合同段信息
+        List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
+
+        for (WbsTreePrivate wbsTreeListNode : wbsTreePrivateNodes) {
+            //修改项目wbs信息
+            baseMapper.updateBatchByIds2(wbsTreeListNode, projectId, wbsId);
+
+            for (ContractInfo contractInfo : contractInfos) {
+                //修改合同段wbs信息
+                wbsTreeContractMapper.updateBatchByIds2(wbsTreeListNode, contractInfo.getId());
+            }
+        }
+
+        return true;
+    }
+
 
 }

+ 132 - 90
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -710,18 +710,25 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 //获取公有wbs树新增的元素表
                 List<WbsTree> allNodeList = findAllNodeList(wbsTreeIds);
                 List<WbsTree> wbsTreeListAll = new ArrayList<>();
-
                 //获取公有wbs树所有的元素表
                 if (allNodeList != null) {
                     List<WbsTree> wbsTreeList = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
-                            .eq(WbsTree::getWbsId, pawDTO.getWbsId())
-                            .eq(WbsTree::getType, 2)
+                                    .eq(WbsTree::getWbsId, pawDTO.getWbsId())
+                                    .eq(WbsTree::getStatus, 1)
+                            //.eq(WbsTree::getType, 2)
                     );
                     wbsTreeListAll.addAll(wbsTreeList);
                 }
 
+                //所有表单信息
+                List<WbsTree> wbsTreeListTables = wbsTreeListAll.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
+
+                //所有节点信息
+                List<WbsTree> wbsTreeListNodes = wbsTreeListAll.stream().filter(f -> f.getType() == 1).collect(Collectors.toList());
+
+
                 //公有元素表的id
-                List<Long> collect1 = wbsTreeListAll.stream().map(WbsTree::getId).collect(Collectors.toList());
+                List<Long> collect1 = wbsTreeListTables.stream().map(WbsTree::getId).collect(Collectors.toList());
                 List<String> collect2 = collect1.stream().map(String::valueOf).collect(Collectors.toList());
 
                 //获取项目私有wbs树下当前所有的元素表
@@ -737,9 +744,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                 List<String> diffRent1 = WbsTreeContractServiceImpl.getDiffrent(collect2, collect4);
 
+                //同步公有wbs节点信息,编辑修改后的节点信息到项目级wbs、合同段wbs
+                wbsTreePrivateService.updateBatchByIds(wbsTreeListNodes, pawDTO.getProjectId());
+
                 if (diffRent1.size() == 0) {
                     //当wbsTreeIds == "" 时 1.在第一次新增未选择wbs树时  2.同步新增的元素表时
-                    throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
+                    return true;
+                    //throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
 
                 } else {
                     if (collect2.size() > collect4.size()) {
@@ -748,58 +759,69 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //公有同步元素表
                         diffRent1.stream().forEach(tableId -> {
                             WbsTree wbsTree = wbsTreeMapper.selectById(tableId);
-                            Long snowId1 = SnowFlakeUtil.getId();
-                            wbsTreePrivateMapper.insertCombination1(snowId1, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
-
-                            //找到当前新增成功的元素表
-                            WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, snowId1));
-
-                            //同步到该项目下的所有合同段
-                            for (ContractInfo contractInfoId : contractInfoIds) {
-                                WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
-                                wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
-
-                                //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
-                                WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                                        .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
-                                        .eq(WbsTreeContract::getContractId, contractInfoId.getId())
-                                        .eq(WbsTreeContract::getType, 1)
-                                        .eq(WbsTreeContract::getId, wbsTreePrivate.getParentId())
-                                );
-                                if (wbsTreeContract1 != null) {
-                                    wbsTreeContractMapper.insert(wbsTreeContract);
-
-                                    //新增同步到对应的复制或新增的父级节点下
-                                    //获取当前新增表单的上级父节点
-                                    WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                                            .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
+                            //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
+                            WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                                    .eq(WbsTreePrivate::getId, wbsTree.getParentId())
+                                    .eq(WbsTreePrivate::getWbsId, wbsTree.getWbsId())
+                                    .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                                    .eq(WbsTreePrivate::getStatus, 1)
+                            );
+
+                            if (wbsTreePrivate1 != null) {
+                                //同步元素表
+                                Long snowId1 = SnowFlakeUtil.getId();
+                                wbsTreePrivateMapper.insertCombination1(snowId1, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
+
+                                //2.同步到该项目下所有合同段wbs树
+                                //找到当前新增成功的元素表
+                                WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, snowId1));
+
+                                for (ContractInfo contractInfoId : contractInfoIds) {
+                                    WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
+                                    wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
+
+                                    //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
+                                    WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                                            .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
                                             .eq(WbsTreeContract::getContractId, contractInfoId.getId())
-                                            .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
-                                            .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
                                             .eq(WbsTreeContract::getType, 1)
+                                            .eq(WbsTreeContract::getId, wbsTreePrivate.getParentId())
                                     );
-                                    if (wbsTreeContracts1 != null) {
-                                        //获取上级父级节点同级别的复制或新增节点
-                                        List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
-                                                .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
+                                    if (wbsTreeContract1 != null) {
+                                        wbsTreeContractMapper.insert(wbsTreeContract);
+
+                                        //新增同步到对应的复制或新增的父级节点下
+                                        //获取当前新增表单的上级父节点
+                                        WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                                                .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
                                                 .eq(WbsTreeContract::getContractId, contractInfoId.getId())
                                                 .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
                                                 .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
                                                 .eq(WbsTreeContract::getType, 1)
                                         );
-                                        if (wbsTreeContracts2.size() > 0) {
-                                            //将表单同步到复制或新增的节点下
-                                            for (WbsTreeContract treeContract : wbsTreeContracts2) {
-                                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
-                                                wbsTreeContract.setParentId(treeContract.getId());
-                                                wbsTreeContractMapper.insert(wbsTreeContract);
+                                        if (wbsTreeContracts1 != null) {
+                                            //获取上级父级节点同级别的复制或新增节点
+                                            List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                                                    .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
+                                                    .eq(WbsTreeContract::getContractId, contractInfoId.getId())
+                                                    .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
+                                                    .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
+                                                    .eq(WbsTreeContract::getType, 1)
+                                            );
+                                            if (wbsTreeContracts2.size() > 0) {
+                                                //将表单同步到复制或新增的节点下
+                                                for (WbsTreeContract treeContract : wbsTreeContracts2) {
+                                                    wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+                                                    wbsTreeContract.setParentId(treeContract.getId());
+                                                    wbsTreeContractMapper.insert(wbsTreeContract);
+                                                }
                                             }
                                         }
                                     }
-
                                 }
                             }
                         });
+
                         return true;
                     }
                 }
@@ -810,15 +832,22 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                         .eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
 
-                //获取私有引用项目的wbs树的全部元素表
+                //获取私有引用项目的wbs树的全部元素表+节点信息
                 List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
-                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
-                        .eq(WbsTreePrivate::getType, 2)
+                                .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                                .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                                .eq(WbsTreePrivate::getStatus, 1)
+                        //.eq(WbsTreePrivate::getType, 2)
                 );
 
+                //私有引用项目的表单信息
+                List<WbsTreePrivate> WbsTreePrivateTables = wbsTreePrivates.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
+
+                //私有引用项目的节点信息
+                List<WbsTreePrivate> WbsTreePrivateNodes = wbsTreePrivates.stream().filter(f -> f.getType() == 1).collect(Collectors.toList());
+
                 //当前新增表单的id
-                List<Long> collect1 = wbsTreePrivates.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+                List<Long> collect1 = WbsTreePrivateTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
                 List<String> collect2 = collect1.stream().map(String::valueOf).collect(Collectors.toList());
 
                 //获取当前项目私有wbs树下当前所有的元素表
@@ -834,8 +863,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                 List<String> diffRent1 = WbsTreeContractServiceImpl.getDiffrent(collect2, collect4);
 
+                //同步私有wbs节点信息,编辑修改后的节点信息到项目级wbs、合同段wbs
+                wbsTreePrivateService.updateBatchByIds2(WbsTreePrivateNodes, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
+
                 if (diffRent1.size() == 0) {
-                    throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
+                    return true;
+                    //throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
 
                 } else {
                     if (collect2.size() > collect4.size()) {
@@ -855,51 +888,63 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         });
 
                         lists.stream().forEach(list -> {
-                            list.setPKeyId(SnowFlakeUtil.getId());
-                            list.setWbsId(pawDTO.getPrimaryKeyId());
-                            list.setProjectId(pawDTO.getProjectId());
-
-                            //同步到该项目下的所有合同段
-                            for (ContractInfo contractInfoId : contractInfoIds) {
-                                WbsTreeContract wbsTreeContract = getWbsTreeContract(list, pawDTO);
-                                wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
-                                wbsTreeContract.setWbsId(pawDTO.getPrimaryKeyId());
-
-                                //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
-                                WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                                        .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
-                                        .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
-                                        .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
-                                        .eq(WbsTreeContract::getType, 1)
-                                        .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
-                                );
-                                if (wbsTreeContract1 != null) {
-                                    wbsTreeContractMapper.insert(wbsTreeContract);
-
-                                    //新增同步到对应的复制或新增的父级节点下
-                                    //获取当前新增表单的上级父节点
-                                    WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                                            .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
-                                            .eq(WbsTreeContract::getContractId, contractInfoId.getId())
-                                            .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
-                                            .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
+                            //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
+                            WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                                    .eq(WbsTreePrivate::getId, list.getParentId())
+                                    .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
+                                    .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                            );
+
+                            if (wbsTreePrivate1 != null) {
+                                list.setPKeyId(SnowFlakeUtil.getId());
+                                list.setWbsId(pawDTO.getPrimaryKeyId());
+                                list.setProjectId(pawDTO.getProjectId());
+
+                                //同步元素表
+                                wbsTreePrivateService.save(list);
+
+                                //同步到该项目下的所有合同段
+                                for (ContractInfo contractInfoId : contractInfoIds) {
+                                    WbsTreeContract wbsTreeContract = getWbsTreeContract(list, pawDTO);
+                                    wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
+                                    wbsTreeContract.setWbsId(pawDTO.getPrimaryKeyId());
+
+                                    //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
+                                    WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                                            .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
+                                            .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
+                                            .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
                                             .eq(WbsTreeContract::getType, 1)
+                                            .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
                                     );
-                                    if (wbsTreeContracts1 != null) {
-                                        //获取上级父级节点同级别的复制或新增节点
-                                        List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
-                                                .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
+                                    if (wbsTreeContract1 != null) {
+                                        wbsTreeContractMapper.insert(wbsTreeContract);
+
+                                        //新增同步到对应的复制或新增的父级节点下
+                                        //获取当前新增表单的上级父节点
+                                        WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                                                .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
                                                 .eq(WbsTreeContract::getContractId, contractInfoId.getId())
                                                 .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
                                                 .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
                                                 .eq(WbsTreeContract::getType, 1)
                                         );
-                                        if (wbsTreeContracts2.size() > 0) {
-                                            //将表单同步到复制或新增的节点下
-                                            for (WbsTreeContract treeContract : wbsTreeContracts2) {
-                                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
-                                                wbsTreeContract.setParentId(treeContract.getId());
-                                                wbsTreeContractMapper.insert(wbsTreeContract);
+                                        if (wbsTreeContracts1 != null) {
+                                            //获取上级父级节点同级别的复制或新增节点
+                                            List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                                                    .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
+                                                    .eq(WbsTreeContract::getContractId, contractInfoId.getId())
+                                                    .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
+                                                    .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
+                                                    .eq(WbsTreeContract::getType, 1)
+                                            );
+                                            if (wbsTreeContracts2.size() > 0) {
+                                                //将表单同步到复制或新增的节点下
+                                                for (WbsTreeContract treeContract : wbsTreeContracts2) {
+                                                    wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+                                                    wbsTreeContract.setParentId(treeContract.getId());
+                                                    wbsTreeContractMapper.insert(wbsTreeContract);
+                                                }
                                             }
                                         }
                                     }
@@ -907,7 +952,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             }
                         });
 
-                        wbsTreePrivateService.saveBatch(lists, 10000);
                         return true;
                     }
                 }
@@ -959,11 +1003,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             throw new ServiceException(StringUtil.format("当前项目wbs树的节点已被 {} 引用中,删除失败", join));
                         }
                     }
-
                     baseMapper.deleteBatch(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
                     baseMapper.deleteBatch2(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
                 }
-
             }
 
             //2.新增

+ 1 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/wrapper/WbsTreeWrapper.java

@@ -15,14 +15,7 @@ public class WbsTreeWrapper extends BaseEntityWrapper<WbsTree, WbsTreeVO>  {
 
 	@Override
 	public WbsTreeVO entityVO(WbsTree wbsTree) {
-		WbsTreeVO wbsTreeVO = Objects.requireNonNull(BeanUtil.copy(wbsTree, WbsTreeVO.class));
-
-		//User createUser = UserCache.getUser(wbsTree.getCreateUser());
-		//User updateUser = UserCache.getUser(wbsTree.getUpdateUser());
-		//wbsTreeVO.setCreateUserName(createUser.getName());
-		//wbsTreeVO.setUpdateUserName(updateUser.getName());
-
-		return wbsTreeVO;
+		return Objects.requireNonNull(BeanUtil.copy(wbsTree, WbsTreeVO.class));
 	}
 
 }

+ 2 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -438,7 +438,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             // 覆盖数据
             if (isCovered) {
                 // 查询用户是否存在
-                User oldUser = UserCache.getUser(AuthUtil.getTenantId(), userExcel.getAccount());
+                //User oldUser = UserCache.getUser(AuthUtil.getTenantId(), userExcel.getAccount());
+                User oldUser = baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getAccount, userExcel.getAccount()).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
                 if (oldUser != null && oldUser.getId() != null) {
                     user.setId(oldUser.getId());
                     this.updateUser(user);

+ 1 - 1
doc/nacos/blade-dev.yaml

@@ -42,7 +42,7 @@ blade:
   datasource:
     dev:
       # MySql
-      url: jdbc:mysql://192.168.3.20:3306/bladex?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
+      url: jdbc:mysql://192.168.0.130:3306/bladex?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
       username: bladex
       password: 68LzdwJ6p7RAGijK
       # PostgreSQL