package cn.iocoder.yudao.module.qcreport.controller.admin.instance;
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateFromQcReqVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateFromQcRespVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateReqVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateRespVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstancePageReqVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstancePdfRespVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstancePreviewRespVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceRegenerateRespVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceRespVO;
|
import cn.iocoder.yudao.module.qcreport.dal.dataobject.instance.QcReportInstanceDO;
|
import cn.iocoder.yudao.module.qcreport.engine.render.RenderOutcome;
|
import cn.iocoder.yudao.module.qcreport.service.instance.GenerateFromQcResult;
|
import cn.iocoder.yudao.module.qcreport.service.instance.GenerateResult;
|
import cn.iocoder.yudao.module.qcreport.service.instance.PdfArchiveResult;
|
import cn.iocoder.yudao.module.qcreport.service.instance.QcReportInstanceService;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.annotation.Resource;
|
import jakarta.validation.Valid;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
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.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.Map;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
/**
|
* 智能质检报告实例 Controller。
|
* <p>
|
* 这里是「模板 → 报告」的对外入口:预览只渲不存,出件才落库并冻结数据快照。
|
* 数据由调用方传入,本模块不认识任何业务单据。
|
*/
|
@Tag(name = "管理后台 - 智能质检报告实例")
|
@RestController
|
@RequestMapping("/qc-report/instance")
|
@Validated
|
public class QcReportInstanceController {
|
|
@Resource
|
private QcReportInstanceService instanceService;
|
|
@PostMapping("/preview")
|
@Operation(summary = "预览报告(只渲染,不落库、不消耗报告编号)")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:query')")
|
public CommonResult<QcReportInstancePreviewRespVO> preview(@Valid @RequestBody QcReportInstanceGenerateReqVO reqVO) {
|
RenderOutcome outcome = instanceService.preview(reqVO);
|
QcReportInstancePreviewRespVO respVO = new QcReportInstancePreviewRespVO();
|
respVO.setReportNo(outcome.context().getReport() == null ? null : outcome.context().getReport().getReportNo());
|
respVO.setHtml(outcome.html());
|
respVO.setErrors(outcome.errors());
|
return success(respVO);
|
}
|
|
@PostMapping("/generate")
|
@Operation(summary = "出件:渲染 + 落库 + 冻结数据快照")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:create')")
|
public CommonResult<QcReportInstanceGenerateRespVO> generate(
|
@Valid @RequestBody QcReportInstanceGenerateReqVO reqVO) {
|
return success(toGenerateRespVO(instanceService.generate(reqVO)));
|
}
|
|
@PostMapping("/generate-from-qc")
|
@Operation(summary = "由质检单生成报告(数据从 MES 取,模板由用户选择)")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:generate')")
|
public CommonResult<QcReportInstanceGenerateFromQcRespVO> generateFromQc(
|
@Valid @RequestBody QcReportInstanceGenerateFromQcReqVO reqVO) {
|
GenerateFromQcResult result = instanceService.generateFromQc(reqVO);
|
QcReportInstanceGenerateFromQcRespVO respVO = new QcReportInstanceGenerateFromQcRespVO();
|
respVO.setId(result.instance().getId());
|
respVO.setReportNo(result.instance().getReportNo());
|
respVO.setTemplateVersion(result.instance().getTemplateVersion());
|
respVO.setItemCount(result.itemCount());
|
respVO.setUndecidableCount(result.undecidableCount());
|
respVO.setWarnings(result.warnings());
|
respVO.setErrors(result.errors());
|
return success(respVO);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获得报告实例(含渲染产物 HTML,不含数据快照)")
|
@Parameter(name = "id", description = "实例编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:query')")
|
public CommonResult<QcReportInstanceRespVO> getInstance(@RequestParam("id") Long id) {
|
QcReportInstanceDO instance = instanceService.getInstance(id);
|
return success(BeanUtils.toBean(instance, QcReportInstanceRespVO.class));
|
}
|
|
@GetMapping("/snapshot")
|
@Operation(summary = "获得报告实例冻结的数据快照")
|
@Parameter(name = "id", description = "实例编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:query')")
|
public CommonResult<Map<String, Object>> getSnapshot(@RequestParam("id") Long id) {
|
return success(instanceService.getSnapshot(id));
|
}
|
|
@GetMapping("/page")
|
@Operation(summary = "获得报告实例分页")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:query')")
|
public CommonResult<PageResult<QcReportInstanceRespVO>> getInstancePage(
|
@Valid QcReportInstancePageReqVO pageReqVO) {
|
PageResult<QcReportInstanceDO> pageResult = instanceService.getInstancePage(pageReqVO);
|
return success(BeanUtils.toBean(pageResult, QcReportInstanceRespVO.class));
|
}
|
|
@PostMapping("/regenerate")
|
@Operation(summary = "重新生成报告(用冻结的数据快照 + 同一模板版本重渲,覆盖产物 HTML)")
|
@Parameter(name = "id", description = "实例编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:create')")
|
public CommonResult<QcReportInstanceRegenerateRespVO> regenerate(@RequestParam("id") Long id) {
|
GenerateResult result = instanceService.regenerate(id);
|
QcReportInstanceRegenerateRespVO respVO = new QcReportInstanceRegenerateRespVO();
|
respVO.setId(result.instance().getId());
|
respVO.setReportNo(result.instance().getReportNo());
|
respVO.setErrors(result.errors());
|
return success(respVO);
|
}
|
|
@PostMapping("/pdf")
|
@Operation(summary = "导出 PDF(打印实例已存的产物 HTML 并归档到附件库,可重复调用)")
|
@Parameter(name = "id", description = "实例编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:export')")
|
public CommonResult<QcReportInstancePdfRespVO> exportPdf(@RequestParam("id") Long id) {
|
PdfArchiveResult result = instanceService.exportPdf(id);
|
QcReportInstancePdfRespVO respVO = new QcReportInstancePdfRespVO();
|
respVO.setId(result.instanceId());
|
respVO.setReportNo(result.reportNo());
|
respVO.setFileName(result.fileName());
|
respVO.setByteSize(result.byteSize());
|
respVO.setBlobId(result.blobId());
|
respVO.setAttachmentId(result.attachmentId());
|
respVO.setPreviewURL(result.previewURL());
|
respVO.setDownloadURL(result.downloadURL());
|
respVO.setDurationMs(result.durationMs());
|
respVO.setPdfDurationMs(result.pdfDurationMs());
|
respVO.setBrowserStatus(result.browserStatus());
|
return success(respVO);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除报告实例")
|
@Parameter(name = "id", description = "实例编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('qc-report:instance:delete')")
|
public CommonResult<Boolean> deleteInstance(@RequestParam("id") Long id) {
|
instanceService.deleteInstance(id);
|
return success(true);
|
}
|
|
private QcReportInstanceGenerateRespVO toGenerateRespVO(GenerateResult result) {
|
QcReportInstanceDO instance = result.instance();
|
QcReportInstanceGenerateRespVO respVO = new QcReportInstanceGenerateRespVO();
|
respVO.setId(instance.getId());
|
respVO.setReportNo(instance.getReportNo());
|
respVO.setTemplateVersion(instance.getTemplateVersion());
|
respVO.setStatus(instance.getStatus());
|
respVO.setErrors(result.errors());
|
return respVO;
|
}
|
|
}
|