TFFlowController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package com.qmth.distributed.print.api;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.qmth.boot.api.annotation.Aac;
  5. import com.qmth.boot.api.annotation.BOOL;
  6. import com.qmth.boot.api.constant.ApiConstant;
  7. import com.qmth.boot.api.exception.ApiException;
  8. import com.qmth.distributed.print.business.bean.params.FlowApproveParam;
  9. import com.qmth.distributed.print.business.bean.result.EditResult;
  10. import com.qmth.distributed.print.business.bean.result.FlowApproveResult;
  11. import com.qmth.distributed.print.business.entity.TFFlow;
  12. import com.qmth.distributed.print.business.entity.TFFlowApproveLog;
  13. import com.qmth.distributed.print.business.service.ActivitiService;
  14. import com.qmth.distributed.print.business.service.PrintCommonService;
  15. import com.qmth.distributed.print.business.service.TFFlowApproveLogService;
  16. import com.qmth.distributed.print.business.service.TFFlowService;
  17. import com.qmth.teachcloud.common.contant.SystemConstant;
  18. import com.qmth.teachcloud.common.entity.BasicAttachment;
  19. import com.qmth.teachcloud.common.entity.SysUser;
  20. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  21. import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
  22. import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
  23. import com.qmth.teachcloud.common.enums.UploadFileEnum;
  24. import com.qmth.teachcloud.common.service.BasicAttachmentService;
  25. import com.qmth.teachcloud.common.util.Result;
  26. import com.qmth.teachcloud.common.util.ResultUtil;
  27. import com.qmth.teachcloud.common.util.ServletUtil;
  28. import io.swagger.annotations.*;
  29. import org.slf4j.Logger;
  30. import org.slf4j.LoggerFactory;
  31. import org.springframework.dao.DuplicateKeyException;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import org.springframework.validation.BindingResult;
  34. import org.springframework.web.bind.annotation.*;
  35. import org.springframework.web.multipart.MultipartFile;
  36. import javax.annotation.Resource;
  37. import javax.validation.Valid;
  38. import java.util.HashMap;
  39. import java.util.Map;
  40. import java.util.Objects;
  41. /**
  42. * <p>
  43. * 流程表 前端控制器
  44. * </p>
  45. *
  46. * @author wangliang
  47. * @since 2021-08-02
  48. */
  49. @Api(tags = "流程Controller")
  50. @RestController
  51. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.flow}")
  52. @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
  53. public class TFFlowController {
  54. private final static Logger log = LoggerFactory.getLogger(TFFlowController.class);
  55. @Resource
  56. PrintCommonService printCommonService;
  57. @Resource
  58. BasicAttachmentService basicAttachmentService;
  59. @Resource
  60. ActivitiService activitiService;
  61. @Resource
  62. TFFlowService tfFlowService;
  63. @Resource
  64. TFFlowApproveLogService tfFlowApproveLogService;
  65. @ApiOperation(value = "注册流程")
  66. @Transactional
  67. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  68. @RequestMapping(value = "/register", method = RequestMethod.POST)
  69. public Result register(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
  70. @ApiParam(value = "流程文件名称", required = true) @RequestParam String name) {
  71. BasicAttachment basicAttachment = null;
  72. try {
  73. int temp = file.getOriginalFilename().lastIndexOf(".");
  74. String fileName = file.getOriginalFilename().substring(0, temp);
  75. String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());
  76. if (!format.equalsIgnoreCase(".bpmn")) {
  77. throw ExceptionResultEnum.ERROR.exception("上传的流程文件格式只能为.bmpn");
  78. }
  79. basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), UploadFileEnum.FILE);
  80. if (Objects.isNull(basicAttachment)) {
  81. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  82. }
  83. activitiService.uploadDeployment(file);
  84. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  85. TFFlow tfFlow = new TFFlow(SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), name, sysUser.getId(), fileName);
  86. tfFlowService.save(tfFlow);
  87. } catch (Exception e) {
  88. log.error("请求出错", e);
  89. if (Objects.nonNull(basicAttachment)) {
  90. basicAttachmentService.deleteAttachment(basicAttachment);
  91. }
  92. if (e instanceof DuplicateKeyException) {
  93. String errorColumn = e.getCause().toString();
  94. String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
  95. throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
  96. } else if (e instanceof ApiException) {
  97. ResultUtil.error((ApiException) e, e.getMessage());
  98. } else {
  99. ResultUtil.error(e.getMessage());
  100. }
  101. }
  102. return ResultUtil.ok(new EditResult(basicAttachment.getId()));
  103. }
  104. // @ApiOperation(value = "发布流程")
  105. // @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  106. // @RequestMapping(value = "/publish", method = RequestMethod.POST)
  107. // public Result publish(@ApiParam(value = "流程文件id", required = true) @RequestParam String id) {
  108. // SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  109. // UpdateWrapper tfFlowUpdateWrapper = new UpdateWrapper<>();
  110. // tfFlowUpdateWrapper.lambda().eq(TFFlow::getId, Long.parseLong(id))
  111. // .set(TFFlow::getPublish, true)
  112. // .set(TFFlow::getUpdateId, sysUser.getId())
  113. // .set(TFFlow::getUpdateTime, System.currentTimeMillis());
  114. // return ResultUtil.ok(tfFlowService.update(tfFlowUpdateWrapper));
  115. // }
  116. @ApiOperation(value = "流程逻辑删除")
  117. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  118. @RequestMapping(value = "/enable", method = RequestMethod.POST)
  119. public Result enable() {
  120. return ResultUtil.ok(activitiService.flowDelete());
  121. }
  122. @ApiOperation(value = "流程列表")
  123. @ApiResponses({@ApiResponse(code = 200, message = "流程信息", response = TFFlow.class)})
  124. @RequestMapping(value = "/list", method = RequestMethod.POST)
  125. public Result list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
  126. @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  127. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  128. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  129. return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
  130. }
  131. @ApiOperation(value = "审批流程")
  132. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  133. @RequestMapping(value = "/task/approve", method = RequestMethod.POST)
  134. public Result taskApprove(@ApiParam(value = "流程任务id", required = true) @RequestParam String taskId,
  135. @ApiParam(value = "流程审批操作", required = false) @RequestParam(required = false) FlowApprovePassEnum approvePass,
  136. @ApiParam(value = "流程审核意见", required = false) @RequestParam(required = false) String remark,
  137. @ApiParam(value = "流程驳回节点", required = false) @RequestParam(required = false) Integer setup) {
  138. Map<String, Object> map = new HashMap<>();
  139. map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> taskId);
  140. map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> approvePass);
  141. map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> remark);
  142. map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> setup);
  143. activitiService.taskApprove(map);
  144. return ResultUtil.ok();
  145. }
  146. @ApiOperation(value = "流程审批记录列表")
  147. @ApiResponses({@ApiResponse(code = 200, message = "流程审批记录信息", response = FlowApproveResult.class)})
  148. @RequestMapping(value = "/approve/list", method = RequestMethod.POST)
  149. public Result taskApproveList(@ApiParam(value = "发起人名称", required = false) @RequestParam(required = false) String startName,
  150. @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  151. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  152. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  153. return ResultUtil.ok(tfFlowService.flowApproveList(new Page<>(pageNumber, pageSize), startName, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), null));
  154. }
  155. @ApiOperation(value = "流程审批记录逻辑删除")
  156. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  157. @RequestMapping(value = "/approve/enable", method = RequestMethod.POST)
  158. public Result enable(@Valid @RequestBody FlowApproveParam flowApproveParam, BindingResult bindingResult) {
  159. if (bindingResult.hasErrors()) {
  160. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  161. }
  162. UpdateWrapper<TFFlowApproveLog> tfFlowApproveLogUpdateWrapper = new UpdateWrapper<>();
  163. tfFlowApproveLogUpdateWrapper.lambda().eq(TFFlowApproveLog::getFlowId, flowApproveParam.getFlowId())
  164. .set(TFFlowApproveLog::getEnable, flowApproveParam.getEnable());
  165. return ResultUtil.ok(tfFlowApproveLogService.update(tfFlowApproveLogUpdateWrapper));
  166. }
  167. @ApiOperation(value = "流程终止")
  168. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  169. @RequestMapping(value = "/end", method = RequestMethod.POST)
  170. public Result end(@ApiParam(value = "流程id", required = true) @RequestParam String flowId) {
  171. activitiService.flowEnd(flowId);
  172. return ResultUtil.ok();
  173. }
  174. @ApiOperation(value = "获取所有流程节点")
  175. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  176. @RequestMapping(value = "/task/all", method = RequestMethod.POST)
  177. public Result taskAll(@ApiParam(value = "流程id", required = true) @RequestParam String flowId) {
  178. return ResultUtil.ok(activitiService.getTaskAll(flowId));
  179. }
  180. @ApiOperation(value = "获取所有流程节点待审批人")
  181. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  182. @RequestMapping(value = "/task/approver/people_all", method = RequestMethod.POST)
  183. public Result taskApproverAll(@ApiParam(value = "课程编码", required = false) @RequestParam(required = false) String courseCode,
  184. @ApiParam(value = "流程节点id", required = false) @RequestParam(required = false) String taskId) {
  185. return ResultUtil.ok(activitiService.taskApproverAll(courseCode, taskId));
  186. }
  187. }