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); } } }