泛微OA流程節點后附加操作


1. 問題描述

OA的工程款到賬流程,需要在批准后或者歸當前,將回款信息通過get請求發送給CRM
回款信息包括:項目號,客戶,到款日期,項目名稱,金額,收款階段,備注,手機號(便於CRM中間服務通過手機號查到人員)

2. 附加操作類

package weaver.interfaces.workflow.action.javacode;

import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import java.io.UnsupportedEncodingException;

/**
 * 在線自定義action接口
 */
public class Action20220113115329 extends BaseBean implements Action {
    /**
     * 流程路徑節點后選擇aciton后,會在節點提交后執行此方法。
     */
    public String execute(RequestInfo request) {
        // 請求id
        String requestId = request.getRequestid();
        writeLog("請求id:" + requestId);

        // 主表名稱
        String tablename = request.getRequestManager().getBillTableName();
        writeLog("主表名稱:" + tablename);

        // 查詢主表信息
        RecordSet rs = new RecordSet();
        rs.execute("select * from " + tablename + " where requestid =  " + requestId);
        rs.next();

        // 主表id
        String id = rs.getString("id");
        writeLog("主表id:" + id);

        // 到款日期(轉化為時間戳)
        String dkrq = dateToStamp(rs.getString("sqrq"));
        writeLog("到款日期:" + dkrq);

        // 申請人
        String sqr = rs.getString("sqr");
        writeLog("申請人id:" + sqr);

        // 獲取付款客戶(需要根據客戶的id去客戶信息表里面查詢客戶的名稱)
        String fkkh = rs.getString("fkkh");// 獲取的是客戶的id
        rs.execute("select * from CRM_CustomerInfo where id =  " + fkkh);
        rs.next();

        // 獲取付款客戶名稱
        String khmc = rs.getString("name");
        writeLog("付款客戶:" + khmc);

        // 查詢申請人手機號(根據申請人的id去人力資源表里面查手機號)
        rs.execute("select * from HrmResource where id =  " + sqr);
        rs.next();
        
        //獲取申請人的手機號
        String mobile = rs.getString("mobile");
        writeLog("申請人手機號:" + mobile);

        // 明細表名稱 = 主表名稱 + "_dt1"
        String tablename_dt = tablename + "_dt1";
        writeLog("明細表名稱:" + tablename_dt);

        // 根據主表的id查詢明細表數據
        rs.execute("select * from " + tablename_dt + " where mainid =  " + id);
        while (rs.next()) {
            // 項目名稱
            String xmmc = rs.getString("xmmc");
            writeLog("項目名稱:" + xmmc);
            // 對應合同號
            String hth = rs.getString("dyhth");
            writeLog("合同號:" + hth);
            // 金額
            String je = rs.getString("je");
            writeLog("金額:" + je);
            // 收款階段
            String skjd = getStage(rs.getString("skjd"));
            writeLog("收款階段:" + skjd);
            // 備注
            String bz = rs.getString("bz");
            writeLog("備注:" + bz);

            // 拼接參數(中文參數需要encode一下)
            String url = "http://192.168.10.21:8081/returned";
            try {
                url += "?pactId=" + URLEncoder.encode(hth, "UTF-8") + "&client=" + URLEncoder.encode(khmc, "UTF-8")
                    + "&Hellday=" + dkrq + "&prpName=" + URLEncoder.encode(xmmc, "UTF-8") + "&money=" + je + "&stage="
                    + skjd + "&Message=" + URLEncoder.encode(bz, "UTF-8") + "&mobile=" + mobile;
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            // 發送請求
            doGet(url);
        }
        return SUCCESS;
    }

    /* 
     * 將時間轉換為時間戳
     */
    public static String dateToStamp(String s) {
        String res = "";
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date date = simpleDateFormat.parse(s);
            long ts = date.getTime();
            res = String.valueOf(ts);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return res;
    }

    // 將OA付款階段下拉框的值轉化成CRM里面下拉框的值
    public static String getStage(String skjd) {
        String skjd_CRM = "";
        switch (skjd) {
            case "36":
                skjd_CRM = "1";
                break; // 可選
            case "312":
                skjd_CRM = "2";
                break; // 可選
            case "313":
                skjd_CRM = "3";
                break; // 可選
            case "314":
                skjd_CRM = "4";
                break; // 可選
            case "315":
                skjd_CRM = "5";
                break; // 可選
            case "316":
                skjd_CRM = "6";
                break; // 可選
            case "317":
                skjd_CRM = "7";
                break; // 可選
            case "318":
                skjd_CRM = "8";
                break; // 可選
            case "319":
                skjd_CRM = "9";
                break; // 可選
            default: // 可選
                // 語句
        }
        return skjd_CRM;
    }

    // 發送get請求
    public static String doGet(String URL) {
        HttpURLConnection conn = null;
        InputStream is = null;
        BufferedReader br = null;
        StringBuilder result = new StringBuilder();
        try {
            // 創建遠程url連接對象
            URL url = new URL(URL);
            // 通過遠程url連接對象打開一個連接,強轉成HTTPURLConnection類
            conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("GET");
            // 設置連接超時時間和讀取超時時間
            conn.setConnectTimeout(15000);
            conn.setReadTimeout(60000);
            conn.setRequestProperty("Accept", "application/json");
            // 發送請求
            conn.connect();
            // 通過conn取得輸入流,並使用Reader讀取
            if (200 == conn.getResponseCode()) {
                is = conn.getInputStream();
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String line;
                while ((line = br.readLine()) != null) {
                    result.append(line);
                    System.out.println(line);
                }
            } else {
                System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
                if (is != null) {
                    is.close();
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
            conn.disconnect();
        }
        return result.toString();
    }
}

3. 注意事項

url的請求路徑前面要加上http://,不然會報錯java.net.MalformedURLException

4. 效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM