parent
15d773ced1
commit
7f8f66b703
|
|
@ -0,0 +1,315 @@
|
||||||
|
package shkd.sys.sys.plugin.task;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import kd.bos.context.RequestContext;
|
||||||
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.exception.KDException;
|
||||||
|
import kd.bos.form.IFormView;
|
||||||
|
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;
|
||||||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
|
import kd.bos.servicehelper.QueryServiceHelper;
|
||||||
|
import kd.drp.mdr.api.Api;
|
||||||
|
import kd.tmc.fbp.common.util.EmptyUtil;
|
||||||
|
import shkd.sys.sys.mservice.ApiService;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @FileName SharePushTaskPlugin
|
||||||
|
* @Description 推送共享定时任务
|
||||||
|
* @Author csx
|
||||||
|
* @date 2025-12-28
|
||||||
|
**/
|
||||||
|
public class SharePushTaskPlugin extends AbstractTask {
|
||||||
|
|
||||||
|
private static final Log logger = LogFactory.getLog(SharePushTaskPlugin.class);
|
||||||
|
@Override
|
||||||
|
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||||
|
//要推送单据的过滤(查询单子回单)
|
||||||
|
QFilter dzhdqFilter = new QFilter("ismatch", QCP.equals,true);
|
||||||
|
dzhdqFilter = dzhdqFilter.and(new QFilter("billno", QCP.equals, "EBB-250928-101566"));
|
||||||
|
DynamicObject[] bei_elecreceiptids = BusinessDataServiceHelper.load("bei_elecreceipt", "id", dzhdqFilter.toArray());
|
||||||
|
logger.info("符合推送条件数据有:{}条", bei_elecreceiptids.length);
|
||||||
|
//获取司库电子回单推送共享系统的对应映射
|
||||||
|
QFilter qFilter = new QFilter("name", QCP.equals,"司库电子回单推送共享系统");
|
||||||
|
DynamicObject shkd_apimappingid = BusinessDataServiceHelper.loadSingle("shkd_apimapping", "id", qFilter.toArray());
|
||||||
|
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");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getJSON(DynamicObject bei_elecreceipt,DynamicObjectCollection shkd_mapping){
|
||||||
|
JSONObject otherIsJson = new JSONObject();
|
||||||
|
for (DynamicObject map : shkd_mapping) {
|
||||||
|
String shkd_jsonzdm = map.getString("shkd_jsonzdm");//JSON字段名
|
||||||
|
String shkd_hqfs = map.getString("shkd_hqfs");//获取方式
|
||||||
|
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){//如果不必填
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (shkd_jsontartype){
|
||||||
|
case "对象":
|
||||||
|
//查找该对象下层级下的
|
||||||
|
List<DynamicObject> 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<DynamicObject> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return otherIsJson.toJSONString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONArray getJSONArrayvalue(DynamicObject bei_elecreceipt, List<DynamicObject> jsonArrayfilteredList) {
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
for (DynamicObject map : jsonArrayfilteredList) {
|
||||||
|
String shkd_jsonzdm = map.getString("shkd_jsonzdm");//JSON字段名
|
||||||
|
String shkd_hqfs = map.getString("shkd_hqfs");//获取方式
|
||||||
|
String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型
|
||||||
|
String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型
|
||||||
|
String shkd_mrz = map.getString("shkd_mrz");//默认值
|
||||||
|
switch (shkd_jsontartype){
|
||||||
|
case "对象":
|
||||||
|
//查找该对象下层级下的
|
||||||
|
List<DynamicObject> filteredList = jsonArrayfilteredList.stream()
|
||||||
|
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList);
|
||||||
|
json.put(shkd_jsonzdm,json1);
|
||||||
|
break;
|
||||||
|
case "数组":
|
||||||
|
//查找该对象下层级下的
|
||||||
|
List<DynamicObject> JSONArrayfilteredList = jsonArrayfilteredList.stream()
|
||||||
|
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList);
|
||||||
|
json.put(shkd_jsonzdm,jsonArray1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz);
|
||||||
|
json.put(shkd_jsonzdm,value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jsonArray.add(json);
|
||||||
|
return jsonArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject getJSONObjectvalue(DynamicObject bei_elecreceipt, List<DynamicObject> JSONObjectfilteredList) {
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
for (DynamicObject map : JSONObjectfilteredList) {
|
||||||
|
String shkd_jsonzdm = map.getString("shkd_jsonzdm");//JSON字段名
|
||||||
|
String shkd_hqfs = map.getString("shkd_hqfs");//获取方式
|
||||||
|
String shkd_jsontartype = map.getString("shkd_jsontartype");//JSON字段类型
|
||||||
|
String shkd_djzdms = map.getString("shkd_djzdms");//JSON字段类型
|
||||||
|
String shkd_mrz = map.getString("shkd_mrz");//默认值
|
||||||
|
switch (shkd_jsontartype){
|
||||||
|
case "对象":
|
||||||
|
//查找该对象下层级下的
|
||||||
|
List<DynamicObject> filteredList = JSONObjectfilteredList.stream()
|
||||||
|
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList);
|
||||||
|
json.put(shkd_jsonzdm,json1);
|
||||||
|
break;
|
||||||
|
case "数组":
|
||||||
|
//查找该对象下层级下的
|
||||||
|
List<DynamicObject> JSONArrayfilteredList = JSONObjectfilteredList.stream()
|
||||||
|
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
JSONArray jsonArray =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList);
|
||||||
|
json.put(shkd_jsonzdm,jsonArray);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
String value=getvalue(bei_elecreceipt,shkd_hqfs,shkd_jsontartype,shkd_djzdms,shkd_mrz);
|
||||||
|
json.put(shkd_jsonzdm,value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 根据映射获取单据信息
|
||||||
|
* */
|
||||||
|
private String getvalue(DynamicObject bei_elecreceipt, String shkd_hqfs,String shkd_jsontartype,String shkd_djzdms,String shkd_mrz) {
|
||||||
|
String value = null;
|
||||||
|
switch (shkd_hqfs){
|
||||||
|
case "直接从单据上get":
|
||||||
|
value=getbytype(bei_elecreceipt,shkd_jsontartype,shkd_djzdms,shkd_mrz);
|
||||||
|
break;
|
||||||
|
case "用单据上的值找其他单据上的属性":
|
||||||
|
// 根据逗号进行分割
|
||||||
|
String[] parts = shkd_djzdms.split(",");
|
||||||
|
if (parts.length == 3){
|
||||||
|
String[] split = parts[2].split(";");
|
||||||
|
QFilter qFilter = new QFilter(split[0], split[1], getbytype(bei_elecreceipt, shkd_jsontartype, split[2], shkd_mrz));
|
||||||
|
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(parts[0], parts[1], qFilter.toArray());
|
||||||
|
value = dynamicObject.getString(parts[1]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "附件信息":
|
||||||
|
IFormView viewByDynamicObj = ApiService.createViewByDynamicObj(bei_elecreceipt);
|
||||||
|
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;
|
||||||
|
case "默认值":
|
||||||
|
value=shkd_mrz;
|
||||||
|
break;
|
||||||
|
case "暂无":
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 根据字段类型或默认值获取字段
|
||||||
|
* */
|
||||||
|
private String getbytype(DynamicObject bei_elecreceipt, String shkd_jsontartype, String shkd_djzdms,String shkd_mrz) {
|
||||||
|
String value = null;
|
||||||
|
switch (shkd_jsontartype){
|
||||||
|
case "String":
|
||||||
|
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("_");
|
||||||
|
DynamicObject dynamicObject = bei_elecreceipt.getDynamicObject(parts[0]);
|
||||||
|
value = dynamicObject.getString(parts[1]);
|
||||||
|
}else {
|
||||||
|
value = bei_elecreceipt.getString(shkd_djzdms);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Date":
|
||||||
|
Date date = bei_elecreceipt.getDate(shkd_djzdms);
|
||||||
|
if (EmptyUtil.isEmpty(shkd_mrz)){
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//默认
|
||||||
|
value=simpleDateFormat.format(date);
|
||||||
|
}else {
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(shkd_mrz);
|
||||||
|
value=simpleDateFormat.format(date);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Integer":
|
||||||
|
value = bei_elecreceipt.getString(shkd_djzdms);
|
||||||
|
break;
|
||||||
|
case "BigDecimal":
|
||||||
|
value = bei_elecreceipt.getString(shkd_djzdms);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
value = bei_elecreceipt.getString(shkd_djzdms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String pushBill(String token, String linkUrl, String requestBody) {
|
||||||
|
// 响应数据
|
||||||
|
String formattedContent;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
formattedContent = "请求失败," + e.getMessage();
|
||||||
|
}
|
||||||
|
return formattedContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue