亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        談Activiti工作流在新能源電站中的應(yīng)用

        2021-07-09 08:07:08王慧敏陳明武
        山西建筑 2021年14期
        關(guān)鍵詞:流程圖引擎電站

        袁 博 王慧敏 李 陽 陳明武

        (中國電建集團(tuán)西北勘測設(shè)計研究院有限公司,陜西 西安 710065)

        0 引言

        目前各個企業(yè)在進(jìn)行數(shù)字化轉(zhuǎn)型,新能源電站作為生產(chǎn)單位也需要從數(shù)字化的角度看待生產(chǎn)過程的管理,如何減少中間環(huán)節(jié)、節(jié)約成本、簡化業(yè)務(wù)流程等,這些問題都給新能源電站的數(shù)字化轉(zhuǎn)型提出了更高的要求。但就目前而言,新能源電站的生產(chǎn)管理工作仍然存在權(quán)責(zé)不明、過程記錄難以跟蹤、電子文檔缺失等問題,引入Activiti工作流引擎就是為了解決上述問題,通過標(biāo)準(zhǔn)流程、過程文檔電子化使每個人權(quán)責(zé)分明,降低電站生產(chǎn)管理工作復(fù)雜程度,進(jìn)而提高整體工作效率,加快企業(yè)數(shù)字化轉(zhuǎn)型。

        1 技術(shù)應(yīng)用背景

        新能源電站大多地處偏遠(yuǎn),運(yùn)行值班人員生活不便,上下班交通安全性差,也不符合企業(yè)對新能源電站“無人值班、少人值守”的管理要求。運(yùn)維一體化的管理模式難以橫向?qū)?biāo),無法實現(xiàn)指標(biāo)最優(yōu)化。這種情況下電站的運(yùn)營維護(hù)效率低下,無法滿足高效管理與高效運(yùn)維電站的理念。

        新能源電站生產(chǎn)管理系統(tǒng)主要實現(xiàn)對下屬各電站的遠(yuǎn)程監(jiān)視和統(tǒng)一管理,以促進(jìn)子站維護(hù)質(zhì)量、提高管理和運(yùn)營效率。新能源電站生產(chǎn)管理系統(tǒng)中使用了Activiti工作流實現(xiàn)對電站維護(hù)人員的協(xié)同工作提供技術(shù)支持,實現(xiàn)了新能源電站生產(chǎn)運(yùn)行科學(xué)管理、流程管理、跟蹤管理及目標(biāo)管理的需求,并達(dá)到企業(yè)規(guī)范化、精細(xì)化、數(shù)字化和集成化管理的目標(biāo)。

        2 Activiti工作流引擎概述

        在了解Activiti之前,我們先看一下什么是工作流。在計算機(jī)中,工作流屬于計算機(jī)支持的協(xié)同工作的一部分,是研究一個群體在計算機(jī)的輔助下系統(tǒng)工作。工作流協(xié)助解決的業(yè)務(wù)問題是:為了處理多人參與的流程問題,而使用某種預(yù)定規(guī)則自動傳遞信息或者任務(wù)。Activiti是一個執(zhí)行BPMN2.0規(guī)范的開源引擎,它可以發(fā)布設(shè)計過程并通過API實現(xiàn)編程。Activiti工作流引入到新能源電站生產(chǎn)管理系統(tǒng)中,可以利用其提供的服務(wù)接口,全程監(jiān)管新能源電站中的生產(chǎn)管理工作。通過Activiti工作流的規(guī)范化特性,可以使新能源電站日常業(yè)務(wù)規(guī)范化管理,更加具有條理性,很大程度降低電站日常業(yè)務(wù)出錯率。簡單來說,開發(fā)人員只需要把業(yè)務(wù)抽象為BPMN流程圖,然后將流程圖部署至Activiti工作流引擎按照流程定義逐步流轉(zhuǎn)即可,這樣不僅降低了業(yè)務(wù)的復(fù)雜程度,還減少了開發(fā)人員的工作量。

        3 Activiti工作流引擎的特點(diǎn)

        1)數(shù)據(jù)持久化。

        Activiti秉承的設(shè)計思想是簡單快速。一般來說,應(yīng)用軟件的性能瓶頸主要是如何快速實現(xiàn)與數(shù)據(jù)庫的數(shù)據(jù)交互,所以Activiti選擇MyBatis作為數(shù)據(jù)持久層框架,保證了數(shù)據(jù)交換的及時性。

        2)引擎service接口。

        Activiti核心API共有七個,每一項核心API都以服務(wù)接口的方式供相關(guān)開發(fā)技術(shù)人員使用。利用這些接口服務(wù),相關(guān)技術(shù)開發(fā)人員能夠?qū)崿F(xiàn)功能豐富、輕便且并高效的工作流應(yīng)用程序,這七大核心API內(nèi)容如表1所示。

        表1 Activiti工作流引擎核心API

        Activiti工作流引擎最核心的類是ProcessEngine,其他的核心API服務(wù)都是通過ProcessEngine獲取。Activiti服務(wù)架構(gòu)如圖1所示。

        3)原生支持Spring。

        Activiti能夠快速集成Spring,通過Spring實現(xiàn)對Activiti的管理。

        4 Activiti工作流引擎在新能源電站生產(chǎn)管理系統(tǒng)中的應(yīng)用

        本節(jié)內(nèi)容以新能源電站生產(chǎn)管理系統(tǒng)中的危險點(diǎn)預(yù)控卡業(yè)務(wù)流程為例,對SpringBoot框架結(jié)合Activiti工作流引擎的應(yīng)用進(jìn)行解釋說明。

        4.1 搭建流程引擎

        基于Spring Initializr創(chuàng)建一個標(biāo)準(zhǔn)的maven工程,在pom.xml文件中添加SpringBoot,Activiti穩(wěn)定版,如下所示:

        項目啟動時,Activiti工作流引擎會自動創(chuàng)建需要的數(shù)據(jù)表,類型如表2所示。

        表2 Activiti工作流引擎數(shù)據(jù)表類型

        Activiti核心API的操作實際上就是對上面這些表的CRUD,而這些表數(shù)據(jù)的變化實際上代表的是整個流程的運(yùn)轉(zhuǎn)。

        4.2 繪制流程圖

        繪制流程圖的過程就是流程定義,流程定義就是按照BPMN2.0標(biāo)準(zhǔn)去描述業(yè)務(wù)流程,比如業(yè)務(wù)的起始節(jié)點(diǎn)、審批節(jié)點(diǎn)、審批條件等等。Activiti流程圖的繪制方法有多種,如:IDEA+Activiti BPMN visualizer(插件)、Eclipse+ Activiti Designer(插件)、Activiti Modeler等,可以根據(jù)個人的運(yùn)行環(huán)境自行選擇,危險點(diǎn)預(yù)控卡流程圖如圖2所示。

        bpmn的根節(jié)點(diǎn)是definitions節(jié)點(diǎn),在這個節(jié)點(diǎn)中可以定義多個流程定義,但是在實際使用過程中,definitions節(jié)點(diǎn)只包含一個流程定義,也就是一個流程文件只包含一個流程定義,這樣可以減小維護(hù)難度,也使得流程內(nèi)容清晰明了。bpmndi:BPMNDiagram節(jié)點(diǎn)中定義了每個節(jié)點(diǎn)在流程圖上的位置坐標(biāo)等信息。

        4.3 部署流程圖

        流程定義好以后需要部署,部署的本質(zhì)就是將流程定義寫入數(shù)據(jù)庫。部署流程圖的方法有多種,下面依次介紹。

        4.3.1 InputStream部署

        InputStream部署的原理是通過類加載器獲取流程圖文件的數(shù)據(jù)流,構(gòu)造DeploymentBuilder實例對象,再調(diào)用該實例對象的deploy方法完成流程圖部署。

        public void deployInputStreamTest() {

        // 獲取流程圖文件流

        InputStream inputStream = this.getClass().

        getClassLoader().getResourceAsStream("flow/危險點(diǎn)預(yù)控卡.bpmn");

        String resource = "test.bpmn";

        // 構(gòu)造DeploymentBuilder對象并進(jìn)行部署操作

        repositoryService.createDeployment()

        .addInputStream(resource, inputStream)

        .deploy();

        }

        4.3.2 classpath部署

        public void deployClasspathTest() {

        // 流程圖文件位置

        String resource = "flow/危險點(diǎn)預(yù)控卡.bpmn";

        // 構(gòu)造DeploymentBuilder對象并進(jìn)行部署操作

        repositoryService.createDeployment().addClasspath

        Resource(resource).deploy();

        }

        4.3.3 字符串部署

        字符串部署是將文本內(nèi)容直接作為來源,把文本內(nèi)容轉(zhuǎn)化為字節(jié)流后進(jìn)行部署。

        public void deployStringTest() {

        // 字符串

        String resource = "

        encoding=”UTF-8”?>...

        ";

        // 構(gòu)造DeploymentBuilder對象并進(jìn)行部署操作

        repositoryService.createDeployment()

        .addString("test.bpmn", resource)

        .deploy();

        }

        4.3.4 ZipInputStream部署

        以上方法都是針對單個流程圖文件部署,如果需要一次部署多個流程圖文件則需要將全部文件打包為zip或者bar格式的壓縮文件,然后再對其進(jìn)行部署。

        public void deployZipTest() {

        // 獲取壓縮文件流

        InputStream inputStream//壓縮文件流

        ZipInputStream zipInputStream = new ZipInputStream(inputStream);

        // 構(gòu)造DeploymentBuilder對象并進(jìn)行部署操作

        repositoryService.createDeployment()

        .addZipInputStream(zipInputStream)

        .deploy();

        }

        4.4 啟動流程

        啟動流程表示開始一次具體的業(yè)務(wù)流程,比如請假流程,啟動流程表示發(fā)起一個新的請假申請,而開始的業(yè)務(wù)流程就會根據(jù)已經(jīng)部署的流程定義流轉(zhuǎn)。

        public ProcessInstance submitApply(ActivitiEntity activiti) {

        // 設(shè)置啟動流程的人員ID identityService.

        setAuthenticatedUserId(activiti.getApplicant());

        // 啟動流程時設(shè)置業(yè)務(wù) key

        ProcessInstance instance = runtimeService.startProcessInstanceByKey(activiti.getProcessKey(), activiti.getBusinessKey(), activiti.getProcessParams());

        // 下一節(jié)點(diǎn)處理人待辦事項

        activiti.setInstanceId(instance.getProcessInstanceId());

        bizTodoItemService.insertTodoItem(activiti);

        return instance;

        }

        其中,ActivitiEntity實體類部分代碼如下:

        public class ActivitiEntity extends BaseEntity {

        /** 申請事項 */

        private String itemName;

        /** 申請內(nèi)容 */

        private String itemContent;

        /** 申請人 */

        private String applicant;

        /** 流程實例ID */

        private String instanceId;

        /** 流程定義key */

        private String processKey;

        /** 創(chuàng)建人名稱 */

        private String creatorName;

        /** 流程實例狀態(tài) 1 激活 2 掛起 */

        private String suspendState;

        /** 流程的業(yè)務(wù) key 業(yè)務(wù)流轉(zhuǎn) id:統(tǒng)一由業(yè)務(wù) key+ id, eg: firstWorkTicket_1001 */

        private String businessKey;

        private String businessId;

        }

        上述實體類屬性最關(guān)鍵的就是businessKey(業(yè)務(wù)標(biāo)識),businessKey是Activiti和業(yè)務(wù)系統(tǒng)整合時的連接點(diǎn),businessKey相當(dāng)于業(yè)務(wù)表中唯一標(biāo)識。

        4.5 待辦任務(wù)查詢

        流程啟動后,各個任務(wù)(節(jié)點(diǎn))的負(fù)責(zé)人就可以查詢自己當(dāng)前需要處理的待辦任務(wù),部分關(guān)鍵代碼如下:

        public void listPersonalTodoTasks() {

        // 任務(wù)負(fù)責(zé)人名稱

        String username = "jack";

        List taskList = taskService.createTaskQuery()

        // 危險點(diǎn)預(yù)控卡

        .processDefinitionKey("dangerPrecontrolcCard")

        // 任務(wù)負(fù)責(zé)人名稱

        .taskAssignee(username)

        .list();

        for (Task task : taskList) {

        log.info("流程實例id:" + task.getProcessInstanceId() + ",任務(wù)id:" + task.getId() + ",負(fù)責(zé)人:" + task.getAssignee() + ",名稱:" + task.getName());

        }

        }

        4.6 任務(wù)處理

        任務(wù)負(fù)責(zé)人查詢待辦任務(wù),選擇任務(wù)進(jìn)行處理,完成對應(yīng)(節(jié)點(diǎn))任務(wù),部分關(guān)鍵代碼如下:

        public void completeTask() {

        // 任務(wù)id

        String taskId = "3859";

        // 完成任務(wù)

        taskService.complete(taskId);

        }

        5 結(jié)語

        新能源電站生產(chǎn)管理系統(tǒng)是完全基于光伏電站的實際業(yè)務(wù)管理需求而設(shè)計的,采用了SpringBoot框架結(jié)合Activiti工作流引擎在新能源電站生產(chǎn)管理系統(tǒng)中完成了設(shè)計與實現(xiàn),為新能源電站開展運(yùn)行管理、設(shè)備管理、檢修管理、安全管理等提供信息服務(wù)和業(yè)務(wù)支撐平臺,提高生產(chǎn)效率和運(yùn)營效率以及安全可靠性。然后詳細(xì)寫了基于Activiti工作流的新能源電站生產(chǎn)管理業(yè)務(wù)流程模塊的實現(xiàn)。本系統(tǒng)使新能源電站業(yè)務(wù)流程能輕松進(jìn)行業(yè)務(wù)跟蹤,解決了新能源電站生產(chǎn)管理工作中權(quán)責(zé)不明、過程記錄難以跟蹤、電子文檔缺失等問題,實現(xiàn)生產(chǎn)記錄全過程跟蹤,加強(qiáng)新能源電站生產(chǎn)管理工作的規(guī)范化,也使新能源電站業(yè)務(wù)能在網(wǎng)上輕松處理,使新能源電站業(yè)務(wù)的自動化和無紙化辦公成為現(xiàn)實。改變了以往傳統(tǒng)的辦公模式,減輕了工作人員的工作壓力,為企業(yè)各部門工作人員之間工作上的溝通提供了一種新的解決方案,有效提升電站運(yùn)維人員的工作效率,降低了新能源電站行業(yè)的生產(chǎn)成本,進(jìn)一步加快新能源電站的數(shù)字化轉(zhuǎn)型。

        猜你喜歡
        流程圖引擎電站
        三峽電站再創(chuàng)新高
        低影響開發(fā)(LID)在光伏電站中的應(yīng)用
        藍(lán)谷: “涉藍(lán)”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        專利申請審批流程圖
        河南科技(2016年8期)2016-09-03 08:08:22
        專利申請審批流程圖
        河南科技(2016年6期)2016-08-13 08:18:29
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        基于Cocos2d引擎的PuzzleGame開發(fā)
        寧海縣村級權(quán)力清單36條
        《天津醫(yī)藥》稿件處理流程圖
        One Engine?。蹋澹妫糁皇O乱粋€引擎
        av网站韩日在线观看免费| 国产精品.xx视频.xxtv| 亚洲国产精品国自产电影| 久久中文字幕av第二页| 久久综合九色综合97婷婷| 欧美一区二区三区视频在线观看| 学生妹亚洲一区二区| 少妇高潮无码自拍| 中文字幕一区二区三区乱码人妻| 久久国产精品偷任你爽任你| 香蕉人妻av久久久久天天| 久久久久久人妻一区二区无码Av| 日本免费精品一区二区| 精品久久久无码人妻中文字幕豆芽| 国产成人亚洲综合无码| 无码啪啪熟妇人妻区| 亚洲国产精品悠悠久久琪琪| 日韩精品极品视频在线观看免费| 国自产偷精品不卡在线| 精品国产亚洲av成人一区| 极品尤物精品在线观看| 影音先锋女人av鲁色资源网久久| 国产成人九九精品二区三区| 99久久婷婷国产综合亚洲91| 日本岛国大片不卡人妻| 三级日韩视频在线观看| 久久无码av一区二区三区| 在线视频你懂的国产福利| 久久精品一区二区三区不卡牛牛| 蜜桃视频在线免费观看| 中文字幕精品一二三四五六七八| 欧美日韩免费一区中文字幕| 国产精女同一区二区三区久| 日韩日韩日韩日韩日韩| 国产精品 视频一区 二区三区| 亚洲一码二码在线观看| 亚洲综合网国产精品一区| 亚洲男人的天堂在线aⅴ视频| 性一交一乱一伦一视频一二三区| 国产丝袜一区丝袜高跟美腿| 精品偷拍被偷拍在线观看|