package jnpf.tmsController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.annotation.HandleLog; import jnpf.base.ActionResult; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; 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 jnpf.tmsService.TmsRecordService; import jnpf.util.JsonUtil; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; 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.PutMapping; 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.List; import java.util.Map; /** * 培训记录。网关 {@code /api/tms/record/**} → {@code /record/**}。 * *

状态流转:open → pending → ready → archived;或 invalid。 * 归档接口会触发写入个人培训档案目录(tms_person_train)。

*/ @Tag(name = "TMS培训记录", description = "Record") @RestController @RequestMapping("/record") @RequiredArgsConstructor public class TmsRecordController { private final TmsRecordService recordService; @Operation(summary = "培训记录分页列表") @GetMapping("/list") public ActionResult> list(TmsRecordQuery query) { List list = recordService.getList(query); PageListVO vo = new PageListVO<>(); vo.setList(list); vo.setPagination(JsonUtil.getJsonToBean(query, PaginationVO.class)); return ActionResult.success(vo); } @Operation(summary = "培训记录详情") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id) { return ActionResult.success(recordService.getInfo(id)); } @Operation(summary = "生成签到二维码") @GetMapping("/{id}/sign-qr") public ActionResult signQr(@PathVariable("id") String id) { return ActionResult.success(recordService.getSignQr(id)); } @HandleLog(moduleName = "培训记录", requestMethod = "签到") @Operation(summary = "扫码签到落库") @PostMapping("/scan-sign") public ActionResult scanSign(@RequestBody TmsRecordScanSignForm form) { return ActionResult.success(recordService.scanSign(form)); } @HandleLog(moduleName = "培训记录", requestMethod = "修改") @Operation(summary = "更新培训记录") @PutMapping("/{id}") public ActionResult update(@PathVariable("id") String id, @RequestBody TmsRecordForm form) { recordService.update(id, form); return ActionResult.success("更新成功"); } @HandleLog(moduleName = "培训记录", requestMethod = "状态变更") @Operation(summary = "关闭时间到期转入待归档(临时按钮 / 后续 XXL-JOB)") @PostMapping("/mark-ready-by-close") public ActionResult markReadyByClose() { return ActionResult.success(recordService.markReadyByCloseTime()); } @HandleLog(moduleName = "培训记录", requestMethod = "状态变更") @Operation(summary = "待归档转入可归档(可选中间态)") @PostMapping("/promote-ready") public ActionResult promoteReady(@RequestBody Map> body) { return ActionResult.success(recordService.promoteToReady(body == null ? null : body.get("ids"))); } @HandleLog(moduleName = "培训记录", requestMethod = "恢复") @Operation(summary = "可归档恢复为待归档(临时联调)") @PostMapping("/restore-pending") public ActionResult restorePending(@RequestBody Map> body) { return ActionResult.success(recordService.restoreToPending(body == null ? null : body.get("ids"))); } @HandleLog(moduleName = "培训记录", requestMethod = "归档") @Operation(summary = "归档培训记录") @PostMapping("/archive") public ActionResult archive(@RequestBody Map> body) { int count = recordService.archive(body == null ? null : body.get("ids")); return ActionResult.success(count); } @HandleLog(moduleName = "培训记录", requestMethod = "作废") @Operation(summary = "作废培训记录(无人完成 → invalid + 生成再维护草稿)") @PostMapping("/mark-invalid") public ActionResult markInvalid(@RequestBody Map> body) { return ActionResult.success(recordService.markInvalid(body == null ? null : body.get("ids"))); } @Operation(summary = "实时参与进度") @GetMapping("/{id}/progress") public ActionResult progress(@PathVariable("id") String id) { return ActionResult.success(recordService.getProgress(id)); } @Operation(summary = "未完成人员清单(按部门排序)") @GetMapping("/{id}/incomplete") public ActionResult> incomplete(@PathVariable("id") String id) { return ActionResult.success(recordService.listIncomplete(id)); } @Operation(summary = "计算提问人数") @GetMapping("/{id}/quiz-count") public ActionResult quizCount(@PathVariable("id") String id) { return ActionResult.success(recordService.calcQuizCount(id)); } @Operation(summary = "查看学员提问答卷") @GetMapping("/{id}/quiz-answers") public ActionResult quizAnswers( @PathVariable("id") String id, @RequestParam("userId") String userId) { return ActionResult.success(recordService.getQuizAnswers(id, userId)); } @HandleLog(moduleName = "培训记录", requestMethod = "删除") @Operation(summary = "删除培训记录") @DeleteMapping public ActionResult delete(@RequestBody Map> body) { recordService.delete(body == null ? null : body.get("ids")); return ActionResult.success("删除成功"); } }