dengzedong
2 天以前 542fdd93d14b78a1134f0c1a03d647db242b15a6
预测项影响因素
已添加20个文件
已修改5个文件
1109 ■■■■■ 文件已修改
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/MmPredictInfluenceFactorHandleReqVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/MdkApi.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/db/mysql.sql 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/controller/admin/MmPredictInfluenceFactorController.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictInfluenceFactorDao.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictInfluenceFactorResultDao.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorConfigEntity.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorEntity.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorResultEntity.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/InfluenceFactorPatternEnum.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictInfluenceFactorResultService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictInfluenceFactorService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictInfluenceFactorResultServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictInfluenceFactorServiceImpl.java 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorConfigVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorHandleVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorPageReqVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorResultPageReqVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorResultVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorVO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictInfluenceFactorResultDao.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/pre/MmPredictInfluenceFactorDao.xml 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/MmPredictInfluenceFactorHandleReqVO.java
对比新文件
@@ -0,0 +1,13 @@
package com.iailab.module.model.api.mcs.dto;
import lombok.Data;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/9 16:15
 **/
@Data
public class MmPredictInfluenceFactorHandleReqVO {
    private Long influenceTime;
}
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/MdkApi.java
@@ -1,6 +1,7 @@
package com.iailab.module.model.api.mdk;
import com.iailab.module.model.api.mcs.dto.MmPredictAutoAdjustReqVO;
import com.iailab.module.model.api.mcs.dto.MmPredictInfluenceFactorHandleReqVO;
import com.iailab.module.model.api.mdk.dto.*;
import com.iailab.module.model.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
@@ -53,4 +54,8 @@
    @PostMapping(PREFIX + "/predict-item/autoAdjustByCode")
    @Operation(summary = "预测自动调整")
    Boolean autoAdjustByCode(@RequestBody MmPredictAutoAdjustReqVO reqVO);
    @PostMapping(PREFIX + "/predict-item/influenceFactorHandle")
    @Operation(summary = "影响因素计算")
    void influenceFactorHandle(@RequestBody MmPredictInfluenceFactorHandleReqVO reqVO);
}
iailab-module-model/iailab-module-model-biz/db/mysql.sql
@@ -1029,3 +1029,34 @@
                                                   PRIMARY KEY (`id`),
                                                   UNIQUE KEY `config_code` (`config_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='预测结果自动调整配置表';
-- 预测项影响因素
CREATE TABLE `t_mm_predict_influence_factor_config` (
                                                        `id` varchar(36) NOT NULL,
                                                        `output_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '预测项id',
                                                        `pattern` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '统计方式',
                                                        `is_enable` tinyint DEFAULT NULL COMMENT '是否启用(0禁用 1启用)',
                                                        `create_time` datetime DEFAULT NULL,
                                                        PRIMARY KEY (`id`),
                                                        KEY `output_id` (`output_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='预测项影响因素配置表';
CREATE TABLE `t_mm_predict_influence_factor` (
                                                 `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                                                 `config_id` varchar(36) DEFAULT NULL COMMENT '配置id',
                                                 `factor_output_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '因素预测项id',
                                                 `deviation_value` double DEFAULT NULL COMMENT '偏差值',
                                                 PRIMARY KEY (`id`),
                                                 KEY `config_id` (`config_id`),
                                                 KEY `item_id` (`factor_output_id`),
                                                 CONSTRAINT `t_mm_predict_influence_factor_ibfk_1` FOREIGN KEY (`config_id`) REFERENCES `t_mm_predict_influence_factor_config` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='预测项影响因素关联表';
CREATE TABLE `t_mm_predict_influence_factor_result` (
                                                        `factor_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '因素id',
                                                        `time` datetime DEFAULT NULL COMMENT '影响时间',
                                                        `value` double DEFAULT NULL COMMENT '影响值',
                                                        UNIQUE KEY `factor_id_time_unique` (`factor_id`,`time` DESC) USING BTREE,
                                                        CONSTRAINT `t_mm_predict_influence_factor_result_ibfk_1` FOREIGN KEY (`factor_id`) REFERENCES `t_mm_predict_influence_factor` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='预测项影响因素结果表';
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -5,6 +5,7 @@
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointValueWriteDTO;
import com.iailab.module.model.api.mcs.dto.MmPredictAutoAdjustReqVO;
import com.iailab.module.model.api.mcs.dto.MmPredictInfluenceFactorHandleReqVO;
import com.iailab.module.model.api.mcs.dto.StScheduleModelOutDTO;
import com.iailab.module.model.api.mdk.MdkApi;
import com.iailab.module.model.api.mdk.dto.*;
@@ -15,6 +16,7 @@
import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
import com.iailab.module.model.mcs.pre.service.DmModuleService;
import com.iailab.module.model.mcs.pre.service.MmPredictAutoAdjustConfigService;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorService;
import com.iailab.module.model.mcs.pre.service.MmPredictItemService;
import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
@@ -85,6 +87,9 @@
    @Autowired
    private MmPredictAutoAdjustConfigService autoAdjustService;
    @Autowired
    private MmPredictInfluenceFactorService influenceFactorService;
    public static final long offset = 60 * 3L;
@@ -419,4 +424,9 @@
    public Boolean autoAdjustByCode(MmPredictAutoAdjustReqVO reqVO) {
        return autoAdjustService.autoAdjustByCode(reqVO.getConfigCode(), reqVO.getAdjustStartTime());
    }
    @Override
    public void influenceFactorHandle(MmPredictInfluenceFactorHandleReqVO reqVO) {
        influenceFactorService.influenceFactorHandle(reqVO);
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/controller/admin/MmPredictInfluenceFactorController.java
对比新文件
@@ -0,0 +1,81 @@
package com.iailab.module.model.mcs.pre.controller.admin;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.MmPredictAutoAdjustReqVO;
import com.iailab.module.model.mcs.pre.entity.MmPredictAutoAdjustConfigEntity;
import com.iailab.module.model.mcs.pre.service.MmPredictAutoAdjustConfigService;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorResultService;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorService;
import com.iailab.module.model.mcs.pre.vo.*;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 13:30
 **/
@RestController
@RequestMapping("/model/pre/influence-factor")
public class MmPredictInfluenceFactorController {
    @Autowired
    private MmPredictInfluenceFactorService influenceFactorService;
    @Autowired
    private MmPredictInfluenceFactorResultService influenceFactorResultService;
    @PostMapping("/create")
    @Operation(summary = "创建影响因素配置")
    @PreAuthorize("@ss.hasPermission('pre:influence-factor:create')")
    public CommonResult<Boolean> create(@RequestBody MmPredictInfluenceFactorConfigVO vo) {
        influenceFactorService.create(vo);
        return success(true);
    }
    @PutMapping("/update")
    @Operation(summary = "更新影响因素配置")
    @PreAuthorize("@ss.hasPermission('pre:influence-factor:update')")
    public CommonResult<Boolean> update(@RequestBody MmPredictInfluenceFactorConfigVO vo) {
        influenceFactorService.update(vo);
        return success(true);
    }
    @DeleteMapping("/delete")
    @Operation(summary = "删除影响因素配置")
    @PreAuthorize("@ss.hasPermission('pre:influence-factor:delete')")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        influenceFactorService.delete(id);
        return success(true);
    }
    @GetMapping("/get/{id}")
    @Operation(summary = "获得影响因素配置")
    @PreAuthorize("@ss.hasPermission('pre:influence-factor:query')")
    public CommonResult<MmPredictInfluenceFactorConfigVO> getInfo(@PathVariable("id") String id) {
        MmPredictInfluenceFactorConfigVO info = influenceFactorService.getInfo(id);
        return success(info);
    }
    @GetMapping("/page")
    @Operation(summary = "获得影响因素配置分页")
    @PreAuthorize("@ss.hasPermission('pre:influence-factor:query')")
    public CommonResult<PageResult<MmPredictInfluenceFactorConfigVO>> page(MmPredictInfluenceFactorPageReqVO params) {
        PageResult<MmPredictInfluenceFactorConfigVO> pageResult = influenceFactorService.page(params);
        return success(pageResult);
    }
    @GetMapping("/getResultPage")
    @Operation(summary = "获得影响因素结果分页")
    public CommonResult<PageResult<MmPredictInfluenceFactorResultVO>> getResultPage(MmPredictInfluenceFactorResultPageReqVO params) {
        PageResult<MmPredictInfluenceFactorResultVO> pageResult = influenceFactorResultService.page(params);
        return success(pageResult);
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictInfluenceFactorDao.java
对比新文件
@@ -0,0 +1,39 @@
package com.iailab.module.model.mcs.pre.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.model.mcs.pre.entity.MmPredictAutoAdjustConfigEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorConfigEntity;
import com.iailab.module.model.mcs.pre.vo.*;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 14:16
 **/
@TenantDS
@Mapper
public interface MmPredictInfluenceFactorDao extends BaseMapperX<MmPredictInfluenceFactorConfigEntity> {
    IPage<MmPredictInfluenceFactorConfigVO> getPage(IPage<MmPredictInfluenceFactorConfigEntity> page, @Param("params") MmPredictInfluenceFactorPageReqVO reqVO);
    default IPage<MmPredictInfluenceFactorConfigVO> selectPage(MmPredictInfluenceFactorPageReqVO params) {
        return getPage(getPage(params), params);
    }
    MmPredictInfluenceFactorConfigVO getInfo(String id);
    void insertInfluenceFactor(List<MmPredictInfluenceFactorVO> list);
    @Delete("DELETE FROM t_mm_predict_influence_factor WHERE config_id = #{configId}")
    void deleteInfluenceFactor(String configId);
    List<MmPredictInfluenceFactorHandleVO> selectList(@Param("params") Map<String, Object> params);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictInfluenceFactorResultDao.java
对比新文件
@@ -0,0 +1,20 @@
package com.iailab.module.model.mcs.pre.dao;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorResultEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
import java.util.List;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 14:16
 **/
@TenantDS
@Mapper
public interface MmPredictInfluenceFactorResultDao extends BaseMapperX<MmPredictInfluenceFactorResultEntity> {
    void insertOrUpdate(List<MmPredictInfluenceFactorResultEntity> list);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorConfigEntity.java
对比新文件
@@ -0,0 +1,47 @@
package com.iailab.module.model.mcs.pre.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @description: 预测项影响因素配置表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
@TableName("t_mm_predict_influence_factor_config")
public class MmPredictInfluenceFactorConfigEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id",type = IdType.INPUT)
    private String id;
    /**
     * 预测项id
     */
    private String outputId;
    /**
     * 统计方式
     */
    private String pattern;
    /**
     * 是否启用(0禁用 1启用)
     */
    private Integer isEnable;
    /**
     * 创建时间
     */
    private Date createTime;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorEntity.java
对比新文件
@@ -0,0 +1,41 @@
package com.iailab.module.model.mcs.pre.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @description: 预测项影响因素关联表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
@TableName("t_mm_predict_influence_factor")
public class MmPredictInfluenceFactorEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id",type = IdType.INPUT)
    private String id;
    /**
     * 配置id
     */
    private String configId;
    /**
     * 因素预测项id
     */
    private String factorOutputId;
    /**
     * 偏差值
     */
    private Double deviationValue;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictInfluenceFactorResultEntity.java
对比新文件
@@ -0,0 +1,34 @@
package com.iailab.module.model.mcs.pre.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @description: 预测项影响因素结果表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
@TableName("t_mm_predict_influence_factor_result")
public class MmPredictInfluenceFactorResultEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 因素id
     */
    private String factorId;
    /**
     * 影响时间
     */
    private Date time;
    /**
     * 影响值
     */
    private Double value;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/InfluenceFactorPatternEnum.java
对比新文件
@@ -0,0 +1,30 @@
package com.iailab.module.model.mcs.pre.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
 * 自动调整 触发规则
 */
@Getter
@AllArgsConstructor
public enum InfluenceFactorPatternEnum {
    // 累计量误差
    ACCUMULATE("accumulate"),
    // 精确度误差
    ACCURACY("accuracy"),
    UNKNOW("unknow");
    private final String code;
    public static InfluenceFactorPatternEnum fromCode(String code) {
        for (InfluenceFactorPatternEnum unit : values()) {
            if (unit.code.equals(code)) {
                return unit;
            }
        }
        return UNKNOW;
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictInfluenceFactorResultService.java
对比新文件
@@ -0,0 +1,24 @@
package com.iailab.module.model.mcs.pre.service;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.BaseService;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorConfigEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorResultEntity;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorConfigVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorPageReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultPageReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultVO;
import java.util.List;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 13:44
 **/
public interface MmPredictInfluenceFactorResultService extends BaseService<MmPredictInfluenceFactorResultEntity> {
    PageResult<MmPredictInfluenceFactorResultVO> page(MmPredictInfluenceFactorResultPageReqVO params);
    void insert(List<MmPredictInfluenceFactorResultEntity> resultList);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictInfluenceFactorService.java
对比新文件
@@ -0,0 +1,30 @@
package com.iailab.module.model.mcs.pre.service;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.BaseService;
import com.iailab.module.model.api.mcs.dto.MmPredictInfluenceFactorHandleReqVO;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorConfigEntity;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorConfigVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorPageReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultPageReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultVO;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 13:44
 **/
public interface MmPredictInfluenceFactorService extends BaseService<MmPredictInfluenceFactorConfigEntity> {
    PageResult<MmPredictInfluenceFactorConfigVO> page(MmPredictInfluenceFactorPageReqVO params);
    MmPredictInfluenceFactorConfigVO getInfo(String id);
    void create(MmPredictInfluenceFactorConfigVO vo);
    void update(MmPredictInfluenceFactorConfigVO vo);
    void delete(String id);
    void influenceFactorHandle(MmPredictInfluenceFactorHandleReqVO reqVO);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAutoAdjustConfigServiceImpl.java
@@ -95,8 +95,9 @@
        Date endTime;
        Date startTime;
        List<ApiPointValueDTO> apiPointValueDTOS;
        // 判断是否调整
        // 触发规则
        AutoAdjustTriggerRuleEnum triggerRuleEnum = AutoAdjustTriggerRuleEnum.fromCode(configEntity.getTriggerRule());
        // 判断是否符合触发条件 并计算调整值
        switch (triggerRuleEnum) {
            case SLOPE:
                queryDTO = new ApiPointValueQueryDTO();
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictInfluenceFactorResultServiceImpl.java
对比新文件
@@ -0,0 +1,46 @@
package com.iailab.module.model.mcs.pre.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.pojo.SortingField;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.model.mcs.pre.dao.MmPredictInfluenceFactorResultDao;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorResultEntity;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorResultService;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorConfigVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultPageReqVO;
import com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorResultVO;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.springframework.stereotype.Service;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Slf4j
@Service
public class MmPredictInfluenceFactorResultServiceImpl extends BaseServiceImpl<MmPredictInfluenceFactorResultDao, MmPredictInfluenceFactorResultEntity> implements MmPredictInfluenceFactorResultService {
    @Override
    public PageResult<MmPredictInfluenceFactorResultVO> page(MmPredictInfluenceFactorResultPageReqVO params) {
        SortingField sortingField = new SortingField("time",SortingField.ORDER_DESC);
        List<SortingField> sortingFields = new ArrayList<>();
        sortingFields.add(sortingField);
        QueryWrapper<MmPredictInfluenceFactorResultEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("factor_id",params.getFactorId());
        queryWrapper.ge(params.getStartTime() != null,"time",params.getStartTime());
        queryWrapper.le(params.getEndTime() != null,"time",params.getEndTime());
        PageResult<MmPredictInfluenceFactorResultEntity> result = baseDao.selectPage(params, sortingFields, queryWrapper);
        return new PageResult<>(BeanUtils.toBean(result.getList(),MmPredictInfluenceFactorResultVO.class), result.getTotal());
    }
    @Override
    public void insert(List<MmPredictInfluenceFactorResultEntity> resultList) {
        baseDao.insertOrUpdate(resultList);
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictInfluenceFactorServiceImpl.java
对比新文件
@@ -0,0 +1,302 @@
package com.iailab.module.model.mcs.pre.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import com.iailab.module.data.enums.DataPointFreqEnum;
import com.iailab.module.model.api.mcs.dto.MmPredictInfluenceFactorHandleReqVO;
import com.iailab.module.model.mcs.pre.dao.MmPredictInfluenceFactorDao;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorConfigEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorResultEntity;
import com.iailab.module.model.mcs.pre.enums.InfluenceFactorPatternEnum;
import com.iailab.module.model.mcs.pre.service.MmItemResultJsonService;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorResultService;
import com.iailab.module.model.mcs.pre.service.MmPredictInfluenceFactorService;
import com.iailab.module.model.mcs.pre.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MmPredictInfluenceFactorServiceImpl extends BaseServiceImpl<MmPredictInfluenceFactorDao, MmPredictInfluenceFactorConfigEntity> implements MmPredictInfluenceFactorService {
    @Autowired
    private MmItemResultJsonService mmItemResultJsonService;
    @Autowired
    private DataPointApi dataPointApi;
    @Autowired
    private MmPredictInfluenceFactorResultService influenceFactorResultService;
    @Override
    public PageResult<MmPredictInfluenceFactorConfigVO> page(MmPredictInfluenceFactorPageReqVO params) {
        IPage<MmPredictInfluenceFactorConfigVO> page = baseDao.selectPage(params);
        return new PageResult<>(page.getRecords(), page.getTotal());
    }
    @Override
    public MmPredictInfluenceFactorConfigVO getInfo(String id) {
        return baseDao.getInfo(id);
    }
    @Override
    public void create(MmPredictInfluenceFactorConfigVO vo) {
        MmPredictInfluenceFactorConfigEntity entity = new MmPredictInfluenceFactorConfigEntity();
        String configId = UUID.randomUUID().toString();
        entity.setId(configId);
        entity.setOutputId(vo.getOutputId());
        entity.setPattern(vo.getPattern());
        entity.setIsEnable(vo.getIsEnable());
        entity.setCreateTime(new Date());
        baseDao.insert(entity);
        // 添加因素
        if (CollectionUtils.isEmpty(vo.getInfluenceFactors())) {
            return;
        }
        List<MmPredictInfluenceFactorVO> influenceFactors = vo.getInfluenceFactors();
        influenceFactors.forEach(e -> {
            e.setId(UUID.randomUUID().toString());
            e.setConfigId(configId);
        });
        baseDao.insertInfluenceFactor(influenceFactors);
    }
    @Override
    public void update(MmPredictInfluenceFactorConfigVO vo) {
        MmPredictInfluenceFactorConfigEntity entity = new MmPredictInfluenceFactorConfigEntity();
        entity.setId(vo.getId());
        entity.setOutputId(vo.getOutputId());
        entity.setPattern(vo.getPattern());
        entity.setIsEnable(vo.getIsEnable());
        baseDao.updateById(entity);
        // 删除因素
        baseDao.deleteInfluenceFactor(vo.getId());
        // 添加因素
        if (CollectionUtils.isEmpty(vo.getInfluenceFactors())) {
            return;
        }
        List<MmPredictInfluenceFactorVO> influenceFactors = vo.getInfluenceFactors();
        influenceFactors.forEach(e -> {
            if (StringUtils.isBlank(e.getId())) {
                e.setId(UUID.randomUUID().toString());
            }
            e.setConfigId(vo.getId());
        });
        baseDao.insertInfluenceFactor(influenceFactors);
    }
    @Override
    public void delete(String id) {
        // 删除因素
        baseDao.deleteById(id);
    }
    @Override
    public void influenceFactorHandle(MmPredictInfluenceFactorHandleReqVO reqVO) {
        // 影响时间
        Date influenceTime = new Date(reqVO.getInfluenceTime());
        // 判断影响时间一定是历史时间
        if (influenceTime.after(new Date())) {
            log.info("计算影响因素失败:影响时间大于当前时间");
            return;
        }
        // 查询所有影响因素
        Map<String, Object> params = new HashMap<>();
        params.put("isEnable",1);
        List<MmPredictInfluenceFactorHandleVO> influenceFactorConfigs = baseDao.selectList(params);
        // 根据统计方式分组
        Map<String, List<MmPredictInfluenceFactorHandleVO>> patternMap = influenceFactorConfigs.stream().collect(Collectors.groupingBy(MmPredictInfluenceFactorHandleVO::getPattern));
        List<MmPredictInfluenceFactorResultEntity> resultList = new ArrayList<>(influenceFactorConfigs.size());
        for (Map.Entry<String, List<MmPredictInfluenceFactorHandleVO>> entry : patternMap.entrySet()) {
            List<MmPredictInfluenceFactorHandleVO> influenceFactors = entry.getValue();
            // 缓存 因素预测项id-结果,相同因素预测项id只用计算一次
            HashMap<String,Double> values = new HashMap<>();
            switch (InfluenceFactorPatternEnum.fromCode(entry.getKey())) {
                case ACCUMULATE:
                    for (MmPredictInfluenceFactorHandleVO influenceFactor : influenceFactors) {
                        Double value = influenceFactorAccumulateCalculate(influenceFactor, values, influenceTime);
                        if (value == null) {
                            continue;
                        }
                        MmPredictInfluenceFactorResultEntity resultEntity = new MmPredictInfluenceFactorResultEntity();
                        resultEntity.setFactorId(influenceFactor.getId());
                        resultEntity.setTime(influenceTime);
                        resultEntity.setValue(value);
                        resultList.add(resultEntity);
                    }
                    break;
                case ACCURACY:
                    for (MmPredictInfluenceFactorHandleVO influenceFactor : influenceFactors) {
                        Double value = influenceFactorAccuracyCalculate(influenceFactor, values, influenceTime);
                        if (value == null) {
                            continue;
                        }
                        MmPredictInfluenceFactorResultEntity resultEntity = new MmPredictInfluenceFactorResultEntity();
                        resultEntity.setFactorId(influenceFactor.getId());
                        resultEntity.setTime(influenceTime);
                        resultEntity.setValue(value);
                        resultList.add(resultEntity);
                    }
                    break;
                default:
            }
        }
        if (CollectionUtils.isEmpty(resultList)) {
            return;
        }
        influenceFactorResultService.insert(resultList);
    }
    private Double influenceFactorAccuracyCalculate(MmPredictInfluenceFactorHandleVO influenceFactor, HashMap<String, Double> values, Date influenceTime) {
        if (values.containsKey(influenceFactor.getFactorOutputId())) {
            return values.get(influenceFactor.getFactorOutputId());
        }
        // 根据 预测长度 和 预测粒度 推算预测时间
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(influenceTime);
        calendar.add(Calendar.SECOND,-1 * influenceFactor.getPredictlength() * influenceFactor.getGranularity());
        Date predictTime = calendar.getTime();
        // 获取result_json,预测历史数据
        List<Object[]> predictData = mmItemResultJsonService.getData(influenceFactor.getFactorOutputId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        if (CollectionUtils.isEmpty(predictData)) {
            return null;
        }
        // 获取真实测点历史值
        ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO();
        ApiPointDTO point = dataPointApi.getInfoById(influenceFactor.getPointid());
        queryDTO.setPointNo(point.getPointNo());
        queryDTO.setStart(predictTime);
        queryDTO.setEnd(influenceTime);
        List<ApiPointValueDTO> dataList = dataPointApi.queryPointHistoryValue(queryDTO);
        if (CollectionUtils.isEmpty(dataList)) {
            return null;
        }
        dataList = completionData(influenceFactor.getPredictlength(),dataList,predictTime,influenceTime,point.getMinfreqid());
        Map<String, Double> dataMap = dataList.stream().collect(Collectors.toMap(e -> DateUtils.format(e.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), ApiPointValueDTO::getV, (e1, e2) -> e1));
        // 计算精确度误差
        int sum = 0;
        for (int i = 0; i < predictData.size(); i++) {
            Object[] objects = predictData.get(i);
            if (dataMap.containsKey(objects[0].toString())) {
                double abs = Math.abs(new BigDecimal(objects[1].toString()).subtract(BigDecimal.valueOf(dataMap.get(objects[0].toString()))).doubleValue());
                if (abs > influenceFactor.getDeviationValue()) {
                    sum++;
                }
            }
        }
        double value = BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(predictData.size()), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
        values.put(influenceFactor.getFactorOutputId(),value);
        return value;
    }
    private Double influenceFactorAccumulateCalculate(MmPredictInfluenceFactorHandleVO influenceFactor, HashMap<String, Double> values,Date influenceTime) {
        if (values.containsKey(influenceFactor.getFactorOutputId())) {
            return values.get(influenceFactor.getFactorOutputId());
        }
        // 根据 预测长度 和 预测粒度 推算预测时间
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(influenceTime);
        calendar.add(Calendar.SECOND,-1 * influenceFactor.getPredictlength() * influenceFactor.getGranularity());
        Date predictTime = calendar.getTime();
        // 获取result_json,预测历史数据
        double[] predictData = mmItemResultJsonService.getSimpleData(influenceFactor.getFactorOutputId(), predictTime, influenceFactor.getPredictlength());
        if (predictData == null || predictData.length == 0) {
            return null;
        }
        // 获取真实测点历史值
        ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO();
        ApiPointDTO point = dataPointApi.getInfoById(influenceFactor.getPointid());
        queryDTO.setPointNo(point.getPointNo());
        queryDTO.setStart(predictTime);
        queryDTO.setEnd(influenceTime);
        List<ApiPointValueDTO> dataList = dataPointApi.queryPointHistoryValue(queryDTO);
        if (CollectionUtils.isEmpty(dataList)) {
            return null;
        }
        dataList = completionData(influenceFactor.getPredictlength(),dataList,predictTime,influenceTime,point.getMinfreqid());
        // 计算累计量误差
        double value = Math.abs(dataList.stream().mapToDouble(ApiPointValueDTO::getV).sum() - Arrays.stream(predictData).sum());
        values.put(influenceFactor.getFactorOutputId(),value);
        return value;
    }
    private List<ApiPointValueDTO> completionData(int length, List<ApiPointValueDTO> dataList, Date startTime, Date endTime, String minfreqid) {
        if (CollectionUtils.isEmpty(dataList) || length == dataList.size()) {
            return dataList;
        } else if (length < dataList.size()) {
            return dataList.subList(dataList.size() - length, dataList.size());
        }
        List<ApiPointValueDTO> result = new ArrayList<>();
        long start = startTime.getTime();
        long end = endTime.getTime();
        long oneMin = 1000L * DataPointFreqEnum.getEumByCode(minfreqid).getValue();
        long mins = (end - start) / oneMin;
        //找出缺少项
        Map<Long, Double> sourceDataMap = new HashMap<>(dataList.size());
        for (ApiPointValueDTO pv : dataList) {
            sourceDataMap.put(pv.getT().getTime(), pv.getV());
        }
        Map<Long, Double> dataMap = new LinkedHashMap<>();
        for (int i = 0; i < mins; i++) {
            Long key = start + oneMin * i;
            Double value = sourceDataMap.get(key);
            dataMap.put(key, value);
        }
        //补充缺少项
        int k = 0;
        Map.Entry<Long, Double> lastItem = null;
        for (Map.Entry<Long, Double> item : dataMap.entrySet()) {
            if (k == 0 && item.getValue() == null) {
                item.setValue(getFirstValue(dataMap));
            } else if (item.getValue() == null) {
                item.setValue(lastItem.getValue());
            }
            k++;
            lastItem = item;
            ApiPointValueDTO dataEntity = new ApiPointValueDTO();
            dataEntity.setT(new Date(item.getKey()));
            dataEntity.setV(item.getValue());
            result.add(dataEntity);
        }
        return result;
    }
    private Double getFirstValue(Map<Long, Double> dataMap) {
        for (Map.Entry<Long, Double> item : dataMap.entrySet()) {
            if (item.getValue() != null) {
                return item.getValue();
            }
        }
        return 0.0;
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorConfigVO.java
对比新文件
@@ -0,0 +1,56 @@
package com.iailab.module.model.mcs.pre.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @description: 预测项影响因素
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
public class MmPredictInfluenceFactorConfigVO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private String id;
    /**
     * 预测项id
     */
    private String outputId;
    /**
     * 预测项名称
     */
    private String outputName;
    /**
     * 统计方式
     */
    private String pattern;
    /**
     * 是否启用(0禁用 1启用)
     */
    private Integer isEnable;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 影响因素
     */
    private List<MmPredictInfluenceFactorVO> influenceFactors;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorHandleVO.java
对比新文件
@@ -0,0 +1,52 @@
package com.iailab.module.model.mcs.pre.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
/**
 * @description: 预测项影响因素关联表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
public class MmPredictInfluenceFactorHandleVO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private String id;
    /**
     * 因素预测项id
     */
    private String factorOutputId;
    /**
     * 偏差值
     */
    private Double deviationValue;
    /**
     * 统计方式
     */
    private String pattern;
    /**
     * 真实测点id
     */
    private String pointid;
    /**
     * 预测长度
     */
    private Integer predictlength;
    /**
     * 预测粒度
     */
    private Integer granularity;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorPageReqVO.java
对比新文件
@@ -0,0 +1,25 @@
package com.iailab.module.model.mcs.pre.vo;
import com.iailab.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 14:35
 **/
@Schema(description = "预测影响因素配置 - Page Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MmPredictInfluenceFactorPageReqVO extends PageParam {
    @Schema(description = "预测项名称")
    private String outputName;
    @Schema(description = "统计方式")
    private String pattern;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorResultPageReqVO.java
对比新文件
@@ -0,0 +1,34 @@
package com.iailab.module.model.mcs.pre.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iailab.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @description:
 * @author: dzd
 * @date: 2025/4/8 14:35
 **/
@Schema(description = "预测影响因素结果 - Page Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MmPredictInfluenceFactorResultPageReqVO extends PageParam {
    @Schema(description = "因素id")
    private String factorId;
    @Schema(description = "开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    @Schema(description = "结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorResultVO.java
对比新文件
@@ -0,0 +1,30 @@
package com.iailab.module.model.mcs.pre.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @description: 预测项影响因素结果表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
public class MmPredictInfluenceFactorResultVO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 因素id
     */
    private String factorId;
    /**
     * 影响时间
     */
    private Date time;
    /**
     * 影响值
     */
    private Double value;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/vo/MmPredictInfluenceFactorVO.java
对比新文件
@@ -0,0 +1,43 @@
package com.iailab.module.model.mcs.pre.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * @description: 预测项影响因素关联表
 * @author: dzd
 * @date: 2025/4/14 13:36
 **/
@Data
public class MmPredictInfluenceFactorVO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private String id;
    /**
     * 配置id
     */
    private String configId;
    /**
     * 因素预测项id
     */
    private String factorOutputId;
    /**
     * 因素预测项名称
     */
    private String factorOutputName;
    /**
     * 偏差值
     */
    private Double deviationValue;
}
iailab-module-model/iailab-module-model-biz/src/main/resources/application.yml
@@ -228,6 +228,9 @@
      - t_ml_project
      - t_ml_project_model
      - t_mm_predict_auto_adjust_config
      - t_mm_predict_influence_factor_config
      - t_mm_predict_influence_factor
      - t_mm_predict_influence_factor_result
  app:
    app-key: model
    app-secret: 85b0df7edc3df3611913df34ed695011
iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictInfluenceFactorResultDao.xml
对比新文件
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.iailab.module.model.mcs.pre.dao.MmPredictInfluenceFactorResultDao">
    <insert id="insertOrUpdate" parameterType="com.iailab.module.model.mcs.pre.entity.MmPredictInfluenceFactorResultEntity">
        INSERT INTO t_mm_predict_influence_factor_result (factor_id, time, value)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.factorId},#{item.time},#{item.value})
        </foreach>
        ON DUPLICATE KEY UPDATE
        value = VALUES(value);
    </insert>
</mapper>
iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/pre/MmPredictInfluenceFactorDao.xml
对比新文件
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.iailab.module.model.mcs.pre.dao.MmPredictInfluenceFactorDao">
    <resultMap id="influenceFactor" type="com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorConfigVO">
        <id property="id" column="id"/>
        <result property="outputId" column="output_id"/>
        <result property="outputName" column="output_name"/>
        <result property="pattern" column="pattern"/>
        <result property="isEnable" column="is_enable"/>
        <result property="createTime" column="create_time"/>
        <collection property="influenceFactors" ofType="com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorVO">
            <id property="id" column="factors_id"/>
            <result property="factorOutputId" column="factor_output_id"/>
            <result property="factorOutputName" column="factor_output_name"/>
            <result property="deviationValue" column="deviation_value"/>
            </collection>
    </resultMap>
    <insert id="insertInfluenceFactor" parameterType="com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorVO">
        INSERT INTO
        t_mm_predict_influence_factor
        (id,config_id,factor_output_id,deviation_value)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.id},#{item.configId},#{item.factorOutputId},#{item.deviationValue})
        </foreach>
    </insert>
    <select id="getPage" resultMap="influenceFactor">
        SELECT
        t1.id,
        t1.output_id,
        t3.result_name output_name,
        t1.pattern,
        t1.is_enable,
        t1.create_time,
        t2.id factors_id,
        t2.factor_output_id,
        t4.result_name factor_output_name,
        t2.deviation_value
        FROM
        t_mm_predict_influence_factor_config t1
        LEFT JOIN t_mm_predict_influence_factor t2 ON t1.id = t2.config_id
        LEFT JOIN t_mm_item_output t3 ON t1.output_id = t3.id
        LEFT JOIN t_mm_item_output t4 ON t2.factor_output_id = t4.id
        <where>
            <if test="params.outputName != null and params.outputName != ''">
                and t3.result_name like CONCAT('%', #{params.outputName},'%')
            </if>
            <if test="params.pattern != null and params.pattern != ''">
                and t1.pattern = #{params.pattern}
            </if>
        </where>
        order by t1.create_time desc
    </select>
    <select id="getInfo" resultMap="influenceFactor" parameterType="java.lang.String">
        SELECT
            t1.id,
            t1.output_id,
            t3.result_name output_name,
            t1.pattern,
            t1.is_enable,
            t1.create_time,
            t2.id factors_id,
            t2.factor_output_id,
            t2.deviation_value
        FROM
            t_mm_predict_influence_factor_config t1
            LEFT JOIN t_mm_predict_influence_factor t2 ON t1.id = t2.config_id
            LEFT JOIN t_mm_item_output t3 on t1.output_id = t3.id
        where t1.id = #{id}
    </select>
    <select id="selectList" resultType="com.iailab.module.model.mcs.pre.vo.MmPredictInfluenceFactorHandleVO" parameterType="map">
        SELECT
        t2.id,
        t2.factor_output_id,
        t2.deviation_value,
        t1.pattern,
        t3.pointid,
        t4.predictlength,
        t4.granularity
        FROM
        t_mm_predict_influence_factor_config t1
        LEFT JOIN t_mm_predict_influence_factor t2 ON t1.id = t2.config_id
        LEFT JOIN t_mm_item_output t3 ON t2.factor_output_id = t3.id
        LEFT JOIN t_mm_predict_item t4 ON t3.itemid = t4.id
        <where>
            <if test="params.isEnable != null and params.isEnable != ''">
                and t1.is_enable = #{params.isEnable}
            </if>
            <if test="params.pattern != null and params.pattern != ''">
                and t1.pattern = #{params.pattern}
            </if>
        </where>
        order by t1.create_time desc
    </select>
</mapper>