package jnpf.tmsService; import jnpf.tmsEntity.record.TmsQuizAnswerPaperVO; import jnpf.tmsEntity.record.TmsRecordForm; import jnpf.tmsEntity.record.TmsRecordIncompleteVO; import jnpf.tmsEntity.record.TmsRecordProgressVO; import jnpf.tmsEntity.record.TmsRecordQuery; import jnpf.tmsEntity.record.TmsRecordScanSignForm; import jnpf.tmsEntity.record.TmsRecordSignQrVO; import jnpf.tmsEntity.person.TmsPersonTaskSignResult; import java.util.List; /** * 培训记录服务:签到、归档状态机、归档写个人培训目录。 * * @see jnpf.tmsService.impl.TmsRecordServiceImpl */ public interface TmsRecordService { List getList(TmsRecordQuery query); TmsRecordForm getInfo(String id); /** 实时参与进度(签到率/合格率/未完成率) */ TmsRecordProgressVO getProgress(String recordId); /** 未完成人员清单(按部门排序) */ List listIncomplete(String recordId); /** 按任务回写记录签到率/合格率(签到、交卷后调用) */ void refreshRatesByTaskId(String taskId); TmsRecordSignQrVO getSignQr(String id); /** 扫码签到落库(校验二维码后写 person_task) */ TmsPersonTaskSignResult scanSign(TmsRecordScanSignForm form); void update(String id, TmsRecordForm form); /** * 关闭时间已到:null/空 → pending(FDS 待归档;供 XXL-JOB / 数据接口 / 临时按钮) * * @return 本次转入待归档的条数 */ int markReadyByCloseTime(); /** * 待归档 → 可归档:pending → ready(可选中间态) */ int promoteToReady(List ids); /** * 可归档恢复为待归档:ready → pending(临时联调,上线 Job 后可保留作运维) */ int restoreToPending(List ids); /** * 归档:写 {@code tms_person_train}、任务 done、未完成人再培训草稿。 * 仅 pending / ready 可归档。 */ int archive(List ids); /** * 无效任务:无人完成时可打 invalid,并自动生成再维护草稿任务。 * * @return 本次作废条数 */ int markInvalid(List ids); /** * 提问人数:ceil(签到人数 * task.quiz_ratio / 100) */ int calcQuizCount(String recordId); /** 某学员在该培训记录下的提问答卷(题目/学员答案/参考答案/对错) */ TmsQuizAnswerPaperVO getQuizAnswers(String recordId, String userId); void delete(List ids); }