liuxiaolong
2019-11-07 2f3e3ec2c0cad87eab8a6d170caffc06a4e11c2d
src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java
@@ -32,6 +32,19 @@
     */
    public static volatile int totalExits = 0;
    /**
     * 统计设备可统计的最大数量
     */
    private static final int MAXCOUNT = 65535;
    /**
     * 统计设备单词可统计的最大数量
     */
    private static final int MAXCOUNTONCE = 100;
    /**
     * 计算的进入中间变量
     */
    private static volatile int tmpEnter = 0;
    private static volatile int tmpExit = 0;
    /**
     * 实时计算时作为计算的进校人数基准值
     */
    public static volatile int realtimeBaseEnters = 0;
@@ -53,9 +66,35 @@
            "30","35","40","45","50","55"};
    public static volatile  int countType = 0;
    private static Map<Integer,Integer> dayAllMap = new HashMap<>();
    private static Map<Integer,Integer> dayOutMap = new HashMap<>();
    private static Map<Integer,Integer> dayInMap = new HashMap<>();
    public static Map<Integer,Integer> dayAllMap = new HashMap<>();
    public static Map<Integer,Integer> dayOutMap = new HashMap<>();
    public static Map<Integer,Integer> dayInMap = new HashMap<>();
    public static int addEnter(int count) {
        int inCre = 0;
        if(tmpEnter <= count){
            inCre = count - tmpEnter;
        } else {
            if(tmpEnter >= (MAXCOUNT-MAXCOUNTONCE) && count <= MAXCOUNT) {
                inCre = count + MAXCOUNT - tmpEnter;
            }
        }
        tmpEnter = count;
        return inCre;
    }
    public static int addExit(int count) {
        int inCre = 0;
        if(tmpExit <= count){
            inCre = count - tmpExit;
        } else {
            if(tmpExit >= (MAXCOUNT-MAXCOUNTONCE) && count <= MAXCOUNT) {
                inCre = count + MAXCOUNT - tmpExit;
            }
        }
        tmpExit = count;
        return inCre;
    }
    /**
     * 统计参数初始化,用于统计设备重启情况(发送的第一条报文)
@@ -87,6 +126,15 @@
        Map<String,Object> map = new HashMap<>(16);
        // 获取一些初始值
        Config config = dao.getConfig();
        if(config==null) {
            config = new Config();
            config.setCor(1);
            config.setPassword("123456");
            config.setCountStartTime("06:00");
            config.setInit(1);
            config.setInitialPeople(60);
            config.setInitialTime("00:00");
        }
        // 初始人数值
        int initialPeople = (config.getInit()==1)?config.getInitialPeople():0;
        // 校正人数值
@@ -148,32 +196,33 @@
                people[i]=initialPeople;
                set = hourset; //这行代码很重要,表示重新统计
            }else {
//                System.out.println("第"+i+"个小时的数据:");
               // people[i] = dao.countInPeople(set-60,hourset+3599)- dao.countOutPeople(set-60,hourset+3599)+initialPeople+correctionPeople;
                //使用缓存dayAllMap
                people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
//                if(countType == 1){
//                    if(dayInMap.containsKey(i) && minute >1 && (i != minute-1)){
//                        people[i] = dayInMap.get(i);
//                    }else{
//                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
//                        dayInMap.put(i, people[i]);
//                    }
//                } else if(countType == 0) {
//                    if(dayAllMap.containsKey(i) && minute >1 && (i != minute-1)){
//                        people[i] = dayAllMap.get(i);
//                    }else{
//                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
//                        dayAllMap.put(i, people[i]);
//                    }
//                } else {
//                    if(dayOutMap.containsKey(i) && minute >1 && (i != minute-1)){
//                        people[i] = dayOutMap.get(i);
//                    }else{
//                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
//                        dayOutMap.put(i, people[i]);
//                    }
//                }
                //每次都实时计算,会重复计算历史数据
//                people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
                //采用缓存的方式,算过的就不再计算了
                if(countType == 1){
                    if(dayInMap.containsKey(i) && minute >1 && (i != minute-1)){
                        people[i] = dayInMap.get(i);
                    }else{
                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
                        dayInMap.put(i, people[i]);
                    }
                } else if(countType == 0) {
                    if(dayAllMap.containsKey(i) && minute >1 && (i != minute-1)){
                        people[i] = dayAllMap.get(i);
                    }else{
                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
                        dayAllMap.put(i, people[i]);
                    }
                } else {
                    if(dayOutMap.containsKey(i) && minute >1 && (i != minute-1)){
                        people[i] = dayOutMap.get(i);
                    }else{
                        people[i] = getDataValue(map,countType,set-60,hourset+1799,initialPeople,correctionPeople);
                        dayOutMap.put(i, people[i]);
                    }
                }
            }