Newer
Older
smartwell_demos / src / main / java / com / casic / service / impl / DeviceDataServiceImpl.java
chaizhuang on 29 Aug 2023 5 KB 中石化thingsboard,联调bug
package com.casic.service.impl;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.casic.dao.DeviceDataMapper;
import com.casic.model.ResponseData;
import com.casic.service.DeviceDataService;
import com.casic.util.DeviceDataFieldTableEnum;
import com.casic.util.DeviceDataTableEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;

/**
 * @author cz
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class DeviceDataServiceImpl implements DeviceDataService {

    @Value("${casic.device.type}")
    private Integer devciceType;

    @Value("${casic.device.data-day}")
    private Integer dataDay;

    private final DeviceDataMapper deviceDataMapper;

    @Override
    public Object getDeviceRecentData(String deviceType, String recentNum, String devcode) {
        ResponseData responseData = new ResponseData();
        DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType));
        try {
            String tableName = deviceDataTableEnum.getTableName();
            String fields = DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName);
            List<Map<String, Object>> recentDataList = deviceDataMapper.getDeviceRecentData(tableName, recentNum, fields, devcode);
            responseData.setData(recentDataList);
            responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE);
        } catch (DataAccessException dae) {
            log.error("设备最近数据查询异常,设备类型{},查询数目{},异常信息{}", deviceType, recentNum, dae.getMessage());
            responseData.setMessage(ResponseData.DEFAULT_ERROR_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_ERROR_CODE);
        }
        return responseData;
    }

    @Override
    public Object getDeviceListPage(String deviceType, Integer currentIndex, Integer pageSize, String devcode) {
        ResponseData responseData = new ResponseData();
        DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType));
        try {
            String tableName = deviceDataTableEnum.getTableName();
            String fields = DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName);
            Map<String, Object> page = new HashMap();
            page.put("total", deviceDataMapper.getDeviceDataTotal(tableName, devcode));
            List<Map<String, Object>> recentDataList = deviceDataMapper.getDeviceDataListPage(tableName, pageSize * (currentIndex - 1), fields, pageSize, devcode);
            page.put("rows", recentDataList);
            responseData.setData(page);
            responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE);
        } catch (DataAccessException dae) {
            log.error("设备数据查询异常,设备类型{},当前页{},页大小{},异常信息{}", deviceType, currentIndex, pageSize, dae.getMessage());
            responseData.setMessage(ResponseData.DEFAULT_ERROR_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_ERROR_CODE);
        }
        return responseData;
    }

    @Override
    public Object getLevel(String deviceType) {
        ResponseData responseData = new ResponseData();
        try {
            String highValue = deviceDataMapper.getLevelByType(deviceType);
            responseData.setData(highValue);
            responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE);
        } catch (DataAccessException dae) {
            log.error("设备数据查询异常,设备类型{},当前页{},页大小{},异常信息{}");
            responseData.setMessage(ResponseData.DEFAULT_ERROR_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_ERROR_CODE);
        }
        return responseData;
    }

    @Override
    @Transactional
    public void checkAndUpdateDeviceOnline() {
        //查询硫化氢设备
        List<String> devcodeList = deviceDataMapper.getDevcodeByType(devciceType);
        //统一查询所有设备的3天内数据的设备编号,然后设备编号转成map,进行
        List<String> dataList = deviceDataMapper.getRecentData(dataDay);
        List<String> dataSortDevcodeList = devcodeList;
        if (dataList != null) {
            Map<String, String> devOnlineMap = new HashMap<>();
            for (String devcodeData : dataList) {
                devOnlineMap.put(devcodeData, "");
            }
            dataSortDevcodeList = dataSortDevcodeList.stream().filter(
                    e -> !devOnlineMap.containsKey(e)).collect(Collectors.toList());
        }
        //统一更新
        if (CollectionUtils.isNotEmpty(dataSortDevcodeList)) {
            deviceDataMapper.updateOnlineByDevs(dataSortDevcodeList);
        }
    }

}