diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/VoucherBillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/VoucherBillOperation.java index 14f31e3..c7c963d 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/VoucherBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/VoucherBillOperation.java @@ -22,6 +22,7 @@ public class VoucherBillOperation extends AbstractOperationServicePlugIn impleme String sourcebilltype; DynamicObject bizbillinfo; for (DynamicObject pzinfo : dos) { + pzinfo = BusinessDataServiceHelper.loadSingle(pzinfo.getPkValue(), pzinfo.getDataEntityType().getName(), "id,billno,sourcebill,sourcebilltype"); sourcebillid = pzinfo.getLong("sourcebill"); sourcebilltype = pzinfo.getDynamicObject("sourcebilltype").getString("number"); if(recbillName.equals(sourcebilltype)){ diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java index f5110e6..9b16400 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java @@ -54,6 +54,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { //调用SAP应收已清接口,按照事业部、月份、计划科目汇总金额 Map acctamountMap = getSapARClearedData(); if(acctamountMap == null || acctamountMap.isEmpty()){ + logger.info("未获取到月份、计划科目汇总金额"); return; } ReportDataSDKService reportService = new ReportDataSDKService();//报表服务,用于写入或者查询报表数据 @@ -92,6 +93,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { for(DynamicObject entryinfo : maindimentrys){ accountInfo = entryinfo.getDynamicObject("subjectmem"); if(!accountInfo.getBoolean("isleaf")){ + //非叶子节点的数据,不处理 continue; } accountnum = accountInfo.getString("number"); @@ -105,7 +107,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { JSONObject mmInfo = new JSONObject(); //PLANREFERENCEAMT 计划参考值 ACTMAT 已执行额度 mmInfo.put("templateMetricType","ACTMAT");//度量值预置类型 - mmInfo.put("amount",acctamountMap.get(sybnum+months+accountnum));//写入金额-从SAP接口中汇总 + mmInfo.put("amount",acctamountMap.get(months+accountnum));//写入金额-从SAP接口中汇总 mmInfo.put("amountUnit","one");//金额单位 one元 thousand千元 ten_thousand 万元 mms.add(mmInfo); itemInfo.put("metricMembers",mms);//度量值列表 @@ -144,40 +146,49 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { if(data != null){ JSONArray items = data.getJSONArray("IT_ITEM"); Map acctamountMap = new HashMap<>(); - BigDecimal amount;//根据事业部编号+月份+资金计划科目编号汇总的金额 - String productnum;//品牌 - String sybnum;//事业部编号 + BigDecimal amount;//根据事业部编号+月份+资金计划科目编号汇总的金额-最新修改为根据月份+资金计划科目编号 +// String productnum;//品牌 +// String sybnum;//事业部编号 String months;//月份 String accountnum;//资金计划科目编号 String mapkey;//事业部编号+月份+资金计划科目编号 - DynamicObject ppsybinfo;//品牌和事业部关系对象 +// DynamicObject ppsybinfo;//品牌和事业部关系对象 for (int i = 0; i < items.size(); i++) { sapresult = items.getJSONObject(i); - amount = sapresult.getBigDecimal("DMBTR");//已清金额 - productnum = sapresult.getString("SPART");//产品组 +// productnum = sapresult.getString("SPART");//产品组 months = sapresult.getString("BUDAT");//过账日期 if(JhzjUtils.isEmpty(months)){ + logger.info("SAP过账日期为空"+sapresult.toJSONString()); continue; } accountnum = xdMembersubjectNumber(sapresult); if(JhzjUtils.isEmpty(accountnum)){ + logger.info("SAP应收已清未找到对应资金科目"+sapresult.toJSONString()); continue; } months = JhzjUtils.getFundPeriodBySAPDate(months); - //根据品牌和事业部关系,将该笔金额归属到事业部上 - ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_productgroup.number", QCP.equals, productnum)}); - if(ppsybinfo != null){ - sybnum = ppsybinfo.getDynamicObject("shjh_division").getString("number"); - mapkey = sybnum+months+accountnum; - if(acctamountMap.containsKey(mapkey)){ - acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); - }else{ - acctamountMap.put(mapkey,amount); - } + mapkey = months+accountnum; + amount = sapresult.getBigDecimal("DMBTR");//已清金额 + if(acctamountMap.containsKey(mapkey)){ + acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); }else{ - //TODO 如果品牌没有对应的事业部时,数据放哪里? - logger.info("根据SAP的品牌编号未找到对应的品牌和事业部关系"+productnum); + acctamountMap.put(mapkey,amount); } + + //根据品牌和事业部关系,将该笔金额归属到事业部上 +// ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_productgroup.number", QCP.equals, productnum)}); +// if(ppsybinfo != null){ +// sybnum = ppsybinfo.getDynamicObject("shjh_division").getString("number"); +// mapkey = sybnum+months+accountnum; +// if(acctamountMap.containsKey(mapkey)){ +// acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); +// }else{ +// acctamountMap.put(mapkey,amount); +// } +// }else{ +// //如果品牌没有对应的事业部时,数据放哪里? +// logger.info("根据SAP的品牌编号未找到对应的品牌和事业部关系"+productnum); +// } } return acctamountMap; } @@ -258,10 +269,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { if(customerinfo != null){ custinfofives = customerinfo.getDynamicObjectCollection("shjh_entry_five"); } - DynamicObjectCollection kmcolls;//科目集合 DynamicObjectCollection custfivecolls;//客户组5集合 - DynamicObjectCollection custcolls;//包含客户的集合 - DynamicObjectCollection nocustcolls;//不包含客户的集合 boolean kmbhFlag; boolean custfiveFlag; boolean custFlag; @@ -269,19 +277,9 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { DynamicObject account; for (int i = 0; i < accounts.length; i++) { account = BusinessDataServiceHelper.loadSingle(accounts[i].getPkValue(), payReceName); - kmbhFlag = false; - kmcolls = account.getDynamicObjectCollection("shjh_kjkm");//科目 - if(kmcolls.isEmpty()){ - //当前配置表没有配置科目,即任何科目都可以匹配 - kmbhFlag = true; - }else{ - //科目上配置有参数,需要判断与当前科目是否匹配 - for (DynamicObject kminfo : kmcolls) { - if(kminfo.getDynamicObject("fbasedataid").getString("number").equals(kmbh)){ - kmbhFlag = true; - break; - } - } + kmbhFlag = getDOInFlag(account,"shjh_kjkm",kmbh);//科目 + if(!kmbhFlag){ + continue; } custfiveFlag = false; custfivecolls = account.getDynamicObjectCollection("shjh_khzw");//客户组5 @@ -308,36 +306,17 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { } } } - - custFlag = false; - custcolls = account.getDynamicObjectCollection("shjh_bhkh");//包含客户 - if(custcolls.isEmpty()){ - //当前配置表没有配置客户,即任何客户都可以匹配 - custFlag = true; - }else{ - for (DynamicObject custinfo : custcolls) { - if(custinfo.getDynamicObject("fbasedataid").getString("number").equals(cust)){ - custFlag = true; - break; - } - } + if(!custfiveFlag){ + continue; } - - nocustcolls = account.getDynamicObjectCollection("shjh_bbhkh");//不包含客户 - if(nocustcolls.isEmpty()){ - //当前配置表没有配置客户,即任何客户都可以匹配 - nocustFlag = true; - }else{ - nocustFlag = true; - for (DynamicObject nocustinfo : custcolls) { - if(nocustinfo.getDynamicObject("fbasedataid").getString("number").equals(cust)){ - nocustFlag = false; - break; - } - } + custFlag = getDOInFlag(account,"shjh_bhkh",cust);//包含客户 + if(!custFlag){ + continue; } - if(kmbhFlag && custfiveFlag && custFlag && nocustFlag){ - //所有标记都满足,则返回 + nocustFlag = getDOOutFlag(account,"shjh_bbhkh",cust);//不包含客户 + + if(nocustFlag){ + //最后一个标记满足条件,则返回,否则会继续循环 return account.getDynamicObject("shjh_membersubject").getString("number"); } } @@ -350,6 +329,39 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { return null; } + private boolean getDOInFlag(DynamicObject pzbinfo, String property, String sapvalue){ + DynamicObjectCollection kmcolls = pzbinfo.getDynamicObjectCollection(property);//具体的属性可能是科目、原因码、客户、供应商 + if(kmcolls.isEmpty()){ + //当前配置表没有配置property,即任何property都可以匹配 + return true; + }else{ + //配置有参数,需要判断与当前数据是否匹配 + for (DynamicObject kminfo : kmcolls) { + if(kminfo.getDynamicObject("fbasedataid").getString("number").equals(sapvalue)){ + return true; + } + } + } + return false; + } + + //获取基础资料不包含情况下的标记 + private boolean getDOOutFlag(DynamicObject pzbinfo, String property, String sapvalue){ + DynamicObjectCollection kmcolls = pzbinfo.getDynamicObjectCollection(property);//具体的属性可能是科目、原因码、客户、供应商 + if(kmcolls.isEmpty()){ + //当前配置表没有配置property,即任何property都可以匹配 + return true; + }else{ + //配置有参数,需要判断与当前参数是否匹配,已匹配表示在排除范围内 + for (DynamicObject kminfo : kmcolls) { + if(kminfo.getDynamicObject("fbasedataid").getString("number").equals(sapvalue)){ + return false; + } + } + } + return true; + } + public void addFilterCondition(JSONArray IT_LIST, String field, String low, String high) { JSONObject jsonObject = new JSONObject(); jsonObject.put("FIELD", field); //字段名称 diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java index 1e18f22..96bfacc 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java @@ -51,7 +51,8 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { if(collection.length > 0){ //调用SAP应付未清接口,按照事业部、月份、计划科目汇总金额 Map acctamountMap = getSapAR(); - if(acctamountMap == null){ + if(acctamountMap == null || acctamountMap.isEmpty()){ + logger.info("未获取到月份、计划科目汇总金额"); return; } ReportDataSDKService reportService = new ReportDataSDKService();//报表服务,用于写入或者查询报表数据 @@ -61,7 +62,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { String reportPeriodCode;//编报期间的编号 DynamicObject reportOrg;//编报主体对象 DynamicObject accountInfo;//资金计划科目 - String sybnum;//事业部编号-编报主体的编号 + String sybnum;//编报主体的编号 String months;//月份-科目编制分录中的期间编号 String accountnum;//资金计划科目编号 DynamicObjectCollection maindimentrys; @@ -90,6 +91,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { for(DynamicObject entryinfo : maindimentrys){ accountInfo = entryinfo.getDynamicObject("subjectmem"); if(!accountInfo.getBoolean("isleaf")){ + //非叶子节点的数据,不处理 continue; } accountnum = accountInfo.getString("number"); @@ -103,7 +105,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { JSONObject mmInfo = new JSONObject(); //PLANREFERENCEAMT 计划参考值 ACTMAT 已执行额度 mmInfo.put("templateMetricType","PLANREFERENCEAMT");//度量值预置类型 - mmInfo.put("amount",acctamountMap.get(sybnum+months+accountnum));//写入金额-从SAP接口中获取 + mmInfo.put("amount",acctamountMap.get(months+accountnum));//写入金额-从SAP接口中获取 mmInfo.put("amountUnit","one");//金额单位 one元 thousand千元 ten_thousand 万元 mms.add(mmInfo); itemInfo.put("metricMembers",mms);//度量值列表 @@ -143,46 +145,53 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { List pzblist = getPzb(); if(pzblist.isEmpty()){ //配置表没有对应规则,返回null - logger.info("配置表没有对应规则"); + logger.info("付款申请单配置表没有对应规则"); return null; } JSONArray items = data.getJSONArray("IT_ITEM"); Map acctamountMap = new HashMap<>(); - BigDecimal amount;//根据事业部编号+月份+资金计划科目编号汇总的金额 - String deptnum;//部门编号 - String sybnum;//事业部编号 + BigDecimal amount;//根据事业部编号+月份+资金计划科目编号汇总的金额-最新修改为根据月份+资金计划科目编号 +// String deptnum;//部门编号 +// String sybnum;//事业部编号 String months;//月份 String accountnum;//资金计划科目编号 String mapkey;//事业部编号+月份+资金计划科目编号 - DynamicObject ppsybinfo;//二级部门和事业部关系对象 +// DynamicObject ppsybinfo;//二级部门和事业部关系对象 for (int i = 0; i < items.size(); i++) { sapresult = items.getJSONObject(i); - sapresult.getString("BUKRS");//公司编号 months = sapresult.getString("FAEDT");//到期日 - amount = sapresult.getBigDecimal("WRBTR");//未清金额 - deptnum = sapresult.getString("ZREQ_DEPT");//二级部门,需求部门 +// deptnum = sapresult.getString("ZREQ_DEPT");//二级部门,需求部门 if(JhzjUtils.isEmpty(months)){ + logger.info("SAP到期日为空"+sapresult.toJSONString()); continue; } accountnum = xdMembersubjectNumber(pzblist, sapresult); if(JhzjUtils.isEmpty(accountnum)){ + logger.info("SAP应付凭证未找到对应资金科目"+sapresult.toJSONString()); continue; } months = JhzjUtils.getFundPeriodBySAPDate(months); - //根据二级部门和事业部关系,将该笔金额归属到事业部上 - ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_orgdept.number", QCP.equals, deptnum)}); - if(ppsybinfo != null){ - sybnum = ppsybinfo.getDynamicObject("shjh_division").getString("number"); - mapkey = sybnum+months+accountnum; - if(acctamountMap.containsKey(mapkey)){ - acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); - }else{ - acctamountMap.put(mapkey,amount); - } + mapkey = months+accountnum; + amount = sapresult.getBigDecimal("WRBTR");//未清金额 + if(acctamountMap.containsKey(mapkey)){ + acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); }else{ - //TODO 如果二级部门没有对应的事业部时,数据放哪里? - logger.info("根据SAP的二级部门编号未找到对应的二级部门和事业部关系"+deptnum); + acctamountMap.put(mapkey,amount); } + //根据二级部门和事业部关系,将该笔金额归属到事业部上 +// ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_orgdept.number", QCP.equals, deptnum)}); +// if(ppsybinfo != null){ +// sybnum = ppsybinfo.getDynamicObject("shjh_division").getString("number"); +// mapkey = sybnum+months+accountnum; +// if(acctamountMap.containsKey(mapkey)){ +// acctamountMap.put(mapkey, JhzjUtils.addTwoAmount(amount,acctamountMap.get(mapkey))); +// }else{ +// acctamountMap.put(mapkey,amount); +// } +// }else{ +// //如果二级部门没有对应的事业部时,数据放哪里? +// logger.info("根据SAP的二级部门编号未找到对应的二级部门和事业部关系"+deptnum); +// } } return acctamountMap; } @@ -283,8 +292,8 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { boolean yymFlag; boolean kmbhFlag; boolean orgFlag; - boolean bizbigFlag; - boolean bizsmallFlag; +// boolean bizbigFlag; +// boolean bizsmallFlag; boolean notorgFlag; boolean suppFlag; boolean notsuppFlag; @@ -292,43 +301,44 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { String kdbilltype; boolean billTypeFlag; boolean notbillTypeFlag; + boolean purGroupFlag; + boolean notpurGroupFlag; for (int i = 0; i < pzblist.size(); i++) { pzbinfo = pzblist.get(i); - yymFlag = getDOInFlag(pzbinfo,"shjh_yym",sapresult.getString(""));//原因码 + yymFlag = getDOInFlag(pzbinfo,"shjh_yym",sapresult.getString("RSTGR"));//原因码 if(!yymFlag){ continue; } - kmbhFlag = getDOInFlag(pzbinfo,"shjh_kjkm",sapresult.getString(""));//会计科目 + kmbhFlag = getDOInFlag(pzbinfo,"shjh_kjkm",sapresult.getString("SAKNR"));//会计科目 if(!kmbhFlag){ continue; } - orgFlag = getDOInFlag(pzbinfo,"shjh_companys",sapresult.getString(""));//公司范围 + orgFlag = getDOInFlag(pzbinfo,"shjh_companys",sapresult.getString("BUKRS"));//包含公司范围 if(!orgFlag){ continue; } - suppFlag = getDOInFlag(pzbinfo,"shjh_supplier",sapresult.getString(""));//包含供应商 - if(!suppFlag){ - continue; - } - bizbigFlag = getDOInFlag(pzbinfo,"shjh_bizbig",sapresult.getString(""));//业务大类 - if(!bizbigFlag){ - continue; - } - bizsmallFlag = getDOInFlag(pzbinfo,"shjh_bizsmall",sapresult.getString(""));//业务小类 - if(!bizsmallFlag){ - continue; - } - - notsuppFlag = getDOOutFlag(pzbinfo,"shjh_bbhgys",sapresult.getString(""));//不包含供应商 - if(!notsuppFlag){ - continue; - } - notorgFlag = getDOOutFlag(pzbinfo,"shjh_bbhzz",sapresult.getString(""));//不包含公司 + notorgFlag = getDOOutFlag(pzbinfo,"shjh_bbhzz",sapresult.getString("BUKRS"));//不包含公司范围 if(!notorgFlag){ continue; } + suppFlag = getDOInFlag(pzbinfo,"shjh_supplier",sapresult.getString("LIFNR"));//包含供应商 + if(!suppFlag){ + continue; + } + notsuppFlag = getDOOutFlag(pzbinfo,"shjh_bbhgys",sapresult.getString("LIFNR"));//不包含供应商 + if(!notsuppFlag){ + continue; + } +// bizbigFlag = getDOInFlag(pzbinfo,"shjh_bizbig",sapresult.getString(""));//业务大类 +// if(!bizbigFlag){ +// continue; +// } +// bizsmallFlag = getDOInFlag(pzbinfo,"shjh_bizsmall",sapresult.getString(""));//业务小类 +// if(!bizsmallFlag){ +// continue; +// } // getBooleanFlag(pzbinfo,"shjh_czl",sapresult.getString(""));//是否充值类 -// getBooleanFlag(pzbinfo,"shjh_zxcg",sapresult.getString(""));//是否自行采购 +// getBooleanFlag(pzbinfo,"shjh_zxcg",sapresult.getString("ZZXCG_FLAG"));//是否自行采购 // getBooleanFlag(pzbinfo,"shjh_poisnull",sapresult.getString(""));//PO号是否为空 sapbillno = sapresult.getString("XBLNR");//sap单据号 kdbilltype = JhzjUtils.getBillTypeForSAP(sapbillno);//根据sap单据号获取对应的金蝶单据类型 @@ -340,6 +350,17 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { if(!notbillTypeFlag){ continue; } + + purGroupFlag = getDOInFlag(pzbinfo,"shjh_cgz",sapresult.getString("EKGRP"));//包含采购组 + if(!purGroupFlag){ + continue; + } + notpurGroupFlag = getDOInFlag(pzbinfo,"shjh_bbhcgz",sapresult.getString("EKGRP"));//不包含采购组 + + if(notpurGroupFlag){ + //最后一个标记满足条件,则返回,否则会继续循环 + return pzbinfo.getDynamicObject("shjh_membersubject").getString("number"); + } } return null;