精华内容
下载资源
问答
  • JBPM流程监控的实现过程
  • 多块策略广泛应用于全流程过程监控领域,以解决变量关系复杂性较高的问题,但传统分块方法得到的子块数据存在高斯与非高斯混合分布问题,影响过程监控的效果.为此,提出一种基于多块MICA-PCA的过程监控方法.首先采用...
  • 测试过程监控

    2012-07-26 15:28:37
    测试过程监控
  • 基于过程依赖关系的ETL流程监控研究和应用,蒋常春,邹仕洪,数据集成是商业智能中的关键环节,数据集成ETL的质量和效率直接影响着数据仓库的正确性。完善的流程监控系统能及时发现ETL出现的问
  • Shellrolling生产过程的过程监控和故障诊断
  • 工艺设计流程监控施工组织设计.doc
  • 一种FMS过程监控系统的设计与实现.rar 介绍了关于一种FMS过程监控系统的设计与实现的详细说明,提供电力技术的技术资料的下载。
  • jbpm流程监控的实现

    2008-04-25 15:00:21
    jbpm流程监控的实现
  • Activiti 流程监控 流程

    千次阅读 2016-08-03 14:54:20
    但涉及到流程监控时,就会显得心有余而力不足。如何不借助其他插件,又尽量避免改写底层代码以实现流程的追踪呢? 设计思路:(1)一个页面,两个tab标签:A和B。(2)A标签加载流程图,B标签加载流程数据。 流程图...

    Activiti作为一款轻量级的流程引擎,基本满足日常的工作需要。但涉及到流程监控时,就会显得心有余而力不足。如何不借助其他插件,又尽量避免改写底层代码以实现流程的追踪呢?
    设计思路:

    (1)一个页面,两个tab标签:A和B。

    (2)A标签加载流程图,B标签加载流程数据。

        流程图的作用:显示全局流程布局,高亮显示当前进行的环节。
    
        流程数据的作用:显示当前人,处理人,处理时间等需要的信息。
    

    (3)加载流程图:

        页面传回businessKey,后台实现查询。查询需要用到的对象:HistoricProcessInstance 或者 ProcessInstance,两者有什么区别?
    
        HistoricProcessInstance:既可以查询历史流程实例(结束的流程),也可以查询运行中的流程实例。(调用getHistoricService()方法实现业务处理)
    
         ProcessInstance :只查询运行中的流程实例。(调用getRuntimeService()方法实现业务处理)
    
        结论:需要效率并且不关注结束流程的情况选择 ProcessInstance,而针对流程监控如果结束的流程也需要监控,应该选择 HistoricProcessInstance 。
    

    重要代码:

    /取历史流程实例,既能取到历史实例又能取到运行中的流程实例/
    HistoricProcessInstance hpi = workFlowEngineServiceImpl.findHistoryProcessInstanceByBusKey(businessKey);
    try {
    if (hpi == null) {
    throw new RuntimeException(“获取流程图异常!”);
    } else {
    InputStream imageStream = workFlowEngineServiceImpl.getFlowMap(hpi, hpi.getId(), flowType);
    ServletOutputStream os = response.getOutputStream();
    int bytesRead = 0;
    byte[] buffer = new byte[1024];
    while ((bytesRead = imageStream.read(buffer, 0, 1024)) != -1) {
    os.write(buffer, 0, bytesRead);
    }
    os.flush();
    os.close();
    imageStream.close();
    }
    } catch (Exception e) {
    logger.error(e, e);
    throw new RuntimeException(“获取流程图异常!”);
    }

    /findHistoryProcessInstanceByBusKey方法/
    /**
    * 根据流程businessKey查询历史流程实例
    * @param processId
    * @return
    */
    public HistoricProcessInstance findHistoryProcessInstanceByBusKey(String businessKey){
    HistoryService historyService = this.getHistoryService();
    return historyService.createHistoricProcessInstanceQuery()
    .processInstanceBusinessKey(businessKey).singleResult();
    }

    /getFlowMap方法/
    public InputStream getFlowMap(HistoricProcessInstance processInstance, String instanceId, String flowType) {

        processEngine = getInstance();
    
        // RuntimeService runtimeService = processEngine.getRuntimeService();
        // DynamicBpmnService flowMoniService = processEngine.getDynamicBpmnService();
    
        /*资源服务*/
        RepositoryService repositoryService = processEngine.getRepositoryService();
        /*历史数据服务*/
        HistoryService historyService = processEngine.getHistoryService();
        ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());
    
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
    
        /*为了流程监控图显示效果,替换多有未取到的变量,只显示节点的中文描述*/
        List<ActivityImpl> activityList = processDefinition.getActivities();
        for(ActivityImpl activity : activityList){
                String name = bpmnModel.getFlowElement(activity.getId()).getName();
                bpmnModel.getFlowElement(activity.getId())
                        .setName(name.replaceAll("[\\w{}$\\-+]", ""));
        }
    
        /*历史节点,取出变量,设置为节点的名称*/
        List<ArkHistoricActivity> hisList = findProcessHistoryByPiid(instanceId);
        for(ArkHistoricActivity hisActivity : hisList){
                bpmnModel.getFlowElement(hisActivity.getActivityId())
                        .setName(hisActivity.getActivityName());
        }
    
        List<HistoricActivityInstance> activityInstances = historyService.createHistoricActivityInstanceQuery()
                        .processInstanceId(instanceId).orderByHistoricActivityInstanceStartTime().asc().list();
        List<String> activitiIds = new ArrayList<String>();
        List<String> flowIds = new ArrayList<String>();
    
        /*获取流程走过的线*/
        flowIds = flowServiceImpl.getHighLightedFlows(processDefinition, activityInstances);
    
        /*获取流程走过的节点*/
        for (HistoricActivityInstance hai : activityInstances) {
                activitiIds.add(hai.getActivityId());
        }
        Context.setProcessEngineConfiguration(
                        (ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration());
    
        /**
         * 从配置文件中获取中文配置信息,避免中文乱码
         * processEngine.getProcessEngineConfiguration().getActivityFontName(), 
         * processEngine.getProcessEngineConfiguration().getLabelFontName(), 
         */
        InputStream imageStream = new DefaultProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activitiIds,
                        flowIds, processEngine.getProcessEngineConfiguration().getActivityFontName(),
                        processEngine.getProcessEngineConfiguration().getLabelFontName(), 
                        "", null, 1.0);
    
        return imageStream;
    

    }

    /getHighLightedFlows方法/
    public List getHighLightedFlows(ProcessDefinitionEntity processDefinitionEntity,
    List historicActivityInstances) {

        /*用以保存高亮的线flowId*/
        List<String> highFlows = new ArrayList<String>();
        /*对历史流程节点进行遍历*/
        for (int i = 0; i < historicActivityInstances.size() - 1; i++) {
                /*得到节点定义的详细信息*/
                ActivityImpl activityImpl = processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId());
                /*用以保存后需开始时间相同的节点*/
                List<ActivityImpl> sameStartTimeNodes = new ArrayList<ActivityImpl>();
                /*将后面第一个节点放在时间相同节点的集合里*/
                ActivityImpl sameActivityImpl1 = processDefinitionEntity.findActivity(historicActivityInstances.get(i + 1).getActivityId());
                sameStartTimeNodes.add(sameActivityImpl1);
    
                for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) {
                        /*后续第一个节点*/
                        HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);
                        /*后续第二个节点*/
                        HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);
                        /*如果第一个节点和第二个节点开始时间相同保存*/
                        if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime())) {
                                ActivityImpl sameActivityImpl2 = processDefinitionEntity.findActivity(activityImpl2.getActivityId());
                                sameStartTimeNodes.add(sameActivityImpl2);
                        }
                        /*有不相同跳出循环*/
                        else {
                                break;
                        }
                }
                /*取出节点的所有出去的线*/
                List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
                /*对所有的线进行遍历*/
                for (PvmTransition pvmTransition : pvmTransitions) {
                        /*如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示*/
                        ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition.getDestination();
                        if (sameStartTimeNodes.contains(pvmActivityImpl)) {
                                highFlows.add(pvmTransition.getId());
                        }
                }
        }
        return highFlows;
    

    }
    注意:

    1)流程图中可能需要处理${currName}类似的变量,代码中已有写出,但这些变量替换为真实数据的前提是环节已办理,因为已办理才会记录Variables,未办理的环节需要将这些变量替换为空字符串,这是一些细节处理。

    2) HistoricProcessInstance 获取历史数据的前提是:需要配置历史数据的记录级别,与此同时,在配置中也可以处理流程图中文字的乱码。


    展开全文
  • 基于Kullback Leibler散度的过程监控
  • 使用WinCC在机电一体化系统中实现过程监控.rar 介绍了关于使用WinCC在机电一体化系统中实现过程监控的详细说明,提供理论教程的技术资料的下载。
  • 基于混合概率主元分析(MPPCA)的监控方法,存在要求各子模型中主元个数相同、 ...改进方法中各子模型主元的选取兼顾了主元的解释率及其变化趋势,并引进基于PPCA的监控方法,保证了监控指标的一致性H 减少了过程监控图.</p>
  • 离散型车间生产过程监控管理系统的研究 C#.net编程技术的开发及研究
  • 电线组件生产过程监控记录.doc
  • FPGA配置过程监控系统设计.pdf
  • 使用GTucker2模型进行批处理过程监控
  • 相分配用于非线性批处理过程监控
  • 具有全球本地保存预测的过程监控
  • 基于Oracle EBS系统业务流程监控方法研究.pdf
  • 基于核均值检验的统计过程监控
  • 使用WinCC组态软件实现过程监控pdf,使用WinCC组态软件实现过程监控
  • HYERP-M10-PS03-04.04.01-信息项目过程监控与分析流程.v1.0.docx
  • 基于Wincc的选矿过程监控系统pdf,基于Wincc的选矿过程监控系统
  • 教学质量过程监控管理办法修订.doc
  • 主元分析法在过程监控中的应用,陈晓智,,本文首先阐述了过程监控的研究对象和基本概念,从是否基于数学模型的角度介绍了目前存在的主要过程监控方法,并分析了它们的优缺
  • JBPM 流程 监控 的实现

    2008-10-28 14:35:12
    JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。
  • 通过广义非负矩阵投影进行统计过程监控
  • 非高斯分布过程监控方案的比较研究

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 613,796
精华内容 245,518
关键字:

流程监控