Jelajahi Sumber

考勤机websocket修改

ouyj 1 tahun lalu
induk
melakukan
1928e615db
1 mengubah file dengan 68 tambahan dan 76 penghapusan
  1. 68 76
      src/main/oa/com/yw/oa/face/socket/FaceSocket.java

+ 68 - 76
src/main/oa/com/yw/oa/face/socket/FaceSocket.java

@@ -68,7 +68,7 @@ public class FaceSocket {
     
     public FaceSocket() {
         // 启动定时任务
-    	//System.out.println("启动获取考勤数据定时任务前");
+    	System.out.println("启动获取考勤数据定时任务前");
         scheduler.scheduleAtFixedRate(this::sendPeriodicRequests, 0, 5, TimeUnit.MINUTES); // 每5分钟发送一次请求
     }
     
@@ -128,7 +128,7 @@ public class FaceSocket {
 	        	return;
 	        }
 	        String msgType = json.getString("msgType");
-	        if(!UPLOADRECORD.equals(msgType)) {
+	        if(!UPLOADRECORD.equals(msgType) && !GetRecordByPasstime.equals(msgType)) {
 	        	System.out.println("收到消息:"+message);
 	        }
 	        switch (msgType) {
@@ -164,13 +164,33 @@ public class FaceSocket {
 				        		faceRec.setSerialNo(json.getString("deviceNo"));
 				        		FileUtil.convertBase64ToImage(faceRec.getFace(), "face", "jpg");
 				        		faceRec.setPersonCode(id);
-				        		faceRec.setCreateTime(new Date());
+				        		//faceRec.setCreateTime(new Date());
+				        		String passTime = json.getString("passTime");
+								Date passTimeDate = DateUtil.stringToDate(passTime, Constant.DATETIME_FORMATE);
+								faceRec.setCreateTime(passTimeDate);
 				        		try {
-				        			System.out.println(faceRec.getPersonName() + "打卡,"+faceRec);
-									recordService.add(faceRec);
-									if(!json.getString("name").contains("陌生人")) {
-					        			attendanceRecordService.insertFaceRecord(faceRec);
-					        		}
+				        			for(String key:uidTableMap.keySet()){
+				        				Map<String,String> params = new HashMap<String,String>();
+				        				params.put("msgType","uploadRecordResp");
+				        				params.put("msgID", json.getString("msgID"));
+				        				params.put("deviceNo", json.getString("deviceNo"));
+				        				params.put("errorCode","100");
+				        				params.put("controlState", "");
+				        				params.put("msg", "");
+				        				Session sess = uidTableMap.get(key);
+				        				if(sess.isOpen()) {
+				        					sess.getBasicRemote().sendText(StringUtil.findJsonStr(params));
+				        				}
+				        			}
+				        			System.out.println(faceRec.getPersonName() + "打卡,"+faceRec); 
+									String searchDate =  DateUtil.dateToString(passTimeDate,Constant.DATETIME_SHOR_FORMATE);
+									List<FaceRecord> faceRecords = recordService.query(faceRec.getSerialNo(), searchDate, 0, faceRec.getPersonName());
+									if(faceRecords == null || faceRecords.size()==0){ 
+										recordService.add(faceRec);
+										if(!json.getString("name").contains("陌生人")) {
+							    			attendanceRecordService.insertFaceRecord(faceRec);
+							    		}
+									}
 								} catch (Exception e) {
 									e.printStackTrace();
 								}
@@ -380,10 +400,8 @@ public class FaceSocket {
 	}
 	
 	private void sendPeriodicRequests() {
-		try {
-			//System.out.println("考勤数据定时任务执行中");
-	        for(String key:uidTableMap.keySet()){
-	        	//System.out.println("考勤数据准备发送onlineGetRecordPasstimeList");
+		try { 
+	        for(String key:uidTableMap.keySet()){ 
 	        	String msgID = StringUtil.getSeq().toString(); // 生成msgID
 	        	// 获取5分钟前的时间 
 	        	Calendar calendar = Calendar.getInstance(); 
@@ -394,9 +412,7 @@ public class FaceSocket {
 	            
 		        // 获取当前时间 
 	        	Date currentDate = new Date();
-	        	String currentDateStr = DateUtil.dateToString(currentDate, Constant.DATETIME_LONG_FORMATE);
-		        
-		        //requestMsgIDToTimestamp.put(msgID, timestamp); // 存储请求时间戳 
+	        	String currentDateStr = DateUtil.dateToString(currentDate, Constant.DATETIME_LONG_FORMATE); 
 		        JSONObject request = new JSONObject();
 		        request.put("msgType", "onlineGetRecordPasstimeList");
 		        request.put("msgID", msgID);
@@ -407,48 +423,32 @@ public class FaceSocket {
 		        request.put("idNumber", "");  
 		        //request.put("snapTimeStart", null);  
 		        //request.put("snapTimeEnd", null);  
-		        //request.put("idNumber", null);  
-		        System.out.println(request.toJSONString());
+		        //request.put("idNumber", null);   
 				Session sess = uidTableMap.get(key);
 				if(sess.isOpen()) {
-					//System.out.println("考勤数据发送onlineGetRecordPasstimeList");
 					sess.getBasicRemote().sendText(request.toJSONString());
 				}
-			}
-			//sendRecordByPasstimeRequest("20250124111919000");
+			} 
 		}catch(Exception ex) {
-			//System.out.println("考勤数据发送onlineGetRecordPasstimeList错误");
 			ex.printStackTrace();
 		}
     }
 	
-	private void handlePasstimeListResp(JSONObject json) {
-		/*String msgID = json.getString("msgID");
-        Long requestTimestamp = requestMsgIDToTimestamp.remove(msgID);
-        if (requestTimestamp == null || System.currentTimeMillis() - requestTimestamp > 5 * 60 * 1000) { // 请求已过时(例如,5分钟内未响应)
-            return;
-        }*/
-		//System.out.println("考勤数据接收onlineGetRecordPasstimeListResp");
-        JSONArray passtimeList = json.getJSONArray("passtimeList");
-        //System.out.println(passtimeList); 
-        for (Object passTimeObj : passtimeList) {
-        	//System.out.println("循环考勤时间");
-            String passTime = (String) passTimeObj;
-            //System.out.println(passTime); 
+	private void handlePasstimeListResp(JSONObject json) { 
+        JSONArray passtimeList = json.getJSONArray("passtimeList"); 
+        for (Object passTimeObj : passtimeList) { 
+            String passTime = (String) passTimeObj; 
             sendRecordByPasstimeRequest(passTime);
         }
     }
  
     private void sendRecordByPasstimeRequest(String passTime) { 
-        try {
-        	//System.out.println("考勤数据准备发送onlineGetRecordByPasstime 111111");
-			for(String key:uidTableMap.keySet()){
-				//System.out.println("考勤数据准备发送onlineGetRecordByPasstime 22222");
+        try { 
+			for(String key:uidTableMap.keySet()){ 
 				JSONObject request = new JSONObject();
 		        request.put("msgType", "onlineGetRecordByPasstime");
 		        request.put("msgID", StringUtil.getSeq().toString());
 		        request.put("passTime", passTime);
-		        System.out.println(request.toJSONString());
 				Session sess = uidTableMap.get(key);
 				if(sess.isOpen()) {
 					sess.getBasicRemote().sendText(request.toJSONString());
@@ -461,44 +461,36 @@ public class FaceSocket {
  
     private void handleRecordByPasstimeResp(JSONObject json) {
         // 处理响应数据
-    	new Thread() {
-			@Override
-			public void run() {
-				//System.out.println("考勤数据接收onlineGetRecordByPasstimeResp");
-		    	recordService =(RecordService)SpringUtil.getApplicationContext().getBean("recordService");
-		    	attendanceRecordService =(AttendanceRecordService)SpringUtil.getApplicationContext().getBean("attendanceRecordService");
-		    	FaceRecord faceRec = new FaceRecord();
-		    	String id = json.getString("idNumber");
-				faceRec.setPersonName(json.getString("name"));
-				faceRec.setFace(json.getString("recognitionPhoto"));
-				faceRec.setAccessType("onlineGetRecordByPasstimeResp");
-				faceRec.setCardType(0);
-				faceRec.setDetail(json.getString("comparePoint"));
-				faceRec.setPass(json.getInteger("compareResult"));
-				faceRec.setSerialNo(json.getString("deviceNo"));
-				FileUtil.convertBase64ToImage(faceRec.getFace(), "face", "jpg");
-				faceRec.setPersonCode(id);
-				
-				String passTime = json.getString("passTime");
-				Date passTimeDate = DateUtil.stringToDate(passTime, Constant.DATETIME_FORMATE);
-				faceRec.setCreateTime(passTimeDate);
-				try {
-					String searchDate =  DateUtil.dateToString(passTimeDate,Constant.DATETIME_SHOR_FORMATE);
-					List<FaceRecord> faceRecords = recordService.query(faceRec.getSerialNo(), searchDate, 0, faceRec.getPersonName());
-					if(faceRecords == null || faceRecords.size()==0){
-						//System.out.println("OA中无当前考勤数据");
-						recordService.add(faceRec);
-						if(!json.getString("name").contains("陌生人")) {
-			    			attendanceRecordService.insertFaceRecord(faceRec);
-			    		}
-					}else{
-						//System.out.println("OA中存在当前考勤数据");
-					}
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
+		System.out.println("考勤数据接收onlineGetRecordByPasstimeResp");
+    	recordService =(RecordService)SpringUtil.getApplicationContext().getBean("recordService");
+    	attendanceRecordService =(AttendanceRecordService)SpringUtil.getApplicationContext().getBean("attendanceRecordService");
+    	FaceRecord faceRec = new FaceRecord();
+    	String id = json.getString("idNumber");
+		faceRec.setPersonName(json.getString("name"));
+		faceRec.setFace(json.getString("recognitionPhoto"));
+		faceRec.setAccessType("onlineGetRecordByPasstimeResp");
+		faceRec.setCardType(0);
+		faceRec.setDetail(json.getString("comparePoint"));
+		faceRec.setPass(json.getInteger("compareResult"));
+		faceRec.setSerialNo(json.getString("deviceNo"));
+		FileUtil.convertBase64ToImage(faceRec.getFace(), "face", "jpg");
+		faceRec.setPersonCode(id);
+		
+		String passTime = json.getString("passTime");
+		Date passTimeDate = DateUtil.stringToDate(passTime, Constant.DATETIME_FORMATE);
+		faceRec.setCreateTime(passTimeDate);
+		try {
+			String searchDate =  DateUtil.dateToString(passTimeDate,Constant.DATETIME_SHOR_FORMATE);
+			List<FaceRecord> faceRecords = recordService.query(faceRec.getSerialNo(), searchDate, 0, faceRec.getPersonName());
+			if(faceRecords == null || faceRecords.size()==0){ 
+				recordService.add(faceRec);
+				if(!json.getString("name").contains("陌生人")) {
+	    			attendanceRecordService.insertFaceRecord(faceRec);
+	    		}
 			}
-		};
+		} catch (Exception e) {
+			e.printStackTrace();
+		} 
     }
     
     public static void main(String[] args) {