package com.cloud.count.service.serviceImpl; import com.cloud.count.dao.CountDao; import com.cloud.count.model.Config; import com.cloud.count.model.People; import com.cloud.count.service.CountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @Service public class CountServiceImpl implements CountService{ /** * 进校人数比较基准值 */ public static volatile int baseEnters = 0; /** * 出校人数比较基准值 */ public static volatile int baseExits = 0; /** * 当前报文记录的累积进校人数 */ public static volatile int totalEnters = 0; /** * 当前报文记录的累积出校人数 */ public static volatile int totalExits = 0; /** * 实时计算时作为计算的进校人数基准值 */ public static volatile int realtimeBaseEnters = 0; /** * 实时计算时作为计算的出校人数基准值 */ public static volatile int realtimebBaseExits = 0; /** * 误差数字(统计设备在放学时间重启,则进入人数小于出校人数,导致会出现负数的可能) */ public static volatile int errorCount = 0; private static String[] time={"00","01","02","03","04","05", "06","07","08","09","10","11", "12","13","14","15","16","17", "18","19","20","21","22","23", }; private static String[] time2={"00","05","10","15","20","25", "30","35","40","45","50","55"}; public static volatile int countType = 0; /** * 统计参数初始化,用于统计设备重启情况(发送的第一条报文) */ public static void initCountArgs(People people){ baseEnters = 0; baseExits = 0; totalEnters = people.getEnters(); totalExits = people.getExits(); realtimeBaseEnters = 0; realtimebBaseExits = 0; } @Autowired private CountDao dao; /** * 查询页面所需数据,包括 * 1.时间段内的进校人数 进校人数= 实际进校人数+校正值 * 2.时间段内的出校人数 * 3.校内人数 校内人数=进校人数-出校人数+初始值 * 4.此时的进校人数 * 5.此时的出校人数 * 6.按小时统计 校内人数 * * @return */ @Override public Map getData() throws ParseException { Map map = new HashMap<>(16); // 获取一些初始值 Config config = dao.getConfig(); // 初始人数值 int initialPeople = (config.getInit()==1)?config.getInitialPeople():0; // 校正人数值 int correctionPeople =(config.getCor()==1)?config.getCorrectionPeople():0; // 初始时间 String initialTime = (config.getInit()==1)?config.getInitialTime():config.getCountStartTime(); long now =(long)System.currentTimeMillis()/1000; // 今天的字符表示 "2018-12-20 "(有一个空格) String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+" "; // 默认开始计算时间 long set = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(today+config.getCountStartTime()).getTime()/1000; // 获取设定初始值的初始时间 long start = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(today+initialTime).getTime()/1000; if (now>start-1 && now map,int i,long start,long end,int initialPeople,int correctionPeople){ String todayStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); switch (i){ case 1: map.put("countType","进校人数"); Integer countInPeople = dao.countInPeople(start, end, todayStr); countInPeople=countInPeople==null||countInPeople < 0? 0 : countInPeople; return countInPeople+correctionPeople; case -1: map.put("countType","出校人数"); Integer countOutPeople = dao.countOutPeople(start, end, todayStr); return countOutPeople==null||countOutPeople < 0? 0 : countOutPeople; case 0: map.put("countType","校内人数"); Integer in = dao.countInPeople(start, end, todayStr); Integer out = dao.countOutPeople(start, end, todayStr); in = in==null||in<0?0:in; out = out==null||out<0?0:out; return in-out+initialPeople+correctionPeople; default: map.put("countType","人数"); return 0; } } /** * 统计开始时间到现在的进出入情况 * * @param startdate * @return */ @Override public Map getNowData(Date startdate) { Map map = new HashMap<>(16); int inPeopleNow = totalEnters - realtimeBaseEnters; int outPeopleNow = totalExits - realtimebBaseExits; map.put("inNow",inPeopleNow); map.put("outNow",outPeopleNow); return map; } @Override public void savePeople(People people) { dao.savePeople(people); } @Override public void updateConfigInfo(Config config) { Config old = getConfig(); config.setPassword(old.getPassword()); dao.updateConfig(config); } @Override public Config getConfig(){ return dao.getConfig(); } @Override public void countType(int countType) { CountServiceImpl.countType=countType; } @Override public void setOld() { baseEnters = totalEnters; baseExits = totalExits; } @Override public void updateConfigPassword(String password) { Config config = getConfig(); config.setPassword(password); dao.updateConfig(config); } @Override public void updateConfig(Config config) { dao.updateConfig(config); } }