package com.qmth.distributed.print.api; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qmth.boot.api.annotation.Aac; import com.qmth.boot.api.annotation.BOOL; 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.result.EditResult; import com.qmth.distributed.print.business.bean.result.FlowApproveResult; import com.qmth.distributed.print.business.entity.TFFlow; import com.qmth.distributed.print.business.entity.TFFlowApproveLog; import com.qmth.distributed.print.business.service.ActivitiService; import com.qmth.distributed.print.business.service.PrintCommonService; import com.qmth.distributed.print.business.service.TFFlowApproveLogService; import com.qmth.distributed.print.business.service.TFFlowService; import com.qmth.teachcloud.common.contant.SystemConstant; import com.qmth.teachcloud.common.entity.BasicAttachment; import com.qmth.teachcloud.common.entity.SysOrg; import com.qmth.teachcloud.common.entity.SysUser; import com.qmth.teachcloud.common.enums.ExceptionResultEnum; import com.qmth.teachcloud.common.enums.FieldUniqueEnum; import com.qmth.teachcloud.common.enums.FlowApprovePassEnum; import com.qmth.teachcloud.common.enums.UploadFileEnum; import com.qmth.teachcloud.common.service.BasicAttachmentService; import com.qmth.teachcloud.common.service.SysOrgService; 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.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DuplicateKeyException; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; /** *
* 流程表 前端控制器 *
* * @author wangliang * @since 2021-08-02 */ @Api(tags = "流程Controller") @RestController @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.flow}") @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE) 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; @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 UploadFileEnum type, @ApiParam(value = "流程文件名称", required = false) @RequestParam(required = false) String name, @ApiParam(value = "流程是否发布,true:发布,false:不发布", required = false) @RequestParam(required = false) Boolean publish) { 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") && !format.contains("bpmn20.xml")) { throw ExceptionResultEnum.ERROR.exception("上传的流程文件格式只能为.bmpn或bpmn20.xml"); } basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type); if (Objects.isNull(basicAttachment)) { throw ExceptionResultEnum.ATTACHMENT_ERROR.exception(); } activitiService.uploadDeployment(file); SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); TFFlow tfFlow = new TFFlow(SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId(), Objects.isNull(name) ? fileName : name, publish, sysUser.getId()); 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