转:传智播客—jbpm与OA项目(八)续一

二、审批流转之待我审批

 

         待我审批,查看数据库中的任务记录,那些分配给“我”(由“我”负责)的任务,便是待我审批的任务。

 

clip_image002

 

 

 

1.待我审批

 

/**

 

 * 待我审批(我的任务列表)

 

 */

 

public ActionForward taskList(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取当前页码

 

    int pageNum = RequestUtils.getIntParam(request, "pageNum", 1);

 

    // 获取当前用户

 

    User user = (User) request.getSession().getAttribute("user");

 

    // 当前用户 未完成的 任务列表

 

    PageView pageView = formInstanceService.getTaskPageView(user

 

            .getEmployee(), pageNum);

 

    request.setAttribute("pageView", pageView);

 

    return mapping.findForward("taskList");

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

 

其中的“formInstanceService.getTaskPageView”如下:

 

// 查询TaskInfo的列表

 

@SuppressWarnings("unchecked")

 

public PageView getTaskPageView(Employee employee, int pageNum) {

 

    int pageSize = 10;

 

    // 获取待我审批的任务数量

 

    int count = ((Number) getSession().createQuery(//

 

            "SELECT COUNT(ti) FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL")//

 

            .setParameter(0, employee.getId().toString())//

 

            .uniqueResult())//

 

            .intValue();

 

    // 获取待我审批的任务列表

 

    int firstResult = PageView.calcFirstResult(pageNum, pageSize);

 

    List<TaskInstance> taskInstanceList = getSession().createQuery(//

 

            "FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL")//

 

            .setParameter(0, employee.getId().toString())//

 

            .setFirstResult(firstResult)//

 

            .setMaxResults(pageSize)//

 

            .list();

 

    // 页面中需要显示表单实例信息,且仅需要任务实例的ID

 

    List<FormInstance> formInstanceList = new ArrayList<FormInstance>();

 

    for (TaskInstance ti : taskInstanceList) {

 

        FormInstance formInstance = (FormInstance) ti.getContextInstance().getVariable("formInstance");

 

        formInstance.setCurrentTaskInstanceId(ti.getId());

 

        formInstanceList.add(formInstance);

 

    }

 

    // 显示

 

    return new PageView(pageNum, pageSize, count, formInstanceList);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.审批页面

 

        

 

/**

 

 * 审批页面

 

 */

 

public ActionForward approveUI(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取表单实例ID

 

    Long formInstanceId = Long.parseLong(request

 

            .getParameter("formInstanceId"));

 

    // 获取表单实例,表单实例包含审批信息

 

    FormInstance formInstance = formInstanceService.getById(formInstanceId);

 

    request.setAttribute("formInstance", formInstance);

 

    return mapping.findForward("approveUI");

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.审批

 

/**

 

 * 审批

 

 */

 

public ActionForward approve(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取表单数据

 

    ApproveInfoActionForm actionForm = (ApproveInfoActionForm) form;

 

    FormInstance formInstance = formInstanceService.getById(actionForm

 

            .getFormInstanceId());

 

    // 获取当前用户

 

    User user = (User) request.getSession().getAttribute("user");

 

    // 创建审批信息

 

    ApproveInfo approveInfo = new ApproveInfo();

 

    approveInfo.setApprover(user.getEmployee());

 

    approveInfo.setApproveTime(new Date());

 

    approveInfo.setApproval(actionForm.isApproval());

 

    approveInfo.setComment(actionForm.getComment());

 

    approveInfo.setTaskInstanceId(actionForm.getTaskInstanceId());

 

    approveInfo.setFormInstance(formInstance);

 

    // 审批

 

    formInstanceService.approve(approveInfo);

 

    return mapping.findForward("toTaskList");

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         其中的“formInstanceService.approve”如下:

 

/**

 

 * 审批

 

 */

 

public void approve(ApproveInfo approveInfo) {

 

    // 保存审批信息

 

    getSession().save(approveInfo);

 

 

 

    // 办理任务:审批

 

    FormInstance formInstance = approveInfo.getFormInstance();

 

    TaskInstance ti = getJbpmContext().getTaskInstance(approveInfo.getTaskInstanceId());

 

    ProcessInstance pi = ti.getProcessInstance();

 

    // 如果未通过

 

    if (!approveInfo.isApproval()) {

 

        // 停止任务向下流转

 

        ti.setSignalling(false);

 

        ti.start();

 

        ti.end();

 

        // 结束流程实例

 

        pi.end();

 

        // 设置流程状态为未通过审批

 

        formInstance.setStatus(FormInstance.STATUS_NOT_APPROVED);

 

    }

 

    // 如果审批通过

 

    else {

 

        // 正常执行任务,向下流转

 

        ti.start();

 

        ti.end();

 

        // 如果流程已结束, 就代表本次为最后一个审批

 

        if (pi.hasEnded()) {

 

            // 设置流程状态为已通过审批

 

            formInstance.setStatus(FormInstance.STATUS_APPROVED);

 

        }

 

    }

 

    // 需要手动更新流程数据(如果FormInstancelazy属性为false呢!)

 

    getSession().update(formInstance);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OK,待我审批完成!

 

 

 

三、表单查询

 

         这部分的内容有“我的申请”、“经我审批”和“所有表单”,其中涉及条件查询在此就不一一总结了。不过这些模块中有一个十分有趣的功能——“查看流程图”。

 

 

 

         在以前的工作中,我经涉及到图片和画板的应用开发。我的查看流程图思路是将图片画到画板上然后根据坐标信息(gpd.xml)画出对应流程模块的矩形,然后保存图板图,最后将图片显示到页面。但汤老师的实现比较优雅,直接将流程图显示到页面,然后向页面中添加一个div,并设置div的坐标、尺寸和边框颜色。

 

 

 

         由此可见,我还需要一些工作经验将这些技术熟练掌握!

 

 

 

         通过OA项目的学习,使我知道应该如何学习下一个项目——《教育办公系统》。希望自己能将这个系统做的更好!

 

 

 

         加油!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值