Sfoglia il codice sorgente

Merge branch 'refs/heads/dev' into feature-lihb-bug

# Conflicts:
#	blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
#	blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
LHB 4 settimane fa
parent
commit
f8f99514d6
25 ha cambiato i file con 550 aggiunte e 140 eliminazioni
  1. 21 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/MeterFormNumberWs.java
  2. 18 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/MeterItemWs.java
  3. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  4. 46 16
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  5. 64 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  6. 38 35
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  7. 13 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  8. 40 13
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  9. 58 0
      blade-service/blade-business/src/main/java/org/springblade/business/sync/TaskSync.java
  10. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  11. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  12. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java
  13. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  14. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterFormNumberWsMapper.java
  15. 23 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterFormNumberWsMapper.xml
  16. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterItemWsMapper.java
  17. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterItemWsMapper.xml
  18. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  19. 11 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  20. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  21. 8 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  22. 127 60
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  23. 6 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java
  24. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java
  25. 18 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 21 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/MeterFormNumberWs.java

@@ -0,0 +1,21 @@
+package org.springblade.manager.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MeterFormNumberWs {
+    private Long id;
+    private Long periodId;
+    private String formNumber;
+    private BigDecimal nowMoney;
+    private BigDecimal nowTotal;
+    private BigDecimal nowEndMoney;
+    private BigDecimal nowEndTotal;
+    private Integer isDeleted;
+}

+ 18 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/MeterItemWs.java

@@ -0,0 +1,18 @@
+package org.springblade.manager.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MeterItemWs {
+    private Long id;
+    private Long periodId;
+    private String meterItem;
+    private BigDecimal amount;
+    private Integer isDeleted;
+}

+ 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}

+ 64 - 2
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);
+            }
+        }
+    }
 
     /**
      * 打码
@@ -558,6 +617,9 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
             }else {
                 object = "";
             }
+
+            //秘级用空
+            object = "";
         }
 
         dataInfo.put(key, object);
@@ -759,7 +821,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
                 file.setFid(idx);
                 //设置文件编号
                 if (StringUtil.isEmpty(file.getFileNumber())) {
-                    file.setFileNumber("\\");
+                    //file.setFileNumber("\\");
                 }
                 //设置页数
                 file.setPageNum(iStartPage.toString());

+ 38 - 35
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);
@@ -2710,10 +2713,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					}
 				}
 
-				String fileNumber = fileNumberPrefix + "_" + index;
+				String fileNumber = fileNumberPrefix + "-" + index;
 				if (indexType == 1) {
 					String formattedIndex = String.format("%0" + indexNum + "d", index);
-					fileNumber = fileNumberPrefix + "_" + formattedIndex;
+					fileNumber = fileNumberPrefix + "-" + formattedIndex;
 				}
 				if (bforce) {
 					if (archiveAutoPdfService.refreshFileNumberForce(archivesAuto, fileNumber)) {

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

@@ -1939,6 +1939,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);
@@ -2666,7 +2668,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);
 
@@ -2753,6 +2756,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);
@@ -2788,6 +2793,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);
 
@@ -2899,8 +2906,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());
                 }
@@ -2935,6 +2944,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

@@ -1691,6 +1691,7 @@ public class ExcelTabController extends BladeController {
         wbsTreeContract.setIsBussShow(1); // 是否隐藏表
         wbsTreeContract.setTabFileType(1);//没有上传附件
         wbsTreeContract.setPdfUrl("");
+        wbsTreeContract.setDateIsComplete(null);
 
         String tabName = wbsTreeContract.getInitTableName();
         // 字段查询 并去掉公式字段
@@ -1716,7 +1717,7 @@ public class ExcelTabController extends BladeController {
     /**
      * 上传文件
      *
-     * @param files 文件
+     * @param file 文件
      * @return ObjectStat
      */
     @SneakyThrows
@@ -1861,7 +1862,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")) {

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -825,5 +825,11 @@ public class WbsTreeContractController extends BladeController {
         wbsTreeContractServiceImpl.resetTableDate(projectId);
         return R.success("成功");
     }
+    @GetMapping("/checkAllNodeDate")
+    @ApiOperationSupport(order = 43)
+    @ApiOperation(value = "检查所有表单是否填写完毕日期")
+    public R checkAllNodeDate(Long projectId,Long contractId){
+        return R.status(wbsTreeContractServiceImpl.checkAllNodeDate(projectId,contractId));
+    }
 
 }

+ 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

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

@@ -0,0 +1,7 @@
+package org.springblade.manager.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.manager.entity.MeterFormNumberWs;
+
+public interface MeterFormNumberWsMapper extends BaseMapper<MeterFormNumberWs> {
+}

+ 23 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterFormNumberWsMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.manager.mapper.MeterFormNumberWsMapper">
+    <!-- 通用查询映射结果 -->
+    <resultMap id="MeterItemWsMap" type="org.springblade.manager.entity.MeterFormNumberWs">
+        <result column="id" property="id"/>
+        <result column="period_id" property="periodId"/>
+        <result column="form_number" property="formNumber"/>
+        <result column="now_money" property="nowMoney"/>
+        <result column="now_total" property="nowTotal"/>
+        <result column="now_end_money" property="nowEndMoney"/>
+        <result column="now_end_total" property="nowEndTotal"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+
+
+
+
+
+
+</mapper>

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterItemWsMapper.java

@@ -0,0 +1,8 @@
+package org.springblade.manager.mapper;
+
+
+import org.springblade.manager.entity.MeterItemWs;
+import org.springblade.manager.injector.EasyBaseMapper;
+
+public interface MeterItemWsMapper extends EasyBaseMapper<MeterItemWs> {
+}

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/MeterItemWsMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.manager.mapper.MeterItemWsMapper">
+    <!-- 通用查询映射结果 -->
+    <resultMap id="MeterItemWsMap" type="org.springblade.manager.entity.MeterItemWs">
+        <result column="id" property="id"/>
+        <result column="period_id" property="periodId"/>
+        <result column="meter_item" property="meterItem"/>
+        <result column="amount" property="amount"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+
+
+
+
+
+
+</mapper>

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

@@ -156,5 +156,7 @@ public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
      */
     void updateSortBatchByPKeyId(List<WbsTreeContract> resourceData);
 
+    List<WbsTreeContract> selectListForcheckAllNodeDate(@Param("projectId") Long projectId, @Param("contractId") Long contractId);
+
     Integer findIsExistTreeNode(List<String> ids);
 }

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

@@ -982,5 +982,16 @@
           </foreach>
         and (b.p_key_id is null or b.is_deleted = 1)
     </select>
+    <select id="selectListForcheckAllNodeDate" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select * from m_wbs_tree_contract where
+       <if test="projectId!=null and projectId!=''">
+           project_id=#{projectId}
+       </if>
+        <if test="contractId!=null and contractId!=''">
+          and  contract_id=#{contractId}
+        </if>
+        and is_deleted=0 and is_buss_show !=2 and init_table_name !=null and html_url !=null and LENGTH(init_table_name) > 10 and LENGTH(html_url) > 10
+        and p_id !=null
+    </select>
 
 </mapper>

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

@@ -91,6 +91,8 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     boolean checkNodeAllDate(WbsTreeContract contract);
 
+    boolean checkAllNodeDate(Long projectId, Long contractId);
+
     Integer findIsExistTreeNode(List<String> ids);
 
     List<WbsTreeContract> queryListByPIds(List<Long> pIds);

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

@@ -2363,15 +2363,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);
                         }
                     }

+ 127 - 60
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -47,9 +47,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.formula.*;
 import org.springblade.manager.formula.impl.*;
-import org.springblade.manager.mapper.FormulaMapper;
-import org.springblade.manager.mapper.WbsTreeContractMapper;
-import org.springblade.manager.mapper.WbsTreePrivateMapper;
+import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.*;
 import org.springblade.manager.vo.*;
@@ -157,6 +155,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private IContractInventoryFormClient iContractInventoryFormClient;
     @Autowired
     private CollectionUtilsClient collectionUtilsClient;
+    @Autowired
+    private MeterItemWsMapper meterItemWsMapper;;
+    @Autowired
+    private MeterFormNumberWsMapper meterFormNumberWsMapper;
 
     @Override
     public void execute(TableElementConverter tec) {
@@ -2421,6 +2423,49 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
     }
 
+    public BigDecimal getMeterItem(Long periodId,String meterItem){
+         String sql="SELECT IFNULL(\n" +
+                 "    (SELECT amount FROM meter_item_ws \n" +
+                 "     WHERE period_id = ? AND meter_item = ? AND is_deleted = 0 \n" +
+                 "     LIMIT 1),\n" +
+                 "    0\n" +
+                 ") AS amount;";
+        return  jdbcTemplate.queryForObject(sql, BigDecimal.class,periodId,meterItem);
+    }
+
+    public void saveMeterItem(Long periodId,String meterItem,BigDecimal amount){
+        if(amount!=null&&amount.compareTo(BigDecimal.ZERO)==0){
+            return;
+        }
+        MeterItemWs meterItemWs = new MeterItemWs(SnowFlakeUtil.getId(), periodId, meterItem, amount, 0);
+        String update="delete from meter_item_ws where period_id="+meterItemWs.getPeriodId()+" and meter_item='"+meterItemWs.getMeterItem()+"'";
+        jdbcTemplate.execute(update);
+        String insert="insert into meter_item_ws (id,period_id,meter_item,amount,is_deleted) values(?,?,?,?,?)";
+        meterItemWsMapper.insert(meterItemWs);
+    }
+
+    public BigDecimal getMeterFormNumber(Long periodId,String formNumber,String result){
+        String sql = "SELECT IFNULL((SELECT " + result + " FROM meter_form_number_ws WHERE period_id = ? AND form_number = ? AND is_deleted = 0 LIMIT 1), 0) AS result";
+        return jdbcTemplate.queryForObject(sql, BigDecimal.class,periodId,formNumber);
+    }
+
+    public void saveMeterFormNumber(Long periodId,String formNumber,String result,BigDecimal amount){
+        if(amount!=null&&amount.compareTo(BigDecimal.ZERO)==0){
+            return;
+        }
+        String sql="select * from meter_form_number_ws where period_id="+periodId+" and form_number='"+formNumber+"' and is_deleted=0  LIMIT 1";
+        List<MeterFormNumberWs> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(MeterFormNumberWs.class));
+        if(!list.isEmpty()){
+            MeterFormNumberWs meterFormNumberWs = list.get(0);
+            String update="update meter_form_number_ws set "+result+"='"+amount+"' where id="+meterFormNumberWs.getId();
+            jdbcTemplate.update(update);
+        }else {
+            String insert="insert into meter_form_number_ws (id,period_id,form_number,is_deleted,"+result+") values("+SnowFlakeUtil.getId()+","+periodId+",'"+formNumber+"',0,"+amount+")";
+            jdbcTemplate.execute(insert);
+        }
+    }
+
+
     @Override
     public List<ReportResult> execute4(Long reportId, Long contractId, Long periodId, Integer type, Long projectId) throws FileNotFoundException, IllegalAccessException {
         //获取当前合同段保证金比例
@@ -2950,9 +2995,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     if (j > 0) {
                         String reportIdSql = "Select id from s_interim_pay_certificate where contract_period_id=" + list.get(j - 1).getId() + " and is_deleted=0";
                         Long cerid = jdbcTemplate.queryForObject(reportIdSql, Long.class);
-                        Object o = bladeRedis.get("repordId" + cerid + "elseEndMoney");
+                        //Object o = bladeRedis.get("repordId" + cerid + "elseEndMoney");
+                       BigDecimal o= getMeterItem(cerid,"其他费用");
                         if (o != null) {
-                            beforeEndMoney = (BigDecimal) o;
+                            beforeEndMoney = o;
                         }
                     }
                 }
@@ -2966,7 +3012,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             }
             endMoney = beforeEndMoney.add(nowMoney);
-            bladeRedis.set("repordId" + reportId + "elseEndMoney", endMoney);
+            //bladeRedis.set("repordId" + reportId + "elseEndMoney", endMoney);
+            saveMeterItem(periodId,"其他费用",endMoney);
+
 
             //------------------------------------------------------------项目总投资------------------------------------------------------------
             Cell b7 = getCellByAddress(sheet, "B7");
@@ -3201,9 +3249,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     if (index.isPresent()) {
                         int j = index.getAsInt();
                         if (j > 0) {
-                            Object o = bladeRedis.get("periodId" + list.get(j - 1).getId() + "lastEndChangeMoneySum");
-                            if (o != null) {
-                                lastEndChangeMoney = (BigDecimal) o;
+                            //Object o = bladeRedis.get("periodId" + list.get(j - 1).getId() + "lastEndChangeMoneySum");
+                            BigDecimal amount=getMeterItem(list.get(j - 1).getId(),"本期末累计变更");
+                            if (amount != null) {
+                                lastEndChangeMoney = amount;
                             }
                         }
                     }
@@ -3262,7 +3311,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             BigDecimal lastEndChangeMoneySum = lastEndChangeMoney.add(changemoneySum);
             Cell g5 = getCellByAddress(sheet, "G5");
             g5.setCellValue(lastEndChangeMoneySum.toString());
-            bladeRedis.set("periodId" + periodId + "lastEndChangeMoneySum", lastEndChangeMoneySum);
+            //bladeRedis.set("periodId" + periodId + "lastEndChangeMoneySum", lastEndChangeMoneySum);
+            saveMeterItem(periodId,"本期末累计变更",lastEndChangeMoneySum);
             //------------------------------------------------------------变更后合同价------------------------------------------------------------
             Cell i5 = getCellByAddress(sheet, "I5");
             i5.setCellValue(changeMoneyNew.toString());
@@ -3441,13 +3491,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
             //---------------------------结果存储redis---------------------------------
             //上期末累计扣取保留金
-            redisTemplate.opsForValue().set(MeasurementStorage.PRE_END_RESERVE_MONEY + redisId, lastEndDeduct.toString());
+            //redisTemplate.opsForValue().set(MeasurementStorage.PRE_END_RESERVE_MONEY + redisId, lastEndDeduct.toString());
+            saveMeterItem(periodId,"上期末累计扣取保留金",lastEndDeduct);
             //本期扣取保留金
-            redisTemplate.opsForValue().set(MeasurementStorage.CUR_END_RESERVE_MONEY + redisId, deductionMoney.toString());
+            //redisTemplate.opsForValue().set(MeasurementStorage.CUR_END_RESERVE_MONEY + redisId, deductionMoney.toString());
+            saveMeterItem(periodId,"本期扣取保留金",deductionMoney);
             //本期末累计扣取保留金
-            redisTemplate.opsForValue().set(MeasurementStorage.CUR_END_RESERVE_MONEY_SUM + redisId, endDeductionMoney.toString());
+            //redisTemplate.opsForValue().set(MeasurementStorage.CUR_END_RESERVE_MONEY_SUM + redisId, endDeductionMoney.toString());
+            saveMeterItem(periodId,"本期末累计扣取保留金",endDeductionMoney);
             //本期计量
-            redisTemplate.opsForValue().set(MeasurementStorage.CUR_MEASUREMENT + redisId, AllcurrentMeterTotal.toString());
+            //redisTemplate.opsForValue().set(MeasurementStorage.CUR_MEASUREMENT + redisId, AllcurrentMeterTotal.toString());
+            saveMeterItem(periodId,"本期计量",AllcurrentMeterTotal);
 
             String file_path = FileUtils.getSysLocalFileUrl();
             String locationFile = file_path + SnowFlakeUtil.getId() + ".xlsx";
@@ -3467,10 +3521,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         reportResult.setPdfPath(bladeFile.getPdfUrl());
         reportResult.setName("中间支付审核表");
         return reportResult;
-
     }
 
 
+
     /**
      * 获取上期末的数据
      *
@@ -3595,12 +3649,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             //根据坐标获取单元格
             Cell c = getCellByAddress(sheet, "E6");
             //本期计量
-            Object o = bladeRedis.get("periodId:" + periodId + "nowMoney");
-            BigDecimal value = new BigDecimal(0);
-            if (ObjectUtil.isNotEmpty(o) && o instanceof BigDecimal) {
-                value = (BigDecimal) o;
-            }
-            c.setCellValue(value.toString());
+            //Object o = bladeRedis.get("periodId:" + periodId + "nowMoney");
+             BigDecimal amount= getMeterItem(periodId,"本期实际支付");
+            c.setCellValue(amount.toString());
             if (periodId.equals(1867838908899852290L)) {
                 Cell f22 = getCellByAddress(sheet, "F22");
                 f22.setCellValue("2024年10月30日");
@@ -3687,10 +3738,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     int j = index.getAsInt();
                     if (j > 0) {
                         //根据期数ID,章节号获取
-                        Object o = bladeRedis.get("periodId:" + list.get(j - 1).getId() + "formNumber:" + key + "nowEndMoney");
-                        if (ObjectUtil.isNotEmpty(o)) {
-                            beforeEndMoney = beforeEndMoney.add((BigDecimal) o);
-                        }
+                        //Object o = bladeRedis.get("periodId:" + list.get(j - 1).getId() + "formNumber:" + key + "nowEndMoney");
+                         BigDecimal o=  getMeterFormNumber(list.get(j - 1).getId(),key,"now_end_money");
+                         if(o!=null){
+                             beforeEndMoney = beforeEndMoney.add(o);
+                         }
                         if (!beforeEndMoney.equals(BigDecimal.ZERO)) {
                             //到上期末完成
                             monthlyReport.setBeforeEndMoney(beforeEndMoney);
@@ -3705,9 +3757,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             }
             //本期完成,计算清单支付表时存在redis里的值。期数ID+章编号
-            Object o = bladeRedis.get("periodId:" + periodId + "formNumber:" + key + "nowMoney");
+            //Object o = bladeRedis.get("periodId:" + periodId + "formNumber:" + key + "nowMoney");
+            BigDecimal o=getMeterFormNumber(periodId,key,"now_money");
             if (ObjectUtil.isNotEmpty(o)) {
-                monthlyReport.setNowMoney((BigDecimal) o);
+                monthlyReport.setNowMoney(o);
                 BigDecimal percentage = monthlyReport.getNowMoney().divide(monthlyReport.getAfterCurrentMeterMoney(), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
                 percentage = percentage.setScale(2, BigDecimal.ROUND_HALF_UP); // 设置小数位数为2
                 if (percentage.compareTo(BigDecimal.ZERO) != 0) {
@@ -3737,7 +3790,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
             }
             //到本期末完成 本期ID+章节号
-            bladeRedis.set("periodId:" + periodId + "formNumber:" + key + "nowEndMoney", monthlyReport.getNowEndMoney());
+            //bladeRedis.set("periodId:" + periodId + "formNumber:" + key + "nowEndMoney", monthlyReport.getNowEndMoney());
+            saveMeterFormNumber(periodId,key,"now_end_money",monthlyReport.getNowMoney());
             values.add(monthlyReport);
         }
         //处理跨期 到上期末完成金额和工程量
@@ -3754,9 +3808,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             List<ContractMeterPeriod> list2 = list.subList(0, j);
                             BigDecimal money = new BigDecimal("0");
                             for (ContractMeterPeriod period : list2) {
-                                Object o = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getChapterSeq() + "nowMoney");
+                                //Object o = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getChapterSeq() + "nowMoney");
+                               BigDecimal o= getMeterFormNumber(period.getId(),vo1.getChapterSeq(),"now_money");
                                 if (o != null) {
-                                    BigDecimal money1 = (BigDecimal) o;
+                                    BigDecimal money1 = o;
                                     money = money.add(money1);
                                 }
                             }
@@ -3767,7 +3822,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 vo1.setNowEndMoney(money);
                             }
                             if (vo1.getNowEndMoney().compareTo(BigDecimal.ZERO) != 0) {
-                                bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getChapterSeq() + "nowEndMoney", vo1.getNowEndMoney());
+                                //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getChapterSeq() + "nowEndMoney", vo1.getNowEndMoney());
+                                saveMeterFormNumber(periodId,vo1.getChapterSeq(),"now_end_money",vo1.getNowEndMoney());
                             }
                         }
                     }
@@ -3887,13 +3943,16 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
         MonthlyReportVo m13 = new MonthlyReportVo();
         m13.setFormName("保留金");
-        //上期末扣取保留金
-        String s = redisTemplate.opsForValue().get(MeasurementStorage.PRE_END_RESERVE_MONEY + redisId);
-        if (StringUtil.isNotBlank(s)) {
-            m13.setBeforeEndMoney(new BigDecimal(s));
-        }
-        m13.setNowMoney(new BigDecimal(redisTemplate.opsForValue().get(MeasurementStorage.CUR_END_RESERVE_MONEY + redisId)));
-        m13.setNowEndMoney(new BigDecimal(redisTemplate.opsForValue().get(MeasurementStorage.CUR_END_RESERVE_MONEY_SUM + redisId)));
+        //上期末累计扣取保留金
+        //String s = redisTemplate.opsForValue().get(MeasurementStorage.PRE_END_RESERVE_MONEY + redisId);
+        BigDecimal s=getMeterItem(periodId,"上期末累计扣取保留金");
+        if (s!=null) {
+            m13.setBeforeEndMoney(s);
+        }
+        //m13.setNowMoney(new BigDecimal(redisTemplate.opsForValue().get(MeasurementStorage.CUR_END_RESERVE_MONEY + redisId)));
+        m13.setNowMoney(getMeterItem(periodId,"本期扣取保留金"));
+        //m13.setNowEndMoney(new BigDecimal(redisTemplate.opsForValue().get(MeasurementStorage.CUR_END_RESERVE_MONEY_SUM + redisId)));
+        m13.setNowEndMoney(getMeterItem(periodId,"本期末累计扣取保留金"));
         values.add(m13);
 
         MonthlyReportVo m14 = new MonthlyReportVo();
@@ -4004,7 +4063,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             m19.setNowEndC(percentage6 + "%");
         }
         //本期实际支付金额
-        bladeRedis.set("periodId:" + periodId + "nowMoney", m19.getNowMoney());
+        //bladeRedis.set("periodId:" + periodId + "nowMoney", m19.getNowMoney());
+        saveMeterItem(periodId,"本期实际支付",m19.getNowMoney());
         values.add(m19);
         setZeroBigDecimalFieldsToNullInList(values);
         List<MonthlyReportVo> vos = new ArrayList<>(values);
@@ -4231,8 +4291,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             vo.setNowTotal(detailVO.getAllMeterTotal());
             //本期完成金额
             vo.setNowMoney(detailVO.getAllMeterTotal().multiply(detailVO.getCurrentPrice()).setScale(0, RoundingMode.HALF_UP));
-            bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "nowTotal", vo.getNowTotal());
-            bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "nowMoney", vo.getNowMoney());
+            //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "nowTotal", vo.getNowTotal());
+            saveMeterFormNumber(periodId,vo.getFormNumber(),"now_total",vo.getNowTotal());
+            //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "nowMoney", vo.getNowMoney());
+            saveMeterFormNumber(periodId,vo.getFormNumber(),"now_money",vo.getNowMoney());
+
 
             //大于0表示有上期的 需要添加上期末数据
             if (changeFormDetailMap.size() > 0) {
@@ -4241,8 +4304,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 for (Map.Entry<String, List<MeterInventoryDetailVO>> entry : changeFormDetailMap.entrySet()) {
                     for (MeterInventoryDetailVO changevo : entry.getValue()) {
                         if (changevo.getFormNumber().equals(vo.getFormNumber())) {
-                            b1 = bladeRedis.get("periodId:" + entry.getKey() + "formNumber:" + vo.getFormNumber() + "detailsTotal");
-                            b2 = bladeRedis.get("periodId:" + entry.getKey() + "formNumber:" + vo.getFormNumber() + "detailsMoney");
+                            //b1 = bladeRedis.get("periodId:" + entry.getKey() + "formNumber:" + vo.getFormNumber() + "detailsTotal");
+                            b1=getMeterFormNumber(Long.parseLong(entry.getKey()),vo.getFormNumber(),"now_end_total");
+                            //b2 = bladeRedis.get("periodId:" + entry.getKey() + "formNumber:" + vo.getFormNumber() + "detailsMoney");
+                            b2=getMeterFormNumber(Long.parseLong(entry.getKey()),vo.getFormNumber(),"now_end_money");
                             break;
                         }
                     }
@@ -4267,12 +4332,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 vo.setNowEndMoney(vo.getNowMoney().setScale(0, RoundingMode.HALF_UP));
             }
             if (ObjectUtil.isNotEmpty(vo.getNowEndTotal()) && !vo.getNowEndTotal().equals(BigDecimal.ZERO)) {
-                bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "detailsTotal", vo.getNowEndTotal());
+                //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "detailsTotal", vo.getNowEndTotal());
+                saveMeterFormNumber(periodId,vo.getFormNumber(),"now_end_total",vo.getNowEndTotal());
             }
             if (ObjectUtil.isNotEmpty(vo.getNowEndMoney()) && !vo.getNowEndMoney().equals(BigDecimal.ZERO)) {
-                bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "detailsMoney", vo.getNowEndMoney());
+                //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo.getFormNumber() + "detailsMoney", vo.getNowEndMoney());
+                saveMeterFormNumber(periodId,vo.getFormNumber(),"now_end_money",vo.getNowEndMoney());
             }
-
             list1.add(vo);
         }
         list1 = list1.stream().sorted(Comparator.comparing(MeterInventoryVO1::getSort)).collect(Collectors.toList());
@@ -4291,16 +4357,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             BigDecimal total = new BigDecimal("0");
                             BigDecimal money = new BigDecimal("0");
                             for (ContractMeterPeriod period : list2) {
-                                Object o = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowMoney");
-                                Object o1 = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowTotal");
-                                if (o != null) {
-                                    BigDecimal money1 = (BigDecimal) o;
-                                    money = money.add(money1);
-                                }
-                                if (o1 != null) {
-                                    BigDecimal total1 = (BigDecimal) o1;
-                                    total = total.add(total1);
-                                }
+                                //Object o = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowMoney");
+                                BigDecimal money1=getMeterFormNumber(period.getId(),vo1.getFormNumber(),"now_money");
+                                //Object o1 = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowTotal");
+                                BigDecimal total1=getMeterFormNumber(period.getId(),vo1.getFormNumber(),"now_total");
+                                money = money.add(money1);
+                                total = total.add(total1);
                             }
                             vo1.setBeforeEndMoney(money);
                             vo1.setBeforeEndTotal(total);
@@ -4311,10 +4373,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 vo1.setNowEndTotal(total.add(vo1.getNowTotal()));
                             }
                             if (ObjectUtil.isNotEmpty(vo1.getNowEndTotal()) && vo1.getNowEndTotal().compareTo(BigDecimal.ZERO) != 0) {
-                                bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getFormNumber() + "detailsTotal", vo1.getNowEndTotal());
+                                //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getFormNumber() + "detailsTotal", vo1.getNowEndTotal());
+                                saveMeterFormNumber(periodId,vo1.getFormNumber(),"now_end_total",vo1.getNowEndTotal());
                             }
                             if (ObjectUtil.isNotEmpty(vo1.getNowEndMoney()) && vo1.getNowEndMoney().compareTo(BigDecimal.ZERO) != 0) {
-                                bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getFormNumber() + "detailsMoney", vo1.getNowEndMoney());
+                                //bladeRedis.set("periodId:" + periodId + "formNumber:" + vo1.getFormNumber() + "detailsMoney", vo1.getNowEndMoney());
+                                saveMeterFormNumber(periodId,vo1.getFormNumber(),"now_end_money",vo1.getNowEndMoney());
+
                             }
 
                         }
@@ -4520,9 +4585,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     listUrl.add(bladeFile.getPdfUrl());
                 }
                 //本期末完成金额 本期ID+章节号
-                bladeRedis.set("periodId:" + periodId + "formNumber:" + listEntry.getKey() + "nowEndMoney", totalNowEndMoney);
+                //bladeRedis.set("periodId:" + periodId + "formNumber:" + listEntry.getKey() + "nowEndMoney", totalNowEndMoney);
+                saveMeterFormNumber(periodId, listEntry.getKey(), "now_end_money", totalNowEndMoney);
                 //本期完成金额 本期ID+章节号
-                bladeRedis.set("periodId:" + periodId + "formNumber:" + listEntry.getKey() + "nowMoney", totalNowMoney);
+                //bladeRedis.set("periodId:" + periodId + "formNumber:" + listEntry.getKey() + "nowMoney", totalNowMoney);
+                saveMeterFormNumber(periodId, listEntry.getKey(), "now_money", totalNowMoney);
 
             }
             collectionUtilsClient.mergePdfPublicMethods(listUrl, localImgUrl);

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

@@ -61,7 +61,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());
         //节点公式同步
@@ -75,6 +75,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()
@@ -86,7 +88,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()
@@ -96,6 +98,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()

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

@@ -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());
     }
 
     /**

+ 18 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -2788,7 +2788,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     @Override
     public boolean checkNodeAllDate(WbsTreeContract contract) {
         List<Integer>tableOwners=new ArrayList<>();
-        if(contract.getTableOwner()==null){
+        if(StringUtils.isEmpty(contract.getTableOwner())){
             tableOwners.add(1);
             tableOwners.add(2);
             tableOwners.add(3);
@@ -2824,6 +2824,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return true;
     }
 
+
     /**
      * 展开所有合并单元格并将值填充到每个单元格
      * @param sheet Excel工作表
@@ -3947,4 +3948,20 @@ public static boolean hasConflictingCodes(List<ImportTreeDto> list) {
                 .in(WbsTreeContract::getPId, pIds)
                 .eq(WbsTreeContract::getIsDeleted, 0));
     }
+
+
+    @Override
+    public boolean checkAllNodeDate(Long projectId, Long contractId) {
+        //查询出当前项目或合同段下所有的表单
+      List<WbsTreeContract>list= baseMapper.selectListForcheckAllNodeDate(projectId,contractId);
+        //将表单通过pid分组
+        Map<Long, List<WbsTreeContract>> map = list.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
+        for (Map.Entry<Long, List<WbsTreeContract>> entry : map.entrySet()) {
+            List<WbsTreeContract> wbsTreeContractList = entry.getValue();
+            for (WbsTreeContract contract : wbsTreeContractList) {
+
+            }
+        }
+        return false;
+    }
 }