diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java index 6d14478..8cd2755 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java @@ -79,13 +79,15 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { case "102": billtype.put("number", "cdm_recbill_bank_BT_S"); - DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,name", new QFilter("name", QCP.equals, map.get("acceptername")).toArray()); + DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,name", new QFilter("number", QCP.equals, map.get("acceptername")).toArray()); if (bd_bebank == null || bd_bebank.length == 0) { - logger.info("进入收票登记 → 票据号:{},星空推送行名:{},未查到司库行名行号", map.get("draftbillno"), map.get("acceptername")); + logger.info("进入收票登记 → 票据号:{},星空推送联行号:{},未查到司库行名行号", map.get("draftbillno"), map.get("acceptername")); + } else { + map.put("acceptername", bd_bebank[0].getString("name")); + Map accepterbebank = new HashMap<>(); + accepterbebank.put("number", bd_bebank[0].getString("number")); + map.put("accepterbebank", accepterbebank); } - Map accepterbebank = new HashMap<>(); - accepterbebank.put("name", map.get("acceptername")); - map.put("accepterbebank", accepterbebank); break; //商业承兑汇票 case "103": @@ -120,6 +122,7 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { break; } map.put("billtype", billtype); + logger.info("收票登记 → 接口调用接口最终参数:{}", reqData); } if (map.get("receiver") != null) {//receiver_number @@ -235,21 +238,21 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { //商业承兑电票 case "104": - case "CDMT-005D63A9": case "CDMT-08B7B711": case "CDMT-16FEE117": - case "CDMT-23C7A4D1": - case "CDMT-491D50C5": + case "CDMT-3320A540": + case "CDMT-3D17D179": case "CDMT-4980CF6D": - case "CDMT-550FDEAC": + case "CDMT-49ED9E02": case "CDMT-5CD7302F": - case "CDMT-6B2CEDA4": + case "CDMT-64FF686D": + case "CDMT-77D626A4": case "CDMT-8C2B298B": case "CDMT-A452A1B3": - case "CDMT-A773567D": - case "CDMT-C16F2F43": - case "CDMT-D5D6C225": + case "CDMT-DA385DD9": case "CDMT-DF3B089B": + case "CDMT-DF7BCFDD": + case "CDMT-EA7CA8B1": case "CDMT-F8D0D70F": case "CDMT-FE92FDAF": billtype.put("number", "cdm_paybill_business_elec_BT_S"); @@ -269,6 +272,7 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { break; } map.put("billtype", billtype); + logger.info("开票登记 → 接口调用接口最终参数:{}", reqData); } } else if ("bos_org".equals(payeetype)) { diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/XkPayBillApiSavePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/XkPayBillApiSavePlugin.java new file mode 100644 index 0000000..7383630 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/XkPayBillApiSavePlugin.java @@ -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> preHandleRequestData(List> reqData) { + logger.info("接口调用接口参数:{}\n数据长度:{}", reqData, reqData.size()); + String fieldName1;//字段名称(收/付人ID) + + String bankNumber;//(收/付款银行账号.number) + String fieldName2;//字段名称(收/付款银行.number) + for (Map map : reqData) { + + Object billtypeObject = map.get("billtype");// 单据类型 + Object payeetype = map.get("payeetype");// 如果是收款人类型 则为付款处理保存接口 + String shkd_businessname = map.get("shkd_businessname").toString();// 推送系统 + + if (billtypeObject != null) { + Map billtype = (Map) 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> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + + + + + Map payeebank = (Map) 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 settletype = (Map) map.get("settletype"); + String settletype_number = settletype.get("number").toString(); + + + Map payeracctbank = (Map) 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 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 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 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 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 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> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + + fieldName1 = "payee";// 收款人ID + // 付款银行编码 + fieldName2 = "payerbank"; + Map payeebank = (Map) 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 settletype = (Map) map.get("settletype"); + String settletype_number = settletype.get("number").toString(); + + + Map payeracctbank = (Map) 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 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 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> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + + // 收款人ID + fieldName1 = "payee"; + // 付款银行编码 + fieldName2 = "payerbank"; + Map payeebank = (Map) 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 settletype = (Map) map.get("settletype"); + String settletype_number = settletype.get("number").toString(); + + + Map payeracctbank = (Map) 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 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 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; + } +} diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index b5c24b1..39e46b1 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -130,6 +130,72 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { String result = pushBillAttachment(dataEntity); this.getView().showTipNotification("返回结果:" + result); } + + // 补偿方案(推送BIP电子回单) + if ("shkd_compensatebip".equals(itemKey)) { + List dynamicObjectList = new ArrayList<>(); + // 获取多选基础资料银行类别(推送银行类别) + ArrayList bankTypeArray = new ArrayList<>(); + DynamicObjectCollection bankTypeArr = dataEntity.getDynamicObjectCollection("shkd_banktype"); + for (DynamicObject bankTypeData : bankTypeArr) { + DynamicObject bankType = bankTypeData.getDynamicObject("fbasedataid");//银行类别基础资料数据包 + if (bankType != null) { + String bankTypeName = bankType.getString("name");//银行类别名称 + bankTypeArray.add(bankTypeName); + } + } + + // 获取多选基础资料业务单元(推送组织) + ArrayList orgArray = new ArrayList<>(); + DynamicObjectCollection orgArr = dataEntity.getDynamicObjectCollection("shkd_orgs"); + for (DynamicObject orgData : orgArr) { + orgArray.add(orgData.getLong("fbasedataid_Id")); + } + + // 获取推送开始时间 + Date shkdStartdate = dataEntity.getDate("shkd_startdate"); + + DynamicObject[] elecreceiptArays = BusinessDataServiceHelper.load("bei_elecreceipt", + "id,billno,shkd_pushstatus,fileserverurl,bizdate,oppbank,oppbankname,description," + + "company,oppbanknumber,oppunit,detaildatetime,accountbank,amount,use,debitamount," + + "creditamount,detailid,uploadfilename,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "filepath,receiptno,ismatch" + , new QFilter("bizdate", QCP.large_equals, shkdStartdate) + .and("ismatch", QCP.equals, "1") + .and("shkd_pushstatus", QCP.not_equals, "已推送") + .and("company", QCP.in, orgArray) + .and("billno", QCP.equals, dataEntity.getString("shkd_sourcenumber")).toArray()); + + if (elecreceiptArays == null || elecreceiptArays.length == 0) { + this.getView().showTipNotification("未查询到符合条件的单据"); + } else { + DynamicObject dynamicObject = elecreceiptArays[0]; + //开户银行(银行账户) + DynamicObject accountbank = dynamicObject.getDynamicObject("accountbank"); + + //开户行(合作金融机构) + DynamicObject bank = accountbank.getDynamicObject("bank"); + + String bank_number = bank.getString("number"); + DynamicObject[] bd_finorginfo = BusinessDataServiceHelper.load("bd_finorginfo", "id,number,bank_cate", new QFilter("number", QCP.equals, bank_number).toArray()); + + //银行类别 + DynamicObject bank_cate = bd_finorginfo[0].getDynamicObject("bank_cate"); + + String bank_name = bank_cate.getString("name"); + + if (bankTypeArray.contains(bank_name)) { + this.getView().showTipNotification("获取符合推送条件的单据:" + dynamicObject.getString("billno")); +// logger.info("获取符合推送条件的单据:{}", dynamicObject.getString("billno")); + String result = paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList, null); + if (result.contains("成功")) { + SaveServiceHelper.save(dynamicObjectList.toArray(new DynamicObject[0])); + } else { + this.getView().showTipNotification("推送失败:" + dynamicObject.getString("billno")); + } + } + } + } } private void parseJson(Object obj, int level, String parentKey) {