ExamTaskApplyController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package com.qmth.distributed.print.api;
  2. import com.qmth.boot.api.constant.ApiConstant;
  3. import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailCardDto;
  4. import com.qmth.distributed.print.business.bean.params.ApproveFormParams;
  5. import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
  6. import com.qmth.distributed.print.business.entity.ExamTask;
  7. import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
  8. import com.qmth.distributed.print.business.entity.ExamTaskDetail;
  9. import com.qmth.distributed.print.business.entity.TFFlowJoin;
  10. import com.qmth.distributed.print.business.enums.ExamObjectType;
  11. import com.qmth.distributed.print.business.enums.ExamStatusEnum;
  12. import com.qmth.distributed.print.business.service.*;
  13. import com.qmth.teachcloud.common.annotation.OperationLogDetail;
  14. import com.qmth.teachcloud.common.contant.SystemConstant;
  15. import com.qmth.teachcloud.common.entity.SysUser;
  16. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  17. import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
  18. import com.qmth.teachcloud.common.util.Result;
  19. import com.qmth.teachcloud.common.util.ResultUtil;
  20. import com.qmth.teachcloud.common.util.ServletUtil;
  21. import io.swagger.annotations.*;
  22. import org.activiti.engine.TaskService;
  23. import org.activiti.engine.task.Task;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import org.springframework.validation.BindingResult;
  26. import org.springframework.validation.annotation.Validated;
  27. import org.springframework.web.bind.annotation.*;
  28. import org.springframework.web.multipart.MultipartFile;
  29. import javax.annotation.Resource;
  30. import javax.servlet.http.HttpServletResponse;
  31. import javax.validation.Valid;
  32. import javax.validation.constraints.Max;
  33. import javax.validation.constraints.Min;
  34. import java.io.IOException;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.Objects;
  38. /**
  39. * <p>
  40. * 入库申请 前端控制器
  41. * </p>
  42. *
  43. * @author xf
  44. * @since 2021-03-23
  45. */
  46. @Api(tags = "入库申请Controller")
  47. @RestController
  48. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_EXAM + "/task")
  49. @Validated
  50. public class ExamTaskApplyController {
  51. @Resource
  52. private ExamTaskService examTaskService;
  53. @Resource
  54. private PrintCommonService printCommonService;
  55. @Resource
  56. private ExamTaskPrintService examTaskPrintService;
  57. @Resource
  58. TaskService taskService;
  59. @Resource
  60. ActivitiService activitiService;
  61. @Resource
  62. TFFlowJoinService tfFlowJoinService;
  63. /**
  64. * 入库申请-查询
  65. *
  66. * @param auditStatus
  67. * @param cardRuleId
  68. * @param courseCode
  69. * @param paperNumber
  70. * @param startTime
  71. * @param endTime
  72. * @param userName 命题老师名称
  73. * @param pageNumber
  74. * @param pageSize
  75. * @return
  76. */
  77. @ApiOperation(value = "入库申请-分页查询")
  78. @RequestMapping(value = "/apply_list", method = RequestMethod.POST)
  79. public Result taskApplyList(@RequestParam(value = "semesterId", required = false) Long semesterId,
  80. @RequestParam(value = "examId", required = false) Long examId,
  81. @RequestParam(value = "auditStatus", required = false) String auditStatus,
  82. @RequestParam(value = "cardRuleId", required = false) String cardRuleId,
  83. @RequestParam(value = "courseCode", required = false) String courseCode,
  84. @RequestParam(value = "paperNumber", required = false) String paperNumber,
  85. @RequestParam(value = "startTime", required = false) Long startTime,
  86. @RequestParam(value = "endTime", required = false) Long endTime,
  87. @RequestParam(value = "userName", required = false) String userName,
  88. @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
  89. @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
  90. if (semesterId == null) {
  91. throw ExceptionResultEnum.ERROR.exception("请选择学期");
  92. }
  93. return ResultUtil.ok(examTaskService.listTaskApply(semesterId, examId, auditStatus, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, pageNumber, pageSize));
  94. }
  95. /**
  96. * 入库申请-删除
  97. */
  98. @ApiOperation(value = "入库申请-删除")
  99. @RequestMapping(value = "/apply_delete", method = RequestMethod.POST)
  100. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
  101. public Result applyDelete(@RequestParam Long id) {
  102. examTaskService.applyDelete(id);
  103. return ResultUtil.ok(true);
  104. }
  105. /**
  106. * 根据命题任务ID查询单个数据
  107. *
  108. * @param examTaskId 命题任务ID
  109. * @return Result
  110. */
  111. @ApiOperation(value = "根据命题任务ID查询任务详情数据")
  112. @RequestMapping(value = "/apply_get_one", method = RequestMethod.POST)
  113. public Result applyGetOne(@RequestParam(value = "examTaskId") Long examTaskId,
  114. @RequestParam(value = "source", required = false) String source) {
  115. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  116. ExamTaskDetailCardDto detail = examTaskService.applyGetOne(examTaskId, source);
  117. if (Objects.nonNull(detail) && Objects.nonNull(detail.getFlowId())) {
  118. Task task = taskService.createTaskQuery().processInstanceId(detail.getFlowId())
  119. .taskCandidateOrAssigned(String.valueOf(sysUser.getId())).singleResult();
  120. if (Objects.nonNull(task)) {
  121. detail.setFlowTaskId(task.getId());
  122. } else {
  123. List<TFFlowJoin> tfFlowJoinList = tfFlowJoinService.findByObjectId(Long.parseLong(detail.getExamTaskId()));
  124. String flowId = null;
  125. TFFlowJoin tfFlowJoin = null;
  126. if (Objects.nonNull(tfFlowJoinList) && tfFlowJoinList.size() > 1) {
  127. tfFlowJoin = tfFlowJoinList.get(tfFlowJoinList.size() - 1);
  128. } else if (Objects.nonNull(tfFlowJoinList) && tfFlowJoinList.size() == 1) {
  129. tfFlowJoin = tfFlowJoinList.get(0);
  130. }
  131. flowId = Objects.nonNull(tfFlowJoin) ? String.valueOf(tfFlowJoin.getFlowId()) : flowId;
  132. task = taskService.createTaskQuery().processInstanceId(detail.getFlowId())
  133. .taskCandidateOrAssigned(String.valueOf(sysUser.getId())).singleResult();
  134. if (Objects.nonNull(task)) {
  135. detail.setFlowTaskId(task.getId());
  136. detail.setFlowId(flowId);
  137. }
  138. }
  139. }
  140. return ResultUtil.ok(detail);
  141. }
  142. /**
  143. * 入库申请-立即申请-提交
  144. *
  145. * @param examTaskDetail 命题任务详情对象
  146. * @return Result
  147. */
  148. @ApiOperation(value = "入库申请-暂存/提交")
  149. @RequestMapping(value = "/apply_save", method = RequestMethod.POST)
  150. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  151. public Result taskApplySave(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
  152. Map<String, Object> map = examTaskService.saveExamTaskDetail(examTaskDetail);
  153. ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
  154. if (examTaskDetail.getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && (Objects.nonNull(examTask.getReview()) && !examTask.getReview())) {
  155. // 校验是否可以提交打印状态
  156. printCommonService.checkDataNew(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
  157. }
  158. Boolean sendFlowMq = (Boolean) map.get(SystemConstant.SEND_FLOW_MQ);
  159. if (Objects.nonNull(sendFlowMq) && sendFlowMq) {
  160. activitiService.sendFlowTaskApproveMsg(map);
  161. }
  162. return ResultUtil.ok(true);
  163. }
  164. /**
  165. * 入库申请-撤销申请
  166. *
  167. * @param examTask 命题任务对象
  168. * @return Result
  169. */
  170. @ApiOperation(value = "入库申请-撤销申请")
  171. @RequestMapping(value = "/apply_status", method = RequestMethod.POST)
  172. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
  173. public Result taskApplyStatus(@RequestBody ExamTask examTask) {
  174. Map<String, Object> map = examTaskService.status(examTask);
  175. activitiService.sendFlowTaskApproveMsg(map);
  176. return ResultUtil.ok(true);
  177. }
  178. /**
  179. * 入库申请-新建任务-保存
  180. *
  181. * @param examTaskApplyTemp
  182. * @return
  183. */
  184. @ApiOperation(value = "入库申请-新建任务-保存")
  185. @RequestMapping(value = "/submit_task_apply", method = RequestMethod.POST)
  186. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
  187. public Result submitTaskApply(@RequestBody ExamTaskApplyTemp examTaskApplyTemp) throws IOException {
  188. Map<String, Object> map = examTaskService.submitTaskApply(examTaskApplyTemp);
  189. ExamTask examTask = (ExamTask) map.get(SystemConstant.EXAM_TASK);
  190. if (Objects.nonNull(examTask.getReview()) && !examTask.getReview()) {
  191. // 校验是否可以提交打印状态
  192. printCommonService.checkDataNew(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
  193. }
  194. Boolean sendFlowStartMq = (Boolean) map.get(SystemConstant.SEND_FLOW_START_MQ);
  195. Boolean sendFlowMq = (Boolean) map.get(SystemConstant.SEND_FLOW_MQ);
  196. if (Objects.nonNull(sendFlowStartMq) && sendFlowStartMq) {
  197. activitiService.sendFlowStartMsg(examTask.getFlowId());
  198. } else if (Objects.nonNull(sendFlowMq) && sendFlowMq) {
  199. activitiService.sendFlowTaskApproveMsg(map);
  200. }
  201. return ResultUtil.ok();
  202. }
  203. /**
  204. * 印刷室列表
  205. *
  206. * @return
  207. */
  208. @ApiOperation(value = "印刷室列表")
  209. @RequestMapping(value = "/list_task_print_house", method = RequestMethod.POST)
  210. public Result listTaskPrintHouse() {
  211. return ResultUtil.ok(examTaskPrintService.listHouse());
  212. }
  213. @ApiOperation(value = "题卡标题查询")
  214. @RequestMapping(value = "/find_card_title", method = RequestMethod.POST)
  215. @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
  216. public Result findCardTitle(@ApiParam(value = "题卡规则id", required = true) @RequestParam String cardRuleId) {
  217. return ResultUtil.ok((Object) examTaskService.findCardTitle(SystemConstant.convertIdToLong(cardRuleId)));
  218. }
  219. @ApiOperation(value = "命题任务-考试对象查询")
  220. @RequestMapping(value = "/find_exam_object", method = RequestMethod.POST)
  221. @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
  222. public Result findExamObject(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
  223. @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
  224. return ResultUtil.ok(examTaskService.findExamObjectDtoByPaperNumber(examId, paperNumber));
  225. }
  226. @ApiOperation(value = "入库申请-考生对象查询")
  227. @RequestMapping(value = "/find_exam_task_student_object", method = RequestMethod.POST)
  228. @Transactional(rollbackFor = Exception.class)
  229. @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
  230. public Result findExamTaskStudentObject(@RequestParam ExamObjectType examObjectType,
  231. @RequestParam(required = false) String examId,
  232. @RequestParam(required = false) String courseCode) throws Exception {
  233. SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
  234. // TODO: 2024/3/15 测试用
  235. if (!SystemConstant.strNotNull(examId)){
  236. examId = "497405213984948224";
  237. }
  238. return ResultUtil.ok(examTaskService.findExamTaskStudentObject(examObjectType, SystemConstant.convertIdToLong(examId), courseCode, requestUser));
  239. }
  240. @ApiOperation(value = "入库申请-导入考生对象")
  241. @RequestMapping(value = "/exam_task_exam_student_import", method = RequestMethod.POST)
  242. @Transactional(rollbackFor = Exception.class)
  243. @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
  244. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
  245. public Result examTaskExamStudentImport(@RequestParam MultipartFile file) throws Exception {
  246. SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
  247. return ResultUtil.ok(examTaskService.examTaskExamStudentImport(file, requestUser));
  248. }
  249. @ApiOperation(value = "入库申请-题库试卷列表")
  250. @RequestMapping(value = "/page_tiku_paper", method = RequestMethod.POST)
  251. @Transactional(rollbackFor = Exception.class)
  252. @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
  253. public Result pageTikuPaper(@ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
  254. @ApiParam(value = "试卷名称") @RequestParam(value = "paperName", required = false) String paperName,
  255. @ApiParam(value = "教师工号") @RequestParam(value = "account", required = false) String account,
  256. @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
  257. @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
  258. return ResultUtil.ok(examTaskService.pageTikuPaper(courseCode, paperName, account, pageNumber, pageSize));
  259. }
  260. @ApiOperation(value = "入库申请-题库试卷包")
  261. @RequestMapping(value = "/get_tiku_paper_data", method = RequestMethod.POST)
  262. @Transactional(rollbackFor = Exception.class)
  263. @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
  264. public Result getTikuPaperData(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") Long examId,
  265. @ApiParam(value = "题库试卷ID", required = true) @RequestParam(value = "paperId") Long paperId,
  266. @ApiParam(value = "唯一标识") @RequestParam(value = "uuid", required = false) String uuid) {
  267. return ResultUtil.ok(examTaskService.getTikuPaperData(examId, paperId, uuid));
  268. }
  269. @ApiOperation(value = "入库申请-下载审批表-获取试卷审批表数据")
  270. @RequestMapping(value = "/find_approve_form_json", method = RequestMethod.POST)
  271. @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
  272. public Result findApproveFormJson(@ApiParam(value = "命题任务id") @RequestParam(required = false) String examTaskId,
  273. @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
  274. @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
  275. return ResultUtil.ok(examTaskService.findExamTaskApprovalForm(SystemConstant.convertIdToLong(examTaskId), examId, paperNumber));
  276. }
  277. @ApiOperation(value = "入库申请-下载审批表-下载审批表PDF")
  278. @RequestMapping(value = "/find_approve_form_pdf", method = RequestMethod.POST)
  279. @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Result.class)})
  280. public void findApproveFormPdf(@Valid @RequestBody ApproveFormParams approveFormParams, BindingResult bindingResult) throws Exception {
  281. if (bindingResult.hasErrors()) {
  282. throw ExceptionResultEnum.ERROR.exception(bindingResult.getAllErrors().get(0).getDefaultMessage());
  283. }
  284. HttpServletResponse response = ServletUtil.getResponse();
  285. examTaskService.findExamTaskApprovalPdf(response, approveFormParams.getExamTaskId(), approveFormParams.getHtmlContent());
  286. }
  287. }