package com.ruoyi.inspect.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.Result; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.dto.SealUsageCopiesUpdate; import com.ruoyi.inspect.dto.SealUsageExportRequest; import com.ruoyi.inspect.dto.SealUsageLedgerQuery; import com.ruoyi.inspect.pojo.SealUsageLedger; import com.ruoyi.inspect.service.SealUsageLedgerService; import com.ruoyi.inspect.util.SealUsageLedgerWordExporter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; @RestController @RequestMapping("/sealUsageLedger") @Tag(name = "用印管理台账") public class SealUsageLedgerController { @Resource private SealUsageLedgerService ledgerService; @Operation(summary = "分页查询用印管理台账") @GetMapping("/page") @PreAuthorize("@ss.hasPermi('structural:sealUsageLedger:list')") public Result page(Page page, SealUsageLedgerQuery query) { return Result.success(ledgerService.page(page, query)); } @Operation(summary = "修改用印份数") @PostMapping("/updateCopies") @PreAuthorize("@ss.hasPermi('structural:sealUsageLedger:edit')") public Result updateCopies(@RequestBody SealUsageCopiesUpdate update) { ledgerService.updateCopies(update); return Result.success(); } @Operation(summary = "导出印章使用登记表 Word") @PostMapping("/exportWord") @PreAuthorize("@ss.hasPermi('structural:sealUsageLedger:export')") public void exportWord(@RequestBody SealUsageExportRequest request, HttpServletResponse response) { List ledgers = ledgerService.listForExport(request); String fileName = "印章使用登记表_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".docx"; response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName, StandardCharsets.UTF_8).replace("+", "%20")); try { SealUsageLedgerWordExporter.write(ledgers, response.getOutputStream()); } catch (IOException e) { throw new ErrorException("用印台账导出失败"); } } }