diff --git a/main/java/shjh/jhzj7/fi/fi/utils/OAUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/OAUtils.java index 89d5f9d..5dc857f 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/OAUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/OAUtils.java @@ -50,7 +50,7 @@ public class OAUtils { Map customerHeader = new HashMap<>(); customerHeader.put("Content-Type", "application/json;charset=UTF-8");//请求报文类型 customerHeader.put("x-Gateway-APIKey",oaAPIKey);//apiKey,由ESB提供 - customerHeader.put("interfaceID", "TodoFlow");//todo:识别被调接口并进行路由 + customerHeader.put("interfaceID", "TodoFlow");//识别被调接口并进行路由 customerHeader.put("senderID", "FM");//定义的发送者.暂定工号 return customerHeader; } diff --git a/main/java/shjh/jhzj7/fi/fi/utils/SapUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/SapUtils.java index f0cc1db..3542aba 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/SapUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/SapUtils.java @@ -14,23 +14,21 @@ import java.util.Objects; /** * SAP集成工具类 - * SAP应付凭证锁定解锁状态回写 */ public class SapUtils { - public static final String oaUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境 - public static final String oaAPIKey = "207b5296-9866-4b4b-8146-1fea58b3c8c9";//测试环境APIKey private static final Log logger = LogFactory.getLog(SapUtils.class); - private static final String Apimenthod = " SAP应付凭证锁定解锁状态回写接口"; + private static final String Apimenthod1 = "SAP应付凭证锁定解锁状态回写接口"; + public static final String unlockedUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证锁定解锁状态回写) +// public static final String unlockedUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境 + private static final String Apimenthod2 = "SAP应付凭证清单接口"; + public static final String vouchersUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证清单接口) +// public static final String vouchersUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境 + public static final String oaAPIKey = "207b5296-9866-4b4b-8146-1fea58b3c8c9";//测试环境APIKey +// public static final String oaAPIKey = "8281da80-b39b-48c4-83bd-f8e480740c6a";//测试环境APIKey + + - public static void thirdParty(Map thirdPartyMap) { - // 构建请求头 - Map customerHeader = buildCustomerHeader(thirdPartyMap); - // 组装请求体 - JSONObject pendingsBody = buildPendingsBody(thirdPartyMap); - // 发送请求并处理响应 - processRequest(customerHeader, pendingsBody, thirdPartyMap); - } /** * 构建请求头 @@ -41,23 +39,41 @@ public class SapUtils { Map customerHeader = new HashMap<>(); customerHeader.put("Content-Type", "application/json;charset=UTF-8");//请求报文类型 customerHeader.put("x-Gateway-APIKey",oaAPIKey);//apiKey,由ESB提供 - customerHeader.put("interfaceID", "TodoFlow");//todo:识别被调接口并进行路由 - customerHeader.put("senderID", String.valueOf(thirdPartyMap.get("cname")));//TODO:定义的发送者.暂定工号 + customerHeader.put("interfaceID", ""+thirdPartyMap.get("interfaceID"));//识别被调接口并进行路由 + customerHeader.put("senderID", ""+thirdPartyMap.get("senderID")); return customerHeader; } + /** - * 组装请求体 + * SAP应付凭证锁定解锁状态回写 + * @param thirdPartyMap + */ + public static void unlocked_status(Map thirdPartyMap) { + thirdPartyMap.put("interfaceID","PayableVoucherStatus"); + thirdPartyMap.put("senderID","SAP"); + thirdPartyMap.put("URL",unlockedUrl); + // 构建请求头 + Map customerHeader = buildCustomerHeader(thirdPartyMap); + // 组装请求体 + JSONObject pendingsBody = unlockedBody(thirdPartyMap); + // 发送请求并处理响应 + processRequest(customerHeader, pendingsBody, thirdPartyMap,Apimenthod1); + } + + /** + * SAP应付凭证锁定解锁状态回写组装请求体: * @param thirdPartyMap 第三方数据映射 * @return 请求体的 JSON 对象 */ - private static JSONObject buildPendingsBody(Map thirdPartyMap) { + private static JSONObject unlockedBody(Map thirdPartyMap) { //组装请求体 JSONObject pendingsBody = new JSONObject(); - pendingsBody.put("rootContextID",System.currentTimeMillis());//todo:唯一事务ID,采用UUID或其他强唯一性ID + pendingsBody.put("rootContextID",""+System.currentTimeMillis());//todo:唯一事务ID,采用UUID或其他强唯一性ID pendingsBody.put("requestTime", String.valueOf(thirdPartyMap.get("createdatetime")));//请求时间,格式为yyyy-MM-dd HH:mm:ss.SSS - JSONArray data = new JSONArray(); + JSONObject data = new JSONObject(); + JSONArray IT_INPUT = new JSONArray(); //todo:多凭证 List approversLists = (List) thirdPartyMap.get("approversLists"); for (DynamicObject approver : approversLists) { @@ -69,8 +85,55 @@ public class SapUtils { jsonObject.put("cname", String.valueOf(thirdPartyMap.get("cname")));//创建人,工号 jsonObject.put("zjddjid", String.valueOf(thirdPartyMap.get("zjddjid")));//金蝶单据ID jsonObject.put("zjddjbh", String.valueOf(thirdPartyMap.get("zjddjbh")));//金蝶单据编号 - data.add(jsonObject); + IT_INPUT.add(jsonObject); } + data.put("IT_INPUT",IT_INPUT); + pendingsBody.put("data", data); + return pendingsBody; + } + + + /** + * SAP应付凭证清单接口 + * @param thirdPartyMap + */ + public static void vouchers_payable(Map thirdPartyMap) { + thirdPartyMap.put("interfaceID","ZFS_GET_AP_OPENITEMS"); + thirdPartyMap.put("senderID","SAP"); + thirdPartyMap.put("URL",vouchersUrl); + // 构建请求头 + Map customerHeader = buildCustomerHeader(thirdPartyMap); + // 组装请求体 + JSONObject pendingsBody = payableBody(thirdPartyMap); + // 发送请求并处理响应 + processRequest(customerHeader, pendingsBody, thirdPartyMap,Apimenthod2); + } + + /** + * SAP应付凭证清单接口组装请求体: + * @param thirdPartyMap 第三方数据映射 + * @return 请求体的 JSON 对象 + */ + private static JSONObject payableBody(Map thirdPartyMap) { + //组装请求体 + JSONObject pendingsBody = new JSONObject(); + pendingsBody.put("rootContextID",""+System.currentTimeMillis());//todo:唯一事务ID,采用UUID或其他强唯一性ID + pendingsBody.put("requestTime", String.valueOf(thirdPartyMap.get("createdatetime")));//请求时间,格式为yyyy-MM-dd HH:mm:ss.SSS + + JSONObject data = new JSONObject(); + JSONArray IT_LIST = new JSONArray(); + //todo:多凭证 + List approversLists = (List) thirdPartyMap.get("approversLists"); + for (DynamicObject approver : approversLists) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("FIELD", String.valueOf(thirdPartyMap.get("FIELD")));//字段 + jsonObject.put("SIGN", String.valueOf(thirdPartyMap.get("SIGN")));//I:包含 E:排除 + jsonObject.put("LOW", String.valueOf(thirdPartyMap.get("LOW")));//LOW ,枚举字段所代表值的区间开始值 + jsonObject.put("HIGH", String.valueOf(thirdPartyMap.get("HIGH")));//HIGH,枚举字段所代表值的区间结束值 + jsonObject.put("OPTION", "BT");//默认BT + IT_LIST.add(jsonObject); + } + data.put("IT_LIST",IT_LIST); pendingsBody.put("data", data); return pendingsBody; } @@ -82,20 +145,23 @@ public class SapUtils { * @param pendingsBody 请求体 * @param thirdPartyMap 第三方数据映射 */ - private static void processRequest(Map customerHeader, JSONObject pendingsBody, Map thirdPartyMap) { + private static void processRequest(Map customerHeader, JSONObject pendingsBody, Map thirdPartyMap,String apiName) { String pendingPostjson = null; JSONObject jsonObject = null; try { // 发送POST请求并获取响应 - pendingPostjson = HttpClientUtils.postjson(OAUtils.oaUrl, customerHeader, pendingsBody.toJSONString()); - jsonObject = parseResponse(pendingPostjson); + pendingPostjson = HttpClientUtils.postjson(thirdPartyMap.get("URL").toString(), customerHeader, pendingsBody.toJSONString()); + jsonObject = parseResponse(pendingPostjson,apiName); // 检查JSON对象是否为空 if (jsonObject != null && !jsonObject.isEmpty()) { - handleResponse(jsonObject, pendingsBody, thirdPartyMap); + handleResponse(jsonObject, pendingsBody, thirdPartyMap,apiName); + }else { + logger.info(apiName +"失败!"); + saveLog(apiName + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, false,apiName); } } catch (Exception e) { - handleException(e, pendingsBody, thirdPartyMap, jsonObject); + handleException(e, pendingsBody, thirdPartyMap, jsonObject,apiName); } } @@ -104,11 +170,11 @@ public class SapUtils { * @param response 响应的 JSON 字符串 * @return 解析后的 JSON 对象 */ - private static JSONObject parseResponse(String response) { + private static JSONObject parseResponse(String response,String apiName) { try { return JSONObject.parseObject(response); } catch (Exception e) { - logger.error("解析响应 JSON 时出错: {}", e.getMessage()); + logger.error(apiName + "解析响应 JSON 时出错: {}", e.getMessage()); return null; } } @@ -119,20 +185,20 @@ public class SapUtils { * @param pendingsBody 请求体 * @param thirdPartyMap 第三方数据映射 */ - private static void handleResponse(JSONObject jsonObject, JSONObject pendingsBody, Map thirdPartyMap) { + private static void handleResponse(JSONObject jsonObject, JSONObject pendingsBody, Map thirdPartyMap,String apiName) { JSONArray data1 = jsonObject.getJSONArray("data"); if (data1 == null || data1.isEmpty()) { - logger.info("SAP应付凭证锁定解锁状态回写失败!"); - saveLog("状态回写:" + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, false); + logger.info(apiName + "失败!"); + saveLog(apiName + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, false,apiName); return; } JSONObject jsonobject = data1.getJSONObject(0); String operResult = jsonobject.getString("operResult"); - String logMessage = Objects.equals(operResult, "1") ? "SAP应付凭证锁定解锁状态回写成功!" : "SAP应付凭证锁定解锁状态回写失败!"; + String logMessage = Objects.equals(operResult, "1") ? apiName +"成功!" : apiName +"失败!"; // 记录日志 logger.info(logMessage); - saveLog("状态回写:" + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, true); + saveLog(apiName + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, true,apiName); } /** @@ -142,24 +208,24 @@ public class SapUtils { * @param thirdPartyMap 第三方数据映射 * @param jsonObject 响应的 JSON 对象 */ - private static void handleException(Exception e, JSONObject pendingsBody, Map thirdPartyMap, JSONObject jsonObject) { + private static void handleException(Exception e, JSONObject pendingsBody, Map thirdPartyMap, JSONObject jsonObject,String apiName) { // 记录异常信息 - String errorMessage = String.format("待办接口异常:%s", e.getMessage()); + String errorMessage = String.format(apiName +"状态回写接口异常:%s", e.getMessage()); logger.error(errorMessage); - saveLog("状态回写:" + String.valueOf(thirdPartyMap.get("billno")), pendingsBody, jsonObject, false); + saveLog(apiName + thirdPartyMap.get("billno"), pendingsBody, jsonObject, false,apiName); throw new RuntimeException(e); } /** * 保存日志 * - * @param billNo 账单号 + * @param billNo 单号 * @param pendingsBody 请求体 * @param jsonObject 响应的 JSON 对象 * @param isSuccess 是否成功 */ - private static void saveLog(String billNo, JSONObject pendingsBody, JSONObject jsonObject, boolean isSuccess) { - JhzjUtils.saveLog(billNo, Apimenthod, pendingsBody.toJSONString(), + private static void saveLog(String billNo, JSONObject pendingsBody, JSONObject jsonObject, boolean isSuccess,String apiName) { + JhzjUtils.saveLog(billNo, apiName, pendingsBody.toJSONString(), jsonObject != null ? jsonObject.toJSONString() : "{}", isSuccess, "API"); } }