From afaca39dd82a94b9778774049c523598a61fc4bd Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Thu, 26 Jun 2025 18:32:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E5=88=92=E5=92=8C=E4=B8=8B=E6=8B=A8?= =?UTF-8?q?=E5=8D=95=E6=8E=A8=E9=80=81sap=E5=87=AD=E8=AF=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=BC=B9=E6=80=A7=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/TransdownbillOperation.java | 52 +++++++++++++---- .../plugin/operate/TransupbillOperation.java | 56 +++++++++++++++---- 2 files changed, 85 insertions(+), 23 deletions(-) diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransdownbillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransdownbillOperation.java index a4e80e6..322667a 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransdownbillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransdownbillOperation.java @@ -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 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凭证接口 diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransupbillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransupbillOperation.java index 1b042f5..a32dbc9 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransupbillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/TransupbillOperation.java @@ -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 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凭证接口