提交内容:星空推送付款单扩展API逻辑

时间:2025-07-19 10:48
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-07-19 10:48:28 +08:00
parent 30fd67a8d3
commit 6a2d10f84e
1 changed files with 361 additions and 0 deletions

View File

@ -0,0 +1,361 @@
package shkd.sys.sys.plugin.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.openapi.api.plugin.ApiSavePlugin;
import kd.bos.openapi.api.plugin.ApiSerializerPlugin;
import kd.bos.openapi.api.plugin.SerializerResult;
import kd.bos.openapi.common.constant.MediaType;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description
* @Author Tao
* @Date 2024/11/7
*/
public class XkPayBillApiSavePlugin implements ApiSavePlugin {
private static final Log logger = LogFactory.getLog(XkPayBillApiSavePlugin.class);
private static final long serialVersionUID = -2357039554260121859L;
@Override
public List<Map<String, Object>> preHandleRequestData(List<Map<String, Object>> reqData) {
logger.info("接口调用接口参数:{}\n数据长度{}", reqData, reqData.size());
String fieldName1;//字段名称/付人ID
String bankNumber;///付款银行账号.number
String fieldName2;//字段名称/付款银行.number
for (Map<String, Object> map : reqData) {
Object billtypeObject = map.get("billtype");// 单据类型
Object payeetype = map.get("payeetype");// 如果是收款人类型 则为付款处理保存接口
String shkd_businessname = map.get("shkd_businessname").toString();// 推送系统
if (billtypeObject != null) {
Map<String, Object> billtype = (Map<String, Object>) map.get("billtype");
String billtype_number = billtype.get("number").toString();
if ("cas_paybill_other_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {//星空推送的其他单据类型付款单
logger.info("单据类型 → 其他付款,推送系统 → XK");
// 收款人ID
fieldName1 = "payee";
// 付款银行编码
fieldName2 = "payerbank";
if ("BD_Supplier".equals(payeetype)) {
payeetype = "bd_supplier";
map.put("payeetype", "bd_supplier");
map.put("payeeformid", "bd_supplier");
} else if ("BD_Customer".equals(payeetype)) {
payeetype = "bd_customer";
map.put("payeetype", "bd_customer");
map.put("payeeformid", "bd_customer");
} else if ("BD_Empinfo".equals(payeetype)) {
payeetype = "bos_user";
map.put("payeetype", "bos_user");
map.put("payeeformid", "bos_user");
} else if ("ORG_Organizations".equals(payeetype)) {
payeetype = "bos_org";
map.put("payeetype", "bos_org");
map.put("payeeformid", "bos_org");
} else if ("FIN_OTHERS".equals(payeetype)) {
payeetype = "bd_supplier";
map.put("payeetype", "bd_supplier");
map.put("payeeformid", "bd_supplier");
}
// 赋值付款金额折本位币
map.put("localamt", map.get("actpayamt"));
// 赋值分录应付折本币
List<Map<String, Object>> entryList = (List<Map<String, Object>>) map.get("entry");
if (entryList != null && !entryList.isEmpty()) {
Map<String, Object> stringObjectMap = entryList.get(0);
// 获取 e_payableamt 的值
stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt"));
map.put("entry", entryList);
}
Map<String, Object> payeebank = (Map<String, Object>) map.get("payeebank");
String payeebank_number = payeebank.get("number").toString();
DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,provincetxt,citytxt", new QFilter("number", QCP.equals, payeebank_number).toArray());
if (bd_bebank.length > 0) {
map.put("recprovince", bd_bebank[0].getString("provincetxt"));
map.put("reccity", bd_bebank[0].getString("citytxt"));
}
Map<String, Object> settletype = (Map<String, Object>) map.get("settletype");
String settletype_number = settletype.get("number").toString();
Map<String, Object> payeracctbank = (Map<String, Object>) map.get("payeracctbank");
bankNumber = payeracctbank.get("number").toString(); // 付款银行账号
// 账户查询通过银行账号查对应的付款账户
DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number,issetbankinterface", new QFilter("number", QCP.equals, bankNumber).toArray());
logger.info("账户查询,通过银行账号查对应的付款账户长度:{}", amAccountbanks.length);
Map<String, Object> payerbank = new HashMap<>();
if (amAccountbanks.length > 0) {
payerbank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number"));
logger.info("账户查询,通过银行账号查对应的付款账户信息:{}", amAccountbanks[0]);
if ("JSFS17、JSFS18".contains(settletype_number) && amAccountbanks[0].getBoolean("issetbankinterface")) {
map.put("paymentchannel", "bei");
} else {
map.put("paymentchannel", "counter");
}
}
logger.info("付款银行:{}", payerbank);
map.put(fieldName2, payerbank);
// 如果为供应商或者客户
if ("bd_supplier".equals(payeetype)) {
logger.info("收款人类型 → 供应商");
Map<String, Object> societycreditcode = new HashMap<>();
societycreditcode.put("societycreditcode", map.get("payeenumber"));
map.put("shkd_supplier", societycreditcode);
logger.info("收款人ID{}", map.get("payeenumber"));
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id," +
"number,name,societycreditcode,shkd_xknumber,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank",
new QFilter("societycreditcode", QCP.equals, map.get("payeenumber")).toArray());
if (objects.length > 0) {
DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank");
logger.info("dynamicObjectCollection{}", dynamicObjectCollection);
// 收款人编码
map.put("payeenumber", objects[0].getString("number"));
// 收款人ID
map.put(fieldName1, objects[0].getPkValue());
//收款人编码
}
} else if ("bd_customer".equals(payeetype)) {
logger.info("收款人类型 → 客户");
Map<String, Object> societycreditcode = new HashMap<>();
societycreditcode.put("societycreditcode", map.get("payeenumber"));
map.put("shkd_customer", societycreditcode);
logger.info("收款人ID{}", map.get("payeenumber"));
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(),
"id,number,name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank",
new QFilter("societycreditcode", QCP.equals, map.get("payeenumber")).toArray());
if (objects.length > 0) {
DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank");
logger.info("dynamicObjectCollection{}", dynamicObjectCollection);
// 收款人编码
map.put("payeenumber", objects[0].getString("number"));
// 收款人ID
map.put(fieldName1, objects[0].getPkValue());
//收款人编码
}
} else if ("bos_user".equals(payeetype)) {
logger.info("收款人类型 → 人员");
Map<String, Object> user_number = new HashMap<>();
user_number.put("number", map.get("payeenumber"));
logger.info("收款人编码:{}", map.get("payeenumber"));
map.put("shkd_user", user_number);
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,name,number,username", new QFilter("number", QCP.equals, map.get("payeenumber")).toArray());
logger.info("人员查询,通过人员工号查对应的人员数据长度:{}", objects.length);
if (objects.length > 0) {
// 收款人编码
map.put("payeenumber", objects[0].getString("number"));
// 付款人ID
map.put(fieldName1, objects[0].getPkValue());
}
} else if ("bos_org".equals(payeetype)) {
Map<String, Object> number = new HashMap<>();
number.put("number", map.get("payeenumber"));
map.put("shkd_org", number);
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,number,name,", new QFilter("number", QCP.equals, map.get("payeenumber")).toArray());
if (objects.length > 0) {
// 收款人编码
map.put("payeenumber", objects[0].getString("number"));
// 收款人ID
map.put(fieldName1, objects[0].getPkValue());
//收款人编码
}
}
}
else if ("cas_paybill_span_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {// 星空传的跨主体调拨
logger.info("单据类型 → 跨主体调拨,推送系统 → XK");
if ("BD_Supplier".equals(payeetype)) {
payeetype = "bd_supplier";
map.put("payeetype", "bd_supplier");
map.put("payeeformid", "bd_supplier");
} else if ("BD_Customer".equals(payeetype)) {
payeetype = "bd_customer";
map.put("payeetype", "bd_customer");
map.put("payeeformid", "bd_customer");
} else if ("BD_Empinfo".equals(payeetype)) {
payeetype = "bos_user";
map.put("payeetype", "bos_user");
map.put("payeeformid", "bos_user");
} else if ("ORG_Organizations".equals(payeetype)) {
payeetype = "bos_org";
map.put("payeetype", "bos_org");
map.put("payeeformid", "bos_org");
} else if ("FIN_OTHERS".equals(payeetype)) {
payeetype = "bd_supplier";
map.put("payeetype", "bd_supplier");
map.put("payeeformid", "bd_supplier");
}
// 赋值付款金额折本位币
map.put("localamt", map.get("actpayamt"));
// 赋值分录应付折本币
List<Map<String, Object>> entryList = (List<Map<String, Object>>) map.get("entry");
if (entryList != null && !entryList.isEmpty()) {
Map<String, Object> stringObjectMap = entryList.get(0);
// 获取 e_payableamt 的值
stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt"));
map.put("entry", entryList);
}
fieldName1 = "payee";// 收款人ID
// 付款银行编码
fieldName2 = "payerbank";
Map<String, Object> payeebank = (Map<String, Object>) map.get("payeebank");
String payeebank_number = payeebank.get("number").toString();
DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,provincetxt,citytxt", new QFilter("number", QCP.equals, payeebank_number).toArray());
if (bd_bebank.length > 0) {
map.put("recprovince", bd_bebank[0].getString("provincetxt"));
map.put("reccity", bd_bebank[0].getString("citytxt"));
}
Map<String, Object> settletype = (Map<String, Object>) map.get("settletype");
String settletype_number = settletype.get("number").toString();
Map<String, Object> payeracctbank = (Map<String, Object>) map.get("payeracctbank");
bankNumber = payeracctbank.get("number").toString(); // 付款银行账号
// 账户查询通过银行账号查对应的付款账户
DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number,issetbankinterface", new QFilter("number", QCP.equals, bankNumber).toArray());
logger.info("账户查询,通过银行账号查对应的付款账户长度:{}", amAccountbanks.length);
Map<String, Object> payerbank = new HashMap<>();
if (amAccountbanks.length > 0) {
payerbank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number"));
logger.info("账户查询,通过银行账号查对应的付款账户信息:{}", amAccountbanks[0]);
if ("JSFS17、JSFS18".contains(settletype_number) && amAccountbanks[0].getBoolean("issetbankinterface")) {
map.put("paymentchannel", "bei");
} else {
map.put("paymentchannel", "counter");
}
}
logger.info("付款银行:{}", payerbank);
map.put(fieldName2, payerbank);
Map<String, Object> number = new HashMap<>();
number.put("number", map.get("payeenumber"));
map.put("shkd_org", number);
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,number,name,", new QFilter("number", QCP.equals, map.get("payeenumber")).toArray());
if (objects.length > 0) {
// 收款人编码
map.put("payeenumber", objects[0].getString("number"));
// 收款人ID
map.put(fieldName1, objects[0].getPkValue());
//收款人编码
}
}
else if ("cas_paybill_syn_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {// 星空传的同名转账
logger.info("单据类型 → 同名转账,推送系统 → XK");
// 赋值付款金额折本位币
map.put("localamt", map.get("actpayamt"));
// 赋值分录应付折本币
List<Map<String, Object>> entryList = (List<Map<String, Object>>) map.get("entry");
if (entryList != null && !entryList.isEmpty()) {
Map<String, Object> stringObjectMap = entryList.get(0);
// 获取 e_payableamt 的值
stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt"));
map.put("entry", entryList);
}
// 收款人ID
fieldName1 = "payee";
// 付款银行编码
fieldName2 = "payerbank";
Map<String, Object> payeebank = (Map<String, Object>) map.get("payeebank");
String payeebank_number = payeebank.get("number").toString();
DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,provincetxt,citytxt", new QFilter("number", QCP.equals, payeebank_number).toArray());
if (bd_bebank.length > 0) {
map.put("recprovince", bd_bebank[0].getString("provincetxt"));
map.put("reccity", bd_bebank[0].getString("citytxt"));
}
Map<String, Object> settletype = (Map<String, Object>) map.get("settletype");
String settletype_number = settletype.get("number").toString();
Map<String, Object> payeracctbank = (Map<String, Object>) map.get("payeracctbank");
bankNumber = payeracctbank.get("number").toString(); // 付款银行账号
// 账户查询通过银行账号查对应的付款账户
DynamicObject[] amAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bank,bank.number,issetbankinterface", new QFilter("number", QCP.equals, bankNumber).toArray());
logger.info("账户查询,通过银行账号查对应的付款账户长度:{}", amAccountbanks.length);
Map<String, Object> payerbank = new HashMap<>();
if (amAccountbanks.length > 0) {
payerbank.put("number", amAccountbanks[0].getDynamicObject("bank").getString("number"));
logger.info("账户查询,通过银行账号查对应的付款账户信息:{}", amAccountbanks[0]);
if ("JSFS17、JSFS18".contains(settletype_number) && amAccountbanks[0].getBoolean("issetbankinterface")) {
map.put("paymentchannel", "bei");
} else {
map.put("paymentchannel", "counter");
}
}
logger.info("付款银行:{}", payerbank);
map.put(fieldName2, payerbank);
Map<String, Object> number = new HashMap<>();
number.put("number", map.get("payeenumber"));
map.put("shkd_org", number);
DynamicObject[] objects = BusinessDataServiceHelper.load("bos_org", "id,number,name,", new QFilter("number", QCP.equals, map.get("payeenumber")).toArray());
if (objects.length > 0) {
logger.info("收款人查询长度 → " + objects.length);
// 收款人ID
map.put(fieldName1, objects[0].getPkValue());
}
}
}
logger.info("最终处理 → 调用接口参数:{}", reqData);
}
return reqData;
}
}