Browse Source

代码优化

wangxiaofei 2 weeks ago
parent
commit
d2cd6bed7f

+ 41 - 0
taphole-iron/src/main/java/com/sckj/iron/controller/TIronVisualScreenController.java

@@ -13,14 +13,17 @@ import com.sckj.iron.entity.TIronTest;
 import com.sckj.iron.service.impl.*;
 import com.sckj.iron.validate.IronLoginValidate;
 import com.sckj.iron.validate.TIronDataSearchScreenValidate;
+import com.sckj.iron.validate.TIronTestSearchScreenValidate;
 import com.sckj.iron.vo.IronLoginVo;
 import com.sckj.l2.dto.L2Properties;
 import com.sckj.l2.dto.TrendRequest;
 import com.sckj.l2.entity.TL2Data;
 import com.sckj.l2.service.impl.TL2DataServiceImpl;
 import com.sckj.opc.service.OPCDataServiceImpl;
+import com.sckj.warn.dto.TExceptionLogDTO;
 import com.sckj.warn.dto.WarnDTO;
 import com.sckj.warn.service.impl.TExceptionLogServiceImpl;
+import com.sckj.warn.validate.TIronExceptionSearchScreenValidate;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -261,5 +264,43 @@ public class TIronVisualScreenController {
         return AjaxResult.success(tIronVisualScreenService.getIronChart(queryDateType));
     }
 
+
+    @NotPower
+    @PostMapping("/queryIronExceptionData")
+    @ApiOperation(value = "查询告警列表数据")
+    public AjaxResult<TableDataInfo<TExceptionLogDTO>> queryIronExceptionData(@RequestBody TIronExceptionSearchScreenValidate ironDataSearchScreenValidate) {
+        List<TExceptionLogDTO> ironDataList = exceptionLogService.queryIronExceptionData(ironDataSearchScreenValidate);
+        PageInfo pageInfo = new PageInfo(ironDataList);
+        TableDataInfo<TExceptionLogDTO> tableDataInfo = new TableDataInfo<>();
+        BeanUtils.copyProperties(pageInfo, tableDataInfo);
+        return AjaxResult.success(tableDataInfo);
+    }
+
+    @NotPower
+    @PostMapping("/exportExceptionData")
+    @ApiOperation(value = "导出告警列表数据")
+    public void exportIronExceptionData(@RequestBody TIronExceptionSearchScreenValidate ironDataSearchScreenValidate, HttpServletResponse response) throws IOException {
+        exceptionLogService.exportIronExceptionData(ironDataSearchScreenValidate, response);
+    }
+
+    @NotPower
+    @PostMapping("/queryIronTestData")
+    @ApiOperation(value = "查询诊断数据")
+    public AjaxResult<TableDataInfo<TIronTestDTO>> queryIronTestData(@RequestBody TIronTestSearchScreenValidate ironDataSearchScreenValidate) {
+
+        List<TIronTestDTO> ironDataList = iTIronTestService.queryIronTestData(ironDataSearchScreenValidate);
+        PageInfo pageInfo = new PageInfo(ironDataList);
+        TableDataInfo<TIronTestDTO> tableDataInfo = new TableDataInfo<>();
+        BeanUtils.copyProperties(pageInfo, tableDataInfo);
+        return AjaxResult.success(tableDataInfo);
+    }
+
+    @NotPower
+    @PostMapping("/exportIronTestData")
+    @ApiOperation(value = "导出诊断数据")
+    public void exportIronTestData(@RequestBody TIronTestSearchScreenValidate ironDataSearchScreenValidate, HttpServletResponse response) throws IOException {
+        iTIronTestService.exportIronTestData(ironDataSearchScreenValidate, response);
+    }
+
 }
 

+ 57 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/TIronTestDTO.java

@@ -0,0 +1,57 @@
+package com.sckj.iron.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("出铁诊断实体")
+public class TIronTestDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "铁口号")
+    @ExcelProperty("铁口号")
+    @ColumnWidth(25)
+    private String tapholeId;
+
+    @ApiModelProperty(value = "出铁详情")
+    @ExcelIgnore
+    private String ironDetail;
+
+    @ApiModelProperty(value = "出铁时间")
+    @ExcelProperty("出铁量(t)")
+    @ColumnWidth(30)
+    private String ironWeight;
+
+    @ApiModelProperty(value = "出铁时间")
+    @ExcelProperty("出铁时间(min)")
+    @ColumnWidth(25)
+    private Integer ironCosttime;
+
+    @ApiModelProperty(value = "铁水平均温度")
+    @ExcelProperty("铁水平均温度(℃)")
+    @ColumnWidth(30)
+    private String avgTemp;
+
+    @ApiModelProperty(value = "铁水平均流速")
+    @ExcelProperty("铁水平均流速(t/min)")
+    @ColumnWidth(30)
+    private String avgSpeed;
+
+    @ApiModelProperty(value = "出铁工作诊断结果")
+    @ExcelProperty("出铁工作诊断结果")
+    @ColumnWidth(100)
+    private String testDesc;
+
+    @ApiModelProperty(value = "诊断时间")
+    @ExcelProperty("诊断时间")
+    @ColumnWidth(30)
+    private String createTime;
+
+}

+ 45 - 6
taphole-iron/src/main/java/com/sckj/iron/entity/TIronTest.java

@@ -1,5 +1,8 @@
 package com.sckj.iron.entity;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -17,37 +20,73 @@ public class TIronTest implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "创建人")
+    @ExcelIgnore
     private String createBy;
 
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
 
     @ApiModelProperty(value = "更新人")
+    @ExcelIgnore
     private String updateBy;
 
     @ApiModelProperty(value = "更新时间")
+    @ExcelIgnore
     private String updateTime;
 
     @TableId(value="id", type= IdType.AUTO)
     @ApiModelProperty(value = "")
+    @ExcelIgnore
     private Long id;
 
     @ApiModelProperty(value = "诊断状态(1正常 0异常)")
+    @ExcelIgnore
     private String testStatus;
 
-    @ApiModelProperty(value = "鱼雷罐车车号")
-    private String testDesc;
-
-    @ApiModelProperty(value = "铁口编号")
+    @ApiModelProperty(value = "铁口号")
+    @ExcelProperty("铁口号")
+    @ColumnWidth(25)
     private String tapholeId;
 
     @ApiModelProperty(value = "高炉编号")
+    @ExcelIgnore
     private String boilerId;
 
     @ApiModelProperty(value = "出铁次数编号")
+    @ExcelIgnore
     private String ironNo;
 
     @ApiModelProperty(value = "出铁详情")
+    @ExcelIgnore
     private String ironDetail;
 
+    @ApiModelProperty(value = "出铁量")
+    @ExcelProperty("出铁量(t)")
+    @ColumnWidth(30)
+    private String ironWeight;
+
+    @ApiModelProperty(value = "出铁时间")
+    @ExcelProperty("出铁时间(min)")
+    @ColumnWidth(25)
+    private Integer ironCosttime;
+
+    @ApiModelProperty(value = "铁水平均温度")
+    @ExcelProperty("铁水平均温度(℃)")
+    @ColumnWidth(30)
+    private String avgTemp;
+
+    @ApiModelProperty(value = "铁水平均流速")
+    @ExcelProperty("铁水平均流速(t/min)")
+    @ColumnWidth(30)
+    private String avgSpeed;
+
+
+    @ApiModelProperty(value = "诊断描述")
+    @ExcelProperty("出铁工作诊断结果")
+    @ColumnWidth(60)
+    private String testDesc;
+
+    @ApiModelProperty(value = "创建时间")
+    @ExcelProperty("诊断时间")
+    @ColumnWidth(30)
+    private String createTime;
+
 }

+ 49 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronTestServiceImpl.java

@@ -4,21 +4,29 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
 import com.sckj.common.core.PageResult;
 import com.sckj.common.exception.OperateException;
+import com.sckj.common.util.ExcelUtils;
+import com.sckj.common.util.StringUtils;
 import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.iron.dto.TIronTestDTO;
 import com.sckj.iron.entity.TIronTest;
 import com.sckj.iron.mapper.TIronTestMapper;
 import com.sckj.iron.validate.TIronTestCreateValidate;
+import com.sckj.iron.validate.TIronTestSearchScreenValidate;
 import com.sckj.iron.validate.TIronTestSearchValidate;
 import com.sckj.iron.validate.TIronTestUpdateValidate;
 import com.sckj.iron.vo.TIronTestDetailVo;
 import com.sckj.iron.vo.TIronTestListedVo;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -156,5 +164,46 @@ public class TIronTestServiceImpl extends ServiceImpl<TIronTestMapper, TIronTest
         return this.lambdaQuery().orderByDesc(TIronTest::getCreateTime).last("limit 3").list();
     }
 
+    /***
+     * 查询诊断数据
+     * @return
+     */
+    public List<TIronTestDTO> queryIronTestData(TIronTestSearchScreenValidate tl2Data) {
+        QueryWrapper<TIronTest> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .like(ObjectUtils.isNotEmpty(tl2Data.getTestDesc()), TIronTest::getTestDesc, tl2Data.getTestDesc())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getBoilerId()), TIronTest::getBoilerId, tl2Data.getBoilerId())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getTapholeId()), TIronTest::getTapholeId, tl2Data.getTapholeId())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getTestStatus()), TIronTest::getTestStatus, tl2Data.getTestStatus())
+                .orderByDesc(TIronTest::getCreateTime);
+        if (StringUtils.isNotBlank(tl2Data.getCreateTimeStart()) && StringUtils.isNotBlank(tl2Data.getCreateTimeEnd())) {
+            queryWrapper.lambda().between(TIronTest::getCreateTime, tl2Data.getCreateTimeStart(), tl2Data.getCreateTimeEnd());
+        }
+        PageHelper.startPage(tl2Data.getPageNo(), tl2Data.getPageSize());
+        // 使用Java 8 lambda表达式进行数据转换
+        return list(queryWrapper)
+                .stream()
+                .map(item -> {
+                    TIronTestDTO dto = new TIronTestDTO();
+                    BeanUtils.copyProperties(item, dto);
+                    return dto;
+                })
+                .collect(java.util.stream.Collectors.toList());
+    }
+
+    /***
+     * 导出诊断数据
+     * @param tl2Data
+     * @param response
+     * @throws IOException
+     */
+    public void exportIronTestData(TIronTestSearchScreenValidate tl2Data, HttpServletResponse response) throws IOException {
+        if (ObjectUtils.isEmpty(tl2Data.getCreateTimeStart()) || ObjectUtils.isEmpty(tl2Data.getCreateTimeEnd())) {
+            throw new OperateException("导出请选择开始时间和结束时间!");
+        }
+        List<TIronTestDTO> tl2DataList = queryIronTestData(tl2Data);
+        ExcelUtils.exportExcel(tl2DataList, TIronTest.class, "诊断列表数据", "诊断列表数据", response);
+    }
+
 
 }

+ 59 - 22
taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java

@@ -536,17 +536,17 @@ public class DeviceEventListener extends AbstractEventListener { //
                             if (latest2DataList.size() >= 2) {
                                 //铁量差 = 理论出铁量 - 实际出铁量
                                 TL2Data tl2Data1Last = latest2DataList.get(0);
-                                BigDecimal theoryWeightLast = new BigDecimal(tl2Data1Last.getTheoryWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                BigDecimal ironWeightLast = new BigDecimal(tl2Data1Last.getIronWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                BigDecimal tlcLast = theoryWeightLast.subtract(ironWeightLast).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal theoryWeightLast = new BigDecimal(tl2Data1Last.getTheoryWeight()).setScale(2, RoundingMode.HALF_UP);
+                                BigDecimal ironWeightLast = new BigDecimal(tl2Data1Last.getIronWeight()).setScale(2, RoundingMode.HALF_UP);
+                                BigDecimal tlcLast = theoryWeightLast.subtract(ironWeightLast).setScale(2, RoundingMode.HALF_UP);
 
                                 TL2Data tl2Data1Grand = latest2DataList.get(1);
                                 //
-                                BigDecimal theoryWeightGrand = new BigDecimal(tl2Data1Grand.getTheoryWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal theoryWeightGrand = new BigDecimal(tl2Data1Grand.getTheoryWeight()).setScale(2, RoundingMode.HALF_UP);
                                 //
-                                BigDecimal ironWeightGrand = new BigDecimal(tl2Data1Grand.getIronWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal ironWeightGrand = new BigDecimal(tl2Data1Grand.getIronWeight()).setScale(2, RoundingMode.HALF_UP);
 
-                                BigDecimal tlcGrand = theoryWeightGrand.subtract(ironWeightGrand).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal tlcGrand = theoryWeightGrand.subtract(ironWeightGrand).setScale(2, RoundingMode.HALF_UP);
 
                                 //近两次铁量差=近两次
                                 BigDecimal tlcjlc = tlcLast.add(tlcGrand);
@@ -619,11 +619,42 @@ public class DeviceEventListener extends AbstractEventListener { //
     //代表要减去的时间,非剩余时间
     private AtomicInteger mDiffCloseTime = new AtomicInteger(0);
 
+    /***
+     * 剩余出铁时间 = (理论铁量(1300)-累计出铁量)/流速
+     */
     private void getCloseTime() {
+        if(ironLoading1.get() <= 0){
+            return;
+        }
         RealtimeData realtimeData = new RealtimeData();
-        realtimeData.setValue(Math.max(mTotalCloseTime - getIronElapsedMinute() - mDiffCloseTime.get(), 0));
         realtimeData.setDesc("距离堵口预计还剩");
         realtimeData.setUnit("分钟");
+        int diffCloseTime = 0;
+        //实时出铁时间
+        int ironElapsedMinute = getIronElapsedMinute();
+
+        if(ironElapsedMinute <= 0){
+            realtimeData.setValue(diffCloseTime);
+            PushData.send2CloseTime(realtimeData);
+            return;
+        }
+
+        //最大出铁标准量
+        double stdIronWeightMax = Double.parseDouble(mContext.lookupVariable(ExpressionConstants.stdIronWeightMax).toString());
+        //实时总铁量
+        BigDecimal totalWeight = mTotalWeight.get();
+        //平均流速
+        BigDecimal avgSpeed = totalWeight.divide(BigDecimal.valueOf(ironElapsedMinute), 2, RoundingMode.HALF_UP);
+        //剩余重量
+        BigDecimal diffWeight = BigDecimal.valueOf(Math.max(stdIronWeightMax - totalWeight.doubleValue(), 0));
+        if(avgSpeed.compareTo(BigDecimal.ZERO) <= 0){
+            realtimeData.setValue(diffCloseTime);
+            PushData.send2CloseTime(realtimeData);
+            return;
+        }
+        //计算剩余时间
+        diffCloseTime = diffWeight.divide(avgSpeed, 2, RoundingMode.HALF_UP).intValue();
+        realtimeData.setValue(diffCloseTime);
         PushData.send2CloseTime(realtimeData);
     }
 
@@ -1154,17 +1185,17 @@ public class DeviceEventListener extends AbstractEventListener { //
     private Runnable runnableClosurePredict(ClosurePredictInfo mClosurePredictInfo) {
         return () -> {
             if (mMaxSpeed.get() > 0 && ironLoading1.get() > 0) {
-                if (this.mLastSpeed.get() == 0) {
-
-                } else if (mMaxSpeed.get() > this.mLastSpeed.get()) {
-                    //当前流速大于以前的流速
-                    mDiffCloseTime.set(mDiffCloseTime.get() + mClosurePredictInfo.getDecrMinute());
-                } else if (mMaxSpeed.get() < this.mLastSpeed.get()) {
-                    //当前流速小于以前的流速
-                    mDiffCloseTime.set(mDiffCloseTime.get() - mClosurePredictInfo.getIncrMinute());
-                }
-                this.mLastSpeed.set(mMaxSpeed.get());
-                RedisUtils.addFixedElement(RedisConstants.DIFF_CLOSE_TIME, mDiffCloseTime.get());
+//                if (this.mLastSpeed.get() == 0) {
+//
+//                } else if (mMaxSpeed.get() > this.mLastSpeed.get()) {
+//                    //当前流速大于以前的流速
+//                    mDiffCloseTime.set(mDiffCloseTime.get() + mClosurePredictInfo.getDecrMinute());
+//                } else if (mMaxSpeed.get() < this.mLastSpeed.get()) {
+//                    //当前流速小于以前的流速
+//                    mDiffCloseTime.set(mDiffCloseTime.get() - mClosurePredictInfo.getIncrMinute());
+//                }
+//                this.mLastSpeed.set(mMaxSpeed.get());
+//                RedisUtils.addFixedElement(RedisConstants.DIFF_CLOSE_TIME, mDiffCloseTime.get());
                 getCloseTime();
             }
 
@@ -1358,8 +1389,8 @@ public class DeviceEventListener extends AbstractEventListener { //
 
                 // 计算实际数据
                 int actualIronTime = getIronElapsedMinute();
-                double actualIronWeight = mTotalWeight.get().setScale(2, RoundingMode.DOWN).doubleValue();
-                double actualIronSpeed = actualIronTime == 0 ? 0 : BigDecimal.valueOf(actualIronWeight).divide(BigDecimal.valueOf(actualIronTime), 2, RoundingMode.DOWN).doubleValue();
+                double actualIronWeight = mTotalWeight.get().setScale(2, RoundingMode.HALF_UP).doubleValue();
+                double actualIronSpeed = actualIronTime == 0 ? 0 : BigDecimal.valueOf(actualIronWeight).divide(BigDecimal.valueOf(actualIronTime), 2, RoundingMode.HALF_UP).doubleValue();
 
                 OptionalDouble averageTemp = tempList.stream()
                         .mapToInt(Integer::intValue)
@@ -1933,6 +1964,10 @@ public class DeviceEventListener extends AbstractEventListener { //
                         mWarnCountMap.put("speedMinWarn", 0);
                         mWarnCountMap.put("speedMaxWarn", 0);
                     }
+
+                    //剩余铁量计算-流速
+                    getCloseTime();
+
                 }
             } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_TAPHOLE2_STATUS(opcData.getServerType()))) {
                 ironLoading2.set(Integer.parseInt(opcData.getData().toString()));
@@ -2010,6 +2045,8 @@ public class DeviceEventListener extends AbstractEventListener { //
                     log.info("   ├─ 📝 更新上次流量值: {} → {}", ironWeight1Pre, bigDecimalNew);
                     ironWeight1Pre = bigDecimalNew;
 
+                    //剩余铁量计算-流量
+                    getCloseTime();
                 } else {
                     log.info("   ├─ ⏸️ 出铁状态未激活,流量值设为0");
                     realtimeData.setValue(0);
@@ -2243,12 +2280,12 @@ public class DeviceEventListener extends AbstractEventListener { //
             String elementS = fixedLatestElement.getElementS();
 
             RealtimeData realtimeData = new RealtimeData();
-            realtimeData.setValue(new BigDecimal(elementSi).setScale(3, RoundingMode.DOWN).toPlainString());
+            realtimeData.setValue(new BigDecimal(elementSi).setScale(3, RoundingMode.HALF_UP).toPlainString());
             realtimeData.setUnit("%");
             realtimeData.setDesc("硅");
 
             RealtimeData realtimeData2 = new RealtimeData();
-            realtimeData2.setValue(new BigDecimal(elementS).setScale(3, RoundingMode.DOWN).toPlainString());
+            realtimeData2.setValue(new BigDecimal(elementS).setScale(3, RoundingMode.HALF_UP).toPlainString());
             realtimeData2.setUnit("%");
             realtimeData2.setDesc("硫");
 

+ 45 - 0
taphole-iron/src/main/java/com/sckj/iron/validate/TIronTestSearchScreenValidate.java

@@ -0,0 +1,45 @@
+package com.sckj.iron.validate;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
+import java.io.Serializable;
+
+@Data
+@ApiModel("出铁诊断搜素参数")
+public class TIronTestSearchScreenValidate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "诊断状态(1正常 0异常)")
+    private String testStatus;
+
+    @ApiModelProperty(value = "诊断描述")
+    private String testDesc;
+
+    @ApiModelProperty(value = "铁口号")
+    private String tapholeId;
+
+    @ApiModelProperty(value = "高炉编号")
+    private String boilerId;
+
+    @ApiModelProperty(value = "创建的开始时间")
+    private String createTimeStart;
+
+    @ApiModelProperty(value = "创建的结束时间")
+    private String createTimeEnd;
+
+    // 当前分页
+    @DecimalMin(value = "1", message = "pageNo参数必须大于0的数字")
+    public Integer pageNo = 1;
+
+    // 每页条数
+    @DecimalMin(value = "1", message = "pageSize参数必须是大于0的数字")
+    @DecimalMax(value = "60", message = "pageSize参数必须是小于60的数字")
+    private Integer pageSize = 20;
+
+
+}

+ 1 - 1
taphole-l2/src/main/java/com/sckj/l2/service/impl/TL2DataServiceImpl.java

@@ -144,7 +144,7 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
                 .eq(ObjectUtils.isNotEmpty(tl2Data.getBoilerId()), TL2Data::getBoilerId, tl2Data.getBoilerId())
                 .orderByDesc(TL2Data::getIronNo);
         if (StringUtils.isNotBlank(tl2Data.getIronStarttime()) && StringUtils.isNotBlank(tl2Data.getIronEndtime())) {
-            queryWrapper.lambda().between(TL2Data::getCreateTime, tl2Data.getIronStarttime(), tl2Data.getIronEndtime());
+            queryWrapper.lambda().between(TL2Data::getIronStarttime, tl2Data.getIronStarttime(), tl2Data.getIronEndtime());
         }
         return list(queryWrapper);
     }

+ 29 - 0
taphole-warn/src/main/java/com/sckj/warn/dto/TExceptionLogDTO.java

@@ -0,0 +1,29 @@
+package com.sckj.warn.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel("异常情况记录实体")
+public class TExceptionLogDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "告警时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "告警类型")
+    private String exceptionType;
+
+    @ApiModelProperty(value = "铁口号")
+    private String tapholeId;
+
+    @ApiModelProperty(value = "告警明细")
+    private String exceptionDesc;
+
+
+}

+ 1 - 1
taphole-warn/src/main/java/com/sckj/warn/entity/TExceptionLog.java

@@ -36,7 +36,7 @@ public class TExceptionLog implements Serializable {
     @ApiModelProperty(value = "主键")
     private Long id;
 
-    @ApiModelProperty(value = "异常类型(0正常 1开口耗时、2出铁时间、3出铁量、4流速、5铁水温度变化、6压力值、7急需堵口、8急需出铁 )")
+    @ApiModelProperty(value = "异常类型")
     private String exceptionType;
 
     @ApiModelProperty(value = "异常区域(铁口区域,目前只有1号铁口区域)")

+ 61 - 2
taphole-warn/src/main/java/com/sckj/warn/service/impl/TExceptionLogServiceImpl.java

@@ -4,17 +4,23 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
 import com.sckj.common.core.AjaxResult;
 import com.sckj.common.core.PageResult;
+import com.sckj.common.entity.setting.DictData;
 import com.sckj.common.exception.OperateException;
+import com.sckj.common.mapper.setting.DictDataMapper;
 import com.sckj.common.util.ExcelUtils;
+import com.sckj.common.util.StringUtils;
 import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.warn.dto.TExceptionLogDTO;
 import com.sckj.warn.dto.WarnDTO;
 import com.sckj.warn.entity.TExceptionLog;
 import com.sckj.warn.mapper.TExceptionLogMapper;
 import com.sckj.warn.validate.TExceptionLogCreateValidate;
 import com.sckj.warn.validate.TExceptionLogSearchValidate;
 import com.sckj.warn.validate.TExceptionLogUpdateValidate;
+import com.sckj.warn.validate.TIronExceptionSearchScreenValidate;
 import com.sckj.warn.vo.TExceptionLogBigScreenVo;
 import com.sckj.warn.vo.TExceptionLogDetailVo;
 import com.sckj.warn.vo.TExceptionLogExportVo;
@@ -35,9 +41,10 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 异常情况记录实现类
@@ -49,6 +56,10 @@ public class TExceptionLogServiceImpl extends ServiceImpl<TExceptionLogMapper, T
     @Resource
     TExceptionLogMapper tExceptionLogMapper;
 
+    @Resource
+    DictDataMapper dictDataMapper;
+
+
     /**
      * 异常情况记录列表
      *
@@ -154,7 +165,6 @@ public class TExceptionLogServiceImpl extends ServiceImpl<TExceptionLogMapper, T
 
         Assert.notNull(model, "数据不存在!");
 
-        model.setUpdateTime(new Date(System.currentTimeMillis()));//gg
         tExceptionLogMapper.updateById(model);
     }
 
@@ -283,5 +293,54 @@ public class TExceptionLogServiceImpl extends ServiceImpl<TExceptionLogMapper, T
     }
 
 
+    /***
+     * 查询出铁数据
+     * @return
+     */
+    public List<TExceptionLogDTO> queryIronExceptionData(TIronExceptionSearchScreenValidate tl2Data) {
+        QueryWrapper<TExceptionLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .like(ObjectUtils.isNotEmpty(tl2Data.getExceptionDesc()), TExceptionLog::getExceptionDesc, tl2Data.getExceptionDesc())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getBoilerId()), TExceptionLog::getBoilerId, tl2Data.getBoilerId())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getTapholeId()), TExceptionLog::getTapholeId, tl2Data.getTapholeId())
+                .eq(ObjectUtils.isNotEmpty(tl2Data.getExceptionType()), TExceptionLog::getExceptionType, tl2Data.getExceptionType())
+                .orderByDesc(TExceptionLog::getCreateTime);
+        if (StringUtils.isNotBlank(tl2Data.getCreateTimeStart()) && StringUtils.isNotBlank(tl2Data.getCreateTimeEnd())) {
+            queryWrapper.lambda().between(TExceptionLog::getCreateTime, tl2Data.getCreateTimeStart(), tl2Data.getCreateTimeEnd());
+        }
+        List<DictData> dictDataList = dictDataMapper.selectList((new QueryWrapper<DictData>().lambda().eq(DictData::getTypeId, 12).eq(DictData::getIsDelete, 0)));
+        Map<String,String>  map = dictDataList.stream().collect((Collectors.toMap(
+               DictData::getValue, // 键映射函数
+               DictData::getName, // 键映射函数
+            (existingValue, newValue) -> existingValue  // 合并策略:保留第一个值
+       )));
+        PageHelper.startPage(tl2Data.getPageNo(), tl2Data.getPageSize());
+        // 使用Java 8 lambda表达式进行数据转换
+        return list(queryWrapper)
+                .stream()
+                .map(item -> {
+                    TExceptionLogDTO dto = new TExceptionLogDTO();
+                    BeanUtils.copyProperties(item, dto);
+                    dto.setExceptionType(map.get(item.getExceptionType()));
+                    return dto;
+                })
+                .collect(java.util.stream.Collectors.toList());
+    }
+
+    /***
+     * 导出数据
+     * @param tl2Data
+     * @param response
+     * @throws IOException
+     */
+    public void exportIronExceptionData(TIronExceptionSearchScreenValidate tl2Data, HttpServletResponse response) throws IOException {
+        if (ObjectUtils.isEmpty(tl2Data.getCreateTimeStart()) || ObjectUtils.isEmpty(tl2Data.getCreateTimeEnd())) {
+            throw new OperateException("导出请选择开始时间和结束时间!");
+        }
+        List<TExceptionLogDTO> tl2DataList = queryIronExceptionData(tl2Data);
+        ExcelUtils.exportExcel(tl2DataList, TExceptionLogDTO.class, "告警列表数据", "告警列表数据", response);
+    }
+
+
 
 }

+ 44 - 0
taphole-warn/src/main/java/com/sckj/warn/validate/TIronExceptionSearchScreenValidate.java

@@ -0,0 +1,44 @@
+package com.sckj.warn.validate;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
+import java.io.Serializable;
+
+@Data
+@ApiModel("出铁告警数据搜素参数")
+public class TIronExceptionSearchScreenValidate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "异常类型")
+    private String exceptionType;
+
+    @ApiModelProperty(value = "高炉编号")
+    private String boilerId;
+
+    @ApiModelProperty(value = "铁口区域编号")
+    private String tapholeId;
+
+    @ApiModelProperty(value = "创建的开始时间")
+    private String createTimeStart;
+
+    @ApiModelProperty(value = "创建的结束时间")
+    private String createTimeEnd;
+
+    @ApiModelProperty(value = "异常描述")
+    private String exceptionDesc;
+
+    // 当前分页
+    @DecimalMin(value = "1", message = "pageNo参数必须大于0的数字")
+    public Integer pageNo = 1;
+
+    // 每页条数
+    @DecimalMin(value = "1", message = "pageSize参数必须是大于0的数字")
+    @DecimalMax(value = "60", message = "pageSize参数必须是小于60的数字")
+    private Integer pageSize = 20;
+
+}