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