2019-11-07 | liuxiaolong | ![]() |
2019-11-07 | liuxiaolong | ![]() |
src/main/java/com/cloud/count/listener/CountInitTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/cloud/count/listener/CountListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/cloud/count/listener/CountTaskListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/cloud/count/listener/CountThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/cloud/count/listener/TimerManager.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/index.html | ●●●●● 补丁 | 查看 | 原始文档 | 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){