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