wangmiaomiao 10 сар өмнө
parent
commit
9fcf58e4ed

+ 130 - 0
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -9,6 +9,7 @@ import com.slibra.business.mapper.*;
 import com.slibra.business.req.ChatReq;
 import com.slibra.business.req.DecisionReq;
 import com.slibra.business.res.ShowValueBasic;
+import com.slibra.business.service.ITXinyiForecastComparisonService;
 import com.slibra.common.constant.MyConstants;
 import com.slibra.common.enums.BusinessEnum;
 import com.slibra.common.utils.DateUtils;
@@ -57,6 +58,9 @@ public class AsyncTask {
     @Autowired
     private TXinyiRobotMapper xinyiRobotMapper;
 
+    @Autowired
+    private TXinyiForecastComparisonMapper xinyiForecastComparisonMapper;
+
 
     /**
      *
@@ -65,6 +69,12 @@ public class AsyncTask {
      */
     @Async("customizeExecutor")
     public void handleWarning(TXinyiIndustry tXinyiIndustry){
+        //2024年6月18日10:45:20 额外计算一下预测的准确度
+        try {
+            this.updateForecastComparisonByIndustry(tXinyiIndustry);
+        } catch (Exception e) {
+            log.error("-------------------------------更新预测准确度的时候异常,异常信息为{}", e.getMessage());
+        }
         log.info("进入了定时任务保存工业库数据并触发报警操作");
 //        tXinyiIndustry.setCsTn(new BigDecimal(17));
         //获取配置表
@@ -84,6 +94,116 @@ public class AsyncTask {
         this.handleSHWarning(tXinyiIndustry, normConfig);
     }
 
+    /**
+     * 额外计算一下预测的准确度
+     * @param tXinyiIndustry
+     */
+    private void updateForecastComparisonByIndustry(TXinyiIndustry tXinyiIndustry) {
+        BigDecimal csCod = tXinyiIndustry.getCsCod();
+        BigDecimal csSs = tXinyiIndustry.getCsSs();
+        BigDecimal csTn = tXinyiIndustry.getCsTn();
+        BigDecimal csTp = tXinyiIndustry.getCsTp();
+        BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
+        String testHour = tXinyiIndustry.getTestHour();
+
+        //时间段1
+        List<TXinyiForecastComparison> tXinyiForecastComparisons1 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeOne(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons1)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons1) {
+                if("出水COD".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(csCod);
+                if("出水SS".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(csSs);
+                if("出水总氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(csTn);
+                if("出水总磷".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(csTp);
+                if("出水氨氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(csNh3);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+        //时间段2
+        List<TXinyiForecastComparison> tXinyiForecastComparisons2 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeThree(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons2)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons2) {
+                if("出水COD".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(csCod);
+                if("出水SS".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(csSs);
+                if("出水总氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(csTn);
+                if("出水总磷".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(csTp);
+                if("出水氨氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(csNh3);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+        //时间段3
+        List<TXinyiForecastComparison> tXinyiForecastComparisons3 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeThree(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons3)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons3) {
+                if("出水COD".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(csCod);
+                if("出水SS".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(csSs);
+                if("出水总氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(csTn);
+                if("出水总磷".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(csTp);
+                if("出水氨氮".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(csNh3);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+    }
+
+
+    /**
+     * 额外计算一下预测的准确度
+     * @param tXinyiRobot
+     */
+    private void updateForecastComparisonByRobot(TXinyiRobot tXinyiRobot) {
+        BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
+        BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
+        String testHour = tXinyiRobot.getTestHour();
+
+        //时间段1
+        List<TXinyiForecastComparison> tXinyiForecastComparisons1 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeOne(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons1)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons1) {
+                if("xsy1".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(no3Hlj1Jqr);
+                if("xsy2".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastOne(no3Hlj2Jqr);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+        //时间段2
+        List<TXinyiForecastComparison> tXinyiForecastComparisons2 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeThree(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons2)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons2) {
+                if("xsy1".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(no3Hlj1Jqr);
+                if("xsy2".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastTwo(no3Hlj2Jqr);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+        //时间段3
+        List<TXinyiForecastComparison> tXinyiForecastComparisons3 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeThree(testHour).build());
+        if(!CollectionUtils.isEmpty(tXinyiForecastComparisons3)){
+            for (TXinyiForecastComparison tXinyiForecastComparison : tXinyiForecastComparisons3) {
+                if("xsy1".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(no3Hlj1Jqr);
+                if("xsy2".equals(tXinyiForecastComparison.getCategory()))
+                    tXinyiForecastComparison.setHsForecastThree(no3Hlj2Jqr);
+                this.xinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+            }
+        }
+    }
+
     private TXinyiCalculate addCalculateByIndustry(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
         TXinyiCalculate tXinyiCalculate = new TXinyiCalculate();
         //时间相关
@@ -959,6 +1079,14 @@ public class AsyncTask {
 
         //处理数据
         for (TXinyiRobot tXinyiRobot : uniqueList) {
+
+            //2024年6月18日10:45:20 额外计算一下预测的准确度
+            try {
+                this.updateForecastComparisonByRobot(tXinyiRobot);
+            } catch (Exception e) {
+                log.error("~~~~~~~~~~~~~~~~~~~~~~~~~更新预测准确度的时候异常,异常信息为{}", e.getMessage());
+            }
+
             //处理总氮和总磷报警
             //总氮
             BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
@@ -987,6 +1115,8 @@ public class AsyncTask {
     }
 
 
+
+
     /**
      * 通过输入的值 生成对应类型的报警对象(出水)
      *

+ 16 - 8
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -13,6 +13,7 @@ import com.slibra.business.req.ChatReq;
 import com.slibra.business.req.DecisionReq;
 import com.slibra.business.res.ChartBasic;
 import com.slibra.business.res.ShowValueChartBasic;
+import com.slibra.business.service.ITXinyiForecastComparisonService;
 import com.slibra.common.constant.MyConstants;
 import com.slibra.common.enums.BusinessEnum;
 import com.slibra.common.enums.DataSourceType;
@@ -87,13 +88,16 @@ public class RyTask
     @Autowired
     private AsyncTask asyncTask;
 
+    @Autowired
+    private ITXinyiForecastComparisonService xinyiForecastComparisonService;
+
 
 //    public final static StopWatch watch = new StopWatch("task");
     public static final String[] queryTags = {"信义污水厂JS_COD_Value","信义污水厂JS_PH_Value","信义污水厂JS_SS_Value","信义污水厂JS_ZL_Value","信义污水厂JS_ZA_Value","信义污水厂JS_AD_Value","信义污水厂JS_T_Value","信义污水厂进水泵房液位","信义污水厂出水瞬时流量","信义污水厂升级出水COD","信义污水厂升级出水PH","信义污水厂升级出水SS","信义污水厂升级出水TN","信义污水厂升级出水TP","信义污水厂升级出水氨氮","信义污水厂AIT202_Value","信义污水厂AIT203_Value","信义污水厂AIT207_Value","信义污水厂AIT206_Value","信义污水厂AIT209_Value","信义污水厂AIT210_Value","信义污水厂进水TDS","信义污水厂FT101_Value","信义污水厂SWCHHYHLB1_R_Value","信义污水厂SWCHHYHLB2_R_Value","信义污水厂SWCHHYHLB3_R_Value","信义污水厂SWCHHYHLB4_R_Value","信义污水厂SWCHHYHLB5_R_Value","信义污水厂SWCHHYHLB6_R_Value","信义污水厂SWCWNHLB1_R_Value","信义污水厂SWCWNHLB2_R_Value","信义污水厂SWCWNHLB3_R_Value","信义污水厂SWCWNHLB4_R_Value","信义污水厂SWCWNHLB5_R_Value","信义污水厂GFJ1_R_Value","信义污水厂GFJ2_R_Value","信义污水厂GFJ3_R_Value","信义污水厂GFJ4_R_Value","信义污水厂GFJ5_R_Value","信义污水厂GFJ6_R_Value","信义污水厂GFJ1_KQLL_Value","信义污水厂GFJ2_KQLL_Value","信义污水厂GFJ3_KQLL_Value","信义污水厂GFJ4_KQLL_Value","信义污水厂GFJ5_KQLL_Value","信义污水厂GFJ6_KQLL_Value","信义污水厂实际碳源加药量","信义污水厂除磷加药瞬时流量", "信义污水厂_除磷P04预测值_"};
 
 
     public static final String[] predictorArr = {"出水COD", "出水SS", "出水总氮", "出水总磷", "出水氨氮", "xsy1", "xsy2"};
-    public static final String[] predictorArrStr = {"出水COD", "出水SS", "出水总氮", "出水总磷", "出水氨氮", "硝酸盐#1", "硝酸盐#2"};
+//    public static final String[] predictorArrStr = {"出水COD", "出水SS", "出水总氮", "出水总磷", "出水氨氮", "硝酸盐#1", "硝酸盐#2"};
     /**
      * 定时从工业库获取数据
      *
@@ -1293,6 +1297,17 @@ public class RyTask
     }
 
     private void handlePredictorWarning(String[] split, String hour, String task, List<TXinyiIndustry> tXinyiIndustries6, List<TXinyiRobot> tXinyiRobots6, String date) {
+        String[] hours = hour.split(",");
+        //2024年6月18日10:36:49 增加预测记录,预测准确度计算等
+        TXinyiForecastComparison tXinyiForecastComparison = new TXinyiForecastComparison();
+        tXinyiForecastComparison.setCategory(task);
+        tXinyiForecastComparison.setForecastTimeOne(date + " " + hours[0]);
+        tXinyiForecastComparison.setForecastTimeTwo(date + " " + hours[1]);
+        tXinyiForecastComparison.setForecastTimeThree(date + " " + hours[2]);
+        tXinyiForecastComparison.setHsForecastOne(new BigDecimal(split[0]));
+        tXinyiForecastComparison.setHsForecastTwo(new BigDecimal(split[1]));
+        tXinyiForecastComparison.setHsForecastThree(new BigDecimal(split[2]));
+        this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
         //获取配置表
         List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
         if(CollectionUtils.isEmpty(tXinyiNormConfigs)) {
@@ -1314,7 +1329,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiIndustryTemp.getCsCod());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1334,7 +1348,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiIndustryTemp.getCsSs());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1354,7 +1367,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiIndustryTemp.getCsTn());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1374,7 +1386,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiIndustryTemp.getCsTp());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1394,7 +1405,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiIndustryTemp.getCsNh3());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1414,7 +1424,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiRobotTemp.getNo3Hlj1Jqr());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();
@@ -1434,7 +1443,6 @@ public class RyTask
                 chartBasic.setVal(tXinyiRobotTemp.getNo3Hlj2Jqr());
                 chartsDataList.add(chartBasic);
             }
-            String[] hours = hour.split(",");
             for (int i = 0; i < split.length; i++) {
                 String val = split[i];
                 ChartBasic chartBasic = new ChartBasic();

+ 115 - 0
slibra-system/src/main/java/com/slibra/business/domain/TXinyiForecastComparison.java

@@ -0,0 +1,115 @@
+package com.slibra.business.domain;
+
+import java.math.BigDecimal;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.slibra.common.annotation.Excel;
+import com.slibra.common.core.domain.BaseEntity;
+
+/**
+ * 信义预测对比对象 t_xinyi_forecast_comparison
+ * 
+ * @author slibra
+ * @date 2024-06-18
+ */
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TXinyiForecastComparison extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 预测类型 */
+    @Excel(name = "预测类型")
+    private String category;
+
+    /** 预测时间1 */
+    @Excel(name = "预测时间1")
+    private String forecastTimeOne;
+
+    /** 实际值1 */
+    @Excel(name = "实际值1")
+    private BigDecimal realOne;
+
+    /** 红杉预测值1 */
+    @Excel(name = "红杉预测值1")
+    private BigDecimal hsForecastOne;
+
+    /** 红杉值1误差率 */
+    @Excel(name = "红杉值1误差率")
+    private BigDecimal hsErrorRateOne;
+
+    /** 跃渊预测值1 */
+    @Excel(name = "跃渊预测值1")
+    private BigDecimal yyForecastOne;
+
+    /** 跃渊值1误差率 */
+    @Excel(name = "跃渊值1误差率")
+    private BigDecimal yyErrorRateOne;
+
+    /** 预测时间2 */
+    @Excel(name = "预测时间2")
+    private String forecastTimeTwo;
+
+    /** 实际值2 */
+    @Excel(name = "实际值2")
+    private BigDecimal realTwo;
+
+    /** 红杉预测值2 */
+    @Excel(name = "红杉预测值2")
+    private BigDecimal hsForecastTwo;
+
+    /** 红杉值2误差率 */
+    @Excel(name = "红杉值2误差率")
+    private BigDecimal hsErrorRateTwo;
+
+    /** 跃渊预测值2 */
+    @Excel(name = "跃渊预测值2")
+    private BigDecimal yyForecastTwo;
+
+    /** 跃渊值2误差率 */
+    @Excel(name = "跃渊值2误差率")
+    private BigDecimal yyErrorRateTwo;
+
+    /** 预测时间3 */
+    @Excel(name = "预测时间3")
+    private String forecastTimeThree;
+
+    /** 实际值3 */
+    @Excel(name = "实际值3")
+    private BigDecimal realThree;
+
+    /** 红杉预测值3 */
+    @Excel(name = "红杉预测值3")
+    private BigDecimal hsForecastThree;
+
+    /** 红杉值3误差率 */
+    @Excel(name = "红杉值3误差率")
+    private BigDecimal hsErrorRateThree;
+
+    /** 跃渊预测值3 */
+    @Excel(name = "跃渊预测值3")
+    private BigDecimal yyForecastThree;
+
+    /** 跃渊值3误差率 */
+    @Excel(name = "跃渊值3误差率")
+    private BigDecimal yyErrorRateThree;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private Long delFlag;
+
+    /** 乐观锁 */
+    @Excel(name = "乐观锁")
+    private Long revision;
+
+}

+ 61 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TXinyiForecastComparisonMapper.java

@@ -0,0 +1,61 @@
+package com.slibra.business.mapper;
+
+import java.util.List;
+import com.slibra.business.domain.TXinyiForecastComparison;
+
+/**
+ * 信义预测对比Mapper接口
+ * 
+ * @author slibra
+ * @date 2024-06-18
+ */
+public interface TXinyiForecastComparisonMapper 
+{
+    /**
+     * 查询信义预测对比
+     * 
+     * @param id 信义预测对比主键
+     * @return 信义预测对比
+     */
+    public TXinyiForecastComparison selectTXinyiForecastComparisonById(Long id);
+
+    /**
+     * 查询信义预测对比列表
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 信义预测对比集合
+     */
+    public List<TXinyiForecastComparison> selectTXinyiForecastComparisonList(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 新增信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    public int insertTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 修改信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    public int updateTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 删除信义预测对比
+     * 
+     * @param id 信义预测对比主键
+     * @return 结果
+     */
+    public int deleteTXinyiForecastComparisonById(Long id);
+
+    /**
+     * 批量删除信义预测对比
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTXinyiForecastComparisonByIds(Long[] ids);
+}

+ 2 - 2
slibra-system/src/main/java/com/slibra/business/res/ShowValueBasic.java

@@ -16,8 +16,8 @@ import java.math.BigDecimal;
 public class ShowValueBasic {
 
 
-    @JSONField(ordinal = 1, name = "title")
-    private String a;
+    /*@JSONField(ordinal = 1, name = "title")
+    private String a;*/
 
     @JSONField(ordinal = 2, name = "报警时间")
     private String b;

+ 2 - 2
slibra-system/src/main/java/com/slibra/business/res/ShowValueChartBasic.java

@@ -16,8 +16,8 @@ import java.math.BigDecimal;
 public class ShowValueChartBasic {
 
 
-    @JSONField(ordinal = 1, name = "title")
-    private String a;
+    /*@JSONField(ordinal = 1, name = "title")
+    private String a;*/
 
     @JSONField(ordinal = 2, name = "预警时间")
     private String b;

+ 61 - 0
slibra-system/src/main/java/com/slibra/business/service/ITXinyiForecastComparisonService.java

@@ -0,0 +1,61 @@
+package com.slibra.business.service;
+
+import java.util.List;
+import com.slibra.business.domain.TXinyiForecastComparison;
+
+/**
+ * 信义预测对比Service接口
+ * 
+ * @author slibra
+ * @date 2024-06-18
+ */
+public interface ITXinyiForecastComparisonService 
+{
+    /**
+     * 查询信义预测对比
+     * 
+     * @param id 信义预测对比主键
+     * @return 信义预测对比
+     */
+    public TXinyiForecastComparison selectTXinyiForecastComparisonById(Long id);
+
+    /**
+     * 查询信义预测对比列表
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 信义预测对比集合
+     */
+    public List<TXinyiForecastComparison> selectTXinyiForecastComparisonList(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 新增信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    public int insertTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 修改信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    public int updateTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison);
+
+    /**
+     * 批量删除信义预测对比
+     * 
+     * @param ids 需要删除的信义预测对比主键集合
+     * @return 结果
+     */
+    public int deleteTXinyiForecastComparisonByIds(Long[] ids);
+
+    /**
+     * 删除信义预测对比信息
+     * 
+     * @param id 信义预测对比主键
+     * @return 结果
+     */
+    public int deleteTXinyiForecastComparisonById(Long id);
+}

+ 96 - 0
slibra-system/src/main/java/com/slibra/business/service/impl/TXinyiForecastComparisonServiceImpl.java

@@ -0,0 +1,96 @@
+package com.slibra.business.service.impl;
+
+import java.util.List;
+import com.slibra.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.slibra.business.mapper.TXinyiForecastComparisonMapper;
+import com.slibra.business.domain.TXinyiForecastComparison;
+import com.slibra.business.service.ITXinyiForecastComparisonService;
+
+/**
+ * 信义预测对比Service业务层处理
+ * 
+ * @author slibra
+ * @date 2024-06-18
+ */
+@Service
+public class TXinyiForecastComparisonServiceImpl implements ITXinyiForecastComparisonService 
+{
+    @Autowired
+    private TXinyiForecastComparisonMapper tXinyiForecastComparisonMapper;
+
+    /**
+     * 查询信义预测对比
+     * 
+     * @param id 信义预测对比主键
+     * @return 信义预测对比
+     */
+    @Override
+    public TXinyiForecastComparison selectTXinyiForecastComparisonById(Long id)
+    {
+        return tXinyiForecastComparisonMapper.selectTXinyiForecastComparisonById(id);
+    }
+
+    /**
+     * 查询信义预测对比列表
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 信义预测对比
+     */
+    @Override
+    public List<TXinyiForecastComparison> selectTXinyiForecastComparisonList(TXinyiForecastComparison tXinyiForecastComparison)
+    {
+        return tXinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(tXinyiForecastComparison);
+    }
+
+    /**
+     * 新增信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    @Override
+    public int insertTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison)
+    {
+        tXinyiForecastComparison.setCreateTime(DateUtils.getNowDate());
+        return tXinyiForecastComparisonMapper.insertTXinyiForecastComparison(tXinyiForecastComparison);
+    }
+
+    /**
+     * 修改信义预测对比
+     * 
+     * @param tXinyiForecastComparison 信义预测对比
+     * @return 结果
+     */
+    @Override
+    public int updateTXinyiForecastComparison(TXinyiForecastComparison tXinyiForecastComparison)
+    {
+        tXinyiForecastComparison.setUpdateTime(DateUtils.getNowDate());
+        return tXinyiForecastComparisonMapper.updateTXinyiForecastComparison(tXinyiForecastComparison);
+    }
+
+    /**
+     * 批量删除信义预测对比
+     * 
+     * @param ids 需要删除的信义预测对比主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTXinyiForecastComparisonByIds(Long[] ids)
+    {
+        return tXinyiForecastComparisonMapper.deleteTXinyiForecastComparisonByIds(ids);
+    }
+
+    /**
+     * 删除信义预测对比信息
+     * 
+     * @param id 信义预测对比主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTXinyiForecastComparisonById(Long id)
+    {
+        return tXinyiForecastComparisonMapper.deleteTXinyiForecastComparisonById(id);
+    }
+}

+ 180 - 0
slibra-system/src/main/resources/mapper/business/TXinyiForecastComparisonMapper.xml

@@ -0,0 +1,180 @@
+<?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.slibra.business.mapper.TXinyiForecastComparisonMapper">
+    
+    <resultMap type="TXinyiForecastComparison" id="TXinyiForecastComparisonResult">
+        <result property="id"    column="id"    />
+        <result property="category"    column="category"    />
+        <result property="forecastTimeOne"    column="forecast_time_one"    />
+        <result property="realOne"    column="real_one"    />
+        <result property="hsForecastOne"    column="hs_forecast_one"    />
+        <result property="hsErrorRateOne"    column="hs_error_rate_one"    />
+        <result property="yyForecastOne"    column="yy_forecast_one"    />
+        <result property="yyErrorRateOne"    column="yy_error_rate_one"    />
+        <result property="forecastTimeTwo"    column="forecast_time_two"    />
+        <result property="realTwo"    column="real_two"    />
+        <result property="hsForecastTwo"    column="hs_forecast_two"    />
+        <result property="hsErrorRateTwo"    column="hs_error_rate_two"    />
+        <result property="yyForecastTwo"    column="yy_forecast_two"    />
+        <result property="yyErrorRateTwo"    column="yy_error_rate_two"    />
+        <result property="forecastTimeThree"    column="forecast_time_three"    />
+        <result property="realThree"    column="real_three"    />
+        <result property="hsForecastThree"    column="hs_forecast_three"    />
+        <result property="hsErrorRateThree"    column="hs_error_rate_three"    />
+        <result property="yyForecastThree"    column="yy_forecast_three"    />
+        <result property="yyErrorRateThree"    column="yy_error_rate_three"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="revision"    column="revision"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectTXinyiForecastComparisonVo">
+        select id, category, forecast_time_one, real_one, hs_forecast_one, hs_error_rate_one, yy_forecast_one, yy_error_rate_one, forecast_time_two, real_two, hs_forecast_two, hs_error_rate_two, yy_forecast_two, yy_error_rate_two, forecast_time_three, real_three, hs_forecast_three, hs_error_rate_three, yy_forecast_three, yy_error_rate_three, del_flag, revision, create_by, create_time, update_by, update_time, remark from t_xinyi_forecast_comparison
+    </sql>
+
+    <select id="selectTXinyiForecastComparisonList" parameterType="TXinyiForecastComparison" resultMap="TXinyiForecastComparisonResult">
+        <include refid="selectTXinyiForecastComparisonVo"/>
+        <where>
+            1 = 1
+            <if test="category != null  and category != ''"> and category = #{category}</if>
+            <if test="forecastTimeOne != null  and forecastTimeOne != ''"> and forecast_time_one = #{forecastTimeOne}</if>
+            <if test="realOne != null "> and real_one = #{realOne}</if>
+            <if test="hsForecastOne != null "> and hs_forecast_one = #{hsForecastOne}</if>
+            <if test="hsErrorRateOne != null "> and hs_error_rate_one = #{hsErrorRateOne}</if>
+            <if test="yyForecastOne != null "> and yy_forecast_one = #{yyForecastOne}</if>
+            <if test="yyErrorRateOne != null "> and yy_error_rate_one = #{yyErrorRateOne}</if>
+            <if test="forecastTimeTwo != null  and forecastTimeTwo != ''"> and forecast_time_two = #{forecastTimeTwo}</if>
+            <if test="realTwo != null "> and real_two = #{realTwo}</if>
+            <if test="hsForecastTwo != null "> and hs_forecast_two = #{hsForecastTwo}</if>
+            <if test="hsErrorRateTwo != null "> and hs_error_rate_two = #{hsErrorRateTwo}</if>
+            <if test="yyForecastTwo != null "> and yy_forecast_two = #{yyForecastTwo}</if>
+            <if test="yyErrorRateTwo != null "> and yy_error_rate_two = #{yyErrorRateTwo}</if>
+            <if test="forecastTimeThree != null  and forecastTimeThree != ''"> and forecast_time_three = #{forecastTimeThree}</if>
+            <if test="realThree != null "> and real_three = #{realThree}</if>
+            <if test="hsForecastThree != null "> and hs_forecast_three = #{hsForecastThree}</if>
+            <if test="hsErrorRateThree != null "> and hs_error_rate_three = #{hsErrorRateThree}</if>
+            <if test="yyForecastThree != null "> and yy_forecast_three = #{yyForecastThree}</if>
+            <if test="yyErrorRateThree != null "> and yy_error_rate_three = #{yyErrorRateThree}</if>
+            <if test="revision != null "> and revision = #{revision}</if>
+        </where>
+        and del_flag = 0 order by id desc
+    </select>
+    
+    <select id="selectTXinyiForecastComparisonById" parameterType="Long" resultMap="TXinyiForecastComparisonResult">
+        <include refid="selectTXinyiForecastComparisonVo"/>
+        where id = #{id} and del_flag = 0
+    </select>
+        
+    <insert id="insertTXinyiForecastComparison" parameterType="TXinyiForecastComparison" useGeneratedKeys="true" keyProperty="id">
+        insert into t_xinyi_forecast_comparison
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="category != null">category,</if>
+            <if test="forecastTimeOne != null">forecast_time_one,</if>
+            <if test="realOne != null">real_one,</if>
+            <if test="hsForecastOne != null">hs_forecast_one,</if>
+            <if test="hsErrorRateOne != null">hs_error_rate_one,</if>
+            <if test="yyForecastOne != null">yy_forecast_one,</if>
+            <if test="yyErrorRateOne != null">yy_error_rate_one,</if>
+            <if test="forecastTimeTwo != null">forecast_time_two,</if>
+            <if test="realTwo != null">real_two,</if>
+            <if test="hsForecastTwo != null">hs_forecast_two,</if>
+            <if test="hsErrorRateTwo != null">hs_error_rate_two,</if>
+            <if test="yyForecastTwo != null">yy_forecast_two,</if>
+            <if test="yyErrorRateTwo != null">yy_error_rate_two,</if>
+            <if test="forecastTimeThree != null">forecast_time_three,</if>
+            <if test="realThree != null">real_three,</if>
+            <if test="hsForecastThree != null">hs_forecast_three,</if>
+            <if test="hsErrorRateThree != null">hs_error_rate_three,</if>
+            <if test="yyForecastThree != null">yy_forecast_three,</if>
+            <if test="yyErrorRateThree != null">yy_error_rate_three,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="revision != null">revision,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="category != null">#{category},</if>
+            <if test="forecastTimeOne != null">#{forecastTimeOne},</if>
+            <if test="realOne != null">#{realOne},</if>
+            <if test="hsForecastOne != null">#{hsForecastOne},</if>
+            <if test="hsErrorRateOne != null">#{hsErrorRateOne},</if>
+            <if test="yyForecastOne != null">#{yyForecastOne},</if>
+            <if test="yyErrorRateOne != null">#{yyErrorRateOne},</if>
+            <if test="forecastTimeTwo != null">#{forecastTimeTwo},</if>
+            <if test="realTwo != null">#{realTwo},</if>
+            <if test="hsForecastTwo != null">#{hsForecastTwo},</if>
+            <if test="hsErrorRateTwo != null">#{hsErrorRateTwo},</if>
+            <if test="yyForecastTwo != null">#{yyForecastTwo},</if>
+            <if test="yyErrorRateTwo != null">#{yyErrorRateTwo},</if>
+            <if test="forecastTimeThree != null">#{forecastTimeThree},</if>
+            <if test="realThree != null">#{realThree},</if>
+            <if test="hsForecastThree != null">#{hsForecastThree},</if>
+            <if test="hsErrorRateThree != null">#{hsErrorRateThree},</if>
+            <if test="yyForecastThree != null">#{yyForecastThree},</if>
+            <if test="yyErrorRateThree != null">#{yyErrorRateThree},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="revision != null">#{revision},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTXinyiForecastComparison" parameterType="TXinyiForecastComparison">
+        update t_xinyi_forecast_comparison
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="category != null">category = #{category},</if>
+            <if test="forecastTimeOne != null">forecast_time_one = #{forecastTimeOne},</if>
+            <if test="realOne != null">real_one = #{realOne},</if>
+            <if test="hsForecastOne != null">hs_forecast_one = #{hsForecastOne},</if>
+            <if test="hsErrorRateOne != null">hs_error_rate_one = #{hsErrorRateOne},</if>
+            <if test="yyForecastOne != null">yy_forecast_one = #{yyForecastOne},</if>
+            <if test="yyErrorRateOne != null">yy_error_rate_one = #{yyErrorRateOne},</if>
+            <if test="forecastTimeTwo != null">forecast_time_two = #{forecastTimeTwo},</if>
+            <if test="realTwo != null">real_two = #{realTwo},</if>
+            <if test="hsForecastTwo != null">hs_forecast_two = #{hsForecastTwo},</if>
+            <if test="hsErrorRateTwo != null">hs_error_rate_two = #{hsErrorRateTwo},</if>
+            <if test="yyForecastTwo != null">yy_forecast_two = #{yyForecastTwo},</if>
+            <if test="yyErrorRateTwo != null">yy_error_rate_two = #{yyErrorRateTwo},</if>
+            <if test="forecastTimeThree != null">forecast_time_three = #{forecastTimeThree},</if>
+            <if test="realThree != null">real_three = #{realThree},</if>
+            <if test="hsForecastThree != null">hs_forecast_three = #{hsForecastThree},</if>
+            <if test="hsErrorRateThree != null">hs_error_rate_three = #{hsErrorRateThree},</if>
+            <if test="yyForecastThree != null">yy_forecast_three = #{yyForecastThree},</if>
+            <if test="yyErrorRateThree != null">yy_error_rate_three = #{yyErrorRateThree},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="revision != null">revision = #{revision},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        ,revision = revision + 1
+        where id = #{id}
+    </update>
+
+    
+
+    <delete id="deleteTXinyiForecastComparisonById" parameterType="Long">
+        update t_xinyi_forecast_comparison set del_flag = 2,revision = revision + 1 where del_flag = 0 and id = #{id}
+    </delete>
+
+    <delete id="deleteTXinyiForecastComparisonByIds" parameterType="String">
+        update t_xinyi_forecast_comparison set del_flag = 2,revision = revision + 1 where del_flag = 0 and id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>