From 18c645cc019ecb98331cf92fc139528736779efc Mon Sep 17 00:00:00 2001 From: Tao Date: Mon, 15 Dec 2025 09:53:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9?= =?UTF-8?q?=E6=B1=9F=E6=B6=9B=20=E6=97=B6=E9=97=B4=EF=BC=9A2025-12-15=2009?= =?UTF-8?q?=EF=BC=9A53=20=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9=EF=BC=9A?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=B5=AA=E6=BD=AE=E4=B8=BB=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 227 +++++++++++- .../sys/sys/plugin/form/PushLCBillPlugin.java | 43 +++ .../sys/sys/plugin/task/PushLcTaskPlugin.java | 337 ++++++++++++++++++ 3 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PushLCBillPlugin.java create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushLcTaskPlugin.java diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 11e5d71..2fa2beb 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -1,11 +1,12 @@ package shkd.sys.sys.mservice; -import com.alibaba.excel.util.DateUtils; 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 com.kingdee.bos.webapi.entity.IdentifyInfo; import com.kingdee.bos.webapi.sdk.K3CloudApi; +import kd.bd.assistant.plugin.helper.BankCateHelper; import kd.bos.bill.BillShowParameter; import kd.bos.cache.CacheFactory; 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.DynamicObjectCollection; import kd.bos.dataentity.entity.LocaleString; +import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection; import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.MainEntityType; +import kd.bos.entity.property.ComboProp; import kd.bos.exception.KDBizException; import kd.bos.form.IFormView; import kd.bos.logging.Log; @@ -42,6 +45,7 @@ import kd.tmc.fbp.common.util.EmptyUtil; import org.springframework.http.*; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; @@ -1331,6 +1335,64 @@ public class ApiService { } + public static void pushLCStructureData(DynamicObject sourceData) { + String entityName = sourceData.getDataEntityType().getName(); + + Map resultMap = new HashMap<>(); + + Map headMap = new HashMap<>(); + Map bodyMap = new HashMap<>(); + List 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 billTypeCode 单据类型编码 @@ -1396,4 +1458,167 @@ public class ApiService { dynamicObject.set("shkd_logdate", new Date()); 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 resultMap, Map headMap, Map bodyMap, + List 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 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); + } + } } \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PushLCBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PushLCBillPlugin.java new file mode 100644 index 0000000..e918ddb --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PushLCBillPlugin.java @@ -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); + } + } + } +} \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushLcTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushLcTaskPlugin.java new file mode 100644 index 0000000..da3d709 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushLcTaskPlugin.java @@ -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 map) throws KDException { + Object billMark = map.get("billMark"); + if (billMark != null) { + Map resultMap = new HashMap<>(); + + Map headMap = new HashMap<>(); + Map bodyMap = new HashMap<>(); + List 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 resultMap, Map headMap, Map bodyMap, + List 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 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); + } +} \ No newline at end of file