Jelajahi Sumber

Merge remote-tracking branch 'origin/dev' into dev

LHB 4 minggu lalu
induk
melakukan
de88480637

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

+ 29 - 0
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">

+ 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);
 

+ 2 - 1
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

+ 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")) {