package cn.iocoder.yudao.module.qcreport.service.instance;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateFromQcReqVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstanceGenerateReqVO;
|
import cn.iocoder.yudao.module.qcreport.controller.admin.instance.vo.QcReportInstancePageReqVO;
|
import cn.iocoder.yudao.module.qcreport.dal.dataobject.instance.QcReportInstanceDO;
|
import cn.iocoder.yudao.module.qcreport.engine.render.RenderOutcome;
|
|
import java.util.Map;
|
|
/**
|
* 智能质检报告实例 Service 接口。
|
* <p>
|
* 这里是「模板 → 报告」的出件链路:取已发布版本 → 渲染 → 落库并冻结数据快照。
|
* 数据由调用方传进来,本模块不认识任何业务单据(MES 质检单的归一化由 MES 侧提供)。
|
*/
|
public interface QcReportInstanceService {
|
|
/**
|
* 预览:只渲染,不落库、不生成编号。
|
*
|
* @param reqVO 出件入参
|
* @return 渲染产物;报告编号取入参里带过来的那个,没带则为空
|
*/
|
RenderOutcome preview(QcReportInstanceGenerateReqVO reqVO);
|
|
/**
|
* 出件:渲染 + 落库 + 冻结数据快照。
|
*
|
* @param reqVO 出件入参
|
* @return 报告实例与数据缺口清单
|
*/
|
GenerateResult generate(QcReportInstanceGenerateReqVO reqVO);
|
|
/**
|
* 由质检单出件:从 MES 取质检单数据 → 映射成报告上下文 → 走既有的出件流程。
|
* <p>
|
* 刻意不新开一条落库路径:内部就是调 {@link #generate},于是版本发布校验、
|
* 编号生成与撞号重试、数据快照冻结、判定引擎全部照旧生效,一条都没绕开。
|
* <p>
|
* 出件前的校验按业务优先级只报第一处:类型不合法 → 单据不存在 → 未完成 → 未判定 →
|
* 模板类型不符 → 没有可用检验项。一次抛多条会让用户抓不住重点。
|
*
|
* @param reqVO 质检单 + 模板选择
|
* @return 报告实例与本次出件的提示信息
|
*/
|
GenerateFromQcResult generateFromQc(QcReportInstanceGenerateFromQcReqVO reqVO);
|
|
/**
|
* 重新生成:用实例里冻结的数据快照与同一模板版本重渲,覆盖产物 HTML。
|
* <p>
|
* 快照与报告编号都不变。重新生成的是「排版」,不是「数据」——数据以快照为准,
|
* 业务系统里的数据后来怎么变都不会影响这份历史报告。
|
* <p>
|
* <b>已归档的 PDF 会被一并作废</b>:产物 HTML 换了,再留着旧 PDF 就是「页面是新排版、
|
* 下载到的是旧文件」的静默不一致。宁可让产物消失(随时可再导一次),也不留这种错配。
|
*
|
* @param id 实例编号
|
* @return 报告实例与数据缺口清单
|
*/
|
GenerateResult regenerate(Long id);
|
|
/**
|
* 导出 PDF:把实例里**已存的**渲染产物 HTML 交给 Chromium 打印,并归档到附件库。
|
* <p>
|
* 刻意不重渲:设计器/详情页看到的 HTML 与 PDF 必须出自同一份字节,
|
* 否则就会出现「页面上好好的、打出来变形」这类对不上账的问题。要换排版请先「重新生成」。
|
* <p>
|
* 归档走 system 模块的附件中间表({@code recordType = qc_report_instance}),
|
* 因此「这份报告有没有 PDF、去哪儿下载」用标准的附件列表接口即可查到。
|
*
|
* @param id 实例编号
|
* @return 归档后的 PDF 信息与耗时
|
*/
|
PdfArchiveResult exportPdf(Long id);
|
|
/**
|
* 校验实例存在,并返回
|
*
|
* @param id 实例编号
|
* @return 报告实例
|
*/
|
QcReportInstanceDO validateInstanceExists(Long id);
|
|
/**
|
* 获得报告实例
|
*
|
* @param id 实例编号
|
* @return 报告实例
|
*/
|
QcReportInstanceDO getInstance(Long id);
|
|
/**
|
* 获得实例冻结的数据快照
|
*
|
* @param id 实例编号
|
* @return 数据快照,形如 {@code {report, inspectionItems}}
|
*/
|
Map<String, Object> getSnapshot(Long id);
|
|
/**
|
* 获得报告实例分页
|
*
|
* @param pageReqVO 分页查询
|
* @return 实例分页
|
*/
|
PageResult<QcReportInstanceDO> getInstancePage(QcReportInstancePageReqVO pageReqVO);
|
|
/**
|
* 删除报告实例。已归档的 PDF 一并清理,不留下查不到主人的文件与附件记录。
|
*
|
* @param id 实例编号
|
*/
|
void deleteInstance(Long id);
|
|
}
|