parent
							
								
									585d18afd8
								
							
						
					
					
						commit
						da79adb2d3
					
				|  | @ -97,23 +97,20 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|                 JSONObject data = new JSONObject(); |                 JSONObject data = new JSONObject(); | ||||||
|                 //抬头 |                 //抬头 | ||||||
|                 JSONObject isHeader = getIS_HEADER(bill); |                 JSONObject isHeader = getIS_HEADER(bill); | ||||||
|                 data.put("IS_HEADER", isHeader); | 
 | ||||||
|                 //金蝶生成的凭证信息 | //				前提:若无凭证,校验 | ||||||
|                 data.put("IT_ITEM", getIT_ITEM(bill, isHeader)); | //				票: | ||||||
|                 Boolean isqingdan = true; | //				1.遍历付款单明细分录,若任意一行中存在SAP凭证号:组装明细XX,拿号调方法(W);遍历票据分录,拿票据号,查收款单(将表头凭证信息)_无行编号,SAP会计科目(从收款单对应凭证取借方),清张金额取票据(转让金额) | ||||||
|                 //来源系统SAP时,清账(SAP凭证数据) | //				2.若无SAP凭证号:联查凭证(遍历,借方iteam{SGTXT:凭证行摘要},遍历票_查收款单(将表头凭证信息):行没有) | ||||||
|                 if ("A".equals(shjhSourcesystem)) { | //				非票: | ||||||
|                     // 票据信息 | //				1.来源SAP :(iteam{}) | ||||||
|                     DynamicObjectCollection casDraftinfos = bill.getDynamicObjectCollection("cas_draftinfo"); | //				2.else | ||||||
|                     if (!casDraftinfos.isEmpty()) { |                 QFilter q1 = new QFilter("sourcebill", QCP.equals, bill.getPkValue()); | ||||||
|                         data.put("IT_ITEM", null); |                 QFilter q2 = new QFilter("billstatus",QCP.equals,"C"); | ||||||
|                         isqingdan = false; |                 DynamicObject gl_voucher = BusinessDataServiceHelper.loadSingle("gl_voucher", | ||||||
|                     } |                         "id,description,shjh_fjz,sourcebill,entries,entries.account,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype,entries.assgrp", | ||||||
|                     //清账数据,参考《IT_CLEAR》,仅清账需要输入 |                         new QFilter[]{q1, q2}); | ||||||
|                     data.put("IT_CLEAR", getIT_CLEAR(bill)); |                 if (null == gl_voucher) { | ||||||
|                 } |  | ||||||
|                 //不清却为空,校验 |  | ||||||
|                 if (isqingdan && data.getJSONArray("IT_ITEM").isEmpty()) { |  | ||||||
|                     OperateErrorInfo operateErrorInfo = new OperateErrorInfo(); |                     OperateErrorInfo operateErrorInfo = new OperateErrorInfo(); | ||||||
|                     operateErrorInfo.setMessage("推送SAP凭证接口失败,原因:金蝶凭证未生成或未审核"); |                     operateErrorInfo.setMessage("推送SAP凭证接口失败,原因:金蝶凭证未生成或未审核"); | ||||||
|                     operateErrorInfo.setErrorLevel(ErrorLevel.Error.name()); |                     operateErrorInfo.setErrorLevel(ErrorLevel.Error.name()); | ||||||
|  | @ -121,6 +118,601 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|                     this.operationResult.addErrorInfo(operateErrorInfo); |                     this.operationResult.addErrorInfo(operateErrorInfo); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|  |                 JSONArray IT_CLEAR = new JSONArray();//清账数据,参考《IT_CLEAR》,仅清账需要输入 | ||||||
|  |                 JSONArray IT_ITEM = new JSONArray(); | ||||||
|  |                 // 票据信息 | ||||||
|  |                 DynamicObjectCollection casDraftinfos = bill.getDynamicObjectCollection("cas_draftinfo"); | ||||||
|  |                 if (!casDraftinfos.isEmpty()) { | ||||||
|  |                     isHeader.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|  |                     boolean isSAP = false; | ||||||
|  |                     //明细 | ||||||
|  |                     DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entry"); | ||||||
|  |                     for (DynamicObject entry : entrys) { | ||||||
|  |                         String shjhVouchernums = entry.getString("shjh_vouchernums"); | ||||||
|  |                         if (StringUtils.isNotEmpty(shjhVouchernums)) { | ||||||
|  |                             isSAP = true; | ||||||
|  |                             break; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     //若任意一行中存在SAP凭证号:clear:遍历明细,拿号调方法(W);遍历票据分录,拿票据号,查收款单(将表头凭证信息)_无行编号, | ||||||
|  |                     // SAP会计科目(从收款单对应凭证取借方),清张金额取票据(转让金额) | ||||||
|  | 
 | ||||||
|  |                     if (isSAP) { | ||||||
|  |                         //1.遍历明细 | ||||||
|  |                         for (DynamicObject entry : entrys) { | ||||||
|  |                             String BUKRS  = ""; | ||||||
|  |                             if (null != bill.getDynamicObject("openorg")) { | ||||||
|  |                                 BUKRS = bill.getDynamicObject("openorg").getString("number"); | ||||||
|  |                             } | ||||||
|  |                             if (StringUtils.isEmpty(BUKRS)) { | ||||||
|  |                                 BUKRS = bill.getDynamicObject("org").getString("number"); | ||||||
|  |                             } | ||||||
|  |                             //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee | ||||||
|  |                             String payeetype = bill.getString("payeetype");//收款人类型 | ||||||
|  |                             AtomicReference<String> customerOrsupnum = new AtomicReference<>(getCustomerOrSupplierNumber(payeetype, bill, "payee")); | ||||||
|  |                             JSONObject jsonObject = new JSONObject(); | ||||||
|  |                             jsonObject.put("BUKRS", BUKRS);//公司代码 | ||||||
|  |                             jsonObject.put("BELNR", entry.getString("shjh_vouchernums"));//会计凭证编号 | ||||||
|  |                             jsonObject.put("GJAHR", entry.getString("shjh_voucheryear"));//会计年度 | ||||||
|  |                             jsonObject.put("BUZEI", entry.getString("shjh_voucherentrynum"));//行编号 | ||||||
|  |                             switch (payeetype) { | ||||||
|  |                                 case "bd_customer": | ||||||
|  |                                     jsonObject.put("KUNNR", customerOrsupnum); // 客户编号_收款人id(付款单payee) | ||||||
|  |                                     break; | ||||||
|  |                                 case "bd_supplier": | ||||||
|  |                                     jsonObject.put("LIFNR", customerOrsupnum); // 供应商编号_收款人id(付款单payee) | ||||||
|  |                                     break; | ||||||
|  |                             } | ||||||
|  |                             String HKONT = ""; | ||||||
|  |                             DynamicObject shjhSapkjkm = entry.getDynamicObject("shjh_sapkjkm");//sap会计科目 | ||||||
|  |                             if (null != shjhSapkjkm) { | ||||||
|  |                                 HKONT = shjhSapkjkm.getString("number");//SAP会计科目 | ||||||
|  |                             } | ||||||
|  |                             jsonObject.put("HKONT", HKONT);//总账科目 | ||||||
|  |                             jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(HKONT));//特殊总账标识 | ||||||
|  |                             jsonObject.put("DMBTR1", entry.getBigDecimal("e_actamt"));//清账金额_实付金额 | ||||||
|  |                             IT_CLEAR.add(jsonObject); | ||||||
|  |                         } | ||||||
|  |                         //2.遍历票 | ||||||
|  |                         for (DynamicObject casDraftinfo : casDraftinfos) { | ||||||
|  |                             DynamicObject draftbillinfo = casDraftinfo.getDynamicObject("draftbillinfo");//结算号 | ||||||
|  |                             QFilter qFilter = new QFilter("cas_draftinfo.draftbillinfo.id", QCP.equals, draftbillinfo.getLong("id")); | ||||||
|  |                             //根据票据号过滤收款单 | ||||||
|  |                             DynamicObject casRecbill = BusinessDataServiceHelper.loadSingle("cas_recbill", qFilter.toArray()); | ||||||
|  |                             if (null != casRecbill) { | ||||||
|  |                                 JSONObject jsonObject = new JSONObject(); | ||||||
|  |                                 String BUKRS  = ""; | ||||||
|  |                                 if (null != bill.getDynamicObject("openorg")) { | ||||||
|  |                                     BUKRS = bill.getDynamicObject("openorg").getString("number"); | ||||||
|  |                                 } | ||||||
|  |                                 if (StringUtils.isEmpty(BUKRS)) { | ||||||
|  |                                     BUKRS = bill.getDynamicObject("org").getString("number"); | ||||||
|  |                                     jsonObject.put("BUKRS", BUKRS);//公司代码 | ||||||
|  |                                     jsonObject.put("BELNR", casRecbill.getString("shjh_vouchernum"));//会计凭证编号 | ||||||
|  |                                     jsonObject.put("GJAHR", casRecbill.getString("shjh_sapfiscalyear"));//会计年度 | ||||||
|  | 
 | ||||||
|  |                                     //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee | ||||||
|  |                                     String payeetype = bill.getString("payeetype");//收款人类型 | ||||||
|  |                                     AtomicReference<String> customerOrsupnum = new AtomicReference<>(getCustomerOrSupplierNumber(payeetype, bill, "payee")); | ||||||
|  |                                     switch (payeetype) { | ||||||
|  |                                         case "bd_customer": | ||||||
|  |                                             jsonObject.put("KUNNR", customerOrsupnum); // 客户编号_收款人id(付款单payee) | ||||||
|  |                                             break; | ||||||
|  | //                                        case "bd_supplier": | ||||||
|  | //                                            jsonObject.put("LIFNR", customerOrsupnum); // 供应商编号_收款人id(付款单payee) | ||||||
|  | //                                            break; | ||||||
|  |                                     } | ||||||
|  |                                     //查收款对应凭证 | ||||||
|  |                                     QFilter q3 = new QFilter("sourcebill", QCP.equals, casRecbill.getPkValue()); | ||||||
|  |                                     QFilter q4 = new QFilter("billstatus",QCP.equals,"C"); | ||||||
|  |                                     DynamicObject gl_vouchers = BusinessDataServiceHelper.loadSingle("gl_voucher", | ||||||
|  |                                             "id,description,shjh_fjz,sourcebill,entries,entries.account,entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription,vouchertype,entries.assgrp", | ||||||
|  |                                             new QFilter[]{q3, q4}); | ||||||
|  |                                     //SAP会计科目(从收款单对应凭证取借方) | ||||||
|  |                                     if (null != gl_vouchers) { | ||||||
|  |                                         DynamicObjectCollection entries = gl_vouchers.getDynamicObjectCollection("entries"); | ||||||
|  |                                         for (int i = 0; i < entries.size(); i++) { | ||||||
|  |                                             DynamicObject entry = entries.get(i); | ||||||
|  |                                             String entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                                             if ("1".equals(entrydc)) { | ||||||
|  |                                                 //判断完借方,然后判断I下标,i==0,Hang ->001  i==1,Hang ->002 | ||||||
|  | //                                                if (i == 0) { | ||||||
|  | //                                                    jsonObject.put("BUZEI", "001");//todo:行编号_凭证明细序号0001 | ||||||
|  | //                                                } else if (i == 1) { | ||||||
|  | //                                                    jsonObject.put("BUZEI", "002"); | ||||||
|  | //                                                } | ||||||
|  |                                                 jsonObject.put("BUZEI", "001");//todo:行编号_凭证明细序号0001 | ||||||
|  |                                                 DynamicObject account = entry.getDynamicObject("account");//科目 | ||||||
|  |                                                 //核算维度(弹性域)_客户 | ||||||
|  |                                                 if (null != account) { | ||||||
|  |                                                     jsonObject.put("HKONT", account.getString("number")); // 总账科目_科目(凭证分录account) | ||||||
|  |                                                     jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(account.getString("number")));//特殊总账标识 | ||||||
|  |                                                 } | ||||||
|  |                                                 DynamicObject assgrpinfo = entry.getDynamicObject("assgrp");//核算维度(弹性域) | ||||||
|  |                                                 if(assgrpinfo != null){ | ||||||
|  |                                                     DynamicObjectCollection gl_assist_bd = QueryServiceHelper.query("gl_assist_bd", "asstype,assval", | ||||||
|  |                                                             new QFilter[]{new QFilter("hg.id", QCP.equals, assgrpinfo.getPkValue())}); | ||||||
|  |                                                     String asstype; | ||||||
|  |                                                     DynamicObject glassistbd; | ||||||
|  |                                                     DynamicObject hsxminfo; | ||||||
|  |                                                     for (int j = 0; j < gl_assist_bd.size(); j++) { | ||||||
|  |                                                         glassistbd = gl_assist_bd.get(j); | ||||||
|  |                                                         asstype = glassistbd.getString("asstype");//核算项目类型-对应核算维度的字段名 | ||||||
|  |                                                         if("f000057".equals(asstype) || "f0001".equals(asstype)){ | ||||||
|  |                                                             //t_bas_flex_property 表中获取对应编号 客户-获利段 f0001 客户编码 f000057 | ||||||
|  |                                                             hsxminfo = QueryServiceHelper.queryOne("bd_customer", "id,name,number", | ||||||
|  |                                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                                             jsonObject.put("KUNNR", hsxminfo.getString("number"));//客户 | ||||||
|  |                                                         } | ||||||
|  |                                                     } | ||||||
|  |                                                 } | ||||||
|  |                                             } | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  |                                     //清张金额取票据(转让金额) | ||||||
|  |                                     jsonObject.put("DMBTR1",casDraftinfo.getBigDecimal("transamount"));//清账金额 | ||||||
|  |                                 } | ||||||
|  |                                 IT_CLEAR.add(jsonObject); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     //若无SAP凭证号:联查凭证(遍历,借方iteam{SGTXT:凭证行摘要},遍历票_查收款单(将表头凭证信息):行没有) | ||||||
|  |                     else { | ||||||
|  | 
 | ||||||
|  |                         DynamicObjectCollection entries = gl_voucher.getDynamicObjectCollection("entries"); | ||||||
|  |                         for (DynamicObject entry : entries) { | ||||||
|  |                             String entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                             if ("1".equals(entrydc)) { | ||||||
|  |                                 //iteam | ||||||
|  |                                 //todo:对header 凭证类型重新赋值 | ||||||
|  |                                 isHeader.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|  |                                 if(!JhzjUtils.isEmpty(gl_voucher.getString("description"))){ | ||||||
|  |                                     isHeader.put("BKTXT", gl_voucher.getString("description"));//凭证抬头文本-从金蝶凭证中获取 | ||||||
|  |                                 } | ||||||
|  |                                 DynamicObject assgrpinfo; | ||||||
|  |                                 String asstype; | ||||||
|  |                                 DynamicObject glassistbd; | ||||||
|  |                                 DynamicObject hsxminfo; | ||||||
|  |                                 JSONObject IT_ITEMS = new JSONObject(); | ||||||
|  |                                 DynamicObject account = entry.getDynamicObject("account");//科目 | ||||||
|  |                                 if (null != account) { | ||||||
|  |                                     IT_ITEMS.put("HKONT", account.getString("number")); // 总账科目_科目(凭证分录account) | ||||||
|  |                                     IT_ITEMS.put("UMSKZ", JhzjUtils.getUMSKZ(account.getString("number")));//特殊总账标识 | ||||||
|  |                                 } | ||||||
|  |                                 IT_ITEMS.put("SGTXT", entry.getString("edescription"));//SAP凭证行摘要 | ||||||
|  |                                 //凭证反记账标识判断,如果凭证上已勾选,则传X给sap | ||||||
|  |                                 if(gl_voucher.getBoolean("shjh_fjz")){ | ||||||
|  |                                     IT_ITEMS.put("XNEGP", "X"); | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 assgrpinfo = entry.getDynamicObject("assgrp");//核算维度(弹性域) | ||||||
|  |                                 if(assgrpinfo != null){ | ||||||
|  |                                     DynamicObjectCollection gl_assist_bd = QueryServiceHelper.query("gl_assist_bd", "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("f000057".equals(asstype) || "f0001".equals(asstype)){ | ||||||
|  |                                             //t_bas_flex_property 表中获取对应编号 客户-获利段 f0001 客户编码 f000057 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_customer", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("KUNNR",hsxminfo.getString("number"));//客户 | ||||||
|  |                                         }else if("f000005".equals(asstype)){ | ||||||
|  |                                             //供应商 f000005 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_supplier", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("LIFNR",hsxminfo.getString("number"));//供应商 | ||||||
|  |                                         }else if("f000012".equals(asstype)){ | ||||||
|  |                                             //利润中心 f000012 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("shjh_pc", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("PRCTR",hsxminfo.getString("number"));//利润中心_利润中心 | ||||||
|  |                                         }else if("f000011".equals(asstype)){ | ||||||
|  |                                             //成本中心 f000011 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bos_costcenter", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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 | ||||||
|  |                                             IT_ITEMS.put("RSTGR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000056".equals(asstype)){ | ||||||
|  |                                             //分配编号 f000056 | ||||||
|  |                                             IT_ITEMS.put("ZUONR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000023".equals(asstype)){ | ||||||
|  |                                             //税码 f000023 | ||||||
|  |                                             IT_ITEMS.put("MWSKZ",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000031".equals(asstype)){ | ||||||
|  |                                             //税基 f000031 | ||||||
|  |                                             IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000060".equals(asstype)){ | ||||||
|  |                                             //行项目的参考码 | ||||||
|  |                                             IT_ITEMS.put("XREF3",glassistbd.getString("assval")); | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 // 获取借方金额 | ||||||
|  |                                 BigDecimal debitlocal = (BigDecimal) entry.get("debitlocal");//借方 | ||||||
|  |                                 // 获取贷方金额 | ||||||
|  |                                 BigDecimal creditlocal = (BigDecimal) entry.get("creditlocal");//贷方 | ||||||
|  | 
 | ||||||
|  |                                 entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                                 // 进行空值检查 | ||||||
|  |                                 if (debitlocal != null && creditlocal != null && entrydc != null) { | ||||||
|  |                                     BigDecimal amountToPut = BigDecimal.ZERO; | ||||||
|  |                                     // 获取分录方向 若A,只拿一方,当前拿的借方 | ||||||
|  |                                     boolean isEntryDC1 = "1".equals(entrydc); | ||||||
|  |                                     boolean isEntryDCNegative1 = "-1".equals(entrydc); | ||||||
|  |                                     if (isEntryDC1) { | ||||||
|  |                                         amountToPut = debitlocal; | ||||||
|  |                                     } else if (isEntryDCNegative1) { | ||||||
|  |                                         amountToPut = creditlocal.negate();//相反 | ||||||
|  |                                     } | ||||||
|  |                                     IT_ITEMS.put("DMBTR", String.valueOf(amountToPut)); | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 IT_ITEM.add(IT_ITEMS); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                         //2.遍历票 | ||||||
|  |                         for (DynamicObject casDraftinfo : casDraftinfos) { | ||||||
|  |                             DynamicObject draftbillinfo = casDraftinfo.getDynamicObject("draftbillinfo");//结算号 | ||||||
|  |                             QFilter qFilter = new QFilter("cas_draftinfo.draftbillinfo.id", QCP.equals, draftbillinfo.getLong("id")); | ||||||
|  |                             //根据票据号过滤收款单 | ||||||
|  |                             DynamicObject casRecbill = BusinessDataServiceHelper.loadSingle("cas_recbill", qFilter.toArray()); | ||||||
|  |                             if (null != casRecbill) { | ||||||
|  |                                 JSONObject jsonObject = new JSONObject(); | ||||||
|  |                                 String BUKRS  = ""; | ||||||
|  |                                 if (null != bill.getDynamicObject("openorg")) { | ||||||
|  |                                     BUKRS = bill.getDynamicObject("openorg").getString("number"); | ||||||
|  |                                 } | ||||||
|  |                                 if (StringUtils.isEmpty(BUKRS)) { | ||||||
|  |                                     BUKRS = bill.getDynamicObject("org").getString("number"); | ||||||
|  |                                 } | ||||||
|  |                                 jsonObject.put("BUKRS", BUKRS);//公司代码 | ||||||
|  |                                 jsonObject.put("BELNR", casRecbill.getString("shjh_vouchernum"));//会计凭证编号 | ||||||
|  |                                 jsonObject.put("GJAHR", casRecbill.getString("shjh_sapfiscalyear"));//会计年度 | ||||||
|  | 
 | ||||||
|  |                                 //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee | ||||||
|  |                                 String payeetype = bill.getString("payeetype");//收款人类型 | ||||||
|  |                                 AtomicReference<String> customerOrsupnum = new AtomicReference<>(getCustomerOrSupplierNumber(payeetype, bill, "payee")); | ||||||
|  |                                 switch (payeetype) { | ||||||
|  |                                     case "bd_customer": | ||||||
|  |                                         jsonObject.put("KUNNR", customerOrsupnum); // 客户编号_收款人id(付款单payee) | ||||||
|  |                                         break; | ||||||
|  |                                     case "bd_supplier": | ||||||
|  |                                         jsonObject.put("LIFNR", customerOrsupnum); // 供应商编号_收款人id(付款单payee) | ||||||
|  |                                         break; | ||||||
|  |                                 } | ||||||
|  |                                 //查收款对应凭证 | ||||||
|  |                                 QFilter q3 = new QFilter("sourcebill", QCP.equals, casRecbill.getPkValue()); | ||||||
|  |                                 QFilter q4 = new QFilter("billstatus",QCP.equals,"C"); | ||||||
|  |                                 DynamicObject gl_vouchers = BusinessDataServiceHelper.loadSingle("gl_voucher", | ||||||
|  |                                         "id,description,shjh_fjz,sourcebill,entries,entries.account," + | ||||||
|  |                                                 "entries.debitlocal,entries.creditlocal,entries.entrydc,entries.edescription," + | ||||||
|  |                                                 "vouchertype,entries.assgrp,entries.seq", | ||||||
|  |                                         new QFilter[]{q3, q4}); | ||||||
|  |                                 //SAP会计科目(从收款单对应凭证取借方) | ||||||
|  |                                 if (null != gl_vouchers) { | ||||||
|  |                                     DynamicObjectCollection entriess = gl_vouchers.getDynamicObjectCollection("entries"); | ||||||
|  |                                     for (DynamicObject entry : entriess) { | ||||||
|  |                                         String entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                                         if ("1".equals(entrydc)) { | ||||||
|  |                                             DynamicObject account = entry.getDynamicObject("account");//科目 | ||||||
|  |                                             if (null != account) { | ||||||
|  | //                                                jsonObject.put("BUZEI", entry.get("seq"));//行编号_凭证明细序号 | ||||||
|  |                                                 jsonObject.put("BUZEI", "001");//行编号_凭证明细序号 | ||||||
|  |                                                 jsonObject.put("HKONT", account.getString("number")); // 总账科目_科目(凭证分录account) | ||||||
|  |                                                 jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(account.getString("number")));//特殊总账标识 | ||||||
|  |                                             } | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  |                                 } | ||||||
|  |                                 //清张金额取票据(转让金额) | ||||||
|  |                                 jsonObject.put("DMBTR1",casDraftinfo.getBigDecimal("transamount"));//清账金额 | ||||||
|  |                                 IT_CLEAR.add(jsonObject); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }else { | ||||||
|  |     //				非票: | ||||||
|  |     //				1.来源SAP :(付款单查凭证:遍历分录:if贷iteam{钱取贷方} 遍历明细clear{}) | ||||||
|  |     //				2.else(item:付款单联查凭证:遍历分录{原逻辑}) | ||||||
|  | 
 | ||||||
|  |                     isHeader.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|  |                     boolean isSAP = false; | ||||||
|  |                     //明细 | ||||||
|  |                     DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entry"); | ||||||
|  |                     for (DynamicObject entry : entrys) { | ||||||
|  |                         String shjhVouchernums = entry.getString("shjh_vouchernums"); | ||||||
|  |                         if (StringUtils.isNotEmpty(shjhVouchernums)) { | ||||||
|  |                             isSAP = true; | ||||||
|  |                             break; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     if (isSAP) { | ||||||
|  |                         //付款单查凭证:遍历分录:if贷iteam{钱取贷方} 遍历明细clear{} | ||||||
|  |                         DynamicObjectCollection entries = gl_voucher.getDynamicObjectCollection("entries"); | ||||||
|  |                         for (DynamicObject entry : entries) { | ||||||
|  |                             String entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                             if ("-1".equals(entrydc)) { | ||||||
|  |                                 //iteam | ||||||
|  |                                 //todo:对header 凭证类型重新赋值 | ||||||
|  |                                 isHeader.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|  |                                 if(!JhzjUtils.isEmpty(gl_voucher.getString("description"))){ | ||||||
|  |                                     isHeader.put("BKTXT", gl_voucher.getString("description"));//凭证抬头文本-从金蝶凭证中获取 | ||||||
|  |                                 } | ||||||
|  |                                 DynamicObject assgrpinfo; | ||||||
|  |                                 String asstype; | ||||||
|  |                                 DynamicObject glassistbd; | ||||||
|  |                                 DynamicObject hsxminfo; | ||||||
|  |                                 JSONObject IT_ITEMS = new JSONObject(); | ||||||
|  |                                 DynamicObject account = entry.getDynamicObject("account");//科目 | ||||||
|  |                                 if (null != account) { | ||||||
|  |                                     IT_ITEMS.put("HKONT", account.getString("number")); // 总账科目_科目(凭证分录account) | ||||||
|  |                                     IT_ITEMS.put("UMSKZ", JhzjUtils.getUMSKZ(account.getString("number")));//特殊总账标识 | ||||||
|  |                                 } | ||||||
|  |                                 IT_ITEMS.put("SGTXT", entry.getString("edescription"));//SAP凭证行摘要 | ||||||
|  |                                 //凭证反记账标识判断,如果凭证上已勾选,则传X给sap | ||||||
|  |                                 if(gl_voucher.getBoolean("shjh_fjz")){ | ||||||
|  |                                     IT_ITEMS.put("XNEGP", "X"); | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 assgrpinfo = entry.getDynamicObject("assgrp");//核算维度(弹性域) | ||||||
|  |                                 if(assgrpinfo != null){ | ||||||
|  |                                     DynamicObjectCollection gl_assist_bd = QueryServiceHelper.query("gl_assist_bd", "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("f000057".equals(asstype) || "f0001".equals(asstype)){ | ||||||
|  |                                             //t_bas_flex_property 表中获取对应编号 客户-获利段 f0001 客户编码 f000057 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_customer", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("KUNNR",hsxminfo.getString("number"));//客户 | ||||||
|  |                                         }else if("f000005".equals(asstype)){ | ||||||
|  |                                             //供应商 f000005 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_supplier", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("LIFNR",hsxminfo.getString("number"));//供应商 | ||||||
|  |                                         }else if("f000012".equals(asstype)){ | ||||||
|  |                                             //利润中心 f000012 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("shjh_pc", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("PRCTR",hsxminfo.getString("number"));//利润中心_利润中心 | ||||||
|  |                                         }else if("f000011".equals(asstype)){ | ||||||
|  |                                             //成本中心 f000011 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bos_costcenter", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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 | ||||||
|  |                                             IT_ITEMS.put("RSTGR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000056".equals(asstype)){ | ||||||
|  |                                             //分配编号 f000056 | ||||||
|  |                                             IT_ITEMS.put("ZUONR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000023".equals(asstype)){ | ||||||
|  |                                             //税码 f000023 | ||||||
|  |                                             IT_ITEMS.put("MWSKZ",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000031".equals(asstype)){ | ||||||
|  |                                             //税基 f000031 | ||||||
|  |                                             IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000060".equals(asstype)){ | ||||||
|  |                                             //行项目的参考码 | ||||||
|  |                                             IT_ITEMS.put("XREF3",glassistbd.getString("assval")); | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 // 获取借方金额 | ||||||
|  |                                 BigDecimal debitlocal = (BigDecimal) entry.get("debitlocal");//借方 | ||||||
|  |                                 // 获取贷方金额 | ||||||
|  |                                 BigDecimal creditlocal = (BigDecimal) entry.get("creditlocal");//贷方 | ||||||
|  | 
 | ||||||
|  |                                 entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                                 // 进行空值检查 | ||||||
|  |                                 if (debitlocal != null && creditlocal != null && entrydc != null) { | ||||||
|  |                                     BigDecimal amountToPut = BigDecimal.ZERO; | ||||||
|  |                                     // 获取分录方向 若A,只拿一方,当前拿的借方 | ||||||
|  |                                     boolean isEntryDC1 = "1".equals(entrydc); | ||||||
|  |                                     boolean isEntryDCNegative1 = "-1".equals(entrydc); | ||||||
|  |                                     if (isEntryDC1) { | ||||||
|  |                                         amountToPut = debitlocal; | ||||||
|  |                                     } else if (isEntryDCNegative1) { | ||||||
|  |                                         amountToPut = creditlocal.negate();//相反 | ||||||
|  |                                     } | ||||||
|  |                                     IT_ITEMS.put("DMBTR", String.valueOf(amountToPut)); | ||||||
|  |                                 } | ||||||
|  |                                 IT_ITEM.add(IT_ITEMS); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                         //遍历明细clear{} | ||||||
|  |                         for (DynamicObject entry : entrys) { | ||||||
|  |                             String BUKRS  = ""; | ||||||
|  |                             if (null != bill.getDynamicObject("openorg")) { | ||||||
|  |                                 BUKRS = bill.getDynamicObject("openorg").getString("number"); | ||||||
|  |                             } | ||||||
|  |                             if (StringUtils.isEmpty(BUKRS)) { | ||||||
|  |                                 BUKRS = bill.getDynamicObject("org").getString("number"); | ||||||
|  |                             } | ||||||
|  |                             //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee | ||||||
|  |                             String payeetype = bill.getString("payeetype");//收款人类型 | ||||||
|  |                             AtomicReference<String> customerOrsupnum = new AtomicReference<>(getCustomerOrSupplierNumber(payeetype, bill, "payee")); | ||||||
|  |                             JSONObject jsonObject = new JSONObject(); | ||||||
|  |                             jsonObject.put("BUKRS", BUKRS);//公司代码 | ||||||
|  |                             jsonObject.put("BELNR", entry.getString("shjh_vouchernums"));//会计凭证编号 | ||||||
|  |                             jsonObject.put("GJAHR", entry.getString("shjh_voucheryear"));//会计年度 | ||||||
|  |                             jsonObject.put("BUZEI", entry.getString("shjh_voucherentrynum"));//行编号 | ||||||
|  |                             switch (payeetype) { | ||||||
|  |                                 case "bd_customer": | ||||||
|  |                                     jsonObject.put("KUNNR", customerOrsupnum); // 客户编号_收款人id(付款单payee) | ||||||
|  |                                     break; | ||||||
|  |                                 case "bd_supplier": | ||||||
|  |                                     jsonObject.put("LIFNR", customerOrsupnum); // 供应商编号_收款人id(付款单payee) | ||||||
|  |                                     break; | ||||||
|  |                             } | ||||||
|  |                             String HKONT = ""; | ||||||
|  |                             DynamicObject shjhSapkjkm = entry.getDynamicObject("shjh_sapkjkm");//sap会计科目 | ||||||
|  |                             if (null != shjhSapkjkm) { | ||||||
|  |                                 HKONT = shjhSapkjkm.getString("number");//SAP会计科目 | ||||||
|  |                             } | ||||||
|  |                             jsonObject.put("HKONT", HKONT);//总账科目 | ||||||
|  |                             jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(HKONT));//特殊总账标识 | ||||||
|  |                             jsonObject.put("DMBTR1", entry.getBigDecimal("e_actamt"));//清账金额_实付金额 | ||||||
|  |                             IT_CLEAR.add(jsonObject); | ||||||
|  |                         } | ||||||
|  |                     }else { | ||||||
|  |                         //else(item:付款单联查凭证:遍历分录{原逻辑}) | ||||||
|  |                         DynamicObjectCollection entries = gl_voucher.getDynamicObjectCollection("entries"); | ||||||
|  |                         for (DynamicObject entry : entries) { | ||||||
|  |                             String entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  | //                            if ("-1".equals(entrydc)) { | ||||||
|  |                                 //iteam | ||||||
|  |                                 //todo:对header 凭证类型重新赋值 | ||||||
|  |                                 isHeader.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|  |                                 if(!JhzjUtils.isEmpty(gl_voucher.getString("description"))){ | ||||||
|  |                                     isHeader.put("BKTXT", gl_voucher.getString("description"));//凭证抬头文本-从金蝶凭证中获取 | ||||||
|  |                                 } | ||||||
|  |                                 DynamicObject assgrpinfo; | ||||||
|  |                                 String asstype; | ||||||
|  |                                 DynamicObject glassistbd; | ||||||
|  |                                 DynamicObject hsxminfo; | ||||||
|  |                                 JSONObject IT_ITEMS = new JSONObject(); | ||||||
|  |                                 DynamicObject account = entry.getDynamicObject("account");//科目 | ||||||
|  |                                 if (null != account) { | ||||||
|  |                                     IT_ITEMS.put("HKONT", account.getString("number")); // 总账科目_科目(凭证分录account) | ||||||
|  |                                     IT_ITEMS.put("UMSKZ", JhzjUtils.getUMSKZ(account.getString("number")));//特殊总账标识 | ||||||
|  |                                 } | ||||||
|  |                                 IT_ITEMS.put("SGTXT", entry.getString("edescription"));//SAP凭证行摘要 | ||||||
|  |                                 //凭证反记账标识判断,如果凭证上已勾选,则传X给sap | ||||||
|  |                                 if(gl_voucher.getBoolean("shjh_fjz")){ | ||||||
|  |                                     IT_ITEMS.put("XNEGP", "X"); | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 assgrpinfo = entry.getDynamicObject("assgrp");//核算维度(弹性域) | ||||||
|  |                                 if(assgrpinfo != null){ | ||||||
|  |                                     DynamicObjectCollection gl_assist_bd = QueryServiceHelper.query("gl_assist_bd", "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("f000057".equals(asstype) || "f0001".equals(asstype)){ | ||||||
|  |                                             //t_bas_flex_property 表中获取对应编号 客户-获利段 f0001 客户编码 f000057 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_customer", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("KUNNR",hsxminfo.getString("number"));//客户 | ||||||
|  |                                         }else if("f000005".equals(asstype)){ | ||||||
|  |                                             //供应商 f000005 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bd_supplier", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("LIFNR",hsxminfo.getString("number"));//供应商 | ||||||
|  |                                         }else if("f000012".equals(asstype)){ | ||||||
|  |                                             //利润中心 f000012 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("shjh_pc", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.put("PRCTR",hsxminfo.getString("number"));//利润中心_利润中心 | ||||||
|  |                                         }else if("f000011".equals(asstype)){ | ||||||
|  |                                             //成本中心 f000011 | ||||||
|  |                                             hsxminfo = QueryServiceHelper.queryOne("bos_costcenter", "id,name,number", | ||||||
|  |                                                     new QFilter[]{new QFilter("id", QCP.equals, glassistbd.getLong("assval"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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"))});//维度值 | ||||||
|  |                                             IT_ITEMS.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 | ||||||
|  |                                             IT_ITEMS.put("RSTGR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000056".equals(asstype)){ | ||||||
|  |                                             //分配编号 f000056 | ||||||
|  |                                             IT_ITEMS.put("ZUONR",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000023".equals(asstype)){ | ||||||
|  |                                             //税码 f000023 | ||||||
|  |                                             IT_ITEMS.put("MWSKZ",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000031".equals(asstype)){ | ||||||
|  |                                             //税基 f000031 | ||||||
|  |                                             IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); | ||||||
|  |                                         }else if("f000060".equals(asstype)){ | ||||||
|  |                                             //行项目的参考码 | ||||||
|  |                                             IT_ITEMS.put("XREF3",glassistbd.getString("assval")); | ||||||
|  |                                         } | ||||||
|  |                                     } | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                                 // 获取借方金额 | ||||||
|  |                                 BigDecimal debitlocal = (BigDecimal) entry.get("debitlocal");//借方 | ||||||
|  |                                 // 获取贷方金额 | ||||||
|  |                                 BigDecimal creditlocal = (BigDecimal) entry.get("creditlocal");//贷方 | ||||||
|  | 
 | ||||||
|  |                                 entrydc = (String) entry.get("entrydc");//分录方向(1.借方,-1.贷方) | ||||||
|  |                                 // 进行空值检查 | ||||||
|  |                                 if (debitlocal != null && creditlocal != null && entrydc != null) { | ||||||
|  |                                     BigDecimal amountToPut = BigDecimal.ZERO; | ||||||
|  |                                     // 获取分录方向 若A,只拿一方,当前拿的借方 | ||||||
|  |                                     boolean isEntryDC1 = "1".equals(entrydc); | ||||||
|  |                                     boolean isEntryDCNegative1 = "-1".equals(entrydc); | ||||||
|  |                                     if (isEntryDC1) { | ||||||
|  |                                         amountToPut = debitlocal; | ||||||
|  |                                     } else if (isEntryDCNegative1) { | ||||||
|  |                                         amountToPut = creditlocal.negate();//相反 | ||||||
|  |                                     } | ||||||
|  |                                     IT_ITEMS.put("DMBTR", String.valueOf(amountToPut)); | ||||||
|  |                                 } | ||||||
|  |                                 IT_ITEM.add(IT_ITEMS); | ||||||
|  | //                            } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 data.put("IS_HEADER", isHeader); | ||||||
|  |                 //金蝶生成的凭证信息 | ||||||
|  |                 data.put("IT_ITEM", IT_ITEM); | ||||||
|  |                 //清账(SAP凭证数据) | ||||||
|  |                 data.put("IT_CLEAR",IT_CLEAR); | ||||||
|  | 
 | ||||||
|                 //一次性供应商或客户信息(仅需要填写) |                 //一次性供应商或客户信息(仅需要填写) | ||||||
|                 String type = bill.getString("payeetype"); |                 String type = bill.getString("payeetype"); | ||||||
|                 long id = Long.parseLong(bill.getString("payee")); |                 long id = Long.parseLong(bill.getString("payee")); | ||||||
|  | @ -220,6 +812,7 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
| 
 | 
 | ||||||
|     private JSONArray getIT_ITEM(DynamicObject bill , JSONObject IS_HEADER) { |     private JSONArray getIT_ITEM(DynamicObject bill , JSONObject IS_HEADER) { | ||||||
|         String shjhSourcesystem = bill.getString("shjh_sourcesystem");//来源系统 |         String shjhSourcesystem = bill.getString("shjh_sourcesystem");//来源系统 | ||||||
|  |         //跨主体调拨 | ||||||
|         //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee |         //客户(bd_customer)||供应商(bd_supplier)  收款人id:payee | ||||||
| //        String payeetype = bill.getString("payeetype");//收款人类型 | //        String payeetype = bill.getString("payeetype");//收款人类型 | ||||||
| //        String customerOrsupnum = getCustomerOrSupplierNumber(payeetype, bill,"payee"); | //        String customerOrsupnum = getCustomerOrSupplierNumber(payeetype, bill,"payee"); | ||||||
|  | @ -265,7 +858,7 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|             //todo:对header 凭证类型重新赋值 |             //todo:对header 凭证类型重新赋值 | ||||||
|             IS_HEADER.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 |             IS_HEADER.put("BLART", gl_voucher.getString("vouchertype.number"));//凭证类型-从金蝶凭证中获取 | ||||||
|             if(!JhzjUtils.isEmpty(gl_voucher.getString("description"))){ |             if(!JhzjUtils.isEmpty(gl_voucher.getString("description"))){ | ||||||
|                 IS_HEADER.put("BKTXT", gl_voucher.getString("description"));//凭证抬头文本-从金蝶凭证中获取 |                 IS_HEADER.put("BKTXT", gl_voucher.getString("description"));//凭证抬头文本-从金蝶凭证中L获取 | ||||||
|             } |             } | ||||||
|             DynamicObjectCollection entries = gl_voucher.getDynamicObjectCollection("entries"); |             DynamicObjectCollection entries = gl_voucher.getDynamicObjectCollection("entries"); | ||||||
|             if (!entries.isEmpty()) { |             if (!entries.isEmpty()) { | ||||||
|  | @ -351,6 +944,9 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|                             }else if("f000031".equals(asstype)){ |                             }else if("f000031".equals(asstype)){ | ||||||
|                                 //税基 f000031 |                                 //税基 f000031 | ||||||
|                                 IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); |                                 IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); | ||||||
|  |                             }else if("f000060".equals(asstype)){ | ||||||
|  |                                 //行项目的参考码 | ||||||
|  |                                 IT_ITEMS.put("XREF3",glassistbd.getString("assval")); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  | @ -374,6 +970,7 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|                         } |                         } | ||||||
|                         IT_ITEMS.put("DMBTR", String.valueOf(amountToPut)); |                         IT_ITEMS.put("DMBTR", String.valueOf(amountToPut)); | ||||||
|                     } |                     } | ||||||
|  | 
 | ||||||
|                     IT_ITEM.add(IT_ITEMS); |                     IT_ITEM.add(IT_ITEMS); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  | @ -419,57 +1016,56 @@ public class PaybillPushSapOperation extends AbstractOperationServicePlugIn impl | ||||||
|             IT_CLEAR.add(jsonObject); |             IT_CLEAR.add(jsonObject); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // 票据信息 | //        // 票据信息 | ||||||
|         DynamicObjectCollection casDraftinfos = bill.getDynamicObjectCollection("cas_draftinfo"); | //        DynamicObjectCollection casDraftinfos = bill.getDynamicObjectCollection("cas_draftinfo"); | ||||||
|         if (!casDraftinfos.isEmpty()) { | //        if (!casDraftinfos.isEmpty()) { | ||||||
|             // 缓存所有票据号码:draftbillno | //            // 缓存所有票据号码:draftbillno | ||||||
|             List<String> draftbillnos = new ArrayList<>(); | //            List<String> draftbillnos = new ArrayList<>(); | ||||||
|             for (DynamicObject casDraftinfo : casDraftinfos) { | //            for (DynamicObject casDraftinfo : casDraftinfos) { | ||||||
|                 draftbillnos.add(casDraftinfo.getString("draftbillno"));//票据号码 | //                draftbillnos.add(casDraftinfo.getString("draftbillno"));//票据号码 | ||||||
|             } | //            } | ||||||
|             // 批量查询收款单:casRecbills | //            // 批量查询收款单:casRecbills | ||||||
|             QFilter q2 = new QFilter("openorg.number", QCP.equals, BUKRS); | //            QFilter q2 = new QFilter("openorg.number", QCP.equals, BUKRS); | ||||||
|             List<QFilter> allFilters = new ArrayList<>(); | //            List<QFilter> allFilters = new ArrayList<>(); | ||||||
|             for (String d : draftbillnos) { | //            for (String d : draftbillnos) { | ||||||
|                 allFilters.add(new QFilter("cas_draftinfo.draftbillno", QCP.equals, d)); | //                allFilters.add(new QFilter("cas_draftinfo.draftbillno", QCP.equals, d)); | ||||||
|             } | //            } | ||||||
|             allFilters.add(q2); | //            allFilters.add(q2); | ||||||
|             QFilter[] filtersArray = allFilters.toArray(new QFilter[0]); | //            QFilter[] filtersArray = allFilters.toArray(new QFilter[0]); | ||||||
|             DynamicObject[] casRecbills = BusinessDataServiceHelper.load("cas_recbill", | //            DynamicObject[] casRecbills = BusinessDataServiceHelper.load("cas_recbill", | ||||||
|                     "id,cas_draftinfo,cas_draftinfo.draftbillno,openorg,shjh_vouchernum,shjh_sapfiscalyear,shjh_sapline" + | //                    "id,cas_draftinfo,cas_draftinfo.draftbillno,openorg,shjh_vouchernum,shjh_sapfiscalyear,shjh_sapline" + | ||||||
|                             "payertype,payer,entry,entry.shjh_accountsap,entry.e_actamt", filtersArray); | //                            "payertype,payer,entry,entry.shjh_accountsap,entry.e_actamt", filtersArray); | ||||||
|             // 1. 过滤出收款单, 2. 遍历收款单明细, 3. 组装IT_CLEAR数据 | //            // 1. 过滤出收款单, 2. 遍历收款单明细, 3. 组装IT_CLEAR数据 | ||||||
|             for (DynamicObject casRecbill : casRecbills) { | //            for (DynamicObject casRecbill : casRecbills) { | ||||||
|                 DynamicObjectCollection entryss = casRecbill.getDynamicObjectCollection("entry"); | //                DynamicObjectCollection entryss = casRecbill.getDynamicObjectCollection("entry"); | ||||||
|                 for (DynamicObject entr : entryss) { | //                for (DynamicObject entr : entryss) { | ||||||
|                     JSONObject jsonObject = new JSONObject(); | //                    JSONObject jsonObject = new JSONObject(); | ||||||
|                     String payertype = casRecbill.getString("payertype"); | //                    String payertype = casRecbill.getString("payertype"); | ||||||
|                     customerOrsupnum.set(getCustomerOrSupplierNumber(payertype, casRecbill, "payer")); | //                    customerOrsupnum.set(getCustomerOrSupplierNumber(payertype, casRecbill, "payer")); | ||||||
|                     jsonObject.put("BUKRS", BUKRS); | //                    jsonObject.put("BUKRS", BUKRS); | ||||||
|                     jsonObject.put("BELNR", casRecbill.getString("shjh_vouchernum")); | //                    jsonObject.put("BELNR", casRecbill.getString("shjh_vouchernum")); | ||||||
|                     jsonObject.put("GJAHR", casRecbill.getString("shjh_sapfiscalyear")); | //                    jsonObject.put("GJAHR", casRecbill.getString("shjh_sapfiscalyear")); | ||||||
|                     jsonObject.put("BUZEI", casRecbill.getString("shjh_sapline")); | //                    jsonObject.put("BUZEI", casRecbill.getString("shjh_sapline")); | ||||||
|                     switch (payertype) { | //                    switch (payertype) { | ||||||
|                         case "bd_customer": | //                        case "bd_customer": | ||||||
|                             jsonObject.put("KUNNR", customerOrsupnum); | //                            jsonObject.put("KUNNR", customerOrsupnum); | ||||||
|                             break; | //                            break; | ||||||
|                         case "bd_supplier": | //                        case "bd_supplier": | ||||||
|                             jsonObject.put("LIFNR", customerOrsupnum); | //                            jsonObject.put("LIFNR", customerOrsupnum); | ||||||
|                             break; | //                            break; | ||||||
|                     } | //                    } | ||||||
|                     String HKONT = ""; | //                    String HKONT = ""; | ||||||
|                     DynamicObject shjhSapkjkm = entr.getDynamicObject("shjh_accountsap"); | //                    DynamicObject shjhSapkjkm = entr.getDynamicObject("shjh_accountsap"); | ||||||
|                     if (shjhSapkjkm != null) { | //                    if (shjhSapkjkm != null) { | ||||||
|                         HKONT = shjhSapkjkm.getString("number"); | //                        HKONT = shjhSapkjkm.getString("number"); | ||||||
|                     } | //                    } | ||||||
|                     jsonObject.put("HKONT", HKONT);//科目编号 | //                    jsonObject.put("HKONT", HKONT);//科目编号 | ||||||
|                     jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(HKONT));//特殊总账标识 | //                    jsonObject.put("UMSKZ", JhzjUtils.getUMSKZ(HKONT));//特殊总账标识 | ||||||
|                     jsonObject.put("DMBTR", entr.getBigDecimal("e_actamt")); | //                    jsonObject.put("DMBTR", entr.getBigDecimal("e_actamt")); | ||||||
|                     IT_CLEAR.add(jsonObject); | //                    IT_CLEAR.add(jsonObject); | ||||||
|                 } | //                } | ||||||
|             } | //            } | ||||||
| 
 | //        } | ||||||
|         } |  | ||||||
|         return IT_CLEAR; |         return IT_CLEAR; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -464,6 +464,9 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl | ||||||
|                                 }else if("f000031".equals(asstype)){ |                                 }else if("f000031".equals(asstype)){ | ||||||
|                                     //税基 f000031 |                                     //税基 f000031 | ||||||
|                                     IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); |                                     IT_ITEMS.put("FWBAS",glassistbd.getString("assval")); | ||||||
|  |                                 }else if("f000060".equals(asstype)){ | ||||||
|  |                                     //行项目的参考码 f000031 | ||||||
|  |                                     IT_ITEMS.put("XREF3",glassistbd.getString("assval")); | ||||||
|                                 } |                                 } | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue