소스 검색

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 년 전
부모
커밋
83d016e97c
18개의 변경된 파일502개의 추가작업 그리고 265개의 파일을 삭제
  1. 18 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ArchiveTreeContractAutoRuleMapDTO.java
  2. 9 4
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java
  3. 26 10
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractAutoRuleVO.java
  4. 17 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsParamVO.java
  5. 18 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  6. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java
  7. 58 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  8. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  9. 5 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  10. 13 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  11. 98 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  12. 4 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsParamMapper.java
  13. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  14. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  15. 105 112
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  16. 28 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java
  17. 73 77
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  18. 22 36
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 18 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ArchiveTreeContractAutoRuleMapDTO.java

@@ -0,0 +1,18 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+@Data
+public class ArchiveTreeContractAutoRuleMapDTO {
+
+    private Integer archiveAutoType;//规则类型
+
+    private Long nodeId;//节点id
+
+    private Long archiveAutoNodeId;//规则关联节点/分类
+
+    private Long archiveAutoGroupId;
+
+    private String selectNodeIds; //分类并卷设置选择的节点(鼠标点着的节点,不要父节点和子节点)
+
+}

+ 9 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java

@@ -131,18 +131,23 @@ public class ArchiveTreeContract extends BaseEntity {
 	private Long extId;
 
 	/**
-	* 自动立卷类型
+	* 自动立卷类型 1最高 2分类并卷 3单独组卷   说明:1规则下可以有2或3;2和3两种规则互斥,2下不能有3,3下不能有2;
 	*/
 	private Integer archiveAutoType;
 	/**
-	* 自动立卷关联Id
+	* 默认组卷设置的最高并卷节点Id  当archiveAutoType不为2,和3时用来限制范围
 	*/
 	private Long archiveAutoNodeId;
 
 	/**
-	 * 是否自动立卷规则选择设置的节点 选中的节点设为1 方便页面显示列表
+	 * 分类并卷的分类ID,当archiveAutoType=2时,用来确定同一类型。新增时随机生成,一同提交设置的节点都是同一类。 编辑时 采用已有的
 	 */
-	private Integer archiveAutoSelect;
+	private Long archiveAutoGroupId;
+
+	/**
+	 * 设置分类并卷选择的节点设为1,其下范围内节点设为0
+	 */
+	private Integer archiveAutoGroupSelect;
 
 	/**
 	 * 来源id,用于后续同步更新

+ 26 - 10
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractAutoRuleVO.java

@@ -1,27 +1,43 @@
 package org.springblade.manager.vo;
 
 import lombok.Data;
-import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
-public class ArchiveTreeContractAutoRuleVO implements Cloneable {
+public class ArchiveTreeContractAutoRuleVO implements INode<ArchiveTreeContractAutoRuleVO> {
 
     private Long nodeId;//节点id
 
+    private Long parentId; //父节点ID
+
+    private String nodeName; //节点名
+
     private String allName; //全路经名
 
-    private Integer selectVo; //页面勾选标志 0未勾选  1勾选
+    private Integer archiveAutoType; //规则类型
+    private Long archiveAutoNodeId;
+
+    private Long archiveAutoGroupId;
+
+    private Integer archiveAutoGroupSelect;
 
+    private List<ArchiveTreeContractAutoRuleVO> children=new ArrayList<>();
 
     @Override
-    public ArchiveTreeContractAutoRuleVO clone() {
-        try {
-            ArchiveTreeContractAutoRuleVO vo = (ArchiveTreeContractAutoRuleVO) super.clone();
-            return vo;
-        } catch (CloneNotSupportedException e) {
-            throw new AssertionError();
-        }
+    public Long getId() {
+        return nodeId;
     }
 
+    @Override
+    public Long getParentId() {
+        return parentId;
+    }
 
+    @Override
+    public List<ArchiveTreeContractAutoRuleVO> getChildren() {
+        return children;
+    }
 }

+ 17 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsParamVO.java

@@ -0,0 +1,17 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.WbsParam;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class WbsParamVO extends WbsParam {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 数据源节点参数的id
+     */
+    private  Long oldId;
+
+}

+ 18 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -535,6 +535,23 @@ public class InformationWriteQueryController extends BladeController {
         return R.data(300, false, "废除失败,未找到业务数据");
     }
 
+    /**
+     * 单个废除-首件
+     */
+    @PostMapping("/abolishOne-sj")
+    @ApiOperationSupport(order = 24)
+    @ApiOperation(value = "单个废除-首件")
+    public R<Boolean> abolishOneSJ(@RequestParam String primaryKeyId,@RequestParam String id) {
+        //查询填报状态
+        InformationQuery businessData = this.informationQueryService.getOne(Wrappers.<InformationQuery>lambdaQuery()
+                .eq(InformationQuery::getId, id));
+        if (businessData != null) {
+            //使用批量废除接口
+            return this.batchAbolish(businessData.getId().toString(), primaryKeyId);
+        }
+        return R.data(300, false, "废除失败,未找到业务数据");
+    }
+
     /**
      * 查询节点状态
      */
@@ -1880,7 +1897,7 @@ public class InformationWriteQueryController extends BladeController {
         if (saveList.size() > 0) {
             //保存施工日志
             if (saveLedger.size() > 0) {
-                this.constructionLedgerService.saveBatch(saveLedger);
+                this.constructionLedgerService.saveBatch(saveLedger,1000);
             }
 
             try {

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java

@@ -82,6 +82,10 @@ public interface InformationQueryMapper extends BaseMapper<InformationQuery> {
 	 * 自定义分页
 	 */
 	List<InformationQuery> selectInformationQueryPage(@Param("current") Long current, @Param("size") Long size, @Param("query") InformationQueryVO informationQuery);
+	/**
+	 * 自定义分页,因为information的批次字段数据不全
+	 */
+	List<InformationQuery> selectInformationQueryPageTwo(@Param("current") Long current, @Param("size") Long size, @Param("query") InformationQueryVO informationQuery);
 
 	List<WbsTreeContract> getContractNodeByPrimaryKeyIds(String ids);
 

+ 58 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -441,6 +441,64 @@
         limit #{current}, #{size}
     </select>
 
+    <select id="selectInformationQueryPageTwo" resultMap="informationQueryResultMap">
+        select
+        query.wbs_id,
+        query.id,
+        query.name,
+        query.number,
+        query.create_time,
+        query.status,
+        query.report_number,
+        query.file_user_id_and_name,
+        query.pdf_url,
+        query.e_visa_pdf_url,
+        query.sj_record_ids
+        from
+        (
+        select
+        iq.sort,
+        iq.id,
+        iq.name,
+        iq.number,
+        iq.create_time,
+        iq.status,
+        (case iq.STATUS when 0 THEN null else t.batch end) as report_number,
+        iq.file_user_id_and_name,
+        date_format(iq.create_time,'%Y-%m-%d') as createTimes,
+        iq.pdf_url,
+        iq.e_visa_pdf_url,
+        iq.wbs_id,
+        iq.sj_record_ids
+        from u_information_query iq left join (select  * from u_task k where k.status!=3 and k.contract_id = #{query.contractId}) t on iq.id = t.form_data_id  and t.is_deleted = 0
+        where
+        iq.is_deleted = 0
+        and iq.classify = #{query.classify}
+        and iq.contract_id = #{query.contractId}
+        <if test="query.taskStatus != null and query.taskStatus != ''"> and iq.status = #{query.taskStatus} </if>
+        <if test="query.sourceType != null and query.sourceType != ''"> and iq.source_type = #{query.sourceType} </if>
+        <if test="query.reportNumber != null and query.reportNumber != ''"> and t.batch = #{query.reportNumber} </if>
+        <if test="query.fileUserIdAndName != null and query.fileUserIdAndName != ''"> and iq.file_user_id_and_name like concat('%',#{query.fileUserIdAndName},'%') </if>
+        <if test="query.queryValue != null and query.queryValue != ''"> and (iq.name like concat('%',#{query.queryValue},'%') OR iq.number like concat('%',#{query.queryValue},'%')) </if>
+        <if test="query.firstTitle != null and query.firstTitle != ''"> and iq.type = 3 </if>
+        <if test="query.firstTitle == null or query.firstTitle == ''"> and iq.type != 3 </if>
+        <if test="query.wbsIds != null">
+            and iq.wbs_id in
+            <foreach collection="query.wbsIds" item="wbsIdc" open="(" separator="," close=")">
+                #{wbsIdc}
+            </foreach>
+        </if>
+        ) AS query
+        where
+        1 = 1
+        <if test="query.reportNumber != null and query.reportNumber != ''"> and report_number = #{query.reportNumber} </if>
+        <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+            and query.createTimes between #{query.startTime} and #{query.endTime}
+        </if>
+        order by create_time desc
+        limit #{current}, #{size}
+    </select>
+
     <select id="getContractNodeByPrimaryKeyIds" resultType="org.springblade.manager.entity.WbsTreeContract">
         select * from m_wbs_tree_contract where p_key_id in (${ids}) and is_deleted = 0 order by ancestors,sort
     </select>

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -463,7 +463,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         Integer count = this.baseMapper.countInformationQuery(vo);
 
         //获取数据
-        List<InformationQuery> result = this.baseMapper.selectInformationQueryPage(current, page.getSize(), vo);
+        List<InformationQuery> result = this.baseMapper.selectInformationQueryPageTwo(current, page.getSize(), vo);
 
         //转换VO
         if (result != null && result.size() != 0) {

+ 5 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -29,6 +29,7 @@ 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.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
@@ -217,9 +218,9 @@ public class ArchiveTreeContractController extends BladeController {
 	 */
 	@PostMapping("/getArchiveAutoRule")
 	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "修改立卷规则设置", notes = "传入节点id")
+	@ApiOperation(value = "查看立卷规则设置", notes = "传入节点id")
 	public R getArchiveAutoRule(@ApiParam(value = "主键", required = true) @RequestParam Long id) {
-		Map<Integer, List<ArchiveTreeContractAutoRuleVO>> ruleMap=archiveTreeContractService.getArchiveAutoRule(id);
+		Map<String, Object> ruleMap=archiveTreeContractService.getArchiveAutoRule(id);
 		return R.data(ruleMap);
 	}
 
@@ -227,11 +228,8 @@ public class ArchiveTreeContractController extends BladeController {
 	 * 修改立卷规则设置
 	 */
 	@PostMapping("/updateArchiveAutoRule")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "修改立卷规则设置", notes = "传入修改的archiveAutoType规则类型,nodeIds逗号拼接选择节点id")
-	public R updateArchiveAutoRule(@ApiParam(value = "立卷规则", required = true) @RequestParam Integer archiveAutoType,
-					@ApiParam(value = "主键集合", required = true) @RequestParam String nodeIds) {
-		return R.status(archiveTreeContractService.updateArchiveAutoRule(archiveAutoType,nodeIds));
+	public R updateArchiveAutoRule(ArchiveTreeContractAutoRuleMapDTO dto) {
+		return R.status(archiveTreeContractService.updateArchiveAutoRule(dto));
 	}
 
 

+ 13 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -19,6 +19,7 @@ package org.springblade.manager.mapper;
 
 import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
 import org.springblade.manager.vo.ArchiveTreeContractVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -58,9 +59,19 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 	int updateAllSonNodeIdsForArchiveAutoRule(@Param("treeContract") ArchiveTreeContract treeContract);
 
 	/**
-	 * 获取节点下所有设置规则节点
+	 * 删除立卷规则设置
 	 * @param treeContract
 	 * @return
 	 */
-	List<ArchiveTreeContract> getAllSonNodeIdsForArchiveAutoRuleSelected(@Param("treeContract")ArchiveTreeContract treeContract);
+	int removeAllSonNodeIdsForArchiveAutoRule_1(@Param("treeContract") ArchiveTreeContract treeContract);
+	int removeAllSonNodeIdsForArchiveAutoRule_2(@Param("treeContract") ArchiveTreeContract treeContract);
+	int removeAllSonNodeIdsForArchiveAutoRule_3(@Param("treeContract") ArchiveTreeContract treeContract);
+	int removeNodeForArchiveAutoRule_Group(@Param("archiveAutoGroupId") Long archiveAutoGroupId);
+	/**
+	 * 查看分类并卷规则-获取大类所有节点
+	 * @param ancestors
+	 * @param groupId
+	 * @return
+	 */
+	List<ArchiveTreeContractAutoRuleVO> getAllSonNodeforGroupView(@Param("ancestors")String ancestors, @Param("groupId")Long groupId);
 }

+ 98 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -37,7 +37,8 @@
         <result column="exp_data_type" property="expDataType"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
-        <result column="archive_auto_select" property="archiveAutoSelect"/>
+        <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
+        <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
     </resultMap>
 
 
@@ -92,6 +93,16 @@
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
     </resultMap>
 
+    <resultMap id="getAllSonNodeforGroupViewResultMap" type="org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO">
+        <id column="id" property="nodeId"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="node_name" property="nodeName"/>
+        <result column="archive_auto_type" property="archiveAutoType"/>
+        <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
+        <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
+        <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
+    </resultMap>
+
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
         d.id,
@@ -121,7 +132,6 @@
         ORDER BY d.sort
     </select>
 
-
     <select id="tree" resultMap="treeNodeResultMap">
         SELECT
         id,
@@ -188,7 +198,6 @@
         ORDER BY d.sort
     </select>
 
-
     <select id="tree2" resultMap="ArchiveTreeContractVO2ResultMap">
         SELECT
         id,
@@ -225,11 +234,24 @@
         OR ( parent_id = 0 AND project_id = #{projectId} )
         ORDER BY sort
     </select>
+
     <update id="updateAllSonNodeIdsForArchiveAutoRule">
+
+        <if test="treeContract.archiveAutoType ==1 ">
+            update m_archive_tree_contract
+            set
+            archive_auto_node_id = #{treeContract.archiveAutoNodeId}
+            where
+            is_deleted = 0 and ancestors like concat('', #{treeContract.ancestors}, '%');
+        </if>
+
         update m_archive_tree_contract
         set
             archive_auto_type= #{treeContract.archiveAutoType},
-            archive_auto_node_id = #{treeContract.archive_auto_node_id}
+            <if test="treeContract.archiveAutoType ==2 ">
+                archive_auto_group_id=#{treeContract.archiveAutoGroupId},
+                archive_auto_group_select=0
+            </if>
         where
             is_deleted = 0 and ancestors like concat('', #{treeContract.ancestors}, '%')
             /*最高并卷规则不能覆盖 分类并卷规则,单独组卷规则*/
@@ -242,11 +264,79 @@
             </if>
     </update>
 
-    <select id="getAllSonNodeIdsForArchiveAutoRuleSelected" resultMap="archiveTreeContractResultMap">
-        select * from m_archive_tree_contract
-        where is_deleted = 0
+    <update id="removeAllSonNodeIdsForArchiveAutoRule_1">
+        update m_archive_tree_contract
+        set
+        archive_auto_node_id = NULL
+        where
+        is_deleted = 0
+        and ancestors like concat('', #{treeContract.ancestors}, '%');
+
+
+        update m_archive_tree_contract
+        set
+            archive_auto_type = NULL
+        where
+        is_deleted = 0
         and ancestors like concat('', #{treeContract.ancestors}, '%')
-        and archive_auto_select=1
+        /*取消规则 只取消规则与自己一致的*/
+        and archive_auto_type = #{treeContract.archiveAutoType} ;
+    </update>
+
+    <update id="removeAllSonNodeIdsForArchiveAutoRule_3">
+        update m_archive_tree_contract
+        set
+            /*取消规则 恢复默认规则 不需要设置为null,如果最高并卷节点取消规则,archive_auto_node_id会为空,相当于无规则不会进到自动组卷流程*/
+            archive_auto_type = 1
+        where
+        is_deleted = 0
+        and ancestors like concat('', #{treeContract.ancestors}, '%')
+        /*取消规则 只取消规则与自己一致的*/
+        and archive_auto_type = #{treeContract.archiveAutoType}
+    </update>
+    <update id="removeAllSonNodeIdsForArchiveAutoRule_2">
+        /*取消单个节点的分类并卷规则*/
+        update m_archive_tree_contract
+        set
+            /*取消规则 恢复默认规则 不需要设置为null,如果最高并卷节点取消规则,archive_auto_node_id会为空,相当于无规则不会进到自动组卷流程*/
+            archive_auto_type = 1 ,
+            archive_auto_group_id = NULL,
+            archive_auto_group_select =NULL
+        where
+          is_deleted = 0
+          and ancestors like concat('', #{treeContract.ancestors}, '%')
+            /*取消规则 只取消规则与自己一致的*/
+          and archive_auto_type = #{treeContract.archiveAutoType}
+    </update>
+
+    <update id="removeNodeForArchiveAutoRule_Group">
+        /**取消同一组的分类并卷规则*/
+        update m_archive_tree_contract
+        set
+            archive_auto_type = 1 ,
+            archive_auto_group_id = NULL,
+            archive_auto_group_select =NULL
+        where
+            is_deleted = 0
+            and archive_auto_group_id = #{archiveAutoGroupId}
+    </update>
+
+    <select id="getAllSonNodeforGroupView" resultMap="getAllSonNodeforGroupViewResultMap">
+        SELECT
+            id,
+            parent_id,
+            node_name,
+            archive_auto_type,
+            archive_auto_node_id,
+            archive_auto_group_id,
+            archive_auto_group_select
+        FROM m_archive_tree_contract
+        where is_deleted = 0
+          and ancestors like concat('', #{ancestors}, '%')
+          and archive_auto_type !=3
+          and id not in (
+                select id from m_archive_tree_contract where archive_auto_type=2 and archive_auto_group_id != #{groupId}
+          )
         order by ancestors asc,sort asc
     </select>
 

+ 4 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsParamMapper.java

@@ -1,7 +1,9 @@
 package org.springblade.manager.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.manager.entity.WbsParam;
+import org.springblade.manager.injector.EasyBaseMapper;
+
+public interface WbsParamMapper extends EasyBaseMapper<WbsParam> {
 
-public interface WbsParamMapper extends BaseMapper<WbsParam> {
 }
+

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java

@@ -17,6 +17,7 @@
 package org.springblade.manager.service;
 
 import feign.Param;
+import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
@@ -74,13 +75,13 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 
 
-	Map<Integer, List<ArchiveTreeContractAutoRuleVO>> getArchiveAutoRule(Long id);
+	Map<String,Object> getArchiveAutoRule(Long id);
 
 	/**
 	 *项目级立卷规则更新
 	 * @return
 	 */
-	boolean updateArchiveAutoRule(Integer archiveAutoType,String nodeIds);
+	boolean updateArchiveAutoRule(ArchiveTreeContractAutoRuleMapDTO dto);
 
 
 }

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

@@ -72,5 +72,4 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     List<WbsTreePrivate> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId, Integer isAdd, Long id);
 
     Object getExcelHtml(String primaryKeyId) throws IOException;
-
 }

+ 105 - 112
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -25,6 +25,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
@@ -224,28 +225,29 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			//步骤1保存选择节点的立卷规则。
 			String[] ids = nodeIds.split(",");
 
-			Long archiveAutoNodeId=null;
+			Long archiveAutoGroupId=null;
 
 			//分类并卷规则的需要生成个随机数,作为同一个分类赋值archiveAutoNodeId
 			if(archiveAutoType==2){
 				double ran=(Math.random()*100000000) + 1;
-				archiveAutoNodeId=Long.parseLong(System.currentTimeMillis()+""+ran);
+				archiveAutoGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
 			}
 			for(String nodeId:ids){
 				long nodeIdLong = Long.parseLong(nodeId);
 				ArchiveTreeContract archiveTreeContract = baseMapper.selectById(nodeIdLong);
-				archiveTreeContract.setArchiveAutoSelect(1);
 				archiveTreeContract.setArchiveAutoType(archiveAutoType);
-				if(archiveAutoType==2){
-					//分类并卷规则 提交都是一个分类类型
-					archiveTreeContract.setArchiveAutoNodeId(archiveAutoNodeId);
-				}else{
+				if(archiveAutoType==1){
 					//最高并卷规则 选择节点的ID
 					archiveTreeContract.setArchiveAutoNodeId(nodeIdLong);
 				}
+				if(archiveAutoType==2){
+					//分类并卷规则 提交都是一个分类类型
+					archiveTreeContract.setArchiveAutoGroupId(archiveAutoGroupId);
+					archiveTreeContract.setArchiveAutoGroupSelect(1);
+				}
 				baseMapper.updateById(archiveTreeContract);
 
-				//TODO 步骤2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
+				//步骤2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
 				baseMapper.updateAllSonNodeIdsForArchiveAutoRule(archiveTreeContract);
 			}
 
@@ -264,145 +266,136 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @return
 	 */
 	@Override
-	public Map<Integer, List<ArchiveTreeContractAutoRuleVO>> getArchiveAutoRule(Long id) {
+	public Map<String,Object> getArchiveAutoRule(Long id) {
 
-		Map<Integer, List<ArchiveTreeContractAutoRuleVO>> map= new HashMap<>();
-		List<ArchiveTreeContractAutoRuleVO> voList_1 = new ArrayList<>();//最高规则显示节点及节点下有设置的节点(archive_auto_select=1)
-		List<ArchiveTreeContractAutoRuleVO> voList_2 = new ArrayList<>();//分类并卷的tab显示当前节点的相同分类节点
-		List<ArchiveTreeContractAutoRuleVO> voList_3 = new ArrayList<>();//单独组卷的显示节点及节点下有设置的节点(archive_auto_select=1)
+		Map<String,Object> map= new HashMap<>();
 
 		ArchiveTreeContract archiveTreeContract = baseMapper.selectById(id);
-
-		Map<Long,String> nodeNameMap = new HashMap<>();//单个节点名称缓存
-
-		//获取当前节点下所有设置的节点
-		List<ArchiveTreeContract> list=baseMapper.getAllSonNodeIdsForArchiveAutoRuleSelected(archiveTreeContract);
-		//找出最高规则和单独规则列表
-		for(ArchiveTreeContract node:list){
-			Integer archiveAutoType = node.getArchiveAutoType();
-			if(archiveAutoType !=null && archiveAutoType!=2){
-				ArchiveTreeContractAutoRuleVO vo = new ArchiveTreeContractAutoRuleVO();
-				vo.setNodeId(node.getId());
+		Integer archiveAutoType = archiveTreeContract.getArchiveAutoType();
+		if(archiveAutoType!=null){
+			if(archiveAutoType==1){
+				//最高并卷层级 默认规则的节点 显示最高并卷层级节点
+				Long archiveAutoNodeId = archiveTreeContract.getArchiveAutoNodeId();
+				ArchiveTreeContract archiveAutoNode = baseMapper.selectById(archiveAutoNodeId);
 				StringBuffer allName= new StringBuffer();
-				String ancestors = node.getAncestors();
+				String ancestors = archiveAutoNode.getAncestors();
 				String[] ancestorssplit = ancestors.split(",");//全路径ID
 				for(String pId:ancestorssplit){
 					long pIdLong = Long.parseLong(pId);
-					if(nodeNameMap.containsKey(pIdLong)){
-						allName.append(nodeNameMap.get(pIdLong)+"/");
-					}else{
-						ArchiveTreeContract pIdNode = baseMapper.selectById(pIdLong);
-						nodeNameMap.put(pIdNode.getId(),pIdNode.getNodeName());
-						allName.append(pIdNode.getNodeName()+"/");
-					}
+					ArchiveTreeContract pIdNode = baseMapper.selectById(pIdLong);
+					allName.append(pIdNode.getNodeName()+"/");
 				}
-				allName.append(node.getNodeName());
+				allName.append(archiveAutoNode.getNodeName());
+				ArchiveTreeContractAutoRuleVO vo= new ArchiveTreeContractAutoRuleVO();
 				vo.setAllName(allName.toString());
-
-				if(archiveAutoType==3){
-					vo.setSelectVo(1);
-					voList_3.add(vo);
-
-					ArchiveTreeContractAutoRuleVO vo1 = vo.clone();
-					vo1.setSelectVo(0);
-					voList_1.add(vo1);
-				}
-
-				if(archiveAutoType==1){
-					vo.setSelectVo(0);
-					voList_3.add(vo);
-
-					ArchiveTreeContractAutoRuleVO vo1 = vo.clone();
-					vo1.setSelectVo(1);
-					voList_1.add(vo1);
+				vo.setNodeId(archiveAutoNode.getId());
+				vo.setArchiveAutoType(archiveAutoType);
+				map.put("type",archiveAutoType);
+				map.put("data",vo);
+				return map;
+			}
+			if(archiveAutoType==2){
+				//分类并卷显示所在大类下树结构,过滤单独规则,其他分类并卷规则组节点 本节点分类组显示打钩
+				//找出当前节点大类
+				String ancestors = archiveTreeContract.getAncestors();
+				String[] ancestorssplit = ancestors.split(",");//全路径ID
+				String nodeAncestors = ancestorssplit[0]+","+ancestorssplit[1]; //大类的ancestors
+				//获取大类下所有节点,过滤单独规则,其他分类并卷规则组节点
+				List<ArchiveTreeContractAutoRuleVO> nodetree = ForestNodeMerger.merge(baseMapper.getAllSonNodeforGroupView(nodeAncestors, archiveTreeContract.getArchiveAutoNodeId()));
+				//获取与当前节点同一分类的节点
+				List<ArchiveTreeContract> listGroup= baseMapper.selectList(Wrappers.<ArchiveTreeContract>lambdaQuery()
+						.eq(ArchiveTreeContract::getArchiveAutoGroupId, archiveTreeContract.getArchiveAutoGroupId())
+						.orderByAsc(ArchiveTreeContract::getSort));
+				StringBuffer nodeSelect = new StringBuffer();
+
+				for(ArchiveTreeContract node:listGroup){
+					nodeSelect.append(node.getId()+",");
 				}
-
-
+				map.put("type",archiveAutoType);
+				map.put("tree",nodetree);
+				map.put("data",nodeSelect.toString());
+				return map;
 			}
-		}
-		//找出分类并卷规则 与当前节点同一分类的节点
-		if(archiveTreeContract.getArchiveAutoType()!=null && archiveTreeContract.getArchiveAutoType()==2){
-
-			//设置同一分类的节点 archiveAutoSelect=1的,不是范围内的所有子节点
-			List<ArchiveTreeContract> list2= baseMapper.selectList(Wrappers.<ArchiveTreeContract>lambdaQuery()
-					.eq(ArchiveTreeContract::getArchiveAutoNodeId, archiveTreeContract.getArchiveAutoNodeId())
-					.eq(ArchiveTreeContract::getArchiveAutoSelect, 1).orderByAsc(ArchiveTreeContract::getSort));
-			for(ArchiveTreeContract node:list2){
-				ArchiveTreeContractAutoRuleVO vo = new ArchiveTreeContractAutoRuleVO();
-				vo.setNodeId(node.getId());
+			if(archiveAutoType==3){
+				//单独组卷规则 显示当前节点
 				StringBuffer allName= new StringBuffer();
-				String ancestors = node.getAncestors();
+				String ancestors = archiveTreeContract.getAncestors();
 				String[] ancestorssplit = ancestors.split(",");//全路径ID
 				for(String pId:ancestorssplit){
 					long pIdLong = Long.parseLong(pId);
-					if(nodeNameMap.containsKey(pIdLong)){
-						allName.append(nodeNameMap.get(pIdLong)+"/");
-					}else{
-						ArchiveTreeContract pIdNode = baseMapper.selectById(pIdLong);
-						nodeNameMap.put(pIdNode.getId(),pIdNode.getNodeName());
-						allName.append(pIdNode.getNodeName()+"/");
-					}
+					ArchiveTreeContract pIdNode = baseMapper.selectById(pIdLong);
+					allName.append(pIdNode.getNodeName()+"/");
 				}
-				allName.append(node.getNodeName());
+				allName.append(archiveTreeContract.getNodeName());
+				ArchiveTreeContractAutoRuleVO vo= new ArchiveTreeContractAutoRuleVO();
 				vo.setAllName(allName.toString());
-				vo.setSelectVo(1);
-				voList_2.add(vo);
+				vo.setNodeId(archiveTreeContract.getId());
+				vo.setArchiveAutoType(archiveAutoType);
+				map.put("type",archiveAutoType);
+				map.put("data",vo);
+				return map;
 			}
 		}
-
-		map.put(1,voList_1);
-		map.put(2,voList_2);
-		map.put(3,voList_3);
 		return map;
 	}
 
 
-	@Override
-	public boolean updateArchiveAutoRule(Integer archiveAutoType, String nodeIds) {
-		//项目级不需要考虑是否为wbs节点,已经同步出来了都属于归档树节点,直接按归档树节点处理
+	public void removeArchiveAutoRule(Long nodeId){
+		ArchiveTreeContract node = baseMapper.selectById(nodeId);
+		Integer archiveAutoType = node.getArchiveAutoType();
+		if(archiveAutoType!=null){
+			//删除默认规则
+			if(archiveAutoType==1){
+				baseMapper.removeAllSonNodeIdsForArchiveAutoRule_1(node);
+			}
+			//删除节点及所有子节点 分类并卷规则
+			if(archiveAutoType==2){
+				//删除规则
+				baseMapper.removeAllSonNodeIdsForArchiveAutoRule_2(node);
+				//TODO 验证节点的父节点是否为分类并卷规则,如是则取消。若无其他兄弟节点,继续往上验证。
+			}
+			//删除节点及所有子节点 单独并卷规则
+			if(archiveAutoType==3){
+				baseMapper.removeAllSonNodeIdsForArchiveAutoRule_3(node);
+			}
+		}
+
+	}
 
 
-		String[] ids = nodeIds.split(",");
-		Set<String> idsSet=new HashSet<>(Arrays.asList(ids));
-
-		//判断修改的原来是否是分类并卷规则类型
-		List<ArchiveTreeContract> archiveTreeContracts_db=null;
-		long nodeId_0_Long = Long.parseLong(ids[0]);
-		ArchiveTreeContract archiveTreeContract0 = baseMapper.selectById(nodeId_0_Long);
-		Integer archiveAutoType_db = archiveTreeContract0.getArchiveAutoType();
-		if(archiveAutoType_db==2){
-			//获取分类ID
-			Long archiveAutoNodeId_db = archiveTreeContract0.getArchiveAutoNodeId();
-			//获取该分类下的设置选择节点 archiveAutoSelect=1的,不是范围内的所有子节点
-			archiveTreeContracts_db = baseMapper.selectList(Wrappers.<ArchiveTreeContract>lambdaQuery()
-					.eq(ArchiveTreeContract::getArchiveAutoNodeId, archiveAutoNodeId_db)
-					.eq(ArchiveTreeContract::getArchiveAutoSelect, 1)
-			);
-		}else{
-			//原来是最高,单独规则类型的
+	@Override
+	public boolean updateArchiveAutoRule(ArchiveTreeContractAutoRuleMapDTO dto) {
+		//项目级不需要考虑是否为wbs节点,已经同步出来了都属于归档树节点,直接按归档树节点处理
 
+		Integer archiveAutoType = dto.getArchiveAutoType();
+		if(archiveAutoType!=null){
 			if(archiveAutoType==2){
-				//修改成分类并卷
-			}
-			if(archiveAutoType==1){
-				//修改成最高
-			}
-			if(archiveAutoType==3){
-				//修改成单独
-				for(String nodeId:ids){
-					//步骤1更新选择节点的立卷规则。
+				Long groupId = dto.getArchiveAutoGroupId();
+				String selectNodeIds = dto.getSelectNodeIds();
+				List<String> selectNodeIdlist = Arrays.asList(selectNodeIds);
+				//先将同一分类的节点删除配置,。
+				baseMapper.removeNodeForArchiveAutoRule_Group(groupId);
+				//然后再按照选择节点保存新的设置
+				for(String nodeId:selectNodeIdlist){
 					long nodeIdLong = Long.parseLong(nodeId);
 					ArchiveTreeContract archiveTreeContract = baseMapper.selectById(nodeIdLong);
-					archiveTreeContract.setArchiveAutoSelect(1);
 					archiveTreeContract.setArchiveAutoType(archiveAutoType);
-					archiveTreeContract.setArchiveAutoNodeId(nodeIdLong);//最高/单独规则 选择节点的ID
+					//分类并卷规则 提交都是一个分类类型
+					archiveTreeContract.setArchiveAutoGroupId(groupId);
+					archiveTreeContract.setArchiveAutoGroupSelect(1);
 					baseMapper.updateById(archiveTreeContract);
-					//步骤2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
+					//保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
 					baseMapper.updateAllSonNodeIdsForArchiveAutoRule(archiveTreeContract);
 				}
 			}
-		}
+			if(archiveAutoType==1){
 
+			}
+			if(archiveAutoType==3){
+
+			}
+
+		}
 
 		return false;
 	}

+ 28 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java

@@ -9,14 +9,15 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.WbsParamMapper;
 import org.springblade.manager.service.IWbsParamService;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -83,6 +84,31 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         return nodes;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatch(Collection<WbsParam> entityList, int batchSize) {
+        try {
+            int size = entityList.size();
+            int idxLimit = Math.min(batchSize, size);
+            int i = 1;
+            //保存单批提交的数据集合
+            List<WbsParam> oneBatchList = new ArrayList<>();
+            for (Iterator<WbsParam> var1 = entityList.iterator(); var1.hasNext(); ++i) {
+                WbsParam element = var1.next();
+                oneBatchList.add(element);
+                if (i == idxLimit) {
+                    baseMapper.insertBatchSomeColumn(oneBatchList);
+                    //每次提交后清空集合数据
+                    oneBatchList.clear();
+                    idxLimit = Math.min(idxLimit + batchSize, size);
+                }
+            }
+        } catch (Exception e) {
+            log.error("保存失败", e);
+            return false;
+        }
+        return true;
+    }
+
 
 }
 

+ 73 - 77
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -27,10 +27,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.ITableInfoService;
 import org.springblade.manager.service.IWbsTreePrivateService;
-import org.springblade.manager.vo.TreeNodeVOByTabType;
-import org.springblade.manager.vo.WbsNodeTabAndParamVO;
-import org.springblade.manager.vo.WbsNodeTableVO;
-import org.springblade.manager.vo.WbsTreePrivateVO;
+import org.springblade.manager.vo.*;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -516,11 +513,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         //获取该节点下所有表单
         List<WbsNodeTableVO> list = baseMapper.selectNodeTabAndParamList(id, wbsId, projectId);
         //获取节点信息
-        WbsTreePrivate nodeInfo = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                .eq(WbsTreePrivate::getId, id)
-                .eq(WbsTreePrivate::getWbsId, wbsId)
-                .eq(WbsTreePrivate::getProjectId, projectId)
-        );
+        WbsTreePrivate nodeInfo = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getId, id).eq(WbsTreePrivate::getWbsId, wbsId).eq(WbsTreePrivate::getProjectId, projectId));
         //获取节点参数,此处使用pKeyId与参数表的wbsId做的绑定才能确定唯一;
         List<WbsParam> paramList = wbsParamServiceImpl.findByNodeId(nodeInfo.getPKeyId());
         resultList.setTabData(list);
@@ -554,43 +547,30 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public boolean syncNodeParam(String projectId) {
         if (StringUtils.isNotEmpty(projectId)) {
             //获取项目节点树
-            List<WbsTreePrivate> wbsTreePrivateAllNow = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                    .eq(WbsTreePrivate::getProjectId, projectId)
-                    .eq(WbsTreePrivate::getStatus, 1)
-                    .eq(WbsTreePrivate::getType, 1)
-            );
-            String wbsId = "";
-            for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateAllNow) {
-                wbsId = wbsTreePrivate.getWbsId();
-                break;
-            }
+            List<WbsTreePrivate> wbsTreePrivateAllNow = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 1));
+            String wbsId = wbsTreePrivateAllNow.stream().map(WbsTreePrivate::getWbsId).findAny().orElse(null);
             if (StringUtils.isNotEmpty(wbsId)) {
-                //获取当前参数表的所有业务数据
-                List<WbsParam> wbsParamListAll = wbsParamMapper.selectList(Wrappers.<WbsParam>query().lambda().eq(WbsParam::getType, 1).isNotNull(WbsParam::getNodeId).ne(WbsParam::getNodeId, -1));
 
-                List<WbsParam> paramListData = new ArrayList<>();
+                List<WbsParamVO> paramListData = new ArrayList<>();
                 //获取公有树
-                List<WbsTree> treePublicNodeAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
-                        .eq(WbsTree::getWbsId, wbsId)
-                        .eq(WbsTree::getStatus, 1)
-                        .eq(WbsTree::getType, 1)
-                );
+                List<WbsTree> treePublicNodeAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsId).eq(WbsTree::getStatus, 1).eq(WbsTree::getType, 1));
 
                 if (treePublicNodeAll.size() > 0) {
                     //公有引用
                     for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateAllNow) {
                         for (WbsTree wbsTree : treePublicNodeAll) {
                             if (wbsTree.getId().equals(wbsTreePrivate.getId())) {
+                                String sql = "select * from m_wbs_param where node_id = " + wbsTree.getId();
+                                List<WbsParam> wbsParamList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsParam.class));
                                 //获取公有节点参数
-                                List<WbsParam> wbsParamList = wbsParamListAll.stream().filter(f -> f.getNodeId().equals(wbsTree.getId())).collect(Collectors.toList());
                                 if (wbsParamList.size() > 0) {
                                     for (WbsParam wbsParam : wbsParamList) {
-                                        WbsParam param = BeanUtil.copyProperties(wbsParam, WbsParam.class);
+                                        WbsParamVO param = BeanUtil.copyProperties(wbsParam, WbsParamVO.class);
                                         if (param != null) {
+                                            param.setOldId(wbsParam.getId());
                                             param.setNodeId(wbsTreePrivate.getPKeyId());
                                             param.setId(SnowFlakeUtil.getId());
                                             paramListData.add(param);
@@ -603,28 +583,19 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
                 } else {
                     //私有引用 - 获取原始引用私有树
-                    WbsTreePrivate treePrivateRootNode = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                            .eq(WbsTreePrivate::getPKeyId, wbsId)
-                            .eq(WbsTreePrivate::getParentId, 0L)
-                            .eq(WbsTreePrivate::getStatus, 1)
-                            .eq(WbsTreePrivate::getType, 1)
-                    );
-                    List<WbsTreePrivate> treePrivateNodeAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                            .eq(WbsTreePrivate::getWbsId, treePrivateRootNode.getWbsId())
-                            .eq(WbsTreePrivate::getProjectId, treePrivateRootNode.getProjectId())
-                            .eq(WbsTreePrivate::getStatus, 1)
-                            .eq(WbsTreePrivate::getType, 1)
-                    );
+                    WbsTreePrivate treePrivateRootNode = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, wbsId).eq(WbsTreePrivate::getParentId, 0L).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 1));
+                    List<WbsTreePrivate> treePrivateNodeAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, treePrivateRootNode.getWbsId()).eq(WbsTreePrivate::getProjectId, treePrivateRootNode.getProjectId()).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 1));
 
                     for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateAllNow) {
                         for (WbsTreePrivate wbsTreePrivateYS : treePrivateNodeAll) {
                             if (wbsTreePrivateYS.getId().equals(wbsTreePrivate.getId())) {
-                                //获取公有节点参数
-                                List<WbsParam> wbsParamList = wbsParamListAll.stream().filter(f -> f.getNodeId().equals(wbsTreePrivateYS.getPKeyId())).collect(Collectors.toList());
+                                String sql = "select * from m_wbs_param where node_id = " + wbsTreePrivateYS.getPKeyId();
+                                List<WbsParam> wbsParamList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsParam.class));
                                 if (wbsParamList.size() > 0) {
                                     for (WbsParam wbsParam : wbsParamList) {
-                                        WbsParam param = BeanUtil.copyProperties(wbsParam, WbsParam.class);
+                                        WbsParamVO param = BeanUtil.copyProperties(wbsParam, WbsParamVO.class);
                                         if (param != null) {
+                                            param.setOldId(wbsParam.getId());
                                             param.setNodeId(wbsTreePrivate.getPKeyId());
                                             param.setId(SnowFlakeUtil.getId());
                                             paramListData.add(param);
@@ -636,22 +607,68 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     }
                 }
 
+                List<WbsParam> updateList = new ArrayList<>();
+                List<WbsParam> insertList = new ArrayList<>();
                 //判断是否存在
-                Iterator<WbsParam> iterator = paramListData.iterator();
+                Iterator<WbsParamVO> iterator = paramListData.iterator();
                 while (iterator.hasNext()) {
-                    WbsParam next = iterator.next();
-                    List<WbsParam> collect = wbsParamListAll.stream().filter(f ->
-                            (StringUtils.isNotEmpty(f.getK()) && f.getK().equals(next.getK()))
-                                    && (StringUtils.isNotEmpty(f.getV()) && f.getV().equals(next.getV()))
-                                    && (StringUtils.isNotEmpty(f.getName()) && f.getName().equals(next.getName()))
-                                    && (ObjectUtils.isNotEmpty(f.getNodeId()) && f.getNodeId().equals(next.getNodeId())))
-                            .collect(Collectors.toList());
-                    if (collect.size() > 0) {
-                        iterator.remove();
+                    WbsParamVO next = iterator.next();
+
+                    //获取引用的节点上的源参数信息
+                    String sql1 = "select * from m_wbs_param where id = " + next.getOldId();
+                    WbsParam oldObj = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+
+                    //获取被引用的节点上的现参数信息
+                    String sql2 = "select * from m_wbs_param where name = '" + next.getName() + "' and k = '" + next.getK() + "' and v = '" + next.getV() + "' and node_id = " + next.getNodeId() + " and remark = '" + next.getRemark() + "' and is_deleted = 0 and status = 1";
+                    WbsParam newObj = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+
+                    if (oldObj != null && newObj != null) {
+                        //如果源节点参数与现节点参数名称、K、V、备注一致,那么就跳过
+                        if (oldObj.getName().equals(newObj.getName()) && oldObj.getK().equals(newObj.getK()) && oldObj.getV().equals(newObj.getV()) && oldObj.getRemark().equals(newObj.getRemark())) {
+                            iterator.remove();
+
+                            //如果源节点参数与现节点参数名称、K一致,V、备注不一致,那么就修改当前名称下的节点参数
+                        } else if (oldObj.getName().equals(newObj.getName()) && oldObj.getK().equals(newObj.getK()) && (!oldObj.getV().equals(newObj.getV()) || !oldObj.getRemark().equals(newObj.getRemark()))) {
+                            newObj.setName(oldObj.getName());
+                            newObj.setK(oldObj.getK());
+                            newObj.setV(oldObj.getV());
+                            newObj.setRemark(oldObj.getRemark());
+                            updateList.add(newObj);
+
+                            //如果源节点参数与现节点参数名称不一致,那么新增
+                        } else if (!oldObj.getName().equals(newObj.getName())) {
+                            insertList.add(next);
+                        }
+
+                    } else if (oldObj != null) {
+                        //二次过滤,节点名称、节点id相同,修改
+                        String sql3 = "select * from m_wbs_param where name = '" + next.getName() + "' and node_id = " + next.getNodeId() + " and is_deleted = 0 and status = 1";
+                        List<WbsParam> query = jdbcTemplate.query(sql3, new BeanPropertyRowMapper<>(WbsParam.class));
+                        if (query.size() > 0) {
+                            for (WbsParam wbsParam : query) {
+                                if (oldObj.getName().equals(wbsParam.getName())) {
+                                    //修改
+                                    wbsParam.setName(next.getName());
+                                    wbsParam.setK(next.getK());
+                                    wbsParam.setV(next.getV());
+                                    wbsParam.setRemark(next.getRemark());
+                                    updateList.add(wbsParam);
+                                }
+                            }
+                        } else {
+                            //新增
+                            insertList.add(next);
+                        }
                     }
+
                 }
 
-                wbsParamServiceImpl.saveBatch(paramListData, 1000);
+                if (updateList.size() > 0) {
+                    this.wbsParamServiceImpl.updateBatchById(updateList, 1000);
+                }
+                if (insertList.size() > 0) {
+                    this.wbsParamServiceImpl.saveBatch(insertList, 1000);
+                }
                 return true;
             }
         }
@@ -659,7 +676,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public boolean syncNodeTable(String primaryKeyId) {
         if (StringUtils.isNotEmpty(primaryKeyId)) {
             //获取当前节点对应节点信息
@@ -1610,26 +1626,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return true;
     }
 
-
-    public void insertDLTab(WbsTreeContractDTO pawDTO) {
-        //获取当前引用项目的独立库表单
-        List<WbsTreePrivate> wbsTreePrivates = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId()).eq(WbsTreePrivate::getType, 10));
-        List<WbsTreePrivate> wbsTreePrivatesNew = new ArrayList<>();
-        if (wbsTreePrivates.size() > 0) {
-            for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-                WbsTreePrivate wbsTreePrivateNew = BeanUtil.copyProperties(wbsTreePrivate, WbsTreePrivate.class);
-                if (wbsTreePrivateNew != null) {
-                    Long id = SnowFlakeUtil.getId();
-                    wbsTreePrivateNew.setPKeyId(id);
-                    wbsTreePrivateNew.setId(id);
-                    wbsTreePrivateNew.setProjectId(pawDTO.getProjectId());
-                    wbsTreePrivatesNew.add(wbsTreePrivateNew);
-                }
-            }
-        }
-        this.insertBatch(wbsTreePrivatesNew, 1000);
-    }
-
     /**
      * 修改initTableId
      */

+ 22 - 36
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -399,7 +399,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public List<WbsFormElementVO> selectFormElements(String id,Integer type) {
+    public List<WbsFormElementVO> selectFormElements(String id, Integer type) {
         List<WbsFormElementVO> wbsFormElements = wbsTreeMapper.selectFormElements(id);
         ;
 //        if (Func.isEmpty(wbsFormElements)) {
@@ -416,18 +416,18 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         String elementIds = wbsFormElements.stream().map(WbsFormElement::getId).map(String::valueOf).collect(Collectors.joining(","));
         if (Func.isNotEmpty(elementIds)) {
             /*TYPE==1就是WBS级别*/
-            Integer scopeA= com.mixsmart.utils.StringUtils.isEquals(type,1)? FormulaBean.WBS_GLOBAL:FormulaBean.PRO_GLOBAL;
-            Integer scopeB=com.mixsmart.utils.StringUtils.isEquals(type,1)? FormulaBean.WBS_PART:FormulaBean.PRO_PART;
-            List<Long> longs = this.jdbcTemplate.queryForList("select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.scope="+scopeA, Long.class);
+            Integer scopeA = com.mixsmart.utils.StringUtils.isEquals(type, 1) ? FormulaBean.WBS_GLOBAL : FormulaBean.PRO_GLOBAL;
+            Integer scopeB = com.mixsmart.utils.StringUtils.isEquals(type, 1) ? FormulaBean.WBS_PART : FormulaBean.PRO_PART;
+            List<Long> longs = this.jdbcTemplate.queryForList("select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.scope=" + scopeA, Long.class);
             wbsFormElements.forEach(e -> {
                 e.setGlobalFormula(longs.contains(e.getId()) ? 1 : 0);
             });
             String sql;
-            if(com.mixsmart.utils.StringUtils.isEquals(type,1)){
-                sql="select c.element_id from m_wbs_tree a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.id=" + id + " and c.scope="+scopeB+" and c.element_id in(" + elementIds + ")";
-            }else{
-                WbsTreePrivate treePrivate= this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,id));
-                sql="select c.element_id from m_wbs_tree_private a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.p_key_id=" + id + " and c.scope="+scopeB+" and c.element_id in(" + elementIds + ")  and c.project_id="+treePrivate.getProjectId();
+            if (com.mixsmart.utils.StringUtils.isEquals(type, 1)) {
+                sql = "select c.element_id from m_wbs_tree a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.id=" + id + " and c.scope=" + scopeB + " and c.element_id in(" + elementIds + ")";
+            } else {
+                WbsTreePrivate treePrivate = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, id));
+                sql = "select c.element_id from m_wbs_tree_private a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.p_key_id=" + id + " and c.scope=" + scopeB + " and c.element_id in(" + elementIds + ")  and c.project_id=" + treePrivate.getProjectId();
             }
             List<Long> longs2 = this.jdbcTemplate.queryForList(sql, Long.class);
             wbsFormElements.forEach(e -> {
@@ -566,18 +566,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
             //1.同步私有电签默认信息
             if (saveIds.size() == 0 && delIds.size() == 0) {
-                /*if (pawDTO.getReferenceType().equals("public")) {
-                    //获取公有wbs树所有的节点、元素表
-                    List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, Long.parseLong(pawDTO.getWbsId())).eq(WbsTree::getStatus, 1));
-
-                    //获取项目私有wbs树下所有的节点、元素表
-                    List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getWbsId())).eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId())).eq(WbsTreePrivate::getStatus, 1));
-
-                    //修改公有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
-                    this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, pawDTO.getProjectId());
-
-                }*/
-
                 if (pawDTO.getReferenceType().equals("private")) {
 
                     //新增独立表单库数据
@@ -601,10 +589,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                     //同步私有-电签匹配数据、默认信息数据
                     this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
-
-                    //同步私有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
-                    //this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
-
                 }
 
             } else {
@@ -688,8 +672,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     if (pawDTO.getReferenceType().equals("public")) {
                         List<WbsTree> addListData = new ArrayList<>();
                         //获取当前wbs树下所有节点、表信息
-                        List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, pawDTO.getWbsId()));
-
+                        List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, pawDTO.getWbsId()).eq(WbsTree::getStatus, 1));
                         for (WbsTree wbsTree : treesAll) {
                             for (String id : saveIds) {
                                 if (Long.parseLong(id) == (wbsTree.getId())) {
@@ -719,23 +702,26 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
 
                         //查询出当前wbs树下所有节点、表信息(type=10独立表)
-                        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(null, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
-
-                        //获取当前项目下的所有独立表
-                        List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                                .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
-                                .eq(WbsTreePrivate::getType, 10)
-                                .eq(WbsTreePrivate::getParentId, -10)
+                        List<WbsTreePrivate> wbsTreePrivatesNodeAndTab = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
                                 .eq(WbsTreePrivate::getStatus, 1)
+                                .eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId())
+                                .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
+                                .and(obj -> obj.eq(WbsTreePrivate::getType, 1).or().eq(WbsTreePrivate::getType,2))
                         );
 
+                        List<WbsTreePrivate> wbsTreePrivatesTableDLOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getParentId, -10).isNull(WbsTreePrivate::getWbsId));
+                        wbsTreePrivatesNodeAndTab.addAll(wbsTreePrivatesTableDLOld);
+
+                        //获取当前项目下的所有独立表
+                        List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getParentId, -10).eq(WbsTreePrivate::getStatus, 1));
+
                         //查询对应电签位置配置信息的pKeyIds
-                        List<Long> pIdsDL = wbsTreePrivates.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
+                        List<Long> pIdsDL = wbsTreePrivatesNodeAndTab.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
                         String pKeyIds = StringUtils.join(pIdsDL, ",");
                         String sql = "select `id`,`name`,`type`,tab_id,col_key,sig_role_id,is_deleted,sig_role_name,col_name,pyzbx,pyzby from m_textdict_info where tab_id in (" + pKeyIds + ") and is_deleted = 0";
                         List<TextdictInfo> textDictInfosAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
 
-                        for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
+                        for (WbsTreePrivate wbsTreePrivate : wbsTreePrivatesNodeAndTab) {
                             if (wbsTreePrivate.getType() == 1 || wbsTreePrivate.getType() == 2) {
                                 for (String id : saveIds) {
                                     if (Long.parseLong(id) == (wbsTreePrivate.getId())) {