上划和下拨单推送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.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
* 下拨处理
@ -51,7 +51,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
//判断预提记账处理单是否已生成金蝶凭证
//判断下拨处理单是否已生成金蝶凭证
if(!prinfo.getBoolean("isvoucher")){
e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP");
e.setCancel(true);
@ -70,13 +70,13 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
if("sendvoucher".equals(eok)){
//推送sap凭证接口
DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;//预提记账处理单
DynamicObject prinfo;//下拨处理单
JSONObject sapReturnData;
ResponseData respdata;
for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
if(!prinfo.getBoolean("shjh_sendsap")){
//如果预提记账处理单需要生成凭证且未推送sap的才推送sap
//如果下拨处理单需要生成凭证且未推送sap的才推送sap
sapReturnData = sendBlueVoucher(prinfo);//蓝单
if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){
//解析sap凭证接口返回值
@ -85,7 +85,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志");
continue;
}
//推送sap成功后反写已推送标记和sap凭证号和年度至预提单中
//推送sap成功后反写已推送标记和sap凭证号和年度至下拨单中
DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()});
this.operationResult.addSuccessPkId(prinfo.getPkValue());
}else if(sapReturnData != null){
@ -98,14 +98,14 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
}
}
private JSONObject sendBlueVoucher(DynamicObject prinfo){
//SAP预提收益凭证接口入参组装和调用
//SAP下拨处理单凭证接口入参组装和调用
JSONObject IS_HEADER = new JSONObject();//抬头
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具
String companyCode = prinfo.getDynamicObject("company").getString("number");
IS_HEADER.put("BUKRS",companyCode);//公司代码
IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证
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");
IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种
IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位
@ -121,7 +121,7 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
//----------------处理详细入参--获取对应金蝶凭证--------------------
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"));//凭证状态已审核
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",
@ -139,6 +139,8 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
String asstype;
DynamicObject glassistbd;
DynamicObject hsxminfo;
//组装核算维度map
Map<String, String> sapMap = SapUtils.getAsstacttypeMap();
for (DynamicObject entry : entries) {
item = new JSONObject();
account = entry.getDynamicObject("account");//科目
@ -180,16 +182,44 @@ public class TransdownbillOperation extends AbstractOperationServicePlugIn imple
hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
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);
}
}else{
String billNo = prinfo.getString("billno");
logger.error("无法获取预提记账处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
logger.error("无法获取下拨处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
return null;
}
//组装参数调用推送sap凭证接口

View File

@ -26,7 +26,8 @@ import shjh.jhzj7.fi.fi.utils.domin.ResponseData;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
/**
* 上划处理
@ -51,7 +52,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
//判断预提记账处理单是否已生成金蝶凭证
//判断上划处理单是否已生成金蝶凭证
if(!prinfo.getBoolean("isvoucher")){
e.setCancelMessage(prinfo.getString("billno") + "未生成金蝶凭证无法推送SAP");
e.setCancel(true);
@ -70,14 +71,14 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
if("sendvoucher".equals(eok)){
//推送sap凭证接口
DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;//预提记账处理单
DynamicObject prinfo;//上划处理单
JSONObject sapReturnData;
ResponseData respdata;
for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName());
if(!prinfo.getBoolean("shjh_sendsap")){
//如果预提记账处理单需要生成凭证且未推送sap的才推送sap
sapReturnData = sendBlueVoucher(prinfo);//蓝单
//如果上划处理单需要生成凭证且未推送sap的才推送sap
sapReturnData = sendBlueVoucher(prinfo);
if(sapReturnData != null && "0".equals(sapReturnData.getString("code"))){
//解析sap凭证接口返回值
respdata = ApiUtils.getResponseData(sapReturnData);
@ -85,7 +86,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
addErrorInfo(prinfo,"SAP凭证接口返回值为空详见接口日志");
continue;
}
//推送sap成功后反写已推送标记和sap凭证号和年度至预提单中
//推送sap成功后反写已推送标记和sap凭证号和年度至上划单中
DB.update(DBRoute.of("fi"), updateVoucherFlag, new Object[]{respdata.getNumber(),respdata.getYear(),prinfo.getPkValue()});
this.operationResult.addSuccessPkId(prinfo.getPkValue());
}else if(sapReturnData != null){
@ -97,15 +98,16 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
}
}
}
private JSONObject sendBlueVoucher(DynamicObject prinfo){
//SAP预提收益凭证接口入参组装和调用
//SAP上划处理单凭证接口入参组装和调用
JSONObject IS_HEADER = new JSONObject();//抬头
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化工具
String companyCode = prinfo.getDynamicObject("company").getString("number");
IS_HEADER.put("BUKRS",companyCode);//公司代码
IS_HEADER.put("BLART","SA");//凭证类型-总账类凭证
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");
IS_HEADER.put("WAERS", JhzjUtils.getCurrencyCode(isoCode));//币种
IS_HEADER.put("XBLNR",prinfo.getString("billno"));//参考凭证号-单据编号 固定长度16位
@ -121,7 +123,7 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
//----------------处理详细入参--获取对应金蝶凭证--------------------
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"));//凭证状态已审核
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",
@ -139,6 +141,8 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
String asstype;
DynamicObject glassistbd;
DynamicObject hsxminfo;
//组装核算维度map
Map<String, String> sapMap = SapUtils.getAsstacttypeMap();
for (DynamicObject entry : entries) {
item = new JSONObject();
account = entry.getDynamicObject("account");//科目
@ -180,16 +184,44 @@ public class TransupbillOperation extends AbstractOperationServicePlugIn impleme
hsxminfo = QueryServiceHelper.queryOne(ccName, "id,name,number",
new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值
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);
}
}else{
String billNo = prinfo.getString("billno");
logger.error("无法获取预提记账处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
logger.error("无法获取上划处理单[" + billNo + "]关联的凭证信息,凭证不存在或未审核");
return null;
}
//组装参数调用推送sap凭证接口