提交人:邹江涛

提交时间:2025年12月18日
提交内容:主数据定时推送浪潮系统(增加推送条件和推送时间以及推送日志定制化选择)
This commit is contained in:
root 2025-12-18 10:51:31 +08:00
parent ad832da4f0
commit e7235232d3
2 changed files with 50 additions and 215 deletions

View File

@ -1345,10 +1345,10 @@ public class ApiService {
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",
"shkd_name,shkd_sourcenumber,shkd_domainname,shkd_appkey,shkd_appsecret,shkd_token,shkd_getfield,shkd_url,shkd_bodytype," +
"shkd_sourcebill,shkd_targetsystem,shkd_submiturl,shkd_banktype,shkd_startdate,shkd_orgs,shkd_djlxbm,shkd_tsfs,shkd_cxfw," +
"shkd_jrrzxx,shkd_heade,shkd_heade.shkd_headcsm,shkd_heade.shkd_headzdlx,shkd_heade.shkd_headcsz,shkd_heade.shkd_headmssm," +
"shkd_mapping,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;
@ -1377,6 +1377,10 @@ public class ApiService {
billTypeCode = djlxbm;
}
// 记录日志选项
String shkdJrrzxx = apiMapping.getString("shkd_jrrzxx");
resultMap.put("logOption", shkdJrrzxx);
DynamicObjectCollection shkd_heade = apiMapping.getDynamicObjectCollection("shkd_heade");
for (DynamicObject dynamicObject : shkd_heade) {
headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz"));
@ -1386,7 +1390,7 @@ public class ApiService {
DynamicObjectCollection shkd_mapping = apiMapping.getDynamicObjectCollection("shkd_mapping");
Date shkdPushlcdatetime = sourceData.getDate("shkd_pushlcdatetime");
Date modifytime = sourceData.getDate("modifytime");
Date modifytime = sourceData.getDate("modifytime");
if (shkdPushlcdatetime == null || modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, sourceData, shkd_url, billTypeCode, apiMapping);
}
@ -1473,8 +1477,8 @@ public class ApiService {
* @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) {
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");
@ -1569,22 +1573,22 @@ public class ApiService {
}
} 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"));
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 if ("isoverdue".equals(shkd_djzdms)) {//行名行号 疑似过期
String isoverdue = billObject.getString("isoverdue");//转化为2020-10-10格式
String ishistory = "1";
if ("Y".equals(isoverdue)) {
ishistory = "0";
} else if ("BILLSTATUS".equals(shkd_djzdms)) {
String value = billObject.getString("billstatus");
String key = "";
switch (value) {
case "A"://暂存
key = "0";
break;
case "C"://审核
key = "1";
break;
}
if ("N".equals(isoverdue)) {
ishistory = "1";
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), ishistory);
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} else {
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), billObject.getString(shkd_djzdms));
}
@ -1608,17 +1612,26 @@ public class ApiService {
String statusResult = data.getString("status");
if ("success".equals(statusResult)) {
Date date = new Date();
resultMap.put("shkd_issuccess", true);
billObject.set("shkd_ispushlc", true);
billObject.set("shkd_pushlcdatetime", new Date());
billObject.set("shkd_pushlcdatetime", date);
billObject.set("modifytime", date);
SaveServiceHelper.save(new DynamicObject[]{billObject});
if ("1".equals(resultMap.get("logOption").toString()) || "3".equals(resultMap.get("logOption").toString())) {
saveThePushLog(resultMap);
}
} else {
resultMap.put("shkd_issuccess", false);
if ("1".equals(resultMap.get("logOption").toString()) || "2".equals(resultMap.get("logOption").toString())) {
saveThePushLog(resultMap);
}
}
} else {
resultMap.put("shkd_issuccess", false);
if ("1".equals(resultMap.get("logOption").toString()) || "2".equals(resultMap.get("logOption").toString())) {
saveThePushLog(resultMap);
}
}else {
resultMap.put("shkd_issuccess", false);
saveThePushLog(resultMap);
}
}
}

View File

@ -1,16 +1,8 @@
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;
@ -18,16 +10,13 @@ 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.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import static shkd.sys.sys.mservice.ApiService.pushLCMasterData;
import static shkd.sys.sys.mservice.ApiService.saveThePushLog;
import static shkd.sys.sys.mservice.ApiService.*;
/**
* 主数据对接 推送浪潮
@ -48,7 +37,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
DynamicObject[] apiMapping = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," +
"shkd_name,shkd_sourcenumber,shkd_domainname,shkd_appkey,shkd_appsecret,shkd_token,shkd_getfield,shkd_url,shkd_bodytype," +
"shkd_sourcebill,shkd_targetsystem,shkd_submiturl,shkd_banktype,shkd_startdate,shkd_orgs,shkd_djlxbm,shkd_tsfs,shkd_cxfw," +
"shkd_heade,shkd_heade.shkd_headcsm,shkd_heade.shkd_headzdlx,shkd_heade.shkd_headcsz,shkd_heade.shkd_headmssm," +
"shkd_jrrzxx,shkd_heade,shkd_heade.shkd_headcsm,shkd_heade.shkd_headzdlx,shkd_heade.shkd_headcsz,shkd_heade.shkd_headmssm," +
"shkd_mapping,shkd_mapping.shkd_jsonzdm,shkd_mapping.shkd_djzdms,shkd_mapping.shkd_mrz,shkd_mapping.shkd_ms",
new QFilter("shkd_djlxbm", QCP.equals, billMark).toArray());
@ -62,6 +51,9 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
int shkdCxfw = apiMapping[0].getInt("shkd_cxfw");
// 获取具体时间
String calculateTheDate = calculateTheDate(shkdCxfw);
// 记录日志选项
String shkdJrrzxx = apiMapping[0].getString("shkd_jrrzxx");
resultMap.put("logOption", shkdJrrzxx);
// 推送单据类型
String sourceBill = apiMapping[0].getDynamicObject("shkd_sourcebill").getString("number");
// 推送单据编码
@ -107,7 +99,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
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);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
@ -118,7 +110,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
Object shkdPushlcdatetimeObj = billObject.get("shkd_pushlcdatetime");
String enable = billObject.getString("enable");
if (shkdPushlcdatetimeObj == null && "1".equals(enable)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
if (shkdPushlcdatetimeObj != null) {
@ -127,7 +119,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
//获取修改时间
modifytime = billObject.getDate("modifytime");
if (modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
}
@ -139,7 +131,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
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);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
@ -149,7 +141,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
Object shkdPushlcdatetimeObj = billObject.get("shkd_pushlcdatetime");
String acctstatus = billObject.getString("acctstatus");
if (shkdPushlcdatetimeObj == null && "normal".equals(acctstatus)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
if (shkdPushlcdatetimeObj != null) {
@ -158,7 +150,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
//获取修改时间
modifytime = billObject.getDate("modifytime");
if (modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
}
@ -169,7 +161,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
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);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
@ -179,7 +171,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
Object shkdPushlcdatetimeObj = billObject.get("shkd_pushlcdatetime");
String acctstatus = billObject.getString("billstatus");
if (shkdPushlcdatetimeObj == null && "C".equals(acctstatus)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
if (shkdPushlcdatetimeObj != null) {
@ -188,7 +180,7 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
//获取修改时间
modifytime = billObject.getDate("modifytime");
if (modifytime.after(shkdPushlcdatetime)) {
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping);
universalApproach(resultMap, headMap, bodyMap, fieldList, shkd_mapping, billObject, shkd_url, billTypeCode, apiMapping[0]);
}
}
}
@ -199,169 +191,6 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
}
}
/**
* 通用方法
*
* @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 if ("BILLSTATUS".equals(shkd_djzdms)) {
String value = billObject.getString("billstatus");
String key = "";
switch (value) {
case "A"://暂存
key = "0";
break;
case "C"://审核
key = "1";
break;
}
bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key);
} 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)) {
Date date = new Date();
resultMap.put("shkd_issuccess", true);
billObject.set("shkd_ispushlc", true);
billObject.set("shkd_pushlcdatetime", date);
billObject.set("modifytime", date);
SaveServiceHelper.save(new DynamicObject[]{billObject});
} else {
resultMap.put("shkd_issuccess", false);
saveThePushLog(resultMap);
}
} else {
resultMap.put("shkd_issuccess", false);
saveThePushLog(resultMap);
}
}
private String calculateTheDate(int days) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
@ -370,12 +199,5 @@ public class PushLcTaskPlugin extends AbstractTask implements Plugin {
// 格式化日期为 "yyyy-MM-dd"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return twoDaysAgo.format(formatter);
/*Date date;
try {
date = com.kingdee.bos.qing.util.DateUtils.stringToDate(formattedDate, "yyyy-MM-dd");
} catch (ParseException e) {
throw new RuntimeException(e);
}
return date;*/
}
}