diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java index d6b159f..3b15bae 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java @@ -605,6 +605,12 @@ public class SappzFormPlugin extends AbstractFormPlugin { builder.append("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)"+"\n"); continue; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + handleError("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", fkBillNum, apimenthod, null); + builder.append("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"+"\n"); + continue; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 @@ -631,6 +637,12 @@ public class SappzFormPlugin extends AbstractFormPlugin { builder.append("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)"+"\n"); continue; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + handleError("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", fkBillNum, apimenthod, null); + builder.append("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"+"\n"); + continue; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayBillSubmitOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayBillSubmitOperation.java index 9826f52..ba3fe03 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayBillSubmitOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayBillSubmitOperation.java @@ -161,7 +161,9 @@ public class PayBillSubmitOperation extends AbstractOperationServicePlugIn imple if ("bd_supplier".equals(payeetype)) { DynamicObjectCollection entryBanks = dy.getDynamicObjectCollection("entry_bank"); for (DynamicObject entryBank : entryBanks) { - if (payeebanknum.equals(entryBank.getString("bankaccount"))) { + if (payeebanknum.equals(entryBank.getString("bankaccount")) && + !"E".equalsIgnoreCase(entryBank.getString("shjh_bankstatus"))) { + //20250814开发培训时沟通:账号相同且账号状态不是E 获取到对应的合作银行类型 如果是E代表账号已被sap删除,不可用 bvtyp = entryBank.getString("shjh_banktype");//合作银行类型 break; } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java index 89bd515..9f1a10d 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java @@ -388,6 +388,12 @@ public class QuerySapCreatePayApplyTask extends AbstractTask { JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API"); continue; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + logger.error("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"); + JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", false, "API"); + continue; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 @@ -414,6 +420,12 @@ public class QuerySapCreatePayApplyTask extends AbstractTask { JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API"); continue; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + logger.error("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"); + JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", false, "API"); + continue; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java index 7734ab8..e4432df 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java @@ -726,6 +726,12 @@ public class ApplyAdjustBillControler { JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API"); return "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)"; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + log.error("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"); + JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", false, "API"); + return "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 @@ -752,6 +758,12 @@ public class ApplyAdjustBillControler { JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API"); return "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)"; } + //20250814开发培训时沟通:判断银行的账号状态,如果是E 则代表已被sap删了,不可使用 + if("E".equalsIgnoreCase(bankentry.getString("shjh_bankstatus"))){ + log.error("同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"); + JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用", false, "API"); + return "同步失败,凭证号:" + fkBillNum + "的账户状态为E,不可使用"; + } ap_payapply_entry.set("e_assacct", bankaccount);//银行账号 ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/SupplierControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/SupplierControler.java index 95ee1a8..c1d39e0 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/SupplierControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/SupplierControler.java @@ -165,21 +165,17 @@ public class SupplierControler { //联行号为空,不处理 continue; } + if(EsbUtils.isEmpty(json_bank.getString("banknumber"))){ + //银行账号为空,不处理 + continue; + } bebankinfo = BusinessDataServiceHelper.loadSingleFromCache(bebankName,"id,number",new QFilter[]{new QFilter("number","=",bankcode)}); if(bebankinfo == null){ //联行号在金蝶中无对应记录,不处理 continue; } //供应商银行账户对象从现有集合中查找,查找不到,则新增 - bankinfo = getBankInfo(doc_bank,json_bank.getString("banknumber")); - if(bankinfo == null && "E".equals(json_bank.getString("bankstatus"))){ - //如果本次入参银行账户未在系统生成,且sap是删除的,我方不接收 - continue; - } - if(EsbUtils.isEmpty(json_bank.getString("banknumber"))){ - //银行账号为空,不处理 - continue; - } + bankinfo = getBankInfo(doc_bank,json_bank.getString("banknumber"),bankcode); if(bankinfo == null){ bankinfo = doc_bank.addNew(); } @@ -255,10 +251,12 @@ public class SupplierControler { } } - private DynamicObject getBankInfo(DynamicObjectCollection doc_bank, String banknumber){ - //从当前供应商的银行账户集合中获取对应的账户的对象 + private DynamicObject getBankInfo(DynamicObjectCollection doc_bank, String banknumber, String bankcode){ + //从当前供应商的银行账户集合中获取对应的账户的对象-以银行账号为主键来判断 + //20250814开发培训时沟通:以银行账号+联行号为主键来判断,应对在sap上某个账号更换了银行或者银行搬迁造成联行号变动,从而sap需要传相同账号不同联行号的两个账号数据(I和E) for (DynamicObject bankinfo : doc_bank) { - if(banknumber.equals(bankinfo.getString("bankaccount"))){ + if(banknumber.equals(bankinfo.getString("bankaccount")) + && bankcode.equals(bankinfo.getString("bank.number"))){ return bankinfo; } }