TFFlowController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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.SysOrg;
  20. import com.qmth.teachcloud.common.entity.SysUser;
  21. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  22. import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
  23. import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
  24. import com.qmth.teachcloud.common.enums.UploadFileEnum;
  25. import com.qmth.teachcloud.common.service.BasicAttachmentService;
  26. import com.qmth.teachcloud.common.service.SysOrgService;
  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.*;
  41. import java.util.stream.Collectors;
  42. /**
  43. * <p>
  44. * 流程表 前端控制器
  45. * </p>
  46. *
  47. * @author wangliang
  48. * @since 2021-08-02
  49. */
  50. @Api(tags = "流程Controller")
  51. @RestController
  52. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.flow}")
  53. @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
  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 UploadFileEnum type,
  72. @ApiParam(value = "流程文件名称", required = false) @RequestParam(required = false) String name,
  73. @ApiParam(value = "流程是否发布,true:发布,false:不发布", required = false) @RequestParam(required = false) Boolean publish) {
  74. BasicAttachment basicAttachment = null;
  75. try {
  76. int temp = file.getOriginalFilename().lastIndexOf(".");
  77. String fileName = file.getOriginalFilename().substring(0, temp);
  78. String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());
  79. if (!format.equalsIgnoreCase(".bpmn") && !format.contains("bpmn20.xml")) {
  80. throw ExceptionResultEnum.ERROR.exception("上传的流程文件格式只能为.bmpn或bpmn20.xml");
  81. }
  82. basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
  83. if (Objects.isNull(basicAttachment)) {
  84. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  85. }
  86. activitiService.uploadDeployment(file);
  87. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  88. TFFlow tfFlow = new TFFlow(SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), Objects.isNull(name) ? fileName : name, publish, sysUser.getId());
  89. tfFlowService.save(tfFlow);
  90. } catch (Exception e) {
  91. log.error("请求出错", e);
  92. if (Objects.nonNull(basicAttachment)) {
  93. basicAttachmentService.deleteAttachment(basicAttachment);
  94. }
  95. if (e instanceof DuplicateKeyException) {
  96. String errorColumn = e.getCause().toString();
  97. String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
  98. throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
  99. } else if (e instanceof ApiException) {
  100. ResultUtil.error((ApiException) e, e.getMessage());
  101. } else {
  102. ResultUtil.error(e.getMessage());
  103. }
  104. }
  105. return ResultUtil.ok(new EditResult(basicAttachment.getId()));
  106. }
  107. @ApiOperation(value = "发布流程")
  108. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  109. @RequestMapping(value = "/publish", method = RequestMethod.POST)
  110. public Result publish(@ApiParam(value = "流程文件id", required = true) @RequestParam String id) {
  111. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  112. UpdateWrapper<TFFlow> tfFlowUpdateWrapper = new UpdateWrapper<>();
  113. tfFlowUpdateWrapper.lambda().eq(TFFlow::getId, id)
  114. .set(TFFlow::getPublish, true)
  115. .set(TFFlow::getUpdateId, sysUser.getId())
  116. .set(TFFlow::getUpdateTime, System.currentTimeMillis());
  117. return ResultUtil.ok(tfFlowService.update(tfFlowUpdateWrapper));
  118. }
  119. @ApiOperation(value = "流程列表")
  120. @ApiResponses({@ApiResponse(code = 200, message = "流程信息", response = TFFlow.class)})
  121. @RequestMapping(value = "/list", method = RequestMethod.POST)
  122. public Result list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
  123. @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  124. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  125. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  126. return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
  127. }
  128. @Resource
  129. SysOrgService sysOrgService;
  130. @ApiOperation(value = "审批流程")
  131. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  132. @RequestMapping(value = "/task/approve", method = RequestMethod.POST)
  133. public Result taskApprove(@ApiParam(value = "流程任务id", required = true) @RequestParam String taskId,
  134. @ApiParam(value = "流程审批操作", required = false) @RequestParam(required = false) FlowApprovePassEnum approvePass,
  135. @ApiParam(value = "流程审核意见", required = false) @RequestParam(required = false) String remark,
  136. @ApiParam(value = "流程驳回节点", required = false) @RequestParam(required = false) Integer setup) {
  137. // Map<String, Object> map = new HashMap<>();
  138. // map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> taskId);
  139. // map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> approvePass);
  140. // map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> remark);
  141. // map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> setup);
  142. // activitiService.taskApprove(map);
  143. List<SysOrg> sysOrgList = sysOrgService.findAllByOrgId(8L, new ArrayList<>());
  144. // Set<Long> orgIds = sysOrgList.stream().map(s -> s.getParentId()).collect(Collectors.toSet());
  145. // for (Long l : orgIds) {
  146. // sysOrgList = sysOrgService.findAllByOrgId(l);
  147. // }
  148. return ResultUtil.ok();
  149. }
  150. @ApiOperation(value = "流程审批记录列表")
  151. @ApiResponses({@ApiResponse(code = 200, message = "流程审批记录信息", response = FlowApproveResult.class)})
  152. @RequestMapping(value = "/approve/list", method = RequestMethod.POST)
  153. public Result taskApproveList(@ApiParam(value = "发起人名称", required = false) @RequestParam(required = false) String startName,
  154. @ApiParam(value = "页码", required = true) @RequestParam Integer pageNumber,
  155. @ApiParam(value = "数量", required = true) @RequestParam Integer pageSize) {
  156. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  157. return ResultUtil.ok(tfFlowService.flowApproveList(new Page<>(pageNumber, pageSize), startName, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
  158. }
  159. /**
  160. * 流程审批记录启用/禁用
  161. *
  162. * @param flowApproveParam
  163. * @return
  164. */
  165. @ApiOperation(value = "流程审批记录启用/禁用")
  166. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  167. @RequestMapping(value = "/approve/enable", method = RequestMethod.POST)
  168. public Result enable(@Valid @RequestBody FlowApproveParam flowApproveParam, BindingResult bindingResult) {
  169. if (bindingResult.hasErrors()) {
  170. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  171. }
  172. UpdateWrapper<TFFlowApproveLog> tfFlowApproveLogUpdateWrapper = new UpdateWrapper<>();
  173. tfFlowApproveLogUpdateWrapper.lambda().eq(TFFlowApproveLog::getFlowId, flowApproveParam.getFlowId())
  174. .set(TFFlowApproveLog::getEnable, flowApproveParam.getEnable());
  175. return ResultUtil.ok(tfFlowApproveLogService.update(tfFlowApproveLogUpdateWrapper));
  176. }
  177. @ApiOperation(value = "流程终止")
  178. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  179. @RequestMapping(value = "/end", method = RequestMethod.POST)
  180. public Result end(@ApiParam(value = "流程id", required = true) @RequestParam String flowId) {
  181. activitiService.flowEnd(flowId);
  182. return ResultUtil.ok();
  183. }
  184. @ApiOperation(value = "获取所有流程节点")
  185. @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
  186. @RequestMapping(value = "/task/all", method = RequestMethod.POST)
  187. public Result taskAll(@ApiParam(value = "流程id", required = true) @RequestParam String flowId) {
  188. return ResultUtil.ok(activitiService.getTaskAll(flowId));
  189. }
  190. }