houzhongjian
2024-12-04 a82313d17b2b5d1c02e880122efc1b701c401dcf
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.iail.model.IAILModel;
import com.iailab.module.model.common.enums.CommonConstant;
import com.iailab.module.model.common.enums.OutResultType;
import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
import com.iailab.module.model.mcs.pre.entity.MmModelArithSettingsEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictModelEntity;
@@ -55,12 +56,11 @@
            throw new ModelInvokeException("modelEntity is null");
        }
        String modelId = predictModel.getId();
        try {
            List<SampleData> sampleDataList = sampleConstructor.constructSample(TypeA.Predict.name(), modelId, predictTime);
            String modelPath = predictModel.getModelpath();
            if (modelPath == null) {
                System.out.println("模型路径不存在,modelId=" + modelId);
                log.info("模型路径不存在,modelId=" + modelId);
                return null;
            }
            IAILModel newModelBean = composeNewModelBean(predictModel);
@@ -93,36 +93,33 @@
            }
            modelResult = (HashMap<String, Object>) modelResult.get(CommonConstant.MDK_RESULT);
            //打印结果
            log.info("预测模型计算完成:modelId=" + modelId + modelResult);
            JSONObject jsonObjResult = new JSONObject();
            jsonObjResult.put("result", modelResult);
            log.info(String.valueOf(jsonObjResult));
            List<MmItemOutputEntity> ItemOutputList = mmItemOutputService.getByItemid(predictModel.getItemid());
            log.info("模型计算完成:modelId=" + modelId + modelResult);
            Map<MmItemOutputEntity, double[]> predictMatrixs = new HashMap<>(ItemOutputList.size());
            for (MmItemOutputEntity outputEntity : ItemOutputList) {
                String resultStr = outputEntity.getResultstr();
                if (modelResult.containsKey(resultStr)) {
                    if (outputEntity.getResultType() == 1) {
                        // 一维数组
                        Double[] temp = (Double[]) modelResult.get(resultStr);
                        double[] temp1 = new double[temp.length];
                        for (int i = 0; i < temp.length; i++) {
                            temp1[i] = temp[i].doubleValue();
            List<MmItemOutputEntity> itemOutputList = mmItemOutputService.getByItemid(predictModel.getItemid());
            Map<MmItemOutputEntity, double[]> predictMatrixs = new HashMap<>(itemOutputList.size());
            for (MmItemOutputEntity output : itemOutputList) {
                if (!modelResult.containsKey(output.getResultstr())) {
                    continue;
                }
                OutResultType outResultType = OutResultType.getEumByCode(output.getResultType());
                switch (outResultType) {
                    case D1:
                        double[] temp1 = (double[]) modelResult.get(output.getResultstr());
                        predictMatrixs.put(output, temp1);
                        break;
                    case D2:
                        double[][] temp2 = (double[][]) modelResult.get(output.getResultstr());
                        double[] tempColumn = new double[temp2.length];
                        for (int i = 0; i < tempColumn.length; i++) {
                            tempColumn[i] = temp2[i][output.getResultIndex()];
                        }
                        predictMatrixs.put(outputEntity, temp1);
                    } else if (outputEntity.getResultType() == 2) {
                        // 二维数组
                        Double[][] temp = (Double[][]) modelResult.get(resultStr);
                        Double[] temp2 = temp[outputEntity.getResultIndex()];
                        double[] temp1 = new double[temp2.length];
                        for (int i = 0; i < temp2.length; i++) {
                            temp1[i] = temp2[i].doubleValue();
                        }
                        predictMatrixs.put(outputEntity, temp1);
                    }
                        predictMatrixs.put(output, tempColumn);
                        break;
                    default:
                        break;
                }
            }
            result.setPredictMatrixs(predictMatrixs);