TFFlowController.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.qmth.distributed.print.api;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.qmth.boot.api.annotation.Aac;
  6. import com.qmth.boot.api.annotation.BOOL;
  7. import com.qmth.boot.api.constant.ApiConstant;
  8. import com.qmth.boot.api.exception.ApiException;
  9. import com.qmth.distributed.print.business.bean.result.EditResult;
  10. import com.qmth.distributed.print.business.entity.TFFlow;
  11. import com.qmth.distributed.print.business.service.ActivitiService;
  12. import com.qmth.distributed.print.business.service.PrintCommonService;
  13. import com.qmth.distributed.print.business.service.TFFlowService;
  14. import com.qmth.teachcloud.common.base.BaseListPage;
  15. import com.qmth.teachcloud.common.base.BasePage;
  16. import com.qmth.teachcloud.common.contant.SystemConstant;
  17. import com.qmth.teachcloud.common.entity.BasicAttachment;
  18. import com.qmth.teachcloud.common.entity.SysUser;
  19. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  20. import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
  21. import com.qmth.teachcloud.common.enums.UploadFileEnum;
  22. import com.qmth.teachcloud.common.service.BasicAttachmentService;
  23. import com.qmth.teachcloud.common.util.Result;
  24. import com.qmth.teachcloud.common.util.ResultUtil;
  25. import com.qmth.teachcloud.common.util.ServletUtil;
  26. import io.swagger.annotations.*;
  27. import org.activiti.engine.RuntimeService;
  28. import org.activiti.engine.TaskService;
  29. import org.activiti.engine.task.Task;
  30. import org.slf4j.Logger;
  31. import org.slf4j.LoggerFactory;
  32. import org.springframework.dao.DuplicateKeyException;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import org.springframework.web.bind.annotation.RequestMapping;
  35. import org.springframework.web.bind.annotation.RequestMethod;
  36. import org.springframework.web.bind.annotation.RequestParam;
  37. import org.springframework.web.bind.annotation.RestController;
  38. import org.springframework.web.multipart.MultipartFile;
  39. import javax.annotation.Resource;
  40. import java.util.HashMap;
  41. import java.util.List;
  42. import java.util.Map;
  43. import java.util.Objects;
  44. /**
  45. * <p>
  46. * 流程表 前端控制器
  47. * </p>
  48. *
  49. * @author wangliang
  50. * @since 2021-08-02
  51. */
  52. @Api(tags = "流程Controller")
  53. @RestController
  54. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.flow}")
  55. @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
  56. public class TFFlowController {
  57. private final static Logger log = LoggerFactory.getLogger(TFFlowController.class);
  58. @Resource
  59. PrintCommonService printCommonService;
  60. @Resource
  61. BasicAttachmentService basicAttachmentService;
  62. @Resource
  63. ActivitiService activitiService;
  64. @Resource
  65. TFFlowService tfFlowService;
  66. @Resource
  67. RuntimeService runtimeService;
  68. @Resource
  69. TaskService taskService;
  70. @ApiOperation(value = "注册流程")
  71. @Transactional
  72. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
  73. @RequestMapping(value = "/register", method = RequestMethod.POST)
  74. public Result register(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
  75. @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type,
  76. @ApiParam(value = "流程文件名称", required = false) @RequestParam(required = false) String name,
  77. @ApiParam(value = "流程是否发布,true:发布,false:不发布", required = false) @RequestParam(required = false) Boolean publish) {
  78. BasicAttachment basicAttachment = null;
  79. try {
  80. int temp = file.getOriginalFilename().lastIndexOf(".");
  81. String fileName = file.getOriginalFilename().substring(0, temp);
  82. String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());
  83. if (!format.equalsIgnoreCase(".bpmn") && !format.contains("bpmn20.xml")) {
  84. throw ExceptionResultEnum.ERROR.exception("上传的流程文件格式只能为.bmpn或bpmn20.xml");
  85. }
  86. basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
  87. if (Objects.isNull(basicAttachment)) {
  88. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  89. }
  90. activitiService.uploadDeployment(file);
  91. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  92. Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) && !Objects.equals("", ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : sysUser.getSchoolId();
  93. TFFlow tfFlow = new TFFlow(schoolId, sysUser.getOrgId(), Objects.isNull(name) ? fileName : name, publish, sysUser.getId());
  94. tfFlowService.save(tfFlow);
  95. } catch (Exception e) {
  96. log.error("请求出错", e);
  97. if (Objects.nonNull(basicAttachment)) {
  98. basicAttachmentService.deleteAttachment(basicAttachment);
  99. }
  100. if (e instanceof DuplicateKeyException) {
  101. String errorColumn = e.getCause().toString();
  102. String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
  103. throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
  104. } else if (e instanceof ApiException) {
  105. ResultUtil.error((ApiException) e, e.getMessage());
  106. } else {
  107. ResultUtil.error(e.getMessage());
  108. }
  109. }
  110. return ResultUtil.ok(new EditResult(basicAttachment.getId()));
  111. }
  112. @ApiOperation(value = "发布流程")
  113. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
  114. @RequestMapping(value = "/publish", method = RequestMethod.POST)
  115. public Result publish(@ApiParam(value = "流程文件id", required = true) @RequestParam String id) {
  116. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  117. UpdateWrapper<TFFlow> tfFlowUpdateWrapper = new UpdateWrapper<>();
  118. tfFlowUpdateWrapper.lambda().eq(TFFlow::getId, id)
  119. .set(TFFlow::getPublish, true)
  120. .set(TFFlow::getUpdateId, sysUser.getId())
  121. .set(TFFlow::getUpdateTime, System.currentTimeMillis());
  122. return ResultUtil.ok(tfFlowService.update(tfFlowUpdateWrapper));
  123. }
  124. @ApiOperation(value = "流程列表")
  125. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = TFFlow.class)})
  126. @RequestMapping(value = "/list", method = RequestMethod.POST)
  127. public Result list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
  128. @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  129. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  130. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  131. Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) && !Objects.equals("", ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : sysUser.getSchoolId();
  132. return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, schoolId, sysUser.getOrgId()));
  133. }
  134. @ApiOperation(value = "启动流程")
  135. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
  136. @RequestMapping(value = "/start", method = RequestMethod.POST)
  137. public Result start() {
  138. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  139. Map<String, Object> map = new HashMap<>();
  140. map.computeIfAbsent(SystemConstant.TEACH_ID, v -> String.valueOf(sysUser.getId()));
  141. activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
  142. return ResultUtil.ok();
  143. }
  144. @ApiOperation(value = "命题老师获取待办流程")
  145. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
  146. @RequestMapping(value = "teach/task/list", method = RequestMethod.POST)
  147. public Result teachTaskList(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  148. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  149. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  150. List<Task> taskList = taskService.createTaskQuery().taskAssignee(String.valueOf(sysUser.getId())).orderByTaskCreateTime().desc().list();
  151. // BaseListPage<Task> taskIPage = new BaseListPage<>(tasks.subList(pageNumber, pageSize), pageNumber, pageSize, tasks.size());
  152. return ResultUtil.ok(true);
  153. }
  154. }