archiveManager/src/main/java/com/ruoyi/domain/DocumentMaterials.java
@@ -135,6 +135,15 @@ /** $column.columnComment */ private Date createdAt; public Integer getVisible() { return visible; } public void setVisible(Integer visible) { this.visible = visible; } private Integer visible; /** $column.columnComment */ private Date updatedAt; private String fileStyle; archiveManager/src/main/java/com/ruoyi/domain/vo/DocumentMaterialFileSmallVo.java
@@ -29,7 +29,8 @@ /** $column.columnComment */ @Excel(name = "页号", handler = NumberFormatHandler.class) private Long pageNumber; @Excel(name = "材料类型") private String fileStyle; /** $column.columnComment */ @Excel(name = "所处阶段") archiveManager/src/main/java/com/ruoyi/domain/vo/DocumentMaterialsVoSmall.java
@@ -40,6 +40,10 @@ this.pageNumber = pageNumber; this.remarks = remarks; } public DocumentMaterialsVoSmall() { } // public DocumentMaterialsVoSmall(Long num, String documentNumber, String creator, String title, Date date, Long pageNumber, String remarks) { // this.num = num; // this.documentNumber = documentNumber; archiveManager/src/main/java/com/ruoyi/mapper/DocumentMaterialsMapper.java
@@ -28,8 +28,8 @@ @Select("select count(*) from document_materials where title=#{title} and page_number<#{pageNumber} and stage=#{stage} and record_id=#{recordId}") Long getMaxPageOrder(@Param("title")String title,@Param("pageNumber") Long pageNumber,@Param("stage") String stage, @Param("recordId") Long recordId); //计算文件的序号 @Select("select count(distinct(title))-1 from document_materials where page_number<=#{pageNumber} and record_id=#{recordId}") //计算文件的序号,title有可能重复 @Select("select count(distinct(concat_ws(',', title, stage)))-1 from document_materials where page_number<=#{pageNumber} and record_id=#{recordId}") Long getFileNumber(@Param("pageNumber") Long pageNumber, @Param("recordId") Long recordId); archiveManager/src/main/java/com/ruoyi/service/impl/DocumentMaterialsServiceImpl.java
@@ -254,7 +254,7 @@ @Override public Long getFiNum(Long pageNumber, Long recordId) { return this.baseMapper.getFileNumber(pageNumber, recordId); return this.baseMapper.getFileNumber(pageNumber, recordId)+1; } @Override @@ -308,6 +308,7 @@ DocumentMaterials documentMaterials = new DocumentMaterials(); BeanUtils.copyProperties(archiveCategory, documentMaterials); documentMaterials.setRecordId(Long.parseLong(recordId)); documentMaterials.setVisible(1); this.insertDocumentMaterials(documentMaterials); } @@ -341,6 +342,7 @@ // 获取指定recordId下的所有记录,按页号升序排列 LambdaQueryWrapper<DocumentMaterials> lqw = new LambdaQueryWrapper<>(); lqw.eq(DocumentMaterials::getRecordId, recordId); lqw.ne(DocumentMaterials::getFileStyle, "其他材料"); lqw.orderByAsc(DocumentMaterials::getPageNumber); List<DocumentMaterials> records = this.list(lqw); @@ -384,6 +386,8 @@ newRecord.setFileSize(null); newRecord.setFormat(null); newRecord.setUrl(null); //不在前端显示 newRecord.setVisible(0); // 添加到中间记录列表 middleRecords.add(newRecord); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/DocumentMaterialsController.java
@@ -11,6 +11,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; @@ -26,6 +29,8 @@ import com.ruoyi.domain.ArchiveRecords; import com.ruoyi.domain.DocumentMaterials; import com.ruoyi.domain.vo.DocumentMaterialFileSmallVo; import com.ruoyi.domain.vo.DocumentMaterialsVo; import com.ruoyi.domain.vo.DocumentMaterialsVoSmall; import com.ruoyi.framework.config.ServerConfig; import com.ruoyi.framework.web.domain.server.Sys; import com.ruoyi.service.IDocumentMaterialsService; @@ -132,8 +137,52 @@ } ExcelUtil<DocumentMaterials> util = new ExcelUtil<DocumentMaterials>(DocumentMaterials.class); util.exportExcel(response, list, "【文件材料综合信息】数据"); util.exportExcel(response, list, "电子文件目录"); } @PreAuthorize("@ss.hasPermi('system:materials:export')") @Log(title = "【导出卷内目录】", businessType = BusinessType.EXPORT) @PostMapping("/exportDir") public void exportDir(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids) { List<DocumentMaterials> list; System.out.println(ids); // 如果提供了ids参数,则根据ids导出指定记录 if (ids != null && ids.length > 0) { list = documentMaterialsService.selectDocumentMaterialsByIds(ids); } else { list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials); } // 根据visible字段筛选,只保留visible为1的记录 List<DocumentMaterials> filteredList = list.stream() .filter(doc -> doc.getVisible() != null && doc.getVisible() == 1 && !Objects.equals(doc.getFileStyle(), "其他材料")) .collect(Collectors.toList()); // 使用AtomicLong实现序号的递增 AtomicLong nm = new AtomicLong(1L); // 将筛选后的DocumentMaterials转换为DocumentMaterialsVo List<DocumentMaterialsVoSmall> list1 = filteredList.stream().map(doc -> { DocumentMaterialsVoSmall vo = new DocumentMaterialsVoSmall(); // 手动映射字段,使用getAndIncrement()方法获取当前值并递增 vo.setNum(nm.getAndIncrement()); vo.setDocumentNumber(doc.getDocumentNumber()); vo.setCreator(doc.getCreator()); vo.setTitle(doc.getTitle()); vo.setDate(doc.getDate()); vo.setPageNumber(doc.getPageNumber()); vo.setRemarks(doc.getRemarks()); // vo.setRecordId(doc.getRecordId() != null ? doc.getRecordId().toString() : null); // vo.setPublicity(doc.getPublicity()); return vo; }).collect(Collectors.toList()); ExcelUtil<DocumentMaterialsVoSmall> util = new ExcelUtil<DocumentMaterialsVoSmall>(DocumentMaterialsVoSmall.class); util.exportExcel(response, list1, "卷内目录"); } // List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString()); /** * 获取【文件材料综合信息】详细信息 @@ -153,6 +202,7 @@ @PostMapping public AjaxResult add(@RequestBody DocumentMaterials documentMaterials) { documentMaterials.setVisible(1); int res = documentMaterialsService.insertDocumentMaterials(documentMaterials); System.out.println(res+"][[[[[[[[[[[[[[[[[["); return toAjax(res); ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/archiveAllExportController.java
@@ -41,8 +41,11 @@ import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -54,6 +57,8 @@ @RestController @RequestMapping("/system/archiveAllExport") public class archiveAllExportController { // 存储当天导出序号的Map,键为日期(yyyyMMdd),值为当前序号 private static Map<String, Integer> dailySequenceMap = new ConcurrentHashMap<>(); @Autowired private pdfGenerateService pdfGenerateService; @@ -64,6 +69,21 @@ @Autowired private IArchiveRecordsService iArchiveRecordsService; // 用于生成当天导出序号的方法 private String generateDailySequence(String date) { // 使用synchronized确保线程安全 synchronized (dailySequenceMap) { // 获取当前日期的序号,如果不存在则初始化为0 int sequence = dailySequenceMap.getOrDefault(date, 0); // 序号递增 sequence++; // 更新Map中的序号 dailySequenceMap.put(date, sequence); // 格式化为三位字符串,不足三位补前导零 return String.format("%03d", sequence); } } @@ -138,6 +158,10 @@ } System.out.println(siz/1000); //判断是否大于4G,是的话,直接抛出异常 long maxSize = 4L * 1024 * 1024 * 1024; // 4GB in bytes if (siz > maxSize) { throw new RuntimeException("文件总大小超过4GB,无法导出"); } System.out.println("092939932"); String zipFileName ="test" +".zip"; //生成压缩包存储地址(最后会删掉) @@ -162,7 +186,10 @@ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String formattedDate = date.format(formatter); System.out.println(formattedDate); String fna = "GH"+20250908+"/"; // 生成当天导出序号 String sequence = generateDailySequence(formattedDate); String fna = "GH" + formattedDate + sequence + "/"; zos.putNextEntry(new ZipEntry(fna)); @@ -171,7 +198,7 @@ archiveRecords.setIds(ids); List<ArchiveRecords> lis = iArchiveRecordsService.selectArchiveRecordsList(archiveRecords); //案卷目录导出 ZipEntry entry = new ZipEntry("案卷目录" + ".xls"); ZipEntry entry = new ZipEntry(fna + "案卷目录" + ".xls"); ExcelUtil<ArchiveRecords> util = new ExcelUtil<ArchiveRecords>(ArchiveRecords.class); zos.putNextEntry(entry); @@ -183,7 +210,7 @@ List<ArchiveRecordSmall> lrs = iArchiveRecordsService.findByIds(archiveRecords); System.out.println(lrs); System.out.println("99999999990000"); ZipEntry entry1 = new ZipEntry("移交清单" + ".xls"); ZipEntry entry1 = new ZipEntry(fna + "移交清单" + ".xls"); ExcelUtil<ArchiveRecordSmall> util1 = new ExcelUtil<ArchiveRecordSmall>(ArchiveRecordSmall.class); @@ -208,7 +235,6 @@ for(int i = 0; i < ids.length; i++) { // 获取文件的保存位置,读取数据库, DocumentMaterials documentMaterials = new DocumentMaterials(); documentMaterials.setRecordId(ids[i]); @@ -456,8 +482,12 @@ //.selectDocumentMaterialsList(documentMaterials); List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString()); if(dsvs==null||dsvs.isEmpty()) { throw new RuntimeException("电子文件信息没有上传,请补充!"); } ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id); System.out.println(dsvs.size()); List<String> paths = new ArrayList<>(); // System.out.println(docs); if (docs.size() == 1) { // 直接下载