diff --git a/bugs/note.txt b/bugs/note.txt new file mode 100644 index 0000000..fc19d22 --- /dev/null +++ b/bugs/note.txt @@ -0,0 +1,17 @@ + +BUG: +基础指标模版下载报错 +数据源指标编辑 , 这些变量值 没有绑定到界面上,接口返回是ok的 ,前端需要改一下 +引擎列表 点名称 一直加载中 +决策复制版本 ,报错 + + + +t_machine_learning_models model_field (模型解析字段) 字段长度太小 +ALTER TABLE t_machine_learning_models MODIFY COLUMN model_field varchar(4096) NOT NULL DEFAULT '' COMMENT '模型解析字段'; + + + +优化点: +数据中心 / 接口源 / 接口新建 修改 查看 请求地址 输入框加长 + diff --git a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/cache/LocalCacheService.java b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/cache/LocalCacheService.java index 3b90764..9b542e4 100644 --- a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/cache/LocalCacheService.java +++ b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/cache/LocalCacheService.java @@ -6,8 +6,8 @@ import com.fibo.ddp.common.dao.strategyx.aimodel.MachineLearningModelsMapper; import com.fibo.ddp.common.model.datax.datamanage.Field; import com.fibo.ddp.common.model.strategyx.aimodel.MachineLearningModels; import com.fibo.ddp.common.model.strategyx.aimodel.ModelDTO; -import com.fibo.ddp.common.service.common.CommUtil; import com.fibo.ddp.common.service.strategyx.aimodel.PMMLExecutor.PMMLExecutor; +import com.fibo.ddp.common.utils.util.CommUtil; import org.jpmml.evaluator.Evaluator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +60,6 @@ public class LocalCacheService { @Resource PMMLExecutor pmmlExecutor; - private static final String VERSION = "2025-02-12 16:30"; private final String startTime = LocalDateTime.now().toString(); @@ -90,7 +89,7 @@ public class LocalCacheService { public Map getInfo(){ Map info = new HashMap<>(); - info.put("VERSION",VERSION); + info.put("VERSION",CommUtil.getVersion()); info.put("startTime",startTime); info.put("runCount",runCount.longValue()); diff --git a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/datainterface/impl/InterfaceServiceImpl.java b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/datainterface/impl/InterfaceServiceImpl.java index 84876ff..6dd0477 100644 --- a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/datainterface/impl/InterfaceServiceImpl.java +++ b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/datainterface/impl/InterfaceServiceImpl.java @@ -32,6 +32,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback; import org.springframework.web.client.AsyncRestTemplate; @@ -244,20 +246,49 @@ public class InterfaceServiceImpl extends ServiceImpl httpEntity = new HttpEntity(body, httpHeaders); - // 发送请求 - if(callType == 2){ - responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - } else { - listenableFuture = asyncRestTemplate.postForEntity(url, httpEntity, String.class); + + final String requestHeaders = interfaceInfo.getRequestHeaders(); + + if(requestHeaders!=null && requestHeaders.contains(MediaType.APPLICATION_JSON_VALUE)) { + + HttpHeaders httpHeaders = new HttpHeaders(); + // 设置请求头 + httpHeaders.setAll(JSONObject.parseObject(requestHeaders, Map.class)); + // 封装请求体 + JSONObject body = JSONObject.parseObject(requestBody); + // 封装参数和头信息 + HttpEntity httpEntity = new HttpEntity(body, httpHeaders); + // 发送请求 + if (callType == 2) { + responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); + } else { + listenableFuture = asyncRestTemplate.postForEntity(url, httpEntity, String.class); + } + }else{ + + HttpHeaders httpHeaders = new HttpHeaders(); + // 设置请求头 + httpHeaders.setAll(JSONObject.parseObject(interfaceInfo.getRequestHeaders(), Map.class)); + // 封装请求体 + + JSONObject body = JSONObject.parseObject(requestBody); + MultiValueMap bodyMap = new LinkedMultiValueMap<>(); + bodyMap.setAll(body); + + // 封装参数和头信息 + HttpEntity> httpEntity = new HttpEntity(bodyMap, httpHeaders); + // 发送请求 + if (callType == 2) { + // 这里调用还是报错 ,已修复 + // post http://47.99.93.74:8090/mockapi/hello2?name={name} 会报错 + // java.lang.IllegalArgumentException: Not enough variable values available to expand 'name' + responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); + } else { + listenableFuture = asyncRestTemplate.postForEntity(url, httpEntity, String.class); + } } + } else if(HttpMethod.GET.name().equals(interfaceInfo.getMethod())){ // 封装uri地址路径变量 Map uriVariables = new HashMap<>(); diff --git a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/runner/impl/CommonServiceImpl.java b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/runner/impl/CommonServiceImpl.java index fb1ac6d..2f09dbf 100644 --- a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/runner/impl/CommonServiceImpl.java +++ b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/datax/runner/impl/CommonServiceImpl.java @@ -75,14 +75,22 @@ public class CommonServiceImpl implements CommonService { } SessionData sessionData = RunnerSessionManager.getSession(); Long organId = sessionData.getOrganId(); + List fieldList = fieldService.findFieldByIdsbyorganId(organId, ids); + List list = new ArrayList<>(); + ids = new ArrayList<>(); + for (int i = 0; i < fieldList.size(); i++) { if (fieldList.get(i).getIsDerivative() == 1) { ids.addAll(StringUtil.toLongList(fieldList.get(i).getOrigFieldId())); - } else - list.add(fieldList.get(i)); + } + + // 20250214 bugfix , 这个不能放在 else分支里 !!! + // 否则后面取不到值 !!!!!! + list.add(fieldList.get(i)); + } if (ids.size() > 0) { List lists = fieldService.findFieldByIdsbyorganId(organId, ids); @@ -182,6 +190,9 @@ public class CommonServiceImpl implements CommonService { map.put(key,value); } + + + // 决策选项 测试时 ,这个方法 没被调用 @Override public Map getFields(List fields, Map inputParam) { logger.info("start getEngineField, fields:{},inputParam:{}", JSONObject.toJSONString(fields), JSONObject.toJSONString(inputParam)); diff --git a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/strategyx/aimodel/PMMLExecutor/impl/PMMLExecutorRFImpl.java b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/strategyx/aimodel/PMMLExecutor/impl/PMMLExecutorRFImpl.java index 29335b6..437564d 100644 --- a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/strategyx/aimodel/PMMLExecutor/impl/PMMLExecutorRFImpl.java +++ b/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/strategyx/aimodel/PMMLExecutor/impl/PMMLExecutorRFImpl.java @@ -76,6 +76,9 @@ public class PMMLExecutorRFImpl implements PMMLExecutor { } Map results = evaluator.evaluate(arguments); + + System.out.println("pmml_predict_results: " + results); + List targetFields = evaluator.getTargetFields(); TargetField targetField = targetFields.get(0); @@ -92,10 +95,10 @@ public class PMMLExecutorRFImpl implements PMMLExecutor { value_1 = tmpnum.doubleValue(); } - // TODO 不知道啥含义 先注释掉 返回结果 - // if (targetFieldValue instanceof ProbabilityDistribution) { - // value_1 = ((ProbabilityDistribution) targetFieldValue).getValue("1"); - // } + // TODO 模型取值逻辑待确认 + if (targetFieldValue instanceof ProbabilityDistribution) { + value_1 = ((ProbabilityDistribution) targetFieldValue).getValue("1"); + } diff --git a/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/constant/ServiceFilterConstant.java b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/constant/ServiceFilterConstant.java index 39c8d07..83d84d5 100644 --- a/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/constant/ServiceFilterConstant.java +++ b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/constant/ServiceFilterConstant.java @@ -13,6 +13,7 @@ public class ServiceFilterConstant { uriSet.add("/Riskmanage/v2/datamanage/datamanage/downTemplate");// 指标模板下载 uriSet.add("/Riskmanage/v2/datamanage/listmanage/downTemplate");// 名单库模板下载 uriSet.add("/Riskmanage/v3/analyse/decision"); + uriSet.add("/Riskmanage/info/status"); } public static boolean isSessionFilter(String uri) { diff --git a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/common/CommUtil.java b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/CommUtil.java similarity index 58% rename from ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/common/CommUtil.java rename to ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/CommUtil.java index 7048226..67915c8 100644 --- a/ddp/ddp-common/ddp-service/src/main/java/com/fibo/ddp/common/service/common/CommUtil.java +++ b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/CommUtil.java @@ -1,8 +1,14 @@ -package com.fibo.ddp.common.service.common; +package com.fibo.ddp.common.utils.util; public class CommUtil { + private static final String VERSION = "2025-02-14 17:00"; + + + public static String getVersion(){ + return VERSION; + } public static void doSleep(long time){ if(time<=0){ return; diff --git a/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/runner/JevalUtil.java b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/runner/JevalUtil.java index 525548f..79457fa 100644 --- a/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/runner/JevalUtil.java +++ b/ddp/ddp-common/ddp-utils/src/main/java/com/fibo/ddp/common/utils/util/runner/JevalUtil.java @@ -162,6 +162,10 @@ public class JevalUtil { Object v = variablesMap.get(key); if(v!=null) { String variableValue = CommonConst.SYMBOL_SINGLE_QUOTA+v.toString()+CommonConst.SYMBOL_SINGLE_QUOTA; + variablesMap.put(key, variableValue); + }else{ + String variableValue = CommonConst.SYMBOL_SINGLE_QUOTA+CommonConst.SYMBOL_SINGLE_QUOTA; + variablesMap.put(key, variableValue); } } diff --git a/ddp/ddp-enginex/risk-engine/src/main/java/com/fibo/ddp/enginex/riskengine/runner/business/impl/RiskEngineBusinessImpl.java b/ddp/ddp-enginex/risk-engine/src/main/java/com/fibo/ddp/enginex/riskengine/runner/business/impl/RiskEngineBusinessImpl.java index ee89727..80f0966 100644 --- a/ddp/ddp-enginex/risk-engine/src/main/java/com/fibo/ddp/enginex/riskengine/runner/business/impl/RiskEngineBusinessImpl.java +++ b/ddp/ddp-enginex/risk-engine/src/main/java/com/fibo/ddp/enginex/riskengine/runner/business/impl/RiskEngineBusinessImpl.java @@ -98,7 +98,7 @@ public class RiskEngineBusinessImpl implements RiskEngineBusiness { logger.info("请求参数,paramJson: {}", JSONObject.toJSONString(paramJson)); JSONObject jsonObject = new JSONObject(); JSONArray resultJson = new JSONArray(); - Map> featureMaps = new ConcurrentHashMap<>(); + // Map> featureMaps = new ConcurrentHashMap<>(); Long organId = Long.valueOf(paramJson.get("organId").toString()); Long engineId = Long.valueOf(paramJson.get("engineId").toString()); //获取引擎信息 @@ -124,13 +124,18 @@ public class RiskEngineBusinessImpl implements RiskEngineBusiness { //返回输出结果 Map outMap = new ConcurrentHashMap<>(); // 记录执行前全量指标 - featureMaps.put("before", inputParam); + // featureMaps.put("before", inputParam); + logger.info("recursionEngineNode_before_inputParam="+inputParam); + //节点执行方法 recursionEngineNode(inputParam, engineNodeMap.get(engineNode.getNextNodes()), engineNodeMap, outMap); + + logger.info("recursionEngineNode_after_inputParam="+inputParam); + jsonObject.put("status", "0x0000"); jsonObject.put("msg", "执行成功"); //记录执行后的全量指标 - featureMaps.put("after", inputParam); + // featureMaps.put("after", inputParam); paramJson.put("versionId", engineNode.getVersionId()); // featureRecordService.recordAllFeature(featureMaps, engine, paramJson); diff --git a/ddp/ddp-manager-web/src/main/java/com/fibo/ddp/manager/web/controller/InfoController.java b/ddp/ddp-manager-web/src/main/java/com/fibo/ddp/manager/web/controller/InfoController.java new file mode 100644 index 0000000..2e3beab --- /dev/null +++ b/ddp/ddp-manager-web/src/main/java/com/fibo/ddp/manager/web/controller/InfoController.java @@ -0,0 +1,41 @@ +package com.fibo.ddp.manager.web.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fibo.ddp.common.model.common.ResponseEntityBuilder; +import com.fibo.ddp.common.model.common.ResponseEntityDto; +import com.fibo.ddp.common.model.common.message.template.entity.AppTemplate; +import com.fibo.ddp.common.model.common.message.template.vo.AppTemplateReqVo; +import com.fibo.ddp.common.service.common.SessionManager; +import com.fibo.ddp.common.service.common.message.template.AppTemplateService; +import com.fibo.ddp.common.utils.util.CommUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@RestController +@RequestMapping("info") +public class InfoController { + + @Autowired + private AppTemplateService appTemplateService; + + @RequestMapping("status") + public Object status(HttpServletRequest request){ + Map map = new HashMap(); + map.put("version", CommUtil.getVersion()); + map.put("now", LocalDateTime.now().toString()); + + return map; + } + + + +} diff --git a/ddp/ddp-runner-api/src/main/resources/logging-config.xml b/ddp/ddp-runner-api/src/main/resources/logging-config.xml index 7b474b5..e301261 100644 --- a/ddp/ddp-runner-api/src/main/resources/logging-config.xml +++ b/ddp/ddp-runner-api/src/main/resources/logging-config.xml @@ -77,7 +77,7 @@ - + @@ -86,7 +86,7 @@ - + diff --git a/ddp/ddp-runner-api/src/test/java/pmml/RestTemplateTest.java b/ddp/ddp-runner-api/src/test/java/pmml/RestTemplateTest.java new file mode 100644 index 0000000..f46fdd2 --- /dev/null +++ b/ddp/ddp-runner-api/src/test/java/pmml/RestTemplateTest.java @@ -0,0 +1,46 @@ +package pmml; + + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +public class RestTemplateTest { + + public static void main(String[] args)throws Exception{ + + RestTemplate rt = new RestTemplate(); + + MultiValueMap map= new LinkedMultiValueMap<>(); + map.add("name", "tiger"); + + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + // 创建HTTP实体 + HttpEntity> request = new HttpEntity<>(map, headers); + + // 发送POST请求 + String url = "http://47.99.93.74:8090/mockapi/hello2"; + String response = rt.postForObject(url, request, String.class); + + System.out.println(response); + + + ResponseEntity responseEntity = rt.postForEntity(url, request, String.class); + System.out.println(responseEntity.getBody()); + + + + + + + + + } +}