package com.cloud.count.listener; import com.cloud.count.dao.CountDao; import com.cloud.count.model.CountState; import com.cloud.count.model.People; import com.cloud.count.service.CountService; import com.cloud.count.service.serviceImpl.CountServiceImpl; import com.cloud.count.utils.XmlUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Service; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * 计数监听器 */ public class CountListener implements ApplicationListener { static ServerSocket server; static Integer port = 2010; static boolean isServerReboot = false; @Autowired private CountDao dao; @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { 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() { try { server = new ServerSocket(port); } catch (IOException e){ e.printStackTrace(); } while (true){ Socket client = null; try{ client = server.accept(); new Thread(new CountThread(client)).start(); }catch (IOException ex){ } } } }).start(); } }