ソースを参照

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into dev

laibulaizheli 4 週間 前
コミット
53ed4a6561
13 ファイル変更286 行追加81 行削除
  1. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  2. 46 16
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  3. 60 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  4. 36 33
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  5. 13 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  6. 40 13
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  7. 58 0
      blade-service/blade-business/src/main/java/org/springblade/business/sync/TaskSync.java
  8. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  9. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  10. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  11. 8 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  12. 6 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java
  13. 7 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -231,4 +231,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 
 
 
+
+	void deleteIsElementFileByProjectId(@Param("projectId") Long projectId);
+
+	void deleteIsElementFileByNode(@Param("projectId") Long projectId,@Param("ancestors") String ancestors,@Param("nodeId") String nodeId);
 }

+ 46 - 16
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -216,6 +216,35 @@
         <result column="out_id" property="outId"/>
         <result column="sort_num" property="sortNum"/>
     </resultMap>
+    <update id="deleteIsElementFileByProjectId">
+        UPDATE u_archive_file set is_deleted = 1 WHERE archive_id in (
+            select id
+            from u_archives_auto
+            where project_id = #{projectId}
+              and is_auto_file!=1
+              and is_deleted=0
+              and is_lock!=1
+        ) and is_element = 1
+    </update>
+    <update id="deleteIsElementFileByNode">
+        UPDATE u_archive_file set is_deleted = 1 WHERE archive_id in (
+            select id
+            from u_archives_auto
+            where project_id = #{projectId}
+              AND is_auto_file != 1
+              AND is_deleted = 0
+              AND is_lock != 1
+              AND node_id IN (
+                SELECT id FROM m_archive_tree_contract
+                WHERE project_id = #{projectId}
+                    AND ancestors IS NOT NULL
+                    AND ancestors LIKE concat(''
+                        , #{ancestors}
+                        , '%')
+                   OR id = #{nodeId}
+            )
+        ) and is_element = 1
+    </update>
 
 
     <select id="approvalFile" resultType="org.springblade.archive.vo.ArchivesAutoVO$ApprovalFile">
@@ -1403,22 +1432,23 @@
     </select>
     <select id="getAllArchiveByContractTypeSummary" resultType="java.util.Map">
         select sum(a.key1 + a.key11) key1,sum(a.key2 + a.key12) key2,sum(a.key3 +a.key13) key3  from (
-         SELECT
-             sum( matc.tree_code IS NULL ) key3,
-             sum( matc.tree_code = 'S' ) key2,
-             sum( matc.tree_code = 'C' ) key1,
-             sum( mci.contract_type = 1 ) key11,
-             sum( mci.contract_type = 2 ) key12,
-             sum( mci.contract_type NOT IN ( 1, 2 )) key13
-         FROM
-             m_archive_tree_contract matc
-                 LEFT JOIN u_archives_auto uaa ON uaa.node_id = matc.id
-                 LEFT JOIN m_contract_info mci ON matc.tree_code = mci.id  and mci.is_deleted = 0
-         WHERE
-             uaa.project_id = #{projectId}
-           AND uaa.is_deleted = #{type}
-           AND uaa.is_destroy = #{type}
-        )a
+             SELECT
+                 IFNULL(sum( matc.tree_code IS NULL ),0) key3,
+                 IFNULL(sum( matc.tree_code = 'S' ),0) key2,
+                 IFNULL(sum( matc.tree_code = 'C' ),0) key1,
+                 IFNULL(sum( mci.contract_type = 1 ),0) key11,
+                 IFNULL(sum( mci.contract_type = 2 ),0) key12,
+                 IFNULL(sum( mci.contract_type NOT IN ( 1, 2 )),0) key13
+             FROM
+                 u_archives_auto uaa
+                     inner JOIN m_archive_tree_contract matc ON uaa.node_id = matc.id and matc.is_deleted = 0
+                     LEFT JOIN m_contract_info mci ON matc.tree_code = mci.id  and mci.is_deleted = 0
+             WHERE
+                 uaa.project_id = #{projectId}
+               AND uaa.is_deleted = #{type}
+               AND uaa.is_destroy = #{type}
+               AND uaa.is_archive = 1
+         )a
     </select>
     <select id="selectAllArchiveAuto" resultType="org.springblade.archive.vo.ArchivesAutoVO4">
         select uaa.id ,uaa.file_number,uaa.node_id,uatc.parent_Id,uatc.file_number_prefix from u_archives_auto uaa left join m_archive_tree_contract uatc on uaa.node_id=uatc.id where uaa.is_deleted = 0 and uaa.project_id=#{projectId}

+ 60 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -26,6 +26,7 @@ import org.springblade.common.utils.SystemUtils;
 import org.springblade.common.vo.DataVO;
 import org.springblade.common.vo.FileSize;
 import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.core.tool.utils.StringUtil;
@@ -277,12 +278,70 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         //统计文件大小
         RefreshFileSize(archivesAuto, archiveFileList, frontUrls);
-
+        // todo 四要素持久化
+        saveElementFiles(archivesAuto, archiveFileList.get(0), frontUrls);
         String joinedUrls = String.join(", ", frontUrls);
         archivesAuto.setOutUrl(joinedUrls);
         archivesAuto.setSecretLevel(secretLevel);
         archivesAuto.setStorageTime(storageTime);
     }
+    private void saveElementFiles(ArchivesAuto archivesAuto, ArchiveFile archiveFile, List<String> frontUrls) {
+        List<ArchiveFile> archiveFiles = new ArrayList<>();
+        if (frontUrls != null && !frontUrls.isEmpty()) {
+            try {
+                for (String frontUrl : frontUrls) {
+                    // 封面(原r_Archives_front)增加中文"封面"匹配
+                    ArchiveFile file = new ArchiveFile();
+                    String fileName = null;
+                    String fileUrl;
+                    int sort = 0;
+                    if (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[0])
+                            || frontUrl.contains("封面")) {
+                        fileName = "封面";
+                        sort = -4;
+                    }
+                    // 卷内目录(原r_Archives_catalog)增加中文匹配
+                    else if (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[1])
+                            || frontUrl.contains("卷内目录")) {
+                        fileName = "卷内目录";
+                        sort = -3;
+                    }
+                    // 备考表(原r_Archives_spare)增加中文匹配
+                    else if (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[2])
+                            || frontUrl.contains("备考表")) {
+                        fileName = "备考表";
+                        sort = (int)(archivesAuto.getFileSize() + 100);
+                    }
+                    // 背脊(原r_Archives_back)增加中文匹配
+                    else if (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[3])
+                            || frontUrl.contains("背脊")) {
+                        fileName = "背脊";
+                        sort = (int)(archivesAuto.getFileSize() + 101);
+                    }
+                    if(frontUrl.contains("@@@")){
+                        fileUrl = frontUrl.substring(0,frontUrl.indexOf("@@@"));
+                    }else {
+                        fileUrl = frontUrl;
+                    }
+                    if (fileName == null || fileUrl == null) {
+                        continue;
+                    }
+                    BeanUtil.copy(archiveFile, file);
+                    file.setFileName(fileName);
+                    file.setFileUrl(fileUrl);
+                    file.setPdfFileUrl(fileUrl);
+                    file.setIsElement(1);
+                    file.setSort(sort);
+                    archiveFiles.add(file);
+                }
+                if (!archiveFiles.isEmpty()) {
+                    archiveFileClient.addArchiveFile(archiveFiles);
+                }
+            } catch (Exception e) {
+                log.error("保存档案四要素失败:" + e);
+            }
+        }
+    }
 
     /**
      * 打码

+ 36 - 33
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -82,7 +82,6 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
@@ -422,17 +421,27 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			ArchiveProjectConfig config = archiveProjectConfigService.getByProjectIdOrNew(vo.getProjectId());
 			String[] frontUrls = outUrl.split(",");
 			for (String frontUrl : frontUrls) {
+				String fileUrl;
+				String fileId;
+				if(frontUrl.contains("@@@")){
+					fileUrl = frontUrl.substring(0,frontUrl.indexOf("@@@"));
+				}else {
+					fileUrl = frontUrl;
+				}
+				if (frontUrl.contains("$$$")) {
+					fileId = frontUrl.substring(frontUrl.indexOf("$$$") + 3);
+				} else {
+					fileId = SnowFlakeUtil.getId() + "";
+					outUrl = outUrl.replace(frontUrl, frontUrl + "$$$" + fileId);
+				}
 				// 封面(原r_Archives_front)增加中文"封面"匹配
 				if (front == null && (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[0])
 						|| frontUrl.contains("封面"))
 						&& config.getFactorType().contains("1")) {
 					front = new ArchivesAutoVO.ApprovalFile();
 					front.setFileName("封面");
-					if(frontUrl.contains("@@@")){
-						front.setFileUrl(frontUrl.substring(0,frontUrl.indexOf("@@@")));
-					}else {
-						front.setFileUrl(frontUrl);
-					}
+					front.setFileUrl(fileUrl);
+					front.setId(fileId);
 				}
 				// 卷内目录(原r_Archives_catalog)增加中文匹配
 				else if (cataLog == null && (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[1])
@@ -440,11 +449,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 						&& config.getFactorType().contains("2")) {
 					cataLog = new ArchivesAutoVO.ApprovalFile();
 					cataLog.setFileName("卷内目录");
-					if(frontUrl.contains("@@@")){
-						cataLog.setFileUrl(frontUrl.substring(0,frontUrl.indexOf("@@@")));
-					}else {
-						cataLog.setFileUrl(frontUrl);
-					}
+					cataLog.setFileUrl(fileUrl);
+					cataLog.setId(fileId);
 				}
 				// 备考表(原r_Archives_spare)增加中文匹配
 				else if (spare == null && (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[2])
@@ -452,11 +458,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 						&& config.getFactorType().contains("3")) {
 					spare = new ArchivesAutoVO.ApprovalFile();
 					spare.setFileName("备考表");
-					if(frontUrl.contains("@@@")){
-						spare.setFileUrl(frontUrl.substring(0,frontUrl.indexOf("@@@")));
-					}else {
-						spare.setFileUrl(frontUrl);
-					}
+					spare.setFileUrl(fileUrl);
+					spare.setId(fileId);
 				}
 				// 背脊(原r_Archives_back)增加中文匹配
 				else if (back == null && (frontUrl.contains(ArchiveAutoPdfServiceImpl.ARCHIVE_NUMBER[3])
@@ -464,23 +467,19 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 						&& config.getFactorType().contains("4")) {
 					back = new ArchivesAutoVO.ApprovalFile();
 					back.setFileName("背脊");
-					if(frontUrl.contains("@@@")){
-						back.setFileUrl(frontUrl.substring(0,frontUrl.indexOf("@@@")));
-					}else {
-						back.setFileUrl(frontUrl);
-					}
+					back.setFileUrl(fileUrl);
+					back.setId(fileId);
 				}
 			}
+			if (!outUrl.equals(vo.getOutUrl())) {
+				this.update(Wrappers.<ArchivesAuto>lambdaUpdate().eq(ArchivesAuto::getId, vo.getId()).set(ArchivesAuto::getOutUrl, outUrl));
+			}
 		}
 		List<ArchivesAutoVO.ApprovalFile> files = vo.getApprovalFileList();;
 		if (files != null) {
-			String tempId = null;
-			if (!files.isEmpty()) {
-				tempId = files.get(0).getId();
-			}
 			if (front != null && front.getFileUrl() != null) {
-				if (front.getId() == null && tempId != null) {
-					front.setId(tempId + "_1");
+				if (front.getId() == null) {
+					front.setId(SnowFlakeUtil.getId() + "");
 				}
 				if (front.getId() != null) {
 					front.setPdfFileUrl(front.getFileUrl());
@@ -488,8 +487,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				}
 			}
 			if (cataLog != null && cataLog.getFileUrl() != null) {
-				if (cataLog.getId() == null && tempId != null) {
-					cataLog.setId(tempId  + "_2");
+				if (cataLog.getId() == null) {
+					cataLog.setId(SnowFlakeUtil.getId() + "");
 				}
 				if (cataLog.getId() != null) {
 					cataLog.setPdfFileUrl(cataLog.getFileUrl());
@@ -501,8 +500,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				}
 			}
 			if (spare != null && spare.getFileUrl() != null) {
-				if (spare.getId() == null && tempId != null) {
-					spare.setId(tempId  + "_3");
+				if (spare.getId() == null) {
+					spare.setId(SnowFlakeUtil.getId() + "");
 				}
 				if (spare.getId() != null) {
 					spare.setPdfFileUrl(spare.getFileUrl());
@@ -510,8 +509,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				}
 			}
 			if (back != null && back.getFileUrl() != null) {
-				if (back.getId() == null && tempId != null) {
-					back.setId(tempId  + "_4");
+				if (back.getId() == null) {
+					back.setId(SnowFlakeUtil.getId() + "");
 				}
 				if (back.getId() != null) {
 					back.setPdfFileUrl(back.getFileUrl());
@@ -756,6 +755,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 						}
 					}
 				}
+				// 删除四要素文件记录
+				baseMapper.deleteIsElementFileByProjectId(projectId);
 			}
 			//清除文件页面pdf
 			List<String> filePageUrlList = baseMapper.getFilePageUrlList(projectId);
@@ -796,6 +797,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 							}
 						}
 					}
+					// 删除四要素文件记录
+					baseMapper.deleteIsElementFileByNode(projectId, ancestors, strNodeId);
 				}
 				//清除文件页面pdf
 				List<String> filePageUrlList = baseMapper.getFilePageUrlListByNode(projectId, ancestors, strNodeId);

+ 13 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1897,6 +1897,8 @@ public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
                 newData.setIsTabPdf(1);
                 newData.setPdfUrl(null);
                 newData.setCreateUser(AuthUtil.getUserId());
+                //设置日期检查
+                newData.setDateIsComplete(null);
                 newData.setSort(ObjectUtil.isNotEmpty(nodeOld.getSort()) ? nodeOld.getSort() : 0);
                 //重构 祖级节点
                 this.restoreParent(newData, oldToNewIdMap);
@@ -2624,7 +2626,8 @@ private void addCopyTabData(WbsTreeContract needCopyNode, WbsTreeContract toCopy
                         objTab.setCreateTime(new Date());
                         //获取当前复制的表的sort
                         objTab.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
-
+                        //设置日期检查
+                        objTab.setDateIsComplete(null);
                         //复制表
                         addChildNodesTablesAll.add(objTab);
 
@@ -2711,6 +2714,8 @@ private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, Lis
                 obj.setFullName(toCopyNode.getNodeName());
                 obj.setPartitionCode(toCopyNode.getPartitionCode());
                 obj.setCreateTime(new Date());
+                //设置日期检查
+                obj.setDateIsComplete(null);
                 //获取当前复制的节点的sort
                 obj.setSort(ObjectUtils.isNotEmpty(needNode.getSort()) ? needNode.getSort() : 0);
                 addNodeList.add(obj);
@@ -2746,6 +2751,8 @@ private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, Lis
                 obj.setCreateTime(new Date());
                 //获取当前复制的表的sort
                 obj.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
+                //设置日期检查
+                obj.setDateIsComplete(null);
 
                 addTabList.add(obj);
 
@@ -2857,8 +2864,10 @@ private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, Lis
                 obj.setCreateTime(new Date());
                 //获取当前复制的节点的sort
                 obj.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
-
+                //设置日期检查
+                obj.setDateIsComplete(null);
                 addNodeList.add(obj);
+
                 if (obj.getNodeType() != null && obj.getNodeType() == 6) {
                     peerMap.put(obj.getPKeyId(), node.getPKeyId());
                 }
@@ -2893,6 +2902,8 @@ private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, Lis
                             objTab.setCreateTime(new Date());
                             //获取当前复制的表的sort
                             objTab.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
+                            //设置日期检查
+                            objTab.setDateIsComplete(null);
 
                             addTabList.add(objTab);
 

+ 40 - 13
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -3,6 +3,7 @@ package org.springblade.business.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -18,6 +19,7 @@ import org.springblade.business.entity.*;
 import org.springblade.business.mapper.TaskMapper;
 import org.springblade.business.mapper.TrialSelfInspectionRecordMapper;
 import org.springblade.business.service.*;
+import org.springblade.business.sync.TaskSync;
 import org.springblade.business.utils.FileUtils;
 import org.springblade.business.vo.*;
 import org.springblade.common.constant.CommonConstant;
@@ -26,6 +28,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -61,6 +64,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.SingleColumnRowMapper;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -134,6 +138,13 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     @Autowired
     StringRedisTemplate RedisTemplate;
+    @Autowired
+    private BladeRedis bladeRedis;
+    //异步类
+    @Autowired
+    private TaskSync taskSync;
+
+
 
     private final ITrialSelfInspectionRecordService iTrialSelfInspectionRecordService;
 
@@ -1969,19 +1980,35 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         public R reSigningEVisaStatus0(List<reSigningEVisaStatus> dtos, String header) throws Exception {
          R result= new R();
          if(dtos.size()>0){
-            for (reSigningEVisaStatus dto : dtos) {
-                InformationQuery iq = informationQueryService.getById(dto.getId());
-                if(iq!=null){
-                    informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
-                        .eq(InformationQuery::getId, dto.getId())
-                        .set(InformationQuery::getEVisaPdfUrl, null)
-                        .set(InformationQuery::getPdfUrl, null));
-                    result = this.saveNodePdf(iq.getClassify()+"", iq.getWbsId()+"", dto.getContractId()+"", dto.getProjectId()+"", header);
-                    if(result==null||(result!=null&&result.getCode()!=200)){
-                        return R.fail(iq.getName()+"重新保存PDF信息失败");
-                    }
-                }
-            }
+
+             //添加缓存
+             Set<Long> newIds = dtos.stream().map(reSigningEVisaStatus::getId).collect(Collectors.toSet());
+
+             //随机id
+             String s = "sign-reSigningEVisaStatus0:" + SnowFlakeUtil.getId();
+
+             //数据效验
+             Set<Long> oldIds = new HashSet<>();
+             Set<String> keys = bladeRedis.keys("sign-reSigningEVisaStatus0*");
+             for (String key : keys) {
+                 Set<Long> ids = bladeRedis.get(key);
+                 if(ids !=null ){
+                     oldIds.addAll(ids);
+                 }
+             }
+
+             if(CollectionUtils.isNotEmpty(oldIds)){
+                 //如果旧的id中存在新的id,则不允许添加
+                 long count = oldIds.stream().filter(f -> newIds.contains(f)).count();
+                 if(count > 0){
+                     return R.fail("当前提交数据中存在正在保存的数据,请勿重复提交");
+                 }
+             }
+             //10分钟过期
+             bladeRedis.setEx(s,newIds, 600L);
+
+             //执行异步
+             taskSync.reSigningEVisaStatusSync(dtos,header,s);
         }
          return R.success("操作成功");
     }

+ 58 - 0
blade-service/blade-business/src/main/java/org/springblade/business/sync/TaskSync.java

@@ -0,0 +1,58 @@
+package org.springblade.business.sync;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.business.dto.reSigningEVisaStatus;
+import org.springblade.business.entity.InformationQuery;
+import org.springblade.business.service.IInformationQueryFileService;
+import org.springblade.business.service.IInformationQueryService;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.api.R;
+import org.springblade.manager.feign.ExcelTabClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author LHB
+ */
+@Component
+@AllArgsConstructor
+public class TaskSync {
+
+    private final IInformationQueryService informationQueryService;
+
+    private final ExcelTabClient excelTabClient;
+    @Autowired
+    private BladeRedis bladeRedis;
+    @Async("taskExecutor1")
+    public void reSigningEVisaStatusSync(List<reSigningEVisaStatus> dtos, String header,String s) {
+        R result= null;
+        try {
+            for (reSigningEVisaStatus dto : dtos) {
+                InformationQuery iq = informationQueryService.getById(dto.getId());
+                if(iq!=null){
+                    informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                            .eq(InformationQuery::getId, dto.getId())
+                            .set(InformationQuery::getEVisaPdfUrl, null)
+                            .set(InformationQuery::getPdfUrl, null));
+                    result = this.saveNodePdf(iq.getClassify()+"", iq.getWbsId()+"", dto.getContractId()+"", dto.getProjectId()+"", header);
+                    if(result==null||(result!=null&&result.getCode()!=200)){
+                        System.out.println(iq.getName()+"重新保存PDF信息失败");
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            //删除缓f存
+            bladeRedis.del(s);
+        }
+    }
+
+    R saveNodePdf(String classify, String nodePKeyIds, String contractId, String projectId, String header) throws Exception {
+        return excelTabClient.synPDFInfo(contractId, nodePKeyIds, classify, projectId, header);
+    }
+}

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

@@ -1688,6 +1688,7 @@ public class ExcelTabController extends BladeController {
         wbsTreeContract.setIsBussShow(1); // 是否隐藏表
         wbsTreeContract.setTabFileType(1);//没有上传附件
         wbsTreeContract.setPdfUrl("");
+        wbsTreeContract.setDateIsComplete(null);
 
         String tabName = wbsTreeContract.getInitTableName();
         // 字段查询 并去掉公式字段
@@ -1713,7 +1714,7 @@ public class ExcelTabController extends BladeController {
     /**
      * 上传文件
      *
-     * @param files 文件
+     * @param file 文件
      * @return ObjectStat
      */
     @SneakyThrows
@@ -1858,7 +1859,7 @@ public class ExcelTabController extends BladeController {
                         String contractsIdsStr = contractsIds.stream()
                             .map(id -> "'" + id + "'")
                             .collect(Collectors.joining(", "));;
-                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ")";
+                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ") and status in(0,1,2)";
                         maps = jdbcTemplate.queryForList(sql1);
                     }
                 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -336,6 +336,9 @@ public class TextdictInfoController extends BladeController {
                         dataf = dateForm.get("format");
                         dateType = dateForm.get("type");
                     }
+                    if (dateType == null) {
+                        dateType = "date";
+                    }
                     if (dateType.equals("datetime")) {
                         element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='" + dateType + "' format='" + dataf + "' value-format='" + dataf + "' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
                     } else if (dateType.equals("date")) {

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

@@ -522,12 +522,12 @@
             (SELECT COUNT(*)
              FROM u_archives_auto uaa1
              WHERE  uaa1.is_destroy =0 and uaa1.is_deleted =0 and uaa1.is_archive = 1 and (uaa1.node_id in
-                 (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
+                 (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.is_deleted = 0 and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
             ) as 'auto',
             (SELECT COUNT(*)
              FROM u_archives_auto uaa1
              WHERE  uaa1.is_destroy =1 and uaa1.is_deleted =1 and uaa1.is_archive = 1 and (uaa1.node_id in
-                (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
+                (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.is_deleted = 0 and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
             ) as 'deleted',
             if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE parent_id = matc1.id)=0,false,true) as hasChildren
         FROM m_archive_tree_contract matc1 WHERE matc1.project_id =#{projectId} and matc1.parent_id = #{nodeId} and matc1.is_deleted = 0

+ 8 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2355,15 +2355,20 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             Elements dqids = table.getElementsByAttribute("dqid");
             // 电签组装2
             String tableName = wbsTreeContract.getInitTableName();
-            String dqSql = "select * from u_sign_key_role_info where tab_en_name='"+tableName+"'";
+//            String dqSql = "select * from u_sign_key_role_info where tab_en_name='"+tableName+"'";
+            String dqSql = "select e_key,GROUP_CONCAT(DISTINCT concat('*✹',id)) ids from u_sign_key_role_info where tab_en_name='" + tableName + "' GROUP BY e_key";
+
             List<Map<String, Object>> mapList = jdbcTemplate.queryForList(dqSql);
 
             if(mapList!=null && mapList.size()>0){
                 for(Map<String, Object> map : mapList) {
-                    Elements elementsBy = table.getElementsByAttributeValueStarting("keyname", map.get("e_key") + "");
+                    Elements elementsBy = table.getElementsByAttributeValueStarting("keyname", map.get("e_key") + "_");
                     if(elementsBy!=null && elementsBy.size()>0){
                         for(Element element : elementsBy){
-                            element.attr("sign_type", "✹"+map.get("id"));
+                            String ids = (String) map.get("ids");
+                            ids = ids.replace(",","");
+                            ids = ids.substring(1);
+                            element.attr("sign_type", ids);
                             dqids.add(element);
                         }
                     }

+ 6 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java

@@ -51,7 +51,7 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void updateSyncPrivateForm(WbsTreePrivate wbsTreePrivate, List<WbsTreePrivate> collect, Long id,String errorMsg) {
+    public void updateSyncPrivateForm(WbsTreePrivate wbsTreePrivate, List<WbsTreePrivate> collect,Long createUserId, Long id,String errorMsg) {
         List<Long> ids = collect.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
         List<Long> parentIds = collect.stream().map(WbsTreePrivate::getParentId).collect(Collectors.toList());
         //节点公式同步
@@ -65,6 +65,8 @@ public class WbsSynchronousEViSaServiceImpl {
                 .set(WbsTreePrivate::getHtmlUrl, wbsTreePrivate.getHtmlUrl())
                 .set(wbsTreePrivate.getExcelId()!=null,WbsTreePrivate::getIsLinkTable, 2)
                 .set(WbsTreePrivate::getExcelId, wbsTreePrivate.getExcelId())
+                .set(WbsTreePrivate::getUpdateTime, DateTime.now())
+                .set(WbsTreePrivate::getUpdateUser, createUserId)
                 .in(WbsTreePrivate::getPKeyId, ids)
         );
         synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
@@ -76,7 +78,7 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void syncPrivateForceForm(WbsTreePrivate wbsTreePrivate, String nodeId, Long id) {
+    public void syncPrivateForceForm(WbsTreePrivate wbsTreePrivate,Long createUserId, String nodeId, Long id) {
         WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectById(nodeId);
 
         wbsTreePrivateMapper.update(null, Wrappers.<WbsTreePrivate>lambdaUpdate()
@@ -86,6 +88,8 @@ public class WbsSynchronousEViSaServiceImpl {
                 .set(WbsTreePrivate::getHtmlUrl, wbsTreePrivate.getHtmlUrl())
                 .set(StringUtils.isBlank(wbsTreePrivate.getFullName()),WbsTreePrivate::getFullName, wbsTreePrivate1.getNodeName())
                 .set(WbsTreePrivate::getNodeName, wbsTreePrivate.getNodeName())
+                .set(WbsTreePrivate::getUpdateTime, DateTime.now())
+                .set(WbsTreePrivate::getUpdateUser, createUserId)
                 .in(WbsTreePrivate::getPKeyId, nodeId)
         );
         synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()

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

@@ -140,7 +140,7 @@ public class WbsSynchronousServiceImpl {
                 .ne(WbsTree::getId, wbsTree.getId())
                 .eq(WbsTree::getInitTableName, wbsTree.getInitTableName())
                 .eq(WbsTree::getIsDeleted, 0));
-        if(CollectionUtil.isEmpty(wbsTrees)){
+        if (CollectionUtil.isEmpty(wbsTrees)) {
             throw new ServiceException("当前项目没有相同实体表的其他表单");
         }
 
@@ -166,11 +166,11 @@ public class WbsSynchronousServiceImpl {
                 Objects.equals(f.getExcelId(), wbsTreePrivate.getExcelId())
         ).collect(Collectors.toList());
 
-        if(CollectionUtil.isNotEmpty(collect1)){
+        if (CollectionUtil.isNotEmpty(collect1)) {
             collect.addAll(collect1);
         }
         //清表不同的数据
-        List<WbsTreePrivate> noExcelIdEq = wbsTreePrivates.stream().filter(f -> f.getExcelId()!=null && !Objects.equals(f.getExcelId(), wbsTreePrivate.getExcelId())).collect(Collectors.toList());
+        List<WbsTreePrivate> noExcelIdEq = wbsTreePrivates.stream().filter(f -> f.getExcelId() != null && !Objects.equals(f.getExcelId(), wbsTreePrivate.getExcelId())).collect(Collectors.toList());
         StringBuilder sb = new StringBuilder();
         if (CollectionUtil.isNotEmpty(noExcelIdEq)) {
             for (WbsTreePrivate treePrivate : noExcelIdEq) {
@@ -183,7 +183,7 @@ public class WbsSynchronousServiceImpl {
         }
 
         //修改数据
-        wbsSynchronousEViSaService.updateSyncPrivateForm(wbsTreePrivate, collect, wbsTreeSynchronousRecord.getId(),sb.toString());
+        wbsSynchronousEViSaService.updateSyncPrivateForm(wbsTreePrivate, collect, wbsTreeSynchronousRecord.getCreateUserId(), wbsTreeSynchronousRecord.getId(), sb.toString());
     }
 
     /**
@@ -205,7 +205,7 @@ public class WbsSynchronousServiceImpl {
         if (wbsTreePrivate == null) {
             throw new ServiceException("表单不存在");
         }
-        wbsSynchronousEViSaService.syncPrivateForceForm(wbsTreePrivate, nodeId, wbsTreeSynchronousRecord.getId());
+        wbsSynchronousEViSaService.syncPrivateForceForm(wbsTreePrivate, wbsTreeSynchronousRecord.getCreateUserId(), nodeId, wbsTreeSynchronousRecord.getId());
     }
 
     /**
@@ -982,7 +982,7 @@ public class WbsSynchronousServiceImpl {
                         List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
                         //这里可以保存到数据库指定错误日志表
                         throw new ServiceException("添加失败:" + StringUtil.join(collect1, ","));
-                    }else{
+                    } else {
                         //排序调整-连续排序
                         if (wbsTreeSynchronousRecord.getType().contains("7")) {
                             //获取节点下的当前表单
@@ -1128,7 +1128,7 @@ public class WbsSynchronousServiceImpl {
                     //这里可以保存到数据库指定错误日志表
                     //这里可以保存到数据库指定错误日志表
                     throw new ServiceException("添加失败:" + StringUtil.join(collect1, ","));
-                }else{
+                } else {
                     //排序调整
                     if (wbsTreeSynchronousRecord.getType().contains("7")) {
                         //获取节点下的当前表单