上划和下拨单推送sap凭证优化弹性域

This commit is contained in:
yuxueliang0813 2025-06-26 18:32:23 +08:00
parent 62507c31b0
commit afaca39dd8
2 changed files with 85 additions and 23 deletions

View File

@ -26,7 +26,7 @@ import shjh.jhzj7.fi.fi.utils.domin.ResponseData;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Map;
/** /**
* 下拨处理 * 下拨处理
@ -51,7 +51,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
DynamicObject prinfo; DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
//判断预提记账处理单是否已生成金蝶凭证 //判断下拨处理单是否已生成金蝶凭证
if(!prinfo.getBoolean("isvoucher")){ if(!prinfo.getBoolean("isvoucher")){
e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP"); e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP");
e.setCancel(true); e.setCancel(true);
@ -70,13 +70,13 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
if("sendvoucher".equals(eok)){ if("sendvoucher".equals(eok)){
//推送sap凭证接口 //推送sap凭证接口
DynamicObject[] dos = e.getDataEntities(); DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;//预提记账处理单 DynamicObject prinfo;//下拨处理单
JSONObject sapReturnData; JSONObject sapReturnData;
ResponseData respdata; ResponseData respdata;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
if(!prinfo.getBoolean("shjh_sendsap")){ if(!prinfo.getBoolean("shjh_sendsap")){
//如果预提记账处理单需要生成凭证且未推送sap的才推送sap //如果下拨处理单需要生成凭证且未推送sap的才推送sap
sapReturnData = sendBlueVoucher(prinfo);//蓝单 sapReturnData = sendBlueVoucher(prinfo);//蓝单
if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){ if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){
//解析sap凭证接口返回值 //解析sap凭证接口返回值
@ -85,7 +85,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志"); addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志");
continue; continue;
} }
//推送sap成功后反写已推送标记和sap凭证号和年度至预提单中 //推送sap成功后反写已推送标记和sap凭证号和年度至下拨单中
DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()}); DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()});
this.operationResult.addSuccessPkId(prinfo.getPkValue()); this.operationResult.addSuccessPkId(prinfo.getPkValue());
}else if(sapReturnData != null){ }else if(sapReturnData != null){
@ -98,14 +98,14 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
} }
} }
private JSONObject sendBlueVoucher(DynamicObject prinfo){ private JSONObject sendBlueVoucher(DynamicObject prinfo){
//SAP预提收益凭证接口入参组装和调用 //SAP下拨处理单凭证接口入参组装和调用
JSONObject IS_HEADER = new JSONObject();//抬头 JSONObject IS_HEADER = new JSONObject();//抬头
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具
String companyCode = prinfo.getDynamicObject("company").getString("number"); String companyCode = prinfo.getDynamicObject("company").getString("number");
IS_HEADER.put("BUKRS",companyCode);//公司代码 IS_HEADER.put("BUKRS",companyCode);//公司代码
IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证 IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证
IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("bizdate")));//凭证日期-业务日期 IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("bizdate")));//凭证日期-业务日期
IS_HEADER.put("BUDAT",sdf.format(prinfo.getDate("transbillbookdate")));//过账日期-预提日期 IS_HEADER.put("BUDAT",sdf.format(prinfo.getDate("transbilldate")));//过账日期-下拨日期
String isoCode = prinfo.getDynamicObject("currency").getString("number"); String isoCode = prinfo.getDynamicObject("currency").getString("number");
IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种 IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种
IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位 IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位
@ -121,7 +121,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
//----------------处理详细入参--获取对应金蝶凭证-------------------- //----------------处理详细入参--获取对应金蝶凭证--------------------
JSONArray IT_ITEM = new JSONArray();//详细 JSONArray IT_ITEM = new JSONArray();//详细
QFilter voucherFilters = new QFilter("sourcebill", QCP.equals, prinfo.getPkValue());//凭证源单ID为预提 QFilter voucherFilters = new QFilter("sourcebill", QCP.equals, prinfo.getPkValue());//凭证源单ID为下拨
voucherFilters.and(new QFilter("billstatus",QCP.equals,"C"));//凭证状态已审核 voucherFilters.and(new QFilter("billstatus",QCP.equals,"C"));//凭证状态已审核
DynamicObject gl_voucher = BusinessDataServiceHelper.loadSingle(voucherName, DynamicObject gl_voucher = BusinessDataServiceHelper.loadSingle(voucherName,
"id,description,shjh_fjz,sourcebill,entries,entries.account,entries.assgrp,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype", "id,description,shjh_fjz,sourcebill,entries,entries.account,entries.assgrp,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype",
@ -139,6 +139,8 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
String asstype; String asstype;
DynamicObject glassistbd; DynamicObject glassistbd;
DynamicObject hsxminfo; DynamicObject hsxminfo;
//组装核算维度map
Map<String, String> sapMap = SapUtils.getAsstacttypeMap();
for (DynamicObject entry : entries) { for (DynamicObject entry : entries) {
item = new JSONObject(); item = new JSONObject();
account = entry.getDynamicObject("account");//科目 account = entry.getDynamicObject("account");//科目
@ -180,16 +182,44 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number", hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
item.put("KOSTL",hsxminfo.getString("number"));//成本中心_成本中心 item.put("KOSTL",hsxminfo.getString("number"));//成本中心_成本中心
}else if("f000054".equals(asstype) || "f000014".equals(asstype)){
//原因码 f000014
//付款原因代码 f000054
hsxminfo = QueryServiceHelper.queryOne("gl_cashflowitem", "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
item.put("RSTGR",hsxminfo.getString("number"));
}
}
gl_assist_bd = QueryServiceHelper.query("gl_assist_txt", "asstype,assval",
new QFilter[]{new QFilter("hg.id", QCP.equals, assgrpinfo.getPkValue())});//核算项目组合纵表-文本
for (int j = 0; j < gl_assist_bd.size(); j++) {
glassistbd = gl_assist_bd.get(j);
asstype = glassistbd.getString("asstype");//核算项目类型-对应核算维度的字段名
if("f000054".equals(asstype)){
//原因码 f000054
item.put("RSTGR",glassistbd.getString("assval"));
}else if("f000056".equals(asstype)){
//分配编号 f000056
item.put("ZUONR",glassistbd.getString("assval"));
}else if("f000023".equals(asstype)){
//税码 f000023
item.put("MWSKZ",glassistbd.getString("assval"));
}else if("f000031".equals(asstype)){
//税基 f000031
item.put("FWBAS",glassistbd.getString("assval"));
}else if("f000060".equals(asstype)){
//行项目的参考码
item.put("XREF3",glassistbd.getString("assval"));
}else if(sapMap.containsKey(asstype)){
item.put(sapMap.get(asstype),glassistbd.getString("assval"));
} }
} }
} }
// item.put("RSTGR", "014");//原因代码_原因码
// item.put("SGTXT", SGTXT);//行项目文本_SAP会计科目行项目号
IT_ITEM.add(item); IT_ITEM.add(item);
} }
}else{ }else{
String billNo = prinfo.getString("billno"); String billNo = prinfo.getString("billno");
logger.error("无法获取预提记账处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核"); logger.error("无法获取下拨处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
return null; return null;
} }
//组装参数调用推送sap凭证接口 //组装参数调用推送sap凭证接口

View File

@ -26,7 +26,8 @@ import shjh.jhzj7.fi.fi.utils.domin.ResponseData;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Map;
/** /**
* 上划处理 * 上划处理
@ -51,7 +52,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
DynamicObject prinfo; DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
//判断预提记账处理单是否已生成金蝶凭证 //判断上划处理单是否已生成金蝶凭证
if(!prinfo.getBoolean("isvoucher")){ if(!prinfo.getBoolean("isvoucher")){
e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP"); e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP");
e.setCancel(true); e.setCancel(true);
@ -70,14 +71,14 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
if("sendvoucher".equals(eok)){ if("sendvoucher".equals(eok)){
//推送sap凭证接口 //推送sap凭证接口
DynamicObject[] dos = e.getDataEntities(); DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;//预提记账处理单 DynamicObject prinfo;//上划处理单
JSONObject sapReturnData; JSONObject sapReturnData;
ResponseData respdata; ResponseData respdata;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
if(!prinfo.getBoolean("shjh_sendsap")){ if(!prinfo.getBoolean("shjh_sendsap")){
//如果预提记账处理单需要生成凭证且未推送sap的才推送sap //如果上划处理单需要生成凭证且未推送sap的才推送sap
sapReturnData = sendBlueVoucher(prinfo);//蓝单 sapReturnData = sendBlueVoucher(prinfo);
if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){ if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){
//解析sap凭证接口返回值 //解析sap凭证接口返回值
respdata = ApiUtils.getResponseData(sapReturnData); respdata = ApiUtils.getResponseData(sapReturnData);
@ -85,7 +86,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志"); addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志");
continue; continue;
} }
//推送sap成功后反写已推送标记和sap凭证号和年度至预提单中 //推送sap成功后反写已推送标记和sap凭证号和年度至上划单中
DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()}); DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()});
this.operationResult.addSuccessPkId(prinfo.getPkValue()); this.operationResult.addSuccessPkId(prinfo.getPkValue());
}else if(sapReturnData != null){ }else if(sapReturnData != null){
@ -97,15 +98,16 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
} }
} }
} }
private JSONObject sendBlueVoucher(DynamicObject prinfo){ private JSONObject sendBlueVoucher(DynamicObject prinfo){
//SAP预提收益凭证接口入参组装和调用 //SAP上划处理单凭证接口入参组装和调用
JSONObject IS_HEADER = new JSONObject();//抬头 JSONObject IS_HEADER = new JSONObject();//抬头
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具
String companyCode = prinfo.getDynamicObject("company").getString("number"); String companyCode = prinfo.getDynamicObject("company").getString("number");
IS_HEADER.put("BUKRS",companyCode);//公司代码 IS_HEADER.put("BUKRS",companyCode);//公司代码
IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证 IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证
IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("bizdate")));//凭证日期-业务日期 IS_HEADER.put("BLDAT",sdf.format(prinfo.getDate("bizdate")));//凭证日期-业务日期
IS_HEADER.put("BUDAT",sdf.format(prinfo.getDate("transbillbookdate")));//过账日期-预提日期 IS_HEADER.put("BUDAT",sdf.format(prinfo.getDate("transbilldate")));//过账日期-上划日期
String isoCode = prinfo.getDynamicObject("currency").getString("number"); String isoCode = prinfo.getDynamicObject("currency").getString("number");
IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种 IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种
IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位 IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位
@ -121,7 +123,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
//----------------处理详细入参--获取对应金蝶凭证-------------------- //----------------处理详细入参--获取对应金蝶凭证--------------------
JSONArray IT_ITEM = new JSONArray();//详细 JSONArray IT_ITEM = new JSONArray();//详细
QFilter voucherFilters = new QFilter("sourcebill", QCP.equals, prinfo.getPkValue());//凭证源单ID为预提 QFilter voucherFilters = new QFilter("sourcebill", QCP.equals, prinfo.getPkValue());//凭证源单ID为上划处理
voucherFilters.and(new QFilter("billstatus",QCP.equals,"C"));//凭证状态已审核 voucherFilters.and(new QFilter("billstatus",QCP.equals,"C"));//凭证状态已审核
DynamicObject gl_voucher = BusinessDataServiceHelper.loadSingle(voucherName, DynamicObject gl_voucher = BusinessDataServiceHelper.loadSingle(voucherName,
"id,description,shjh_fjz,sourcebill,entries,entries.account,entries.assgrp,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype", "id,description,shjh_fjz,sourcebill,entries,entries.account,entries.assgrp,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype",
@ -139,6 +141,8 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
String asstype; String asstype;
DynamicObject glassistbd; DynamicObject glassistbd;
DynamicObject hsxminfo; DynamicObject hsxminfo;
//组装核算维度map
Map<String, String> sapMap = SapUtils.getAsstacttypeMap();
for (DynamicObject entry : entries) { for (DynamicObject entry : entries) {
item = new JSONObject(); item = new JSONObject();
account = entry.getDynamicObject("account");//科目 account = entry.getDynamicObject("account");//科目
@ -180,16 +184,44 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number", hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
item.put("KOSTL",hsxminfo.getString("number"));//成本中心_成本中心 item.put("KOSTL",hsxminfo.getString("number"));//成本中心_成本中心
}else if("f000054".equals(asstype) || "f000014".equals(asstype)){
//原因码 f000014
//付款原因代码 f000054
hsxminfo = QueryServiceHelper.queryOne("gl_cashflowitem", "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
item.put("RSTGR",hsxminfo.getString("number"));
}
}
gl_assist_bd = QueryServiceHelper.query("gl_assist_txt", "asstype,assval",
new QFilter[]{new QFilter("hg.id", QCP.equals, assgrpinfo.getPkValue())});//核算项目组合纵表-文本
for (int j = 0; j < gl_assist_bd.size(); j++) {
glassistbd = gl_assist_bd.get(j);
asstype = glassistbd.getString("asstype");//核算项目类型-对应核算维度的字段名
if("f000054".equals(asstype)){
//原因码 f000054
item.put("RSTGR",glassistbd.getString("assval"));
}else if("f000056".equals(asstype)){
//分配编号 f000056
item.put("ZUONR",glassistbd.getString("assval"));
}else if("f000023".equals(asstype)){
//税码 f000023
item.put("MWSKZ",glassistbd.getString("assval"));
}else if("f000031".equals(asstype)){
//税基 f000031
item.put("FWBAS",glassistbd.getString("assval"));
}else if("f000060".equals(asstype)){
//行项目的参考码
item.put("XREF3",glassistbd.getString("assval"));
}else if(sapMap.containsKey(asstype)){
item.put(sapMap.get(asstype),glassistbd.getString("assval"));
} }
} }
} }
// item.put("RSTGR", "014");//原因代码_原因码
// item.put("SGTXT", SGTXT);//行项目文本_SAP会计科目行项目号
IT_ITEM.add(item); IT_ITEM.add(item);
} }
}else{ }else{
String billNo = prinfo.getString("billno"); String billNo = prinfo.getString("billno");
logger.error("无法获取预提记账处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核"); logger.error("无法获取上划处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
return null; return null;
} }
//组装参数调用推送sap凭证接口 //组装参数调用推送sap凭证接口