提交内容:API映射代码(主数据推送浪潮)

时间:2025-11-07 16:40
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-11-07 16:40:49 +08:00
parent d263a8f565
commit a705646dff
2 changed files with 262 additions and 12 deletions

View File

@ -1,5 +1,6 @@
package shkd.sys.sys.mservice; package shkd.sys.sys.mservice;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -28,6 +29,7 @@ import kd.bos.print.core.service.PrtAttach;
import kd.bos.print.matchtpl.MatcherTpl; import kd.bos.print.matchtpl.MatcherTpl;
import kd.bos.print.matchtpl.ViewType; import kd.bos.print.matchtpl.ViewType;
import kd.bos.servicehelper.*; import kd.bos.servicehelper.*;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.servicehelper.print.NotePrintService; import kd.bos.servicehelper.print.NotePrintService;
import kd.bos.util.ExceptionUtils; import kd.bos.util.ExceptionUtils;
import kd.tmc.bei.business.ocr.impl.ScanServiceImpl; import kd.tmc.bei.business.ocr.impl.ScanServiceImpl;
@ -37,10 +39,8 @@ import kd.tmc.bei.common.helper.ReceiptPrintHelper;
import kd.tmc.bei.common.resource.BeiBizResource; import kd.tmc.bei.common.resource.BeiBizResource;
import kd.tmc.fbp.common.ofd.OfdConvertUtil; import kd.tmc.fbp.common.ofd.OfdConvertUtil;
import kd.tmc.fbp.common.util.EmptyUtil; import kd.tmc.fbp.common.util.EmptyUtil;
import org.springframework.http.HttpEntity; import org.springframework.http.*;
import org.springframework.http.HttpHeaders; import org.springframework.web.client.HttpClientErrorException;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.crypto.Mac; import javax.crypto.Mac;
@ -1329,4 +1329,71 @@ public class ApiService {
" → k3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage(); " → k3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage();
} }
} }
/**
* @param url 调用接口
* @param billTypeCode 单据类型编码
* @param headMap 请求头
* @param bodyMap 请求体
* @param fields 请求体参数名
* @return
*/
public static ResponseEntity<String> pushLCMasterData(String url, String billTypeCode, Map<String, Object> headMap, Map<String, Object> bodyMap, List<String> fields, Map<String, Object> resultMap) {
// 创建请求头
HttpHeaders headers = new HttpHeaders();
// 添加指定的Headers
headers.add("X-ECC-Current-Tenant", headMap.get("X-ECC-Current-Tenant").toString());
headers.add("apikey", headMap.get("apikey").toString());
headers.add("Content-Type", headMap.get("Content-Type").toString());
headers.add("Authorization", headMap.get("Authorization").toString());
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("businessSystemCode", "JDSK");
requestBody.put("tableCode", billTypeCode);
// 创建data数组
List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> dataItem = new HashMap<>();
for (String field : fields) {
dataItem.put(field, bodyMap.get(field));
}
data.add(dataItem);
requestBody.put("data", data);
resultMap.put("shkd_request", requestBody);
// 创建HttpEntity
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(requestBody, headers);
// 使用RestTemplate发送请求
RestTemplate restTemplate = new RestTemplate();
return restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
}
public static void saveThePushLog(Map<String, Object> resultMap) {
String requestUrl = resultMap.get("shkd_requesturl").toString();//请求地址
String request = resultMap.get("shkd_request").toString();//请求体
String response = resultMap.get("shkd_response").toString();//响应数据
String thirdparty = resultMap.get("shkd_thirdpartysys").toString();//第三方系统
String issuccess = resultMap.get("shkd_issuccess").toString();//是否成功
String shkd_calldescription = resultMap.get("shkd_calldescription").toString();//调用说明
DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("shkd_thirdpartylog");
// 生成随机UUID
UUID uuid = UUID.randomUUID();
dynamicObject.set("billno", "Log_" + uuid);
dynamicObject.set("billstatus", "C");
dynamicObject.set("shkd_calldescription", shkd_calldescription);
dynamicObject.set("shkd_requesturl", requestUrl);
dynamicObject.set("shkd_request", request);
dynamicObject.set("shkd_response", response);
dynamicObject.set("shkd_thirdpartysys", thirdparty);
dynamicObject.set("shkd_issuccess", issuccess);
dynamicObject.set("shkd_logdate", new Date());
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} }

View File

@ -3,11 +3,14 @@ package shkd.sys.sys.plugin.form;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bes.mq.org.apache.http.impl.cookie.DateUtils;
import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.kingdee.bos.webapi.sdk.K3CloudApi;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IFormView; import kd.bos.entity.property.ComboProp;
import kd.bos.form.control.CodeEdit; import kd.bos.form.control.CodeEdit;
import kd.bos.form.control.Toolbar; import kd.bos.form.control.Toolbar;
import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.control.events.ItemClickEvent;
@ -17,20 +20,20 @@ import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP; import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import kd.tmc.fca.common.helper.HandLinkBillHelper; import kd.sdk.scmc.im.acct.DateHelper;
import org.springframework.http.ResponseEntity;
import shkd.sys.sys.mservice.ApiService; import shkd.sys.sys.mservice.ApiService;
import kd.bd.assistant.plugin.helper.BankCateHelper;
import java.nio.file.Path; import java.text.SimpleDateFormat;
import java.nio.file.Paths;
import java.util.*; import java.util.*;
import static shkd.sys.sys.mservice.ApiService.*; import static shkd.sys.sys.mservice.ApiService.*;
/** /**
* 动态表单插件 * API映射表单插件
*/ */
public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
private static final Log logger = LogFactory.getLog(ApiMappingBillPlugin.class); private static final Log logger = LogFactory.getLog(ApiMappingBillPlugin.class);
@ -470,7 +473,187 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
} }
SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
} }
}
if ("shkd_pushlc".equals(itemKey)) {
Map<String, Object> resultMap = new HashMap<>();
Map<String, Object> headMap = new HashMap<>();
Map<String, Object> bodyMap = new HashMap<>();
List<String> fieldList = new ArrayList<>();
// 推送单据类型
String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number");
// 推送单据编码
String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber");
// 查询的字段
String getfield = dataEntity.getString("shkd_getfield");
// url
String shkd_url = dataEntity.getString("shkd_url");
// 单据类型编码
String djlxbm = dataEntity.getString("shkd_djlxbm");
String billTypeCode;
if (djlxbm.contains("_")) {
String[] split = djlxbm.split("_");
billTypeCode = split[0];
} else {
billTypeCode = djlxbm;
}
DynamicObjectCollection shkd_heade = dataEntity.getDynamicObjectCollection("shkd_heade");
for (DynamicObject dynamicObject : shkd_heade) {
headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz"));
}
DynamicObject billObject = null;
if (getfield.contains("number")) {
billObject = BusinessDataServiceHelper.loadSingle(billMark, getfield, new QFilter("number", QCP.equals, shkdSourcenumber).toArray());
}
if (getfield.contains("billno")) {
billObject = BusinessDataServiceHelper.loadSingle(billMark, getfield, new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());
}
if (billObject == null) {
this.getView().showTipNotification("未找到符合条件的数据");
return;
}
DynamicObjectCollection shkd_mapping = dataEntity.getDynamicObjectCollection("shkd_mapping");
for (DynamicObject dynamicObject : shkd_mapping) {
fieldList.add(dynamicObject.getString("shkd_jsonzdm"));
String shkd_djzdms = dynamicObject.getString("shkd_djzdms");
if ("".equals(shkd_djzdms)) {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), dynamicObject.getString("shkd_mrz"));
} else if (shkd_djzdms.contains(".")) {
//拆分.前面的字符串和后面的字符串
String[] split = shkd_djzdms.split("\\.");
DynamicObject split0 = billObject.getDynamicObject(split[0]);
if (split0 == null) {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "");
} else {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), split0.get(split[1]).toString());
}
} else if ("YHLB".equals(shkd_djzdms)) {//银行 银行类别
String name = billObject.getString("name");
String number = billObject.getString("number");
DynamicObject bankCate = BankCateHelper.findBankCate(name, number);
if (bankCate == null) {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "");
} else {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), bankCate.get("name"));
}
} else if ("JSFSLB".equals(shkd_djzdms)) {
// 获取XXX字段值这里获取到的是value而不是key
String value = billObject.getString("settlementtype");
MainEntityType dataEntityType = (MainEntityType) billObject.getDataEntityType();
// 获取所有实体字段集合
DataEntityPropertyCollection properties = dataEntityType.getProperties();
// 获取所有字段数据模型
ComboProp comboUnitProp = (ComboProp) properties.get("settlementtype");
// 根据下拉列表的value获取到key
String key = comboUnitProp.getItemByName(value);
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} else if ("ZHXZ".equals(shkd_djzdms)) {//账户查询 账户性质
String value = billObject.getString("acctstyle");
String key = "";
switch (value) {
case "basic"://基本存款户
key = "001";
break;
case "normal"://一般存款户
key = "002";
break;
case "temp"://临时存款户
key = "003";
break;
case "spcl"://专用存款户
key = "004";
break;
case "fgn_curr"://其他存款户
key = "005";
break;
case "D06"://保证金账户
key = "006";
break;
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} else if ("ZHZT".equals(shkd_djzdms)) {//账户查询 账户状态
String value = billObject.getString("acctstatus");
String key = "";
switch (value) {
case "normal"://正常
key = "2";
break;
case "closed"://已销户
key = "4";
break;
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} else if ("ZLKTZT".equals(shkd_djzdms)) {//账户查询 开通直连状态
String value = billObject.getString("acctstatus");
String key = "";
switch (value) {
case "normal"://正常
key = "2";
break;
case "closed"://已销户
key = "4";
break;
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} else if ("JNJW".equals(shkd_djzdms)) {//账户查询 境内境外
DynamicObject bank = billObject.getDynamicObject("bank");
DynamicObject country = bank.getDynamicObject("country");
String name = country.getString("name");
if ("中国".equals(name)) {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "1");
} else {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "2");
}
} else if ("OPENDATE".equals(shkd_djzdms)) {//现金账户 开户日期
Date date = billObject.getDate("opendate");//转化为2020-10-10格式
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), DateUtils.formatDate(date, "yyyy-MM-dd"));
} else if ("OPEN_DATE".equals(shkd_djzdms)) {//现金账户 开户日期
Date date = billObject.getDate("open_date");//转化为2020-10-10格式
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), DateUtils.formatDate(date, "yyyy-MM-dd"));
} else {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), billObject.getString(shkd_djzdms));
}
}
ResponseEntity<String> stringResponseEntity = pushLCMasterData(shkd_url, billTypeCode, headMap, bodyMap, fieldList, resultMap);
String result = stringResponseEntity.getBody();
resultMap.put("shkd_calldescription", dataEntity.getString("shkd_name"));
resultMap.put("shkd_requesturl", shkd_url);
resultMap.put("shkd_response", result);
resultMap.put("shkd_thirdpartysys", "浪潮");
JSONObject jsonObject = JSON.parseObject(result);
String status = jsonObject.getString("status");
if ("success".equals(status)) {
JSONArray dataresult = jsonObject.getJSONArray("dataresult");
JSONObject data = dataresult.getJSONObject(0);
String statusResult = data.getString("status");
if ("success".equals(statusResult)) {
resultMap.put("shkd_issuccess", true);
billObject.set("shkd_ispushlc", true);
billObject.set("shkd_pushlcdatetime", new Date());
SaveServiceHelper.save(new DynamicObject[]{billObject});
this.getView().showSuccessNotification("推送成功!" + result);
} else {
resultMap.put("shkd_issuccess", false);
this.getView().showTipNotification("推送失败!" + result);
}
}else {
resultMap.put("shkd_issuccess", false);
this.getView().showTipNotification("推送失败!" + result);
}
saveThePushLog(resultMap);
} }
} }