package com.qmth.distributed.print.api; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.qmth.boot.api.constant.ApiConstant; import com.qmth.boot.api.exception.ApiException; import com.qmth.distributed.print.business.bean.params.FlowApproveParam; import com.qmth.distributed.print.business.bean.params.FlowParam; import com.qmth.distributed.print.business.bean.params.FlowTaskApproveParam; import com.qmth.distributed.print.business.bean.result.EditResult; import com.qmth.distributed.print.business.bean.result.FlowApproveResult; import com.qmth.distributed.print.business.bean.result.FlowTaskApprovePeopleAllResult; import com.qmth.distributed.print.business.bean.result.FlowTaskResult; import com.qmth.distributed.print.business.entity.*; import com.qmth.distributed.print.business.enums.MessageEnum; import com.qmth.distributed.print.business.service.*; import com.qmth.teachcloud.common.bean.params.ApproveUserResult; import com.qmth.teachcloud.common.contant.SystemConstant; import com.qmth.teachcloud.common.entity.BasicAttachment; import com.qmth.teachcloud.common.entity.SysUser; import com.qmth.teachcloud.common.enums.*; import com.qmth.teachcloud.common.service.BasicAttachmentService; import com.qmth.teachcloud.common.service.SysUserService; import com.qmth.teachcloud.common.util.JacksonUtil; import com.qmth.teachcloud.common.util.Result; import com.qmth.teachcloud.common.util.ResultUtil; import com.qmth.teachcloud.common.util.ServletUtil; import io.swagger.annotations.*; import org.activiti.engine.TaskService; import org.activiti.engine.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.io.IOException; import java.util.*; /** *
* 流程表 前端控制器 *
* * @author wangliang * @since 2021-08-02 */ @Api(tags = "流程Controller") @RestController @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.flow}") //@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE) @Validated public class TFFlowController { private final static Logger log = LoggerFactory.getLogger(TFFlowController.class); @Resource PrintCommonService printCommonService; @Resource BasicAttachmentService basicAttachmentService; @Resource ActivitiService activitiService; @Resource TFFlowService tfFlowService; @Resource TFFlowApproveLogService tfFlowApproveLogService; @Autowired SysUserService sysUserService; @Autowired BasicMessageService basicMessageService; @Resource TaskService taskService; @Resource TFFlowLogService tfFlowLogService; @ApiOperation(value = "注册流程") @Transactional @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)}) @RequestMapping(value = "/register", method = RequestMethod.POST) public Result register(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file, @ApiParam(value = "流程文件名称", required = true) @RequestParam String name) { BasicAttachment basicAttachment = null; try { int temp = file.getOriginalFilename().lastIndexOf("."); String fileName = file.getOriginalFilename().substring(0, temp); String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length()); if (!format.equalsIgnoreCase(".bpmn")) { throw ExceptionResultEnum.ERROR.exception("上传的流程文件格式只能为.bmpn"); } basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), UploadFileEnum.FILE); if (Objects.isNull(basicAttachment)) { throw ExceptionResultEnum.ATTACHMENT_ERROR.exception(); } activitiService.uploadDeployment(file); String actFlowId = tfFlowService.findActIdByFlowKey(SystemConstant.GDYKDX_FLOW_KEY); SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); TFFlow tfFlow = new TFFlow(SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), name, sysUser.getId(), fileName, actFlowId); tfFlowService.save(tfFlow); } catch (Exception e) { log.error("请求出错", e); if (Objects.nonNull(basicAttachment)) { basicAttachmentService.deleteAttachment(basicAttachment); } if (e instanceof DuplicateKeyException) { String errorColumn = e.getCause().toString(); String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", ""); throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入"); } else if (e instanceof ApiException) { ResultUtil.error((ApiException) e, e.getMessage()); } else { ResultUtil.error(e.getMessage()); } } return ResultUtil.ok(new EditResult(basicAttachment.getId())); } // @ApiOperation(value = "发布流程") // @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)}) // @RequestMapping(value = "/publish", method = RequestMethod.POST) // public Result publish(@ApiParam(value = "流程文件id", required = true) @RequestParam String id) { // SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); // UpdateWrapper tfFlowUpdateWrapper = new UpdateWrapper<>(); // tfFlowUpdateWrapper.lambda().eq(TFFlow::getId, Long.parseLong(id)) // .set(TFFlow::getPublish, true) // .set(TFFlow::getUpdateId, sysUser.getId()) // .set(TFFlow::getUpdateTime, System.currentTimeMillis()); // return ResultUtil.ok(tfFlowService.update(tfFlowUpdateWrapper)); // } @ApiOperation(value = "流程逻辑删除") @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)}) @RequestMapping(value = "/enable", method = RequestMethod.POST) public Result enable(@Valid @RequestBody FlowParam flowParam, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage()); } return ResultUtil.ok(activitiService.flowDelete(flowParam.getId())); } @ApiOperation(value = "流程列表") @ApiResponses({@ApiResponse(code = 200, message = "流程信息", response = TFFlow.class)}) @RequestMapping(value = "/list", method = RequestMethod.POST) public Result list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name, @ApiParam(value = "页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber, @ApiParam(value = "数量", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) { SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId())); } @ApiOperation(value = "审批流程") @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)}) @RequestMapping(value = "/task/approve", method = RequestMethod.POST) public Result taskApprove(@Valid @RequestBody FlowTaskApproveParam flowTaskApproveParam, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage()); } Map