From 3563aaae96b6f5ef66c59e3027f9d3f7791628b5 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 09:59:30 +0800 Subject: [PATCH 01/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9AAPI=E6=98=A0=E5=B0=84=E5=85=AC=E5=85=B1=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=20=E5=A4=87=E6=B3=A8=EF=BC=9A=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/sys/plugin/form/ApiMappingBillPlugin.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index d986e76..b165b0c 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -26,6 +26,7 @@ import java.math.BigDecimal; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -398,8 +399,16 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { String tartype = dynamicObject.getString("shkd_tartype"); - if ("String".equals(tartype) || "Date".equals(tartype)) { + if ("String".equals(tartype)) { jsonObject.put(key, value); + } else if ("Date".equals(tartype)) { + // 将字符串时间戳转换为长整型 + long timestamp = Long.parseLong((String) value); + // 创建一个Date对象 + Date date = new Date(timestamp); + // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + jsonObject.put(key, sdf.format(date)); } else if ("Integer".equals(tartype)) { jsonObject.put(key, Integer.parseInt(value.toString())); } else if ("BigDecimal".equals(tartype)) { From c4ed69a7baf5fe14561f28477f57a4fdf98a0124 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 10:14:41 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9AAPI=E6=98=A0=E5=B0=84=E5=85=AC=E5=85=B1=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=20=E5=A4=87=E6=B3=A8=EF=BC=9A=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index b165b0c..732c5bc 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -402,10 +402,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { if ("String".equals(tartype)) { jsonObject.put(key, value); } else if ("Date".equals(tartype)) { - // 将字符串时间戳转换为长整型 - long timestamp = Long.parseLong((String) value); // 创建一个Date对象 - Date date = new Date(timestamp); + Date date = new Date((Long) value); // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); jsonObject.put(key, sdf.format(date)); From 91f82c191dcbbf4ce0acfb1013b2bf4fd874c3cc Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 10:26:21 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9AAPI=E6=98=A0=E5=B0=84=E5=85=AC=E5=85=B1=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=20=E5=A4=87=E6=B3=A8=EF=BC=9A=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/plugin/form/ApiMappingBillPlugin.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 732c5bc..d76e623 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -191,7 +191,7 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } in.close(); // 替换 \n 为实际的换行符 - formattedContent = content.toString().replace("\\n", "\n").replace("\\",""); + formattedContent = content.toString().replace("\\n", "\n").replace("\\", ""); } else { formattedContent = "响应失败"; } @@ -360,6 +360,12 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } else { value = "2";//收入 } + } else if ("bizdate".equals(parts[0])) { + Date bizdate = billObject.getDate("bizdate"); + // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 格式化Date对象为字符串 + value = sdf.format(bizdate); } else { value = billObject.get(parts[0]); } @@ -399,14 +405,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { String tartype = dynamicObject.getString("shkd_tartype"); - if ("String".equals(tartype)) { + if ("String".equals(tartype) || "Date".equals(tartype)) { jsonObject.put(key, value); - } else if ("Date".equals(tartype)) { - // 创建一个Date对象 - Date date = new Date((Long) value); - // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - jsonObject.put(key, sdf.format(date)); } else if ("Integer".equals(tartype)) { jsonObject.put(key, Integer.parseInt(value.toString())); } else if ("BigDecimal".equals(tartype)) { From 9343a1a821853d4a833b7c3687422712eb7c7d54 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 11:16:24 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 368 +++++++++++------- 1 file changed, 221 insertions(+), 147 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index dd1344e..da84c06 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -16,10 +16,17 @@ import okhttp3.Response; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.*; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -157,11 +164,13 @@ public class ApiService { * @param systemName 推送系统名称 * @return */ - public static JSONObject paymentSlipsJson(DynamicObject dynamic, String systemName) { + public static String paymentSlipsJson(DynamicObject dynamic, String systemName) { + String requestBody; // 获取推送的单据标识 String billMark = dynamic.getDataEntityType().getName(); DynamicObject[] objects = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," + + "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url," + "shkd_sourcebill,shkd_targetsystem,entryentity,entryentity.shkd_tarfield,entryentity.shkd_tartier," + "entryentity.shkd_tartype,entryentity.shkd_parentfield,entryentity.shkd_soufield,entryentity.shkd_defaultdata," + "entryentity.shkd_required,entryentity.shkd_remarks", @@ -181,7 +190,6 @@ public class ApiService { }); List> floors = new ArrayList<>(); - // 目前定的4层,之后需要弄成动态的 for (int i = 1; i <= tiers.size(); i++) { floors.add(new ArrayList<>()); } @@ -191,68 +199,40 @@ public class ApiService { int tier = Integer.parseInt(dynamicObject.getString("shkd_tartier")); floors.get(tier - 1).add(dynamicObject); } - JSONObject resultJson = new JSONObject(); - processFloor(resultJson, "data", floors.get(0), floors, dynamic); - logger.info("调用接口系统:{}\n调用接口单据:{}\n调用JSON:{}", systemName, dynamic, resultJson); - return resultJson; - } - public static void traverseJson(JSONObject jsonObject, List path, String level) { - for (String key : jsonObject.keySet()) { - Object value = jsonObject.get(key); - String fullPath = buildPath(path, key, level); - System.out.println(fullPath + ": " + value); - - if (value instanceof JSONObject) { - path.add(key); - traverseJson((JSONObject) value, path, level + "." + (path.size() + 1)); - path.remove(path.size() - 1); - } else if (value instanceof JSONArray) { - path.add(key); - traverseJsonArray((JSONArray) value, path, level + "." + (path.size() + 1)); - path.remove(path.size() - 1); + // 获取组装body类型 + String shkd_bodytype = objects[0].getString("shkd_bodytype"); + if ("数组".equals(shkd_bodytype)) { + JSONArray jsonArray = new JSONArray(); + JSONObject json = new JSONObject(); + for (DynamicObject dynamicObject : dynamicObjectCollection) { + valueAssignment(dynamicObject, dynamic, json, floors); } + jsonArray.add(json); + requestBody = jsonArray.toJSONString(); + } else { + JSONObject resultJson = new JSONObject(); + processFloor(resultJson, "data", floors.get(0), floors, dynamic); + requestBody = resultJson.toJSONString(); } - } - - public static void traverseJsonArray(JSONArray jsonArray, List path, String level) { - for (int i = 0; i < jsonArray.size(); i++) { - Object value = jsonArray.get(i); - if (value instanceof JSONObject) { - path.add("[" + i + "]"); - traverseJson((JSONObject) value, path, level + "." + (i + 1)); - path.remove(path.size() - 1); - } else if (value instanceof JSONArray) { - path.add("[" + i + "]"); - traverseJsonArray((JSONArray) value, path, level + "." + (i + 1)); - path.remove(path.size() - 1); - } else { - String fullPath = buildPath(path, "[" + i + "]", level); - System.out.println(fullPath + ": " + value); - } - } - } - - public static String buildPath(List path, String key, String level) { - StringBuilder sb = new StringBuilder(); - sb.append("层级 ").append(level).append(": "); - for (String s : path) { - sb.append(s).append("."); - } - sb.append(key); - return sb.toString(); + logger.info("请求URL:{}\n组装请求body:{}", objects[0].getString("shkd_url"), requestBody); + String responseBody = pushBill(objects[0], requestBody); + return responseBody; } /** - * 遍历JSON对象 + * 处理楼层 * - * @param parentJson - * @param parentKey - * @param currentFloor - * @param floors + * @param parentJson 父JSON对象 + * @param parentKey 父字段标识 + * @param currentFloor 当前层级对象(List) + * @param floors 所有楼层对象(List) + * @param dynamic 源单据对象 */ - public static void processFloor(JSONObject parentJson, String parentKey, List currentFloor, List> floors, DynamicObject dynamic) { + private static void processFloor(JSONObject parentJson, String parentKey, List currentFloor, List> floors, DynamicObject dynamic) { + logger.info("进入processFloor方法"); if (currentFloor.isEmpty()) { + logger.info("currentFloor.isEmpty()"); return; } @@ -263,114 +243,153 @@ public class ApiService { } if ("arrayList".equals(currentFloor.get(0).getString("shkd_tartype"))) { + logger.info("进入数组"); JSONArray jsonArray = new JSONArray(); //目前JSONArray都是一层 JSONObject json = new JSONObject(); for (DynamicObject dynamicObject : currentFloor) { - String key = dynamicObject.getString("shkd_tarfield"); - Object shkd_soufield = dynamicObject.get("shkd_soufield"); - Object value = null; - if (shkd_soufield != null) { - String[] parts = shkd_soufield.toString().split("\\."); - if (parts.length == 1) { - value = dynamic.get(parts[0]); - } else if (parts.length == 2) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection.get(0).get(parts[1]); - } else { - value = dynamic.getDynamicObject(parts[0]).get(parts[1]); - } - } else if (parts.length == 3) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]); - } else { - value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]); - } - } - } else { - value = dynamicObject.get("shkd_defaultdata"); - } - - String tartype = dynamicObject.getString("shkd_tartype"); - - if ("string".equals(tartype) || "date".equals(tartype)) { - json.put(key, value); - } else if ("int".equals(tartype)) { - json.put(key, Integer.parseInt(value.toString())); - } else if ("object".equals(tartype)) { - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic); - json.put(key, childJson); - } else if ("arrayList".equals(tartype)) { - JSONArray childJsonArray = new JSONArray(); - for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) { - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors, dynamic); - childJsonArray.add(childJson); - } - json.put(key, childJsonArray); - } + valueAssignment(dynamicObject, dynamic, json, floors); } jsonArray.add(json); parentJson.put(parentKey, jsonArray); } else { + logger.info("进入对象"); for (DynamicObject dynamicObject : currentFloor) { - String key = dynamicObject.getString("shkd_tarfield"); - Object shkd_soufield = dynamicObject.get("shkd_soufield"); - Object value = null; - if (shkd_soufield != null) { - String[] parts = shkd_soufield.toString().split("\\."); - if (parts.length == 1) { - value = dynamic.get(parts[0]); - } else if (parts.length == 2) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection.get(0).get(parts[1]); - } else { - value = dynamic.getDynamicObject(parts[0]).get(parts[1]); - } - } else if (parts.length == 3) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]); - } else { - value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]); - } - } - } else { - value = dynamicObject.get("shkd_defaultdata"); - } - String tartype = dynamicObject.getString("shkd_tartype"); - - if ("string".equals(tartype) || "date".equals(tartype)) { - parentJson.put(key, value); - } else if ("int".equals(tartype)) { - parentJson.put(key, Integer.parseInt(value.toString())); - } else if ("object".equals(tartype)) { - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic); - parentJson.put(key, childJson); - } else if ("arrayList".equals(tartype)) { - JSONArray childJsonArray = new JSONArray(); - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic); - childJsonArray.add(childJson); - parentJson.put(key, childJsonArray); - } + valueAssignment(dynamicObject, dynamic, parentJson, floors); } } } /** - * 获取子节点 + * 给value赋值 * - * @param floors - * @param parentKey - * @return + * @param dynamicObject 映射分录的单行数据 + * @param billObject 源单数据 + * @param jsonObject JSON对象 + * @param floors 层集合 */ - public static List getChildren(List> floors, String parentKey) { + private static void valueAssignment(DynamicObject dynamicObject, DynamicObject billObject, JSONObject jsonObject, List> floors) { + + String key = dynamicObject.getString("shkd_tarfield"); + Object value = null; + // 将映射字段塞入对应JSON中 + Object shkd_soufield = dynamicObject.get("shkd_soufield"); + logger.info("shkd_soufield: {}", shkd_soufield); + if (shkd_soufield != null && !"".equals(shkd_soufield)) { + String[] parts = shkd_soufield.toString().split("\\."); + logger.info("billObject:{}\nparts: {}", billObject, Arrays.toString(parts)); + if (parts.length == 1) { + if ("payeetype".equals(parts[0]) || "payertype".equals(parts[0])) { + String objectType = billObject.getString(parts[0]); + switch (objectType) { + case "bos_org": + value = "4"; + break; + case "bd_supplier": + value = "2"; + break; + case "bd_customer": + value = "1"; + break; + case "bos_user": + value = "3"; + break; + case "other": + value = "4"; + break; + } + } else if ("debitamount".equals(parts[0])) { + // 付款金额 + BigDecimal debitamount = billObject.getBigDecimal("debitamount"); + // 收款金额 + BigDecimal creditamount = billObject.getBigDecimal("creditamount"); + if (debitamount.compareTo(BigDecimal.ZERO) != 0) { + value = billObject.get("debitamount"); + } else { + value = billObject.get("creditamount"); + } + } else if ("direction".equals(parts[0])) { + // 付款金额 + BigDecimal debitamount = billObject.getBigDecimal("debitamount"); + // 收款金额 + BigDecimal creditamount = billObject.getBigDecimal("creditamount"); + if (debitamount.compareTo(BigDecimal.ZERO) != 0) { + value = "1";//支出 + } else { + value = "2";//收入 + } + } else if ("bizdate".equals(parts[0])) { + Date bizdate = billObject.getDate("bizdate"); + // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 格式化Date对象为字符串 + value = sdf.format(bizdate); + } else { + value = billObject.get(parts[0]); + } + + } else if (parts.length == 2) { + if ("entry".equals(parts[0])) { + DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); + value = dynamicObjectCollection1.get(0).get(parts[1]); + } else { + DynamicObject object = billObject.getDynamicObject(parts[0]); + if (object != null) { + value = object.get(parts[1]); + } + } + } else if (parts.length == 3) { + if ("entry".equals(parts[0])) { + DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); + DynamicObject object = dynamicObjectCollection1.get(0).getDynamicObject(parts[1]); + if (object != null) { + value = object.get(parts[2]); + } + } else { + DynamicObject object = billObject.getDynamicObject(parts[0]); + if (object != null) { + DynamicObject object1 = object.getDynamicObject(parts[1]); + if (object1 != null) { + value = object1.get(parts[2]); + + } + } + } + } + } else { + value = dynamicObject.get("shkd_defaultdata"); + } + + + String tartype = dynamicObject.getString("shkd_tartype"); + + if ("String".equals(tartype) || "Date".equals(tartype)) { + jsonObject.put(key, value); + } else if ("Integer".equals(tartype)) { + jsonObject.put(key, Integer.parseInt(value.toString())); + } else if ("BigDecimal".equals(tartype)) { + jsonObject.put(key, new BigDecimal(value.toString())); + } else if ("对象".equals(tartype)) { + JSONObject childJson = new JSONObject(); + processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); + jsonObject.put(key, childJson); + } else if ("数组".equals(tartype)) { + JSONArray childJsonArray = new JSONArray(); + JSONObject childJson = new JSONObject(); + processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); + childJsonArray.add(childJson); + jsonObject.put(key, childJsonArray); + } + } + + /** + * 获取子对象集合 + * + * @param floors 所有层级的所有对象 + * @param parentKey 父节点的shkd_tarfield + * @return 子对象集合 + */ + private static List getChildren(List> floors, String parentKey) { List children = new ArrayList<>(); for (List floor : floors) { for (DynamicObject dynamicObject : floor) { @@ -382,5 +401,60 @@ public class ApiService { return children; } + /** + * 推送单条数据 + * @param dataEntity + * @param requestBody + * @return + */ + private static String pushBill(DynamicObject dataEntity, String requestBody) { + //响应数据 + String formattedContent; + try { + //域名 + String domainName = dataEntity.getString("shkd_domainname"); + Map resultMap = ApiService.getBIPToken(domainName); + Object token = resultMap.get("token"); + logger.info("获取token:{}", token); + // 请求URL + URL url = new URL(dataEntity.getString("shkd_url") + "?access_token=" + token); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + // 设置请求方法为POST + connection.setRequestMethod("POST"); + + // 设置请求头 + connection.setRequestProperty("Content-Type", "application/json"); + + // 允许输出 + connection.setDoOutput(true); + + // 写入请求体 + try (OutputStream os = connection.getOutputStream()) { + byte[] input = requestBody.getBytes(StandardCharsets.UTF_8); + os.write(input, 0, input.length); + } + + // 获取响应码 + int responseCode = connection.getResponseCode(); + + // 读取响应内容 + if (responseCode == HttpURLConnection.HTTP_OK) { // 成功响应 + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + // 替换 \n 为实际的换行符 + formattedContent = content.toString().replace("\\n", "\n").replace("\\", ""); + } else { + formattedContent = "响应失败"; + } + } catch (Exception e) { + formattedContent = "请求失败," + e.getMessage(); + } + return formattedContent; + } } From 1e68b8d405caf84f4c2407110ad96a55fc5d80a2 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 14:05:36 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 27 +- .../sys/plugin/form/ApiMappingBillPlugin.java | 355 +++--------------- 2 files changed, 70 insertions(+), 312 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index da84c06..e39e5dd 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -165,7 +165,6 @@ public class ApiService { * @return */ public static String paymentSlipsJson(DynamicObject dynamic, String systemName) { - String requestBody; // 获取推送的单据标识 String billMark = dynamic.getDataEntityType().getName(); @@ -177,8 +176,22 @@ public class ApiService { new QFilter("shkd_sourcebill", QCP.equals, billMark).and( new QFilter("shkd_targetsystem", QCP.equals, systemName)).toArray()); + // 组装请求体数据 + String requestBody = assembleRequestBody(objects[0]); + logger.info("请求URL:{}\n组装请求body:{}", objects[0].getString("shkd_url"), requestBody); + + // 调用接口,获取响应数据 + return pushBill(objects[0], requestBody); + } + + /** + * 组装请求体数据 + * @param dynamic API映射单据数据对象 + * @return + */ + public static String assembleRequestBody(DynamicObject dynamic) { // 获取数据表信息 - DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entryentity"); + DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection("entryentity"); // 提取所有层级并存储在 Set 中 Set tiers = new HashSet<>(); @@ -201,7 +214,7 @@ public class ApiService { } // 获取组装body类型 - String shkd_bodytype = objects[0].getString("shkd_bodytype"); + String shkd_bodytype = dynamic.getString("shkd_bodytype"); if ("数组".equals(shkd_bodytype)) { JSONArray jsonArray = new JSONArray(); JSONObject json = new JSONObject(); @@ -209,17 +222,13 @@ public class ApiService { valueAssignment(dynamicObject, dynamic, json, floors); } jsonArray.add(json); - requestBody = jsonArray.toJSONString(); + return jsonArray.toJSONString(); } else { JSONObject resultJson = new JSONObject(); processFloor(resultJson, "data", floors.get(0), floors, dynamic); - requestBody = resultJson.toJSONString(); + return resultJson.toJSONString(); } - logger.info("请求URL:{}\n组装请求body:{}", objects[0].getString("shkd_url"), requestBody); - String responseBody = pushBill(objects[0], requestBody); - return responseBody; } - /** * 处理楼层 * diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index d76e623..6e4f63e 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -1,7 +1,5 @@ package shkd.sys.sys.plugin.form; -import kd.bos.logging.Log; -import kd.bos.logging.LogFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -12,22 +10,18 @@ import kd.bos.form.control.CodeEdit; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; -import shkd.sys.sys.common.ApiEntity; import shkd.sys.sys.mservice.ApiService; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; +import java.util.Map; /** * 动态表单插件 @@ -52,90 +46,53 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { public void itemClick(ItemClickEvent evt) { String itemKey = evt.getItemKey(); DynamicObject dataEntity = this.getModel().getDataEntity(true); + // 获取想要推送单据编码 + String billNumber = dataEntity.getString("shkd_sourcenumber"); + logger.info("获取推送单据编码 → billNumber:{}", billNumber); + // 获取想要推送单据类型 + String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number"); + logger.info("获取推送单据类型 → billMark:{}", billMark); + + + DynamicObject billObject; + switch (billMark) { + // 付款处理 + case "cas_paybill": + DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description" + , new QFilter("billno", QCP.equals, billNumber).toArray()); + billObject = objects1[0]; + logger.info("获取付款处理推送对象 → billObject:{}", billObject); + break; + // 收款处理 + case "cas_recbill": + DynamicObject[] objects2 = BusinessDataServiceHelper.load("cas_recbill", + "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + + "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description" + , new QFilter("billno", QCP.equals, billNumber).toArray()); + billObject = objects2[0]; + logger.info("获取收款处理推送对象 → billObject:{}", billObject); + break; + // 银企交易明细查询 + case "bei_transdetail_cas": + DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,bizdate,oppbank,oppunit,accountbank,description,company,oppbanknumber," + + "bankdetailno,transbalance,description,debitamount,creditamount" + , new QFilter("billno", QCP.equals, billNumber).toArray()); + billObject = objects3[0]; + logger.info("获取银企交易明细查询推送对象 → billObject:{}", billObject); + break; + default: + return; + } + // 获取代码编辑器控件 CodeEdit codeEdit = this.getView().getControl("shkd_codeeditap"); + if ("shkd_generatejson".equals(itemKey)) { - // 获取想要推送单据编码 - String billNumber = dataEntity.getString("shkd_sourcenumber"); - logger.info("获取推送单据编码 → billNumber:{}", billNumber); - // 获取想要推送单据类型 - String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number"); - logger.info("获取推送单据类型 → billMark:{}", billMark); - - - DynamicObject billObject; - switch (billMark) { - // 付款处理 - case "cas_paybill": - DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", - "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + - "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description" - , new QFilter("billno", QCP.equals, billNumber).toArray()); - billObject = objects1[0]; - logger.info("获取付款处理推送对象 → billObject:{}", billObject); - break; - // 收款处理 - case "cas_recbill": - DynamicObject[] objects2 = BusinessDataServiceHelper.load("cas_recbill", - "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + - "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description" - , new QFilter("billno", QCP.equals, billNumber).toArray()); - billObject = objects2[0]; - logger.info("获取收款处理推送对象 → billObject:{}", billObject); - break; - // 银企交易明细查询 - case "bei_transdetail_cas": - DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", - "id,bizdate,oppbank,oppunit,accountbank,description,company,oppbanknumber," + - "bankdetailno,transbalance,description,debitamount,creditamount" - , new QFilter("billno", QCP.equals, billNumber).toArray()); - billObject = objects3[0]; - logger.info("获取银企交易明细查询推送对象 → billObject:{}", billObject); - break; - default: - return; - } - - // 生成JSON - DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("entryentity"); - - // 提取所有层级并存储在 Set 中 - Set tiers = new HashSet<>(); - dynamicObjectCollection.forEach(dynamicObject -> { - String shkd_tartier = dynamicObject.getString("shkd_tartier"); - if (shkd_tartier != null && !shkd_tartier.isEmpty()) { - tiers.add(Integer.parseInt(shkd_tartier)); - } - }); - - List> floors = new ArrayList<>(); - for (int i = 1; i <= tiers.size(); i++) { - floors.add(new ArrayList<>()); - } - - // 分层 - for (DynamicObject dynamicObject : dynamicObjectCollection) { - int tier = Integer.parseInt(dynamicObject.getString("shkd_tartier")); - floors.get(tier - 1).add(dynamicObject); - } - - // 获取组装body类型 - String shkd_bodytype = dataEntity.getString("shkd_bodytype"); - if ("数组".equals(shkd_bodytype)) { - JSONArray jsonArray = new JSONArray(); - JSONObject json = new JSONObject(); - for (DynamicObject dynamicObject : dynamicObjectCollection) { - valueAssignment(dynamicObject, billObject, json, floors); - } - jsonArray.add(json); - codeEdit.setText(format(jsonArray.toJSONString())); - logger.info("数组 → JSON:{}", jsonArray.toJSONString()); - } else { - JSONObject resultJson = new JSONObject(); - processFloor(resultJson, "data", floors.get(0), floors, billObject); - codeEdit.setText(format(resultJson.toJSONString())); - logger.info("对象 → JSON:{}", resultJson.toJSONString()); - } + String requestBody = ApiService.assembleRequestBody(dataEntity); + codeEdit.setText(format(requestBody)); } if ("shkd_analyzejson".equals(itemKey)) { @@ -151,54 +108,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } if ("shkd_testapi".equals(itemKey)) { - //响应数据 - String formattedContent; - try { - //域名 - String domainName = dataEntity.getString("shkd_domainname"); - Map resultMap = ApiService.getBIPToken(domainName); - // 请求URL - URL url = new URL(dataEntity.getString("shkd_url") + "?access_token=" + resultMap.get("token")); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - - // 设置请求方法为POST - connection.setRequestMethod("POST"); - - // 设置请求头 - connection.setRequestProperty("Content-Type", "application/json"); - - // 允许输出 - connection.setDoOutput(true); - - // 写入请求体 - try (OutputStream os = connection.getOutputStream()) { - byte[] input = codeEdit.getText().getBytes(StandardCharsets.UTF_8); - os.write(input, 0, input.length); - } - - // 获取响应码 - int responseCode = connection.getResponseCode(); - - // 这里可以进一步读取响应内容,根据实际情况处理 - - // 读取响应内容 - if (responseCode == HttpURLConnection.HTTP_OK) { // 成功响应 - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); - String inputLine; - StringBuilder content = new StringBuilder(); - while ((inputLine = in.readLine()) != null) { - content.append(inputLine); - } - in.close(); - // 替换 \n 为实际的换行符 - formattedContent = content.toString().replace("\\n", "\n").replace("\\", ""); - } else { - formattedContent = "响应失败"; - } - } catch (Exception e) { - formattedContent = "请求失败," + e.getMessage(); - } - this.getView().showTipNotification("返回结果:" + formattedContent); + String responseBody = ApiService.paymentSlipsJson(billObject, dataEntity.getString("shkd_systemname")); + this.getView().showTipNotification("返回结果:" + responseBody); } if ("shkd_gettoken".equals(itemKey)) { @@ -209,45 +120,6 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } } - /** - * 处理楼层 - * - * @param parentJson 父JSON对象 - * @param parentKey 父字段标识 - * @param currentFloor 当前层级对象(List) - * @param floors 所有楼层对象(List) - * @param dynamic 源单据对象 - */ - private void processFloor(JSONObject parentJson, String parentKey, List currentFloor, List> floors, DynamicObject dynamic) { - logger.info("进入processFloor方法"); - if (currentFloor.isEmpty()) { - logger.info("currentFloor.isEmpty()"); - return; - } - - if (currentFloor.size() == 1 && "object".equals(currentFloor.get(0).getString("shkd_tartype"))) { - parentJson.put(parentKey, new JSONObject()); - processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors, dynamic); - return; - } - - if ("arrayList".equals(currentFloor.get(0).getString("shkd_tartype"))) { - logger.info("进入数组"); - JSONArray jsonArray = new JSONArray(); - //目前JSONArray都是一层 - JSONObject json = new JSONObject(); - for (DynamicObject dynamicObject : currentFloor) { - valueAssignment(dynamicObject, dynamic, json, floors); - } - jsonArray.add(json); - parentJson.put(parentKey, jsonArray); - } else { - logger.info("进入对象"); - for (DynamicObject dynamicObject : currentFloor) { - valueAssignment(dynamicObject, dynamic, parentJson, floors); - } - } - } /** * 获取子对象集合 @@ -301,129 +173,6 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { this.getModel().setValue("shkd_parentfield", pKey, dynamicObjectCollection.size() - 1); } - - /** - * 给value赋值 - * - * @param dynamicObject 映射分录的单行数据 - * @param billObject 源单数据 - * @param jsonObject JSON对象 - * @param floors 层集合 - */ - private void valueAssignment(DynamicObject dynamicObject, DynamicObject billObject, JSONObject jsonObject, List> floors) { - - String key = dynamicObject.getString("shkd_tarfield"); - Object value = null; - // 将映射字段塞入对应JSON中 - Object shkd_soufield = dynamicObject.get("shkd_soufield"); - logger.info("shkd_soufield: {}", shkd_soufield); - if (shkd_soufield != null && !"".equals(shkd_soufield)) { - String[] parts = shkd_soufield.toString().split("\\."); - logger.info("billObject:{}\nparts: {}", billObject, Arrays.toString(parts)); - if (parts.length == 1) { - if ("payeetype".equals(parts[0]) || "payertype".equals(parts[0])) { - String objectType = billObject.getString(parts[0]); - switch (objectType) { - case "bos_org": - value = "4"; - break; - case "bd_supplier": - value = "2"; - break; - case "bd_customer": - value = "1"; - break; - case "bos_user": - value = "3"; - break; - case "other": - value = "4"; - break; - } - } else if ("debitamount".equals(parts[0])) { - // 付款金额 - BigDecimal debitamount = billObject.getBigDecimal("debitamount"); - // 收款金额 - BigDecimal creditamount = billObject.getBigDecimal("creditamount"); - if (debitamount.compareTo(BigDecimal.ZERO) != 0) { - value = billObject.get("debitamount"); - } else { - value = billObject.get("creditamount"); - } - } else if ("direction".equals(parts[0])) { - // 付款金额 - BigDecimal debitamount = billObject.getBigDecimal("debitamount"); - // 收款金额 - BigDecimal creditamount = billObject.getBigDecimal("creditamount"); - if (debitamount.compareTo(BigDecimal.ZERO) != 0) { - value = "1";//支出 - } else { - value = "2";//收入 - } - } else if ("bizdate".equals(parts[0])) { - Date bizdate = billObject.getDate("bizdate"); - // 创建一个SimpleDateFormat对象,指定格式为"yyyy-MM-dd" - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - // 格式化Date对象为字符串 - value = sdf.format(bizdate); - } else { - value = billObject.get(parts[0]); - } - - } else if (parts.length == 2) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection1.get(0).get(parts[1]); - } else { - DynamicObject object = billObject.getDynamicObject(parts[0]); - if (object != null) { - value = object.get(parts[1]); - } - } - } else if (parts.length == 3) { - if ("entry".equals(parts[0])) { - DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); - DynamicObject object = dynamicObjectCollection1.get(0).getDynamicObject(parts[1]); - if (object != null) { - value = object.get(parts[2]); - } - } else { - DynamicObject object = billObject.getDynamicObject(parts[0]); - if (object != null) { - DynamicObject object1 = object.getDynamicObject(parts[1]); - if (object1 != null) { - value = object1.get(parts[2]); - - } - } - } - } - } else { - value = dynamicObject.get("shkd_defaultdata"); - } - - - String tartype = dynamicObject.getString("shkd_tartype"); - - if ("String".equals(tartype) || "Date".equals(tartype)) { - jsonObject.put(key, value); - } else if ("Integer".equals(tartype)) { - jsonObject.put(key, Integer.parseInt(value.toString())); - } else if ("BigDecimal".equals(tartype)) { - jsonObject.put(key, new BigDecimal(value.toString())); - } else if ("对象".equals(tartype)) { - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); - jsonObject.put(key, childJson); - } else if ("数组".equals(tartype)) { - JSONArray childJsonArray = new JSONArray(); - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); - childJsonArray.add(childJson); - jsonObject.put(key, childJsonArray); - } - } - /** * 格式化JSON字符串 * From 4a534c6583a69bf3443bf766700ce45065c5db15 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 15:05:19 +0800 Subject: [PATCH 06/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/shkd/sys/sys/mservice/ApiService.java | 11 ++++++----- .../sys/sys/plugin/form/ApiMappingBillPlugin.java | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index e39e5dd..a55b274 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -177,7 +177,7 @@ public class ApiService { new QFilter("shkd_targetsystem", QCP.equals, systemName)).toArray()); // 组装请求体数据 - String requestBody = assembleRequestBody(objects[0]); + String requestBody = assembleRequestBody(dynamic, objects[0]); logger.info("请求URL:{}\n组装请求body:{}", objects[0].getString("shkd_url"), requestBody); // 调用接口,获取响应数据 @@ -186,12 +186,13 @@ public class ApiService { /** * 组装请求体数据 - * @param dynamic API映射单据数据对象 + * @param dynamic 推送数据对象 + * @param mapping API映射对象数据 * @return */ - public static String assembleRequestBody(DynamicObject dynamic) { + public static String assembleRequestBody(DynamicObject dynamic, DynamicObject mapping) { // 获取数据表信息 - DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection("entryentity"); + DynamicObjectCollection dynamicObjectCollection = mapping.getDynamicObjectCollection("entryentity"); // 提取所有层级并存储在 Set 中 Set tiers = new HashSet<>(); @@ -214,7 +215,7 @@ public class ApiService { } // 获取组装body类型 - String shkd_bodytype = dynamic.getString("shkd_bodytype"); + String shkd_bodytype = mapping.getString("shkd_bodytype"); if ("数组".equals(shkd_bodytype)) { JSONArray jsonArray = new JSONArray(); JSONObject json = new JSONObject(); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 6e4f63e..651f764 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -91,7 +91,7 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { CodeEdit codeEdit = this.getView().getControl("shkd_codeeditap"); if ("shkd_generatejson".equals(itemKey)) { - String requestBody = ApiService.assembleRequestBody(dataEntity); + String requestBody = ApiService.assembleRequestBody(billObject, dataEntity); codeEdit.setText(format(requestBody)); } From f0335a90a6edc517b3c35eed5b51dc7ce2d9da26 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 15:14:01 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/shkd/sys/sys/mservice/ApiService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index a55b274..84576d0 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -169,7 +169,7 @@ public class ApiService { String billMark = dynamic.getDataEntityType().getName(); DynamicObject[] objects = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," + - "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url," + + "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url,shkd_systemname," + "shkd_sourcebill,shkd_targetsystem,entryentity,entryentity.shkd_tarfield,entryentity.shkd_tartier," + "entryentity.shkd_tartype,entryentity.shkd_parentfield,entryentity.shkd_soufield,entryentity.shkd_defaultdata," + "entryentity.shkd_required,entryentity.shkd_remarks", From 500443fe0018974a4253a0d0a913c00a799448f3 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 15:24:43 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/shkd/sys/sys/mservice/ApiService.java | 4 ++-- .../java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 84576d0..9ae049e 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -161,7 +161,7 @@ public class ApiService { * 组装推送BIP付款单JSON * * @param dynamic 某个单据的 某条需要推送的数据 注:映射字段必须包含在其中,缺失字段会报错 - * @param systemName 推送系统名称 + * @param systemName 推送系统标识 * @return */ public static String paymentSlipsJson(DynamicObject dynamic, String systemName) { @@ -169,7 +169,7 @@ public class ApiService { String billMark = dynamic.getDataEntityType().getName(); DynamicObject[] objects = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," + - "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url,shkd_systemname," + + "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url," + "shkd_sourcebill,shkd_targetsystem,entryentity,entryentity.shkd_tarfield,entryentity.shkd_tartier," + "entryentity.shkd_tartype,entryentity.shkd_parentfield,entryentity.shkd_soufield,entryentity.shkd_defaultdata," + "entryentity.shkd_required,entryentity.shkd_remarks", diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 651f764..7fc3a64 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -108,7 +108,7 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } if ("shkd_testapi".equals(itemKey)) { - String responseBody = ApiService.paymentSlipsJson(billObject, dataEntity.getString("shkd_systemname")); + String responseBody = ApiService.paymentSlipsJson(billObject, "BIP"); this.getView().showTipNotification("返回结果:" + responseBody); } From 3b1deed75c184d9c20504c4830e9ed6705b223bb Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 15:32:32 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E6=8E=A8=E9=80=81BIP=E6=95=B0=E6=8D=AE=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E7=B1=BB=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=9A=E8=B0=83=E6=95=B4=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/shkd/sys/sys/mservice/ApiService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 9ae049e..cb556be 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -169,7 +169,7 @@ public class ApiService { String billMark = dynamic.getDataEntityType().getName(); DynamicObject[] objects = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," + - "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url," + + "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_token,shkd_url,shkd_bodytype," + "shkd_sourcebill,shkd_targetsystem,entryentity,entryentity.shkd_tarfield,entryentity.shkd_tartier," + "entryentity.shkd_tartype,entryentity.shkd_parentfield,entryentity.shkd_soufield,entryentity.shkd_defaultdata," + "entryentity.shkd_required,entryentity.shkd_remarks", From e751d21ba03be0a4124d1f825e4f0215d3c46e07 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 16:19:12 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/sys/plugin/task/PushTaskPlugin.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java new file mode 100644 index 0000000..3919aef --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -0,0 +1,97 @@ +package shkd.sys.sys.plugin.task; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.kingdee.bos.qing.util.DateUtils; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.exception.KDException; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; +import shkd.sys.sys.mservice.ApiService; + +import java.text.ParseException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * 后台任务插件 + */ +public class PushTaskPlugin extends AbstractTask implements Plugin { + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + Object billMark = map.get("billMark"); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 获取当前日期的前两天 + LocalDate twoDaysAgo = currentDate.minusDays(2); + + // 格式化日期为 "yyyy-MM-dd" + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = twoDaysAgo.format(formatter); + + Date date; + try { + date = DateUtils.stringToDate(formattedDate,"yyyy-MM-dd"); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + List dynamicObjects = new ArrayList<>(); + if (billMark != null) { + switch (billMark.toString()) { + // 付款处理 + case "cas_paybill": + DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + dynamicObjects = Arrays.asList(objects1); + break; + // 收款处理 + case "cas_recbill": + DynamicObject[] objects2 = BusinessDataServiceHelper.load("cas_recbill", + "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + + "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description,shkd_pushstatus," + + "shkd_businessnumber,shkd_businessid,shkd_businessname" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + dynamicObjects = Arrays.asList(objects2); + break; + // 银企交易明细查询 + case "bei_transdetail_cas": + DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,bizdate,oppbank,oppunit,accountbank,description,company,oppbanknumber," + + "bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus," + + "shkd_businessnumber,shkd_businessid,shkd_businessname" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + dynamicObjects = Arrays.asList(objects3); + break; + default: + return; + } + } + + List objects = new ArrayList<>(); + dynamicObjects.forEach(dynamicObject -> { + String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); + JSONObject jsonObject = JSON.parseObject(responseBody); + JSONObject data = jsonObject.getJSONObject("data"); + String code = data.getString("code"); + String id = data.getString("id"); + dynamicObject.set("shkd_businessnumber", code); + dynamicObject.set("shkd_businessid", id); + dynamicObject.set("shkd_businessname", "BIP"); + dynamicObject.set("shkd_pushstatus", "已推送"); + objects.add(dynamicObject); + }); + SaveServiceHelper.save(objects.toArray(new DynamicObject[0])); + } +} \ No newline at end of file From 8d7f58194d1c44d09b5d19856a0649f9e6ff24a6 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 16:23:53 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/sys/plugin/task/PushTaskPlugin.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 3919aef..e8d3dcd 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -6,6 +6,8 @@ import com.kingdee.bos.qing.util.DateUtils; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.exception.KDException; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; @@ -13,6 +15,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; import shkd.sys.sys.mservice.ApiService; +import shkd.sys.sys.plugin.form.ApiMappingBillPlugin; import java.text.ParseException; import java.time.LocalDate; @@ -23,6 +26,7 @@ import java.util.*; * 后台任务插件 */ public class PushTaskPlugin extends AbstractTask implements Plugin { + private static final Log logger = LogFactory.getLog(PushTaskPlugin.class); @Override public void execute(RequestContext requestContext, Map map) throws KDException { @@ -39,11 +43,13 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { Date date; try { - date = DateUtils.stringToDate(formattedDate,"yyyy-MM-dd"); + date = DateUtils.stringToDate(formattedDate, "yyyy-MM-dd"); } catch (ParseException e) { throw new RuntimeException(e); } + String billName = null; + List dynamicObjects = new ArrayList<>(); if (billMark != null) { switch (billMark.toString()) { @@ -55,6 +61,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname" , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); dynamicObjects = Arrays.asList(objects1); + billName = "付款处理"; break; // 收款处理 case "cas_recbill": @@ -64,8 +71,9 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { "shkd_businessnumber,shkd_businessid,shkd_businessname" , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); dynamicObjects = Arrays.asList(objects2); + billName = "收款处理"; break; - // 银企交易明细查询 + // 银行收付处理 case "bei_transdetail_cas": DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", "id,bizdate,oppbank,oppunit,accountbank,description,company,oppbanknumber," + @@ -73,6 +81,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { "shkd_businessnumber,shkd_businessid,shkd_businessname" , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); dynamicObjects = Arrays.asList(objects3); + billName = "银行收付处理"; break; default: return; @@ -80,17 +89,22 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { } List objects = new ArrayList<>(); + String finalBillName = billName; dynamicObjects.forEach(dynamicObject -> { String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); - JSONObject jsonObject = JSON.parseObject(responseBody); - JSONObject data = jsonObject.getJSONObject("data"); - String code = data.getString("code"); - String id = data.getString("id"); - dynamicObject.set("shkd_businessnumber", code); - dynamicObject.set("shkd_businessid", id); - dynamicObject.set("shkd_businessname", "BIP"); - dynamicObject.set("shkd_pushstatus", "已推送"); - objects.add(dynamicObject); + if (!responseBody.contains("失败")) { + JSONObject jsonObject = JSON.parseObject(responseBody); + JSONObject data = jsonObject.getJSONObject("data"); + String code = data.getString("code"); + String id = data.getString("id"); + dynamicObject.set("shkd_businessnumber", code); + dynamicObject.set("shkd_businessid", id); + dynamicObject.set("shkd_businessname", "BIP"); + dynamicObject.set("shkd_pushstatus", "已推送"); + objects.add(dynamicObject); + } else { + logger.info("推送 → {} → 失败,失败单据编号:{}", finalBillName, dynamicObject.getString("billno")); + } }); SaveServiceHelper.save(objects.toArray(new DynamicObject[0])); } From 88ab918ed8be3d2d390da2421bff46e660f37cdc Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 16:48:14 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index e8d3dcd..e6990e9 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -93,6 +93,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { dynamicObjects.forEach(dynamicObject -> { String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); if (!responseBody.contains("失败")) { + logger.info("推送 → {} → 成功\n推送单据编号:{}\n推送数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); JSONObject jsonObject = JSON.parseObject(responseBody); JSONObject data = jsonObject.getJSONObject("data"); String code = data.getString("code"); From c3a86a26058b839967bac13247e6c91e6fe3ddf8 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 17:00:51 +0800 Subject: [PATCH 13/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/sys/plugin/task/PushTaskPlugin.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index e6990e9..375f092 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -93,16 +93,18 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { dynamicObjects.forEach(dynamicObject -> { String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); if (!responseBody.contains("失败")) { - logger.info("推送 → {} → 成功\n推送单据编号:{}\n推送数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); JSONObject jsonObject = JSON.parseObject(responseBody); - JSONObject data = jsonObject.getJSONObject("data"); - String code = data.getString("code"); - String id = data.getString("id"); - dynamicObject.set("shkd_businessnumber", code); - dynamicObject.set("shkd_businessid", id); - dynamicObject.set("shkd_businessname", "BIP"); - dynamicObject.set("shkd_pushstatus", "已推送"); - objects.add(dynamicObject); + String code = jsonObject.getString("code"); + if ("200".equals(code)) { + JSONObject data = jsonObject.getJSONObject("data"); + dynamicObject.set("shkd_businessnumber", data.getString("code")); + dynamicObject.set("shkd_businessid", data.getString("id")); + dynamicObject.set("shkd_businessname", "BIP"); + dynamicObject.set("shkd_pushstatus", "已推送"); + objects.add(dynamicObject); + } else { + logger.info("推送 → {} → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); + } } else { logger.info("推送 → {} → 失败,失败单据编号:{}", finalBillName, dynamicObject.getString("billno")); } From 525c2028e10f581839e718385251af3cf9bb17bf Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Tue, 10 Dec 2024 17:23:04 +0800 Subject: [PATCH 14/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/shkd/sys/sys/mservice/ApiService.java | 2 +- .../src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index cb556be..192ffad 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -458,7 +458,7 @@ public class ApiService { } in.close(); // 替换 \n 为实际的换行符 - formattedContent = content.toString().replace("\\n", "\n").replace("\\", ""); + formattedContent = content.toString().replace("\\n", "\n"); } else { formattedContent = "响应失败"; } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 375f092..043c99a 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -92,6 +92,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String finalBillName = billName; dynamicObjects.forEach(dynamicObject -> { String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); + logger.info("推送 → {} → 开始\n推送单据编号:{}\n接口响应数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); if (!responseBody.contains("失败")) { JSONObject jsonObject = JSON.parseObject(responseBody); String code = jsonObject.getString("code"); From 7f7c6fcbf42f5faaf9ed9eb7f8094cc42740b18c Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Mon, 16 Dec 2024 10:37:29 +0800 Subject: [PATCH 15/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/shkd/sys/sys/mservice/ApiService.java | 14 +++++++++++--- .../shkd/sys/sys/plugin/task/PushTaskPlugin.java | 11 +++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 192ffad..a86a7d7 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -418,10 +418,10 @@ public class ApiService { * @return */ private static String pushBill(DynamicObject dataEntity, String requestBody) { - //响应数据 + // 响应数据 String formattedContent; try { - //域名 + // 域名 String domainName = dataEntity.getString("shkd_domainname"); Map resultMap = ApiService.getBIPToken(domainName); Object token = resultMap.get("token"); @@ -460,7 +460,15 @@ public class ApiService { // 替换 \n 为实际的换行符 formattedContent = content.toString().replace("\\n", "\n"); } else { - formattedContent = "响应失败"; + // 读取错误流 + BufferedReader errorReader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), StandardCharsets.UTF_8)); + String errorLine; + StringBuilder errorContent = new StringBuilder(); + while ((errorLine = errorReader.readLine()) != null) { + errorContent.append(errorLine); + } + errorReader.close(); + formattedContent = "响应失败: " + errorContent.toString(); } } catch (Exception e) { formattedContent = "请求失败," + e.getMessage(); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 043c99a..28939cd 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -58,7 +58,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + - "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname" + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); dynamicObjects = Arrays.asList(objects1); billName = "付款处理"; @@ -68,7 +68,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { DynamicObject[] objects2 = BusinessDataServiceHelper.load("cas_recbill", "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description,shkd_pushstatus," + - "shkd_businessnumber,shkd_businessid,shkd_businessname" + "shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); dynamicObjects = Arrays.asList(objects2); billName = "收款处理"; @@ -83,6 +83,13 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { dynamicObjects = Arrays.asList(objects3); billName = "银行收付处理"; break; + // 支付结果(付款处理支付结果定时推送) + case "cas_paybill_result": + DynamicObject[] objects4 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); default: return; } From 63a0a083ebdb85d16299764d34383efd69157f92 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Mon, 16 Dec 2024 16:28:35 +0800 Subject: [PATCH 16/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9AAPI=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/plugin/api/PayBillApiSavePlugin.java | 127 +++++++----------- 1 file changed, 48 insertions(+), 79 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java index ab36424..b518f2b 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java @@ -29,8 +29,6 @@ import java.util.Map; public class PayBillApiSavePlugin implements ApiSavePlugin { private static final Log logger = LogFactory.getLog(PayBillApiSavePlugin.class); private static final long serialVersionUID = 7055073356277386444L; - private String shkd_businessid; - private String shkd_businessnumber; @Override public List> preHandleRequestData(List> reqData) { @@ -58,99 +56,70 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { logger.info("进入付款处理单API"); //收款人类型 objectType = payeetype.toString(); - //收款人编码 - objectNumber = map.get("payeenumber").toString(); - //收款人ID - fieldName1 = "payee"; + if (!"other".equals(objectType)) { + //收款人编码 + objectNumber = map.get("payeenumber").toString(); + //收款人ID + fieldName1 = "payee"; - Map payeebankObj = (Map) map.get("payeebank"); - bankNumber = (String) payeebankObj.get("number"); - logger.info("付款处理 → \nobjectType:{}\nobjectNumber:{}\nbankNumber:{}", objectType, objectNumber, bankNumber); - - fieldName2 = "payerbank"; - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load(objectType, "id,number", new QFilter("number", QCP.equals, objectNumber).toArray()); - logger.info("dynamicObjects.length:{}", dynamicObjects.length); - if (dynamicObjects.length > 0) { - map.put(fieldName1, dynamicObjects[0].getPkValue()); - logger.info("dynamicObjects[0]:{}", dynamicObjects[0]); + Map payeebankObj = (Map) map.get("payeebank"); + bankNumber = (String) payeebankObj.get("number"); + logger.info("付款处理 → \nobjectType:{}\nobjectNumber:{}\nbankNumber:{}", objectType, objectNumber, bankNumber); + DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load(objectType, "id,number", new QFilter("number", QCP.equals, objectNumber).toArray()); + logger.info("dynamicObjects.length:{}", dynamicObjects.length); + if (dynamicObjects.length > 0) { + map.put(fieldName1, dynamicObjects[0].getPkValue()); + logger.info("dynamicObjects[0]:{}", dynamicObjects[0]); + } } - DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number", new QFilter("number", QCP.equals, bankNumber).toArray()); - logger.info("amAccountbanks.length:{}", amAccountbanks.length); - Map payerbank = new HashMap<>(); - if (amAccountbanks.length > 0) { - payerbank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number")); - logger.info("amAccountbanks[0]:{}", amAccountbanks[0]); + if ("bos_org".equals(objectType)) { + fieldName2 = "payerbank"; + DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number", new QFilter("number", QCP.equals, bankNumber).toArray()); + logger.info("amAccountbanks.length:{}", amAccountbanks.length); + Map payerbank = new HashMap<>(); + if (amAccountbanks.length > 0) { + payerbank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number")); + logger.info("amAccountbanks[0]:{}", amAccountbanks[0]); + } + logger.info("payerbank:{}", payerbank); + map.put(fieldName2, payerbank); } - logger.info("payerbank:{}", payerbank); - map.put(fieldName2, payerbank); } if (payertype != null) { objectType = payertype.toString(); - objectNumber = map.get("payernumber").toString(); - fieldName1 = "payer"; + if (!"other".equals(objectType)) { + objectNumber = map.get("payernumber").toString(); + fieldName1 = "payer"; - Map accountbank = (Map) map.get("accountbank"); - bankNumber = (String) accountbank.get("number"); - logger.info("收款处理 → \nobjectType:{}\nobjectNumber:{}\nbankNumber:{}", objectType, objectNumber, bankNumber); - fieldName2 = "payeebank"; - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load(objectType, "id,number", new QFilter("number", QCP.equals, objectNumber).toArray()); - logger.info("dynamicObjects.length:{}", dynamicObjects.length); - if (dynamicObjects.length > 0) { - map.put(fieldName1, dynamicObjects[0].getPkValue()); - logger.info("dynamicObjects[0]:{}", dynamicObjects[0]); + Map accountbank = (Map) map.get("accountbank"); + bankNumber = (String) accountbank.get("number"); + logger.info("收款处理 → \nobjectType:{}\nobjectNumber:{}\nbankNumber:{}", objectType, objectNumber, bankNumber); + + DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load(objectType, "id,number", new QFilter("number", QCP.equals, objectNumber).toArray()); + logger.info("dynamicObjects.length:{}", dynamicObjects.length); + if (dynamicObjects.length > 0) { + map.put(fieldName1, dynamicObjects[0].getPkValue()); + logger.info("dynamicObjects[0]:{}", dynamicObjects[0]); + } } - DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number", new QFilter("number", QCP.equals, bankNumber).toArray()); - logger.info("amAccountbanks.length:{}", amAccountbanks.length); - Map payeebank = new HashMap<>(); - if (amAccountbanks.length > 0) { - payeebank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number")); + if ("bos_org".equals(objectType)) { + fieldName2 = "payeebank"; + DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number", new QFilter("number", QCP.equals, bankNumber).toArray()); + logger.info("amAccountbanks.length:{}", amAccountbanks.length); + Map payeebank = new HashMap<>(); + if (amAccountbanks.length > 0) { + payeebank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number")); + } + logger.info("payerbank:{}", payeebank); + map.put(fieldName2, payeebank); } - logger.info("payerbank:{}", payeebank); - map.put(fieldName2, payeebank); } - shkd_businessid = map.get("shkd_businessid").toString(); - shkd_businessnumber = map.get("shkd_businessnumber").toString(); -// shkd_businessid -// shkd_businessnumber -// shkd_businessname logger.info("最终处理 → 调用接口参数:{}", reqData); } return reqData; } - - /*@Override - public SerializerResult serialize(Object response, String accept, String contentType) { - logger.info("进入serialize方法"); - try { - if (contentType.contains(MediaType.APPLICATION_JSON)) { - logger.info("进入if"); - //返回text文本 - String responseStr = new ObjectMapper().writeValueAsString(response); - JSONObject jsonObject = JSON.parseObject(responseStr); - // 获取 data 节点 - JSONObject data = jsonObject.getJSONObject("data"); - - // 获取 result 节点 - JSONArray result = data.getJSONArray("result"); - result.getJSONObject(0).put("shkd_businessid", shkd_businessid); - result.getJSONObject(0).put("shkd_businessnumber", shkd_businessnumber); - return new SerializerResult(MediaType.TEXT_PLAIN, jsonObject.toJSONString()); - } else { - logger.info("进入else"); - //其他类型的出参序列化 - String responseStr = new ObjectMapper().writeValueAsString(response); - JSONObject jsonObject = JSON.parseObject(responseStr); - return new SerializerResult(MediaType.TEXT_PLAIN, jsonObject.toJSONString()); - } - } catch (JsonProcessingException e) { - logger.info("catch"); - //处理异常时严禁抛出异常,可以定义自己的错误返回信息 - String result = "..."; - return new SerializerResult(MediaType.TEXT_PLAIN, result); - } - }*/ } From bf1810ac7ca95c74d9aa18776455e3016ca92b65 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Mon, 16 Dec 2024 17:04:00 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/plugin/form/ApiMappingBillPlugin.java | 13 ++++ .../sys/sys/plugin/task/PushTaskPlugin.java | 78 ++++++++++++------- 2 files changed, 62 insertions(+), 29 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 7fc3a64..645517b 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -15,6 +15,7 @@ import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; import shkd.sys.sys.mservice.ApiService; @@ -109,6 +110,18 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { if ("shkd_testapi".equals(itemKey)) { String responseBody = ApiService.paymentSlipsJson(billObject, "BIP"); + JSONObject jsonObject = JSON.parseObject(responseBody); + String code = jsonObject.getString("code"); + if ("200".equals(code)) { + JSONObject data = jsonObject.getJSONObject("data"); + billObject.set("shkd_businessnumber", data.getString("code")); + billObject.set("shkd_businessid", data.getString("id")); + billObject.set("shkd_businessname", "BIP"); + billObject.set("shkd_pushstatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{billObject}); + } else { + logger.info("推送 → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", billObject.getString("billno"), responseBody); + } this.getView().showTipNotification("返回结果:" + responseBody); } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 28939cd..c56bdad 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -51,6 +51,8 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String billName = null; List dynamicObjects = new ArrayList<>(); + List objects = new ArrayList<>(); + String finalBillName; if (billMark != null) { switch (billMark.toString()) { // 付款处理 @@ -58,10 +60,33 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + - "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" - , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送") + .and("billstatus", QCP.equals, "D").toArray()); dynamicObjects = Arrays.asList(objects1); billName = "付款处理"; + finalBillName = billName; + dynamicObjects.forEach(dynamicObject -> { + String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); + logger.info("推送 → {} → 开始\n推送单据编号:{}\n接口响应数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); + if (!responseBody.contains("失败")) { + JSONObject jsonObject = JSON.parseObject(responseBody); + String code = jsonObject.getString("code"); + if ("200".equals(code)) { + JSONObject data = jsonObject.getJSONObject("data"); + dynamicObject.set("shkd_businessnumber", data.getString("code")); + dynamicObject.set("shkd_businessid", data.getString("id")); + dynamicObject.set("shkd_businessname", "BIP"); + dynamicObject.set("shkd_pushstatus", "已推送"); + objects.add(dynamicObject); + } else { + logger.info("推送 → {} → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); + } + } else { + logger.info("推送 → {} → 失败,失败单据编号:{}", finalBillName, dynamicObject.getString("billno")); + } + }); + SaveServiceHelper.save(objects.toArray(new DynamicObject[0])); break; // 收款处理 case "cas_recbill": @@ -83,40 +108,35 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { dynamicObjects = Arrays.asList(objects3); billName = "银行收付处理"; break; - // 支付结果(付款处理支付结果定时推送) + // 支付失败(付款处理支付结果定时推送) case "cas_paybill_result": DynamicObject[] objects4 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + - "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" - , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" + , new QFilter("bizdate", QCP.large_equals, date).and("bankpaystatus", QCP.in, new String[]{"TF", "NC", "OF"}).toArray()); + dynamicObjects = Arrays.asList(objects4); + finalBillName = billName; + dynamicObjects.forEach(dynamicObject -> { + String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIPNO"); + logger.info("推送 → {} → 开始\n推送单据编号:{}\n接口响应数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); + if (!responseBody.contains("失败")) { + JSONObject jsonObject = JSON.parseObject(responseBody); + String code = jsonObject.getString("code"); + if ("200".equals(code)) { + dynamicObject.set("billstatus", "A"); + objects.add(dynamicObject); + } else { + logger.info("推送 → {} → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); + } + } else { + logger.info("推送 → {} → 失败,失败单据编号:{}", finalBillName, dynamicObject.getString("billno")); + } + }); + SaveServiceHelper.save(objects.toArray(new DynamicObject[0])); default: return; } } - - List objects = new ArrayList<>(); - String finalBillName = billName; - dynamicObjects.forEach(dynamicObject -> { - String responseBody = ApiService.paymentSlipsJson(dynamicObject, "BIP"); - logger.info("推送 → {} → 开始\n推送单据编号:{}\n接口响应数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); - if (!responseBody.contains("失败")) { - JSONObject jsonObject = JSON.parseObject(responseBody); - String code = jsonObject.getString("code"); - if ("200".equals(code)) { - JSONObject data = jsonObject.getJSONObject("data"); - dynamicObject.set("shkd_businessnumber", data.getString("code")); - dynamicObject.set("shkd_businessid", data.getString("id")); - dynamicObject.set("shkd_businessname", "BIP"); - dynamicObject.set("shkd_pushstatus", "已推送"); - objects.add(dynamicObject); - } else { - logger.info("推送 → {} → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", finalBillName, dynamicObject.getString("billno"), responseBody); - } - } else { - logger.info("推送 → {} → 失败,失败单据编号:{}", finalBillName, dynamicObject.getString("billno")); - } - }); - SaveServiceHelper.save(objects.toArray(new DynamicObject[0])); } } \ No newline at end of file From 029549a0f7c7eb1e14414764896db0bc87150d50 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Mon, 16 Dec 2024 17:34:52 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/plugin/form/ApiMappingBillPlugin.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 645517b..2653658 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -61,7 +61,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { case "cas_paybill": DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + - "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description" + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" , new QFilter("billno", QCP.equals, billNumber).toArray()); billObject = objects1[0]; logger.info("获取付款处理推送对象 → billObject:{}", billObject); @@ -70,7 +71,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { case "cas_recbill": DynamicObject[] objects2 = BusinessDataServiceHelper.load("cas_recbill", "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + - "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description" + "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description,shkd_pushstatus," + + "shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus" , new QFilter("billno", QCP.equals, billNumber).toArray()); billObject = objects2[0]; logger.info("获取收款处理推送对象 → billObject:{}", billObject); @@ -79,7 +81,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { case "bei_transdetail_cas": DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", "id,bizdate,oppbank,oppunit,accountbank,description,company,oppbanknumber," + - "bankdetailno,transbalance,description,debitamount,creditamount" + "bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus," + + "shkd_businessnumber,shkd_businessid,shkd_businessname" , new QFilter("billno", QCP.equals, billNumber).toArray()); billObject = objects3[0]; logger.info("获取银企交易明细查询推送对象 → billObject:{}", billObject); @@ -125,6 +128,19 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { this.getView().showTipNotification("返回结果:" + responseBody); } + if ("shkd_hitBack".equals(itemKey)) { + String responseBody = ApiService.paymentSlipsJson(billObject, "BIPNO"); + JSONObject jsonObject = JSON.parseObject(responseBody); + String code = jsonObject.getString("code"); + if ("200".equals(code)) { + billObject.set("billstatus", "A"); + SaveServiceHelper.save(new DynamicObject[]{billObject}); + } else { + logger.info("推送 → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", billObject.getString("billno"), responseBody); + } + this.getView().showTipNotification("返回结果:" + responseBody); + } + if ("shkd_gettoken".equals(itemKey)) { //域名 String domainName = dataEntity.getString("shkd_domainname"); From 4d17ecace193bfe912ca97f3f006787665d65117 Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Mon, 16 Dec 2024 17:51:44 +0800 Subject: [PATCH 19/19] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=EF=BC=9A=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E8=87=B3BIP=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 2653658..606ecad 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -128,7 +128,7 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { this.getView().showTipNotification("返回结果:" + responseBody); } - if ("shkd_hitBack".equals(itemKey)) { + if ("shkd_hitback".equals(itemKey)) { String responseBody = ApiService.paymentSlipsJson(billObject, "BIPNO"); JSONObject jsonObject = JSON.parseObject(responseBody); String code = jsonObject.getString("code");