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 0a2c697..a9e4f57 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 @@ -205,7 +205,7 @@ public class ApiService { dynamic.set("shkd_businessnumber", data.getString("code")); dynamic.set("shkd_businessid", data.getString("id")); dynamic.set("shkd_businessname", "BIP"); - dynamic.set("shkd_pushstatus", "已推送"); + dynamic.set("shkd_pushstatus", "已结算"); dynamicObjects.add(dynamic); submitUrl = objects[0].getString("shkd_submiturl"); @@ -233,6 +233,13 @@ public class ApiService { code = jsonObject.getString("code"); if ("200".equals(code)) { dynamic.set("billstatus", "A"); + + if ("TF、NC、OF".contains(objects[0].getString("bankpaystatus"))) { + dynamic.set("shkd_pushstatus", "结算失败"); + } else if ("TS".equals(objects[0].getString("bankpaystatus"))){ + dynamic.set("shkd_pushstatus", "已结算"); + } + dynamicObjects.add(dynamic); logger.info("付款处理(支付结果) → BIP推送接口 → 成功\n成功单据编号:{}\n推送成功接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); result = "推送 → 付款处理(支付结果) → 成功"; @@ -400,6 +407,18 @@ public class ApiService { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 格式化Date对象为字符串 value = sdf.format(bizdate); + } else if ("bankpaystatus".equals(parts[0])) { + String bankpaystatus = billObject.getString(parts[0]); + switch (bankpaystatus) { + case "TS": + value = "3"; + break; + case "TF": + case "NC": + case "OF": + value = "4"; + break; + } } else { value = billObject.get(parts[0]); } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java index b518f2b..083ec73 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java @@ -118,7 +118,18 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { map.put(fieldName2, payeebank); } } + + String billstatus = map.get("billstatus").toString(); + if ("C".equals(billstatus)) { + map.put("shkd_pushstatus", "未结算"); + } + + if ("D".equals(billstatus)) { + map.put("shkd_pushstatus", "已结算"); + } + 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 2379126..6fc0340 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 @@ -112,11 +112,13 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { if ("shkd_testapi".equals(itemKey)) { String result = ApiService.paymentSlipsJson(billObject, "BIP", dynamicObjects); + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); this.getView().showTipNotification("返回结果:" + result); } if ("shkd_hitback".equals(itemKey)) { String result = ApiService.paymentSlipsJson(billObject, "BIPNO", dynamicObjects); + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); this.getView().showTipNotification("返回结果:" + result); } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java new file mode 100644 index 0000000..7152e43 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.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.control.Toolbar; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; +import shkd.sys.sys.mservice.ApiService; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/** + * 单据界面插件 + */ +public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements Plugin { + @Override + public void registerListener(EventObject e) { + Toolbar tbmain = this.getView().getControl("tbmain"); + tbmain.addItemClickListener(this); + } + + @Override + public void itemClick(ItemClickEvent evt) { + String itemKey = evt.getItemKey(); + if ("shkd_hitback".equals(itemKey)) { + DynamicObject dataEntity = this.getModel().getDataEntity(true); + String bankpaystatus = dataEntity.getString("bankpaystatus"); + if ("TF、NC、OF".contains(bankpaystatus)) { + List dynamicObjects = new ArrayList<>(); + String result = ApiService.paymentSlipsJson(dataEntity, "BIPNO", dynamicObjects); + if (result.contains("成功")) { + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); + this.getView().showSuccessNotification("打回成功"); + } + } else { + this.getView().showErrorNotification("打回失败,请确认银行支付状态"); + } + } + } +} \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java new file mode 100644 index 0000000..90567f0 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java @@ -0,0 +1,46 @@ +package shkd.sys.sys.plugin.list; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.list.BillList; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.util.ArrayList; +import java.util.List; + +/** + * 标准单据列表插件 + */ +public class PaymentProcessingListPlugin extends AbstractListPlugin implements Plugin { + @Override + public void itemClick(ItemClickEvent evt) { + String itemKey = evt.getItemKey(); + if ("shkd_hitback".equals(itemKey)) { + List billnos = new ArrayList<>(); + //获取列表 + BillList list = this.getControl("billlistap"); + //获取列表选中的行数据 + ListSelectedRowCollection selectedRows = list.getSelectedRows(); + + if (selectedRows.isEmpty()) this.getView().showTipNotification("请至少选择一条数据"); + if (selectedRows.size() > 1000) this.getView().showTipNotification("请至少选择一条数据"); + + for (ListSelectedRow listSelectedRow : selectedRows) { + billnos.add(listSelectedRow.getBillNo()); + } + + /* DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" + , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送") + .and("billstatus", QCP.equals, "D").toArray());*/ + } + } +} \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index caaca71..6cc6055 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -53,13 +53,18 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { List dynamicObjectList = new ArrayList<>(); if (billMark != null) { switch (billMark.toString()) { + //已结算、未结算、结算失败、未推送 + // 付款处理 case "cas_paybill": DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送") + , new QFilter("bizdate", QCP.large_equals, date) + .and("shkd_pushstatus", QCP.not_equals, "已结算") + .and("shkd_pushstatus", QCP.not_equals, "未结算") + .and("shkd_pushstatus", QCP.not_equals, "结算失败") .and("billstatus", QCP.equals, "D").toArray()); dynamicObjects = Arrays.asList(objects1); dynamicObjects.forEach(dynamicObject -> { @@ -87,14 +92,24 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { dynamicObjects = Arrays.asList(objects3); billName = "银行收付处理"; break; - // 支付失败(付款处理支付结果定时推送) + // 支付结果推送(付款处理支付结果定时推送) case "cas_paybill_result": DynamicObject[] objects4 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("bizdate", QCP.large_equals, date).and("bankpaystatus", QCP.in, new String[]{"TF", "NC", "OF"}).toArray()); + , new QFilter("bizdate", QCP.large_equals, date) + .and("bankpaystatus", QCP.in, new String[]{"TS", "TF", "NC", "OF"}) + .and("shkd_pushstatus", QCP.equals, "未结算").toArray()); + + DynamicObject[] objects5 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + + "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" + , new QFilter("bankpaystatus", QCP.equals, "TS") + .and("shkd_pushstatus", QCP.equals, "结算失败").toArray()); dynamicObjects = Arrays.asList(objects4); + dynamicObjects.addAll(Arrays.asList(objects5)); dynamicObjects.forEach(dynamicObject -> { ApiService.paymentSlipsJson(dynamicObject, "BIPNO", dynamicObjectList); });