--获取sap凭证生成付款申请单时,客户/供应商需校验银行信息,以及补充若为客户时的赋值逻辑(sap动态表单,定时任务,付款调整单接口)

--凭证审核操作报错返回

s
This commit is contained in:
weiyunlong 2025-05-09 17:50:51 +08:00
parent 652ad1d00a
commit ed44d1f997
4 changed files with 206 additions and 15 deletions

View File

@ -519,12 +519,75 @@ public class SappzFormPlugin extends AbstractFormPlugin {
String assacct = (String) this.getModel().getValue("shjh_description", selectRow);//合作银行类型 String assacct = (String) this.getModel().getValue("shjh_description", selectRow);//合作银行类型
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录 DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
if (!bankentrys.isEmpty()) { if (!bankentrys.isEmpty()) {
boolean ispp = false;
for (DynamicObject bankentry : bankentrys) { for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) { if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ap_payapply_entry.set("e_assacct", bankentry.getString("bankaccount"));//银行账号 ispp = true;
ap_payapply_entry.set("e_bebank", bankentry.getDynamicObject("bank"));//开户银行 String bankaccount = bankentry.getString("bankaccount");
DynamicObject bank = bankentry.getDynamicObject("bank");
String accountname = bankentry.getString("accountname");
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
handleError("同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)");
return;
}
if (null == bank) {
handleError("同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)");
return;
}
if (accountname == null || accountname.trim().isEmpty()) {
handleError("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)");
return;
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
} }
} }
if (!ispp) {
handleError("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)");
return;
}
}else {
handleError("同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息");
return;
}
}else {
//客户
DynamicObjectCollection entryBank = party.getDynamicObjectCollection("entry_bank");
if (!entryBank.isEmpty()) {
DynamicObject bankentry = entryBank.get(0);
String bankaccount = bankentry.getString("bankaccount");//银行账号
DynamicObject bank = bankentry.getDynamicObject("bank");//开户银行
String accountname = bankentry.getString("accountname");//账户名称
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
handleError("同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)");
return;
}
if (null == bank) {
handleError("同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)");
return;
}
if (accountname == null || accountname.trim().isEmpty()) {
handleError("同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)");
return;
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
}else {
handleError("同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息");
return;
} }
} }
//到期日 //到期日

View File

@ -3,15 +3,19 @@ package shjh.jhzj7.fi.fi.plugin.operate;
import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.operate.OperateOptionConst; import kd.bos.entity.operate.OperateOptionConst;
import kd.bos.entity.operate.result.OperateErrorInfo;
import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.operate.result.OperationResult;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.AfterOperationArgs; import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.entity.validate.ErrorLevel;
import kd.bos.logging.Log; import kd.bos.logging.Log;
import kd.bos.logging.LogFactory; import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import java.util.List;
public class VoucherAuditOperation extends AbstractOperationServicePlugIn implements Plugin { public class VoucherAuditOperation extends AbstractOperationServicePlugIn implements Plugin {
//凭证审核操作插件该插件完成凭证上游收付款单推送sap操作 //凭证审核操作插件该插件完成凭证上游收付款单推送sap操作
@ -64,6 +68,10 @@ public class VoucherAuditOperation extends AbstractOperationServicePlugIn implem
logger.info("执行付款单 pushsap 成功,单据编号:" + bizbillinfo.getString("billno")); logger.info("执行付款单 pushsap 成功,单据编号:" + bizbillinfo.getString("billno"));
} else { } else {
logger.error(operResult.getMessage()); logger.error(operResult.getMessage());
List<OperateErrorInfo> allErrorInfo = operResult.getAllErrorInfo();
for (OperateErrorInfo errorInfo : allErrorInfo) {
this.operationResult.addErrorInfo(errorInfo);
}
} }
}else if(intbillName.equals(sourcebilltype)){ }else if(intbillName.equals(sourcebilltype)){
bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,intbillName); bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,intbillName);

View File

@ -271,14 +271,78 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
if ("供应商".equals(shjh_payee)) { if ("供应商".equals(shjh_payee)) {
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录 DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
if (!bankentrys.isEmpty()) { if (!bankentrys.isEmpty()) {
boolean ispp = false;
for (DynamicObject bankentry : bankentrys) { for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) { if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ap_payapply_entry.set("e_assacct", bankentry.getString("bankaccount"));//银行账号 ispp = true;
ap_payapply_entry.set("e_bebank", bankentry.getDynamicObject("bank"));//开户银行 String bankaccount = bankentry.getString("bankaccount");
DynamicObject bank = bankentry.getDynamicObject("bank");
String accountname = bankentry.getString("accountname");
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
logger.error("同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)", false, "API");
return null;
}
if (null == bank) {
logger.error("同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)", false, "API");
return null;
}
if (accountname == null || accountname.trim().isEmpty()) {
logger.error("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API");
return null;
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
} }
} }
if (!ispp) {
logger.error("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)", false, "API");
return null;
}
}else {
logger.error("同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息", false, "API");
return null;
}
}else {
//客户
DynamicObjectCollection entryBank = party.getDynamicObjectCollection("entry_bank");
if (!entryBank.isEmpty()) {
DynamicObject bankentry = entryBank.get(0);
String bankaccount = bankentry.getString("bankaccount");//银行账号
DynamicObject bank = bankentry.getDynamicObject("bank");//开户银行
String accountname = bankentry.getString("accountname");//账户名称
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
logger.error("同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)", false, "API");
return null;
}
if (null == bank) {
logger.error("同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)", false, "API");
return null;
}
if (accountname == null || accountname.trim().isEmpty()) {
logger.error("同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)", false, "API");
return null;
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
}else {
logger.error("同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息", false, "API");
return null;
} }
} }
//到期日 //到期日
ap_payapply_entry.set("e_duedate", FAEDTs); ap_payapply_entry.set("e_duedate", FAEDTs);
//分录申请金额 //分录申请金额

View File

@ -545,7 +545,7 @@ public class ApplyAdjustBillControler {
} }
// 设置明细信息 // 设置明细信息
String s1 = setEntryInfo(ap_payapply, asstacttype, asstact, assacct, duedate, outstandingamount, fkBillNum,org); String s1 = setEntryInfo(ap_payapply, asstacttype, asstact, assacct, duedate, outstandingamount, fkBillNum,org,it_list);
if (StringUtils.isNotEmpty(s1)) { if (StringUtils.isNotEmpty(s1)) {
return s1; return s1;
} }
@ -620,7 +620,7 @@ public class ApplyAdjustBillControler {
* 付款方式 _结算 * 付款方式 _结算
* @return 操作是否成功 * @return 操作是否成功
*/ */
private String setEntryInfo(DynamicObject ap_payapply, String asstacttype, String asstact, String assacct, Date duedate, BigDecimal outstandingamount, String fkBillNum,DynamicObject org) { private String setEntryInfo(DynamicObject ap_payapply, String asstacttype, String asstact, String assacct, Date duedate, BigDecimal outstandingamount, String fkBillNum,DynamicObject org,JSONObject it_list) {
DynamicObjectCollection entry = ap_payapply.getDynamicObjectCollection("entry"); DynamicObjectCollection entry = ap_payapply.getDynamicObjectCollection("entry");
entry.clear(); entry.clear();
DynamicObject ap_payapply_entry = entry.addNew(); DynamicObject ap_payapply_entry = entry.addNew();
@ -660,23 +660,79 @@ public class ApplyAdjustBillControler {
ap_payapply_entry.set("e_asstact", party); ap_payapply_entry.set("e_asstact", party);
//如果往来户为供应商,才会有往来账户和银行,根据供应商银行分录里面的合作银行类型来确定往来账户和银行 //如果往来户为供应商,才会有往来账户和银行,根据供应商银行分录里面的合作银行类型来确定往来账户和银行
//往来账户 && 往来银行 //合作银行类型 //往来账户 && 往来银行
if ("供应商".equals(asstacttype)) { if ("供应商".equals(asstacttype)) {
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录 DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
boolean found = false;
if (!bankentrys.isEmpty()) { if (!bankentrys.isEmpty()) {
boolean ispp = false;
for (DynamicObject bankentry : bankentrys) { for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) { if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ap_payapply_entry.set("e_assacct", bankentry.getString("bankaccount"));//银行账号 ispp = true;
ap_payapply_entry.set("e_bebank", bankentry.getDynamicObject("bank"));//开户银行 String bankaccount = bankentry.getString("bankaccount");
found = true; DynamicObject bank = bankentry.getDynamicObject("bank");
break; String accountname = bankentry.getString("accountname");
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
log.error("同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的银行账号为空(供应商)";
}
if (null == bank) {
log.error("同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)";
}
if (accountname == null || accountname.trim().isEmpty()) {
log.error("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)";
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
} }
} }
if (!ispp) {
log.error("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)";
} }
if (!found) { }else {
handleError("同步失败, 供应商的合作银行类型 " + assacct + " 不存在", fkBillNum, null); log.error("同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息");
return "同步失败, 供应商的合作银行类型 " + assacct + " 不存在"; JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的供应商不存在银行信息";
}
}else {
//客户
DynamicObjectCollection entryBank = party.getDynamicObjectCollection("entry_bank");
if (!entryBank.isEmpty()) {
DynamicObject bankentry = entryBank.get(0);
String bankaccount = bankentry.getString("bankaccount");//银行账号
DynamicObject bank = bankentry.getDynamicObject("bank");//开户银行
String accountname = bankentry.getString("accountname");//账户名称
// 检查银行账号,开户银行,账户名称是否为空
if (bankaccount == null || bankaccount.trim().isEmpty()) {
log.error("同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的银行账号为空(客户)";
}
if (null == bank) {
log.error("同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的开户银行为空(客户)";
}
if (accountname == null || accountname.trim().isEmpty()) {
log.error("同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的账户名称为空(客户)";
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
}else {
log.error("同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息", false, "API");
return "同步失败,凭证号:" + fkBillNum + "的客户不存在银行信息";
} }
} }
//结算方式 //结算方式