parent
2a73449f71
commit
1083f0b840
|
|
@ -0,0 +1,406 @@
|
|||
package shkd.sys.sys.plugin.form;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import kd.bos.bill.AbstractBillPlugIn;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.form.IFormView;
|
||||
import kd.bos.form.control.Toolbar;
|
||||
import kd.bos.form.control.events.ItemClickEvent;
|
||||
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.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
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 shkd.sys.sys.mservice.ApiService;
|
||||
import shkd.sys.sys.plugin.task.SharePushTaskPlugin;
|
||||
import shkd.sys.sys.utils.EmptyUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @FileName tsgxApiMappingBillPlugin
|
||||
* @Description
|
||||
* @Author csx
|
||||
* @date 2025-12-28
|
||||
**/
|
||||
public class tsgxApiMappingBillPlugin extends AbstractBillPlugIn {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(tsgxApiMappingBillPlugin.class);
|
||||
// 日期格式化器
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
|
||||
@Override
|
||||
public void registerListener(EventObject e) {
|
||||
Toolbar tbmain = this.getView().getControl("tbmain");
|
||||
Toolbar advcontoolbarap = this.getView().getControl("advcontoolbarap");
|
||||
tbmain.addItemClickListener(this);
|
||||
advcontoolbarap.addItemClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void itemClick(ItemClickEvent evt) {
|
||||
String itemKey = evt.getItemKey();
|
||||
if ("shkd_tsgx".equals(itemKey)){
|
||||
//获取司库电子回单推送共享系统的对应映射
|
||||
QFilter qFilter = new QFilter("shkd_name", QCP.equals,"司库电子回单推送共享系统");
|
||||
DynamicObject shkd_apimappingid = BusinessDataServiceHelper.loadSingle("shkd_apimapping", "id", qFilter.toArray());
|
||||
if (shkd_apimappingid==null){
|
||||
logger.info("未找到对应的推送接口映射");
|
||||
return;
|
||||
}
|
||||
DynamicObject shkd_apimapping = BusinessDataServiceHelper.loadSingle(shkd_apimappingid.getLong("id"), "shkd_apimapping");
|
||||
|
||||
//要推送单据的过滤(查询单子回单默认过滤条件)
|
||||
QFilter dzhdqFilter = new QFilter("ismatch", QCP.equals,true);
|
||||
|
||||
//自定义过滤条件
|
||||
String shkd_zdygltj = shkd_apimapping.getString("shkd_zdygltj");
|
||||
if (!EmptyUtil.isEmpty(shkd_zdygltj)){
|
||||
QFilter zdyqFilter= null;
|
||||
try {
|
||||
zdyqFilter = getqFilter(shkd_zdygltj);
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
dzhdqFilter=dzhdqFilter.and(zdyqFilter);
|
||||
}
|
||||
|
||||
DynamicObject[] bei_elecreceiptids = BusinessDataServiceHelper.load("bei_elecreceipt", "id", dzhdqFilter.toArray());
|
||||
logger.info("符合推送条件数据有:{}条", bei_elecreceiptids.length);
|
||||
|
||||
|
||||
String shkd_url = shkd_apimapping.getString("shkd_url");
|
||||
Map<String, Object> 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) {
|
||||
DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceiptid.getLong("id"), "bei_elecreceipt");
|
||||
String saveRequestBody=getJSON(bei_elecreceipt,shkd_mapping);//请求json
|
||||
logger.info("单据"+bei_elecreceipt.getString("billno")+"推送json:"+saveRequestBody);
|
||||
String res = doPost(shkd_url,headMap,saveRequestBody,null);
|
||||
logger.info("单据"+bei_elecreceipt.getString("billno")+"返回json:"+res);
|
||||
JSONObject otherIsJsonRS = JSONObject.parseObject(res);//获取返回结果
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
resultMap.put("shkd_requesturl",shkd_url);//请求地址
|
||||
resultMap.put("shkd_request",saveRequestBody);//请求体
|
||||
resultMap.put("shkd_response",res);//响应数据
|
||||
resultMap.put("shkd_thirdpartysys","浪潮");//第三方系统
|
||||
resultMap.put("shkd_calldescription","司库->浪潮");//第三方系统
|
||||
|
||||
String flag = otherIsJsonRS.getString("flag");
|
||||
if ("0".equals(flag)){//失败
|
||||
resultMap.put("shkd_issuccess",false);//是否成功
|
||||
}else {
|
||||
JSONArray datas = otherIsJsonRS.getJSONArray("data");
|
||||
JSONObject data = datas.getJSONObject(0);
|
||||
String dataflag = data.getString("flag");
|
||||
if ("0".equals(dataflag)){
|
||||
resultMap.put("shkd_issuccess",false);//是否成功
|
||||
}else {
|
||||
resultMap.put("shkd_issuccess",true);//是否成功
|
||||
bei_elecreceipt.set("shkd_sfcgtsgx",true);
|
||||
SaveServiceHelper.update(bei_elecreceipt);
|
||||
}
|
||||
}
|
||||
ApiService.saveThePushLog(resultMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private QFilter getqFilter(String shkd_zdygltj) throws ParseException {
|
||||
// 将字符串转换为 JSON 数组
|
||||
JSONArray jsonArray = JSONArray.parseArray(shkd_zdygltj);
|
||||
QFilter qFilter = null;
|
||||
// 遍历 JSON 数组
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||
String field = jsonObject.getString("field");
|
||||
String qcp = jsonObject.getString("qcp");
|
||||
String value = jsonObject.getString("value");
|
||||
String type = jsonObject.getString("type");
|
||||
Object o;
|
||||
if (type.equals("String")){
|
||||
o=value;
|
||||
} else if (type.equals("Date")) {
|
||||
o = dateFormat.parse(value); // 将字符串转换为 Date
|
||||
}else {
|
||||
o=value;
|
||||
}
|
||||
if (i==0){
|
||||
qFilter=new QFilter(field,qcp,o);
|
||||
}else {
|
||||
qFilter.and(new QFilter(field,qcp,o));
|
||||
}
|
||||
}
|
||||
return qFilter;
|
||||
}
|
||||
|
||||
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");//是否必填
|
||||
String shkd_fjcsm = map.getString("shkd_fjcsm");//父级参数名
|
||||
if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填
|
||||
continue;
|
||||
}
|
||||
if (EmptyUtil.isEmpty(shkd_fjcsm)){
|
||||
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,shkd_mapping);
|
||||
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,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<DynamicObject> jsonArrayfilteredList,DynamicObjectCollection shkd_mapping) {
|
||||
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");//默认值
|
||||
boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填
|
||||
if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填
|
||||
continue;
|
||||
}
|
||||
switch (shkd_jsontartype){
|
||||
case "对象":
|
||||
//查找该对象下层级下的
|
||||
List<DynamicObject> filteredList = shkd_mapping.stream()
|
||||
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||
.collect(Collectors.toList());
|
||||
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping);
|
||||
json.put(shkd_jsonzdm,json1);
|
||||
break;
|
||||
case "数组":
|
||||
//查找该对象下层级下的
|
||||
List<DynamicObject> JSONArrayfilteredList = shkd_mapping.stream()
|
||||
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||
.collect(Collectors.toList());
|
||||
JSONArray jsonArray1 =getJSONArrayvalue(bei_elecreceipt,JSONArrayfilteredList,shkd_mapping);
|
||||
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,DynamicObjectCollection shkd_mapping) {
|
||||
|
||||
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");//默认值
|
||||
boolean shkd_sfbt = map.getBoolean("shkd_sfbt");//是否必填
|
||||
if (!shkd_sfbt&&EmptyUtil.isEmpty(shkd_hqfs)){//如果不必填
|
||||
continue;
|
||||
}
|
||||
switch (shkd_jsontartype){
|
||||
case "对象":
|
||||
//查找该对象下层级下的
|
||||
List<DynamicObject> filteredList = shkd_mapping.stream()
|
||||
.filter(obj -> shkd_jsonzdm.equals(obj.getString("shkd_fjcsm")))
|
||||
.collect(Collectors.toList());
|
||||
JSONObject json1 =getJSONObjectvalue(bei_elecreceipt,filteredList,shkd_mapping);
|
||||
json.put(shkd_jsonzdm,json1);
|
||||
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,shkd_mapping);
|
||||
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 "附件信息":
|
||||
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<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);
|
||||
logger.info("单据编号:"+bei_elecreceipt.getString("billno")+"对应url:"+value);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* 执行doPost请求 请求参数:Ctx Json
|
||||
*/
|
||||
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 {
|
||||
// 创建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) {
|
||||
resultString = e.getMessage();
|
||||
} finally {
|
||||
try {
|
||||
if (response != null) {
|
||||
response.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return resultString;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue