package com.zehong.web.controller.detector;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.util.BeanUtil;
import com.zehong.common.enums.ResultEnum;
import com.zehong.common.exception.IOCException;
import com.zehong.system.domain.TDetectorReportData;
import com.zehong.system.domain.TDetectorUser;
import com.zehong.system.domain.TDetectorInfo;
import com.zehong.system.domain.dto.TDetectorInfoDTO;
import com.zehong.system.domain.form.TDetectorReportDataForm;
import com.zehong.system.domain.vo.TDetectorUserVO;
import com.zehong.system.service.ITDetectorReportDataService;
import com.zehong.system.service.ITDetectorUserService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zehong.common.annotation.Log;
import com.zehong.common.core.controller.BaseController;
import com.zehong.common.core.domain.AjaxResult;
import com.zehong.common.enums.BusinessType;
import com.zehong.system.service.ITDetectorInfoService;
import com.zehong.common.utils.poi.ExcelUtil;
import com.github.pagehelper.PageInfo;
import com.zehong.common.core.page.TableDataInfo;

import javax.validation.Valid;

/**
 * 探测器Controller
 * 
 * @author zehong
 * @date 2021-11-02
 */
@RestController
@RequestMapping("/detector/detectorInfo")
@Slf4j
public class TDetectorInfoController extends BaseController
{
    @Autowired
    private ITDetectorInfoService tDetectorInfoService;
    @Autowired
    private ITDetectorUserService tDetectorUserService;
    @Autowired
    private ITDetectorReportDataService tDetectorReportDataService;

     /**
     * 查询探测器列表
     */
    @GetMapping("/list")
    public TableDataInfo list(TDetectorInfo tDetectorInfo)
    {
        startPage();
        PageInfo<TDetectorInfo> list = tDetectorInfoService.selectTDetectorInfoPage(tDetectorInfo);
        return getDataTable(list);
    }

    /**
     * 获取探测器列表
     * @param tDetectorInfo
     * @return
     */
    @GetMapping("/detectorInfoList")
    public AjaxResult detectorInfoList(TDetectorInfo tDetectorInfo){
        return AjaxResult.success(tDetectorInfoService.selectTDetectorInfoList(tDetectorInfo));
    }

    /**
     * 导出探测器列表
     */
    @Log(title = "探测器", businessType = BusinessType.EXPORT)
    @GetMapping("/export")
    public AjaxResult export(TDetectorInfo tDetectorInfo)
    {
        List<TDetectorInfo> list = tDetectorInfoService.selectTDetectorInfoList(tDetectorInfo);
        ExcelUtil<TDetectorInfo> util = new ExcelUtil<TDetectorInfo>(TDetectorInfo.class);
        return util.exportExcel(list, "探测器数据");
    }

    /**
     * 获取探测器详细信息
     */
    @GetMapping(value = "/{detectorId}")
    public AjaxResult getInfo(@PathVariable("detectorId") Long detectorId)
    {
        return AjaxResult.success(tDetectorInfoService.selectTDetectorInfoById(detectorId));
    }

    /**
     * 新增探测器
     */
    @Log(title = "探测器", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody TDetectorInfo tDetectorInfo)
    {
        return toAjax(tDetectorInfoService.insertTDetectorInfo(tDetectorInfo));
    }

    /**
     * 修改探测器
     */
    @Log(title = "探测器", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody TDetectorInfo tDetectorInfo)
    {
        return toAjax(tDetectorInfoService.updateTDetectorInfo(tDetectorInfo));
    }

    /**
     * 删除探测器
     */
    @Log(title = "探测器", businessType = BusinessType.DELETE)
	@DeleteMapping("/{detectorIds}")
    public AjaxResult remove(@PathVariable Long[] detectorIds)
    {
        return toAjax(tDetectorInfoService.deleteTDetectorInfoByIds(detectorIds));
    }

    @ApiOperation(value = "泽宏报警器信息推送接口")
    @PostMapping("/reportTDetectorInfoData")
    public AjaxResult reportTDetectorInfoData(@RequestBody String param) throws IOException {
        log.info(param);

        JSONObject object = JSONObject.parseObject(param);
        String operateType = object.getString("operateType");
        String data = object.getString("data");

        JSONArray arr = JSONArray.parseArray(data);
        List<TDetectorInfo> list = new ArrayList<TDetectorInfo>();
        String username = "";
        String deviceName = "";
        String deviceNo = "";
        String deviceType = "";
        String medium = "";
        String address = "";
        String longitude = "";
        String latitude = "";
        String contacts = "";
        String telephone = "";

        if("1".equals(operateType)){  // 新增操作
            for(int i=0; i<arr.size(); i++){
                JSONObject obj = arr.getJSONObject(i);
                username = obj.getString("username");
                deviceName = obj.getString("deviceName");
                deviceNo = obj.getString("deviceNo");
                deviceType = obj.getString("deviceType");
                medium = obj.getString("medium");
                address = obj.getString("address");
                longitude = obj.getString("longitude");
                latitude = obj.getString("latitude");
                contacts = obj.getString("contacts");
                telephone = obj.getString("telephone");

//                MapResourcesInfoExample example = new MapResourcesInfoExample();
//                example.createCriteria().andFullNameEqualTo(username).andIsEnableEqualTo("0");
//                List<MapResourcesInfo> mapResourcesList = mapResourcesService.selectByExample(example);
                TDetectorUser tDetectorUser = new TDetectorUser();
                tDetectorUser.setNickName(username);
                List<TDetectorUserVO> tDetectorUserList = tDetectorUserService.detectorUserList(tDetectorUser);
                if(tDetectorUserList.size() == 0){
                    return AjaxResult.error(1,"查询不到用户名username=" + username);
                }

                TDetectorInfo tDetectorInfo = new TDetectorInfo();
                tDetectorInfo.setUserId(tDetectorUserList.get(0).getUserId());
                tDetectorInfo.setDetectorName(deviceName);
                tDetectorInfo.setDetectorCode(deviceNo);
                tDetectorInfo.setDetectorType(deviceType);
                if(!"".equals(medium)){
                    tDetectorInfo.setMedium(medium);
                }
                if(!"".equals(address)) {
                    tDetectorInfo.setDetectorAddr(address);
                }
                if(!"".equals(longitude)){
                    tDetectorInfo.setLongitude(new BigDecimal(longitude));
                }
                if(!"".equals(latitude)){
                    tDetectorInfo.setLatitude(new BigDecimal(latitude));
                }
                if(!"".equals(contacts)) {
                    tDetectorInfo.setLinkman(contacts);
                }
                if(!"".equals(telephone)) {
                    tDetectorInfo.setPhone(telephone);
                }

                // 如果该设备编号已存在，则执行修改
//                TDetectorInfoExample deviceInfoExample = new TDetectorInfoExample();
//                MapResourcesInfo mapResourcesInfo = mapResourcesList.get(0);
//                deviceInfoExample.createCriteria().andDetectorNoEqualTo(deviceNo)
//                        .andEnterpriseIdEqualTo(mapResourcesInfo.getResourceNo()).andIsEnableEqualTo("0");
                TDetectorInfo detector = new TDetectorInfo();
                detector.setDetectorCode(deviceNo);
                detector.setIsDel("0");
                List<TDetectorInfo> detectorList = tDetectorInfoService.selectTDetectorInfoList(detector);
                if(detectorList.size() > 0){
                    tDetectorInfo.setDetectorId(detectorList.get(0).getDetectorId());
                    tDetectorInfo.setUpdateTime(new Date());
                    tDetectorInfoService.updateTDetectorInfo(tDetectorInfo);
                    continue;
                }

                tDetectorInfo.setCreateTime(new Date());
                list.add(tDetectorInfo);
            }
            if(list.size() > 0) {
                tDetectorInfoService.insertBatch(list);
            }
        } else if ("2".equals(operateType)) { // 修改操作
            List<String> errList = new ArrayList<>();

            for(int i=0; i<arr.size(); i++){
                JSONObject obj = arr.getJSONObject(i);
                username = obj.getString("username");
                deviceName = obj.getString("deviceName");
                deviceNo = obj.getString("deviceNo");
                deviceType = obj.getString("deviceType");
                medium = obj.getString("medium");
                address = obj.getString("address");
                longitude = obj.getString("longitude");
                latitude = obj.getString("latitude");
                contacts = obj.getString("contacts");
                telephone = obj.getString("telephone");

                TDetectorInfo tDetectorInfo = new TDetectorInfo();
                tDetectorInfo.setDetectorCode(deviceNo);

//                MapResourcesInfoExample example = new MapResourcesInfoExample();
//                example.createCriteria().andFullNameEqualTo(username).andIsEnableEqualTo("0");
//                List<MapResourcesInfo> mapResourcesList = mapResourcesService.selectByExample(example);
                TDetectorUser tDetectorUser = new TDetectorUser();
                tDetectorUser.setNickName(username);
                List<TDetectorUserVO> tDetectorUserList = tDetectorUserService.detectorUserList(tDetectorUser);
                if(tDetectorUserList.size() == 0){
                    return AjaxResult.error(1,"查询不到用户名username=" + username);
                }

                // 设备编号不存在执行的操作
                TDetectorInfo detector = new TDetectorInfo();
                detector.setDetectorCode(deviceNo);
                detector.setIsDel("0");
                List<TDetectorInfo> detectorList = tDetectorInfoService.selectTDetectorInfoList(detector);
                if(detectorList.size() == 0){
                    errList.add(deviceNo);
                    continue;
                }

                if(!"".equals(deviceType)) {
                    tDetectorInfo.setDetectorType(deviceType);
                }
                if(!"".equals(deviceName)) {
                    tDetectorInfo.setDetectorName(deviceName);
                }
                if(!"".equals(medium)) {
                    tDetectorInfo.setMedium(medium);
                }
                if(!"".equals(address)) {
                    tDetectorInfo.setDetectorAddr(address);
                }
                if(!"".equals(longitude)){
                    tDetectorInfo.setLongitude(new BigDecimal(longitude));
                }
                if(!"".equals(latitude)){
                    tDetectorInfo.setLatitude(new BigDecimal(latitude));
                }
                if(!"".equals(contacts)) {
                    tDetectorInfo.setLinkman(contacts);
                }
                if(!"".equals(telephone)) {
                    tDetectorInfo.setPhone(telephone);
                }
                tDetectorInfo.setUpdateTime(new Date());

                list.add(tDetectorInfo);
            }
            if(errList.size() > 0){
                return AjaxResult.error(3,"设备不存在" + errList);
            }
            tDetectorInfoService.updateBatch(list);
        } else if ("3".equals(operateType)) { // 删除操作
            for(int i=0; i<arr.size(); i++){
                JSONObject obj = arr.getJSONObject(i);
                deviceNo = obj.get("deviceNo").toString();
                username = obj.getString("username");

                //用户不存在无操作
                TDetectorUser tDetectorUser = new TDetectorUser();
                tDetectorUser.setNickName(username);
                List<TDetectorUserVO> tDetectorUserList = tDetectorUserService.detectorUserList(tDetectorUser);
                if(tDetectorUserList.size() == 0){
                    continue;
                }

                //设备编号不存在无操作
                TDetectorInfo detector = new TDetectorInfo();
                detector.setDetectorCode(deviceNo);
                detector.setIsDel("0");
                List<TDetectorInfo> detectorList = tDetectorInfoService.selectTDetectorInfoList(detector);
                if(detectorList.size() == 0){
                    continue;
                }

                TDetectorInfo tDetectorInfo = new TDetectorInfo();

                tDetectorInfo.setDetectorCode(deviceNo);
                tDetectorInfo.setIsDel("1");
                tDetectorInfo.setUpdateTime(new Date());

                list.add(tDetectorInfo);
            }
            if(list.size() > 0) {
                tDetectorInfoService.updateBatch(list);
            }
        } else if ("4".equals(operateType)) {  // 批量转移操作
            List<String> errList = new ArrayList<>();
            String sourceUsername = "";
            String targetUsername = "";
            for(int i=0; i<arr.size(); i++){
                JSONObject obj = arr.getJSONObject(i);
                deviceNo = obj.getString("deviceNo");
                sourceUsername = obj.getString("sourceUsername");
                targetUsername = obj.getString("targetUsername");

                TDetectorInfo tDetectorInfo = new TDetectorInfo();
                tDetectorInfo.setDetectorCode(deviceNo);

                TDetectorUser tDetectorUser1 = new TDetectorUser();
                tDetectorUser1.setNickName(username);
                List<TDetectorUserVO> tDetectorUserList1 = tDetectorUserService.detectorUserList(tDetectorUser1);
                if(tDetectorUserList1.size() == 0){
                    return AjaxResult.error(4,"查询不到原用户名sourceUsername=" + sourceUsername);
                }

                TDetectorUser tDetectorUser2 = new TDetectorUser();
                tDetectorUser2.setNickName(username);
                List<TDetectorUserVO> tDetectorUserList2 = tDetectorUserService.detectorUserList(tDetectorUser2);
                if(tDetectorUserList2.size() == 0){
                    return AjaxResult.error(5,"查询不到目标用户名targetUsername=" + targetUsername);
                }

                tDetectorInfo.setUserId(tDetectorUserList2.get(0).getUserId());

                TDetectorInfo detector = new TDetectorInfo();
                detector.setDetectorCode(deviceNo);
                detector.setIsDel("0");
                List<TDetectorInfo> detectorList = tDetectorInfoService.selectTDetectorInfoList(detector);
                if(detectorList.size() == 0){
                    errList.add(deviceNo);
                    continue;
                }

                tDetectorInfo.setUpdateTime(new Date());
                list.add(tDetectorInfo);
            }

            if(errList.size() > 0){
                return AjaxResult.error(3,"设备不存在" + errList);
            }

            tDetectorInfoService.updateBatch(list);
        }

        return AjaxResult.success();
    }

    @ApiOperation(value = "泽宏报警器更新数据推送接口")
    @PostMapping("/reportZHDeviceStatus")
    public AjaxResult reportZHDeviceStatus(@RequestBody List<TDetectorInfoDTO> tDetectorInfoDTOList){

        log.info(tDetectorInfoDTOList.toString());

        List<TDetectorInfo> list = new ArrayList<>();

        try {
            for(TDetectorInfoDTO dto : tDetectorInfoDTOList){
                TDetectorInfo tDetectorInfo = new TDetectorInfo();

                if(!StringUtils.isEmpty(dto.getDetectorType()) && dto.getDetectorType().equals("1")){
                    if(!StringUtils.isEmpty(dto.getDetectorStatus()) && dto.getDetectorStatus().equals("1")){
                        tDetectorInfo.setDetectorStatus("0");
                        tDetectorInfo.setAlarmTime(null);
                    }else if(new ArrayList<String>(Arrays.asList("7","9")).contains(dto.getDetectorStatus())){
                        tDetectorInfo.setDetectorStatus("1");
                    }else{
                        tDetectorInfo.setDetectorStatus("2");
                    }
                }else{
                    if(!StringUtils.isEmpty(dto.getDetectorStatus()) && dto.getDetectorStatus().equals("0")){
                        tDetectorInfo.setAlarmTime(null);
                    }
                }

                list.add(tDetectorInfo);
            }

            tDetectorInfoService.updateBatch(list);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("【泽宏设备状态】操作出错,error={}",e.getMessage());
            throw new IOCException(ResultEnum.OPERATION_FAIL);
        }


        return AjaxResult.success();
    }

    @ApiOperation(value = "泽宏设备预警数据推送接口")
    @PostMapping("/reportZHDeviceAlarmData")
    public AjaxResult reportZHDeviceAlarmData(@Valid @RequestBody TDetectorReportDataForm tDetectorReportDataForm, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            log.error("【新增泽宏设备上报数据】参数不正确,zhDeviceReportDataForm={}",tDetectorReportDataForm);
            throw new IOCException(ResultEnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
        }

        log.info("泽宏设备上报数据===="+tDetectorReportDataForm.toString());
        try {

            boolean flag = true;

            if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceType()) && tDetectorReportDataForm.getDeviceType().equals("1") && !StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && new ArrayList<String>(Arrays.asList("7","9")).contains((tDetectorReportDataForm.getDeviceStatusId()))){
                flag = false;
            }

            //7,9通信故障不处理
            if(flag){

                TDetectorInfo tDetectorInfo = new TDetectorInfo();
                tDetectorInfo.setDetectorCode(tDetectorReportDataForm.getDeviceNo());

                List<TDetectorInfo> tDetectorInfoList = tDetectorInfoService.selectTDetectorInfoList(tDetectorInfo);

                if(tDetectorInfoList.size() > 0){

                    //报警设备类型，1家用报警器，2工业探测器
                    if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceType()) && tDetectorReportDataForm.getDeviceType().equals("1") && !StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && !tDetectorReportDataForm.getDeviceStatusId().equals("1")){

                        TDetectorReportData datas = new TDetectorReportData();
                        datas.setSourceId(tDetectorReportDataForm.getSourceId());
                        datas.setDetectorCode(tDetectorReportDataForm.getDeviceNo());

                        datas.setDetectorStatus(tDetectorReportDataForm.getDeviceStatusId());
                        datas.setReportValue(StringUtils.isEmpty(tDetectorReportDataForm.getReportValue())?null:Float.parseFloat(tDetectorReportDataForm.getReportValue()));
                        datas.setZhHostStatusId(StringUtils.isEmpty(tDetectorReportDataForm.getZhHostStatusId())?null:Integer.parseInt(tDetectorReportDataForm.getZhHostStatusId()));
                        datas.setSignalStrength(StringUtils.isEmpty(tDetectorReportDataForm.getSignalStrength())?null:Integer.parseInt(tDetectorReportDataForm.getSignalStrength()));
                        datas.setNetPoint(StringUtils.isEmpty(tDetectorReportDataForm.getNetPoint())?null:Integer.parseInt(tDetectorReportDataForm.getNetPoint()));
                        datas.setIpAddress(StringUtils.isEmpty(tDetectorReportDataForm.getIpAddress())?null:tDetectorReportDataForm.getIpAddress());
                        datas.setCreateTime(StringUtils.isEmpty(tDetectorReportDataForm.getCreateTime())?null:new Date());

                        tDetectorReportDataService.insertTDetectorReportData(datas);

                    }else if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceType()) && tDetectorReportDataForm.getDeviceType().equals("2") && !StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && !tDetectorReportDataForm.getDeviceStatusId().equals("E")){
                        TDetectorReportData datas = new TDetectorReportData();
                        datas.setSourceId(tDetectorReportDataForm.getSourceId());
                        datas.setDetectorCode(tDetectorReportDataForm.getDeviceNo());

                        //设备类型，1家用报警器，2工业探测器
                        datas.setDetectorStatus(StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId())?null:"E"+tDetectorReportDataForm.getDeviceStatusId());
                        datas.setReportValue(StringUtils.isEmpty(tDetectorReportDataForm.getReportValue())?null:Float.parseFloat(tDetectorReportDataForm.getReportValue()));
                        datas.setZhHostStatusId(StringUtils.isEmpty(tDetectorReportDataForm.getZhHostStatusId())?null:Integer.parseInt(tDetectorReportDataForm.getZhHostStatusId()));
                        datas.setSignalStrength(StringUtils.isEmpty(tDetectorReportDataForm.getSignalStrength())?null:Integer.parseInt(tDetectorReportDataForm.getSignalStrength()));
                        datas.setNetPoint(StringUtils.isEmpty(tDetectorReportDataForm.getNetPoint())?null:Integer.parseInt(tDetectorReportDataForm.getNetPoint()));
                        datas.setIpAddress(StringUtils.isEmpty(tDetectorReportDataForm.getIpAddress())?null:tDetectorReportDataForm.getIpAddress());
                        datas.setCreateTime(StringUtils.isEmpty(tDetectorReportDataForm.getCreateTime())?null:new Date());

                        tDetectorReportDataService.insertTDetectorReportData(datas);
                    }

                    //设备状态更新
                    TDetectorInfo detectorInfo = new TDetectorInfo();
                    detectorInfo.setDetectorId(tDetectorInfoList.get(0).getDetectorId());
                    // 探测器 推送数据（1正常，7、9离线，其他值预警）   用电推送数据（E正常，其他都为报警值）用电手动消警 用 E 代表
                    if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && new ArrayList<String>(Arrays.asList("1","E")).contains((tDetectorReportDataForm.getDeviceStatusId()))){
                        detectorInfo.setDetectorStatus("0"); // 设备表状态 0正常，1故障（掉线）
                        detectorInfo.setAlarmTime(null);
                    }else{
                        if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceType()) && tDetectorReportDataForm.getDeviceType().equals("1")){
                            if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && new ArrayList<String>(Arrays.asList("7","9")).contains((tDetectorReportDataForm.getDeviceStatusId()))){
                                detectorInfo.setDetectorStatus("1");
                            }else{
                                detectorInfo.setDetectorStatus("2");
                            }
                        }else{
                            detectorInfo.setDetectorStatus("2");
                        }
                        detectorInfo.setAlarmTime(tDetectorReportDataForm.getCreateTime());
                    }

                    tDetectorInfoService.updateTDetectorInfo(detectorInfo);


                    //消警处理
                    if(!StringUtils.isEmpty(tDetectorReportDataForm.getDeviceStatusId()) && new ArrayList<String>(Arrays.asList("1","E")).contains((tDetectorReportDataForm.getDeviceStatusId()))){
//                        ZHDeviceReportDatasExample zhDeviceReportDatasExample = new ZHDeviceReportDatasExample();
//                        zhDeviceReportDatasExample.createCriteria().andDeviceNoEqualTo(tDetectorReportDataForm.getDeviceNo());
//                        zhDeviceReportDatasExample.setOrderByClause(" create_time DESC LIMIT 1");
//
//                        List<ZHDeviceReportDatas> dataList = zHDeviceReportDataService.selectByExample(zhDeviceReportDatasExample);

                        TDetectorReportData data = tDetectorReportDataService.selectTDetectorReportDataByCode(tDetectorReportDataForm.getDeviceNo());
                        if(data != null){
                            data.setIsCancelAlarm("1"); // 1自动消警
                            data.setCancelTime(StringUtils.isEmpty(tDetectorReportDataForm.getCreateTime())?null: new Date());
                            tDetectorReportDataService.updateTDetectorReportData(data);
                        }

                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("【新增泽宏设备上报数据】操作出错,error={},zhDeviceReportDataForm={}",e.getMessage(),tDetectorReportDataForm);
            throw new IOCException(ResultEnum.OPERATION_FAIL);
        }


        return AjaxResult.success();
    }


    @ApiOperation(value = "大屏数据初始化时主动查询的感知设备报警信息前50条")
    @GetMapping("/getAlarmData")
    public AjaxResult getAlarmData(){
        ModelMap map = new ModelMap();
        try {
            TDetectorInfo detector = new TDetectorInfo();
            detector.setIsDel("0");
            List<TDetectorInfo> tDetectorInfoList = tDetectorInfoService.selectTDetectorInfoList(detector);

            List<String> strList = new ArrayList<>();
            for(TDetectorInfo info : tDetectorInfoList){
                strList.add(info.getDetectorCode());
            }

            List<TDetectorReportData> dataList = tDetectorReportDataService.countDetector(strList);
            int totalNum = dataList.size();

            int handledNum = 0;
            for(TDetectorReportData data : dataList){
                if(!StringUtils.isEmpty(data.getIsCancelAlarm()) && data.getIsCancelAlarm().equals("1")){
                    ++handledNum;
                }
            }

            List<TDetectorReportData> alarmVO = tDetectorReportDataService.selectRealtimeDataList();

            map.put("totalNum", totalNum);
            map.put("handledNum", handledNum);
            map.put("noHandeldNum", totalNum-handledNum);
            map.put("pageData", alarmVO);

        } catch (Exception ie){
            ie.printStackTrace();
            log.error("【查询报警数据】操作出错,error={}",ie.getMessage());
            throw new IOCException(ResultEnum.OPERATION_FAIL.getCode(),"查询报警数据操作出错");
        }

        return AjaxResult.success(map);
    }
}
