From c9ebddc4863eb501875db7914880f2dcbfec5744 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 28 Dec 2025 14:35:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9Acsx=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=97=B6=E9=97=B4=EF=BC=9A2025=E5=B9=B412?= =?UTF-8?q?=E6=9C=8828=E6=97=A5=20=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=9A=E5=85=B1=E4=BA=AB=E6=8E=A8=E9=80=81=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/plugin/task/SharePushTaskPlugin.java | 231 ++++++++++-------- 1 file changed, 125 insertions(+), 106 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/SharePushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/SharePushTaskPlugin.java index d7eae9f..793811c 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/SharePushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/SharePushTaskPlugin.java @@ -16,19 +16,33 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.drp.mdr.api.Api; import kd.tmc.fbp.common.util.EmptyUtil; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; import shkd.sys.sys.mservice.ApiService; import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -48,24 +62,27 @@ public class SharePushTaskPlugin extends AbstractTask { DynamicObject[] bei_elecreceiptids = BusinessDataServiceHelper.load("bei_elecreceipt", "id", dzhdqFilter.toArray()); logger.info("符合推送条件数据有:{}条", bei_elecreceiptids.length); //获取司库电子回单推送共享系统的对应映射 - QFilter qFilter = new QFilter("name", QCP.equals,"司库电子回单推送共享系统"); + QFilter qFilter = new QFilter("shkd_name", QCP.equals,"司库电子回单推送共享系统"); DynamicObject shkd_apimappingid = BusinessDataServiceHelper.loadSingle("shkd_apimapping", "id", qFilter.toArray()); + if (EmptyUtil.isEmpty(shkd_apimappingid)){ + logger.info("未找到对应的推送接口映射"); + return; + } DynamicObject shkd_apimapping = BusinessDataServiceHelper.loadSingle(shkd_apimappingid.getLong("id"), "shkd_apimapping"); - String url = shkd_apimapping.getString("shkd_url"); - String domainName = shkd_apimapping.getString("shkd_domainname"); - String appKey = shkd_apimapping.getString("shkd_appkey"); - String appSecret = shkd_apimapping.getString("shkd_appsecret"); + String shkd_url = shkd_apimapping.getString("shkd_url"); + Map headMap = new HashMap<>(); + DynamicObjectCollection shkdHeade = shkd_apimapping.getDynamicObjectCollection("shkd_heade"); + for (DynamicObject dynamicObject : shkdHeade) { + headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz")); + } DynamicObjectCollection shkd_mapping = shkd_apimapping.getDynamicObjectCollection("shkd_mapping"); for (DynamicObject bei_elecreceiptid : bei_elecreceiptids) { - // 获取token - String token = ApiService.getBIPToken(domainName, appKey, appSecret); - logger.info("获取token:{}", token); - DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceiptid.getLong("id"), "bei_elecreceipt"); String saveRequestBody=getJSON(bei_elecreceipt,shkd_mapping);//请求json - System.out.println(saveRequestBody); -// String saveResponseBody = pushBill(token, url, saveRequestBody); + logger.info(""); + String res = doPost(shkd_url,headMap,saveRequestBody,null); + System.out.print(res); } } @@ -78,37 +95,39 @@ public class SharePushTaskPlugin extends AbstractTask { String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型 String shkd_mrz = map.getString("shkd_mrz");//默认值 boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填 - if (!shkd_sfbt){//如果不必填 + String shkd_fjcsm = map.getString("shkd_fjcsm");//父级参数名 + if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填 continue; } - switch (shkd_jsontartype){ - case "对象": - //查找该对象下层级下的 - List JSONObjectfilteredList = shkd_mapping.stream() - .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) - .collect(Collectors.toList()); - JSONObject json =getJSONObjectvalue(bei_elecreceipt,JSONObjectfilteredList); - otherIsJson.put(shkd_jsonzdm,json); - break; - case "数组": - //查找该对象下层级下的 - List JSONArrayfilteredList = shkd_mapping.stream() - .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) - .collect(Collectors.toList()); - JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); - otherIsJson.put(shkd_jsonzdm,jsonArray); - break; - default: - String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz); - otherIsJson.put(shkd_jsonzdm,value); - break; + if (EmptyUtil.isEmpty(shkd_fjcsm)){ + switch (shkd_jsontartype){ + case "对象": + //查找该对象下层级下的 + List JSONObjectfilteredList = shkd_mapping.stream() + .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) + .collect(Collectors.toList()); + JSONObject json =getJSONObjectvalue(bei_elecreceipt,JSONObjectfilteredList,shkd_mapping); + otherIsJson.put(shkd_jsonzdm,json); + break; + case "数组": + //查找该对象下层级下的 + List JSONArrayfilteredList = shkd_mapping.stream() + .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) + .collect(Collectors.toList()); + JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping); + otherIsJson.put(shkd_jsonzdm,jsonArray); + break; + default: + String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz); + otherIsJson.put(shkd_jsonzdm,value); + break; + } } - } return otherIsJson.toJSONString(); } - private JSONArray getJSONArrayvalue(DynamicObject bei_elecreceipt, List jsonArrayfilteredList) { + private JSONArray getJSONArrayvalue(DynamicObject bei_elecreceipt, List jsonArrayfilteredList,DynamicObjectCollection shkd_mapping) { JSONArray jsonArray = new JSONArray(); JSONObject json = new JSONObject(); for (DynamicObject map : jsonArrayfilteredList) { @@ -117,21 +136,25 @@ public class SharePushTaskPlugin extends AbstractTask { String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型 String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型 String shkd_mrz = map.getString("shkd_mrz");//默认值 + boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填 + if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填 + continue; + } switch (shkd_jsontartype){ case "对象": //查找该对象下层级下的 - List filteredList = jsonArrayfilteredList.stream() + List filteredList = shkd_mapping.stream() .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .collect(Collectors.toList()); - JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList); + JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping); json.put(shkd_jsonzdm,json1); break; case "数组": //查找该对象下层级下的 - List JSONArrayfilteredList = jsonArrayfilteredList.stream() + List JSONArrayfilteredList = shkd_mapping.stream() .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .collect(Collectors.toList()); - JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); + JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping); json.put(shkd_jsonzdm,jsonArray1); break; default: @@ -144,7 +167,7 @@ public class SharePushTaskPlugin extends AbstractTask { return jsonArray; } - private JSONObject getJSONObjectvalue(DynamicObject bei_elecreceipt, List JSONObjectfilteredList) { + private JSONObject getJSONObjectvalue(DynamicObject bei_elecreceipt, List JSONObjectfilteredList,DynamicObjectCollection shkd_mapping) { JSONObject json = new JSONObject(); for (DynamicObject map : JSONObjectfilteredList) { @@ -153,21 +176,25 @@ public class SharePushTaskPlugin extends AbstractTask { String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型 String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型 String shkd_mrz = map.getString("shkd_mrz");//默认值 + boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填 + if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填 + continue; + } switch (shkd_jsontartype){ case "对象": //查找该对象下层级下的 - List filteredList = JSONObjectfilteredList.stream() + List filteredList = shkd_mapping.stream() .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .collect(Collectors.toList()); - JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList); + JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping); json.put(shkd_jsonzdm,json1); break; case "数组": //查找该对象下层级下的 - List JSONArrayfilteredList = JSONObjectfilteredList.stream() + List JSONArrayfilteredList = shkd_mapping.stream() .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .collect(Collectors.toList()); - JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); + JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping); json.put(shkd_jsonzdm,jsonArray); break; default: @@ -199,12 +226,17 @@ public class SharePushTaskPlugin extends AbstractTask { } break; case "附件信息": - IFormView viewByDynamicObj = ApiService.createViewByDynamicObj(bei_elecreceipt); - List errMsgList = new ArrayList<>(); - DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + - "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + - "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); - value = ApiService.getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); + if ("name".equals(shkd_mrz)){ + Path path = Paths.get(bei_elecreceipt.getString("filepath")); + value = path.getFileName().toString(); + }else { + IFormView viewByDynamicObj = ApiService.createViewByDynamicObj(bei_elecreceipt); + List errMsgList = new ArrayList<>(); + DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + + "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + + "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); + value = ApiService.getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); + } break; case "默认值": value=shkd_mrz; @@ -224,12 +256,12 @@ public class SharePushTaskPlugin extends AbstractTask { String value = null; switch (shkd_jsontartype){ case "String": - if (shkd_djzdms.contains("_")) { - String[] parts = shkd_djzdms.split("_"); + if (shkd_djzdms.contains("|")) { + String[] parts = shkd_djzdms.split("\\|"); DynamicObjectCollection dynamicObjectCollection = bei_elecreceipt.getDynamicObjectCollection(parts[0]); value = dynamicObjectCollection.get(0).getString(parts[1]); } else if (shkd_djzdms.contains(".")) { - String[] parts = shkd_djzdms.split("_"); + String[] parts = shkd_djzdms.split("\\."); DynamicObject dynamicObject = bei_elecreceipt.getDynamicObject(parts[0]); value = dynamicObject.getString(parts[1]); }else { @@ -259,57 +291,44 @@ public class SharePushTaskPlugin extends AbstractTask { return value; } - private static String pushBill(String token, String linkUrl, String requestBody) { - // 响应数据 - String formattedContent; + /* + * 执行doPost请求 请求参数:Ctx Json + */ + public static String doPost(String url,Map headMap,String requestJson, String token) { + // 创建Httpclient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String resultString; try { - // 请求URL - URL url = new URL(linkUrl + "?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"); - } else { - // 读取错误流 - 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; - } + // 创建uri + URIBuilder builder = new URIBuilder(url); + URI uri = builder.build(); + // 创建HTTP Post请求 + HttpPost httpPost = new HttpPost(uri.toString()); + // 创建请求内容 + StringEntity entity = new StringEntity(requestJson, "UTF-8"); + entity.setContentType(ContentType.APPLICATION_JSON.toString()); + httpPost.setEntity(entity); +// httpPost.setHeader("Content-Type","application/json;charset=UTF-8"); + // 添加指定的Headers + httpPost.setHeader("X-ECC-Current-Tenant", headMap.get("X-ECC-Current-Tenant").toString()); + httpPost.setHeader("apikey", headMap.get("apikey").toString()); + httpPost.setHeader("Content-Type", headMap.get("Content-Type").toString()); + httpPost.setHeader("Authorization", headMap.get("Authorization").toString()); + // 执行http请求 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); } catch (Exception e) { - formattedContent = "请求失败," + e.getMessage(); + resultString = e.getMessage(); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } } - return formattedContent; + return resultString; } }