全部开发者教程

企业级在线办公系统

上节课我们在前端页面看到了表格中的报销申请分页数据,即便设置上查询条件也能正常查询出数据。那么接下来我们应该去做CRUD中的添加功能,也就是创建报销申请。报销申请是需要领导审批的,因此需要我们写异步线程任务类,调用工作流项目,创建审批报销申请的工作流实例。

图片描述
图片描述

一、编写持久层代码

TbUserDao类中的searchUserInfo()searchDeptManagerId()searchGmId()方法,我们在创建会议申请的时候就调用过,所以这些DAO方法我们不用管。

TbReimDao.xml文件中,定义更新报销记录instance_id字段值的SQL语句。

<update id="updateReimInstanceId" parameterType="HashMap">
    UPDATE tb_reim
    SET instance_id = #{instanceId}
    WHERE id = #{id}
</update>

TbReimDao.java接口中,声明DAO方法。

public interface TbReimDao {
    ……
    public int updateReimInstanceId(HashMap param);
}

二、定义线程任务类

创建报销申请,既要向tb_reim表保存数据,还要创建工作流实例,所以我们先把异步线程任务类创建出来,调用工作流项目的Web方法。

URI路径:/workflow/startReimProcess

序号 参数 类型 含义
1 url String 接收审批结果的URL地址
2 creatorId String 申请人userId
3 creatorName String 申请人姓名
4 code String 慕课网授权字符串
5 tcode String 课程授权字符串
6 title String 报销申请标题
7 managerId int 部门经理的userId
8 gmId int 总经理的userId

com.example.emos.api.task包中创建ReimWorkflowTask.java类,代码如下:

@Component
@Slf4j
public class ReimWorkflowTask {
    @Value("${emos.code}")
    private String code;

    @Value("${emos.tcode}")
    private String tcode;

    @Value("${workflow.url}")
    private String workflow;

    @Value("${emos.recieveNotify}")
    private String recieveNotify;

    @Autowired
    private TbUserDao userDao;

    @Autowired
    private TbReimDao reimDao;

    @Async("AsyncTaskExecutor")
    public void startReimWorkflow(int id, int creatorId) {
        HashMap info = userDao.searchUserInfo(creatorId);
        JSONObject json = new JSONObject();
        json.set("url", recieveNotify);
        json.set("creatorId", creatorId);
        json.set("creatorName", info.get("name").toString());
        json.set("code", code);
        json.set("tcode", tcode);
        json.set("title", info.get("dept").toString() + info.get("name").toString() + "的报销");
        Integer managerId = userDao.searchDeptManagerId(creatorId);
        json.set("managerId", managerId);
        Integer gmId = userDao.searchGmId();
        json.set("gmId", gmId);

        String url = workflow + "/workflow/startReimProcess";
        HttpResponse resp = HttpRequest.post(url).header("Content-Type", "application/json")
                .body(json.toString()).execute();
        if (resp.getStatus() == 200) {
            json = JSONUtil.parseObj(resp.body());
            String instanceId = json.getStr("instanceId");
            HashMap param = new HashMap();
            param.put("id", id);
            param.put("instanceId", instanceId);
            int rows = reimDao.updateReimInstanceId(param);
            if (rows != 1) {
                throw new EmosException("保存报销申请工作流实例ID失败");
            }
        } else {
            log.error(resp.body());
        }
    }
}