浏览代码

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java
liuyc 2 年之前
父节点
当前提交
c0b704cefe
共有 25 个文件被更改,包括 308 次插入188 次删除
  1. 27 0
      blade-common/src/main/java/org/springblade/common/utils/FileUtils.java
  2. 11 0
      blade-common/src/main/java/org/springblade/common/vo/FileSize.java
  3. 2 1
      blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/NewIOSSClient.java
  4. 2 0
      blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/NewBladeFile.java
  5. 1 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java
  6. 2 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
  7. 4 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/NewIOSSClientImpl.java
  8. 21 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java
  9. 5 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java
  10. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ExcelEditCallback.java
  11. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java
  12. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java
  13. 4 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  14. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  15. 55 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  16. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  17. 51 97
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  18. 25 57
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  19. 41 14
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java
  20. 14 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FormulaUtil.java
  21. 1 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  22. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java
  23. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  24. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  25. 20 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

+ 27 - 0
blade-common/src/main/java/org/springblade/common/utils/FileUtils.java

@@ -1,10 +1,16 @@
 package org.springblade.common.utils;
 
+import lombok.SneakyThrows;
+import org.springblade.common.vo.FileSize;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 
 public class FileUtils  {
@@ -31,4 +37,25 @@ public class FileUtils  {
         return convertFile;
     }
 
+    //获取文件大小
+    public static List<FileSize> getOssFileSize(List<String> fileList){
+        List<FileSize> reData =new ArrayList<>();
+        if(fileList!=null){
+            for(String fileUrl:fileList){
+                FileSize file =new FileSize();
+                file.setFileUrl(fileUrl);
+                try {
+                    URLConnection  openConnection = new URL(fileUrl).openConnection();
+                    int contentLength = openConnection.getContentLength();
+                    Double fileLength = Double.parseDouble(contentLength+"");
+                    file.setFileSize(Math.ceil(fileLength/1024));
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                reData.add(file);
+            }
+        }
+        return  reData;
+    }
+
 }

+ 11 - 0
blade-common/src/main/java/org/springblade/common/vo/FileSize.java

@@ -0,0 +1,11 @@
+package org.springblade.common.vo;
+
+import lombok.Data;
+
+@Data
+public class FileSize {
+
+    private String fileUrl;
+
+    private double fileSize;
+}

+ 2 - 1
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/NewIOSSClient.java

@@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 @FeignClient(value = AppConstant.APPLICATION_RESOURCE_NAME)
 public interface NewIOSSClient {
 
@@ -29,5 +31,4 @@ public interface NewIOSSClient {
 
     @PostMapping(REMOVE_PDF_FILE)
     void removeFile(@RequestParam String fileName);
-
 }

+ 2 - 0
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/vo/NewBladeFile.java

@@ -11,4 +11,6 @@ public class NewBladeFile {
     private String originalName;
     private Long attachId;
     private Integer page;
+    private Long fileSize;
+    private Long fileType;
 }

+ 1 - 1
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -294,7 +294,7 @@ public class LargeFileEndpoint {
 					newBladeFile = this.commonFileClient.pngOrJpgToPdf(multipartFile);
 				}
 				BeanUtils.copyProperties(bladeFile, newBladeFile);
-
+				newBladeFile.setFileSize(multipartFile.getSize()/1024);
 				//删除本地文件
 				file1.delete();
 				iLargeFileService.updateLargeFileDeleted(param.getIdentifier());

+ 2 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java

@@ -207,6 +207,7 @@ public class OssEndpoint {
 		}
 
 		BeanUtils.copyProperties(bladeFile, newBladeFile);
+		newBladeFile.setFileSize(file.getSize()/1024);
 		return R.data(newBladeFile);
 	}
 
@@ -243,6 +244,7 @@ public class OssEndpoint {
 		}
 
 		BeanUtils.copyProperties(bladeFile, newBladeFile);
+		newBladeFile.setFileSize(file.getSize()/1024);
 		return R.data(newBladeFile.getPdfUrl());
 	}
 

+ 4 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/NewIOSSClientImpl.java

@@ -2,10 +2,12 @@ package org.springblade.resource.feign;
 
 import lombok.AllArgsConstructor;
 import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.oss.model.OssFile;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.resource.builder.oss.OssBuilder;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -13,6 +15,8 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 
 @NonDS
 @RestController

+ 21 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java

@@ -59,12 +59,16 @@ public class ArchivesAutoVO extends ArchivesAuto {
 	@ApiModelProperty("年")
 	private String year;
 
+	private List<String> years;
+
 	/**
 	 * 年
 	 */
 	@ApiModelProperty("月")
 	private String month;
 
+	private List<String> months;
+
 	/**
 	 * 输入框查询条件
 	 */
@@ -84,11 +88,26 @@ public class ArchivesAutoVO extends ArchivesAuto {
 	 */
 	private String secretLevelValue;
 
+	/**
+	 * 搜索密级集合
+	 */
+	private List<String> secretLevels;
+
 	/**
 	 * 保管期限(单位/年)
 	 */
 	private String storageTimeValue;
 
+	/**
+	 * 搜索期限集合
+	 */
+	private List<String> storageTimes;
+
+	/**
+	 * 搜索类别集合
+	 */
+	private List<String> carrierTypes;
+
 	@ApiModelProperty("批量保存")
 	private List<ArchivesAutoVO> list;
 	/**
@@ -152,5 +171,7 @@ public class ArchivesAutoVO extends ArchivesAuto {
 		 * 责任者
 		 */
 		private String dutyUser;
+
+		private  String archiveId;
 	}
 }

+ 5 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java

@@ -256,5 +256,9 @@ public class ArchiveFile extends BaseEntity {
 
 	@ApiModelProperty("文件大小")
 	Long fileSize;
-
+	/**
+	 * 数据源类型,1原生,2数字化
+	 */
+	@ApiModelProperty("数据源类型,1原生,2数字化")
+	private Integer sourceType;
 }

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ExcelEditCallback.java

@@ -15,7 +15,7 @@ public class ExcelEditCallback {
     private Integer status;
 
     // excel 的唯一标识
-    private Long key;
+    private String key;
 
     // 返回码
     private Integer error;

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java

@@ -79,6 +79,9 @@ public class ArchiveFileAutoController extends BladeController {
                             saveVo.setIsCertification(new Integer("0").equals(saveVo.getIsNeedCertification()) ? 1 : 0);
                             saveVo.setArchiveId(archive.getId());
                             saveVo.setOriginId(archive.getId());
+                            String name = saveVo.getFileUrl().substring(saveVo.getFileUrl().lastIndexOf(".")+1);
+                            saveVo.setFileType((long) FileUtils.getFileType(name));
+                            saveVo.setSourceType(2);
                             list.add(saveVo);
                             if(saveVo.getFilePage() != null && !saveVo.getFilePage().equals("")){
                                 pageN = pageN + saveVo.getFilePage();

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java

@@ -87,6 +87,9 @@ public class ArchiveFileController extends BladeController {
                     saveVo.setSort(l+i);
                     saveVo.setStatus(new Integer("0").equals(saveVo.getIsApproval()) ? 2 : 0);
                     saveVo.setIsCertification(new Integer("0").equals(saveVo.getIsNeedCertification()) ? 1 : 0);
+                    String name = saveVo.getFileUrl().substring(saveVo.getFileUrl().lastIndexOf(".")+1);
+                    saveVo.setFileType((long) FileUtils.getFileType(name));
+                    saveVo.setSourceType(2);
                     i++;
                 }
             }

+ 4 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -35,6 +35,8 @@ import org.springblade.archive.wrapper.ArchivesAutoWrapper;
 import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  *  控制器
  *
@@ -101,8 +103,8 @@ public class ArchivesAutoController extends BladeController {
 			@ApiImplicitParam(name = "queryValue", value = "输入框模糊搜索"),
 			@ApiImplicitParam(name = "searchType", value = "搜索类型1案卷2文件")
 	})
-	public R<IPage<ArchivesAuto>> pageByArchivesAuto(ArchivesAutoVO archivesAuto) {
-		IPage<ArchivesAuto> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
+	public R<IPage<ArchivesAutoVO>> pageByArchivesAuto(ArchivesAutoVO archivesAuto) {
+		IPage<ArchivesAutoVO> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
 		return R.data(pages);
 	}
 

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

@@ -56,4 +56,6 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	 *  根据项目id获取所有档案
 	 */
 	List<ArchivesAutoDTO> getListByProjectId(@Param("projectId") Long projectId);
+
+    List<ArchivesAutoVO> pageByArchivesAuto(IPage page, @Param("vo") ArchivesAutoVO vo);
 }

+ 55 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="org.springblade.archive.mapper.ArchivesAutoMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="archivesAutoResultMap" type="org.springblade.archive.entity.ArchivesAuto">
+    <resultMap id="archivesAutoResultMap" type="org.springblade.archive.vo.ArchivesAutoVO">
         <result column="id" property="id"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>
@@ -47,8 +47,18 @@
         <result column="is_auto_file" property="isAutoFile"/>
         <result column="auto_file_sort" property="autoFileSort"/>
         <result column="filing_unit" property="filingUnit"/>
+        <collection property="approvalFileList" javaType="java.util.List"
+                    select="approvalFile"
+                    column="{archiveId=id}">
+        </collection>
     </resultMap>
 
+    <select id="approvalFile" resultType="org.springblade.archive.vo.ArchivesAutoVO$ApprovalFile">
+        <if test="archiveId!=null">
+            select * from u_archive_file where archive_id = #{archiveId}
+        </if>
+    </select>
+
 
     <select id="selectArchivesAutoPage" resultMap="archivesAutoResultMap">
         select * from u_archives_auto where is_deleted = 0
@@ -124,6 +134,50 @@
         from u_archives_auto
         where project_id=#{projectId};
     </select>
+    <select id="pageByArchivesAuto" resultMap="archivesAutoResultMap">
+        select uaa.* from u_archives_auto uaa left join u_archive_file uaf on uaa.id = uaf.archive_id
+        where uaa.is_deleted = 0
+        <if test="vo.projectId != null and vo.projectId != ''">
+            and uaa.project_id = #{vo.projectId}
+        </if>
+        <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
+            and uaa.name like concat('%',#{vo.queryValue},'%')
+        </if>
+        <if test="vo.searchType == 2 and vo.queryValue != null and vo.queryValue != ''">
+            and uaf.file_name like concat('%',#{vo.queryValue},'%')
+        </if>
+        <if test="vo.storageTimes != null and vo.storageTimes != ''">
+            and uaa.storage_time in
+            <foreach collection="vo.storageTimes" item="storageTime" open="(" separator="," close=")">
+                #{storageTime}
+            </foreach>
+        </if>
+        <if test="vo.secretLevels != null and vo.secretLevels != ''">
+            and uaa.secret_level in
+            <foreach collection="vo.secretLevels" item="secretLevel" open="(" separator="," close=")">
+                #{secretLevel}
+            </foreach>
+        </if>
+        <if test="vo.carrierTypes != null and vo.carrierTypes != ''">
+            and uaa.carrier_type in
+            <foreach collection="vo.carrierTypes" item="carrierType" open="(" separator="," close=")">
+                #{carrierType}
+            </foreach>
+        </if>
+        <if test="vo.years != null and vo.years != ''">
+            and
+            <foreach collection="vo.years" item="year" separator=" or" open="(" close=")" >
+                #{year} BETWEEN  DATE_FORMAT(uaa.start_date,'%Y') and DATE_FORMAT(uaa.end_date ,'%Y')
+            </foreach>
+        </if>
+        <if test="vo.months != null and vo.months != ''">
+            and
+            <foreach collection="vo.months" item="month" separator=" or" open="(" close=")">
+                #{month} BETWEEN  DATE_FORMAT(uaa.start_date,'%c') and DATE_FORMAT(uaa.end_date ,'%c')
+            </foreach>
+        </if>
+        GROUP BY uaa.id
+    </select>
 
 
 </mapper>

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -38,7 +38,7 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	 */
 	IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto);
 
-	IPage<ArchivesAuto> pageByArchivesAuto(ArchivesAutoVO archivesAuto);
+	IPage<ArchivesAutoVO> pageByArchivesAuto(ArchivesAutoVO archivesAuto);
 
 	IPage<ArchivesAutoVO> selectArchivesAutoFilePage(ArchivesAutoVO queryVo);
 

+ 51 - 97
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -19,6 +19,7 @@ import org.springblade.business.entity.ArchiveFile;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 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.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
@@ -68,6 +69,10 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
     public void test1() {
 
         Long pkeyId = SnowFlakeUtil.getId();
+//        String  file2 = "upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx";
+//        List<String> files = new ArrayList<>();
+//        files.add(file2);
+//        BladeFile bladeFile = newIOSSClient.uploadFile1(file2,"123");
 
         String file_path = "D:\\tmp";
         String excelUrl = file_path +  "\\备考表.xlsx";
@@ -98,6 +103,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         Long projectId = 1578599210897772545L;
 
         ArchivesAuto archivesAuto = new ArchivesAuto();
+        archivesAuto.setId(SnowFlakeUtil.getId());
         archivesAuto.setProjectId(projectId);
         archivesAuto.setName("案卷提名");
         archivesAuto.setFileNumber("档号");
@@ -217,6 +223,14 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
             buildFrontPdf(archivesAuto,number, variables,backUrls);
         }
 
+        //将封面写入archivesAuto
+        frontUrls.addAll(backUrls);
+
+        //统计文件大小
+        flushFileSize(archivesAuto,archiveFileList,frontUrls);
+
+        String joinedUrls = String.join(", ", frontUrls);
+        archivesAuto.setOutUrl(joinedUrls);
     }
 
     /**
@@ -368,9 +382,17 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         //合并成一个
         if (localUrls.size() > 1) {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            FileUtils.PdfCopyPublicMethods(bos, localUrls);
-            BladeFile bladeFile = newIOSSClient.updateFile(bos.toByteArray(),fileName);
+            Long id = SnowFlakeUtil.getId();
+            String trialPdf = file_path + "/pdf/" + id + ".pdf";
+
+            //合并当前所有选择的试验pdf
+            FileUtils.mergePdfPublicMethods(localUrls, trialPdf);
+            BladeFile bladeFile = this.newIOSSClient.uploadFile(fileName + ".pdf", trialPdf);
+
+
+//            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+//            FileUtils.PdfCopyPublicMethods(bos, localUrls);
+//            BladeFile bladeFile = newIOSSClient.updateFile(bos.toByteArray(),fileName + ".pdf");
             if (bladeFile!= null ) {
                 urls.add(bladeFile.getLink());
             }
@@ -585,10 +607,12 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         // 将日期赋值给startDate和endDate
         if (!minDate.isEmpty()) {
-            archive.setStartDate(LocalDateTime.parse(minDate, formatter));
+            LocalDateTime localDateTime = FormulaUtil.parseStringToLocalDateTime(minDate,"yyyyMMdd");
+            archive.setStartDate(localDateTime);
         }
         if (!maxDate.isEmpty()) {
-            archive.setEndDate(LocalDateTime.parse(maxDate, formatter));
+            LocalDateTime localDateTime = FormulaUtil.parseStringToLocalDateTime(maxDate,"yyyyMMdd");
+            archive.setEndDate(localDateTime);
         }
 
         Map<String, Object> archivesAutoMap = new ObjectMapper().convertValue(archive, Map.class);
@@ -626,92 +650,6 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         return url;
     }
 
-    /**
-     * @Description  给多个PDF添加页码,按顺序依次累加
-     * @Param [uris, storeName]
-     * @return java.util.List<java.lang.String>
-     * @Author yangyj
-     * @Date 2021.12.17 14:21
-     **/
-    public static List<String> doForPageNumberUseItextpdf(List<String> uris) throws IOException {
-        List<String> result = new ArrayList<>();
-        if(uris!= null && uris.size() > 0){
-            int cursor=0;
-            for(String u:uris) {
-                try {
-                    String url="";
-                    //todo 匿名访问特性
-                    String temporaryVisitUrl=u;
-                    if(temporaryVisitUrl.indexOf("?")!=-1){
-                        url = temporaryVisitUrl;
-                    }else{
-                        int lastIndexOf = u.lastIndexOf("/");
-                        String prefix=u.substring(0,lastIndexOf+1);
-                        String suffix=u.substring(lastIndexOf+1);
-                        url = prefix+ URLEncoder.encode(suffix,"UTF-8");
-                    }
-
-                    PdfReader pdfReader = new PdfReader(url);
-                    ByteArrayOutputStream out = new ByteArrayOutputStream();
-                    PdfStamper pdfStamper = new PdfStamper(pdfReader, out);
-                    int index = 1;
-                    boolean fi;
-//                    String path = u.replaceAll(FileUtils.DOMAIN_REG, "").replaceAll(".((?i)(pdf))$", "").replace("folderFile", FolderFileHelper.ARCHIVED_FILE).replace("showtmp",FolderFileHelper.ARCHIVED_FILE);
-
-                    String page = "page" + (cursor + 1);
-                    do {
-                        PdfContentByte over = pdfStamper.getOverContent(index);
-                        if (over != null) {
-                            over.beginText();
-                            BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
-                            over.setFontAndSize(bf, 16);
-                            over.setTextMatrix(30, 300);
-
-
-                            PdfArray pa = pdfReader.getPageN(index).getAsArray(new PdfName("MediaBox"));
-                            int width = pa.getAsNumber(2).intValue();
-                            int heigh = pa.getAsNumber(3).intValue();
-
-                            if(width>heigh){
-                                //横表旋转270
-                                pdfReader.getPageN(index).put(PdfName.ROTATE, new PdfNumber(270)); // 顺时针旋转270°
-                                //横表旋转后打页码坐标不一样
-                                over.showTextAligned(Element.ALIGN_LEFT, String.valueOf(cursor + index), heigh - 35, 20, 0);
-                            }else{
-                                over.showTextAligned(Element.ALIGN_LEFT, String.valueOf(cursor + index), width - 35, 20, 0);
-                            }
-                            over.endText();
-                            index++;
-                            fi = true;
-                        } else {
-                            /*累加*/
-                            cursor += index-1;
-                            /*重置*/
-                            fi = false;
-                            index = 1;
-                        }
-                    } while (fi);
-                    pdfStamper.close();
-                    page = page + "-" + cursor + ".pdf";
-//                    int lastindex = path.lastIndexOf("/");
-//                    String fileName = path.substring(lastindex + 1) + "-" + page;
-
-                    //newIOSSClient.uploadFile()
-
-                    //result.add(AliyunOSSUtil.uploadFile(out.toByteArray(), fileName, path.substring(0, lastindex), ".pdf", storeName));
-                    out.close();
-                }catch(Exception e){
-                    System.out.println(u+"文件不存在");
-                    /*用来占位置空*/
-                    result.add("");
-                    e.printStackTrace();
-                }
-            }
-        }
-        return result;
-    }
-
-
     /**
      * 获取指定文件的pdf文件
      * @param file
@@ -731,19 +669,35 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
     }
 
     /**
-     * 获取案卷的大小
+     * 刷新文件大小
+     * @param archive
      * @param datas
      * @param frontUrls
-     * @return
      */
-    public Long getArchiveSize(List<ArchiveFile> datas,List<String> frontUrls){
-        //
-        return 0L;
+    public void flushFileSize(ArchivesAuto archive,List<ArchiveFile> datas,List<String> frontUrls){
 
-        //todo 生成相册内容,待补充
+        List<String> fileUrls = new ArrayList<>();
+        for (ArchiveFile file: datas) {
+            fileUrls.add(getPdfFileUrl(file));
+        }
 
+        fileUrls.addAll(frontUrls);
+        List<FileSize>  fileSizes = org.springblade.common.utils.FileUtils.getOssFileSize(fileUrls);
 
+        double totalSize = fileSizes.stream()
+                .mapToDouble(FileSize::getFileSize)
+                .sum();
+        Integer total = (int) Math.round(totalSize);
+        archive.setSize(total);
 
+        //todo 生成相册内容,待补充
+        int i = 0;
+        for (ArchiveFile file: datas) {
+            double size = fileSizes.get(i).getFileSize();
+            if (file.getFileSize()!= null) {
+                file.setFileSize(Math.round(size));
+            }
+        }
     }
 
 }

+ 25 - 57
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -68,65 +68,33 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	}
 
 	@Override
-	public IPage<ArchivesAuto> pageByArchivesAuto(ArchivesAutoVO vo) {
-		IPage<ArchivesAuto> page = new Page<>(vo.getCurrent(),vo.getSize());
-		LambdaQueryWrapper<ArchivesAuto> lqw = new LambdaQueryWrapper<>();
-		lqw.eq(ArchivesAuto::getProjectId,vo.getProjectId());
-		//过滤日期
-		if (StringUtils.isNotBlank(vo.getYear())){
-			if (StringUtils.isNotBlank(vo.getMonth())){
-				int day;
-				if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(vo.getMonth())){
-					day = 31;
-				}else if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(vo.getMonth())){
-					day = 30;
-				}else {
-					if (Integer.parseInt(vo.getYear()) % 4 == 0){
-						day = 29;
-					}else {
-						day = 28;
-					}
-				}
-				lqw.ge(ArchivesAuto::getStartDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), Integer.parseInt(vo.getMonth()), 1, 0, 0, 0));
-				lqw.le(ArchivesAuto::getEndDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), Integer.parseInt(vo.getMonth()), day, 0, 0, 0));
-			}else {
-				lqw.ge(ArchivesAuto::getStartDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), 1, 1, 0, 0, 0));
-				lqw.ge(ArchivesAuto::getEndDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), 12, 31, 0, 0, 0));
-			}
-		}else if (StringUtils.isNotBlank(vo.getMonth())){
-			throw new RuntimeException("请选择年");
+	public IPage<ArchivesAutoVO> pageByArchivesAuto(ArchivesAutoVO vo) {
+		IPage<ArchivesAutoVO> page = new Page<>();
+		if (StringUtils.isNotBlank(vo.getStorageTime())) {
+			vo.setStorageTimes(Arrays.asList(vo.getStorageTime().split(",")));
 		}
-		lqw.eq(StringUtils.isNotBlank(vo.getStorageTime()),ArchivesAuto::getStorageTime,vo.getStorageTime())
-				.eq(StringUtils.isNotBlank(vo.getSecretLevel()),ArchivesAuto::getSecretLevel,vo.getSecretLevel())
-					.eq(StringUtils.isNotBlank(vo.getCarrierType()),ArchivesAuto::getCarrierType,vo.getCarrierType());
-		//按案卷搜索完成,判断是否按文件搜索
-		if (vo.getSearchType() == 1){
-			lqw.like(StringUtils.isNotBlank(vo.getQueryValue()),ArchivesAuto::getName,vo.getQueryValue());
-			this.page(page,lqw);
-			return page;
-		}else {
-			List<ArchivesAuto> list = this.list(lqw);
-			list = list.stream().filter(auto -> {
-				List<ArchiveFile> files = archiveFileClient.getArchiveFileByArchivesId(auto.getId() + "", "");
-				if (files != null && files.size() > 0){
-					files = files.stream().filter(file->file.getFileName().contains(vo.getQueryValue())).collect(Collectors.toList());
-				}
-				if (files != null && files.size() > 0){
-					return true;
-				}else {
-					return false;
-				}
-			}).collect(Collectors.toList());
-			if (list != null && list.size() > 0){
-				List<Long> ids = list.stream().map(l -> l.getId()).collect(Collectors.toList());
-				this.page(page,new LambdaQueryWrapper<ArchivesAuto>().in(ArchivesAuto::getId,ids));
-				return page;
-			}else {
-				return  null;
-			}
-
+		if (StringUtils.isNotBlank(vo.getSecretLevel())){
+			vo.setSecretLevels(Arrays.asList(vo.getSecretLevel().split(",")));
 		}
-
+		if (StringUtils.isNotBlank(vo.getCarrierType())) {
+			vo.setCarrierTypes(Arrays.asList(vo.getCarrierType().split(",")));
+		}
+		if (StringUtils.isNotBlank(vo.getYear())) {
+			vo.setYears(Arrays.asList(vo.getYear().split(",")));
+		}
+		if (StringUtils.isNotBlank(vo.getMonth())) {
+			vo.setMonths(Arrays.asList(vo.getMonth().split(",")));
+		}
+		List<ArchivesAutoVO> archivesAutos = baseMapper.pageByArchivesAuto(page, vo);
+		archivesAutos.stream().forEach(aa->{
+			if (StringUtils.isNotBlank(aa.getStorageTime())){
+				aa.setStorageTimeValue("9999".equals(aa.getStorageTime())?"永久":("30".equals(aa.getStorageTime())?"30年":"10年"));
+			}
+			if (StringUtils.isNotBlank(aa.getSecretLevel())){
+				aa.setSecretLevelValue("1".equals(aa.getSecretLevel())?"机密":("2".equals(aa.getSecretLevel())?"绝密":"秘密"));
+			}
+		});
+		return page.setRecords(archivesAutos);
 	}
 
 	@Override

+ 41 - 14
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java

@@ -32,6 +32,10 @@ import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -219,6 +223,13 @@ public class FileUtils {
 
             for(String urlStr : urlList){
                 try{
+                    if (urlStr.indexOf("https") >= 0 && urlStr.indexOf("aliyuncs") >= 0) {
+                        int lastIndexOf = urlStr.lastIndexOf("/");
+                        String prefix=urlStr.substring(0,lastIndexOf+1);
+                        String suffix=urlStr.substring(lastIndexOf+1);
+                        urlStr = prefix+ URLEncoder.encode(suffix,"UTF-8");
+                    }
+
                     //获取OSS文件输入流
                     reader = new PdfReader(CommonUtil.getOSSInputStream(urlStr));
 
@@ -496,6 +507,7 @@ public class FileUtils {
     }
 
 
+
     /**
      * @Description 合并PDF
      * @Param [bos:结果存在字节数组, uris:支持 file、http、jar等传输协议]
@@ -503,7 +515,7 @@ public class FileUtils {
      * @Author yangyj
      * @Date 2021.10.09 10:49
      **/
-    public static void PdfCopyPublicMethods(ByteArrayOutputStream bos,List<String> uris){
+    public static void PdfCopyPublicMethods1(ByteArrayOutputStream bos,List<String> uris){
         
         PdfReader reader = null;
         Document doc = new Document();
@@ -543,6 +555,14 @@ public class FileUtils {
                     }
                 }
             }
+            String filePath = "D:\\tmp\\aaa.pdf";
+            FileOutputStream fos = null;
+            fos = new FileOutputStream(filePath);
+            //bos.reset();
+            fos.write(bos.toByteArray()); // 将数据写入到指定文件路径中
+            //bos.flush();
+            //bos.close();
+            System.out.println();
         }catch (Exception e){
             e.printStackTrace();
         } finally {
@@ -553,20 +573,27 @@ public class FileUtils {
             doc.close();
         }
 
-    }
-
-    /*public static void main(String[] args) {
-        String  file1 = "https://huazheng2021002.oss-cn-shenzhen.aliyuncs.com/folderFile/54e8a314de8a493d9f08a9d3cf7c/104850dea8ca485cbda677c11f0d0e6c/安康至来凤国家高速公路奉节至巫山(渝鄂界)段K13+690~K19+385ZB1合同段开工令-20230415064429.pdf";
-        String  file2 = "https://huazheng2021002.oss-cn-shenzhen.aliyuncs.com/folderFile/54e8a314de8a493d9f08a9d3cf7c/f596dc71c3264977a2cc2b8e5d348b38/1-20230415063812.pdf";
-        List<String> urls  = new ArrayList<>();
-        urls.add(file1);
-        urls.add(file2);
-
-        doForPageNumberUseItextpdf(urls,null);
-
-    }*/
-
 
 
+    }
 
+    public static final  String MAP4_AVI = "avi、wmv、mpeg、mp4、m4v、mov、asf、flv、f4v、rmvb、rm、3gp、vob";
+    public static final  String XLS_XLSX = "xlsx、xls";
+    public static final  String DOC_DOCX = "doc、docx";
+    public static final  String IMAGE_JPG = "bmp、jpg、png、tif、gif、pcx、tga、exif、fpx、svg、psd、cdr、pcd、dxf、ufo、eps、ai、raw、WMF、webp、avif、apng";
+    public static int getFileType(String fileName) {
+        fileName = fileName.toLowerCase();
+        if(IMAGE_JPG.contains(fileName)){
+            return 1;
+        }else if(MAP4_AVI.contains(fileName)){
+            return 2;
+        }else if(XLS_XLSX.contains(fileName)){
+            return 3;
+        }else if(DOC_DOCX.contains(fileName)){
+            return 4;
+        }else if("pdf".contains(fileName)){
+            return 5;
+        }
+        return 99;
+    }
 }

+ 14 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FormulaUtil.java

@@ -4,7 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springblade.common.vo.DataVO;
 import org.springblade.manager.entity.ArchiveTree;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -41,6 +43,18 @@ public class FormulaUtil {
         return dateTime.format(formatter);
     }
 
+    /**
+     *  传入 "20230413", "yyyyMMdd";
+     * @param strDate
+     * @param pattern
+     * @return
+     */
+    public static LocalDateTime parseStringToLocalDateTime(String strDate, String pattern) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+        LocalDate date = LocalDate.parse(strDate, formatter);
+        return LocalDateTime.of(date, LocalTime.MIN);
+    }
+
 
     /**
      *  excel 左边转换成从0开始的x,y

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -53,6 +53,7 @@
         <result column="is_archive" property="isArchive"/>
         <result column="page_num" property="pageNum"/>
         <result column="file_size" property="fileSize"/>
+        <result column="source_type" property="sourceType"/>
     </resultMap>
     <update id="recoveryByIds">
         update u_archive_file set is_deleted = 0 where

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -629,6 +629,11 @@ public class ArTreeContractInitServiceImpl {
      */
     public void getMap(List<ArchiveTreeContractVO2> vos,List<ArchiveTreeContract> addList,Map<Long,ArchiveTreeContractVO2> vo2Map){
 
+        if(vo2Map==null){
+            vo2Map=new HashMap<>();
+        }
+
+
         for (ArchiveTreeContractVO2 ar:vos) {
             vo2Map.put(ar.getId(),ar);
         }

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

@@ -436,8 +436,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 		//如果有新的合同段,合并新增代码到
 		if (saveList.size() > 0) {
-			Map<Long,ArchiveTreeContractVO2> vo2Map = new LinkedHashMap<>();
-			archiveTreeContractSync.mergerToTree(dstTree,saveList,vo2Map);
+			archiveTreeContractSync.mergerToTree(dstTree,saveList,null);
 		}
 
 		//没有合同段直接同步
@@ -451,9 +450,10 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 
 		//更新排序,把排序,自动组卷这种变化,刷新到新增节点和修改节点上
-		archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees); //TODO saveContractList有问题 新加合同段后同步这个是0
-
+		//archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees);
 		saveList.addAll(saveContractList);
+		archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees,saveList);
+
 		//同步生成案卷
 		arTreeContractInitService.syncArchiveAutoList(saveList,contractInfos);
 

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

@@ -104,7 +104,8 @@ public class ArchiveTreeContractSyncImpl {
      * @param dstTree
      * @param addList
      */
-    public void InitTreeSort(ArchiveTreeContractVO2  dstTree,List<ArchiveTreeContract> addList,List<ArchiveTreeContract> upList,List<ArchiveTreeVO2> proVo2Trees)
+    public void InitTreeSort(ArchiveTreeContractVO2  dstTree,List<ArchiveTreeContract> addList,
+                             List<ArchiveTreeContract> upList,List<ArchiveTreeVO2> proVo2Trees,List<ArchiveTreeContract> allAddList)
     {
         Map<Long,ArchiveTreeContractVO2> vo2Map = new LinkedHashMap<>();
 
@@ -120,7 +121,7 @@ public class ArchiveTreeContractSyncImpl {
         archiveAutoRuleSync.syncArchiveTreeContractList(vo2Map,proVo2Trees);
 
         //根据vo的排序和自动组卷信息,刷新新增节点,根据修改标识生成更新节点
-        arTreeContractInitService.handleAddAndUpList(vo2Map,addList,upList);
+        arTreeContractInitService.handleAddAndUpList(vo2Map,allAddList,upList);
 
     }
 

+ 20 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -68,6 +68,7 @@ import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import java.io.*;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.*;
@@ -516,28 +517,41 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             try {
                 //获取onlyOffice缓存中的文件流
                 URL url = new URL(downloadUri);
+                String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+                String filecode = SnowFlakeUtil.getId() + "";
+                String dataUrl=file_path + "/excel/" + filecode + ".pdf";
                 java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
+                connection.setRequestMethod("GET");
+                connection.setConnectTimeout(5 * 1000);
                 InputStream inputStream = connection.getInputStream();
                 if (inputStream == null) {
                     throw new Exception("文件为空");
                 }
-                Long tabId = callback.getKey();
+                String tabId = callback.getKey();
                 if (tabId == null) {
                     throw new Exception("excel为空");
+                }else{
+                    tabId = tabId.substring(0,tabId.lastIndexOf("_"));
                 }
                 //获取数据库信息
-                ExcelTab excelTab = baseMapper.selectById(tabId);
+                ExcelTab excelTab = baseMapper.selectById(Long.parseLong(tabId));
                 //上传新文件到文件服务器
                 byte[] officeByte = IoUtil.readToByteArray(inputStream);
-                BladeFile bladeFile = this.newIOSSClient.updateFile(officeByte, excelTab.getExtension());
-                //修改本地数据信息
-                excelTab.setFileUrl(bladeFile.getLink());
+
+                FileOutputStream fs = new FileOutputStream(dataUrl);
+                fs.write(officeByte);
+                fs.flush();
+                BladeFile bladeFile = newIOSSClient.uploadFile(excelTab.getExtension(), dataUrl);
                 //获取文件大小
                 int size = connection.getContentLength() / 1024 / 1024; //单位M
                 excelTab.setAttachSize(Long.parseLong(size + ""));
                 excelTab.setStatus(3);
+                excelTab.setFileUrl(bladeFile.getLink());
                 baseMapper.updateById(excelTab);
-                connection.disconnect();
+                File file = new File(dataUrl);
+                if(file.exists()){
+                    file.delete();
+                }
                 System.out.println("123456");
             } catch (Exception e) {
                 editCallback.setError(1);