Newer
Older
gas-app / src / main / java / com / casic / service / impl / DeviceServiceImpl.java
casic_zt on 7 Sep 2023 10 KB 设备新增状态查询
package com.casic.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.casic.dao.AlarmDeviceMapper;
import com.casic.dao.AlarmRecordsMapper;
import com.casic.dao.ButaneDataMapper;
import com.casic.entity.AlarmRecord;
import com.casic.entity.ButaneData;
import com.casic.entity.Device;
import com.casic.service.DeviceService;
import com.casic.util.DateUtils;
import com.casic.util.SendUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import xyz.downgoon.snowflake.Snowflake;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
@RequiredArgsConstructor
public class DeviceServiceImpl implements DeviceService {

    private final ButaneDataMapper butaneDataMapper;
    private final AlarmRecordsMapper alarmRecordsMapper;
    private final AlarmDeviceMapper alarmDeviceMapper;


    public List<Device> getGasList(List<String> devCodes) {
        QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ACTIVE", "1");
        queryWrapper.in(devCodes != null && devCodes.size() > 0, "DEVCODE", devCodes);
        return alarmDeviceMapper.selectList(queryWrapper);
    }

    public List<AlarmRecord> getAlarms(List<String> devCodes) {
        QueryWrapper<AlarmRecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("DEVICE_CODE as deviceCode,RECORDCODE as recordcode ,max(RECORDDATE) as recorddate");
        queryWrapper.eq("ACTIVE", "1");
        queryWrapper.in(devCodes != null && devCodes.size() > 0, "DEVICE_CODE", devCodes);
        queryWrapper.groupBy("DEVICE_CODE", "RECORDCODE");
        queryWrapper.orderByDesc("RECORDDATE");
        return alarmRecordsMapper.selectList(queryWrapper);
    }


    @Override
    public Page<Device> getDevices(String phone, String devCode, String type, String shop, int pageNo, int pageSize) {
        Page<Device> page = new Page<>(pageNo, pageSize);
        if(StringUtils.isNotEmpty(type)){
            type="1".equals(type)?"0":("2".equals(type)?"1":"2");
        }
        Page<Device> devicePage = alarmDeviceMapper.listPage(page, phone, devCode, type, shop);
        List<Device> deviceList = devicePage.getRecords();
        deviceList.forEach(device -> {
            if (StringUtils.isNotEmpty(device.getFactory())
                    && device.getFactory().contains("(")
                    && device.getFactory().contains(")")) {
                device.setDoorName(device.getFactory().substring(device.getFactory().indexOf("(") + 1, device.getFactory().indexOf(")")));
                device.setPosition(device.getFactory().substring(0, device.getFactory().indexOf("(")));
            }
            if (StringUtils.isNotEmpty(device.getFactory())
                    && device.getFactory().contains("(")
                    && device.getFactory().contains(")")) {
                device.setDoorName(device.getFactory().substring(device.getFactory().indexOf("(") + 1, device.getFactory().indexOf(")")));
                device.setPosition(device.getFactory().substring(0, device.getFactory().indexOf("(")));
            }
            if (StringUtils.isEmpty(device.getStatus())) {
                device.setStatus("正常");
            } else
                device.setStatus("0".equals(device.getStatus()) ? "报警" : "离线");
        });
//        QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("ACTIVE", "1");
//        queryWrapper.eq("DEVICETYPE_ID", 30);
//        queryWrapper.eq(StringUtils.isNotEmpty(devCode), "DEVCODE", devCode);
//        queryWrapper.like(StringUtils.isNotEmpty(shop), "FACTORY", shop);
//        queryWrapper.like(StringUtils.isNotEmpty(phone), "SIMID", phone);
//        Page<Device> iPage = alarmDeviceMapper.selectPage(page, queryWrapper);
//        List<Device> deviceList = iPage.getRecords();
//        List<String> devStr = new ArrayList<>();
//        List<AlarmRecord> alarmRecordList = new ArrayList<>();
//        if (null != deviceList && deviceList.size() > 0) {
//            devStr = deviceList.stream().map(Device::getDevCode).collect(Collectors.toList());
//            alarmRecordList = this.getAlarms(devStr);
//            for (Device device : deviceList) {
//                if (StringUtils.isNotEmpty(device.getFactory())
//                        && device.getFactory().contains("(")
//                        && device.getFactory().contains(")")) {
//                    device.setDoorName(device.getFactory().substring(device.getFactory().indexOf("(") + 1, device.getFactory().indexOf(")")));
//                    device.setPosition(device.getFactory().substring(0, device.getFactory().indexOf("(")));
//                }
//                if (StringUtils.isNotEmpty(device.getFactory())
//                        && device.getFactory().contains("(")
//                        && device.getFactory().contains(")")) {
//                    device.setDoorName(device.getFactory().substring(device.getFactory().indexOf("(") + 1, device.getFactory().indexOf(")")));
//                    device.setPosition(device.getFactory().substring(0, device.getFactory().indexOf("(")));
//                }
//                device.setStatus("正常");
//                for (AlarmRecord alarmRecord : alarmRecordList) {
//                    if (device.getDevCode().equals(alarmRecord.getDeviceCode())) {
//                        device.setStatus("0".equals(alarmRecord.getRecordcode()) ? "报警" : "离线");
//                        break;
//                    }
//                }
//            }
//        }
        return devicePage;
    }

    @Override
    public Page<ButaneData> getDatas(String devCode, int pageNo, int pageSize) {
        Page<ButaneData> page = new Page<>(pageNo, pageSize);
        QueryWrapper<ButaneData> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotEmpty(devCode), "DEVCODE", devCode);
        queryWrapper.orderByDesc("LOGTIME");
        Page<ButaneData> dataPage = butaneDataMapper.selectPage(page, queryWrapper);
        List<ButaneData> butaneDataList = dataPage.getRecords();
        butaneDataList.forEach(butaneData -> {
            if (null != butaneData.getLogtime()) {
                butaneData.setLogtimeStr(DateUtils.sdf7.format(butaneData.getLogtime()));
            }
        });
        return dataPage;
    }

    @Override
    public Page<AlarmRecord> getAlarmRecords(String devCode, String begTime, String endTime, int pageNo, int pageSize) {
        Page<AlarmRecord> page = new Page<>(pageNo, pageSize);
        QueryWrapper<AlarmRecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("active", 1);
        queryWrapper.eq("RECORDCODE", 0);
        queryWrapper.eq("DEVICE_TYPE_NAME", "可燃气体探测器");
        queryWrapper.eq(StringUtils.isNotEmpty(devCode), "DEVICE_CODE", devCode);
        try {
            if (StringUtils.isNotEmpty(begTime)) {
                queryWrapper.ge("RECORDDATE", DateUtils.sdf4.parse(begTime));
            }
            if (StringUtils.isNotEmpty(endTime)) {
                queryWrapper.le("RECORDDATE", DateUtils.sdf4.parse(endTime));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        queryWrapper.orderByDesc("RECORDDATE");
        Page<AlarmRecord> dataPage = alarmRecordsMapper.selectPage(page, queryWrapper);
        List<AlarmRecord> alarmRecordList = dataPage.getRecords();
        List<String> devCodeList = null;
        List<Device> deviceList = new ArrayList<>();
        if (null != alarmRecordList && alarmRecordList.size() > 0) {
            devCodeList = alarmRecordList.stream().map(AlarmRecord::getDeviceCode).collect(Collectors.toList());
            devCodeList = devCodeList.stream().distinct().collect(Collectors.toList());
            deviceList = this.getGasList(devCodeList);
        }
        for (AlarmRecord alarmRecord : alarmRecordList) {
            if (null != alarmRecord.getRecorddate()) {
                alarmRecord.setRecorddateStr(DateUtils.sdf4.format(alarmRecord.getRecorddate()));
            }
            deviceList.forEach(device -> {
                if (alarmRecord.getDeviceCode().equals(device.getDevCode()))
                    alarmRecord.setAlarmMsg("位于"
                            .concat(StringUtils.isNotEmpty(device.getFactory()) ? device.getFactory() : "")
                            .concat("的可燃气体探测器")
                            .concat(alarmRecord.getDeviceCode())
                            .concat("发生报警!"));
            });
        }
        return dataPage;
    }


    @Override
    public Map<String, Object> getIndex() {
        QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("DEVCODE as devCode");
        queryWrapper.eq("ACTIVE", "1");
        queryWrapper.eq("DEVICETYPE_ID", 30);
        List<Device> deviceList = alarmDeviceMapper.selectList(queryWrapper);
        Map<String, Object> resultMap = new HashMap<>();
        int devCount = 0, alarmCount = 0, offCount = 0;
        if (null != deviceList && deviceList.size() > 0) {
            devCount = deviceList.size();
            List<String> devCodes = deviceList.stream().map(Device::getDevCode).collect(Collectors.toList());
            QueryWrapper<AlarmRecord> recordQueryWrapper = new QueryWrapper<>();
            recordQueryWrapper.select("DEVICE_CODE as deviceCode, RECORDCODE as recordcode ,max(RECORDDATE) as recorddate ");
            recordQueryWrapper.eq("ACTIVE", "1");
            recordQueryWrapper.in("DEVICE_CODE", devCodes);
            recordQueryWrapper.groupBy("DEVICE_CODE", "RECORDCODE");
            recordQueryWrapper.orderByDesc("RECORDDATE");
            List<AlarmRecord> alarmRecordList = alarmRecordsMapper.selectList(recordQueryWrapper);
            for (Device device : deviceList) {
                for (AlarmRecord alarmRecord : alarmRecordList) {
                    if (device.getDevCode().equals(alarmRecord.getDeviceCode())) {
                        if ("0".equals(alarmRecord.getRecordcode())) {
                            alarmCount++;
                        } else {
                            offCount++;
                        }
                        break;
                    }
                }
            }
        }
        resultMap.put("devCount", devCount);
        resultMap.put("alarmCount", alarmCount);
        resultMap.put("offCount", offCount);
        resultMap.put("onCount", devCount - offCount);
        return resultMap;
    }

}