1、报表公式开发

This commit is contained in:
16358 2025-01-13 11:32:07 +08:00
parent f9747b0d90
commit b6e3592d8d
5 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,7 @@
package shkd.epm.servicehelper;
public interface FormulaOperatipnService {
public String dispatchDef(String formulaName,String paramJson);
}

View File

@ -0,0 +1,7 @@
package shkd.epm.servicehelper;
public interface FormulaShowService {
public String getFormulaDef();
}

View File

@ -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<String, String> 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);
}
}
}

View File

@ -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<String> 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<String> value = (ArrayList<String>) next.getValue();
typeSet.add((String)value.get(2));
ArrayList<Map<String, String>> 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<Map<String,String>> makeReslutMap(ArrayList<String> value){
ArrayList<Map<String,String>> resultMap = new ArrayList(){{
add(
new HashMap<String, String>() {{
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;
}
}

View File

@ -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<Object, Object> 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) ;
}
}