收款单从规则携带客户标记;手动和定时拉取sap的合作银行类型为空,如果供应商只有一个账号则携带

This commit is contained in:
yuxueliang0813 2025-07-04 11:36:44 +08:00
parent 887d2f761c
commit 8243fe8dae
4 changed files with 182 additions and 87 deletions

View File

@ -580,10 +580,10 @@ public class SappzFormPlugin extends AbstractFormPlugin {
String assacct = (String) this.getModel().getValue("shjh_description", selectRow);//合作银行类型
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
if (!bankentrys.isEmpty()) {
boolean ispp = false;
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ispp = true;
boolean ispp = false;//sap合作银行类型是否与金蝶供应商银行账号匹配
//如果sap的合作银行类型为空再判断供应商银行分录是否只有一个只有一个时携带此银行
if(EsbUtils.isEmpty(assacct) && bankentrys.size() == 1){
DynamicObject bankentry = bankentrys.get(0);
String bankaccount = bankentry.getString("bankaccount");
DynamicObject bank = bankentry.getDynamicObject("bank");
String accountname = bankentry.getString("accountname");
@ -606,8 +606,38 @@ public class SappzFormPlugin extends AbstractFormPlugin {
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
ispp = true;
}else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
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);//账户名称
ispp = true;
break;
}
}
}
if (!ispp) {
handleError("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)", fkBillNum, apimenthod, null);
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)");

View File

@ -124,7 +124,8 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
bill.set("shjh_dfhm", oppunit);//收款单备注字段
bill.set("payertype", "bd_customer");//付款人类型:客户
// 2025/6/18 优化 先根据规则指定的付款人赋值
if (bill.getString("payername")==null || "".equals(bill.getString("payername")) || bill.getLong("payer")==0L) {
//判断收款单是否从规则和客户映射表取过数据如果取过了则设置为true;没取过则取值
if (!bill.getBoolean("shjh_xdgzkh")) {
carryCustomerRule(entry,bill,oppunit,companyId);
// DynamicObject ePayerid = entry.getDynamicObject("e_payerid");
// if (null != ePayerid) {
@ -609,6 +610,7 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
DynamicObject shjhCustomer = shjhDfhmcust.getDynamicObject("shjh_customer");
if (null != shjhCustomer) {
bill.set("payer", shjhCustomer.getPkValue()); //付款人id
bill.set("payernumber", shjhCustomer.getString("number")); //付款人编码
bill.set("payername", shjhCustomer.getString("name")); //付款人名称
}
} else {
@ -616,6 +618,7 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
DynamicObject ePayerid = entry.getDynamicObject("e_payerid");
if (null != ePayerid) {
bill.set("payer", ePayerid.getPkValue()); //付款人id
bill.set("payernumber", ePayerid.getString("number")); //付款人编码
bill.set("payername", ePayerid.getString("name")); //付款人名称
} else {
//3.规则生单未配置客户>取收款入账中心客户
@ -627,12 +630,14 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
if (null != bd_customer ) {
if (bd_customer.length==1){
bill.set("payer", bd_customer[0].getPkValue()); //付款人id
bill.set("payernumber", bd_customer[0].getString("number")); //付款人编码
bill.set("payername", bd_customer[0].getString("name")); //付款人名称
}else if (bd_customer.length>1){
for (int i = 0; i < bd_customer.length; i++) {
DynamicObjectCollection dynamicObjectCollection = bd_customer[i].getDynamicObjectCollection("shjh_entry_five");
if (dynamicObjectCollection.size()!=0){
bill.set("payer", bd_customer[i].getPkValue()); //付款人id
bill.set("payernumber", bd_customer[i].getString("number")); //付款人编码
bill.set("payername", bd_customer[i].getString("name")); //付款人名称
break;
}
@ -645,11 +650,13 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
DynamicObject bdCustomer = BusinessDataServiceHelper.loadSingle("bd_customer", qFilter1.toArray());
if (null != bdCustomer) {
bill.set("payer", bdCustomer.getPkValue()); //付款人id
bill.set("payernumber", bdCustomer.getString("number")); //付款人编码
bill.set("payername", bdCustomer.getString("name")); //付款人名称
}
}
}
}
bill.set("shjh_xdgzkh", true);//设置收款单标记位 从规则携带客户等信息 为true
}
}
}

View File

@ -41,31 +41,30 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
private final static Log logger = LogFactory.getLog(QuerySapCreatePayApplyTask.class);
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// 获取临期天数并转换
String lq = (String) map.get("临期_后");
String lq1 = (String) map.get("临期_前");
String lq = (String) map.get("临期_后");
// 检查是否有有效的临期数据
if (StringUtils.isEmpty(lq) && StringUtils.isEmpty(lq1)) {
return;
}
//获取当前日期
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
int daysBefore = Integer.parseInt(lq1);//临期_前
int daysAfter = Integer.parseInt(lq);//临期_后
int totalDays = daysBefore + daysAfter;//总天数后面按照每30天调用一次接口
//计算按照30天为一个循环需要循环的次数
// 计算开始日期临期_前表示今天之前的天数
LocalDate startDate = currentDate;
if (StringUtils.isNotEmpty(lq1)) {
int daysBefore = Integer.parseInt(lq1);
startDate = currentDate.minusDays(daysBefore);
}
// 计算结束日期临期_后表示今天之后的天数
LocalDate endDate = currentDate;
if (StringUtils.isNotEmpty(lq)) {
int daysAfter = Integer.parseInt(lq);
endDate = currentDate.plusDays(daysAfter);
}
@ -121,7 +120,7 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
*/
private Map<String, DynamicObject> getPayapply(JSONArray IT_ITEMs){
Map<String, DynamicObject> bills = new HashMap<>();
JSONObject it_list;
JSONObject it_list;//sap单个应付凭证
String shjh_payee = "";//往来类型
String shjh_payeebanknum = "";//往来户名称
// 定义往来类型和对应值的映射
@ -332,9 +331,9 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
if (!bankentrys.isEmpty()) {
boolean ispp = false;//sap合作银行类型是否与金蝶供应商银行账号匹配
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ispp = true;
//如果sap的合作银行类型为空再判断供应商银行分录是否只有一个只有一个时携带此银行
if(EsbUtils.isEmpty(assacct) && bankentrys.size() == 1){
DynamicObject bankentry = bankentrys.get(0);
String bankaccount = bankentry.getString("bankaccount");
DynamicObject bank = bankentry.getDynamicObject("bank");
String accountname = bankentry.getString("accountname");
@ -357,6 +356,35 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
ispp = true;
}else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
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");
continue;
}
if (null == bank) {
logger.error("同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的开户银行为空(供应商)", false, "API");
continue;
}
if (accountname == null || accountname.trim().isEmpty()) {
logger.error("同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的账户名称为空(供应商)", false, "API");
continue;
}
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
ispp = true;
break;
}
}
}
if (!ispp) {
@ -370,7 +398,7 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
continue;
}
}else {
//客户
//客户 默认取第一行银行信息
DynamicObjectCollection entryBank = party.getDynamicObjectCollection("entry_bank");
if (!entryBank.isEmpty()) {
DynamicObject bankentry = entryBank.get(0);

View File

@ -81,7 +81,7 @@ public class ApplyAdjustBillControler {
if (org == null) {
return handleErrorAndReturn(apiResultExt, "同步失败,调整单号:" + fkBillNum + "的组织编码不存在", fkBillNum, jsonBodyString);
}
//todo 目前费控传过来的行号是整数前面没有0 需要自动补全
String sapuniquevalue = companyNum + year + voucherNum + voucherLineNum; // SAP应付凭证ID
DynamicObject ap_payapply = BusinessDataServiceHelper.loadSingle(AP_PAYAPPLY, new QFilter[]{new QFilter("shjh_sapuniquevalue", QCP.equals, sapuniquevalue)});
@ -703,10 +703,10 @@ public class ApplyAdjustBillControler {
if ("供应商".equals(asstacttype)) {
DynamicObjectCollection bankentrys = party.getDynamicObjectCollection("entry_bank");//银行信息分录
if (!bankentrys.isEmpty()) {
boolean ispp = false;
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
ispp = true;
boolean ispp = false;//sap合作银行类型是否与金蝶供应商银行账号匹配
//如果sap的合作银行类型为空再判断供应商银行分录是否只有一个只有一个时携带此银行
if(EsbUtils.isEmpty(assacct) && bankentrys.size() == 1){
DynamicObject bankentry = bankentrys.get(0);
String bankaccount = bankentry.getString("bankaccount");
DynamicObject bank = bankentry.getDynamicObject("bank");
String accountname = bankentry.getString("accountname");
@ -729,8 +729,38 @@ public class ApplyAdjustBillControler {
ap_payapply_entry.set("e_assacct", bankaccount);//银行账号
ap_payapply_entry.set("e_bebank", bank);//开户银行
ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称
ispp = true;
}else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){
for (DynamicObject bankentry : bankentrys) {
if (assacct.equals(bankentry.getString("shjh_banktype"))) {
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);//账户名称
ispp = true;
break;
}
}
}
if (!ispp) {
log.error("同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)");
JhzjUtils.saveLog(fkBillNum, apimenthod, it_list.toJSONString(), "同步失败,凭证号:" + fkBillNum + "的合作银行类型无匹配数据(供应商)", false, "API");
@ -816,7 +846,7 @@ public class ApplyAdjustBillControler {
* @param ap_payapply 付款申请单的动态对象
* @param uuid 单据号
*/
public static void setPaymentType(DynamicObject ap_payapply, String uuid) {
public void setPaymentType(DynamicObject ap_payapply, String uuid) {
// String paymentTypeName = "1221020200".equals(accountingsubject) ? "对私付款" : "对公付款";
// QFilter Q9 = new QFilter("name", QCP.equals, paymentTypeName);
// DynamicObject paytype = BusinessDataServiceHelper.loadSingle(CAS_PAYMENTBILLTYPE, new QFilter[]{Q9});