package com.casic.service.impl; import com.alibaba.druid.util.StringUtils; import com.casic.dao.smartwell.SmartwellDataMapper; import com.casic.util.FormatUtil; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @AllArgsConstructor public class DeptTimeSpanBuilder { private final SmartwellDataMapper smartwellDataMapper; public List<Map<String, String>> deptTimeSpanProvider(String beginTime, String endTime) { Map<String, Map<String, String>> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); Map<String, Map<String, String>> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); Map<String, Map<String, String>> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); List<Map<String, String>> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); return deptTimeSpanMap; } private Map<String, Map<String, String>> getNormalDevice(String beginTime, String endTime) { List<Map<String, String>> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); Map<String, Map<String, String>> normalDeviceDeptMap = normalDeviceList.stream() .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) )); return normalDeviceDeptMap; } private Map<String, Map<String, String>> getAlarmDevice(String beginTime, String endTime) { List<Map<String, String>> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); Map<String, Map<String, String>> alarmDeviceDeptMap = alarmDeviceDeptList.stream() .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) )); return alarmDeviceDeptMap; } private Map<String, Map<String, String>> MergeDeviceSpan(Map<String, Map<String, String>> normalDeviceDeptMap, Map<String, Map<String, String>> alarmDeviceDeptMap) { for (Map.Entry<String, Map<String, String>> normalMap : normalDeviceDeptMap.entrySet()) { String mapKey = normalMap.getKey(); Map<String, String> normalmap = normalMap.getValue(); if (alarmDeviceDeptMap.containsKey(mapKey)) { Map<String, String> alarmMap = alarmDeviceDeptMap.get(mapKey); for (Map.Entry<String, String> alarmMapItem : alarmMap.entrySet()) { String deviceCode = alarmMapItem.getKey(); normalmap.put(deviceCode, alarmMapItem.getValue()); } } } return normalDeviceDeptMap; } private List<Map<String, String>> calculateDeptTime(Map<String, Map<String, String>> currentDeviceTimeMap) { List<Map<String, String>> deptNameList = smartwellDataMapper.getDeptNameList(); Map<String, String> deptNameMap = deptNameList.stream().collect( Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) ); List<Map<String, String>> deptTimeSpanList = new ArrayList<>(); for (Map.Entry<String, Map<String, String>> currentDeviceMap : currentDeviceTimeMap.entrySet()) { String deptid = currentDeviceMap.getKey(); Map<String, String> currentDeviceItemMap = currentDeviceMap.getValue(); Double timeSpan = 0.00; for (Map.Entry<String, String> timeMapItem : currentDeviceItemMap.entrySet()) { timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); } Map deptTimeSpanMap = new HashMap<>(); deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); deptTimeSpanMap.put("count", FormatUtil.DF2.format(timeSpan)); deptTimeSpanList.add(deptTimeSpanMap); } return deptTimeSpanList; } }