From 63608afa17c13293cdf05f4367437f4eadeb9341 Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Thu, 14 Aug 2025 21:51:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E9=87=91=E8=AE=A1=E5=88=92=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/task/FundPlanCollectionTask.java | 18 +++-- .../fi/plugin/task/FundPlanPaymentTask.java | 76 ++++++++++++++++--- 2 files changed, 77 insertions(+), 17 deletions(-) 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 95d094d..8f0cfe9 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java @@ -54,7 +54,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { //调用SAP应收已清接口,按照事业部、月份、计划科目汇总金额 Map acctamountMap = getSapARClearedData(); if(acctamountMap == null || acctamountMap.isEmpty()){ - logger.info("未获取到月份、计划科目汇总金额"); + logger.info("SAP未获取到月份、计划科目汇总金额"); return; } ReportDataSDKService reportService = new ReportDataSDKService();//报表服务,用于写入或者查询报表数据 @@ -75,10 +75,10 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { for(DynamicObject doinfo : collection){ doinfo = BusinessDataServiceHelper.loadSingle(doinfo.getPkValue(),entityName); billno = doinfo.getString("billno"); - logger.info("资金计划编制单号"+billno); + logger.info("SAP资金计划编制单号"+billno); maindimentrys = doinfo.getDynamicObjectCollection("maindimentry");//主维度分录 if(maindimentrys.isEmpty()){ - logger.info("资金计划编制单主维度分录为空,不继续反写"+billno); + logger.info("SAP资金计划编制单主维度分录为空,不继续反写"+billno); continue; } json_obj = new JSONObject(); @@ -114,9 +114,9 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { //PLANREFERENCEAMT 计划参考值 ACTMAT 已执行额度 mmInfo.put("templateMetricType","ACTMAT");//度量值预置类型 mmInfo.put("amount",acctamountMap.get(months+accountnum));//写入金额-从SAP接口中汇总 - logger.info(billno+"收款计划实际数入参 months "+months); - logger.info(billno+"收款计划实际数入参 accountnum "+accountnum); - logger.info(billno+"收款计划实际数"+acctamountMap.get(months+accountnum)); + logger.info(billno+"SAP收款计划实际数入参 months "+months); + logger.info(billno+"SAP收款计划实际数入参 accountnum "+accountnum); + logger.info(billno+"SAP收款计划实际数"+acctamountMap.get(months+accountnum)); mmInfo.put("amountUnit","one");//金额单位 one元 thousand千元 ten_thousand 万元 mms.add(mmInfo); itemInfo.put("metricMembers",mms);//度量值列表 @@ -124,11 +124,11 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { } json_obj.put("batchSaveData",items);//报表批量写入数据 - logger.info(billno+"收款计划实际数入参"+json_obj.toJSONString()); + logger.info(billno+"SAP收款计划实际数入参"+json_obj.toJSONString()); pdsp = gson.fromJson(json_obj.toJSONString(), ReportDataBatchSaveParam.class); result = reportService.batchSaveReportData(SerializationUtils.serializeToBase64(pdsp)); frv = SerializationUtils.deSerializeFromBase64(result); - logger.info(billno+"收款计划实际数反写结果"+frv.getCode()+frv.getMessage()); + logger.info(billno+"SAP收款计划实际数反写结果"+frv.getCode()+frv.getMessage()); } } } @@ -184,6 +184,8 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { acctamountMap.put(mapkey,amount); } logger.info("SAP应收已清对应资金科目"+mapkey); + logger.info("SAP应收已清会计科目"+sapresult.getString("HKONT")); + logger.info("SAP应收已清金额"+amount); //根据品牌和事业部关系,将该笔金额归属到事业部上 // ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_productgroup.number", QCP.equals, productnum)}); // if(ppsybinfo != null){ 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 fd0667f..85538fc 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanPaymentTask.java @@ -7,6 +7,8 @@ import kd.bos.context.RequestContext; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.db.DB; +import kd.bos.db.DBRoute; import kd.bos.entity.operate.OperateOptionConst; import kd.bos.exception.KDException; import kd.bos.logging.Log; @@ -32,6 +34,7 @@ import java.util.*; /** * 定时任务更新付款资金计划的计划参考数 + * 目前仅有从sap获取应付未清数据,还需要增加已经在资金系统内的付款申请单数据 * @author yuxueliang */ public class FundPlanPaymentTask extends AbstractTask implements Plugin { @@ -40,6 +43,9 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { private static final String payReceName = "shjh_request_account";//付款申请单_资金计划科目配置表 // private static final String ppsybName = "shjh_ejbm_syb";//二级部门和事业部对应关系 tk_shjh_pg + //非关闭付款申请单表头到期日范围内的金额合计,按照资金科目编号+到期日年月进行分组 + private static final String paysql = "select tfm.fnumber,to_char(apbl.fk_shjh_duedate,'yyyy-MM'),sum(apbl.fapplyamount) from t_ap_applypaybill apbl left join t_fpm_member tfm on tfm.fid=apbl.fk_shjh_membersubject where apbl.fk_shjh_membersubject>0 and apbl.fbillstatus<>'D' and to_char(apbl.fk_shjh_duedate,'yyyyMMDD')>=? and to_char(apbl.fk_shjh_duedate,'yyyyMMDD')<=? GROUP by tfm.fnumber,to_char(apbl.fk_shjh_duedate,'yyyy-MM')"; + private static final Log logger = LogFactory.getLog(FundPlanPaymentTask.class); private Gson gson = new Gson();//用于将json格式化为对象 @@ -56,7 +62,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { //调用SAP应付未清接口,按照事业部、月份、计划科目汇总金额 Map acctamountMap = getSapAR(); if(acctamountMap == null || acctamountMap.isEmpty()){ - logger.info("未获取到月份、计划科目汇总金额"); + logger.info("SAP未获取到月份、计划科目汇总金额"); return; } ReportDataSDKService reportService = new ReportDataSDKService();//报表服务,用于写入或者查询报表数据 @@ -90,7 +96,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { doinfo = BusinessDataServiceHelper.loadSingle(doinfo.getPkValue(),entityName); maindimentrys = doinfo.getDynamicObjectCollection("maindimentry");//主维度分录 if(maindimentrys.isEmpty()){ - logger.info("资金计划编制主维度分录为空"+doinfo.getString("billno")); + logger.info("SAP资金计划编制主维度分录为空"+doinfo.getString("billno")); continue; } }else{ @@ -98,7 +104,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { maindimentrys = doinfo.getDynamicObjectCollection("maindimentry");//主维度分录 } billno = doinfo.getString("billno"); - logger.info("资金计划编制单号"+billno); + logger.info("SAP资金计划编制单号"+billno); json_obj = new JSONObject(); //体系编号 非必填时,系统通过【编报主体 code】确定,需保证一个编报主体只关联一个体系 json_obj.put("systemCode",doinfo.getDynamicObject("bodysys").getString("number")); @@ -132,9 +138,9 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { //PLANREFERENCEAMT 计划参考值 ACTMAT 已执行额度 mmInfo.put("templateMetricType","PLANREFERENCEAMT");//度量值预置类型 mmInfo.put("amount",acctamountMap.get(months+accountnum));//写入金额-从SAP接口中获取 - logger.info(billno+"付款计划参考数入参 months "+months); - logger.info(billno+"付款计划参考数入参 accountnum "+accountnum); - logger.info(billno+"付款计划参考数"+acctamountMap.get(months+accountnum)); + logger.info(billno+"SAP付款计划参考数入参 months "+months); + logger.info(billno+"SAP付款计划参考数入参 accountnum "+accountnum); + logger.info(billno+"SAP付款计划参考数"+acctamountMap.get(months+accountnum)); mmInfo.put("amountUnit","one");//金额单位 one元 thousand千元 ten_thousand 万元 mms.add(mmInfo); itemInfo.put("metricMembers",mms);//度量值列表 @@ -142,11 +148,11 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { } json_obj.put("batchSaveData",items);//报表批量写入数据 - logger.info(billno+"付款计划参考数入参"+json_obj.toJSONString()); + logger.info(billno+"SAP付款计划参考数入参"+json_obj.toJSONString()); pdsp = gson.fromJson(json_obj.toJSONString(), ReportDataBatchSaveParam.class); result = reportService.batchSaveReportData(SerializationUtils.serializeToBase64(pdsp)); frv = SerializationUtils.deSerializeFromBase64(result); - logger.info(billno+"付款计划参考数反写结果"+frv.getCode()+frv.getMessage()); + logger.info(billno+"SAP付款计划参考数反写结果"+frv.getCode()+frv.getMessage()); } } } @@ -176,7 +182,7 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { List pzblist = getPzb(); if(pzblist.isEmpty()){ //配置表没有对应规则,返回null - logger.info("付款申请单配置表没有对应规则"); + logger.info("SAP付款申请单配置表没有对应规则"); return null; } JSONArray items = data.getJSONArray("IT_ITEM"); @@ -210,6 +216,8 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { acctamountMap.put(mapkey,amount); } logger.info("SAP应付凭证对应资金科目"+mapkey); + logger.info("SAP应付凭证会计科目"+sapresult.getString("HKONT")); + logger.info("SAP应付未清金额"+amount); //根据二级部门和事业部关系,将该笔金额归属到事业部上 // ppsybinfo = BusinessDataServiceHelper.loadSingleFromCache(ppsybName,new QFilter[]{new QFilter("shjh_orgdept.number", QCP.equals, deptnum)}); // if(ppsybinfo != null){ @@ -225,6 +233,56 @@ public class FundPlanPaymentTask extends AbstractTask implements Plugin { // logger.info("根据SAP的二级部门编号未找到对应的二级部门和事业部关系"+deptnum); // } } + //追加付款申请单金额计算逻辑 + logger.info("SAP追加付款申请单金额之前大小"+acctamountMap.size()); + DB.query(DBRoute.of("fi"),paysql,new Object[]{duedate_starts,duedate_ends},(rs) -> { + String sql_months;//月份 + String sql_mapkey; + BigDecimal sql_amount; + int rows = 0; + while(rs.next()) { + sql_months = JhzjUtils.getFundPeriodBySAPDate(rs.getString(2)); + sql_mapkey = sql_months+rs.getString(1); + sql_amount = rs.getBigDecimal(3);//付款申请单合计金额 + if(acctamountMap.containsKey(sql_mapkey)){ + acctamountMap.put(sql_mapkey, JhzjUtils.addTwoAmount(sql_amount,acctamountMap.get(sql_mapkey))); + }else{ + acctamountMap.put(sql_mapkey,sql_amount); + } + rows++; + } + logger.info("SAP付款申请单金额查询结果集大小"+rows); + return acctamountMap; + }); + logger.info("SAP追加付款申请单金额之后大小"+acctamountMap.size()); +// Map payreqamouts = DB.query(DBRoute.of("fi"),paysql,new Object[]{duedate_starts,duedate_ends},(rs) -> { +// Map reqamouts = new HashMap<>(); +// String sql_months;//月份 +// String sql_mapkey; +// BigDecimal sql_amount; +// while(rs.next()) { +// sql_months = JhzjUtils.getFundPeriodBySAPDate(rs.getString(2)); +// sql_mapkey = sql_months+rs.getString(1); +// sql_amount = rs.getBigDecimal(3);//付款申请单合计金额 +// if(reqamouts.containsKey(sql_mapkey)){ +// reqamouts.put(sql_mapkey, JhzjUtils.addTwoAmount(sql_amount,reqamouts.get(sql_mapkey))); +// }else{ +// reqamouts.put(sql_mapkey,sql_amount); +// } +// } +// return reqamouts; +// }); +// logger.info("付款申请单资金计划金额集合大小"+payreqamouts.size()); +// //遍历付款申请单的金额map 以追加到acctamountMap +// for (Map.Entry entry : payreqamouts.entrySet()) { +// if(acctamountMap.containsKey(entry.getKey())){ +// //sap解析的数据中包含付款申请单,则两个map金额相加 +// acctamountMap.put(entry.getKey(), JhzjUtils.addTwoAmount(entry.getValue(),acctamountMap.get(entry.getKey()))); +// }else{ +// //sap解析的数据中不包含付款申请单,则直接put进acctamountMap +// acctamountMap.put(entry.getKey(), entry.getValue()); +// } +// } return acctamountMap; } }