xufenglei
2018-02-05 2c90ca6754397903904ca8efabb4c9c93889b970
报表 相关
4 files renamed
3 files modified
257 ■■■■ changed files
src/main/java/com/moral/controller/ReportController.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryMinutelyService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/AlarmUserServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java 221 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMinutelyMapper.xml 6 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ReportController.java
@@ -18,7 +18,7 @@
import org.springframework.web.bind.annotation.RestController;
import com.moral.common.bean.ResultBean;
import com.moral.service.DataService;
import com.moral.service.HistoryMinutelyService;
@RestController
@RequestMapping("report")
@@ -26,19 +26,19 @@
public class ReportController {
    @Resource
    private DataService dataService;
    private HistoryMinutelyService historyMinutelyService;
    
    @GetMapping("compare")
    public ResultBean<Map<String, List<Object>>> getCompareReport(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        Map<String, List<Object>> demo = dataService.getCompareReport(parameters);
        Map<String, List<Object>> demo = historyMinutelyService.getCompareReport(parameters);
        return new ResultBean<Map<String,List<Object>>>(demo);
    }
    @GetMapping("excel")
    public ResultBean<Boolean> getExcelReport(HttpServletRequest request,HttpServletResponse response) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> list = dataService.getMonitorPointOrDeviceAvgData4Excel(parameters);
        List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData4Excel(parameters);
        String[][] exportColumn =  new String[2][];
        exportColumn[0] = new String[] { "时间", "20", "time" };
        if (parameters.containsKey("sensors")) {
src/main/java/com/moral/controller/ScreenController.java
@@ -20,6 +20,7 @@
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSON;
@@ -28,7 +29,7 @@
import com.moral.common.bean.ResultBean;
import com.moral.common.util.ValidateUtil;
import com.moral.service.AccountService;
import com.moral.service.DataService;
import com.moral.service.HistoryMinutelyService;
import com.moral.service.DeviceService;
import com.moral.service.HistoryService;
import com.moral.service.MachineActivateService;
@@ -38,8 +39,8 @@
 * The Class ScreenController.大屏接口
 */
@RestController
@RequestMapping("screen")
@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("/screen")
//@CrossOrigin(origins = "*", maxAge = 3600)
public class ScreenController {
    /** The screen service. */
@@ -55,7 +56,7 @@
    private DeviceService deviceService;
    @Resource
    private DataService dataService;
    private HistoryMinutelyService historyMinutelyService;
    @Resource
    private MachineActivateService machineActivateService;
@@ -99,7 +100,8 @@
     *            the request
     * @return the equipment states
     */
    @GetMapping("equipment-state")
    @GetMapping("/equipment-state")
    @PreAuthorize("hasAnyRole('USER', 'ADMIN')")
    public Map<String, Object> getDeviceStatesByAccount(HttpServletRequest request) {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        return deviceService.getDeviceStatesByAccount(parameters);
@@ -158,7 +160,7 @@
    @GetMapping("day-aqi")
    public Map<String, Object> getDayAQIByDevice(HttpServletRequest request) {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        return dataService.getDayAQIByDevice(parameters);
        return historyMinutelyService.getDayAQIByDevice(parameters);
    }
    /**
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
File was renamed from src/main/java/com/moral/mapper/DataMapper.java
@@ -3,7 +3,7 @@
import java.util.List;
import java.util.Map;
public interface DataMapper{
public interface HistoryMinutelyMapper{
    Map<String, Double> getDayAQIByDevice(Map<String, Object> parameters);
src/main/java/com/moral/service/HistoryMinutelyService.java
File was renamed from src/main/java/com/moral/service/DataService.java
@@ -3,7 +3,7 @@
import java.util.List;
import java.util.Map;
public interface DataService {
public interface HistoryMinutelyService {
    Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters);
    
src/main/java/com/moral/service/impl/AlarmUserServiceImpl.java
@@ -35,8 +35,8 @@
    public PageBean<AlarmUser> getalarmUserList(Map<String, Object> parameters) {
        Example example = new Example(AlarmUser.class);
        Criteria criteria = example.createCriteria();
        if (parameters.containsKey("alarmUserName")) {
            criteria.andLike("alarmUserName", "%" + (String) parameters.get("alarmUserName") + "%");
        if (parameters.containsKey("name")) {
            criteria.andLike("name", "%" + (String) parameters.get("name") + "%");
        }
        if (parameters.containsKey("mobile")) {
            criteria.andLike("mobile", "%" + (String) parameters.get("mobile") + "%");
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
File was renamed from src/main/java/com/moral/service/impl/DataServiceImpl.java
@@ -15,8 +15,8 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
@@ -33,16 +33,16 @@
import com.moral.common.util.ResourceUtil;
import com.moral.common.util.ValidateUtil;
import com.moral.entity.Device;
import com.moral.mapper.DataMapper;
import com.moral.mapper.HistoryMinutelyMapper;
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.SensorMapper;
import com.moral.service.DataService;
import com.moral.service.HistoryMinutelyService;
@Service
public class DataServiceImpl implements DataService {
public class HistoryMinutelyServiceImpl implements HistoryMinutelyService {
    @Resource
    private DataMapper dataMapper;
    private HistoryMinutelyMapper historyMinutelyMapper;
    @Resource
    private DeviceMapper deviceMapper;
@@ -60,7 +60,7 @@
        parameters.put("start", truncate(addDays(date, -1), Calendar.DATE));
        // 今日00:00:00
        parameters.put("end", truncate(date, Calendar.DATE));
        Map<String, Double> average = dataMapper.getDayAQIByDevice(parameters);
        Map<String, Double> average = historyMinutelyMapper.getDayAQIByDevice(parameters);
        return getAQIByDataMap(average);
    }
@@ -122,100 +122,110 @@
            resultMap.put("c", null);
            return resultMap;
        }
        String type = (String) parameters.get("type");
        String time = (String) parameters.get("time");
        String format = (String) parameters.get("format");
        Date start = DateUtils.parseDate(time, format), end = null ;
        if (parameters.containsKey("timeb")) {
            end = DateUtils.parseDate((String)parameters.get("timeb"), format);
        } else {
            switch (type) {
            case "year":
                end = DateUtils.addYears(start, 1);
                break;
            case "month":
                end = DateUtils.addMonths(start, 1);
                break;
            case "day":
                end = DateUtils.addDays(start, 1);
                break;
            case "hour":
                end = DateUtils.addHours(start, 1);
                break;
            }
        }
        parameters.put("start", start);
        parameters.put("end", end);
        String sensorKey = (String) parameters.get("sensorKey");
        String sensorKeyColumn = "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey;
        parameters.put("sensorKeyColumn", sensorKeyColumn);
        List<Map<String, Object>> resultList = getMonitorPointOrDeviceAvgData4Excel(parameters);
//        String type = (String) parameters.get("type");
//        String time = (String) parameters.get("time");
//        String format = (String) parameters.get("format");
//        Date start = DateUtils.parseDate(time, format), end = null ;
//        if (parameters.containsKey("timeb")) {
//            end = DateUtils.parseDate((String)parameters.get("timeb"), format);
//        } else {
//            switch (type) {
//            case "year":
//                end = DateUtils.addYears(start, 1);
//                break;
//            case "month":
//                end = DateUtils.addMonths(start, 1);
//                break;
//            case "day":
//                end = DateUtils.addDays(start, 1);
//                break;
//            case "hour":
//                end = DateUtils.addHours(start, 1);
//                break;
//            }
//
//        }
//        parameters.put("start", start);
//        parameters.put("end", end);
//
//        String sensorKey = (String) parameters.get("sensorKey");
//        String sensorKeyColumn = "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey;
//        parameters.put("sensorKeyColumn", sensorKeyColumn);
//        List<Object> timeList = new ArrayList<Object>();
//        List<Object> dataList = new ArrayList<Object>();
//
//        if (!parameters.containsKey("mac")) {
//            Integer monitorPointId = Integer.valueOf((String) parameters.get("monitorPoint"));
//            List<Map<String, Object>> deviceVersions = deviceMapper.getDeviceVersionIdByMonitorPoint(monitorPointId);
//            ExecutorService threadPool = Executors.newCachedThreadPool();
//            CompletionService<List<Map<String, Object>>> cs = new ExecutorCompletionService<List<Map<String, Object>>>(threadPool);
//            //List<Future<Long>> list = new ArrayList<Future<Long>>();
//            List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
//            for (Map<String, Object> map : deviceVersions) {
//                cs.submit(new Callable<List<Map<String, Object>>>() {
//                    @Override
//                    public List<Map<String, Object>> call() throws Exception {
//                        Integer deviceVersionId = (Integer) map.get("deviceVersionId");
//                        List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId);
//                        parameters.put("macs", macs);
//                        return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
//                    }
//                });
//            }
//            //Future<List<Map<String, Object>>> take = cs.take();
//            for (Map<String, Object> map : deviceVersions) {
//                list.addAll(cs.take().get());
//            }
//            Map<String, Map<String, Number>> result = new LinkedHashMap<String, Map<String, Number>>();
//            for (Map<String, Object> map : list) {
//                time = (String) map.get("time");
//                if (map.containsKey(sensorKey)) {
//                    Double data = (Double) map.get(sensorKey);
//                    Map<String, Number> number;
//                    Double sum;
//                    Integer count;
//                    if (result.containsKey(time)) {
//                        number = result.get(time);
//                        count = 1 + (Integer) number.get("count");
//                        sum = data + (Double) number.get("sum");
//                    } else {
//                        number = new HashMap<String, Number>();
//                        count = 1;
//                        sum = data;
//                    }
//                    number.put("count", count);
//                    number.put("sum", sum);
//                    number.put("avg", sum / count);
//                    result.put(time, number);
//                }
//            }
//            Iterator<Entry<String, Map<String, Number>>> iterator= result.entrySet().iterator();
//            while(iterator.hasNext()){
//                Entry<String, Map<String, Number>> entry = iterator.next();
//                String key = entry.getKey();
//                timeList.add(key.substring(key.length() - 2));
//                dataList.add(entry.getValue().get("avg"));
//            }
//
//        } else {
//            List<Map<String, Object>> demo1 = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
//            for (Map<String, Object> map : demo1) {
//                time = map.get("time").toString();
//                time =time.substring(time.length() - 2);
//                timeList.add(time);
//                dataList.add(map.get(sensorKey));
//            }
//        }
        List<Object> timeList = new ArrayList<Object>();
        List<Object> dataList = new ArrayList<Object>();
        if (!parameters.containsKey("mac")) {
            Integer monitorPointId = Integer.valueOf((String) parameters.get("monitorPoint"));
            List<Map<String, Object>> deviceVersions = deviceMapper.getDeviceVersionIdByMonitorPoint(monitorPointId);
            ExecutorService threadPool = Executors.newCachedThreadPool();
            CompletionService<List<Map<String, Object>>> cs = new ExecutorCompletionService<List<Map<String, Object>>>(threadPool);
            //List<Future<Long>> list = new ArrayList<Future<Long>>();
            List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
            for (Map<String, Object> map : deviceVersions) {
                cs.submit(new Callable<List<Map<String, Object>>>() {
                    @Override
                    public List<Map<String, Object>> call() throws Exception {
                        Integer deviceVersionId = (Integer) map.get("deviceVersionId");
                        List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId);
                        parameters.put("macs", macs);
                        return dataMapper.getMonitorPointOrDeviceAvgData(parameters);
                    }
                });
            }
            //Future<List<Map<String, Object>>> take = cs.take();
            for (Map<String, Object> map : deviceVersions) {
                list.addAll(cs.take().get());
            }
            Map<String, Map<String, Number>> result = new LinkedHashMap<String, Map<String, Number>>();
            for (Map<String, Object> map : list) {
                time = (String) map.get("time");
                if (map.containsKey(sensorKey)) {
                    Double data = (Double) map.get(sensorKey);
                    Map<String, Number> number;
                    Double sum;
                    Integer count;
                    if (result.containsKey(time)) {
                        number = result.get(time);
                        count = 1 + (Integer) number.get("count");
                        sum = data + (Double) number.get("sum");
                    } else {
                        number = new HashMap<String, Number>();
                        count = 1;
                        sum = data;
                    }
                    number.put("count", count);
                    number.put("sum", sum);
                    number.put("avg", sum / count);
                    result.put(time, number);
                }
            }
            Iterator<Entry<String, Map<String, Number>>> iterator= result.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String, Map<String, Number>> entry = iterator.next();
                String key = entry.getKey();
                timeList.add(key.substring(key.length() - 2));
                dataList.add(entry.getValue().get("avg"));
            }
        } else {
            List<Map<String, Object>> demo1 = dataMapper.getMonitorPointOrDeviceAvgData(parameters);
            for (Map<String, Object> map : demo1) {
                time = map.get("time").toString();
                time =time.substring(time.length() - 2);
                timeList.add(time);
                dataList.add(map.get(sensorKey));
            }
        String sensorKey = (String) parameters.get("sensorKey");
        for (Map<String, Object> map : resultList) {
            String time = map.get("time").toString();
            time =time.substring(time.length() - 2);
            timeList.add(time);
            dataList.add(map.get(sensorKey));
        }
        String part = (String) parameters.get("part");
        resultMap.put("time" + part, timeList);
@@ -238,7 +248,9 @@
            parametersB.put("part", "B");
            parametersB.put("time", parametersB.get("timeb"));
            parametersB.put("monitorPoint", parametersB.get("monitorPointb"));
            parametersB.put("mac", parametersB.get("macb"));
            if (parameters.containsKey("macb")) {
                parametersB.put("mac", parametersB.get("macb"));
            }
            parametersB.remove("timeb");
        }
        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
@@ -358,10 +370,13 @@
                            parameters.put("sensors", sensorKeys);
                        }
                        List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId);
                        parameter.put("macs", macs);
                        return dataMapper.getMonitorPointOrDeviceAvgData(parameter);
                        if (ObjectUtils.isEmpty(macs) || macs.contains("null") ) {
                            return new ArrayList<Map<String,Object>>();
                        }else {
                            parameter.put("macs", macs);
                            return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameter);
                        }
                    }
                });
            }
            for (Map<String, Object> map : deviceVersions) {
@@ -417,7 +432,7 @@
                parameters.put("sensors", sensorKeys);
                
            }
            resul = dataMapper.getMonitorPointOrDeviceAvgData(parameters);
            resul = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
        }
        return resul;
    }
src/main/resources/mapper/HistoryMinutelyMapper.xml
File was renamed from src/main/resources/mapper/DataMapper.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.moral.mapper.DataMapper">
<mapper namespace="com.moral.mapper.HistoryMinutelyMapper">
    <select id="getDayAQIByDevice" resultType="map">
        SELECT
@@ -11,7 +11,7 @@
            AVG(json -> '$.e15[0]') e15,
            AVG(json -> '$.e16[0]') e16
        FROM
            data
            history_minutely
        WHERE
            mac = #{mac}
        AND time >= #{start}
@@ -23,7 +23,7 @@
            DATE_FORMAT(time, #{typeFormat}) time,
            ${sensorKeyColumn}
        FROM
            data h
            history_minutely h
        WHERE
            h.time >= #{start}
        AND h.time <![CDATA[<]]> #{end}