泛微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