14 changed files with 534 additions and 11 deletions
@ -0,0 +1,181 @@ |
|||
package com.dongjian.dashboard.back.controller; |
|||
|
|||
|
|||
import com.alibaba.excel.EasyExcel; |
|||
import com.alibaba.excel.ExcelWriter; |
|||
import com.alibaba.excel.write.metadata.WriteSheet; |
|||
import com.dongjian.dashboard.back.common.exception.BusinessException; |
|||
import com.dongjian.dashboard.back.common.response.PageInfo; |
|||
import com.dongjian.dashboard.back.common.response.PageResponse; |
|||
import com.dongjian.dashboard.back.common.response.ResponseCode; |
|||
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
|||
import com.dongjian.dashboard.back.configurator.aspect.OperationLog; |
|||
import com.dongjian.dashboard.back.configurator.interceptor.AccessRequired; |
|||
import com.dongjian.dashboard.back.dto.data.TrendLogDataSearchParam; |
|||
import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; |
|||
import com.dongjian.dashboard.back.easyexcel.ExportDeviceTrendLogDataDTO; |
|||
import com.dongjian.dashboard.back.easyexcel.LanguageDynamicHeaderAdapter; |
|||
import com.dongjian.dashboard.back.service.DeviceDataTrendLogService; |
|||
import com.dongjian.dashboard.back.service.common.CommonOpt; |
|||
import com.dongjian.dashboard.back.util.CommonUtil; |
|||
import com.dongjian.dashboard.back.vo.data.DeviceTrendLogData; |
|||
import com.dongjian.dashboard.back.vo.device.LineData; |
|||
import com.github.pagehelper.PageHelper; |
|||
import io.swagger.v3.oas.annotations.Hidden; |
|||
import io.swagger.v3.oas.annotations.Operation; |
|||
import io.swagger.v3.oas.annotations.Parameter; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import io.swagger.v3.oas.annotations.tags.Tag; |
|||
import jakarta.servlet.http.HttpServletResponse; |
|||
import org.apache.commons.collections4.CollectionUtils; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.beans.BeanUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.io.IOException; |
|||
import java.net.URLEncoder; |
|||
import java.nio.charset.StandardCharsets; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* |
|||
* @author jwy-style |
|||
* |
|||
*/ |
|||
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
|
|||
@AccessRequired //注解标识是否需要验证token
|
|||
@RequestMapping("/deviceTrendLog") //http请求路径映射
|
|||
@Tag(name = "TrendLog设备的相关接口",description = "TrendLog设备的相关接口") |
|||
@SuppressWarnings("unchecked") |
|||
public class DeviceDataTrendLogController { |
|||
|
|||
private static final Logger logger = LoggerFactory.getLogger(DeviceDataTrendLogController.class); |
|||
|
|||
@Value("${export.page.size}") |
|||
private Integer EXPORT_PAGE_SIZE; |
|||
|
|||
@Autowired |
|||
private DeviceDataTrendLogService deviceDataTrendLogService; |
|||
@Autowired |
|||
private CommonOpt commonOpt; |
|||
|
|||
@OperationLog(operation = "getTrendLogDataList", remark = "") |
|||
@Operation(summary = "获取TrendLog数据列表") |
|||
@RequestMapping(value = "/getDataList",method = RequestMethod.GET) |
|||
public PageResponse<PageInfo<DeviceTrendLogData>> getListPage( |
|||
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName, |
|||
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken, |
|||
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId, |
|||
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId, |
|||
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType, |
|||
TrendLogDataSearchParam pageSearchParam |
|||
) throws BusinessException { |
|||
|
|||
pageSearchParam.setUserId(UserId); |
|||
// pageSearchParam.setCompanyId(CompanyId);
|
|||
PageResponse<PageInfo<DeviceTrendLogData>> pageResponse = new PageResponse<PageInfo<DeviceTrendLogData>>(); |
|||
try{ |
|||
pageResponse.setData(deviceDataTrendLogService.getDataList(pageSearchParam, CompanyId, UserId, LanguageType)); |
|||
pageResponse.setCode(ResponseCode.SUCCESS); |
|||
pageResponse.setMsg("success"); |
|||
}catch (Exception e){ |
|||
logger.error("查询列表报错",e); |
|||
pageResponse.setCode(ResponseCode.SERVER_ERROR); |
|||
pageResponse.setMsg("service error"); |
|||
} |
|||
return pageResponse; |
|||
} |
|||
|
|||
|
|||
@OperationLog(operation = "exportTrendLogData", remark = "") |
|||
@Operation(summary = "导出TrendLog数据列表") |
|||
@GetMapping("/exportData") |
|||
public void exportDeviceTrendLog(HttpServletResponse response, |
|||
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName, |
|||
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken, |
|||
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId, |
|||
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId, |
|||
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType, |
|||
TrendLogDataSearchParam pageSearchParam |
|||
) throws IOException { |
|||
|
|||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
|||
response.setCharacterEncoding("utf-8"); |
|||
String fileName = URLEncoder.encode("TrendLog"+CommonUtil.generateExcelSuffix(), StandardCharsets.UTF_8).replace("+", "%20"); |
|||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); |
|||
|
|||
// ===== 固定导出分页大小=====
|
|||
pageSearchParam.setPageSize(EXPORT_PAGE_SIZE); |
|||
|
|||
// ===== 构建 Excel =====
|
|||
List<List<String>> head = LanguageDynamicHeaderAdapter.buildHead(ExportDeviceTrendLogDataDTO.class, LanguageType); |
|||
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(head).build(); |
|||
WriteSheet sheet = EasyExcel.writerSheet("sheet1").build(); |
|||
|
|||
// ===== 循环分页查询并写 Excel =====
|
|||
int pageNum = 1; |
|||
try { |
|||
while (true) { |
|||
pageSearchParam.setPageNum(pageNum); |
|||
|
|||
PageInfo<DeviceTrendLogData> pageData = deviceDataTrendLogService.getDataList(pageSearchParam, CompanyId, UserId, LanguageType); |
|||
|
|||
List<DeviceTrendLogData> list = pageData.getList(); |
|||
if (CollectionUtils.isEmpty(list)) { |
|||
break; // 没数据了,结束
|
|||
} |
|||
|
|||
for (DeviceTrendLogData item : list) { |
|||
ExportDeviceTrendLogDataDTO dto = new ExportDeviceTrendLogDataDTO(); |
|||
BeanUtils.copyProperties(item, dto); |
|||
// dto.setLastYearRatio(CommonUtil.ratio(item.getCumulativeValue(), item.getLastYearValue()));
|
|||
// dto.setYesterdayRatio(CommonUtil.ratio(item.getCumulativeValue(), item.getYesterdayValue()));
|
|||
dto.setStatus111(commonOpt.status111Mapping(item.getStatus111())); |
|||
excelWriter.write(List.of(dto), sheet); |
|||
|
|||
// 手动置空,提醒 GC 回收
|
|||
dto = null; |
|||
item = null; |
|||
} |
|||
|
|||
// 手动清理分页数据和缓存
|
|||
list.clear(); |
|||
PageHelper.clearPage(); |
|||
|
|||
// 最后一页判断(加这个更安全)
|
|||
if (pageNum >= pageData.getPages()) { |
|||
break; |
|||
} |
|||
|
|||
pageNum++; |
|||
} |
|||
} catch (Exception e) { |
|||
logger.error("export error", e); |
|||
throw e; |
|||
} finally { |
|||
excelWriter.finish(); |
|||
PageHelper.clearPage(); |
|||
} |
|||
} |
|||
|
|||
|
|||
@Hidden |
|||
@OperationLog(operation = "getLineData", remark = "") |
|||
@Operation(summary = "获取7日趋势数据") |
|||
@RequestMapping(value = "/getLineData",method = RequestMethod.POST) |
|||
public SimpleDataResponse<List<LineData>> getLineData( |
|||
@Parameter(name = "searchType", description = "1-按小时,2-全部数据", required = true) Integer searchType, |
|||
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName, |
|||
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken, |
|||
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId, |
|||
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) Long CompanyId, |
|||
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType, |
|||
@RequestBody LineDataSearchParams lineDataSearchParams |
|||
) throws BusinessException { |
|||
return deviceDataTrendLogService.getLineData(searchType, lineDataSearchParams, CompanyId, UserId, LanguageType); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
package com.dongjian.dashboard.back.dto.data; |
|||
|
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Data |
|||
public class TrendLogDataSearchParam extends DataSearchParam { |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,45 @@ |
|||
package com.dongjian.dashboard.back.easyexcel; |
|||
|
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class ExportDeviceTrendLogDataDTO { |
|||
|
|||
@ExcelProperty(value = {"上传时间", "Upload Time", "計測日時"}, converter = TimestampConverter.class) |
|||
private Long uploadTimestamp; |
|||
|
|||
@ExcelProperty({"设施名", "Facility Name", "施設名"}) |
|||
private String buildingName; |
|||
|
|||
@ExcelProperty({"监视点名称", "Monitoring Point Name", "監視点名称"}) |
|||
private String monitoringPointName; |
|||
|
|||
@ExcelProperty({"楼层名称", "Floor", "フロア"}) |
|||
private String floorName; |
|||
|
|||
@ExcelProperty({"监控点分类名称", "Category", "分類"}) |
|||
private String monitoringPointCategoryName; |
|||
|
|||
// @ExcelProperty({"网关信息名称", "Gateway Info Name", "接続先情報"})
|
|||
// private String gatewayInfoName;
|
|||
|
|||
// @ExcelProperty({"数据提供方名称", "Data Provider Name", "データソース"})
|
|||
// private String dataProviderName;
|
|||
|
|||
@ExcelProperty({"设备状态", "Device Status", "ステータスフラグ"}) |
|||
private String status111; |
|||
|
|||
@ExcelProperty({"积算值", "Accumulated Value", "積算値"}) |
|||
private String cumulativeValue; |
|||
|
|||
// @ExcelProperty({"前日比(%)", "Previous Day Ratio(%)", "前日比(%)"})
|
|||
// private String yesterdayRatio;
|
|||
//
|
|||
// @ExcelProperty({"前年比(%)", "Previous Year Ratio(%)", "前年比(%)"})
|
|||
// private String lastYearRatio;
|
|||
|
|||
@ExcelProperty({"单位", "Unit", "単位"}) |
|||
private String unit; |
|||
} |
|||
|
|||
@ -0,0 +1,20 @@ |
|||
package com.dongjian.dashboard.back.vo.data; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Data |
|||
public class DeviceTrendLogData extends BaseData{ |
|||
|
|||
@Schema(description = "cumulative value", example = "12.557") |
|||
private String cumulativeValue; |
|||
|
|||
@Schema(description = "raw data", example = "", hidden = true) |
|||
private String rawData; |
|||
|
|||
@Schema(description = "device status", example = "障害") |
|||
private String status111; |
|||
|
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
package com.dongjian.dashboard.back.service; |
|||
|
|||
import com.dongjian.dashboard.back.common.response.PageInfo; |
|||
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
|||
import com.dongjian.dashboard.back.dto.data.TrendLogDataSearchParam; |
|||
import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; |
|||
import com.dongjian.dashboard.back.vo.data.DeviceTrendLogData; |
|||
import com.dongjian.dashboard.back.vo.device.LineData; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* Service. |
|||
*/ |
|||
public interface DeviceDataTrendLogService { |
|||
|
|||
PageInfo<DeviceTrendLogData> getDataList(TrendLogDataSearchParam pageSearchParam, Long companyId, Long userId, Integer languageType); |
|||
|
|||
List<DeviceTrendLogData> handleDeviceAccumulateData(TrendLogDataSearchParam pageSearchParam); |
|||
|
|||
SimpleDataResponse<List<LineData>> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType); |
|||
} |
|||
@ -0,0 +1,199 @@ |
|||
package com.dongjian.dashboard.back.service.impl; |
|||
|
|||
import com.dongjian.dashboard.back.common.Constants; |
|||
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; |
|||
import com.dongjian.dashboard.back.common.response.PageInfo; |
|||
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
|||
import com.dongjian.dashboard.back.dao.aurora.DashboardRecordAccumulateMapperExt; |
|||
import com.dongjian.dashboard.back.dao.ex.DeviceInfoMapperExt; |
|||
import com.dongjian.dashboard.back.dao.ex.DeviceRawdataRealtimeMapperExt; |
|||
import com.dongjian.dashboard.back.dao.ex.FavoritedDeviceMapperExt; |
|||
import com.dongjian.dashboard.back.dto.data.TrendLogDataSearchParam; |
|||
import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; |
|||
import com.dongjian.dashboard.back.model.DeviceRawdataRealtime; |
|||
import com.dongjian.dashboard.back.service.DeviceDataTrendLogService; |
|||
import com.dongjian.dashboard.back.service.common.CommonOpt; |
|||
import com.dongjian.dashboard.back.util.CommonUtil; |
|||
import com.dongjian.dashboard.back.util.DateUtil; |
|||
import com.dongjian.dashboard.back.vo.data.DeviceTrendLogData; |
|||
import com.dongjian.dashboard.back.vo.device.DeviceIncrement; |
|||
import com.dongjian.dashboard.back.vo.device.LineData; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.github.pagehelper.PageHelper; |
|||
import org.apache.commons.collections.CollectionUtils; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.net.URLDecoder; |
|||
import java.nio.charset.StandardCharsets; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.util.*; |
|||
import java.util.function.Function; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Service |
|||
public class DeviceDataTrendLogServiceImpl implements DeviceDataTrendLogService { |
|||
|
|||
private static final Logger logger = LoggerFactory.getLogger(DeviceDataTrendLogServiceImpl.class); |
|||
|
|||
private static final ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
@Autowired |
|||
private DeviceInfoMapperExt deviceInfoMapperExt; |
|||
@Autowired |
|||
private FavoritedDeviceMapperExt favoritedDeviceMapperExt; |
|||
@Autowired |
|||
private DashboardRecordAccumulateMapperExt dashboardRecordAccumulateMapperExt; |
|||
@Autowired |
|||
private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt; |
|||
@Autowired |
|||
private MsgLanguageChange msgLanguageChange; |
|||
@Autowired |
|||
private CommonOpt commonOpt; |
|||
|
|||
|
|||
|
|||
|
|||
@Override |
|||
public PageInfo<DeviceTrendLogData> getDataList(TrendLogDataSearchParam pageSearchParam, Long companyId, Long userId, Integer languageType) { |
|||
// if (null == pageSearchParam.getBuildingId()) {
|
|||
// return new PageInfo<>(new ArrayList<>());
|
|||
// }
|
|||
|
|||
//list防${}注入
|
|||
if (StringUtils.isBlank(pageSearchParam.getCompanyIds())) { |
|||
pageSearchParam.setCompanyIdList(List.of(companyId)); |
|||
} else { |
|||
pageSearchParam.setCompanyIdList(commonOpt.filterCompanyIds(companyId, pageSearchParam.getCompanyIds())); |
|||
} |
|||
|
|||
PageHelper.startPage(pageSearchParam.getPageNum() == null ? 1 : pageSearchParam.getPageNum(), pageSearchParam.getPageSize() == null ? 20 : pageSearchParam.getPageSize()); |
|||
return new PageInfo<>(handleDeviceAccumulateData(pageSearchParam)); |
|||
} |
|||
|
|||
public List<DeviceTrendLogData> handleDeviceAccumulateData(TrendLogDataSearchParam pageSearchParam) { |
|||
List<DeviceTrendLogData> resultList; |
|||
|
|||
if (StringUtils.isNotBlank(pageSearchParam.getKeyword())) { |
|||
try { |
|||
pageSearchParam.setKeyword(URLDecoder.decode(pageSearchParam.getKeyword(), StandardCharsets.UTF_8)); |
|||
} catch (Exception e) { |
|||
logger.error("URLDecoder.decode error", e); |
|||
} |
|||
} |
|||
|
|||
pageSearchParam.setCategoryIdList(Constants.CATEGORY_MAP.get(Constants.CATEGORY_TRENDLOG)); |
|||
if (null != pageSearchParam.getDeviceGroupId()){ |
|||
resultList = deviceInfoMapperExt.getDevice4TrendLogDataByGroup(pageSearchParam); |
|||
} else { |
|||
resultList = deviceInfoMapperExt.getDevice4TrendLogData(pageSearchParam); |
|||
} |
|||
|
|||
if (CollectionUtils.isNotEmpty(resultList)) { |
|||
// 查询 favorited_device 表中所有设备的 device_id,转为 Set 提高 contains 性能
|
|||
Set<String> favoritedDeviceIds = new HashSet<>(favoritedDeviceMapperExt.getFavoritedDeviceIds()); |
|||
|
|||
List<String> deviceIds = resultList.stream() |
|||
.map(DeviceTrendLogData::getDeviceId) |
|||
.toList(); |
|||
|
|||
// 查询 111状态 数据
|
|||
Map<String, String> deviceId85To111Map = commonOpt.buildDeviceId85To111Map(deviceIds); |
|||
List<String> deviceIdList_111 = deviceId85To111Map.values() |
|||
.stream() |
|||
.toList(); |
|||
Map<String, DeviceRawdataRealtime> realtime111Map = commonOpt.queryRealtimeMap(deviceIdList_111); |
|||
// Map<String, DeviceInfo> deviceInfo111Map = commonOpt.queryDeviceInfoMap(deviceIdList_111);
|
|||
|
|||
// 查询S备用设备的数据,因为先看备用S设备,有S的话优先用这个
|
|||
Map<String, String> deviceId85ToSMap = commonOpt.buildDeviceId85ToSMap(deviceIds); |
|||
List<String> deviceIdList_S = deviceId85ToSMap.values() |
|||
.stream() |
|||
.toList(); |
|||
Map<String, DeviceRawdataRealtime> realtimeSMap = commonOpt.queryRealtimeMap(deviceIdList_S); |
|||
|
|||
// 筛选出S后缀里数据更新的设备,用于查今天的积算值
|
|||
List<String> todayDeviceIds = new ArrayList<>(deviceIds); |
|||
for (DeviceTrendLogData data : resultList) { |
|||
String rawDeviceId = data.getDeviceId(); |
|||
String sDeviceId = deviceId85ToSMap.get(rawDeviceId.toLowerCase()); |
|||
|
|||
DeviceRawdataRealtime sRealtime = realtimeSMap.get(sDeviceId); |
|||
if (sRealtime == null || sRealtime.getReceiveTs() == null) { |
|||
continue; |
|||
} |
|||
//sRealtime存在且有receive_ts时
|
|||
Long uploadTs = data.getUploadTimestamp(); |
|||
if (uploadTs == null || sRealtime.getReceiveTs() > uploadTs) { |
|||
todayDeviceIds.remove(rawDeviceId); |
|||
todayDeviceIds.add(sDeviceId); |
|||
} |
|||
} |
|||
|
|||
LocalDateTime now = LocalDateTime.now(Constants.ZONE_TOKYO); |
|||
LocalDate today = now.toLocalDate(); |
|||
LocalDate yesterday = today.minusDays(1); |
|||
LocalDate lastYear = DateUtil.getLastYearSameIsoWeekDay(today); |
|||
|
|||
int targetSeconds = now.toLocalTime().toSecondOfDay(); |
|||
|
|||
// 批量查询增量数据并构建 Map
|
|||
Map<String, DeviceIncrement> todayMap = dashboardRecordAccumulateMapperExt.selectTodayIncrement(todayDeviceIds, today.getYear(), today.getMonthValue(), today.getDayOfMonth()) |
|||
.stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); |
|||
|
|||
// List<RecordAccumulateDto> yesterdayRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth());
|
|||
// Map<String, DeviceIncrement> yesterdayMap = commonOpt.toDeviceIncrementMap(yesterdayRecords, targetSeconds, "yesterday");
|
|||
//
|
|||
// List<RecordAccumulateDto> lastYearRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth());
|
|||
// Map<String, DeviceIncrement> lastYearMap = commonOpt.toDeviceIncrementMap(lastYearRecords, targetSeconds, "lastYear");
|
|||
|
|||
|
|||
resultList.forEach(data -> { |
|||
String deviceId = data.getDeviceId().toLowerCase(); |
|||
String sDeviceId = deviceId85ToSMap.get(deviceId); |
|||
|
|||
//*** 填充今天/昨天/去年值 **//
|
|||
// 今天值,要先看备用S设备,有S的话优先用这个
|
|||
data.setCumulativeValue(CommonUtil.formatDecimal( |
|||
getIncrement(todayDeviceIds.contains(sDeviceId) ? todayMap.get(sDeviceId) : todayMap.get(deviceId), DeviceIncrement::getTodayIncrement), |
|||
data.getDashboardDecimalPlaces()) |
|||
); |
|||
// data.setYesterdayValue(CommonUtil.formatDecimal(getIncrement(yesterdayMap.get(deviceId), DeviceIncrement::getYesterdayIncrement), data.getDashboardDecimalPlaces()));
|
|||
// data.setLastYearValue(CommonUtil.formatDecimal(getIncrement(lastYearMap.get(deviceId), DeviceIncrement::getLastYearIncrement), data.getDashboardDecimalPlaces()));
|
|||
|
|||
//处理111状态映射
|
|||
// data.setStatus111(commonOpt.buildStatus111(deviceId, deviceId85To111Map, deviceInfo111Map, realtime111Map, objectMapper));
|
|||
data.setStatus111(commonOpt.buildRawFirstValue(deviceId, deviceId85To111Map, realtime111Map, objectMapper)); |
|||
|
|||
// favorited 判断
|
|||
data.setCollected(favoritedDeviceIds.contains(deviceId) ? 1 : 0); |
|||
}); |
|||
} |
|||
|
|||
|
|||
return resultList; |
|||
} |
|||
|
|||
//统一处理 null 判断和转字符串
|
|||
private String getIncrement(DeviceIncrement inc, Function<DeviceIncrement, Number> getter) { |
|||
if (inc == null || getter.apply(inc) == null) return null; |
|||
return getter.apply(inc).toString(); |
|||
} |
|||
|
|||
@Override |
|||
public SimpleDataResponse<List<LineData>> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, |
|||
Long companyId, Long userId, Integer languageType) { |
|||
if (null == searchType) { |
|||
searchType = 2;//默认全部数据
|
|||
} |
|||
List<LineData> lineDataList = commonOpt.getAccumulateLineData(companyId, searchType, lineDataSearchParams); |
|||
return SimpleDataResponse.success(lineDataList); |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
Loading…
Reference in new issue