cr 3 долоо хоног өмнө
parent
commit
55c3dd0fbe

+ 19 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO5.java

@@ -0,0 +1,19 @@
+package org.springblade.archive.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArchivesAutoVO5 {
+    private Long id;
+    private String fileNumber;
+    private String name;
+    private String storageTimeValue;
+    private String storageTime;
+    private Integer pageN;
+    private String unit;
+    private String remark;
+}

+ 60 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -30,6 +30,10 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.message.BasicNameValuePair;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springblade.archive.dto.ArchiveWarningDTO;
 import org.springblade.archive.dto.FindAndReplaceDto;
 import org.springblade.archive.dto.SaveApplyDTO;
@@ -41,6 +45,7 @@ import org.springblade.archive.utils.CallBgrsjk;
 import org.springblade.archive.vo.*;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
+import org.springblade.business.vo.NeiYeLedgerVO1;
 import org.springblade.common.utils.DeepSeekClient;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
@@ -54,6 +59,11 @@ import org.springblade.manager.feign.ArchiveTreeContractClient;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -65,7 +75,9 @@ import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
+import java.io.*;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
@@ -146,6 +158,53 @@ public class ArchivesAutoController extends BladeController {
 		return R.data(pages);
 	}
 
+	@SneakyThrows
+	@PostMapping ("/downloadArchiveAutoExcel")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "档案下载案卷excel")
+	public ResponseEntity<Resource> downloadArchiveAutoExcel(HttpServletResponse response,Long nodeId,Long projectId,Long contractId) throws IOException, InvalidFormatException {
+		List<ArchiveTreeContract> archiveTreeContracts = this.archiveTreeContractClient.queryAllChildByAncestors(nodeId+"",contractId);
+		List<String> ids=new ArrayList<>();
+		if(archiveTreeContracts != null && archiveTreeContracts.size() > 0){
+			ids = JSONArray.parseArray(JSONObject.toJSONString(archiveTreeContracts.stream().map(ArchiveTreeContract::getId).distinct().collect(Collectors.toList())), String.class);
+			ids.add(nodeId+"");
+		}
+	    List<ArchivesAutoVO5> list=	archivesAutoService.selectArchivesAutoFileFormDownload(projectId,contractId,ids);
+		//String templatePath="/mnt/sdc/Users/hongchuangyanfa/Desktop/excel/archiveTemplate.xlsx";
+		String templatePath="C:\\Users\\hc01\\Desktop\\archiveTemplate.xlsx";
+		InputStream templateStream = new FileInputStream(new File(templatePath));
+		org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(templateStream);
+		Sheet sheet = workbook.getSheetAt(0);
+		// 3. 填充数据(假设数据从第2行开始填充)
+		int startRow = 1; // 第2行开始填充数据
+		for (int i = 0; i < list.size(); i++) {
+			Row row = sheet.createRow(startRow + i);
+			ArchivesAutoVO5 vo1 = list.get(i);
+			// 填充各列数据
+			row.createCell(0).setCellValue(i + 1); // 序号
+			row.createCell(1).setCellValue(StringUtils.isNotEmpty(vo1.getFileNumber())?vo1.getFileNumber():""); // 档号
+			row.createCell(2).setCellValue(StringUtils.isNotEmpty(vo1.getStorageTimeValue())?vo1.getStorageTimeValue():""); // 案卷题名
+			row.createCell(3).setCellValue(StringUtils.isNotEmpty(vo1.getStorageTimeValue())?vo1.getStorageTimeValue():""); // 保管期限
+			row.createCell(4).setCellValue(vo1.getPageN()+""); // 总页数
+			row.createCell(5).setCellValue(StringUtils.isNotEmpty(vo1.getUnit())?vo1.getUnit():""); // 立卷单位
+			row.createCell(6).setCellValue(StringUtils.isNotEmpty(vo1.getRemark())?vo1.getRemark():""); // 备注
+		}
+		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+		workbook.write(outputStream);
+		workbook.close();
+		ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray());
+
+		String fileName = "案卷目录.xlsx";
+		String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString())
+				.replaceAll("\\+", "%20");
+		return ResponseEntity.ok()
+				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName)
+				.contentType(MediaType.APPLICATION_OCTET_STREAM)
+				.contentLength(resource.contentLength())
+				.body(resource);
+
+	}
+
     @GetMapping("/fileNumberFlush")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "档号整理——按档号排序")

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

@@ -230,5 +230,5 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
     List<ArchivesAutoVO4> selectAllArchiveAuto(@Param("projectId")Long projectId, @Param("contractId") Long contractId, @Param("nodeIds") List<String> nodeIds,@Param("isArchive")Integer isArchive);
 
 
-
+	List<ArchivesAutoVO5> selectArchivesAutoFileFormDownload(@Param("projectId") Long projectId, @Param("contractId") Long contractId, @Param("ids") List<String> ids);
 }

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

@@ -1437,4 +1437,15 @@
         order by uatc.tree_sort,uaa.auto_file_sort is null ,uaa.auto_file_sort,uaa.file_number is null,
         SUBSTRING_INDEX(uaa.file_number, '_', 1), SUBSTRING_INDEX(uaa.file_number, '_', -1) + 0 ,uaa.create_time asc
     </select>
+    <select id="selectArchivesAutoFileFormDownload" resultType="org.springblade.archive.vo.ArchivesAutoVO5">
+        select u.id,u.file_number,u.name,u.storageTime,u.page_n,u.unit,u.remark from u_archives_auto u LEFT JOIN m_archive_tree_contract m ON u.node_id = m.id where u.is_deleted = 0 and u.project_id = #{vo.projectId} and u.is_archive=1
+        <if test="vo.nodeIds != null and vo.nodeIds != ''">
+            and u.node_id in
+            <foreach collection="vo.nodeIdArray" item="nodeId" open="(" separator="," close=")">
+                #{nodeId}
+            </foreach>
+        </if>
+        order by m.tree_sort,u.auto_file_sort is null ,u.auto_file_sort,u.file_number is null,
+        SUBSTRING_INDEX(u.file_number, '_', 1), SUBSTRING_INDEX(u.file_number, '_', -1) + 0 ,u.create_time asc
+    </select>
 </mapper>

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

@@ -169,4 +169,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 
 
 	boolean creatFileNameFormAI(String ids, Long projectId, Long contractId) throws IOException;
+
+	List<ArchivesAutoVO5> selectArchivesAutoFileFormDownload(Long projectId, Long contractId, List<String> ids);
 }

+ 16 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -1575,6 +1575,22 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		return aiNameService.saveBatch(aiNames);
 	}
 
+	@Override
+	public List<ArchivesAutoVO5> selectArchivesAutoFileFormDownload(Long projectId, Long contractId, List<String> ids) {
+		List<ArchivesAutoVO5> list = this.baseMapper.selectArchivesAutoFileFormDownload(projectId, contractId, ids);
+		List<DictBiz> sheetSourceList1 = this.iDictBizClient.getList("storage_period", "notRoot").getData();
+		list.forEach(vos -> {
+			if (StringUtils.isNotEmpty(vos.getStorageTime())) {
+				sheetSourceList1.forEach(source -> {
+					if (source.getDictKey().equals(vos.getStorageTime())) {
+						vos.setStorageTimeValue(source.getDictValue());
+					}
+				});
+			}
+		});
+		return list;
+	}
+
 
 	/**
 	 * 单独组卷规则组卷