From bcffe049acc4d80b21d923f5c002496c280d5668 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期六, 02 十一月 2019 16:59:57 +0800 Subject: [PATCH] fix count mechine limit 65535 --- .gitignore | 5 + src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java | 99 ++++++++++++++++++++++++-------- src/main/java/com/cloud/count/dao/CountDao.java | 4 src/main/java/com/cloud/count/listener/CountListener.java | 33 +++++++--- 4 files changed, 104 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index e69de29..eac00a9 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea +.vscode +logs +target +.iml \ No newline at end of file diff --git a/src/main/java/com/cloud/count/dao/CountDao.java b/src/main/java/com/cloud/count/dao/CountDao.java index 134c1c9..e34fce7 100644 --- a/src/main/java/com/cloud/count/dao/CountDao.java +++ b/src/main/java/com/cloud/count/dao/CountDao.java @@ -58,9 +58,9 @@ // @Select("select * from OldNew where id=1") // OldNew getOldNew(); - @Update("update CountState set baseEnters=#{baseEnters},baseExits=#{baseExits},totalEnters=#{totalEnters},totalExits=#{totalExits},realtimeBaseEnters=#{realtimeBaseEnters},realtimeBaseExits=#{realtimeBaseExits},errorCount=#{errorCount}, baseTime=#{baseTime} where id=1") + @Update("update countstate set baseEnters=#{baseEnters},baseExits=#{baseExits},totalEnters=#{totalEnters},totalExits=#{totalExits},realtimeBaseEnters=#{realtimeBaseEnters},realtimeBaseExits=#{realtimeBaseExits},errorCount=#{errorCount}, baseTime=#{baseTime} where id=1") boolean updateCountState(CountState state); - @Select("select * from CountState where id=1") + @Select("select * from countstate where id=1") CountState getCountState(); } diff --git a/src/main/java/com/cloud/count/listener/CountListener.java b/src/main/java/com/cloud/count/listener/CountListener.java index 23e34da..f51b4db 100644 --- a/src/main/java/com/cloud/count/listener/CountListener.java +++ b/src/main/java/com/cloud/count/listener/CountListener.java @@ -2,6 +2,7 @@ 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; @@ -62,29 +63,38 @@ byte[] b=new byte[1024]; is.read(b); String str = new String(b); -// logger.info(str); + sendAck(iWriter); try{ String xmlStr = XmlUtil.toXmlStr(str); + // 濡傛灉瀛樺湪TotalEnters銆傚垯璇佹槑杩斿洖鐨勬槸瀹炴椂鏁版嵁鐨剎ml People people = null; if(xmlStr.indexOf("TotalEnters")>-1){ people = XmlUtil.realTimeXmlToPeople(xmlStr); - dao.savePeople(people); - CountServiceImpl.totalEnters = people.getEnters(); - CountServiceImpl.totalExits = people.getExits(); + int inCreEnter = CountServiceImpl.addEnter(people.getEnters());//杩涘叆浜烘暟澧為噺 + int inCreExit = CountServiceImpl.addExit(people.getExits());//鍑哄幓浜烘暟澧為噺 + System.out.println("TotalEnters:"+people.getEnters()); + CountServiceImpl.totalEnters += inCreEnter; + CountServiceImpl.totalExits += inCreExit; - if( CountServiceImpl.totalEnters < CountServiceImpl.baseEnters){ - //琛ㄧず缁熻璁惧閲嶆柊鍚姩浜�,缁熻鍙傛暟褰掗浂 - CountServiceImpl.initCountArgs(people); - } + + people.setEnters(CountServiceImpl.totalEnters);//灏嗙疮鍔犲悗鐨勬暟閲忓瓨鍒版暟鎹簱涓� + people.setExits(CountServiceImpl.totalExits); + boolean resultB = dao.savePeople(people); + + //鎬昏繘鍏ユ暟閲忔垨鑰呮�诲嚭鍘绘暟閲忥紝涓嶄竴瀹氬摢涓�涓厛鍒�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))){ + if(!sdf.format(nowDate).equals(sdf.format(BaseDate))){//鍘嗗彶鏁版嵁涓嶇瓑浜庡綋澶� CountServiceImpl.baseEnters = people.getEnters(); CountServiceImpl.baseExits = people.getExits(); CountServiceImpl.realtimeBaseEnters = people.getEnters(); @@ -92,6 +102,7 @@ CountServiceImpl.errorCount = 0; break op; } + //杩樺師鐘舵�� CountServiceImpl.baseEnters = state.getBaseEnters(); CountServiceImpl.baseExits = state.getBaseExits(); CountServiceImpl.totalEnters = state.getTotalEnters(); @@ -117,6 +128,8 @@ currentState.setErrorCount(CountServiceImpl.errorCount); currentState.setBaseTime(people.getTimestamp()); dao.updateCountState(currentState);//鏇存柊褰撳墠缁熻鐘舵�� + } else { + System.out.println("noTotalEners"); } // 濡傛灉瀛樺湪ReportData銆傚垯璇佹槑杩斿洖鐨勬槸缁熻鏁版嵁鐨剎ml if(xmlStr.indexOf("ReportData")>-1){ @@ -124,7 +137,7 @@ dao.savePeople(people); } }catch (Exception e){ - + System.out.println(e.getMessage()); } }catch (IOException ex){ diff --git a/src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java b/src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java index 9369d93..cfb9185 100644 --- a/src/main/java/com/cloud/count/service/serviceImpl/CountServiceImpl.java +++ b/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; @@ -56,6 +69,32 @@ 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 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; //杩欒浠g爜寰堥噸瑕侊紝琛ㄧず閲嶆柊缁熻 }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]); + } + } } -- Gitblit v1.8.0