sap拉取优化

This commit is contained in:
yuxueliang0813 2025-04-27 16:03:35 +08:00
parent d876933b50
commit bdba53f5e6
5 changed files with 52 additions and 30 deletions

View File

@ -50,7 +50,7 @@ public class SappzFormPlugin extends AbstractFormPlugin {
//调用SAP查询凭证接口
case "querysappz":
//过滤条件
DynamicObject shjhOrgfield = (DynamicObject) this.getModel().getValue("shjh_org");//公司
DynamicObject[] shjhOrgfield = (DynamicObject[]) this.getModel().getValue("shjh_org");//公司
String payablevouchernumber = (String) this.getModel().getValue("shjh_payablevouchernumber");//SAP应付凭证号
String accountingsubjects = (String) this.getModel().getValue("shjh_accountingsubjects");//会计科目编号
Date postingdate_start = (Date) this.getModel().getValue("shjh_postingdate_start");//SAP应付凭过账日期(开始)
@ -65,17 +65,20 @@ public class SappzFormPlugin extends AbstractFormPlugin {
// 日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
JSONArray IT_LIST = new JSONArray();
// 添加公司过滤条件
// 添加公司过滤条件--改成多选
if (shjhOrgfield != null) {
addFilterCondition(IT_LIST, "BUKRS", shjhOrgfield.getString("number"), shjhOrgfield.getString("number"));
for (DynamicObject doinfo : shjhOrgfield) {
addFilterDumpCondition(IT_LIST, "BUKRS", doinfo.getString("number"), doinfo.getString("number"));
}
}
// 添加SAP应付凭证号过滤条件
if (StringUtils.isNotEmpty(payablevouchernumber)) {
addFilterCondition(IT_LIST, "BELNR", payablevouchernumber, payablevouchernumber);
}
// 添加会计科目编号过滤条件
// 添加会计科目编号过滤条件--改成多选
if (StringUtils.isNotEmpty(accountingsubjects)) {
addFilterCondition(IT_LIST, "HKONT", accountingsubjects, accountingsubjects);
addFilterDumpCondition(IT_LIST, "HKONT", accountingsubjects, accountingsubjects);
}
// 添加SAP应付凭过账日期过滤条件
if (postingdate_start != null || postingdate_endda != null) {
@ -791,7 +794,17 @@ public class SappzFormPlugin extends AbstractFormPlugin {
jsonObject.put("SIGN", "I"); // I:包含 E排除
jsonObject.put("LOW", low); // LOW 枚举字段所代表值的区间开始值
jsonObject.put("HIGH", high); // HIGH枚举字段所代表值的区间结束值
jsonObject.put("OPTION", "BT"); // 默认BT
jsonObject.put("OPTION", "BT"); // 默认BT-EQ
IT_LIST.add(jsonObject);
}
public static void addFilterDumpCondition(JSONArray IT_LIST, String field, String low, String high) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("FIELD", field); // 字段
jsonObject.put("SIGN", "I"); // I:包含 E排除
jsonObject.put("LOW", low); // LOW 枚举字段所代表值的区间开始值
jsonObject.put("HIGH", high); // HIGH枚举字段所代表值的区间结束值
jsonObject.put("OPTION", "EQ"); // 默认EQ
IT_LIST.add(jsonObject);
}

View File

@ -43,7 +43,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im
private static final String hadleClearStatusByID = "update tk_shjh_clear_account set fk_shjh_changereason='手工清账',fk_shjh_clearstatus='A',fbillstatus='C' where fid=?;";
private static final String updateSap = "update tk_shjh_clear_account set fk_shjh_clearstatus='A',fk_shjh_pzh=?,fk_shjh_year=? where fid=?;";
private static final String updateSrcClear = "update tk_shjh_clear_account set fk_shjh_iscopy=1 where fid=?;";
private static final String updateUnClearStatus = "update tk_shjh_clear_account set fbillstatus='D',fk_shjh_clearstatus='C',fk_shjh_unpzh=? where fid=?;";
private static final String updateUnClearStatus = "update tk_shjh_clear_account set fbillstatus='D',fk_shjh_clearstatus='C',fk_shjh_unclearpzh=? where fid=?;";
private static final String updateDetailStatusByBill = "update tk_shjh_clear_acctdetail set fbillstatus='D' where fk_shjh_clearbillid=?;";
private static final String updateDetailStatusByID = "update tk_shjh_clear_acctdetail set fbillstatus='D' where fid=?;";
private static final String updateDetailClearStatus = "update tk_shjh_clear_acctdetail set fbillstatus='D',fk_shjh_clearstatus='C' where fk_shjh_clearbillid=?;";
@ -533,7 +533,12 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im
DynamicObject customerinfo = prinfo.getDynamicObject("shjh_customer");//客户对象
IS_HEADER.put("BUKRS",companyCode);//公司代码
IS_HEADER.put("BLART","AB");//凭证类型-清账凭证
IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("shjh_bizdate")));//凭证日期-业务日期
//业务日期来源于收款单的流水交易日期如果日期为空则使用单据创建日期
if(prinfo.getDate("shjh_bizdate") == null){
IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("createtime")));//凭证日期
}else{
IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("shjh_bizdate")));//凭证日期
}
IS_HEADER.put("BUDAT",sdf.format(new Date()));//过账日期-当前日期
String isoCode = prinfo.getDynamicObject("shjh_currency").getString("number");
IS_HEADER.put("WAERS",JhzjUtils.getCurrencyCode(isoCode));//币种

View File

@ -73,31 +73,32 @@ public class PayBillSubmitOperation extends AbstractOperationServicePlugIn imple
if (!tempData1.isEmpty()) {
JSONObject tempData = tempData1.getJSONObject(0);
if (null != tempData) {
String applyamount = tempData.getString("applyamount");//付款金额_actpayamt
BigDecimal actpayamt = bill.getBigDecimal("actpayamt");
// applyamount 转换为 BigDecimal
String applyamount = tempData.getString("applyamount");//费控-付款金额_actpayamt
BigDecimal actpayamt = bill.getBigDecimal("actpayamt");//金蝶-付款金额
// applyamount 转换为 BigDecimal
BigDecimal applyAmountBigDecimal = new BigDecimal(applyamount);
int comparisonResult = applyAmountBigDecimal.compareTo(actpayamt);
if (comparisonResult != 0) {
this.addErrorMessage(entity,"费控校验未通过不能提交:付款金额与付款单付款金额不一致");
this.addErrorMessage(entity,"费控校验未通过不能提交:付款金额不一致");
return;
}
String assacct = tempData.getString("assacct");//收款银行账号_payeebanknum
String payeebanknum = bill.getString("payeebanknum");
String assacct = tempData.getString("assacct");//费控-收款银行账号_payeebanknum
String payeebanknum = bill.getString("payeebanknum");//金蝶-收款银行账号
if (!assacct.equals(payeebanknum)) {
this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行账号与付款单银行账号不一致");
this.addErrorMessage(entity,"费控校验未通过不能提交:收款账号不一致");
return;
}
String bebank = tempData.getString("bebank");//收款银行名称_payeebankname
String payeebankname = bill.getString("payeebankname");
if (!bebank.equals(payeebankname)) {
// String bebank = tempData.getString("bebank");//收款银行名称-费控是银行简称先不校验
// String payeebankname = bill.getString("payeebankname");
// if (!bebank.equals(payeebankname)) {
// this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行名称与付款单银行名称不一致");
// isMatch = false;
}
String bebankNum = tempData.getString("bebankNum");//收款联行号_recbanknumber
String recbanknumber = bill.getString("recbanknumber");
// return;
// }
String bebankNum = tempData.getString("bebankNum");//费控-收款银行联行号_recbanknumber
String recbanknumber = bill.getString("payeebank.number");//金蝶-收款银行联行号
if (!bebankNum.equals(recbanknumber)) {
this.addErrorMessage(entity,"费控校验未通过不能提交:收款联行号与付款单联行号不一致");
this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行联行号不一致");
return;
}
}

View File

@ -113,9 +113,9 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
if (!"D".equals(type)) {
this.addErrorMessage(dataEntity, "" + billNo + "】未付款,无法推送。");
}
String voucherNum = (String) rowDataModel.getValue(KEY_VOUCHER_NUM);
// String voucherNum = (String) rowDataModel.getValue(KEY_VOUCHER_NUM);
boolean result = (boolean) rowDataModel.getValue(KEY_IS_PUSH_SAP);
if (!voucherNum.isEmpty() || result) {
if (result) {
this.addErrorMessage(dataEntity, "" + billNo + "】已推送SAP请勿重复推送。");
}
boolean isVoucher = (boolean) rowDataModel.getValue(KEY_IS_VOUCHER);
@ -362,17 +362,18 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
IT_ITEMS.put("RSTGR", RSTGR);
IT_ITEMS.put("KOSTL", KOSTL);
IT_ITEMS.put("PRCTR", PRCTR);
//设置汇票字段
if (sourceBillType.equals("cdm_receivablebill")) {
IT_ITEMS.put("UMSKZ", "W");//特殊总账标识
//源单类型是收票登记时设置汇票字段
if ("cdm_receivablebill".equals(sourceBillType)) {
IT_ITEMS.put("UMSKZ", "W");//特殊总账标识-汇票时需设置为W
DynamicObjectCollection draftInfo = recBill.getDynamicObjectCollection("cas_draftinfo");
if (null != draftInfo && draftInfo.size() != 0) {
//应收应付票据登记单
DynamicObject draftBillInfo = draftInfo.get(0).getDynamicObject("draftbillinfo");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date draftBillExpireDate = draftBillInfo.getDate("draftbillexpiredate");
IT_ITEMS.put("ZFBDT", draftBillExpireDate !=null ? format.format(draftBillExpireDate) : "");//汇票到期日
Date issueDate = draftBillInfo.getDate("issuedate");
IT_ITEMS.put("WDATE",issueDate !=null ? format.format(issueDate) : "");//汇票签发日期
IT_ITEMS.put("WDATE",issueDate !=null ? format.format(issueDate) : "");//汇票签发日期-出票日期
IT_ITEMS.put("WNAME",draftBillInfo.getString("drawername"));//出票人
IT_ITEMS.put("WBZOG",draftBillInfo.getString("receivername"));//受票人
IT_ITEMS.put("WBANK",draftBillInfo.getString("draftbillno"));//票据号
@ -494,7 +495,7 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
JSONObject item = new JSONObject();
//公共字段设置
item.put("BUKRS", entry.getString("realreccompany.number"));//公司代码
item.put("BUKRS", entry.getString("e_settleorg.number"));//公司代码-分录结算组织编号
item.put("BELNR", entry.getString("shjh_verificationnum"));//会计凭证编号-原预付款和借款单的凭证号
item.put("GJAHR", entry.getString("shjh_fiscalyear"));//会计年度-原预付款和借款单的会计年度
//行编号--收款即清账的情况仅限于和费控的预付款和员工还款此时不需要传入行号

View File

@ -45,7 +45,9 @@ public class RecRedPushOperation extends AbstractOperationServicePlugIn implemen
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
//预处理单据属性把后续校验会用到的字段尤其是二开字段在这里加载一下
e.getFieldKeys().add(RedPushValidator.KEY_HOT_ACCOUNT);
e.getFieldKeys().add(RedPushValidator.IS_PUSH_SAP);
}