提交人:csx

提交时间:2025年12月28日
提交内容:共享推送定时任务
This commit is contained in:
root 2025-12-28 14:35:54 +08:00
parent 7f8f66b703
commit c9ebddc486
1 changed files with 125 additions and 106 deletions

View File

@ -16,19 +16,33 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.QueryServiceHelper;
import kd.drp.mdr.api.Api; import kd.drp.mdr.api.Api;
import kd.tmc.fbp.common.util.EmptyUtil; 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 shkd.sys.sys.mservice.ApiService;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -48,24 +62,27 @@ public class SharePushTaskPlugin extends AbstractTask {
DynamicObject[] bei_elecreceiptids = BusinessDataServiceHelper.load("bei_elecreceipt", "id", dzhdqFilter.toArray()); DynamicObject[] bei_elecreceiptids = BusinessDataServiceHelper.load("bei_elecreceipt", "id", dzhdqFilter.toArray());
logger.info("符合推送条件数据有:{}条", bei_elecreceiptids.length); 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()); 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"); DynamicObject shkd_apimapping = BusinessDataServiceHelper.loadSingle(shkd_apimappingid.getLong("id"), "shkd_apimapping");
String url = shkd_apimapping.getString("shkd_url"); String shkd_url = shkd_apimapping.getString("shkd_url");
String domainName = shkd_apimapping.getString("shkd_domainname"); Map<String, Object> headMap = new HashMap<>();
String appKey = shkd_apimapping.getString("shkd_appkey"); DynamicObjectCollection shkdHeade = shkd_apimapping.getDynamicObjectCollection("shkd_heade");
String appSecret = shkd_apimapping.getString("shkd_appsecret"); for (DynamicObject dynamicObject : shkdHeade) {
headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz"));
}
DynamicObjectCollection shkd_mapping = shkd_apimapping.getDynamicObjectCollection("shkd_mapping"); DynamicObjectCollection shkd_mapping = shkd_apimapping.getDynamicObjectCollection("shkd_mapping");
for (DynamicObject bei_elecreceiptid : bei_elecreceiptids) { 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"); DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceiptid.getLong("id"), "bei_elecreceipt");
String saveRequestBody=getJSON(bei_elecreceipt,shkd_mapping);//请求json String saveRequestBody=getJSON(bei_elecreceipt,shkd_mapping);//请求json
System.out.println(saveRequestBody); logger.info("");
// String saveResponseBody = pushBill(token, url, saveRequestBody); 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_djzdms = map.getString("shkd_djzdms");//JSON字段类型
String shkd_mrz = map.getString("shkd_mrz");//默认值 String shkd_mrz = map.getString("shkd_mrz");//默认值
boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填 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; continue;
} }
switch (shkd_jsontartype){ if (EmptyUtil.isEmpty(shkd_fjcsm)){
case "对象": switch (shkd_jsontartype){
//查找该对象下层级下的 case "对象":
List<DynamicObject> JSONObjectfilteredList = shkd_mapping.stream() //查找该对象下层级下的
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) List<DynamicObject> JSONObjectfilteredList = shkd_mapping.stream()
.collect(Collectors.toList()); .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
JSONObject json =getJSONObjectvalue(bei_elecreceipt,JSONObjectfilteredList); .collect(Collectors.toList());
otherIsJson.put(shkd_jsonzdm,json); JSONObject json =getJSONObjectvalue(bei_elecreceipt,JSONObjectfilteredList,shkd_mapping);
break; otherIsJson.put(shkd_jsonzdm,json);
case "数组": break;
//查找该对象下层级下的 case "数组":
List<DynamicObject> JSONArrayfilteredList = shkd_mapping.stream() //查找该对象下层级下的
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) List<DynamicObject> JSONArrayfilteredList = shkd_mapping.stream()
.collect(Collectors.toList()); .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); .collect(Collectors.toList());
otherIsJson.put(shkd_jsonzdm,jsonArray); JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping);
break; otherIsJson.put(shkd_jsonzdm,jsonArray);
default: break;
String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz); default:
otherIsJson.put(shkd_jsonzdm,value); String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz);
break; otherIsJson.put(shkd_jsonzdm,value);
break;
}
} }
} }
return otherIsJson.toJSONString(); return otherIsJson.toJSONString();
} }
private JSONArray getJSONArrayvalue(DynamicObject bei_elecreceipt, List<DynamicObject> jsonArrayfilteredList) { private JSONArray getJSONArrayvalue(DynamicObject bei_elecreceipt, List<DynamicObject> jsonArrayfilteredList,DynamicObjectCollection shkd_mapping) {
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
for (DynamicObject map : jsonArrayfilteredList) { for (DynamicObject map : jsonArrayfilteredList) {
@ -117,21 +136,25 @@ public class SharePushTaskPlugin extends AbstractTask {
String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型 String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型
String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型 String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型
String shkd_mrz = map.getString("shkd_mrz");//默认值 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){ switch (shkd_jsontartype){
case "对象": case "对象":
//查找该对象下层级下的 //查找该对象下层级下的
List<DynamicObject> filteredList = jsonArrayfilteredList.stream() List<DynamicObject> filteredList = shkd_mapping.stream()
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
.collect(Collectors.toList()); .collect(Collectors.toList());
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList); JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping);
json.put(shkd_jsonzdm,json1); json.put(shkd_jsonzdm,json1);
break; break;
case "数组": case "数组":
//查找该对象下层级下的 //查找该对象下层级下的
List<DynamicObject> JSONArrayfilteredList = jsonArrayfilteredList.stream() List<DynamicObject> JSONArrayfilteredList = shkd_mapping.stream()
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
.collect(Collectors.toList()); .collect(Collectors.toList());
JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping);
json.put(shkd_jsonzdm,jsonArray1); json.put(shkd_jsonzdm,jsonArray1);
break; break;
default: default:
@ -144,7 +167,7 @@ public class SharePushTaskPlugin extends AbstractTask {
return jsonArray; return jsonArray;
} }
private JSONObject getJSONObjectvalue(DynamicObject bei_elecreceipt, List<DynamicObject> JSONObjectfilteredList) { private JSONObject getJSONObjectvalue(DynamicObject bei_elecreceipt, List<DynamicObject> JSONObjectfilteredList,DynamicObjectCollection shkd_mapping) {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
for (DynamicObject map : JSONObjectfilteredList) { for (DynamicObject map : JSONObjectfilteredList) {
@ -153,21 +176,25 @@ public class SharePushTaskPlugin extends AbstractTask {
String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型 String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型
String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型 String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型
String shkd_mrz = map.getString("shkd_mrz");//默认值 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){ switch (shkd_jsontartype){
case "对象": case "对象":
//查找该对象下层级下的 //查找该对象下层级下的
List<DynamicObject> filteredList = JSONObjectfilteredList.stream() List<DynamicObject> filteredList = shkd_mapping.stream()
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
.collect(Collectors.toList()); .collect(Collectors.toList());
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList); JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping);
json.put(shkd_jsonzdm,json1); json.put(shkd_jsonzdm,json1);
break; break;
case "数组": case "数组":
//查找该对象下层级下的 //查找该对象下层级下的
List<DynamicObject> JSONArrayfilteredList = JSONObjectfilteredList.stream() List<DynamicObject> JSONArrayfilteredList = shkd_mapping.stream()
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm"))) .filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
.collect(Collectors.toList()); .collect(Collectors.toList());
JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList); JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping);
json.put(shkd_jsonzdm,jsonArray); json.put(shkd_jsonzdm,jsonArray);
break; break;
default: default:
@ -199,12 +226,17 @@ public class SharePushTaskPlugin extends AbstractTask {
} }
break; break;
case "附件信息": case "附件信息":
IFormView viewByDynamicObj = ApiService.createViewByDynamicObj(bei_elecreceipt); if ("name".equals(shkd_mrz)){
List<String> errMsgList = new ArrayList<>(); Path path = Paths.get(bei_elecreceipt.getString("filepath"));
DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + value = path.getFileName().toString();
"fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + }else {
"bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); IFormView viewByDynamicObj = ApiService.createViewByDynamicObj(bei_elecreceipt);
value = ApiService.getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); List<String> 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; break;
case "默认值": case "默认值":
value=shkd_mrz; value=shkd_mrz;
@ -224,12 +256,12 @@ public class SharePushTaskPlugin extends AbstractTask {
String value = null; String value = null;
switch (shkd_jsontartype){ switch (shkd_jsontartype){
case "String": case "String":
if (shkd_djzdms.contains("_")) { if (shkd_djzdms.contains("|")) {
String[] parts = shkd_djzdms.split("_"); String[] parts = shkd_djzdms.split("\\|");
DynamicObjectCollection dynamicObjectCollection = bei_elecreceipt.getDynamicObjectCollection(parts[0]); DynamicObjectCollection dynamicObjectCollection = bei_elecreceipt.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).getString(parts[1]); value = dynamicObjectCollection.get(0).getString(parts[1]);
} else if (shkd_djzdms.contains(".")) { } else if (shkd_djzdms.contains(".")) {
String[] parts = shkd_djzdms.split("_"); String[] parts = shkd_djzdms.split("\\.");
DynamicObject dynamicObject = bei_elecreceipt.getDynamicObject(parts[0]); DynamicObject dynamicObject = bei_elecreceipt.getDynamicObject(parts[0]);
value = dynamicObject.getString(parts[1]); value = dynamicObject.getString(parts[1]);
}else { }else {
@ -259,57 +291,44 @@ public class SharePushTaskPlugin extends AbstractTask {
return value; return value;
} }
private static String pushBill(String token, String linkUrl, String requestBody) { /*
// 响应数据 * 执行doPost请求 请求参数Ctx Json
String formattedContent; */
public static String doPost(String url,Map<String, Object> headMap,String requestJson, String token) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString;
try { try {
// 请求URL // 创建uri
URL url = new URL(linkUrl + "?access_token=" + token); URIBuilder builder = new URIBuilder(url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); URI uri = builder.build();
// 创建HTTP Post请求
// 设置请求方法为POST HttpPost httpPost = new HttpPost(uri.toString());
connection.setRequestMethod("POST"); // 创建请求内容
StringEntity entity = new StringEntity(requestJson, "UTF-8");
// 设置请求头 entity.setContentType(ContentType.APPLICATION_JSON.toString());
connection.setRequestProperty("Content-Type", "application/json"); httpPost.setEntity(entity);
// httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
// 允许输出 // 添加指定的Headers
connection.setDoOutput(true); 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());
try (OutputStream os = connection.getOutputStream()) { httpPost.setHeader("Authorization", headMap.get("Authorization").toString());
byte[] input = requestBody.getBytes(StandardCharsets.UTF_8); // 执行http请求
os.write(input, 0, input.length); response = httpClient.execute(httpPost);
} resultString = EntityUtils.toString(response.getEntity(), "utf-8");
// 获取响应码
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;
}
} catch (Exception e) { } 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;
} }
} }