Newer
Older
zq-big-sreen / src / main / java / com / casic / service / impl / DeptTimeSpanBuilder.java
ChaiZhuang on 27 Oct 2022 4 KB 章丘大屏接口变更
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;
    }

}