TFFlowController.java 12 KB

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