审批完成之后,领导说这个审批的流程有问题,不想要了,要撤回,那么我们来开发一个撤回的功能
package com.dmg.service;
public interface QjService {
public void withdraw(Req req);
}
package com.dmg.service.impl;
@Service
public class QjServiceImpl implements QjService {
@Autowired
private QjMapper qjMapper;
@Autowired
private FlowService flowService;
/**
* 撤回
* @param req
*/
@Transactional
@Override
public void withdraw(Req req) {
Qj qj=qjMapper.selectById(req.getId());
if(!"3".equals(qj.getApprovalStatus())){
throw new RuntimeException("当前状态,不是审批通过,不能撤回");
}
//状态改为未提交
//流程实例id 清空 这样才能 启动新的流程实例 就和我们之前在提交请假单 启动流程实例的时候 结合上了
UpdateWrapper<Qj>updateWrapper=new UpdateWrapper();
updateWrapper.set("approval_status","1");
updateWrapper.set("instance_id",null);
updateWrapper.eq("id",qj.getId());
qjMapper.update(qj,updateWrapper);
}
}
package com.dmg.controller;
@RestController
@RequestMapping("/qj")
public class QjController {
@Autowired
private QjService qjService;
/***
* 撤回请假单
* @param req
* @return
*/
@PostMapping("withdraw")
public Result withdraw(@RequestBody Req req){
qjService.withdraw(req);
return Result.success();
}
}
我们来看下结果
http://localhost:8080/qj/withdraw
{
"id":"001"
}
可以看到数据已经更改,这样我们就可以发起新的流程了
现在的流程,已经被撤回了一次,上一轮的审批过程也不知道在什么地方,所以这就是我们之前设计历史审批表的原因了,我们要看到他历史审批,不管他经历过多少轮,我们都能在历史审批表中查看到
package com.dmg.mapper;
public interface HisApprovalMapper extends BaseMapper<HisApproval> {
/**
* 查询历史审批
* @param businessId 业务表主键
* @return
*/
List<HisApprovalVo> getList(@Param("businessId") String businessId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dmg.mapper.HisApprovalMapper">
<select id="getList" resultType="com.dmg.vo.HisApprovalVo">
SELECT
*
FROM
tb_his_approval
WHERE business_id=#{businessId}
ORDER BY approval_time desc
</select>
</mapper>
package com.dmg.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class HisApprovalVo {
/**
* 主键
*/
private String id;
/**
* 业务表主键
*/
private String businessId;
/**
* 审批人姓名
*/
private String approvalName;
/**
* 审批时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date approvalTime;
/**
* 审批意见
*/
private String approvalComments;
/**
* 审批附件的地址,可以看到当时上传的文件,这是属于你的扩展功能,可以在这里自己扩展
*/
private String approvalAttachmentUrl;
/**
* 任务节点
*/
private String taskName;
}
package com.dmg.service;
import com.dmg.vo.HisApprovalVo;
import java.util.List;
public interface HisApprovalService {
public List<HisApprovalVo> getList(String businessId);
}
package com.dmg.service.impl;
@Service
public class HisApprovalServiceImpl implements HisApprovalService {
@Autowired
private HisApprovalMapper hisApprovalMapper;
/**
* 查询历史审批
* @param businessId 业务表主键
* @return
*/
@Override
public List<HisApprovalVo> getList(String businessId) {
return hisApprovalMapper.getList(businessId);
}
}
package com.dmg.controller;
@RestController
@RequestMapping("/hisApproval")
public class HisApprovalController {
@Autowired
private HisApprovalService hisApprovalService;
/**
* 查询历史审批信息
*/
@PostMapping("getList")
public Result getList(@RequestBody IdReq req){
return Result.success(hisApprovalService.getList(req.getBusinessId()));
}
}
package com.dmg.vo.req;
import lombok.Data;
@Data
public class IdReq {
/**
* 业务表主键
*/
private String businessId;
}
我们来看下结果
http://localhost:8080/hisApproval/getList
{
"businessKey":"001"
}
可以看到 不管他撤回多少次,我们都能看到以前的审批信息,如果你之前上传了附件,也可以拿这个这个地址字段,在你的代码进行扩展。