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