`
wangmingyue
  • 浏览: 44867 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activiti工作流委托功能

 
阅读更多

委托:一般是指办理人指定A为其在指定时间内代理审批公文。有新建委托记录,撤销委托记录操作。


具体实现:

一.创建数据库表

1.创建委托数据表

CREATE TABLE WF_DELEGATE_INFO(
ID BIGINT auto_increment,
ASSIGNEE VARCHAR(200),
ATTORNEY VARCHAR(200),
START_TIME TIMESTAMP,
END_TIME TIMESTAMP,
PROCESS_DEFINITION_ID VARCHAR(100),
STATUS INTEGER
)

2.委托办理流水记录表

CREATE TABLE WF_DELEGATE_HISTORY(
ID BIGINT auto_increment,
ASSIGNEE VARCHAR(200),
ATTORNEY VARCHAR(200),
DELEGATE_TIME TIMESTAMP,
TASK_ID VARCHAR(100),
STATUS INTEGER
)


二.JAVA代码

1.创建实体

DelegateInfo

DelegateHistory


2.创建DelegateService

public class DelegateService {
    private static Logger logger = LoggerFactory
            .getLogger(DelegateService.class);
    public static final String SQL_GET_DELEGATE_INFO = "select * from bpm_delegate_info"
            + " where status=1 and assignee=? order by id desc";
    public static final String SQL_SET_DELEGATE_INFO = "insert into bpm_delegate_history"
            + "(assignee,attorney,delegate_time,task_id,status) values(?,?,now(),?,1)";
    private JdbcTemplate jdbcTemplate;

    public DelegateInfo getDelegateInfo(String targetAssignee,
            String targetProcessDefinitionId) {
        List<Map<String, Object>> list = jdbcTemplate.queryForList(
                SQL_GET_DELEGATE_INFO, targetAssignee);

        for (Map<String, Object> map : list) {
            logger.info("map : {}", map);

            Long id = (Long) map.get("id");
            String assignee = (String) map.get("assignee");
            String attorney = (String) map.get("attorney");
            String processDefinitionId = (String) map
                    .get("process_definition_id");
            Date startTime = (Date) map.get("start_time");
            Date endTime = (Date) map.get("end_time");
            Integer status = (Integer) map.get("status");

            if (timeNotBetweenNow(startTime, endTime)) {
                logger.info("timeNotBetweenNow");

                continue;
            }

            if ((processDefinitionId == null)
                    || processDefinitionId.equals(targetProcessDefinitionId)) {
                logger.info("delegate to {}", attorney);

                // delegateTask.setAssignee(attorney);
                // jdbcTemplate.update(SQL_SET_DELEGATE_INFO, assignee,
                // attorney, delegateTask.getId());
                DelegateInfo delegateInfo = new DelegateInfo();
                delegateInfo.setId(id);
                delegateInfo.setAssignee(assignee);
                delegateInfo.setAttorney(attorney);
                delegateInfo.setProcessDefinitionId(processDefinitionId);
                delegateInfo.setStartTime(startTime);
                delegateInfo.setEndTime(endTime);
                delegateInfo.setStatus(status);

                return delegateInfo;
            }
        }

        return null;
    }

    public void saveRecord(String assignee, String attorney, String taskId) {
        jdbcTemplate.update(SQL_SET_DELEGATE_INFO, assignee, attorney, taskId);
    }

    public void removeRecord(Long id) {
        jdbcTemplate.update("delete from bpm_delegate_info where id=?", id);
    }

    public void addDelegateInfo(String assignee, String attorney,
            Date startTime, Date endTime, String processDefinitionId) {
        String sql = "insert into bpm_delegate_info(assignee,attorney,start_time,end_time,process_definition_id,status) values(?,?,?,?,?,?)";
        jdbcTemplate.update(sql, assignee, attorney, startTime, endTime,
                processDefinitionId, 1);
    }

    private boolean timeNotBetweenNow(Date startTime, Date endTime) {
        Date now = new Date();

        if (startTime != null) {
            return now.before(startTime);
        }

        if (endTime != null) {
            return now.after(endTime);
        }

        return false;
    }

    @Resource
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}

3.创建activiti监听器DelegateTaskListener


public class DelegateTaskListener extends DefaultTaskListener {
    private DelegateService delegateService;

    @Override
    public void onAssignment(DelegateTask delegateTask) throws Exception {
        String assignee = delegateTask.getAssignee();
        String processDefinitionId = delegateTask.getProcessDefinitionId();
        DelegateInfo delegateInfo = delegateService.getDelegateInfo(assignee,
                processDefinitionId);

        if (delegateInfo == null) {
            return;
        }

        String attorney = delegateInfo.getAttorney();
        delegateTask.setAssignee(attorney);
        delegateService.saveRecord(assignee, attorney, delegateTask.getId());
    }

    @Resource
    public void setDelegateService(DelegateService delegateService) {
        this.delegateService = delegateService;
    }
}



分享到:
评论

相关推荐

    Activiti工作流使用手册操作文档

    总结来说,Activiti工作流是一个功能强大且灵活的流程管理工具,通过深入学习和实践本操作手册,Java开发者能够熟练掌握其使用,从而提升业务流程的自动化水平和效率。工作流使用.doc文档将提供更详细的步骤和示例,...

    Activiti工作流示例Activiti Demo(带完整源码)非常实用

    Activiti工作流引擎的核心功能包括: 1. **流程定义与建模**:使用BPMN 2.0标准,支持复杂的流程建模,包括任务、事件、网关、泳道等元素。 2. **流程实例管理**:启动、暂停、继续、结束流程实例,以及查询和控制...

    疯狂activiti工作流讲义

    这个"疯狂activiti工作流讲义"很可能是针对学习和掌握Activiti工作流框架的一份详细教程,旨在帮助开发者深入理解并有效地利用这一工具进行开发。 1. **工作流基础**:工作流是描述业务流程的模型,它定义了任务...

    Activiti工作流demo

    本"Activiti工作流demo"旨在帮助开发者快速理解并应用Activiti,通过实践来学习其核心概念和功能。 1. **Activiti简介** Activiti是一款轻量级的业务流程管理(BPM)系统,它不仅支持复杂的业务流程,还具有高度...

    Activiti工作流用户手册

    Activiti工作流用户手册是一份全面介绍Activiti的文档,旨在帮助用户理解和使用这个强大的工作流引擎。Activiti是一款开源的业务流程管理(BPM)和工作流系统,由Alfresco公司发起,并且在Apache 2.0许可证下发布。...

    Activiti工作流 5.9 案例

    Activiti工作流是一款开源的企业级工作流引擎,它基于模型驱动的架构,旨在简化业务流程自动化。Activiti 5.9 版本是其发展过程中的一个重要里程碑,提供了丰富的功能和改进,使得开发者能够更高效地设计、部署和...

    activiti工作流jar

    Activiti工作流是一个开源的企业流程管理系统,用于设计、部署和执行业务流程。它基于Java技术栈,使用模型驱动的方法,让非程序员也能通过图形化工具设计复杂的流程。这个"activiti工作流jar"很可能是包含了...

    spring 整合 activiti工作流 相关jar包

    将Spring与Activiti整合,可以充分利用Spring的强大功能来管理和驱动Activiti工作流,实现灵活、可扩展且易于维护的业务流程解决方案。 1. **Spring框架**:Spring是一个开源的Java平台,提供了全面的企业应用程序...

    Activiti工作流+Activiti帮助文档

    这个压缩包文件包含的“Activiti工作流+Activiti帮助文档”是关于如何使用和理解Activiti的重要参考资料,旨在帮助开发者和业务分析师更好地掌握其功能和应用场景。 1. Activiti简介: Activiti 是由 Alfresco ...

    activiti6.0工作流配置(中文)

    《Activiti 6.0 工作流配置详解——与MySQL 8.0集成实践》 Activiti是一款开源的工作流引擎,它为企业的业务流程管理...通过深入学习和实践,我们可以充分利用Activiti的强大功能,构建高效、灵活的企业级工作流系统。

    工作流Activiti5学习总结

    【工作流Activiti5学习总结】 工作流管理系统(Workflow Management System, WfMS)是企业信息化建设中的重要组成部分,它负责协调和管理业务流程。Activiti5是一款开源的工作流引擎,由Alfresco公司开发,它基于...

    Activiti6.0工作流使用说明文档V1.0.pdf

    综上所述,Activiti6.0工作流使用说明文档是一份非常全面的使用指南,它不仅介绍了Activiti工作流的基础使用方法,还提供了丰富的高级功能介绍和问题解决方案,是开发Activiti工作流应用时不可或缺的参考资料。

    activiti 工作流

    Activiti工作流是一款开源的工作流程管理系统,用于设计、执行和管理业务流程。它基于Java平台,采用模型驱动的架构,支持BPMN 2.0标准,提供了丰富的API和工具,便于开发人员集成到自己的应用中。以下是关于...

    51CTO下载-基于Activiti5工作流实战企业协同OA办公系统教程

    《基于Activiti5工作流实战企业协同OA办公系统教程》是一门深度解析如何利用Activiti5框架构建高效、协同的企业办公自动化(OA)系统的专业课程。该教程旨在帮助IT从业者和对企业信息化有兴趣的学习者掌握工作流引擎...

    【完整版11章】Activiti7精讲&Java通用型工作流开发实战

    《Activiti7精讲&Java通用型工作流开发实战》是一个全面深入的视频教程,旨在帮助初学者和有经验的开发者掌握Activiti7框架,并利用Java技术构建高效、灵活的工作流系统。本教程覆盖了从基础到高级的全方位内容,...

    activiti-6.0.0 Java 工作流

    3. **docs**:文档目录,通常包含了用户手册、API参考、示例代码和其他有助于理解Activiti工作流引擎的材料。在这里,你可以找到关于如何安装、配置和使用Activiti的详细指导。 在学习和研究Activiti时,你需要掌握...

    activiti工作流

    Activiti工作流是一款开源的工作流程管理系统,主要用于设计、部署和执行业务流程。它基于Java平台,采用模型驱动的架构(MDA),使得流程定义可以以图形化的方式进行,极大地提升了流程设计的易用性。本资源集合是...

    疯狂Workflow讲义——基于Activiti的工作流应用开发

    《疯狂Workflow讲义——基于Activiti的工作流应用开发》是一本深入探讨工作流技术与实践的书籍,专注于使用Activiti这一流行的开源工作流引擎进行应用开发。Activiti是基于Java的业务流程管理(BPM)系统,适用于...

    activiti 会签投票统计

    Activiti 是一个开源的工作流和业务自动化引擎,广泛应用于企业级流程管理。在这个主题中,"activiti 会签投票统计" 涉及到 Activiti 的特定功能,特别是会签(Parallel Multi-instance)和自定义事件监听器,用于...

    Activiti7(流程引擎)简单笔记,附带作者执行的Demo代码文件

    Activiti7是一款强大的开源工作流引擎,用于在Java应用程序中实现业务流程自动化。它基于模型驱动的架构,允许开发者通过BPMN 2.0标准来设计、部署和执行流程。这个“Activiti7(流程引擎)简单笔记”很可能是作者在...

Global site tag (gtag.js) - Google Analytics