package jnpf.dmsController.print; import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import jnpf.base.ActionResult; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.dmsEntity.print.form.DmsPrintOperationCreateForm; import jnpf.dmsEntity.print.form.DmsPrintOperationQuery; import jnpf.dmsEntity.print.vo.DmsPrintOperationCreatedVO; import jnpf.dmsEntity.print.vo.DmsPrintOperationLogVO; import jnpf.dmsService.DmsPrintOperationLogService; import jnpf.exception.DataException; import jnpf.util.JsonUtil; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.List; @Tag(name = "DMS打印操作记录", description = "独立于审计日志的打印业务台账") @RestController @RequestMapping("/print-operations") @RequiredArgsConstructor public class DmsPrintOperationLogController { private final DmsPrintOperationLogService service; @Operation(summary = "记录一次打印操作") @PostMapping public ActionResult create( @RequestBody DmsPrintOperationCreateForm form) throws DataException { return ActionResult.success(service.create(form)); } @Operation(summary = "分页查询打印操作记录") @SaCheckPermission("dayinCaozuoRizhi") @GetMapping public ActionResult> list( DmsPrintOperationQuery query) throws DataException { List rows = service.list(query); PaginationVO pagination = JsonUtil.getJsonToBean(query, PaginationVO.class); return ActionResult.page(rows, pagination); } @Operation(summary = "查询打印操作记录详情") @SaCheckPermission("dayinCaozuoRizhi") @GetMapping("/{id}") public ActionResult detail(@PathVariable("id") String id) throws DataException { return ActionResult.success(service.detail(id)); } @Operation(summary = "导出打印操作记录") @SaCheckPermission("dayinCaozuoRizhi") @GetMapping("/export") public void export(DmsPrintOperationQuery query, HttpServletResponse response) throws IOException { response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setContentType("text/csv;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=dms-print-operations.csv"); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(response.getOutputStream(), StandardCharsets.UTF_8)); writer.write('\uFEFF'); writer.write("编号,名称,批号,版本号,操作日期,打印类型,操作人,备注\n"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (DmsPrintOperationLogVO row : service.export(query)) { writer.write(csv(row.getDocumentCode()) + ',' + csv(row.getDocumentName()) + ',' + csv(row.getBatchNo()) + ',' + csv(row.getVersionNo()) + ',' + csv(row.getOperatedAt() == null ? null : format.format(row.getOperatedAt())) + ',' + csv(row.getPrintType()) + ',' + csv(row.getOperatorName()) + ',' + csv(row.getRemark()) + '\n'); } writer.flush(); } private String csv(String value) { if (value == null) return ""; return '"' + value.replace("\"", "\"\"") + '"'; } }