From b6e3592d8d7c8b73d56f009ba0e3135f52960ec6 Mon Sep 17 00:00:00 2001 From: 16358 <1635849544@qq.com> Date: Mon, 13 Jan 2025 11:32:07 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=8A=A5=E8=A1=A8=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormulaOperatipnService.java | 7 ++ .../epm/servicehelper/FormulaShowService.java | 7 ++ .../epm/servicehelper/ServiceFactory.java | 28 +++++ .../impl/FormulaOperatipnImpl.java | 105 ++++++++++++++++++ .../servicehelper/impl/FormulaShowImpl.java | 22 ++++ 5 files changed, 169 insertions(+) create mode 100644 shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaOperatipnService.java create mode 100644 shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaShowService.java create mode 100644 shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/ServiceFactory.java create mode 100644 shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaOperatipnImpl.java create mode 100644 shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaShowImpl.java diff --git a/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaOperatipnService.java b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaOperatipnService.java new file mode 100644 index 0000000..3f6e4aa --- /dev/null +++ b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaOperatipnService.java @@ -0,0 +1,7 @@ +package shkd.epm.servicehelper; + +public interface FormulaOperatipnService { + + public String dispatchDef(String formulaName,String paramJson); + +} diff --git a/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaShowService.java b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaShowService.java new file mode 100644 index 0000000..9fef0fb --- /dev/null +++ b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/FormulaShowService.java @@ -0,0 +1,7 @@ +package shkd.epm.servicehelper; + +public interface FormulaShowService { + + public String getFormulaDef(); + +} diff --git a/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/ServiceFactory.java b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/ServiceFactory.java new file mode 100644 index 0000000..c6bae0c --- /dev/null +++ b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/ServiceFactory.java @@ -0,0 +1,28 @@ +package shkd.epm.servicehelper; + +import kd.bos.dataentity.TypesContainer; + +import java.util.HashMap; +import java.util.Map; + +public class ServiceFactory { + //存放微服务的 map + private static Map serviceMap = new HashMap<>(); + + static { + //key 是接口名,value 是实现类全限定名 map.put(“接口名称”,“实现类路径”) + serviceMap.put("FormulaOperatipnService", "shkd.epm.servicehelper.impl.FormulaOperatipnImpl"); + serviceMap.put("FormulaShowService", "shkd.epm.servicehelper.impl.FormulaShowImpl"); + } + + + // getService()平台要求的固定写法,一般情况下无须更改 + public static Object getService(String serviceName) { + String className = serviceMap.get(serviceName); + if (className == null) { + throw new IllegalArgumentException(String.format("%s 对应的服务实现未找到", serviceName)); + } else { + return TypesContainer.getOrRegisterSingletonInstance(className); + } + } +} diff --git a/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaOperatipnImpl.java b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaOperatipnImpl.java new file mode 100644 index 0000000..fb0d314 --- /dev/null +++ b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaOperatipnImpl.java @@ -0,0 +1,105 @@ +package shkd.epm.servicehelper.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.io.IOException; +import java.util.*; + +import kd.bos.orm.query.QFilter; +import kd.bos.util.JSONUtils; +import kd.epm.eb.service.BgControlServiceImpl; +import shkd.epm.servicehelper.FormulaOperatipnService; + +public class FormulaOperatipnImpl implements FormulaOperatipnService { + private static final Log log = LogFactory.getLog(FormulaOperatipnImpl.class); + + public String dispatchDef(String formulaName,String param) { + log.info("公式逻辑开始"); + + String resultStr = ""; + String key = ""; + HashSet typeSet = new HashSet(); + try { + //解析json公式参数 + HashMap cast = JSONUtils.cast(param, HashMap.class); + Map param1 = (Map) cast.get("param"); + //公共参数--财年 组织 期间 + Map param2 = (Map) cast.get("commParam"); + + //获取指定预算体系id + QFilter shownumber = new QFilter("shownumber", "=", "CXHB_TIXI"); + DynamicObject priceModel = BusinessDataServiceHelper.loadSingle("bcm_model","id", shownumber.toArray()); + + //遍历公式 + Iterator iterator = param1.entrySet().iterator(); + while (iterator.hasNext()){ + Map.Entry next = (Map.Entry)iterator.next(); + key = (String)next.getKey(); + //["","","1002001","QMZMYEA","0","0","",""] + ArrayList value = (ArrayList) next.getValue(); + typeSet.add((String)value.get(2)); + ArrayList> maps = makeReslutMap(value); + Long priceModelid = (Long)priceModel.getPkValue(); + if("expensebudget".equals(formulaName)){ + //获取费用预算 + BgControlServiceImpl bgControlService = new BgControlServiceImpl(); + String json = bgControlService.queryBalanceWithoutCentralized(priceModelid, maps, typeSet, false); + // 解析 JSON 数据 + JSONObject jsonObject = new JSONObject(json); + JSONArray dataArray = jsonObject.getJSONArray("data"); + JSONObject firstEntry = dataArray.getJSONObject(0); + // 获取 budget 参数 + int budgetValue = firstEntry.getInt("budget"); + log.info("Budget: " + budgetValue); + resultStr = "{\n" + + " \"id\":"+key+"\n" + + " {\n" + + " \"v\":"+budgetValue+"\n" + + " \"type\":1\n" + + " }\n" + + " } "; + log.info("返回参数为:"+resultStr); + } + + } + } catch (IOException e) { + resultStr = "{\n" + + " \"id\":"+key+"\n" + + " {\n" + + " \"v\":"+0+"\n" + + " \"type\":-1\n" + + " }\n" + + " } "; + log.info("返回参数为:"+resultStr); + e.printStackTrace(); + }finally { + return resultStr ; + } + } + + //把参数组装成查询预算所需的格式 + public ArrayList> makeReslutMap(ArrayList value){ + + ArrayList> resultMap = new ArrayList(){{ + add( + new HashMap() {{ + put("Entity", value.get(0)); + put("Account", value.get(1)); + put("Version", value.get(3)); + put("Currency", value.get(4)); + put("AuditTrail", value.get(5)); + put("ChangeType", value.get(6)); + put("DataType", value.get(7)); + put("Metric", value.get(8)); + put("BudgetPeriod", value.get(9)); + }} + ); + }}; + return resultMap; + } +} diff --git a/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaShowImpl.java b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaShowImpl.java new file mode 100644 index 0000000..fcd41ce --- /dev/null +++ b/shkd-cosmic-debug/src/main/java/shkd/epm/servicehelper/impl/FormulaShowImpl.java @@ -0,0 +1,22 @@ +package shkd.epm.servicehelper.impl; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.epm.eb.common.utils.JSONUtils; +import shkd.epm.servicehelper.FormulaShowService; + +import java.util.HashMap; + +public class FormulaShowImpl implements FormulaShowService { + @Override + public String getFormulaDef() { + QFilter queryParam = new QFilter("number", "=", "01"); + DynamicObject formula = BusinessDataServiceHelper.loadSingle("shkd_formula", queryParam.toArray()); + HashMap jsonMap = new HashMap<>(); + jsonMap.put("formula_catalog_list", formula.get("shkd_formulalag_tag")); + jsonMap.put("formula_def_list", formula.get("shkd_formulatext_tag")); + + return JSONUtils.toString(jsonMap) ; + } +}