审批完成之后,领导说这个审批的流程有问题,不想要了,要撤回,那么我们来开发一个撤回的功能

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"

}

 可以看到 不管他撤回多少次,我们都能看到以前的审批信息,如果你之前上传了附件,也可以拿这个这个地址字段,在你的代码进行扩展。

springboot使用flowable(4)_我是一只代码狗的博客-CSDN博客

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐