Browse Source

私有库同步表单到项目和合同段

qianxb 11 months ago
parent
commit
270c609de8

+ 8 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO7.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.node.INode;
 import org.springblade.core.tool.node.TreeNode;
 import org.springblade.manager.entity.TableFile;
@@ -14,9 +15,16 @@ import java.util.ArrayList;
 import java.util.List;
 
 @Data
+@EqualsAndHashCode(callSuper = true)
 public class WbsTreeContractVO7 extends WbsTreeContract {
 
     @ApiModelProperty(value = "附件")
     private List<TableFile> fileList;
 
+    @ApiModelProperty(value = "挂载表单总数")
+    private Integer formCount;
+
+    @ApiModelProperty(value = "挂载表单id集合")
+    private String formIds;
+
 }

+ 22 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO6.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.manager.entity.WbsTreePrivate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2024/3/1 11:35
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WbsTreePrivateVO6 extends WbsTreePrivate {
+
+    @ApiModelProperty(value = "挂载表单总数")
+    private Integer formCount;
+
+    @ApiModelProperty(value = "挂载表单id集合")
+    private String formIds;
+}

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

@@ -101,4 +101,8 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
     Set<Long> getAllPrivateTableByIds(@Param("projectId") Long projectId,@Param("ids") List<Long> ids);
 
     List<TextdictInfo> getALLTableConfig(@Param("ids") Set<Long> ids);
+
+    List<WbsTreePrivateVO6> getSelectNodes(@Param("ids") List<Long> longs,@Param("projectId") Long projectId);
+
+    List<WbsTreeContractVO7> getSelectContractNodes(@Param("ids") List<Long> longs,@Param("projectId") Long projectId);
 }

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

@@ -803,6 +803,28 @@
             #{id}
         </foreach>
     </select>
+    <select id="getSelectNodes" resultType="org.springblade.manager.vo.WbsTreePrivateVO6">
+        select *,ifnull((select count(1) from m_wbs_tree_private wtp2 where wtp2.parent_id = wtp.id and project_id = #{projectId}),0) as formCount,
+               (select  GROUP_CONCAT(id)
+                from m_wbs_tree_private wtp3 WHERE wtp3.parent_id = wtp.id and project_id = #{projectId}) as formIds
+        from m_wbs_tree_private  wtp where p_key_id in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+    <select id="getSelectContractNodes" resultType="org.springblade.manager.vo.WbsTreeContractVO7">
+        select *,
+        ifnull((select count(1) from m_wbs_tree_contract wtc2 where wtc2.project_id = #{projectId}
+                                and wtc2.contract_id = wtc.contract_id and wtc2.parent_id = wtc.id ),0) as formCount,
+        (select  GROUP_CONCAT(id)
+                                from m_wbs_tree_contract wtc3 WHERE wtc3.parent_id = wtc.id and wtc3.project_id = #{projectId}
+                                and wtc3.contract_id = wtc.contract_id and wtc3.parent_id = wtc.id) as formIds
+        from m_wbs_tree_contract  wtc where is_type_private_pid in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+
 
     <delete id="delTabProjectById">
         delete

+ 95 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -2194,32 +2194,116 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
+    @Transactional
     public void syncFormToContractNode(Long projectId, String nodeIds, Long primaryKeyId) {
         try {
             if (projectId == null || StringUtils.isBlank(nodeIds) || primaryKeyId == null){
                 throw new ServiceException("参数不能为空,请检查参数");
             }
-            //找到当前项目级的节点信息
-            List<WbsTreePrivate> privates = this.list(new LambdaQueryWrapper<WbsTreePrivate>()
-                    .in(WbsTreePrivate::getPKeyId, Func.toLongList(nodeIds)));
-            if (privates.size() == 0){
+            //找到当前项目级的节点信息,已经挂载表单数量
+            List<Long> longs = Func.toLongList(nodeIds);
+            List<WbsTreePrivateVO6> privates = baseMapper.getSelectNodes(longs,projectId);
+            if (privates.size() == 0 || privates.size() != longs.size()){
                 throw new ServiceException("未找到当前项目的节点信息,是确认是否选择节点");
             }
+            //找到当前独立库表单信息
+            WbsTreePrivate form = this.getOne(new LambdaQueryWrapper<WbsTreePrivate>()
+                        .eq(WbsTreePrivate::getPKeyId,primaryKeyId));
+            if (form == null){
+                throw new ServiceException("未找到当前表单信息,请联系管理员");
+            }
+            List<WbsTreePrivate> projectInsertForm = new ArrayList<>();
+            List<WbsTreeContract> contractInsertForm = new ArrayList<>();
             //找到项目所有合同段下当前节点
-            List<WbsTreeContract> list = wbsTreeContractService.list(new LambdaQueryWrapper<WbsTreeContract>()
-                    .eq(WbsTreeContract::getProjectId, projectId)
-                    .in(WbsTreeContract::getIsTypePrivatePid, Func.toLongList(nodeIds)));
-            if (list.size() > 0){
-                //循环保存
-                for (WbsTreeContract wbsTreeContract : list) {
-                    this.addWbsTreeContractInfo(wbsTreeContract.getPKeyId()+"",primaryKeyId+"", Long.valueOf(wbsTreeContract.getContractId()));
+            List<WbsTreeContractVO7> list = baseMapper.getSelectContractNodes(longs,projectId);
+            Map<Long, List<WbsTreeContractVO7>> map = list.stream().collect(Collectors.groupingBy(WbsTreeContractVO7::getIsTypePrivatePid));
+            //构造项目级节点的表单 && 构造项目级节点对应合同节点的表单
+            for (WbsTreePrivateVO6 aPrivate : privates) {
+                //忽略已经存在的表单
+                if (aPrivate.getFormCount()>0 && aPrivate.getFormIds().contains(form.getId()+"")) {
+                    continue;
+                }
+                WbsTreePrivate pri = new WbsTreePrivate();
+                pri.setPKeyId(SnowFlakeUtil.getId());
+                pri.setId(form.getId());
+                pri.setWbsId(aPrivate.getWbsId());
+                pri.setWbsType(aPrivate.getWbsType());
+                pri.setProjectId(aPrivate.getProjectId());
+                pri.setTenantId(aPrivate.getTenantId());
+                pri.setParentId(aPrivate.getId());
+                pri.setAncestors(aPrivate.getAncestors()+","+aPrivate.getId());
+                pri.setNodeType(1);
+                pri.setNodeName(form.getNodeName());
+                pri.setFullName(form.getFullName());
+                pri.setSort(aPrivate.getFormCount()+1);
+                pri.setType(2);
+                pri.setTableType(form.getTableType());
+                pri.setTableOwner(form.getTableOwner());
+                pri.setInitTableName(form.getInitTableName());
+                if (form.getExcelId() != null){
+                    pri.setIsLinkTable(2);
+                    pri.setExcelId(form.getExcelId());
+                }else {
+                    pri.setIsLinkTable(1);
+                }
+                pri.setIsExistForm(0);
+                pri.setHtmlUrl(form.getHtmlUrl());
+                pri.setFillRate(form.getFillRate());
+                pri.setInitTableId(form.getInitTableId());
+                pri.setIsTabPdf(form.getIsTabPdf());
+                pri.setTabFileType(form.getTabFileType());
+                pri.setStatus(1);
+                projectInsertForm.add(pri);
+                //获取合同段对应节点
+                List<WbsTreeContractVO7> contracts = map.get(aPrivate.getPKeyId());
+                if (contracts == null || contracts.size() == 0){
+                    continue;
+                }
+                //构造项目级节点对应合同节点的表单
+                for (WbsTreeContractVO7 contract : contracts) {
+                    //忽略已经存在的表单
+                    if (contract.getFormCount()>0 && contract.getFormIds().contains(form.getId()+"")) {
+                        continue;
+                    }
+                    WbsTreeContract con = new WbsTreeContract();
+                    con.setPKeyId(SnowFlakeUtil.getId());
+                    con.setId(pri.getId());
+                    con.setTableOwner(pri.getTableOwner());
+                    con.setWbsId(pri.getWbsId());
+                    con.setWbsType(Integer.valueOf(pri.getWbsType()));
+                    con.setProjectId(contract.getProjectId());
+                    con.setContractId(contract.getContractId());
+                    con.setTenantId(pri.getTenantId());
+                    con.setParentId(contract.getId());
+                    con.setAncestors(contract.getAncestors()+","+contract.getId());
+                    con.setNodeType(pri.getNodeType());
+                    con.setNodeName(pri.getNodeName());
+                    con.setFullName(pri.getFullName());
+                    con.setSort(contract.getFormCount()+1);
+                    con.setType(2);
+                    con.setTableType(pri.getTableType());
+                    con.setIsLinkTable(pri.getIsLinkTable());
+                    con.setInitTableName(pri.getInitTableName());
+                    con.setExcelId(pri.getExcelId());
+                    con.setHtmlUrl(pri.getHtmlUrl());
+                    con.setIsBussShow(1);
+                    con.setTabFileType(pri.getTabFileType());
+                    con.setIsTabPdf(pri.getIsTabPdf());
+                    con.setIsTypePrivatePid(pri.getPKeyId());
+                    con.setFillRate(pri.getFillRate());
+                    con.setStatus(1);
+                    contractInsertForm.add(con);
                 }
             }
+            //批量保存
+            this.saveBatch(projectInsertForm);
+            wbsTreeContractService.saveBatch(contractInsertForm);
         }catch (Exception e){
             throw new ServiceException("分配失败,原因:"+e.getMessage());
         }
     }
 
+
     private List<WbsTreePrivateVO5> buildWbsTreeByStreamTrial(List<WbsTreePrivateVO5> wbsTreeVO2s) {
         List<WbsTreePrivateVO5> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
         Map<Long, List<WbsTreePrivateVO5>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreePrivateVO5::getParentId));