今天分享几个集成开发过程中会用到的几个常用自定义工具类。
1.发送Http请求的工具类
java
package common.util;
import com.alibaba.fastjson.JSON;
import okhttp3.*;
import weaver.general.BaseBean;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* HTTP 工具类
* 统一使用 OkHttp,单例、安全、简洁、无资源泄漏
*/
public class HTTPUtils {
private static final BaseBean log = new BaseBean();
// ===================== OkHttp 单例 =====================
private static final OkHttpClient OK_HTTP_CLIENT;
static {
OK_HTTP_CLIENT = new OkHttpClient.Builder()
.connectTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.build();
}
// 私有构造,禁止实例化
private HTTPUtil() {}
// ===================== POST JSON(泛型版) =====================
public static <T> T postJson(String url, Object request, Class<T> responseClass) throws Exception {
// 1. 序列化参数
String reqJson = JSON.toJSONString(request);
log("=====发起HTTP-POST请求=====");
log("url: " + url);
log("request: " + reqJson);
// 2. 构建请求
RequestBody body = RequestBody.create(
MediaType.parse("application/json;charset=UTF-8"),
reqJson
);
Request okRequest = new Request.Builder()
.url(url)
.post(body)
.build();
// 3. 执行请求
try (Response response = OK_HTTP_CLIENT.newCall(okRequest).execute()) {
log("status: " + response.code());
if (!response.isSuccessful()) {
throw new Exception("接口调用失败,状态码:" + response.code());
}
String respJson = response.body().string();
log("response: " + respJson);
log("=====HTTP-POST请求结束=====");
// 4. 反序列化
return JSON.parseObject(respJson, responseClass);
}
}
// ===================== 兼容老方法:String 请求 =====================
public static String postJson(String url, String requestJson) {
log("=====发起HTTP-POST请求=====");
log("url: " + url);
log("request: " + requestJson);
RequestBody body = RequestBody.create(
MediaType.parse("application/json;charset=UTF-8"),
requestJson
);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
String result = response.body().string();
log("status: " + response.code());
log("response: " + result);
log("=====HTTP-POST请求结束=====");
return result;
} catch (Exception e) {
log("POST 请求异常:" + e.getMessage());
return null;
}
}
// ===================== GET 请求(泛型) =====================
public static <T> T get(String url, Map<String, Object> params, Class<T> responseClass) throws Exception {
// 拼接参数
String finalUrl = buildGetUrl(url, params);
log("=====发起HTTP-GET请求=====");
log("url: " + finalUrl);
log("request: " + params);
Request request = new Request.Builder()
.url(finalUrl)
.get()
.build();
try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
log("status: " + response.code());
if (!response.isSuccessful()) {
throw new Exception("接口调用失败,状态码:" + response.code());
}
String respJson = response.body().string();
log("response: " + respJson);
log("=====HTTP-GET请求结束=====");
return JSON.parseObject(respJson, responseClass);
}
}
// ===================== 拼接 GET URL =====================
private static String buildGetUrl(String url, Map<String, Object> params) {
if (params == null || params.isEmpty()) {
return url;
}
StringBuilder sb = new StringBuilder(url);
if (!url.contains("?")) {
sb.append("?");
} else {
sb.append("&");
}
for (Map.Entry<String, Object> entry : params.entrySet()) {
sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
// 删除最后一个 &
if (sb.charAt(sb.length() - 1) == '&') {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
// ===================== 简化日志 =====================
private static void log(String msg) {
log.writeLog("common.util.HTTPUtil." + msg);
}
}
使用示例:
- 发送Post请求(发送对象参数 → 返回对象)
UserReq req = new UserReq();
UserResp resp = HTTPUtil.postJson("http://xxx", req, UserResp.class);
Map<String,Object>=HTTPUtil.postJson("http://xxx", req, Map.class);
- 发送Post请求(发送Json字符串参数 → 返回Json字符串)
String resp = HTTPUtil.postJson("http://xxx", "{...}");
- 发送Get请求(发送对象参数 → 返回对象)
Map<String,Object> params = new HashMap<>();
UserResp resp = HTTPUtil.get("http://xxx", params, UserResp.class);
2.数据处理工具类
java
package common.util;
import com.weaver.general.Util;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.soa.workflow.request.RequestInfo;
import java.io.UnsupportedEncodingException;
import java.util.*;
/**
* 泛微数据处理工具类
*/
public class DataProcessingUtil {
private static final BaseBean log = new BaseBean();
private DataProcessUtil() {
}
// ------------------------------ 空判断 ------------------------------
public static boolean isNull(String s) {
return s == null || s.trim().isEmpty();
}
// ------------------------------ 长度校验 ------------------------------
public static String verify(RequestInfo requestInfo, String tableName, String fields, String lengths, String encode) {
List<Map<String, String>> dataList = query(tableName, requestInfo);
String[] fieldArr = fields.split(",");
String[] lengthArr = lengths.split(",");
for (Map<String, String> data : dataList) {
for (int i = 0; i < fieldArr.length; i++) {
String field = fieldArr[i].trim();
int maxLen = Integer.parseInt(lengthArr[i].trim());
String value = Util.null2String(data.get(field));
int realLen = getByteLength(value, encode);
log.writeLog(field + " 值:" + value + ",限制长度:" + maxLen + ",实际长度:" + realLen);
if (realLen > maxLen) {
String msg = "字段[" + field + "]长度超出限制!最大[" + maxLen + "]字节,当前[" + realLen + "]字节";
log.writeLog(msg);
return msg;
}
}
}
return "";
}
// ------------------------------ 工号转用户ID ------------------------------
public static String getUseridForWorkcode(String workcode) {
if (isNull(workcode)) return "";
RecordSet rs = new RecordSet();
List<String> userIds = new ArrayList<>();
String[] codes = workcode.split(",");
for (String code : codes) {
code = code.trim();
if (isNull(code)) continue;
String sql = "SELECT id FROM HrmResource WHERE workcode = ?";
rs.executeQuery(sql, code);
if (rs.next()) {
userIds.add(rs.getString("id"));
}
}
return String.join(",", userIds);
}
// ------------------------------ 获取主表/明细表数据 ------------------------------
public static List<Map<String, String>> query(String tableName, RequestInfo requestInfo) {
if (tableName.contains("_dt")) {
return getDetailTableDataMap(tableName, requestInfo);
} else {
List<Map<String, String>> list = new ArrayList<>();
list.add(getMainTableDataMap(requestInfo));
return list;
}
}
// 主表数据
public static Map<String, String> getMainTableDataMap(RequestInfo requestInfo) {
String requestId = requestInfo.getRequestid();
String workflowId = requestInfo.getWorkflowid();
String tableName = getTableName(workflowId);
RecordSet rs = new RecordSet();
Map<String, String> dataMap = new HashMap<>();
String sql = "SELECT * FROM " + tableName + " WHERE requestid = ?";
rs.executeQuery(sql, requestId);
if (rs.next()) {
for (int i = 1; i <= rs.getColCounts(); i++) {
String col = rs.getColumnName(i);
dataMap.put(col, Util.null2String(rs.getString(col)));
}
}
return dataMap;
}
// 明细表数据
public static List<Map<String, String>> getDetailTableDataMap(String tableName, RequestInfo requestInfo) {
List<Map<String, String>> list = new ArrayList<>();
String mainTable = getTableName(requestInfo);
String requestId = requestInfo.getRequestid();
RecordSet rs = new RecordSet();
String sql = "SELECT * FROM " + tableName + " WHERE mainid = (SELECT id FROM " + mainTable + " WHERE requestid = ?)";
rs.executeQuery(sql, requestId);
while (rs.next()) {
Map<String, String> row = new HashMap<>();
for (String col : rs.getColumnName()) {
row.put(col, Util.null2String(rs.getString(col)));
}
list.add(row);
}
return list;
}
// ------------------------------ 获取表单表名 ------------------------------
public static String getTableName(String workflowId) {
RecordSet rs = new RecordSet();
String sql = "SELECT formid FROM workflow_base WHERE id = ?";
rs.executeQuery(sql, workflowId);
if (rs.next()) {
String formId = rs.getString("formid").replace("-", "");
return "formtable_main_" + formId;
}
return "";
}
public static String getTableName(RequestInfo requestInfo) {
return getTableName(requestInfo.getWorkflowid());
}
// ------------------------------ 获取人员部门 ------------------------------
public static Map<String, String> getHrmData(String userId) {
Map<String, String> map = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "SELECT departmentid FROM HrmResource WHERE id = ?";
rs.executeQuery(sql, userId);
if (rs.next()) {
map.put("departmentid", rs.getString("departmentid"));
}
return map;
}
// ------------------------------ 递归获取上级部门(一/二/三级部门) ------------------------------
public static Map<String, Department> getFSDepartment(String departmentId) {
Map<String, Department> result = new HashMap<>();
if (isNull(departmentId) || "0".equals(departmentId)) return result;
List<Department> deptList = new ArrayList<>();
RecordSet rs = new RecordSet();
String currentId = departmentId;
while (!"0".equals(currentId)) {
String sql = "SELECT supdepid, id, departmentname FROM HrmDepartment WHERE id = ?";
rs.executeQuery(sql, currentId);
if (!rs.next()) break;
String name = rs.getString("departmentname");
String supId = rs.getString("supdepid");
deptList.add(new Department(name, currentId));
currentId = supId;
}
int size = deptList.size();
if (size >= 1) result.put("fDepart", deptList.get(size - 1));
if (size >= 2) result.put("sDepart", deptList.get(size - 2));
if (size >= 3) result.put("tDepart", deptList.get(size - 3));
while (result.size() < 3) {
if (!result.containsKey("sDepart")) result.put("sDepart", result.get("fDepart"));
if (!result.containsKey("tDepart")) result.put("tDepart", result.get("sDepart"));
}
return result;
}
// ------------------------------ 从矩阵获取三级部门负责人 ---------------------------
public static Map<String, String> getTDepart(Map<String, Department> deptMap) {
Department f = deptMap.get("fDepart");
Department s = deptMap.get("sDepart");
Department t = deptMap.get("tDepart");
return getTDepart(f.getDepartmentid(), s.getDepartmentid(), t.getDepartmentid());
}
public static Map<String, String> getTDepart(String fId, String sId, String tId) {
RecordSet rs = new RecordSet();
Map<String, String> result = new HashMap<>();
String fieldSql = "SELECT fieldname FROM MatrixFieldInfo WHERE displayname = '三级部门负责人' " +
"AND matrixid = (SELECT id FROM MatrixInfo WHERE name = '公司矩阵')";//矩阵
rs.executeQuery(fieldSql);
String field = rs.next() ? rs.getString("fieldname") : "sjbmfzr";
String userSql = "SELECT lastname, workcode FROM HrmResource WHERE id = " +
"(SELECT " + field + " FROM Matrixtable_4 WHERE yjbm = ? AND ejbm = ? AND sjbm = ?)";
rs.executeQuery(userSql, fId, sId, tId);
if (rs.next()) {
result.put("lastname", rs.getString("lastname"));
result.put("workcode", rs.getString("workcode"));
}
return result;
}
// ------------------------------ 获取直属领导 ------------------------------
public static Map<String, String> getDepart(String userId) {
Map<String, String> result = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "SELECT lastname, workcode FROM HrmResource WHERE id = (SELECT managerid FROM HrmResource WHERE id = ?)";
rs.executeQuery(sql, userId);
if (rs.next()) {
result.put("lastname", rs.getString("lastname"));
result.put("workcode", rs.getString("workcode"));
}
return result;
}
// ------------------------------ 获取用户信息 ------------------------------
public static Map<String, String> getUser(String userId) {
Map<String, String> result = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "SELECT lastname, workcode FROM HrmResource WHERE id = ?";
rs.executeQuery(sql, userId);
if (rs.next()) {
result.put("lastname", rs.getString("lastname"));
result.put("workcode", rs.getString("workcode"));
}
return result;
}
// ------------------------------ 更新主表状态 ------------------------------
public static String setStatus(String column, String status, RequestInfo requestInfo) {
String table = getTableName(requestInfo);
String reqId = requestInfo.getRequestid();
RecordSet rs = new RecordSet();
String sql = "UPDATE " + table + " SET " + column + " = ? WHERE requestid = ?";
return rs.executeUpdate(sql, status, reqId) ? "1" : "0";
}
// ------------------------------ 类型转换工具 ------------------------------
public static String getDoubleValue(String str, String defaultValue) {
return isNull(str) ? defaultValue : str;
}
public static Double strToDouble(String str, String defaultValue) {
try {
return isNull(str) ? Double.valueOf(defaultValue) : Double.valueOf(str);
} catch (Exception e) {
return Double.valueOf(defaultValue);
}
}
public static Integer strToInteger(String str, String defaultValue) {
try {
return isNull(str) ? (defaultValue == null ? null : Integer.valueOf(defaultValue)) : Integer.valueOf(str);
} catch (Exception e) {
return Integer.valueOf(defaultValue);
}
}
public static Float strToFloat(String str, String defaultValue) {
try {
return isNull(str) ? Float.valueOf(defaultValue) : Float.valueOf(str);
} catch (Exception e) {
return Float.valueOf(defaultValue);
}
}
// ------------------------------ 获取字节长度 ------------------------------
private static int getByteLength(String str, String encode) {
if (isNull(str)) return 0;
String charset = isNull(encode) ? "UTF-8" : encode;
try {
return str.getBytes(charset).length;
} catch (UnsupportedEncodingException e) {
log.writeLog("获取字节长度失败:" + e.getMessage());
return 0;
}
}
// ------------------------------ 部门内部类 ------------------------------
public static class Department {
private final String departmentname;
private final String departmentid;
public Department(String departmentname, String departmentid) {
this.departmentname = departmentname;
this.departmentid = departmentid;
}
public String getDepartmentname() {
return departmentname;
}
public String getDepartmentid() {
return departmentid;
}
@Override
public String toString() {
return "Department{name='" + departmentname + "', id='" + departmentid + "'}";
}
}
}