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

        ?

        基于Activiti 和微信公眾平臺的流程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2019-11-06 07:19:26馬東紅鄒黎許濤李鵬孫萬信李穩(wěn)
        汽車實(shí)用技術(shù) 2019年20期
        關(guān)鍵詞:微信用戶信息

        馬東紅,鄒黎,許濤,李鵬,孫萬信,李穩(wěn)

        (陜西萬方汽車零部件有限公司,陜西 西安 710201)

        1 前言

        Activiti 是一種開源的、輕量級、可嵌入的業(yè)務(wù)流程管理軟件和工作流系統(tǒng)引擎,其核心結(jié)構(gòu)是基于BPMN2.0 標(biāo)準(zhǔn)的。它基本實(shí)現(xiàn)BPMN2.0 中的執(zhí)行語義解釋和圖元定義元素,在此基礎(chǔ)上自定義了六個擴(kuò)展元素和十五個擴(kuò)展屬性。Activiti 的核心組件包括:流程引擎(Activiti Engine)、 基于Web 的流程建模器(Activiti Modeler)、基于Eclipse 插件的設(shè)計(jì)器(Activiti Desiger)、基于Web 的管理控制臺(Activiti Explorer)、協(xié)作工具(Activiti Probe)和Spring集成等。其中最重要的部分就是它的流程引擎。

        微信公眾平臺主要面向名人、政府、媒體、企業(yè)等機(jī)構(gòu)推出的合作推廣業(yè)務(wù)。微信公眾賬號[1]被分成訂閱號和服務(wù)號,運(yùn)營主體是組織(比如企業(yè)、媒體、公益組織)的,可以申請服務(wù)號,運(yùn)營主體是組織和個人的可以申請訂閱號,但是個人不能申請服務(wù)號。本系統(tǒng)中開發(fā)中使用的是服務(wù)號。

        2 數(shù)據(jù)庫部分表設(shè)計(jì)

        Activiti6.0 自帶的25 張表[2](在本文不做贅述)、user表(表1)、process_list 表(表2)、fans 表(表3);具體如下:

        表1 用戶表

        表2 業(yè)務(wù)表單表

        表3 微信粉絲表

        3 Web 項(xiàng)目框架環(huán)境搭建

        3.1 在Eclipse 中創(chuàng)建SpringBoot 項(xiàng)目[3]并且安裝Activiti 插件

        具體配置為:Springboot2.0+mybatis+Maven+activiti 6.0+Eclipse

        maven 依賴:

        <dependency>

        <groupId>org.activiti</groupId>

        <artifactId>activiti-spring-boot-starter-basic</artifactId>

        <version>6.0.0</version>

        </dependency>

        <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

        </dependency>

        3.2 安裝eclipse 插件Activiti Designer,在src/main/resour-ces 新建repairBill.bpmn

        3.3 部署流程

        這里使用RepositoryService 部署流程定義addClasspath Resource 表示從類路徑下加載資源文件,一次只能加載一個文件。

        public void deployProcess(){

        InputStream inputStreamBpmn = this.getClass(). get Reso-urce AsStream("/repairBill.bpmn");

        InputStream inputStreamPng= this.getClass().getResource AsStream("/repairBill.png");

        Deployment deployment = repositoryService

        .createDeployment()

        .addInputStream("LeaveBill.bpmn", inputStreamBpmn)

        .addInputStream("LeaveBill.png", inputStreamPng). deploy()}

        3.4 啟動流程實(shí)例

        我們在做工作流的時候一定是需要將我們的業(yè)務(wù)和工作流來關(guān)聯(lián)起來的,而Activiti 給我們提供了一個便利就是Business_key,而這個字段就是專門用來存儲我們的業(yè)務(wù)關(guān)鍵字。例如我們有一個設(shè)備維修的業(yè)務(wù),而我的維修單信息都已經(jīng)編寫到數(shù)據(jù)庫的process_list 表中了,但是我怎么樣把我的維修單信息關(guān)聯(lián)到Activiti 的數(shù)據(jù)庫表中,就是用給定的Activiti 的Business_key[4],而這里有一個小技巧,例如我的javaBean 叫做repairBill,而我的請假信息的ID 為1,那么我就可以讓他寫成repairBill.1。

        3.5 查詢個人任務(wù)

        3.6 辦理個人任務(wù)

        4 集成微信公眾平臺API

        4.1 申請服務(wù)號并填寫服務(wù)配置

        登錄微信公眾平臺官網(wǎng)后,在公眾平臺后臺管理頁面 -開發(fā)者中心頁,點(diǎn)擊“修改配置”按鈕,填寫服務(wù)器地址(URL)、Token 和EncodingAESKey,其中URL 是開發(fā)者用來接收微信消息和事件的接口URL。Token 可由開發(fā)者可以任意填寫,用作生成簽名(該Token 會和接口URL 中包含的Token 進(jìn)行比對,從而驗(yàn)證安全性)。EncodingAESKey由開發(fā)者手動填寫或隨機(jī)生成,將用作消息體加解密密鑰。

        4.2 web 后臺和微信公眾號后臺交互

        GET 請求:進(jìn)行URL、Tocken 認(rèn)證;

        @RequestMapping(value = "/message" , method = Request Method.GET)

        public @ResponseBody String lenwx(HttpServletRequest request) throws Exception {

        String signature = request.getParameter("signature");//微信加密簽名

        String timestamp = request.getParameter("timestamp");//時間戳

        String nonce = request.getParameter("nonce");// 隨機(jī)數(shù)

        String echostr = request.getParameter("echostr");// 隨機(jī)字符串

        //校驗(yàn)成功返回echostr,成功成為開發(fā)者;否則返回error,接入失敗

        //校驗(yàn)成功返回echostr,成功成為開發(fā)者;否則返回error,接入失敗

        MpAccount mpAccount=new MpAccount();

        String token = mpAccount.getToken();//獲取token,進(jìn)行驗(yàn)證

        if (SignUtil.validSign(signature, token, timestamp, nonce)){return echostr;

        }else {

        return null;

        } }

        POST 請求:進(jìn)行消息處理;需要對用戶關(guān)注事件進(jìn)行獲取,若用戶第一次關(guān)注公眾號,則將用戶信息寫入fans 表中。系統(tǒng)用戶登陸web 系統(tǒng)將自己的open_id 維護(hù)到個人信息。

        @RequestMapping(value = "/message", method = Request Method.POST)

        public@ResponseBody void doPost(HttpServletRequest request,HttpServletResponse response) throws Exception {

        //處理用戶和微信公眾賬號交互消息

        Map<String, String> requestMap;

        requestMap = MessageUtil.parseXml(request);

        String fromUserName = requestMap.get("From User Name");

        String toUserName = requestMap.get("ToUserName");

        String msgType = requestMap.get("MsgType");

        if(msgType.equals(Constants.REQ_MESSAGE_TYPE_EVE NT)){//判斷消息類型是否是事件消息類型

        String eventType = requestMap.get("Event");//獲取具體的事件類型

        if(eventType.equals(Constants.EVENT_TYPE_SUBSCRIB E)){ //判斷事件是否是關(guān)注事件

        MpAccount mpAccount =new MpAccount();

        AccountFans fans = WxApiClient.syncAccount Fans(from UserName, mpAccount);

        fans.setHeadimgurl("<img src="+fans.getHeadimgurl()+"height='32' width='32'>");

        AccountFans acf=accountFansService.getByOpenId(fans.getOpenId());

        if(acf==null) {

        accountFansService.insertSelective(fans);

        } } }

        4.3 發(fā)送模板消息

        進(jìn)入微信公眾平臺點(diǎn)擊模板信息模塊,直接在模板庫中選擇你需要的消息模板添加就可以了,添加之后就會在我的模板中。會有一個模板id,比如本系統(tǒng)用到的一個這個模板id 在我們發(fā)送消息的時候會用到。

        在web 后臺中封裝模板數(shù)據(jù)對應(yīng)的bean 對象,在用戶完成流程任務(wù)的時候調(diào)用鏈接,https://api.weixin.qq.com/cgi -bin/message/template/send?access_token=ACCESS_TOKEN ,向流程的下一節(jié)點(diǎn)辦理人發(fā)送模板信息。在這里整體思路就是用戶關(guān)注公眾號的時候,微信公眾平臺服務(wù)器會向我們的web 程序后臺發(fā)送post 請求,我們通過處理post 請求的用戶關(guān)注事件將用戶微信open_id 以及昵稱等信息寫入fans 表,再將fans 表中的open_id 維護(hù)到user 表中。用戶在進(jìn)行流程審批的時候動態(tài)的選擇user 表中的用戶進(jìn)行任務(wù)辦理,同時調(diào)用微信公眾平臺API 向被選擇的用戶發(fā)送流程待處理模板消息。

        public static void sendTemplateMessageforwfsys(String openId,String processId,String processTypeName, String pro-cessName,String processUserName,String applyTime){

        try {

        MpAccount ma=new MpAccount();

        String access_token=WxApi.getAccessToken(ma.get Appid(), ma.getAppsecret()).getAccessToken();

        MessageTemplate messageTemplate=new Message Tem-plate();

        messageTemplate.setTemplate_id("BXg68T7RIjbabWJuEg O8-R53sTciWTThiKycrMpDUT4");

        messageTemplate.setTouser(openId);

        messageTemplate.setTopcolor("#173177");

        messageTemplate.setUrl("http://amazing.nat123.cc:29596");

        Data first = new Data();

        first.setValue("您好,有一條系統(tǒng)流程需要您進(jìn)行審批。");

        first.setColor("#173177");

        Data keyword1 = new Data();

        keyword1.setValue(processId);//流程編號

        keyword1.setColor("#173177");

        Data keyword2 = new Data();

        keyword2.setValue(processTypeName);

        keyword2.setColor("#173177");

        Data keyword3 = new Data();

        keyword3.setValue(processName);//標(biāo)題

        keyword3.setColor("#173177");

        Data keyword4 = new Data();

        keyword4.setValue(processUserName);//申請人

        keyword4.setColor("#173177");

        Data keyword5 = new Data();

        keyword5.setValue(applyTime);//申請時間

        keyword5.setColor("#173177");

        Data remark = new Data();

        remark.setValue("請及時處理,謝謝。");

        remark.setColor("#173177");

        TemplateData templateData = new TemplateData();

        templateData.setKeyword1(keyword1);

        templateData.setKeyword2(keyword2);

        templateData.setKeyword3(keyword3);

        templateData.setKeyword4(keyword4);

        templateData.setKeyword5(keyword5);

        templateData.setRemark(remark);

        messageTemplate.setData(templateData);

        String jsonString = JSONObject.toJSONString (message Template);

        String urlStr = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token;

        String result = HttpClientUtils.sendHttpPost(urlStr, json String);

        } catch (Exception e) {

        // TODO Auto-generated catch blocke.printStackTrace();

        }}

        結(jié)果如下:(圖1)(圖2)

        圖1

        圖2

        5 結(jié)語

        隨著汽車工業(yè)的迅速發(fā)展,工廠信息化以及數(shù)字化也得到迅速的發(fā)展。為了保證信息在各個部門之間實(shí)時準(zhǔn)確的傳遞,根據(jù)我司在處理流程問題中遇到的實(shí)際情況進(jìn)行分析,該文主要結(jié)合軟件行業(yè)前端主流的技術(shù),提供了一種企業(yè)在流程以及信息傳遞方面的實(shí)時高效可行的方案。信息時代,我們希望處理問題和工作方式的思維和方式更簡單快捷。 在此也希望們本文不止提供了一個處理問題的工具,更是一種理念和方向。

        猜你喜歡
        微信用戶信息
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        微信
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        微信
        微信
        微信
        如何獲取一億海外用戶
        展會信息
        中外會展(2014年4期)2014-11-27 07:46:46
        久久久婷婷综合五月天| 伊在人天堂亚洲香蕉精品区| 精品国产三级在线观看| 国产国拍亚洲精品午夜不卡17| 91在线观看国产自拍| 日本五十路人妻在线一区二区| 亚洲av无码久久精品色欲| 久久丫精品国产亚洲av| 亚洲中字幕永久在线观看| 丰满巨臀人妻中文字幕| 国产精品久免费的黄网站| 天天综合亚洲色在线精品| 真实国产网爆门事件在线观看| 亚洲码专区亚洲码专区| 国产精品美女一区二区视频 | 日本韩国亚洲三级在线| 国产成人精品2021| 国产精品久久久久久妇女6080| 亚洲欧洲美洲无码精品va| 国产精品毛片av毛片一区二区| 日本成本人片免费网站| 国产精品 视频一区 二区三区| 国产日产亚洲系列av| 日本精品一区二区三区在线观看| 国产成人无码18禁午夜福利p| 精品88久久久久88久久久| 人妻少妇久久精品一区二区| 国产91色综合久久高清| 久久精品免费一区二区三区| 久久久久中文字幕无码少妇| 99国语激情对白在线观看| 亚洲a∨无码精品色午夜| 男人边吃奶边做好爽免费视频 | 韩国日本亚洲精品视频| 国产激情一区二区三区不卡av| 亚洲色大成网站www永久网站| 少妇高潮喷水久久久影院| 久久中文字幕av第二页| 日韩女同视频在线网站| 男男车车的车车网站w98免费| 欧美亚洲另类自拍偷在线拍 |