上划和下拨单推送sap凭证优化弹性域
This commit is contained in:
		
							parent
							
								
									62507c31b0
								
							
						
					
					
						commit
						afaca39dd8
					
				|  | @ -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凭证接口 | ||||
|  |  | |||
|  | @ -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凭证接口 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue