Преглед изворни кода

soc-modules-iot模块-视频诊断关联摄像机,导出功能

humingshi-7@163.com пре 11 месеци
родитељ
комит
cfe16c8848

+ 15 - 3
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/CameraDiagnoseMissionController.java

@@ -3,6 +3,8 @@ package com.xunmei.iot.controller;
 import com.xunmei.common.core.domain.iot.domain.IotDeviceDiagnoseMission;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.log.annotation.Log;
+import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.iot.dto.cameraDiagnose.DiagnoseMissionPageDto;
 import com.xunmei.iot.service.DiagnoseMissionService;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
@@ -13,6 +15,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 
 @RestController
@@ -23,14 +27,14 @@ public class CameraDiagnoseMissionController {
     @Resource
     private DiagnoseMissionService diagnoseMissionService;
 
-    @ApiOperation("诊断任务绑定列表")
+    @ApiOperation("诊断任务关联摄像机列表")
     @PostMapping({"/cameraList"})
     public TableDataInfo<DiagnoseMissionPageVo> cameraList(@RequestBody final DiagnoseMissionPageDto request) {
         TableDataInfo<DiagnoseMissionPageVo> page = diagnoseMissionService.selectCameraMissionPage(request);
         return page;
     }
 
-    @ApiModelProperty("诊断任务绑定操作")
+    @ApiModelProperty("诊断任务绑定摄像机操作")
     @PostMapping({"/bindMission"})
     public AjaxResult bindMission(@RequestBody final DiagnoseMissionPageDto request) {
         try {
@@ -42,7 +46,7 @@ public class CameraDiagnoseMissionController {
         return AjaxResult.success("操作成功");
     }
 
-    @ApiModelProperty("诊断任务解绑操作")
+    @ApiModelProperty("诊断任务解绑摄像机操作")
     @PostMapping({"/unbindMission"})
     public AjaxResult unbindMission(@RequestBody final DiagnoseMissionPageDto request) {
         try {
@@ -97,6 +101,14 @@ public class CameraDiagnoseMissionController {
         return AjaxResult.success("操作成功");
     }
 
+
+    @ApiOperation(value = "诊断任务关联摄像机导出列表")
+    @Log(title = "诊断任务关联摄像机导出列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/cameraExport")
+    public void export(DiagnoseMissionPageDto request, HttpServletResponse response) throws IOException {
+        diagnoseMissionService.exportCamera(request, response);
+    }
+
     @ApiOperation("获取任务下拉框")
     @GetMapping({"/missionTypeList"})
     public List<AlarmTypeSelectedVO> missionTypeList() {

+ 14 - 3
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/CameraDiagnoseThresholdController.java

@@ -3,6 +3,8 @@ package com.xunmei.iot.controller;
 import com.xunmei.common.core.domain.iot.domain.IotDeviceDiagnoseThreshold;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.log.annotation.Log;
+import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.iot.dto.cameraDiagnose.DiagnoseThresholdPageDto;
 import com.xunmei.iot.service.DiagnoseThresholdService;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
@@ -14,6 +16,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 
 @RestController
@@ -24,14 +28,14 @@ public class CameraDiagnoseThresholdController {
     @Resource
     private DiagnoseThresholdService diagnoseThresholdService;
 
-    @ApiOperation("诊断阈值绑定列表")
+    @ApiOperation("诊断阈值关联摄像机列表")
     @PostMapping({"/cameraList"})
     public TableDataInfo<DiagnoseThresholdPageVo> webPage(@RequestBody final DiagnoseThresholdPageDto request) {
         TableDataInfo<DiagnoseThresholdPageVo> page = diagnoseThresholdService.selectCameraThresholdPage(request);
         return page;
     }
 
-    @ApiModelProperty("诊断阈值绑定操作")
+    @ApiModelProperty("诊断阈值绑定摄像机操作")
     @PostMapping({"/bindThreshold"})
     public AjaxResult bindThreshold(@RequestBody final DiagnoseThresholdPageDto request) {
         try {
@@ -43,7 +47,7 @@ public class CameraDiagnoseThresholdController {
         return AjaxResult.success("操作成功");
     }
 
-    @ApiModelProperty("诊断阈值解绑操作")
+    @ApiModelProperty("诊断阈值解绑摄像机操作")
     @PostMapping({"/unbindThreshold"})
     public AjaxResult unbindThreshold(@RequestBody final DiagnoseThresholdPageDto request) {
         try {
@@ -99,6 +103,13 @@ public class CameraDiagnoseThresholdController {
         return AjaxResult.success("操作成功");
     }
 
+    @ApiOperation(value = "诊断阈值关联摄像机导出列表")
+    @Log(title = "诊断阈值关联摄像机导出列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/cameraExport")
+    public void export(DiagnoseThresholdPageDto request, HttpServletResponse response) throws IOException {
+        diagnoseThresholdService.exportCamera(request, response);
+    }
+
     @ApiOperation("获取阈值下拉框")
     @GetMapping({"/thresholdTypeList"})
     public List<AlarmTypeSelectedVO> thresholdTypeList() {

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/DiagnoseMissionChMapper.java

@@ -30,5 +30,7 @@ public interface DiagnoseMissionChMapper extends BaseMapper<IotDeviceDiagnoseMis
 
     int deleteCamerasByMissionId(@Param("missionId")String missionId);
 
+    List<DiagnoseMissionPageVo> selectExcelData(@Param("request") DiagnoseMissionPageDto request);
+
     List<IotDeviceDiagnoseMission> selectAllDiagnoseMission();
 }

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/DiagnoseThresholdChMapper.java

@@ -28,5 +28,7 @@ public interface DiagnoseThresholdChMapper  extends BaseMapper<IotDeviceDiagnose
 
     int deleteCamerasByThresholdCode(@Param("thresholdCode")String thresholdCode);
 
+    List<DiagnoseThresholdPageVo> selectExcelData(@Param("request") DiagnoseThresholdPageDto request);
+
     List<IotDeviceDiagnoseThreshold> selectAllDiagnoseThreshold();
 }

+ 3 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/DiagnoseMissionService.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.iot.dto.cameraDiagnose.DiagnoseMissionPageDto;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
 import com.xunmei.iot.vo.sensor.DiagnoseMissionPageVo;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 public interface DiagnoseMissionService {
@@ -23,5 +24,7 @@ public interface DiagnoseMissionService {
 
     void editMission(IotDeviceDiagnoseMission request);
 
+    void exportCamera(DiagnoseMissionPageDto request, HttpServletResponse response);
+
     List<AlarmTypeSelectedVO> missionTypeList();
 }

+ 3 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/DiagnoseThresholdService.java

@@ -6,6 +6,7 @@ import com.xunmei.iot.dto.cameraDiagnose.DiagnoseThresholdPageDto;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
 import com.xunmei.iot.vo.sensor.DiagnoseThresholdAddVo;
 import com.xunmei.iot.vo.sensor.DiagnoseThresholdPageVo;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 public interface DiagnoseThresholdService {
@@ -24,5 +25,7 @@ public interface DiagnoseThresholdService {
 
     void editThreshold(DiagnoseThresholdAddVo request);
 
+    void exportCamera(DiagnoseThresholdPageDto request, HttpServletResponse response);
+
     List<AlarmTypeSelectedVO> thresholdTypeList();
 }

+ 74 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/DiagnoseMissionServiceImpl.java

@@ -1,6 +1,8 @@
 package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -25,16 +27,20 @@ import com.xunmei.iot.mapper.DiagnoseThresholdChMapper;
 import com.xunmei.iot.service.DiagnoseMissionService;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
 import com.xunmei.iot.vo.sensor.DiagnoseMissionBindVo;
+import com.xunmei.iot.vo.sensor.DiagnoseMissionExportVo;
 import com.xunmei.iot.vo.sensor.DiagnoseMissionPageVo;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.vo.SysOrgVO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
 import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
@@ -281,6 +287,74 @@ public class DiagnoseMissionServiceImpl implements DiagnoseMissionService {
     }
 
     @Override
+    public void exportCamera(DiagnoseMissionPageDto request, HttpServletResponse response){
+        final SysOrg sysOrg = orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER);
+        if (ObjectUtil.equal(Boolean.TRUE, request.getCheckSub())) {
+            request.setOrgPath(sysOrg.getPath());
+            request.setOrgId(null);
+        }
+
+        List<IotDeviceDiagnoseMission> missions = diagnoseMissionChMapper.selectAllDiagnoseMission();
+
+        List<DiagnoseMissionPageVo> page = diagnoseMissionChMapper.selectExcelData(request);
+        final List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
+        List<DiagnoseMissionExportVo> exportVos = Lists.newArrayList();
+        DiagnoseMissionExportVo exportVo;
+        for (DiagnoseMissionPageVo bean : page) {
+            String missionId = bean.getMissionId();
+            final List<Long> collect = Arrays.stream(bean.getOrgPath().split("-")).map(Long::parseLong).collect(Collectors.toList());
+            //地区名称
+            cacheList.stream().filter(org -> collect.contains(org.getId()) && OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType()))
+                    .findFirst().ifPresent(org -> bean.setFirstOrgName(org.getShortName()));
+            //行社名称
+            cacheList.stream().filter(org -> collect.contains(org.getId()) && OrgTypeEnum.HANG_SHE.getCode().equals(org.getType()))
+                    .findFirst().ifPresent(org -> bean.setSecondOrgName(org.getShortName()));
+
+            StringBuffer buffer = new StringBuffer();
+            if(StringUtils.isNotEmpty(missionId)){
+                boolean isMatch = false;
+                for(IotDeviceDiagnoseMission mission:missions){
+                    if(mission.getMissionId().equals(missionId)){
+                        buffer.append(mission.getName()).append("【")
+                                .append(mission.getBeginTime()).append("--").append(mission.getEndTime())
+                                .append("】");
+                        isMatch = true;
+                        break;
+                    }
+                }
+                if(isMatch){
+                    bean.setMissionName(buffer.toString());
+                }else{
+                    bean.setMissionName("--");
+                }
+            }else{
+                bean.setMissionName("--");
+            }
+
+            exportVo = new DiagnoseMissionExportVo();
+            BeanUtils.copyProperties(bean,exportVo);
+
+            exportVos.add(exportVo);
+        }
+
+        try {
+            // 设置响应头
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("任务关联摄像机", "utf-8"));
+            response.setContentType("application/octet-stream;charset=UTF-8");
+            response.setCharacterEncoding("utf-8");
+            // 数据导出
+            EasyExcel.write(response.getOutputStream(), DiagnoseMissionExportVo.class)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("sheet1").doWrite(exportVos);
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+        }
+    }
+
+    @Override
     public List<AlarmTypeSelectedVO> missionTypeList() {
         List<AlarmTypeSelectedVO> list = Lists.newArrayList();
         AlarmTypeSelectedVO bean;

+ 75 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/DiagnoseThresholdServiceImpl.java

@@ -1,6 +1,8 @@
 package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -22,6 +24,7 @@ import com.xunmei.iot.service.DiagnoseThresholdService;
 import com.xunmei.iot.vo.alarmData.AlarmTypeSelectedVO;
 import com.xunmei.iot.vo.sensor.DiagnoseThresholdAddVo;
 import com.xunmei.iot.vo.sensor.DiagnoseThresholdBindVo;
+import com.xunmei.iot.vo.sensor.DiagnoseThresholdExportVo;
 import com.xunmei.iot.vo.sensor.DiagnoseThresholdPageVo;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
@@ -32,6 +35,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.DigestUtils;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -290,6 +295,76 @@ public class DiagnoseThresholdServiceImpl  implements DiagnoseThresholdService {
     }
 
     @Override
+    public void exportCamera(DiagnoseThresholdPageDto request, HttpServletResponse response){
+        final SysOrg sysOrg = orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER);
+        if (ObjectUtil.equal(Boolean.TRUE, request.getCheckSub())) {
+            request.setOrgPath(sysOrg.getPath());
+            request.setOrgId(null);
+        }
+
+        List<IotDeviceDiagnoseThreshold> thresholds = diagnoseThresholdChMapper.selectAllDiagnoseThreshold();
+
+        List<DiagnoseThresholdPageVo> page = diagnoseThresholdChMapper.selectExcelData(request);
+        final List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
+        List<DiagnoseThresholdExportVo> exportVos = Lists.newArrayList();
+        DiagnoseThresholdExportVo exportVo;
+
+        for (DiagnoseThresholdPageVo bean: page) {
+            String thresholdCodes = bean.getThresholdCodes();
+            final List<Long> collect = Arrays.stream(bean.getOrgPath().split("-")).map(Long::parseLong).collect(Collectors.toList());
+            //地区名称
+            cacheList.stream().filter(org -> collect.contains(org.getId()) && OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType()))
+                    .findFirst().ifPresent(org -> bean.setFirstOrgName(org.getShortName()));
+            //行社名称
+            cacheList.stream().filter(org -> collect.contains(org.getId()) && OrgTypeEnum.HANG_SHE.getCode().equals(org.getType()))
+                    .findFirst().ifPresent(org -> bean.setSecondOrgName(org.getShortName()));
+
+            StringBuffer buffer = new StringBuffer();
+            if(StringUtils.isNotEmpty(thresholdCodes)){
+                String[] codes = thresholdCodes.split(",");
+                boolean isMatch = false;
+                for(String code:codes){
+                    for(IotDeviceDiagnoseThreshold threshold:thresholds){
+                        if(threshold.getThresholdCode().equals(code)){
+                            buffer.append(threshold.getThresholdName()).append("【")
+                                    .append(threshold.getBeginTime()).append("--").append(threshold.getEndTime())
+                                    .append("】").append(",");
+                            isMatch = true;
+                        }
+                    }
+                }
+                if(isMatch){
+                    bean.setThresholdName(buffer.substring(0,buffer.length()-1));
+                }else{
+                    bean.setThresholdName("--");
+                }
+            }else{
+                bean.setThresholdName("--");
+            }
+
+            exportVo = new DiagnoseThresholdExportVo();
+            BeanUtils.copyProperties(bean,exportVo);
+
+            exportVos.add(exportVo);
+        }
+        try {
+            // 设置响应头
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("阈值关联摄像机", "utf-8"));
+            response.setContentType("application/octet-stream;charset=UTF-8");
+            response.setCharacterEncoding("utf-8");
+            // 数据导出
+            EasyExcel.write(response.getOutputStream(), DiagnoseThresholdExportVo.class)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("sheet1").doWrite(exportVos);
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+        }
+    }
+
+    @Override
     public List<AlarmTypeSelectedVO> thresholdTypeList() {
         List<AlarmTypeSelectedVO> list = Lists.newArrayList();
         AlarmTypeSelectedVO bean;

+ 46 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/DiagnoseMissionExportVo.java

@@ -0,0 +1,46 @@
+package com.xunmei.iot.vo.sensor;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ColumnWidth(30) //列宽,最大值为255
+@HeadRowHeight(20) //表头行高
+@ContentRowHeight(20) //数据行高
+public class DiagnoseMissionExportVo {
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "地区", index = 0)
+    @ApiModelProperty("地区")
+    private String firstOrgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "行社名称", index = 1)
+    @ApiModelProperty("行社名称")
+    private String secondOrgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "所属机构", index = 2)
+    @ApiModelProperty("所属机构")
+    private String orgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "设备名称", index = 3)
+    @ApiModelProperty("设备名称")
+    private String deviceName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "所属主机", index = 4)
+    @ApiModelProperty("所属主机")
+    private String hostName;
+
+    @ColumnWidth(60)
+    @ExcelProperty(value = "诊断任务", index = 5)
+    @ApiModelProperty("诊断任务")
+    private String missionName;
+
+}

+ 46 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/DiagnoseThresholdExportVo.java

@@ -0,0 +1,46 @@
+package com.xunmei.iot.vo.sensor;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ColumnWidth(30) //列宽,最大值为255
+@HeadRowHeight(20) //表头行高
+@ContentRowHeight(20) //数据行高
+public class DiagnoseThresholdExportVo {
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "地区", index = 0)
+    @ApiModelProperty("地区")
+    private String firstOrgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "行社名称", index = 1)
+    @ApiModelProperty("行社名称")
+    private String secondOrgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "所属机构", index = 2)
+    @ApiModelProperty("所属机构")
+    private String orgName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "设备名称", index = 3)
+    @ApiModelProperty("设备名称")
+    private String deviceName;
+
+    @ColumnWidth(30)
+    @ExcelProperty(value = "所属主机", index = 4)
+    @ApiModelProperty("所属主机")
+    private String hostName;
+
+    @ColumnWidth(60)
+    @ExcelProperty(value = "诊断阈值", index = 5)
+    @ApiModelProperty("诊断阈值")
+    private String thresholdName;
+
+}

+ 42 - 0
soc-modules/soc-modules-iot/src/main/resources/mapper/DiagnoseMissionChMapper.xml

@@ -171,6 +171,48 @@
         delete from iot_device_diagnose_mission_ch where mission_id = #{missionId}
     </delete>
 
+    <select id="selectExcelData" resultType="com.xunmei.iot.vo.sensor.DiagnoseMissionPageVo">
+        select c.* from
+        (
+        select s.id,s.org_id, s.org_name,s.org_path, s.device_name, dvs.device_name as host_name,
+        (select mission_id from iot_device_diagnose_mission_ch ch where ch.iot_token = s.iot_token
+        and ch.device_product=s.device_product and ch.dvs = s.host_code and ch.channel = s.device_code limit 1) mission_id
+        from iot_device_info s
+        inner join iot_device_info dvs on dvs.iot_token = s.iot_token
+        and dvs.device_product = s.device_product and dvs.device_code = s.host_code
+        and dvs.deleted = 0 and s.enable = 0 and dvs.device_type = 1
+        where s.deleted=0 and s.enable=0 and s.device_type = 2
+        <if test="request.orgId!= null">
+            and s.org_id=#{request.orgId}
+        </if>
+        <if test="request.orgPath!= null">
+            and s.org_path like CONCAT(#{request.orgPath}, '%')
+        </if>
+        <if test="request.deviceName != null and request.deviceName!= ''">
+            and s.device_name like CONCAT('%',#{request.deviceName},'%')
+        </if>
+        order by s.host_code ,cast(s.device_code as signed)
+        ) c where 1=1
+        <choose>
+            <when test=" request.state == null">
+            </when>
+            <when test=" request.state == 0">
+                and c.mission_id is null
+            </when>
+            <otherwise>
+                and c.mission_id is not null
+            </otherwise>
+        </choose>
+        <choose>
+            <when test=" request.missionCode != null and request.missionCode != '' ">
+                and c.mission_id = #{request.missionCode}
+            </when>
+            <otherwise>
+            </otherwise>
+        </choose>
+
+    </select>
+
     <select id="selectAllDiagnoseMission" resultType="com.xunmei.common.core.domain.iot.domain.IotDeviceDiagnoseMission">
         select * from iot_device_diagnose_mission
     </select>

+ 43 - 0
soc-modules/soc-modules-iot/src/main/resources/mapper/DiagnoseThresholdChMapper.xml

@@ -156,6 +156,49 @@
         delete from iot_device_diagnose_threshold_ch where threshold_code = #{thresholdCode}
     </delete>
 
+    <select id="selectExcelData" resultType="com.xunmei.iot.vo.sensor.DiagnoseThresholdPageVo">
+        select c.* from
+        (
+        select s.id,s.org_id, s.org_name,s.org_path, s.device_name, dvs.device_name as host_name,
+        (select group_concat(threshold_code) from iot_device_diagnose_threshold_ch ch where ch.iot_token = s.iot_token
+        and ch.device_product=s.device_product and ch.dvs = s.host_code and ch.channel = s.device_code) threshold_codes
+        from iot_device_info s
+        inner join iot_device_info dvs on dvs.iot_token = s.iot_token
+        and dvs.device_product = s.device_product and dvs.device_code = s.host_code
+        and dvs.deleted = 0 and s.enable = 0 and dvs.device_type = 1
+        where s.deleted=0 and s.enable=0 and s.device_type = 2
+        <if test="request.orgId!= null">
+            and s.org_id=#{request.orgId}
+        </if>
+        <if test="request.orgPath!= null">
+            and s.org_path like CONCAT(#{request.orgPath}, '%')
+        </if>
+        <if test="request.deviceName != null and request.deviceName!= ''">
+            and s.device_name like CONCAT('%',#{request.deviceName},'%')
+        </if>
+        order by s.host_code ,cast(s.device_code as signed)
+        ) c where 1=1
+        <choose>
+            <when test=" request.state == null">
+            </when>
+            <when test=" request.state == 0">
+                and c.threshold_codes is null
+            </when>
+            <otherwise>
+                and c.threshold_codes is not null
+            </otherwise>
+        </choose>
+        <choose>
+            <when test=" request.thresholdCode != null and request.thresholdCode != '' ">
+                and c.threshold_codes like CONCAT('%',#{request.thresholdCode}, '%')
+            </when>
+            <otherwise>
+            </otherwise>
+        </choose>
+
+    </select>
+
+
     <select id="selectAllDiagnoseThreshold" resultType="com.xunmei.common.core.domain.iot.domain.IotDeviceDiagnoseThreshold">
         select * from iot_device_diagnose_threshold
     </select>