5a8bbcb100f37b8e17d6fda0d851d96dbace46e4..2f3e3ec2c0cad87eab8a6d170caffc06a4e11c2d
2019-11-07 liuxiaolong
set getData 1 sec and add day task
2f3e3e 对比 | 目录
2019-11-07 liuxiaolong
add taskInit
01884b 对比 | 目录
3个文件已添加
4个文件已修改
158 ■■■■ 已修改文件
src/main/java/com/cloud/count/listener/CountInitTask.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/listener/CountListener.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/listener/CountTaskListener.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/listener/CountThread.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/listener/TimerManager.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/cloud/count/listener/CountInitTask.java
New file
@@ -0,0 +1,17 @@
package com.cloud.count.listener;
import com.cloud.count.service.serviceImpl.CountServiceImpl;
import java.util.HashMap;
import java.util.TimerTask;
public class CountInitTask extends TimerTask {
    @Override
    public void run() {
        CountServiceImpl.baseEnters = CountServiceImpl.totalEnters;
        CountServiceImpl.baseExits = CountServiceImpl.totalExits;
        CountServiceImpl.dayAllMap = new HashMap<>();
        CountServiceImpl.dayInMap = new HashMap<>();
        CountServiceImpl.dayOutMap = new HashMap<>();
    }
}
src/main/java/com/cloud/count/listener/CountListener.java
@@ -25,6 +25,10 @@
public class CountListener implements ApplicationListener<ContextRefreshedEvent> {
    static ServerSocket server;
    static Integer port = 2010;
    static boolean isServerReboot = false;
    @Autowired
    private CountDao dao;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
@@ -32,7 +36,35 @@
        if(contextRefreshedEvent.getApplicationContext().getParent() !=null){
            return;
        }
        op: if(!isServerReboot){
            isServerReboot = true;
            CountState state = dao.getCountState();//恢复统计状态
            Date nowDate = new Date();
            Date BaseDate = new Date(state.getBaseTime()*1000L);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            if(!sdf.format(nowDate).equals(sdf.format(BaseDate))){//历史数据不等于当天
//                CountServiceImpl.baseEnters  = people.getEnters();
//                CountServiceImpl.baseExits = people.getExits();
//                CountServiceImpl.realtimeBaseEnters = people.getEnters();
//                CountServiceImpl.realtimebBaseExits =  people.getExits();
//                CountServiceImpl.errorCount = 0;
                People initPeople = new People();
                initPeople.setEnters(0);
                initPeople.setExits(0);
                CountServiceImpl.initCountArgs(initPeople);
                CountServiceImpl.errorCount = 0;
                break op;
            }
            //还原状态
            CountServiceImpl.baseEnters  = state.getBaseEnters();
            CountServiceImpl.baseExits = state.getBaseExits();
            CountServiceImpl.totalEnters = state.getTotalEnters();
            CountServiceImpl.totalExits = state.getTotalExits();
            CountServiceImpl.realtimeBaseEnters = state.getRealtimeBaseEnters();
            CountServiceImpl.realtimebBaseExits = state.getRealtimeBaseExits();
            CountServiceImpl.errorCount = state.getErrorCount();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
src/main/java/com/cloud/count/listener/CountTaskListener.java
New file
@@ -0,0 +1,18 @@
package com.cloud.count.listener;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@Component
public class CountTaskListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        new TimerManager();
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }
}
src/main/java/com/cloud/count/listener/CountThread.java
@@ -14,7 +14,7 @@
public class CountThread implements Runnable {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    static boolean isServerReboot = false;
    private CountDao dao;
@@ -36,15 +36,16 @@
        try{
            iReader = new BufferedReader(new InputStreamReader(client.getInputStream(), encoding));
            iWriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), encoding));
            String msgStr = "";
            String xmlStr = "";
            People people = null;
            while (true) {
                String str = iReader.readLine();
                msgStr = iReader.readLine();
                sendAck(iWriter);
                String xmlStr = XmlUtil.toXmlStr(str);
                xmlStr = XmlUtil.toXmlStr(msgStr);
                // 如果存在TotalEnters。则证明返回的是实时数据的xml
                People people = null;
                if(xmlStr.indexOf("TotalEnters")>-1){
                    people = XmlUtil.realTimeXmlToPeople(xmlStr);
                    int inCreEnter = CountServiceImpl.addEnter(people.getEnters());//进入人数增量
@@ -55,36 +56,12 @@
                    people.setEnters(CountServiceImpl.totalEnters);//将累加后的数量存到数据库中
                    people.setExits(CountServiceImpl.totalExits);
                    boolean resultB = dao.savePeople(people);
                    System.out.println("totalEnters:"+CountServiceImpl.totalEnters);
                    //总进入数量或者总出去数量,不一定哪一个先到2字节int的上限65535
//                                if( CountServiceImpl.totalEnters < CountServiceImpl.baseEnters){
//                                    //表示统计设备重新启动了,统计参数归零
//                                    CountServiceImpl.initCountArgs(people);
//                                }
                    op: if(!isServerReboot){
                        isServerReboot = true;
                        CountState state = dao.getCountState();//恢复统计状态
                        Date nowDate = new Date();
                        Date BaseDate = new Date(state.getBaseTime()*1000L);
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        if(!sdf.format(nowDate).equals(sdf.format(BaseDate))){//历史数据不等于当天
                            CountServiceImpl.baseEnters  = people.getEnters();
                            CountServiceImpl.baseExits = people.getExits();
                            CountServiceImpl.realtimeBaseEnters = people.getEnters();
                            CountServiceImpl.realtimebBaseExits =  people.getExits();
                            CountServiceImpl.errorCount = 0;
                            break op;
                        }
                        //还原状态
                        CountServiceImpl.baseEnters  = state.getBaseEnters();
                        CountServiceImpl.baseExits = state.getBaseExits();
                        CountServiceImpl.totalEnters = state.getTotalEnters();
                        CountServiceImpl.totalExits = state.getTotalExits();
                        CountServiceImpl.realtimeBaseEnters = state.getRealtimeBaseEnters();
                        CountServiceImpl.realtimebBaseExits = state.getRealtimeBaseExits();
                        CountServiceImpl.errorCount = state.getErrorCount();
                    }
                    //总进入人数小于总出去的人数,表示统计设备在放学时间(出去的人数大于进入的人数)重启了
                    if(CountServiceImpl.totalEnters < CountServiceImpl.totalExits){
@@ -112,8 +89,6 @@
                }
            }
        }catch (IOException ex){
        }catch (Exception e){
            System.out.println("exception:"+e.getMessage());
        }
@@ -135,13 +110,13 @@
    public static void sendAck(BufferedWriter iWriter) {
        String statusLine = "HTTP/1.0 200 OK"+CRLF;
        String contentTypeLine = "Content-type: text/html"+CRLF ;
        String connectionClose = "Connection: Keep-Alive"+CRLF ;
        String contentLengthLine = "Content-Length: 0"+CRLF +CRLF;;
        String connectionAlive = "Connection: Keep-Alive"+CRLF ;
        String contentLengthLine = "Content-Length: 0"+CRLF +CRLF;
        try {
            iWriter.write(statusLine);
            iWriter.write(contentTypeLine);
            iWriter.write(connectionClose);
            iWriter.write(connectionAlive);
            iWriter.write(contentLengthLine);
            iWriter.flush();
        } catch (IOException ex) {
src/main/java/com/cloud/count/listener/TimerManager.java
New file
@@ -0,0 +1,38 @@
package com.cloud.count.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerManager {
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
    public TimerManager() {
        Calendar calendar = Calendar.getInstance();
        /*** 定制每日6:00执行方法 ***/
        calendar.set(Calendar.HOUR_OF_DAY, 6);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date date=calendar.getTime(); //第一次执行定时任务的时间
        System.out.println(date);
        System.out.println("before 方法比较:"+date.before(new Date()));
        //如果第一次执行定时任务的时间 小于 当前的时间
        //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
        if (date.before(new Date())) {
            date = this.addDay(date, 1);
            System.out.println(date);
        }
        Timer timer = new Timer();
        CountInitTask task = new CountInitTask();
        timer.schedule(task, date, PERIOD_DAY);
    }
    public Date addDay(Date date, int num) {
        Calendar startDT = Calendar.getInstance();
        startDT.setTime(date);
        startDT.add(Calendar.DAY_OF_MONTH, num);
        return startDT.getTime();
    }
}
src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java
@@ -66,9 +66,9 @@
            "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;
src/main/resources/index.html
@@ -290,8 +290,8 @@
    $(function () {
        startRequest();
        setInterval("startRequest()", 3000 );
        setInterval("nowPeople()", 3000);
        setInterval("startRequest()", 1000 );
        setInterval("nowPeople()", 1000);
    });
    function update() {
        $.messager.confirm('消息','确定进行基础设置吗?',function(r){