提交人:邹江涛

时间:2025-12-15 09:53
提交内容:推送浪潮主数据代码
This commit is contained in:
Tao 2025-12-15 09:53:45 +08:00
parent 0a95fbda4b
commit 18c645cc01
3 changed files with 606 additions and 1 deletions

View File

@ -1,11 +1,12 @@
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;
import com.bes.mq.org.apache.http.impl.cookie.DateUtils;
import com.kingdee.bos.webapi.entity.IdentifyInfo; import com.kingdee.bos.webapi.entity.IdentifyInfo;
import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.kingdee.bos.webapi.sdk.K3CloudApi;
import kd.bd.assistant.plugin.helper.BankCateHelper;
import kd.bos.bill.BillShowParameter; import kd.bos.bill.BillShowParameter;
import kd.bos.cache.CacheFactory; import kd.bos.cache.CacheFactory;
import kd.bos.cache.TempFileCache; import kd.bos.cache.TempFileCache;
@ -13,9 +14,11 @@ import kd.bos.context.RequestContext;
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.entity.LocaleString; import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils; import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.MainEntityType; import kd.bos.entity.MainEntityType;
import kd.bos.entity.property.ComboProp;
import kd.bos.exception.KDBizException; import kd.bos.exception.KDBizException;
import kd.bos.form.IFormView; import kd.bos.form.IFormView;
import kd.bos.logging.Log; import kd.bos.logging.Log;
@ -42,6 +45,7 @@ import kd.tmc.fbp.common.util.EmptyUtil;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import javax.crypto.Mac; import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
@ -1331,6 +1335,64 @@ public class ApiService {
} }
public static void pushLCStructureData(DynamicObject sourceData) {
String entityName = sourceData.getDataEntityType().getName();
Map<String, Object> resultMap = new HashMap<>();
Map<String, Object> headMap = new HashMap<>();
Map<String, Object> bodyMap = new HashMap<>();
List<String> fieldList = new ArrayList<>();
DynamicObject[] apiMappings = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," +
"shkd_name,shkd_sourcenumber,shkd_domainname,shkd_appkey,shkd_appsecret,shkd_token,shkd_url,shkd_bodytype," +
"shkd_sourcebill,shkd_targetsystem,shkd_submiturl,shkd_banktype,shkd_startdate,shkd_orgs,shkd_djlxbm," +
"shkd_heade.shkd_headcsm,shkd_heade.shkd_headzdlx,shkd_heade.shkd_headcsz,shkd_heade.shkd_headmssm," +
"shkd_mapping.shkd_jsonzdm,shkd_mapping.shkd_djzdms,shkd_mapping.shkd_mrz,shkd_mapping.shkd_ms",
new QFilter("billno", QCP.not_equals, "").toArray());
DynamicObject apiMapping = null;
for (DynamicObject object : apiMappings) {
String shkd_sourcebillNumber = object.getDynamicObject("shkd_sourcebill").getString("number");
if (shkd_sourcebillNumber.equals(entityName)) {
apiMapping = object;
break;
}
}
if (apiMapping == null) {
logger.info("未找到符合条件的推送配置sourceData = " + sourceData);
return;
}
// url
String shkd_url = apiMapping.getString("shkd_url");
// 单据类型编码
String djlxbm = apiMapping.getString("shkd_djlxbm");
String billTypeCode;
if (djlxbm.contains("_")) {
String[] split = djlxbm.split("_");
billTypeCode = split[0];
} else {
billTypeCode = djlxbm;
}
DynamicObjectCollection shkd_heade = apiMapping.getDynamicObjectCollection("shkd_heade");
for (DynamicObject dynamicObject : shkd_heade) {
headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz"));
}
// 映射字段单据体
DynamicObjectCollection shkd_mapping = apiMapping.getDynamicObjectCollection("shkd_mapping");
Date shkdPushlcdatetime = sourceData.getDate("shkd_pushlcdatetime");
Date modifytime = sourceData.getDate("modifytime");
if (shkdPushlcdatetime == null || modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, sourceData, shkd_url, billTypeCode, apiMapping);
}
}
/** /**
* @param url 调用接口 * @param url 调用接口
* @param billTypeCode 单据类型编码 * @param billTypeCode 单据类型编码
@ -1396,4 +1458,167 @@ public class ApiService {
dynamicObject.set("shkd_logdate", new Date()); dynamicObject.set("shkd_logdate", new Date());
SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
} }
/**
* 通用方法
*
* @param resultMap 记录日志
* @param headMap 请求头
* @param bodyMap 请求体
* @param fieldList JSON字段名集合
* @param shkd_mapping 映射分录对象
* @param billObject 单据对象
* @param shkd_url 保存url
* @param billTypeCode 单据类型编码
* @param apiMapping apiMapping
*/
public static void universalApproach(Map<String, Object> resultMap, Map<String, Object> headMap, Map<String, Object> bodyMap,
List<String> fieldList, DynamicObjectCollection shkd_mapping, DynamicObject billObject,
String shkd_url, String billTypeCode, DynamicObject apiMapping) {
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"), com.bes.mq.org.apache.http.impl.cookie.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 if ("isoverdue".equals(shkd_djzdms)) {//行名行号 疑似过期
String isoverdue = billObject.getString("isoverdue");//转化为2020-10-10格式
String ishistory = "1";
if ("Y".equals(isoverdue)) {
ishistory = "0";
}
if ("N".equals(isoverdue)) {
ishistory = "1";
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), ishistory);
} 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();
logger.info("浪潮推送结果:{}", result);
resultMap.put("shkd_calldescription", apiMapping.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});
} else {
resultMap.put("shkd_issuccess", false);
saveThePushLog(resultMap);
}
}else {
resultMap.put("shkd_issuccess", false);
saveThePushLog(resultMap);
}
}
} }

View File

@ -0,0 +1,43 @@
package shkd.sys.sys.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.sdk.plugin.Plugin;
import static shkd.sys.sys.mservice.ApiService.pushLCStructureData;
/**
* 主数据推送浪潮触发保存审核
*/
public class PushLCBillPlugin extends AbstractBillPlugIn implements Plugin {
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
String operateKey = afterDoOperationEventArgs.getOperateKey();
DynamicObject dataEntity = this.getModel().getDataEntity(true);
String entityName = dataEntity.getDataEntityType().getName();
if ("save".equals(operateKey)) {
switch (entityName) {
case "bd_acctpurpose"://账户用途
case "bd_bankcgsetting"://银行类别
case "bd_bebank"://行名行号
case "am_accountbank"://账户查询
case "bd_settlementtype"://结算方式
case "cdm_billtype"://票据类型
case "fpm_membersubject"://计划科目
case "bd_finorgtype"://金融机构类型
case "bd_finorginfo"://合作金融机构
case "cas_fundflowitem"://资金用途
case "cas_accountcash"://现金账户
case "ifm_inneracct"://内部账户
pushLCStructureData(dataEntity);
break;
}
} else if ("audit".equals(operateKey)) {
if ("cfm_loanbill_bond".equals(entityName)) {//债券发行
pushLCStructureData(dataEntity);
}
}
}
}

View File

@ -0,0 +1,337 @@
package shkd.sys.sys.plugin.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bes.mq.org.apache.http.impl.cookie.DateUtils;
import kd.bd.assistant.plugin.helper.BankCateHelper;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.property.ComboProp;
import kd.bos.exception.KDException;
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.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import org.springframework.http.ResponseEntity;
import java.util.*;
import static shkd.sys.sys.mservice.ApiService.pushLCMasterData;
import static shkd.sys.sys.mservice.ApiService.saveThePushLog;
/**
* 主数据对接 推送浪潮
*/
public class PushLcTaskPlugin extends AbstractTask implements Plugin {
private static final Log logger = LogFactory.getLog(PushLcTaskPlugin.class);
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
Object billMark = map.get("billMark");
if (billMark != null) {
Map<String, Object> resultMap = new HashMap<>();
Map<String, Object> headMap = new HashMap<>();
Map<String, Object> bodyMap = new HashMap<>();
List<String> fieldList = new ArrayList<>();
DynamicObject[] apiMapping = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," +
"shkd_name,shkd_sourcenumber,shkd_domainname,shkd_appkey,shkd_appsecret,shkd_token,shkd_url,shkd_bodytype," +
"shkd_sourcebill,shkd_targetsystem,shkd_submiturl,shkd_banktype,shkd_startdate,shkd_orgs,shkd_djlxbm," +
"shkd_heade.shkd_headcsm,shkd_heade.shkd_headzdlx,shkd_heade.shkd_headcsz,shkd_heade.shkd_headmssm," +
"shkd_mapping.shkd_jsonzdm,shkd_mapping.shkd_djzdms,shkd_mapping.shkd_mrz,shkd_mapping.shkd_ms",
new QFilter("shkd_djlxbm", QCP.equals, billMark).toArray());
if (apiMapping.length == 0) {
logger.info("未找到符合条件的推送配置shkd_djlxbm = " + billMark);
return;
}
// 推送单据类型
String sourceBill = apiMapping[0].getDynamicObject("shkd_sourcebill").getString("number");
// 推送单据编码
// String shkdSourcenumber = apiMapping[0].getString("shkd_sourcenumber");
// 查询的字段
String getfield = apiMapping[0].getString("shkd_getfield");
// url
String shkd_url = apiMapping[0].getString("shkd_url");
// 单据类型编码
String djlxbm = apiMapping[0].getString("shkd_djlxbm");
String billTypeCode;
if (djlxbm.contains("_")) {
String[] split = djlxbm.split("_");
billTypeCode = split[0];
} else {
billTypeCode = djlxbm;
}
DynamicObjectCollection shkd_heade = apiMapping[0].getDynamicObjectCollection("shkd_heade");
for (DynamicObject dynamicObject : shkd_heade) {
headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz"));
}
// 映射字段单据体
DynamicObjectCollection shkd_mapping = apiMapping[0].getDynamicObjectCollection("shkd_mapping");
DynamicObject[] sourceBills;
Date shkdPushlcdatetime;
Date modifytime;
switch (billMark.toString()) {
case "MDMBankType_1":// 银行类别 推送可用推送浪潮时间为空修改时间大于推送浪潮时间数据)
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
shkdPushlcdatetime = billObject.getDate("shkd_pushlcdatetime");
modifytime = billObject.getDate("modifytime");
if (shkdPushlcdatetime == null || modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
}
break;
case "MDMBanks_1":// 银行 推送启用和不疑似过期推送浪潮时间为空修改时间大于推送浪潮时间数据)
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("isoverdue", QCP.equals, "N")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMBFBANKACCOUNTS":// 银行账户 (账户状态正常推送浪潮时间为空修改时间大于推送浪潮时间数据)
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("acctstatus", QCP.equals, "normal")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMSettlementWay":// 结算方式
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMZQMC":// 债券信息
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("billstatus", QCP.equals, "C")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMPJLX":// 票据类型
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMZJJHXM":// 资金计划项目
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMBankType_2"://金融机构类别
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMBanks_2":// 合作金融机构
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMZJYT":// 资金用途
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMXJZH":// 现金账户
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMNBZH":// 内部账户
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("acctstatus", QCP.equals, "normal")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
case "MDMJRCPLX":// 金融产品类型
sourceBills = BusinessDataServiceHelper.load(sourceBill, getfield, new QFilter("enable", QCP.equals, "1")
.and("shkd_pushlcdatetime", QCP.is_null, true).toArray());
for (DynamicObject billObject : sourceBills) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
}
break;
}
}
}
/**
* 通用方法
*
* @param resultMap 记录日志
* @param headMap 请求头
* @param bodyMap 请求体
* @param fieldList JSON字段名集合
* @param shkd_mapping 映射分录对象
* @param billObject 单据对象
* @param shkd_url 保存url
* @param billTypeCode 单据类型编码
* @param apiMapping apiMapping
*/
private void universalApproach(Map<String, Object> resultMap, Map<String, Object> headMap, Map<String, Object> bodyMap,
List<String> fieldList, DynamicObjectCollection shkd_mapping, DynamicObject billObject,
String shkd_url, String billTypeCode, DynamicObject[] apiMapping) {
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", apiMapping[0].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});
} else {
resultMap.put("shkd_issuccess", false);
}
}else {
resultMap.put("shkd_issuccess", false);
}
saveThePushLog(resultMap);
}
}