Răsfoiți Sursa

进出水五大指标的报警相关处理

wangmiaomiao 10 luni în urmă
părinte
comite
f7b38954df

+ 15 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -36,6 +36,9 @@ public class FrontController extends BaseController {
     @Autowired
     private TXinyiWarningRecordMapper xinyiWarningRecordMapper;
 
+    @Autowired
+    private TXinyiAgentAssistantMapper xinyiAgentAssistantMapper;
+
 
 
     /**
@@ -144,6 +147,18 @@ public class FrontController extends BaseController {
     }
 
 
+    /**
+     * 获取 后台配置的智能助手列表
+     * @return
+     */
+    @GetMapping("/bigModel/agentAssistant/list")
+    public AjaxResult agentAssistantList()
+    {
+        log.info("进入了 获取 后台配置的智能助手列表  接口");
+        return AjaxResult.success(xinyiAgentAssistantMapper.selectTXinyiAgentAssistantList(null));
+    }
+
+
 
 
 

+ 8 - 0
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -13,4 +13,12 @@ public class MyConstants {
 
     public static final String WARNING_TEMPLATE = "您有#个报警信息,请解决";
     public static final String FORECAST_WARNING_TEMPLATE = "您有#个预警信息,请解决";
+
+    public static final String CHAOBIAO_WARNING = "超标报警";
+    public static final String CHAOGUANKONG_WARNING = "超管控报警";
+    public static final String WARNING_LEVEL_ONE = "一级";
+    public static final String WARNING_LEVEL_TWO = "二级";
+    public static final String WARNING_LEVEL_THREE = "三级";
+    public static final String WARNING_DEFAULT_CREATE = "task-job";
+
 }

+ 42 - 0
slibra-common/src/main/java/com/slibra/common/enums/BusinessEnum.java

@@ -0,0 +1,42 @@
+package com.slibra.common.enums;
+
+public class BusinessEnum {
+
+
+    /**
+     * 告警类型枚举
+     */
+    public enum WarningCategoryEnum
+    {
+        CS_COD("出水COD", "出水COD"),
+        CS_SS("出水SS", "出水SS"),
+        CS_ZD("出水总氮", "出水总氮"),
+        CS_ZL("出水总磷", "出水总磷"),
+        CS_AD("出水氨氮", "出水氨氮"),
+        JS_COD("进水COD", "进水COD"),
+        JS_SS("进水SS", "进水SS"),
+        JS_ZD("进水总氮", "进水总氮"),
+        JS_ZL("进水总磷", "进水总磷"),
+        JS_AD("进水氨氮", "进水氨氮"),
+        ;
+
+        private final String code;
+        private final String msg;
+
+        WarningCategoryEnum(String code, String msg)
+        {
+            this.code = code;
+            this.msg = msg;
+        }
+
+        public String getCode()
+        {
+            return code;
+        }
+
+        public String getMsg()
+        {
+            return msg;
+        }
+    }
+}

+ 206 - 0
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -5,9 +5,15 @@ import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.slibra.business.domain.TXinyiIndustry;
+import com.slibra.business.domain.TXinyiNormConfig;
 import com.slibra.business.domain.TXinyiRobot;
+import com.slibra.business.domain.TXinyiWarningRecord;
 import com.slibra.business.mapper.TXinyiIndustryMapper;
+import com.slibra.business.mapper.TXinyiNormConfigMapper;
 import com.slibra.business.mapper.TXinyiRobotMapper;
+import com.slibra.business.mapper.TXinyiWarningRecordMapper;
+import com.slibra.common.constant.MyConstants;
+import com.slibra.common.enums.BusinessEnum;
 import com.slibra.common.enums.DataSourceType;
 import com.slibra.common.utils.DateUtils;
 import com.slibra.framework.datasource.DynamicDataSourceContextHolder;
@@ -24,6 +30,8 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
+import static com.slibra.common.constant.MyConstants.*;
+
 /**
  * 定时任务调度测试
  * 
@@ -55,6 +63,14 @@ public class RyTask
 
     @Autowired
     private TXinyiRobotMapper xinyiRobotMapper;
+
+    @Autowired
+    private TXinyiNormConfigMapper xinyiNormConfigMapper;
+
+    @Autowired
+    private TXinyiWarningRecordMapper xinyiWarningRecordMapper;
+
+
 //    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预测值_"};
 
@@ -294,6 +310,8 @@ public class RyTask
             industry.setHycWnndAll(JSON.toJSONString(extraList));
             //插入数据库
             xinyiIndustryMapper.insertTXinyiIndustry(industry);
+            //判断是否触发告警、接触告警、保存决策等等
+            this.handleWarning(industry);
         });
 
         //执行完成 测试执行时间
@@ -302,6 +320,194 @@ public class RyTask
 //        System.out.println(watch.getLastTaskName() + " 执行耗时:" + watch.getLastTaskTimeMillis() + " ms");
     }
 
+    private void handleWarning(TXinyiIndustry tXinyiIndustry) {
+        log.info("进入了定时任务保存工业库数据并触发报警操作");
+        //获取配置表
+        List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
+        if(CollectionUtils.isEmpty(tXinyiNormConfigs))
+            throw new RuntimeException("未查询到配置信息");
+        TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
+        //出水相关
+        //出水COD报警
+        BigDecimal csCod = tXinyiIndustry.getCsCod();
+        BigDecimal cscodBzz = normConfig.getCscodBzz();
+        BigDecimal cscodGkz = normConfig.getCscodGkz();
+        if(!Objects.isNull(csCod) && !Objects.isNull(cscodBzz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cscodBzz, csCod, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //出水总磷超标报警
+        BigDecimal csTp = tXinyiIndustry.getCsTp();
+        BigDecimal cszlBzz = normConfig.getCszlBzz();
+        BigDecimal cszlGkz = normConfig.getCszlGkz();
+        if(!Objects.isNull(csTp) && !Objects.isNull(cszlBzz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+
+        //出水总氮超标报警
+        BigDecimal csTn = tXinyiIndustry.getCsTn();
+        BigDecimal cszzBzz = normConfig.getCszzBzz();
+        BigDecimal cszzGkz = normConfig.getCszzGkz();
+        if(!Objects.isNull(csTn) && !Objects.isNull(cszzBzz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //出水氨氮超标报警
+        BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
+        BigDecimal csadBzz = normConfig.getCsadBzz();
+        BigDecimal csadGkz = normConfig.getCsadGkz();
+        if(!Objects.isNull(csNh3) && !Objects.isNull(csadBzz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //出水SS超标报警
+        BigDecimal csSS = tXinyiIndustry.getCsSs();
+        BigDecimal csSSBzz = normConfig.getCsssBzz();
+        BigDecimal csssGkz = normConfig.getCsssGkz();
+        if(!Objects.isNull(csSS) && !Objects.isNull(csSSBzz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //进水相关报警
+        //进水总磷超标报警
+        BigDecimal jsTp = tXinyiIndustry.getJsTp();
+        BigDecimal jszlSjz = normConfig.getJszlSjz();
+        if(!Objects.isNull(jsTp) && !Objects.isNull(jszlSjz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //进水COD超标报警
+        BigDecimal jsCod = tXinyiIndustry.getJsCod();
+        BigDecimal jscodSjz = normConfig.getJscodSjz();
+        if(!Objects.isNull(jsCod) && !Objects.isNull(jscodSjz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //进水总氮超标报警
+        BigDecimal jsTn = tXinyiIndustry.getJsTn();
+        BigDecimal jszdSjz = normConfig.getJszdSjz();
+        if(!Objects.isNull(jsTn) && !Objects.isNull(jszdSjz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //进水氨氮超标报警
+        BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
+        BigDecimal jsadSjz = normConfig.getJsadSjz();
+        if(!Objects.isNull(jsNh3) && !Objects.isNull(jsadSjz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+
+        //进水SS超标报警
+        BigDecimal jsSS = tXinyiIndustry.getJsSs();
+        BigDecimal jsSSSjz = normConfig.getJsssSjz();
+        if(!Objects.isNull(jsSS) && !Objects.isNull(jsSSSjz)){
+            TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode());
+            //保存到数据库中
+            this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+            //继续调用决策 todo
+        }
+        
+    }
+
+    /**
+     * 通过输入的值 生成对应类型的报警对象(出水)
+     * @param csBzz
+     * @param currentVal
+     * @param csGkz
+     * @param category
+     * @return
+     */
+    private TXinyiWarningRecord gettXinyiWarningRecordCS(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category) {
+        BigDecimal multiply = csBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
+        TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
+        /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
+        tXinyiWarningRecord.setType(0);
+        tXinyiWarningRecord.setCategory(category);
+        tXinyiWarningRecord.setTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setWarningVal(currentVal);
+        tXinyiWarningRecord.setDesignVal(csBzz);
+        tXinyiWarningRecord.setControlVal(csGkz);
+        tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+        tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
+
+        if(currentVal.compareTo(multiply) > 0){//一级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
+        }else if(currentVal.compareTo(csBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_TWO);
+        }else if(!Objects.isNull(csGkz) && currentVal.compareTo(csGkz) > 0){
+            tXinyiWarningRecord.setReason(category + CHAOGUANKONG_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_THREE);
+        }
+        return tXinyiWarningRecord;
+    }
+
+
+    /**
+     * 通过输入的值 生成对应类型的报警对象(进水)
+     * @param jsBzz
+     * @param currentVal
+     * @param category
+     * @return
+     */
+    private TXinyiWarningRecord gettXinyiWarningRecordJS(BigDecimal jsBzz, BigDecimal currentVal, String category) {
+        BigDecimal multiply = jsBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
+        TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
+        /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
+        tXinyiWarningRecord.setType(0);
+        tXinyiWarningRecord.setCategory(category);
+        tXinyiWarningRecord.setTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setWarningVal(currentVal);
+        tXinyiWarningRecord.setDesignVal(jsBzz);
+//        tXinyiWarningRecord.setControlVal(csGkz);
+        tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+        tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
+
+        if(currentVal.compareTo(multiply) > 0){//一级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
+        }else if(currentVal.compareTo(jsBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_TWO);
+        }
+        /*else if(!Objects.isNull(csGkz) && currentVal.compareTo(csGkz) > 0){
+            tXinyiWarningRecord.setReason(category + CHAOGUANKONG_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_THREE);
+        }*/
+        return tXinyiWarningRecord;
+    }
+
+
+
 
     /**
      * 定时从sqlserver获取数据

+ 9 - 5
slibra-system/src/main/java/com/slibra/business/domain/TXinyiWarningRecord.java

@@ -31,7 +31,7 @@ public class TXinyiWarningRecord extends BaseEntity
 
     /** 类型(0水质报警  1生化报警 2预测报警) */
     @Excel(name = "类型", readConverterExp = "0=水质报警,1=生化报警,2=预测报警")
-    private Long type;
+    private Integer type;
 
     /** 报警指标(存储字符串) */
     @Excel(name = "报警指标", readConverterExp = "存=储字符串")
@@ -46,14 +46,18 @@ public class TXinyiWarningRecord extends BaseEntity
     @Excel(name = "报警原因")
     private String reason;
 
-    /** 报警值 */
-    @Excel(name = "报警值")
+    /** 报警值(当前值) */
+    @Excel(name = "报警值", readConverterExp = "当=前值")
     private BigDecimal warningVal;
 
-    /** 设计值 */
-    @Excel(name = "设计值")
+    /** 设计值/标准值 */
+    @Excel(name = "设计值/标准值")
     private BigDecimal designVal;
 
+    /** 管控值 */
+    @Excel(name = "管控值")
+    private BigDecimal controlVal;
+
     /** 预测值 */
     @Excel(name = "预测值")
     private BigDecimal forecastVal;

+ 12 - 7
slibra-system/src/main/resources/mapper/business/TXinyiWarningRecordMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.slibra.business.mapper.TXinyiWarningRecordMapper">
-    
+
     <resultMap type="TXinyiWarningRecord" id="TXinyiWarningRecordResult">
         <result property="id"    column="id"    />
         <result property="type"    column="type"    />
@@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="reason"    column="reason"    />
         <result property="warningVal"    column="warning_val"    />
         <result property="designVal"    column="design_val"    />
+        <result property="controlVal"    column="control_val"    />
         <result property="forecastVal"    column="forecast_val"    />
         <result property="level"    column="level"    />
         <result property="status"    column="status"    />
@@ -30,7 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectTXinyiWarningRecordVo">
-        select id, type, category, time, reason, warning_val, design_val, forecast_val, level, status, is_emergency, off_time, operator, review, use_recommend, del_flag, revision, create_by, create_time, update_by, update_time, remark from t_xinyi_warning_record
+        select id, type, category, time, reason, warning_val, design_val, control_val, forecast_val, level, status, is_emergency, off_time, operator, review, use_recommend, del_flag, revision, create_by, create_time, update_by, update_time, remark from t_xinyi_warning_record
     </sql>
 
     <select id="selectTXinyiWarningRecordList" parameterType="TXinyiWarningRecord" resultMap="TXinyiWarningRecordResult">
@@ -43,6 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reason != null  and reason != ''"> and reason = #{reason}</if>
             <if test="warningVal != null "> and warning_val = #{warningVal}</if>
             <if test="designVal != null "> and design_val = #{designVal}</if>
+            <if test="controlVal != null "> and control_val = #{controlVal}</if>
             <if test="forecastVal != null "> and forecast_val = #{forecastVal}</if>
             <if test="level != null  and level != ''"> and level = #{level}</if>
             <if test="status != null "> and status = #{status}</if>
@@ -55,12 +57,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         and del_flag = 0 order by id desc
     </select>
-    
+
     <select id="selectTXinyiWarningRecordById" parameterType="Long" resultMap="TXinyiWarningRecordResult">
         <include refid="selectTXinyiWarningRecordVo"/>
         where id = #{id} and del_flag = 0
     </select>
-        
+
     <insert id="insertTXinyiWarningRecord" parameterType="TXinyiWarningRecord" useGeneratedKeys="true" keyProperty="id">
         insert into t_xinyi_warning_record
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -70,6 +72,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reason != null">reason,</if>
             <if test="warningVal != null">warning_val,</if>
             <if test="designVal != null">design_val,</if>
+            <if test="controlVal != null">control_val,</if>
             <if test="forecastVal != null">forecast_val,</if>
             <if test="level != null">level,</if>
             <if test="status != null">status,</if>
@@ -85,7 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="type != null">#{type},</if>
             <if test="category != null">#{category},</if>
@@ -93,6 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reason != null">#{reason},</if>
             <if test="warningVal != null">#{warningVal},</if>
             <if test="designVal != null">#{designVal},</if>
+            <if test="controlVal != null">#{controlVal},</if>
             <if test="forecastVal != null">#{forecastVal},</if>
             <if test="level != null">#{level},</if>
             <if test="status != null">#{status},</if>
@@ -108,7 +112,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateTXinyiWarningRecord" parameterType="TXinyiWarningRecord">
@@ -120,6 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="reason != null">reason = #{reason},</if>
             <if test="warningVal != null">warning_val = #{warningVal},</if>
             <if test="designVal != null">design_val = #{designVal},</if>
+            <if test="controlVal != null">control_val = #{controlVal},</if>
             <if test="forecastVal != null">forecast_val = #{forecastVal},</if>
             <if test="level != null">level = #{level},</if>
             <if test="status != null">status = #{status},</if>
@@ -140,7 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </update>
 
-    
+
 
     <delete id="deleteTXinyiWarningRecordById" parameterType="Long">
         update t_xinyi_warning_record set del_flag = 2,revision = revision + 1 where del_flag = 0 and id = #{id}