Commit 3d2b122faed2614a9b03468034b6c58e6b45a68e

Authored by 陶汉栋
1 parent 191a8018
Exists in master

人脸抓拍机实现

Showing 34 changed files with 896 additions and 320 deletions   Show diff stats
cloud/dahua/ReadMe.md 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +#**服务运行的环境**
  2 +##一、运行需要的基本环境库
  3 + 在包路径下有个libs文件,该文件下有个win64文件夹,里面存放了核心的库文件;
  4 +
  5 +##二、服务运行的核心库
  6 + 在com.example.dahua.lib下有个NetSDKLib实现类,里面封装了各种核心的方法,只需要知道调用就行;
  7 + com.example.dahua.module下的类是人脸设备方法的实现,可直接调用,基本上用的是GateModule类;
  8 +
  9 +##三、下发人员信息流程
  10 + 在mytask类中 有个设备自注册服务在autoRegister()方法中,会在ServiceCB回调接口中响应设备的注册信息,
  11 + 注册上来的设备都会存在内存中,通过deviceInfoBeans存储;
  12 + 人脸和卡号下发都是通过GateModule类中的响应方法下发;
  13 +
  14 +##四、下发人脸和权限的API接口
  15 + 由于之前图片传的是本地的绝对路径,所以在100服务器上部署了一个接口服务,对应的接口控制器为UserControl,
  16 + UserControl内部有逻辑处理,大华因为可以远程控制设备的注册ip和端口号,所以设备都注册在了21服务器上,做
  17 + 人脸下发的操作都在FileControl中;
  18 +
  19 +##五、部署到不同服务器中需要注意什么?
  20 + 大华的不用修改什么,只需要注意服务器内存就行;
  21 +
  22 +##六、UserControl的主要接口方法
  23 + sendPermission():下发权限,这个是在最新的人脸一体机和教师点名中使用方式上会用到,注册上来的人脸机设备id会以ytj开头,注意如果出现人脸和权限都下发了的情况还是提示没有权限,那就再发一遍权限,有些机型需要先发人脸再发权限;
  24 + sendToKB():人脸抓拍机会把抓到的人脸信息推送到数据看板,这个用来做测试用;
  25 + uploadImgAndUserInfo():单个下发人脸的接口
  26 + imgsSend():下发学校下所有人脸给指定设备;
  27 + checkFace():在线活体检测;
  28 +
  29 +##七、配置信息修改
  30 + application.yaml,该文件下包含了数据库配置、注册中心、数据库文件映射等信息,端口号、服务名也都是在这里修改;
0 \ No newline at end of file 31 \ No newline at end of file
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
@@ -66,9 +66,9 @@ public class MyTask implements ApplicationRunner { @@ -66,9 +66,9 @@ public class MyTask implements ApplicationRunner {
66 public void run(ApplicationArguments args) throws Exception { 66 public void run(ApplicationArguments args) throws Exception {
67 // 121.40.109.21 67 // 121.40.109.21
68 68
69 -// LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 69 + LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
70 70
71 -// autoRegister();//自注册 71 + autoRegister();//自注册
72 72
73 // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess()); 73 // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess());
74 } 74 }
@@ -205,7 +205,11 @@ public class MyTask implements ApplicationRunner { @@ -205,7 +205,11 @@ public class MyTask implements ApplicationRunner {
205 lLongMap.put(deviceId, loginHandleLong); 205 lLongMap.put(deviceId, loginHandleLong);
206 isHasNewDevice = true; 206 isHasNewDevice = true;
207 String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 207 String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
208 - int index = attendanceService.insert(deviceId, "22", pIp, wPort + "", inTime, "-1", "1"); 208 + if (deviceId.startsWith("ytj")){
  209 + attendanceService.insert(deviceId, "29", pIp, wPort + "", inTime, "-1", "1");
  210 + }else {
  211 + attendanceService.insert(deviceId, "22", pIp, wPort + "", inTime, "-1", "1");
  212 + }
209 DeviceInfoBean deviceInfoBean = new DeviceInfoBean(); 213 DeviceInfoBean deviceInfoBean = new DeviceInfoBean();
210 deviceInfoBean.setDevcieId(deviceId); 214 deviceInfoBean.setDevcieId(deviceId);
211 deviceInfoBean.setDeviceIp(pIp); 215 deviceInfoBean.setDeviceIp(pIp);
@@ -232,9 +236,9 @@ public class MyTask implements ApplicationRunner { @@ -232,9 +236,9 @@ public class MyTask implements ApplicationRunner {
232 if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) { 236 if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) {
233 for (DeviceInfoBean dev : 237 for (DeviceInfoBean dev :
234 deviceInfoBeans) { 238 deviceInfoBeans) {
235 -// FileUtils.getInstance().writeLogs(dev.getDevcieId() + "------" + lLongMap.get(dev.getDevcieId()), FileUtils.device_login);  
236 if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { 239 if (lLongMap.get(dev.getDevcieId()).intValue() > 0) {
237 NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); 240 NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId()));
  241 +// System.out.println("监听成功:"+dev.getDevcieId());
238 if (lLong.intValue() != -1) { 242 if (lLong.intValue() != -1) {
239 deviceInfoBeans.remove(dev); 243 deviceInfoBeans.remove(dev);
240 } 244 }
@@ -291,10 +295,10 @@ public class MyTask implements ApplicationRunner { @@ -291,10 +295,10 @@ public class MyTask implements ApplicationRunner {
291 snapPicPath = snapPicPath.replace("FaceRecoder", "image"); 295 snapPicPath = snapPicPath.replace("FaceRecoder", "image");
292 if (cardBean.getType() == 0) {//老师 296 if (cardBean.getType() == 0) {//老师
293 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id()); 297 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id());
294 - sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card); 298 + sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,"");
295 } else if (cardBean.getType() == 2) {//学生 299 } else if (cardBean.getType() == 2) {//学生
296 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id()); 300 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id());
297 - sendRecordDao.addFaceRecoder("", userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card); 301 + sendRecordDao.addFaceRecoder("", userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,"");
298 } 302 }
299 } 303 }
300 304
cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java
@@ -63,9 +63,9 @@ public class MyScheduledTask { @@ -63,9 +63,9 @@ public class MyScheduledTask {
63 63
64 private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径 64 private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径
65 65
66 - // @Scheduled(fixedRate = 5000) 66 + @Scheduled(fixedRate = 5000)
67 private void sendErrorInfo() throws InterruptedException { 67 private void sendErrorInfo() throws InterruptedException {
68 - System.out.println("---------------------------sendErrorInfo:"); 68 +// System.out.println("---------------------------sendErrorInfo:");
69 // System.out.println("定时任务执行中...."); 69 // System.out.println("定时任务执行中....");
70 deleteFaceImg(); 70 deleteFaceImg();
71 71
@@ -76,13 +76,13 @@ public class MyScheduledTask { @@ -76,13 +76,13 @@ public class MyScheduledTask {
76 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH"); 76 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
77 int hour = Integer.parseInt(simpleDateFormat.format(new Date())); 77 int hour = Integer.parseInt(simpleDateFormat.format(new Date()));
78 78
79 - if (hour >= 9 && hour < 11) { 79 + /* if (hour >= 9 && hour < 11) {
80 dealData(); 80 dealData();
81 } else if (hour >= 13 && hour < 14) { 81 } else if (hour >= 13 && hour < 14) {
82 dealData(); 82 dealData();
83 } else if (hour >= 20 || hour < 5) { 83 } else if (hour >= 20 || hour < 5) {
84 dealData(); 84 dealData();
85 - } 85 + }*/
86 86
87 if (myTasks.isHasNewDevice) myTasks.reloadPic(); 87 if (myTasks.isHasNewDevice) myTasks.reloadPic();
88 88
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java
@@ -267,23 +267,21 @@ public class SendUserInfoTask { @@ -267,23 +267,21 @@ public class SendUserInfoTask {
267 Memory memory = null;//图片缓存 267 Memory memory = null;//图片缓存
268 try { 268 try {
269 String targPath = FilePath.picPathComp + userInfoBean.getStudentcode() + ".jpg"; 269 String targPath = FilePath.picPathComp + userInfoBean.getStudentcode() + ".jpg";
270 -// String targPath = "C:\\Users\\taohandong\\Desktop\\comp\\"+userInfoBean.getStudentcode()+".jpg";  
271 if (new File(picSrc).exists()) 270 if (new File(picSrc).exists())
272 CompressPic.CompressPic(picSrc, targPath, userInfoBean.getStudentcode());//压缩后的图片 271 CompressPic.CompressPic(picSrc, targPath, userInfoBean.getStudentcode());//压缩后的图片
273 memory = ToolKits.readPictureFile(targPath); 272 memory = ToolKits.readPictureFile(targPath);
274 sendRecordBean.setImgPath(picSrc); 273 sendRecordBean.setImgPath(picSrc);
275 -// System.out.println("下发学生信息:" + "targPath:" + new File(targPath).exists() + targPath + " userInfoBean:" + userInfoBean);  
276 } catch (Exception e) { 274 } catch (Exception e) {
277 e.printStackTrace(); 275 e.printStackTrace();
278 } 276 }
279 277
280 for (AttendanceBean attendanceBean : 278 for (AttendanceBean attendanceBean :
281 attendanceBeans) { 279 attendanceBeans) {
282 - pushCardAndFace(attendanceBean, userInfoBean.getUser_id(), userInfoBean.getStudent_num(), userInfoBean.getName(), memory, sendRecordBean); 280 + pushCardAndFace(attendanceBean, userInfoBean.getUser_id(), userInfoBean.getStudent_num(), userInfoBean.getName(), memory, sendRecordBean,userType);
283 } 281 }
284 } 282 }
285 283
286 - private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean) { 284 + private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) {
287 sendRecordBean.setDeviceID(attendanceBean.getClint_id()); 285 sendRecordBean.setDeviceID(attendanceBean.getClint_id());
288 sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id())); 286 sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id()));
289 sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 287 sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -299,7 +297,6 @@ public class SendUserInfoTask { @@ -299,7 +297,6 @@ public class SendUserInfoTask {
299 // System.out.println("loginHandleLong:" + loginHandleLong + MyTask.lLongMap.toString() + " 设备ID:" + attendanceBean.getClint_id()); 297 // System.out.println("loginHandleLong:" + loginHandleLong + MyTask.lLongMap.toString() + " 设备ID:" + attendanceBean.getClint_id());
300 // System.out.println("loginHandleLong:" +loginHandleLong); 298 // System.out.println("loginHandleLong:" +loginHandleLong);
301 if (loginHandleLong == null) { 299 if (loginHandleLong == null) {
302 -  
303 FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); 300 FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices);
304 String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id()); 301 String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id());
305 sendRecordBean.setFailType(2); 302 sendRecordBean.setFailType(2);
@@ -315,7 +312,7 @@ public class SendUserInfoTask { @@ -315,7 +312,7 @@ public class SendUserInfoTask {
315 String cardNum = cardNo(student_num); 312 String cardNum = cardNo(student_num);
316 if (bCardFlags != -1) {//修改卡信息 313 if (bCardFlags != -1) {//修改卡信息
317 GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 314 GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1),
318 - 0, 0, 1, startTime, endTime, loginHandleLong); 315 + 0, 0, 1, startTime, endTime, loginHandleLong,userType);
319 userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id()); 316 userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id());
320 bFaceFalgs = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong); 317 bFaceFalgs = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong);
321 //卡号添加成功,但是人脸不成功的话,就需要新增人脸 318 //卡号添加成功,但是人脸不成功的话,就需要新增人脸
@@ -326,7 +323,7 @@ public class SendUserInfoTask { @@ -326,7 +323,7 @@ public class SendUserInfoTask {
326 323
327 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" 324 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456"
328 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 325 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1
329 - , 1, startTime, endTime, loginHandleLong); 326 + , 1, startTime, endTime, loginHandleLong,userType);
330 327
331 if (bCardFlags != -1) { 328 if (bCardFlags != -1) {
332 int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 329 int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号
cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java
@@ -13,6 +13,8 @@ public class StudentBean implements Serializable { @@ -13,6 +13,8 @@ public class StudentBean implements Serializable {
13 13
14 private int StudentType; 14 private int StudentType;
15 15
  16 + private String teacher_num;
  17 +
16 private int UserType; 18 private int UserType;
17 19
18 private String Name; 20 private String Name;
@@ -21,6 +23,12 @@ public class StudentBean implements Serializable { @@ -21,6 +23,12 @@ public class StudentBean implements Serializable {
21 23
22 private String ClassName; 24 private String ClassName;
23 25
  26 + private String class_id;
  27 +
  28 + private String class_name;
  29 +
  30 + private String student_type;
  31 +
24 private String OldCard; 32 private String OldCard;
25 33
26 private String Card; 34 private String Card;
@@ -49,6 +57,24 @@ public class StudentBean implements Serializable { @@ -49,6 +57,24 @@ public class StudentBean implements Serializable {
49 57
50 private String studentcode; 58 private String studentcode;
51 59
  60 + private String num;
  61 +
  62 + public String getNum() {
  63 + return num;
  64 + }
  65 +
  66 + public void setNum(String num) {
  67 + this.num = num;
  68 + }
  69 +
  70 + public String getTeacher_num() {
  71 + return teacher_num;
  72 + }
  73 +
  74 + public void setTeacher_num(String teacher_num) {
  75 + this.teacher_num = teacher_num;
  76 + }
  77 +
52 public String getUser_id() { 78 public String getUser_id() {
53 return user_id; 79 return user_id;
54 } 80 }
@@ -225,6 +251,30 @@ public class StudentBean implements Serializable { @@ -225,6 +251,30 @@ public class StudentBean implements Serializable {
225 this.student_id = student_id; 251 this.student_id = student_id;
226 } 252 }
227 253
  254 + public String getClass_id() {
  255 + return class_id;
  256 + }
  257 +
  258 + public void setClass_id(String class_id) {
  259 + this.class_id = class_id;
  260 + }
  261 +
  262 + public String getClass_name() {
  263 + return class_name;
  264 + }
  265 +
  266 + public void setClass_name(String class_name) {
  267 + this.class_name = class_name;
  268 + }
  269 +
  270 + public String getStudent_type() {
  271 + return student_type;
  272 + }
  273 +
  274 + public void setStudent_type(String student_type) {
  275 + this.student_type = student_type;
  276 + }
  277 +
228 @Override 278 @Override
229 public String toString() { 279 public String toString() {
230 return "StudentBean{" + 280 return "StudentBean{" +
@@ -236,6 +286,9 @@ public class StudentBean implements Serializable { @@ -236,6 +286,9 @@ public class StudentBean implements Serializable {
236 ", Name='" + Name + '\'' + 286 ", Name='" + Name + '\'' +
237 ", ClassId=" + ClassId + 287 ", ClassId=" + ClassId +
238 ", ClassName='" + ClassName + '\'' + 288 ", ClassName='" + ClassName + '\'' +
  289 + ", class_id='" + class_id + '\'' +
  290 + ", class_name='" + class_name + '\'' +
  291 + ", student_type='" + student_type + '\'' +
239 ", OldCard='" + OldCard + '\'' + 292 ", OldCard='" + OldCard + '\'' +
240 ", Card='" + Card + '\'' + 293 ", Card='" + Card + '\'' +
241 ", SchoolId=" + SchoolId + 294 ", SchoolId=" + SchoolId +
@@ -245,7 +298,6 @@ public class StudentBean implements Serializable { @@ -245,7 +298,6 @@ public class StudentBean implements Serializable {
245 ", AddTime=" + AddTime + 298 ", AddTime=" + AddTime +
246 ", Sex=" + Sex + 299 ", Sex=" + Sex +
247 ", Face='" + Face + '\'' + 300 ", Face='" + Face + '\'' +
248 -// ", StudentCode='" + StudentCode + '\'' +  
249 ", student_num='" + student_num + '\'' + 301 ", student_num='" + student_num + '\'' +
250 ", student_id='" + student_id + '\'' + 302 ", student_id='" + student_id + '\'' +
251 ", user_id='" + user_id + '\'' + 303 ", user_id='" + user_id + '\'' +
cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
@@ -126,7 +126,7 @@ public class FileControl { @@ -126,7 +126,7 @@ public class FileControl {
126 @ApiOperation(value = "下发卡信息") 126 @ApiOperation(value = "下发卡信息")
127 public int addCard(@RequestParam("schoolId") String schoolId, @RequestParam("targPath") String targPath) { 127 public int addCard(@RequestParam("schoolId") String schoolId, @RequestParam("targPath") String targPath) {
128 128
129 - File file = new File(targPath); 129 + /*File file = new File(targPath);
130 130
131 File[] files = file.listFiles(); 131 File[] files = file.listFiles();
132 132
@@ -148,7 +148,7 @@ public class FileControl { @@ -148,7 +148,7 @@ public class FileControl {
148 } 148 }
149 149
150 150
151 - } 151 + }*/
152 152
153 153
154 return 1; 154 return 1;
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
1 package com.example.dahua.control; 1 package com.example.dahua.control;
2 2
3 import com.example.dahua.MyTask; 3 import com.example.dahua.MyTask;
4 -import com.example.dahua.async.ImageUtils;  
5 import com.example.dahua.async.SendUserInfoTask; 4 import com.example.dahua.async.SendUserInfoTask;
6 import com.example.dahua.bean.PermissionBean; 5 import com.example.dahua.bean.PermissionBean;
7 -import com.example.dahua.bean.UserAndPermission; 6 +import com.example.dahua.bean.SendRecordBean;
  7 +import com.example.dahua.bean.StudentBean;
  8 +import com.example.dahua.dao.UserDao;
8 import com.example.dahua.lib.CompressPic; 9 import com.example.dahua.lib.CompressPic;
9 import com.example.dahua.service.UserService; 10 import com.example.dahua.service.UserService;
10 import com.example.dahua.utils.*; 11 import com.example.dahua.utils.*;
  12 +import com.example.dahua.xiananDao.SendRecordDao;
11 import io.swagger.annotations.Api; 13 import io.swagger.annotations.Api;
12 import io.swagger.annotations.ApiImplicitParam; 14 import io.swagger.annotations.ApiImplicitParam;
13 import io.swagger.annotations.ApiImplicitParams; 15 import io.swagger.annotations.ApiImplicitParams;
14 import io.swagger.annotations.ApiOperation; 16 import io.swagger.annotations.ApiOperation;
15 -import org.json.JSONArray;  
16 import org.json.JSONException; 17 import org.json.JSONException;
17 import org.json.JSONObject; 18 import org.json.JSONObject;
18 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
19 -import org.springframework.beans.factory.annotation.Value;  
20 -import org.springframework.http.HttpEntity;  
21 -import org.springframework.http.HttpHeaders;  
22 import org.springframework.http.MediaType; 20 import org.springframework.http.MediaType;
23 -import org.springframework.http.ResponseEntity;  
24 -import org.springframework.util.LinkedMultiValueMap;  
25 -import org.springframework.util.MultiValueMap;  
26 import org.springframework.util.StringUtils; 21 import org.springframework.util.StringUtils;
27 import org.springframework.web.bind.annotation.*; 22 import org.springframework.web.bind.annotation.*;
28 import org.springframework.web.client.RestTemplate; 23 import org.springframework.web.client.RestTemplate;
29 -import org.springframework.web.multipart.MultipartFile;  
30 24
31 -import javax.imageio.stream.FileImageInputStream;  
32 import java.io.*; 25 import java.io.*;
33 -import java.net.HttpURLConnection;  
34 -import java.net.URL;  
35 import java.util.*; 26 import java.util.*;
36 27
37 /** 28 /**
@@ -51,6 +42,12 @@ public class UserControl { @@ -51,6 +42,12 @@ public class UserControl {
51 @Autowired 42 @Autowired
52 MyTask myTasks; 43 MyTask myTasks;
53 44
  45 + @Autowired
  46 + SendRecordDao sendRecordDao;
  47 +
  48 + @Autowired
  49 + UserDao userDao;
  50 +
54 51
55 @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET) 52 @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET)
56 @ApiOperation(value = "上传用户信息") 53 @ApiOperation(value = "上传用户信息")
@@ -72,6 +69,130 @@ public class UserControl { @@ -72,6 +69,130 @@ public class UserControl {
72 return true; 69 return true;
73 } 70 }
74 71
  72 + @RequestMapping(value = "sendFaces", method = RequestMethod.GET)
  73 + @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备")
  74 + public void sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) {
  75 +
  76 + String typeName = userType.equals("1") ? "Teacher" : "Student";
  77 +
  78 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
  79 +
  80 + File imgPathFile = new File(imgPath);//目录
  81 +
  82 + String[] deviceIdsStr = deviceIds.split(",");
  83 +
  84 +
  85 + if (imgPathFile.exists()) {
  86 + File[] imgfiles = imgPathFile.listFiles();
  87 + if (null != imgfiles) {
  88 +
  89 + for (int i = 0; i < imgfiles.length; i++) {
  90 + File file = imgfiles[i];//图片
  91 + String targetPath = "./picPath/comp/" + file.getName();
  92 + try {
  93 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath, "");
  94 + } catch (Exception e) {
  95 + e.printStackTrace();
  96 + }
  97 + if (file.exists())
  98 + for (int j = 0; j < deviceIdsStr.length; j++) {
  99 + String deviceId = deviceIdsStr[j];
  100 +
  101 + StudentBean studentBean = null;
  102 + String card = "", name = "", studentCode = "";
  103 + if (userType.equals("1")) {
  104 + studentBean = userDao.getTeacherWithstudentcode(file.getName().split("\\.")[0], schoolId);
  105 + if (null != studentBean) {
  106 + card = studentBean.getTeacher_num();
  107 + name = studentBean.getName();
  108 + studentCode = studentBean.getNum();
  109 + }
  110 + } else if (userType.equals("2")) {
  111 + studentBean = userDao.getStudentWithstudentcode(file.getName().split("\\.")[0], schoolId);
  112 + if (null != studentBean) {
  113 + card = studentBean.getStudent_num();
  114 + name = studentBean.getName();
  115 + studentCode = studentBean.getStudentcode();
  116 + }
  117 + }
  118 +
  119 + if (!StringUtils.isEmpty(card)) {
  120 + String clint_type = userDao.getClintType(deviceId);
  121 + HttpUtils.uploadImgs(new File(targetPath), schoolId, studentCode, clint_type, Integer.parseInt(userType));
  122 + }
  123 +
  124 + }
  125 +
  126 + }
  127 +
  128 + }
  129 + }
  130 +
  131 + }
  132 +
  133 + @RequestMapping(value = "sendErrorFaces", method = RequestMethod.GET)
  134 + @ApiOperation(value = "下发失败的人脸", notes = "下发失败的人脸")
  135 + public void sendErrorFaces(@RequestParam("schoolId") String schoolId, @RequestParam("deviceid") String deviceid,@RequestParam("userType")int userType) {
  136 +
  137 + if (!StringUtils.isEmpty(deviceid)) {
  138 + senErrorFace(deviceid, schoolId, userType);
  139 + } else {
  140 + List<String> deviceIds = sendRecordDao.getDeviceIds(schoolId);
  141 +
  142 + if (null != deviceIds) {
  143 + for (int j = 0; j < deviceIds.size(); j++) {
  144 + String deviceId = deviceIds.get(j);
  145 + senErrorFace(deviceId, schoolId,userType);
  146 + }
  147 + }
  148 + }
  149 +
  150 +
  151 + }
  152 +
  153 +
  154 + private void senErrorFace(String deviceId, String schoolId, int userType) {
  155 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getSendFailWithDevId(deviceId);
  156 + if (null != sendRecordBeans) {
  157 +
  158 + for (int i = 0; i < sendRecordBeans.size(); i++) {
  159 +
  160 + SendRecordBean sendRecordBean = sendRecordBeans.get(i);
  161 + String typeName = "";
  162 + if (userType==0){
  163 + typeName = sendRecordBean.getUserType() == 1 ? "Teacher" : "Student";
  164 + }else {
  165 + typeName = userType == 1 ? "Teacher" : "Student";
  166 + }
  167 + String studentCode = "";
  168 +
  169 + if (sendRecordBean.getUserType() == 1) {
  170 + studentCode = userDao.getTeaNumWithCard(sendRecordBean.getNum());
  171 + } else if (sendRecordBean.getUserType() == 2) {
  172 + studentCode = userDao.getStudentCode(sendRecordBean.getNum());
  173 + }
  174 +
  175 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + sendRecordBean.getSchoolId() + "\\" + typeName + "\\" + studentCode + ".png";
  176 + File imgFile = new File(imgPath);
  177 + if (imgFile.exists()) {
  178 + String targetPath = "./picPath/comp/" + imgFile.getName();
  179 + try {
  180 + CompressPic.CompressPic(imgFile.getAbsolutePath(), targetPath, "");
  181 + } catch (Exception e) {
  182 + e.printStackTrace();
  183 + }
  184 +
  185 + String clint_type = userDao.getClintType(sendRecordBean.getDeviceID());
  186 + HttpUtils.uploadImgs(new File(targetPath), schoolId, studentCode, clint_type, sendRecordBean.getUserType());
  187 + } else {
  188 + System.out.println("文件不存在");
  189 + }
  190 + }
  191 +
  192 + }
  193 + }
  194 +
  195 +
75 @RequestMapping(value = "sendSingle", method = RequestMethod.GET) 196 @RequestMapping(value = "sendSingle", method = RequestMethod.GET)
76 @ApiOperation(value = "单张卡下发") 197 @ApiOperation(value = "单张卡下发")
77 public String sendSIngle(@RequestParam("SchoolId") String SchoolId, @RequestParam("Card") String Card) { 198 public String sendSIngle(@RequestParam("SchoolId") String SchoolId, @RequestParam("Card") String Card) {
@@ -123,11 +244,11 @@ public class UserControl { @@ -123,11 +244,11 @@ public class UserControl {
123 244
124 String userCode = file.getName().split("\\.")[0]; 245 String userCode = file.getName().split("\\.")[0];
125 246
126 - String schoolId = ""; 247 + String schoolId = "864";
127 248
128 - if (httpurl.contains("Student")) { 249 + if (httpurl.contains("Student")&&!httpurl.startsWith("http")) {
129 schoolId = httpurl.substring(httpurl.indexOf("School") + 6, httpurl.indexOf("\\Student")); 250 schoolId = httpurl.substring(httpurl.indexOf("School") + 6, httpurl.indexOf("\\Student"));
130 - } else if (httpurl.contains("Teacher")) { 251 + } else if (httpurl.contains("Teacher")&&!httpurl.startsWith("http")) {
131 schoolId = httpurl.substring(httpurl.indexOf("School") + 6, httpurl.indexOf("\\Teacher")); 252 schoolId = httpurl.substring(httpurl.indexOf("School") + 6, httpurl.indexOf("\\Teacher"));
132 } 253 }
133 System.out.println("choolId:" + schoolId + "userCode:" + userCode); 254 System.out.println("choolId:" + schoolId + "userCode:" + userCode);
@@ -143,6 +264,27 @@ public class UserControl { @@ -143,6 +264,27 @@ public class UserControl {
143 } 264 }
144 265
145 266
  267 + @RequestMapping(value = "jpg2png", method = RequestMethod.GET)
  268 + @ApiOperation("jpg图片转png")
  269 + public boolean jpg2png(@RequestParam("path") String path) {
  270 +
  271 + File file = new File(path);
  272 + if (file.exists()) {
  273 +
  274 + File[] files = file.listFiles();
  275 +
  276 + for (int i = 0; i < files.length; i++) {
  277 + File filePath = files[i];
  278 + BaiduUtils.getBaiduUtils().checkImg(filePath.getAbsolutePath());
  279 + }
  280 +
  281 + }
  282 +
  283 + return true;
  284 +
  285 + }
  286 +
  287 +
146 288
147 289
148 /*@RequestMapping(value = "tranpic", method = RequestMethod.GET) 290 /*@RequestMapping(value = "tranpic", method = RequestMethod.GET)
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
@@ -129,12 +129,37 @@ public interface UserDao { @@ -129,12 +129,37 @@ public interface UserDao {
129 void getUserWidthUserId(@Param("userId") String userId); 129 void getUserWidthUserId(@Param("userId") String userId);
130 130
131 @Select("select * from SZ_V_School_Student where user_id = #{userId}") 131 @Select("select * from SZ_V_School_Student where user_id = #{userId}")
132 - List<StudentBean> getStudentWithUserId(@Param("userId")String userId); 132 + List<StudentBean> getStudentWithUserId(@Param("userId") String userId);
133 133
134 @Select("select * from SZ_V_School_Teacher where user_id = #{userId}") 134 @Select("select * from SZ_V_School_Teacher where user_id = #{userId}")
135 - List<TeacherBean> getTeaWithUserId(@Param("userId")String userId); 135 + List<TeacherBean> getTeaWithUserId(@Param("userId") String userId);
136 136
137 @Select("select Top(1) user_id from SZ_V_School_Student where studentcode = #{studentcode}") 137 @Select("select Top(1) user_id from SZ_V_School_Student where studentcode = #{studentcode}")
138 String getStuWithCode(@Param("studentcode") String code); 138 String getStuWithCode(@Param("studentcode") String code);
139 139
  140 + @Select("select top(1) num from SZ_V_School_Teacher where teacher_num=#{num}")
  141 + String getTeaNumWithCard(@Param("num") String num);
  142 +
  143 + @Select("select clint_type from SZ_Attendance where clint_id = #{clint_id}}")
  144 + String getClintType(@Param("clint_id") String deviceID);
  145 +
  146 + @Select("select v.* from SZ_Student as s inner join SZ_V_School_Student as v on s.student_id = v.student_id where s.intime>'2020-09-01' and school_id = 654 order by student_id desc ")
  147 + List<StudentBean> getStus();
  148 +
  149 + @Insert("insert into HS_StudentUpdateCard(UserId,CustomerId,StudentType,UserType,Name,ClassId,ClassName,Card,SchoolId,IsNew,UpdateType,AddTime,Sex,StudentCode,mobile) values (" +
  150 + "#{UserId},#{CustomerId},#{StudentType},#{UserType},#{Name},#{ClassId},#{ClassName},#{Card},#{SchoolId},#{IsNew},#{UpdateType},#{AddTime},#{Sex},#{StudentCode},#{mobile})")
  151 + void insertUpdateCard(@Param("UserId")String UserId,@Param("CustomerId")String CustomerId,@Param("StudentType")String StudentType,@Param("UserType")String UserType,
  152 + @Param("Name")String Name,@Param("ClassId")String ClassId,@Param("ClassName")String ClassName,@Param("Card")String Card,@Param("SchoolId")String SchoolId,
  153 + @Param("IsNew")String IsNew,@Param("UpdateType")String UpdateType,@Param("AddTime")String AddTime,@Param("Sex")String Sex,@Param("StudentCode")String StudentCode,
  154 + @Param("mobile")String mobile);
  155 +
  156 + @Select("select Top(1)*\n" +
  157 + "from SZ_V_School_Teacher\n" +
  158 + "where num = #{num} and school_id = #{schoolId}")
  159 + StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId") String schoolId);
  160 +
  161 + @Select("select Top(1)*\n" +
  162 + "from SZ_V_School_Student\n" +
  163 + "where studentcode = #{studentcode} and school_id = #{schoolId}")
  164 + StudentBean getStudentWithstudentcode(@Param("studentcode") String studentcode, @Param("schoolId") String schoolId);
140 } 165 }
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
@@ -165,7 +165,7 @@ public class GateModule { @@ -165,7 +165,7 @@ public class GateModule {
165 165
166 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, 166 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd,
167 int cardStatus, int cardType, int useTimes, int isFirstEnter, 167 int cardStatus, int cardType, int useTimes, int isFirstEnter,
168 - int isValid, String startValidTime, String endValidTime, LLong lLong) { 168 + int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
169 /** 169 /**
170 * 门禁卡记录集信息 170 * 门禁卡记录集信息
171 */ 171 */
@@ -192,8 +192,13 @@ public class GateModule { @@ -192,8 +192,13 @@ public class GateModule {
192 accessCardInfo.sznDoors[0] = 0; 192 accessCardInfo.sznDoors[0] = 0;
193 accessCardInfo.sznDoors[1] = 1; 193 accessCardInfo.sznDoors[1] = 1;
194 accessCardInfo.nTimeSectionNum = 2; // 与门数对应 194 accessCardInfo.nTimeSectionNum = 2; // 与门数对应
195 - accessCardInfo.sznTimeSectionNo[0] = 120; // 表示第一个门全天有效  
196 - accessCardInfo.sznTimeSectionNo[1] = 120; // 表示第二个门全天有效 195 + if (userType.equals("1")){
  196 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效
  197 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效
  198 + }else {
  199 + accessCardInfo.sznTimeSectionNo[0] = 120; // 表示第一个门全天有效
  200 + accessCardInfo.sznTimeSectionNo[1] = 120; // 表示第二个门全天有效
  201 + }
197 202
198 // 卡状态 203 // 卡状态
199 accessCardInfo.emStatus = cardStatus; 204 accessCardInfo.emStatus = cardStatus;
@@ -380,17 +385,19 @@ public class GateModule { @@ -380,17 +385,19 @@ public class GateModule {
380 385
381 // 获取 386 // 获取
382 if (ToolKits.GetDevConfig(lLong, nChannel, strCmd, msg)) { 387 if (ToolKits.GetDevConfig(lLong, nChannel, strCmd, msg)) {
383 - System.out.println("Enable:" + msg.bEnable);  
384 - try {  
385 - System.out.println("自定义名称:" + new String(msg.szName, "utf-8").trim());  
386 - } catch (UnsupportedEncodingException e) {  
387 - e.printStackTrace();  
388 - } 388 +// System.out.println("Enable:" + msg.bEnable);
  389 +// try {
  390 +// System.out.println("自定义名称:" + new String(msg.szName, "utf-8").trim());
  391 +// } catch (UnsupportedEncodingException e) {
  392 +// e.printStackTrace();
  393 +// }
389 for (int i = 0; i < 7; i++) { 394 for (int i = 0; i < 7; i++) {
390 - for (int j = 0; j < 4; j++) {  
391 - System.out.println("dwRecordMask:" + msg.stuTimeWeekDay[i].stuTimeSection[j].dwRecordMask); 395 + for (int j = 0; j < 3; j++) {
  396 +// System.out.println("dwRecordMask:" + msg.stuTimeWeekDay[i].stuTimeSection[j]);
392 System.out.println(msg.stuTimeWeekDay[i].stuTimeSection[j].startTime() + "-" + 397 System.out.println(msg.stuTimeWeekDay[i].stuTimeSection[j].startTime() + "-" +
393 - msg.stuTimeWeekDay[i].stuTimeSection[j].endTime() + "\n"); 398 + msg.stuTimeWeekDay[i].stuTimeSection[j].endTime());
  399 + System.out.println("--------------------------------------------");
  400 +
394 } 401 }
395 } 402 }
396 // 设置 403 // 设置
@@ -514,7 +521,7 @@ public class GateModule { @@ -514,7 +521,7 @@ public class GateModule {
514 521
515 public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, 522 public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
516 int cardStatus, int cardType, int useTimes, int isFirstEnter, 523 int cardStatus, int cardType, int useTimes, int isFirstEnter,
517 - int isValid, String startValidTime, String endValidTime, LLong lLong) { 524 + int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
518 /** 525 /**
519 * 门禁卡记录集信息 526 * 门禁卡记录集信息
520 */ 527 */
@@ -543,8 +550,13 @@ public class GateModule { @@ -543,8 +550,13 @@ public class GateModule {
543 accessCardInfo.sznDoors[0] = 0; 550 accessCardInfo.sznDoors[0] = 0;
544 accessCardInfo.sznDoors[1] = 1; 551 accessCardInfo.sznDoors[1] = 1;
545 accessCardInfo.nTimeSectionNum = 2; // 与门数对应 552 accessCardInfo.nTimeSectionNum = 2; // 与门数对应
546 - accessCardInfo.sznTimeSectionNo[0] = 120; // 表示第一个门全天有效  
547 - accessCardInfo.sznTimeSectionNo[1] = 120; // 表示第二个门全天有效 553 + if (userType.equals("1")){
  554 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效
  555 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效
  556 + }else {
  557 + accessCardInfo.sznTimeSectionNo[0] = 120; // 表示第一个门全天有效
  558 + accessCardInfo.sznTimeSectionNo[1] = 120; // 表示第二个门全天有效
  559 + }
548 560
549 // 卡状态 561 // 卡状态
550 accessCardInfo.emStatus = cardStatus; 562 accessCardInfo.emStatus = cardStatus;
cloud/dahua/src/main/java/com/example/dahua/service/imp/PermissFaceServiceImp.java
@@ -16,9 +16,7 @@ import org.springframework.stereotype.Service; @@ -16,9 +16,7 @@ import org.springframework.stereotype.Service;
16 import org.springframework.util.StringUtils; 16 import org.springframework.util.StringUtils;
17 import org.springframework.web.client.RestTemplate; 17 import org.springframework.web.client.RestTemplate;
18 18
19 -import java.io.File;  
20 -import java.io.FileOutputStream;  
21 -import java.io.IOException; 19 +import java.io.*;
22 import java.net.URI; 20 import java.net.URI;
23 import java.net.URISyntaxException; 21 import java.net.URISyntaxException;
24 import java.util.List; 22 import java.util.List;
@@ -187,18 +185,30 @@ public class PermissFaceServiceImp implements PermissFaceService { @@ -187,18 +185,30 @@ public class PermissFaceServiceImp implements PermissFaceService {
187 for (int i = 0; i < studentBeans.size(); i++) { 185 for (int i = 0; i < studentBeans.size(); i++) {
188 StudentBean studentBean = studentBeans.get(i); 186 StudentBean studentBean = studentBeans.get(i);
189 int schoolId = studentBean.getSchool_id(); 187 int schoolId = studentBean.getSchool_id();
  188 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\Student" + "\\" + studentBean.getStudentcode() + ".png";
  189 + File stuFile = new File(imgPath);
  190 + if (!stuFile.exists())stuFile.createNewFile();
  191 +
  192 + copy(saveImgFile.getAbsolutePath(),imgPath);
  193 +
190 uploadImgs(saveImgFile, schoolId + "", studentBean.getStudentcode(), 2, studentBean.getCard(), studentBean.getName()); 194 uploadImgs(saveImgFile, schoolId + "", studentBean.getStudentcode(), 2, studentBean.getCard(), studentBean.getName());
191 } 195 }
192 196
193 } else { 197 } else {
194 List<TeacherBean> teacherBeans = userDao.getTeaWithUserId(userId); 198 List<TeacherBean> teacherBeans = userDao.getTeaWithUserId(userId);
195 -log.error("教师下发"); 199 + log.error("教师下发");
196 if (null != teacherBeans && teacherBeans.size() > 0) { 200 if (null != teacherBeans && teacherBeans.size() > 0) {
197 201
198 for (int i = 0; i < teacherBeans.size(); i++) { 202 for (int i = 0; i < teacherBeans.size(); i++) {
199 TeacherBean teacherBean = teacherBeans.get(i); 203 TeacherBean teacherBean = teacherBeans.get(i);
200 204
201 String schoolId = teacherBean.getSchool_id(); 205 String schoolId = teacherBean.getSchool_id();
  206 +
  207 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\Teacher" + "\\" + teacherBean.getNum() + ".png";
  208 + File stuFile = new File(imgPath);
  209 + if (!stuFile.exists())stuFile.createNewFile();
  210 + copy(saveImgFile.getAbsolutePath(),imgPath);
  211 +
202 uploadImgs(saveImgFile, schoolId, teacherBean.getNum(), 1, teacherBean.getTeacher_num(), teacherBean.getName()); 212 uploadImgs(saveImgFile, schoolId, teacherBean.getNum(), 1, teacherBean.getTeacher_num(), teacherBean.getName());
203 213
204 } 214 }
@@ -225,6 +235,33 @@ log.error(&quot;教师下发&quot;); @@ -225,6 +235,33 @@ log.error(&quot;教师下发&quot;);
225 return responseBean; 235 return responseBean;
226 } 236 }
227 237
  238 +
  239 + private void copy(String src,String target){
  240 +
  241 + try {
  242 + FileInputStream fileInputStream = new FileInputStream(src);
  243 + FileOutputStream fileOutputStream = new FileOutputStream(target);
  244 +
  245 + byte[] bytes = new byte[1024];
  246 + int length = -1;
  247 + while ((length=fileInputStream.read(bytes))!=0){
  248 +
  249 + fileOutputStream.write(bytes,0,length);
  250 +
  251 + }
  252 +
  253 + fileInputStream.close();
  254 + fileOutputStream.close();
  255 +
  256 + } catch (FileNotFoundException e) {
  257 + e.printStackTrace();
  258 + } catch (IOException e) {
  259 + e.printStackTrace();
  260 + }
  261 +
  262 + }
  263 +
  264 +
228 private void uploadImgs(File saveImgFile, String schoolId, String studentcode, int userType, String card, String name) { 265 private void uploadImgs(File saveImgFile, String schoolId, String studentcode, int userType, String card, String name) {
229 List<AttendanceBean> attendanceBeanList = userDao.getAllDevices(schoolId + ""); 266 List<AttendanceBean> attendanceBeanList = userDao.getAllDevices(schoolId + "");
230 if (null != attendanceBeanList && attendanceBeanList.size() > 0) 267 if (null != attendanceBeanList && attendanceBeanList.size() > 0)
@@ -233,7 +270,7 @@ log.error(&quot;教师下发&quot;); @@ -233,7 +270,7 @@ log.error(&quot;教师下发&quot;);
233 270
234 String clintType = attendanceBean.getClint_type(); 271 String clintType = attendanceBean.getClint_type();
235 //根据设备类型上传人脸 272 //根据设备类型上传人脸
236 - log.error("设备:{}",clintType); 273 + log.error("设备:{}", clintType);
237 if (clintType.equals("18") || clintType.equals("28")) { 274 if (clintType.equals("18") || clintType.equals("28")) {
238 HttpUtils.uploadImg2HK(saveImgFile.getAbsolutePath(), card, name, attendanceBean.getClint_id(), String.valueOf(userType)); 275 HttpUtils.uploadImg2HK(saveImgFile.getAbsolutePath(), card, name, attendanceBean.getClint_id(), String.valueOf(userType));
239 276
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java
@@ -29,7 +29,11 @@ public class UserServiceImp implements UserService { @@ -29,7 +29,11 @@ public class UserServiceImp implements UserService {
29 29
30 if (!StringUtils.isEmpty(devid)) return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid); 30 if (!StringUtils.isEmpty(devid)) return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid);
31 31
32 - return userDao.getAttendanceBeans(schoolId, clint_type); 32 + List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans(schoolId, clint_type);
  33 +
  34 + if (attendanceBeanList.size()==0)attendanceBeanList = userDao.getAttendanceBeans(schoolId,"29");
  35 +
  36 + return attendanceBeanList;
33 } 37 }
34 38
35 @Override 39 @Override
@@ -49,7 +53,9 @@ public class UserServiceImp implements UserService { @@ -49,7 +53,9 @@ public class UserServiceImp implements UserService {
49 @Override 53 @Override
50 public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) { 54 public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) {
51 List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);//获取学校下的大华设备 55 List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);//获取学校下的大华设备
  56 +
52 System.out.println("设备数量:" + attendanceBeans.size()); 57 System.out.println("设备数量:" + attendanceBeans.size());
  58 +
53 UserInfoBean userInfoBean = null; 59 UserInfoBean userInfoBean = null;
54 try { 60 try {
55 if (userType == 2) { 61 if (userType == 2) {
cloud/dahua/src/main/java/com/example/dahua/utils/BaiduUtils.java
@@ -101,8 +101,8 @@ public class BaiduUtils { @@ -101,8 +101,8 @@ public class BaiduUtils {
101 } 101 }
102 } catch (Exception e) { 102 } catch (Exception e) {
103 e.printStackTrace(); 103 e.printStackTrace();
  104 + return false;
104 } 105 }
105 - return true;  
106 } 106 }
107 107
108 /** 108 /**
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java
@@ -75,14 +75,16 @@ public interface SendRecordDao { @@ -75,14 +75,16 @@ public interface SendRecordDao {
75 @Select("select * from Face_SendFail where schoolId = #{schoolId} and userType = #{userType} and deviceID = #{deviceID}") 75 @Select("select * from Face_SendFail where schoolId = #{schoolId} and userType = #{userType} and deviceID = #{deviceID}")
76 List<SendRecordBean> getFaceFails(@Param("userType") int userType, @Param("schoolId") int schoolId, @Param("deviceID") String deviceID); 76 List<SendRecordBean> getFaceFails(@Param("userType") int userType, @Param("schoolId") int schoolId, @Param("deviceID") String deviceID);
77 77
78 - @Insert("insert into Face_Recoder values(#{deviceId},#{user_id},#{name},#{imgurl},#{inOrOut},#{time},#{cardNum})") 78 + @Insert("insert into Face_Recoder values(#{deviceId},#{user_id},#{name},#{imgurl},#{inOrOut},#{time},#{cardNum},#{temp})")
79 void addFaceRecoder(@Param("deviceId") String deviceId, @Param("user_id") String user_id, @Param("name") String name, 79 void addFaceRecoder(@Param("deviceId") String deviceId, @Param("user_id") String user_id, @Param("name") String name,
80 @Param("imgurl") String imgurl, @Param("inOrOut") int inOrOut, @Param("time") String time, 80 @Param("imgurl") String imgurl, @Param("inOrOut") int inOrOut, @Param("time") String time,
81 - @Param("cardNum") String cardNum); 81 + @Param("cardNum") String cardNum,@Param("temp")String temp);
82 82
  83 + @Select("select DISTINCT deviceID from Face_SendFail where schoolId = #{schoolId} ")
  84 + List<String> getDeviceIds(@Param("schoolId") String schoolId);
83 85
84 - @Select("select stu.studentcode from DBLan137.smartcampus.dbo.SZ_V_School_Student as stu where stu.student_num in (select distinct NUM from Face_SendFail where schoolId = 1037 and time > '2020-04-13' and userType = 2)")  
85 - List<String> getStudentCode(); 86 + @Select("select * from Face_SendFail where deviceID = #{deviceID}")
  87 + List<SendRecordBean> getSendFailWithDevId(@Param("deviceID") String deviceId);
86 88
87 } 89 }
88 90
cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java
@@ -479,47 +479,17 @@ public class DahuaApplicationTests { @@ -479,47 +479,17 @@ public class DahuaApplicationTests {
479 @Test 479 @Test
480 public void test1() { 480 public void test1() {
481 481
482 -// List<StudentBean> list = userDao.getStudentUserIdsWith();  
483 -//  
484 -// for (int i = 0; i < list.size(); i++) {  
485 -// StudentBean studentBean = list.get(i);  
486 -// }  
487 -//  
488 -// System.out.println("list:" + list.toString());  
489 -  
490 -// List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans("479","4");  
491 -//  
492 -// for (int i = 0; i < attendanceBeanList.size(); i++) {  
493 -// AttendanceBean attendanceBean = attendanceBeanList.get(i);  
494 -//  
495 -//  
496 -// }  
497 -  
498 - File file = new File("D:\\新七年级\\名字.txt");  
499 -  
500 - try {  
501 - FileReader fileReader = new FileReader(file);  
502 - BufferedReader bufferedReader = new BufferedReader(fileReader);  
503 - List<UserInfoBean> userInfoBeans = userDao.getStuUserInfos();  
504 - String content = null;  
505 - while ((content = bufferedReader.readLine()) != null) {  
506 -  
507 - for (int i = 0; i < userInfoBeans.size(); i++) {  
508 - UserInfoBean userInfoBean = userInfoBeans.get(i);  
509 - if (content.equals(userInfoBean.getName())){  
510 - System.out.println(userInfoBean.getStudentcode()+"\t");  
511 - }  
512 - } 482 + List<StudentBean> studentBeans = userDao.getStus();
  483 + for (int i = 0; i < studentBeans.size(); i++) {
  484 + StudentBean studentBean = studentBeans.get(i);
  485 + System.out.println("studentBean:"+studentBean.toString());
513 486
514 - } 487 + userDao.insertUpdateCard(studentBean.getUser_id(),studentBean.getStudent_id(),studentBean.getStudent_type()+"","2",
  488 + studentBean.getName(),studentBean.getClass_id()+"",studentBean.getClass_name(),studentBean.getStudent_num(),studentBean.getSchool_id()+"",
  489 + "1","1","2020-09-23 11:40:00",studentBean.getSex()+"",studentBean.getStudentcode(),"");
515 490
516 - } catch (FileNotFoundException e) {  
517 - e.printStackTrace();  
518 - } catch (IOException e) {  
519 - e.printStackTrace();  
520 } 491 }
521 492
522 -  
523 } 493 }
524 494
525 495
cloud/fIle-center/ReadMe.md 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +#文件管理服务
  2 +##配置信息
  3 + application.yml配置文件中配置了OSS的各种属性,如果要修改的话,可直接在这里修改;
  4 +
  5 +##实现的接口
  6 + fileUpload1:上传文件,重名的会覆盖;
  7 + fileUpload:上传文件,重名的会在后面加1;
  8 +##配置类
  9 + AliyunOSSConfig类,初始化的时候会调用配置文件中的信息;
  10 + AllowOriginFilter:做跨域处理;
  11 +
  12 +##业务处理类:
  13 + service文件下,类名后面以service结尾的就是抽象方法,以Imp结尾的就是对抽象方法的实现类,做业务处理;
0 \ No newline at end of file 14 \ No newline at end of file
cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java
@@ -80,7 +80,7 @@ public class FileControl { @@ -80,7 +80,7 @@ public class FileControl {
80 } 80 }
81 81
82 82
83 - @RequestMapping(value = "getWord", method = RequestMethod.GET) 83 + /*@RequestMapping(value = "getWord", method = RequestMethod.GET)
84 @ApiOperation("获取21世纪题目") 84 @ApiOperation("获取21世纪题目")
85 @ApiImplicitParams( 85 @ApiImplicitParams(
86 {@ApiImplicitParam(name = "url", value = "链接")} 86 {@ApiImplicitParam(name = "url", value = "链接")}
@@ -106,7 +106,7 @@ public class FileControl { @@ -106,7 +106,7 @@ public class FileControl {
106 return fileService.uploadLocalFile(new File(wordPath), "test"); 106 return fileService.uploadLocalFile(new File(wordPath), "test");
107 107
108 108
109 - } 109 + }*/
110 110
111 111
112 } 112 }
cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java
@@ -43,8 +43,8 @@ public class AliyunOssServiceImpl extends AbstractFileService { @@ -43,8 +43,8 @@ public class AliyunOssServiceImpl extends AbstractFileService {
43 43
44 @Override 44 @Override
45 protected void uploadFile(MultipartFile file, FileInfo fileInfo, String filePath) throws Exception { 45 protected void uploadFile(MultipartFile file, FileInfo fileInfo, String filePath) throws Exception {
46 -// String fileName = UUID.randomUUID().toString()+"."+fileInfo.getName().split("\\.")[1];  
47 - String fileName = fileInfo.getName(); 46 + String fileName = UUID.randomUUID().toString()+"."+fileInfo.getName().split("\\.")[1];
  47 +// String fileName = fileInfo.getName();
48 String keyObjectName = filePath + "/" + fileName; 48 String keyObjectName = filePath + "/" + fileName;
49 49
50 // boolean isExist = ossClient.doesObjectExist(bucketName, keyObjectName); 50 // boolean isExist = ossClient.doesObjectExist(bucketName, keyObjectName);
cloud/haikangface/ReadMe.md 0 → 100644
@@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
  1 +#**服务运行的环境**
  2 +##一、运行需要的基本环境库
  3 + 在C盘放了一个lib文件夹,里面放了服务运行的基础库,每台有海康服务的服务器上都有这个文件;
  4 +
  5 +##二、服务运行的核心库
  6 + 和人脸机直接通信的服务功能全在CMSServer类里面,run方法是服务在运行的时候,会自动执行注册服务、图片服务、报警服务的初始化,
  7 + 分别对应initCMS()、initSS()、initAlarm(),里面的方法不用做修改;
  8 + CMS(注册服务):设备注册该服务的IP和端口,在FRegisterCallBack注册回调接口中接收注册信息,并响应报警服务器和图片服务器的ip和端口;
  9 + HCEHomeSS(图片服务):createImgPath()方法生成图片服务路径,生成后可以下发给人脸机使用;
  10 + initAlarm(报警服务):EHomeMsgCallBack回调方法会监听设备的各种报警信息,目前主要是对人脸识别成功做了记录,其余的方法可以参考PDF文件或者AlarmUtil类;
  11 +
  12 +##三、下发人员信息流程
  13 + CMSServer方法封装了下发的方法,只需要调用就行,xml的字段和格式不需要去改变;
  14 + 直接调用createImgPath() 方法,里面执行了人脸图片路径生成和下发对应卡号的操作;
  15 +
  16 +##四、下发人脸和权限的API接口
  17 + 由于之前图片传的是本地的绝对路径,所以在100服务器上部署了一个接口服务,对应的接口控制器为UserControl,
  18 + UserControl内部有逻辑处理,如果人脸机注册在100服务器上,就会直接对人脸机做下发人脸、报警信息处理等操作,
  19 + 如果没有注册在100服务器上,内部会调用api接口访问253上的接口,253上的服务会对注册的人脸机做响应操作,调用的
  20 + 控制器对应FileControl,这些控制器都在这同一个服务中;
  21 + 下发权限:默认会发全天的权限;
  22 +
  23 +##五、部署到不同服务器中需要注意什么?
  24 + 唯一要注意的就是修改CMSServer服务中的ip_cloud值,改成对应服务的公网ip;
  25 +
  26 +##六、UserControl的主要接口方法
  27 + sendPermiss():下发权限,这个是在最新的人脸一体机和教师点名中使用方式上会用到,注册上来的人脸机设备id会以ytj开头,注意如果出现人脸和权限都下发了的情况还是提示没有权限,那就再发一遍权限,有些机型需要先发人脸再发权限;
  28 + sendUsersAndPermiss():教师点名中用到了这个方法;
  29 + sendToKB():人脸抓拍机会把抓到的人脸信息推送到数据看板,这个用来做测试用;
  30 + sendCardAndImg1():单个下发人脸的接口
  31 + sendFaces():下发学校下所有人脸给指定设备;
  32 + sendErrorFaces():下发失败的人脸;
  33 + sendFaceNotExits():下发学校下还没有下发的人脸给指定设备;
  34 + sendFaceToDevices():下发单个用户给指定设备
  35 + deleteCard():删除人脸
  36 +
  37 +##七、配置信息修改
  38 + application.yaml,该文件下包含了数据库配置、注册中心、数据库文件映射等信息,端口号、服务名也都是在这里修改;
0 \ No newline at end of file 39 \ No newline at end of file
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONArray;
5 import com.alibaba.fastjson.JSONObject; 5 import com.alibaba.fastjson.JSONObject;
6 import com.sincere.haikangface.bean.*; 6 import com.sincere.haikangface.bean.*;
7 -import com.sincere.haikangface.bean.face.BaiduUserInfoBean;  
8 import com.sincere.haikangface.bean.xiaoan.Face_Recoder; 7 import com.sincere.haikangface.bean.xiaoan.Face_Recoder;
9 import com.sincere.haikangface.dao.DeviceDao; 8 import com.sincere.haikangface.dao.DeviceDao;
10 import com.sincere.haikangface.dao.UserDao; 9 import com.sincere.haikangface.dao.UserDao;
@@ -12,7 +11,6 @@ import com.sincere.haikangface.haikanglibs.HCEHomeAlarm; @@ -12,7 +11,6 @@ import com.sincere.haikangface.haikanglibs.HCEHomeAlarm;
12 import com.sincere.haikangface.haikanglibs.HCEHomeCMS; 11 import com.sincere.haikangface.haikanglibs.HCEHomeCMS;
13 import com.sincere.haikangface.haikanglibs.HCEHomeSS; 12 import com.sincere.haikangface.haikanglibs.HCEHomeSS;
14 import com.sincere.haikangface.mqtt.MqtUtils; 13 import com.sincere.haikangface.mqtt.MqtUtils;
15 -import com.sincere.haikangface.mqtt.MqttManager;  
16 import com.sincere.haikangface.utils.*; 14 import com.sincere.haikangface.utils.*;
17 import com.sincere.haikangface.xiananDao.SendRecordDao; 15 import com.sincere.haikangface.xiananDao.SendRecordDao;
18 import com.sun.jna.NativeLong; 16 import com.sun.jna.NativeLong;
@@ -38,13 +36,8 @@ import java.io.*; @@ -38,13 +36,8 @@ import java.io.*;
38 import java.net.InetAddress; 36 import java.net.InetAddress;
39 import java.net.UnknownHostException; 37 import java.net.UnknownHostException;
40 import java.nio.ByteBuffer; 38 import java.nio.ByteBuffer;
41 -import java.text.DecimalFormat;  
42 -import java.text.ParseException;  
43 import java.text.SimpleDateFormat; 39 import java.text.SimpleDateFormat;
44 -import java.util.Date;  
45 -import java.util.HashMap;  
46 -import java.util.List;  
47 -import java.util.Map; 40 +import java.util.*;
48 import java.util.regex.Pattern; 41 import java.util.regex.Pattern;
49 42
50 @Component 43 @Component
@@ -318,23 +311,19 @@ public class CMSServer implements ApplicationRunner { @@ -318,23 +311,19 @@ public class CMSServer implements ApplicationRunner {
318 public class PSS_Storage_Callback implements HCEHomeSS.EHomeSSStorageCallBack { 311 public class PSS_Storage_Callback implements HCEHomeSS.EHomeSSStorageCallBack {
319 312
320 public boolean invoke(NativeLong iHandle, String pFileName, Pointer pFileBuf, int dwFileLen, Pointer pFilePath, Pointer pUser) { 313 public boolean invoke(NativeLong iHandle, String pFileName, Pointer pFileBuf, int dwFileLen, Pointer pFilePath, Pointer pUser) {
321 -// log.error("图片进来:{}", pFileName);  
322 String strPath = "C://EhomePicServer/"; 314 String strPath = "C://EhomePicServer/";
323 -// System.out.println("pFileName:" + pFileName);  
324 FileUtils.getInstance().writeLogs("文件名:" + pFileName, FileUtils.fileName); 315 FileUtils.getInstance().writeLogs("文件名:" + pFileName, FileUtils.fileName);
  316 +
  317 + String isQJFileName = pFileName;//用来判断是否是枪机
  318 +
325 pFileName = pFileName.replace("_", ""); 319 pFileName = pFileName.replace("_", "");
326 - boolean isZhuaPai = false;  
327 - if (pFileName.contains("-")) {//人脸抓拍机抓拍到的图片  
328 - if (!ip.contains("172.16"))  
329 - strPath = "E://wwwhtdocs//SmartCampus//face17e5//School16//Student//";//测试服务器  
330 - pFileName = pFileName.split("T")[0] + ".jpg";  
331 - isZhuaPai = true;  
332 - } 320 +
  321 + if (pFileName.contains("T"))pFileName=pFileName.split("T")[0]+".jpg";
  322 +
  323 + FileUtils.getInstance().writeLogs("文件名pFileName:" + pFileName, FileUtils.fileName);
333 324
334 String strFilePath = strPath + pFileName; 325 String strFilePath = strPath + pFileName;
335 //保存抓拍到的人脸图片,比对通过后的图片资源 326 //保存抓拍到的人脸图片,比对通过后的图片资源
336 -  
337 -// System.out.println("文件保存回调函数:" + strFilePath);  
338 //若此目录不存在,则创建之 327 //若此目录不存在,则创建之
339 File myPath = new File(strPath); 328 File myPath = new File(strPath);
340 if (!myPath.exists()) { 329 if (!myPath.exists()) {
@@ -363,9 +352,16 @@ public class CMSServer implements ApplicationRunner { @@ -363,9 +352,16 @@ public class CMSServer implements ApplicationRunner {
363 buffers.get(bytes); 352 buffers.get(bytes);
364 fout.write(bytes); 353 fout.write(bytes);
365 fout.close(); 354 fout.close();
  355 + if (isQJFileName.contains("T")) {//人脸抓拍机抓拍到的图片
  356 + String deviceId = "";
  357 + int start = isQJFileName.indexOf("01_") + 3;
  358 + int end = isQJFileName.lastIndexOf("_01");
  359 + if (start < end) {
  360 + deviceId = isQJFileName.substring(start, end);
  361 + }
  362 + sendToKB(strFilePathFile, deviceId);
  363 + }
366 364
367 -// if (ip_cloud.equals(ip_cloudQJ))  
368 - sendToKB(strFilePathFile);  
369 365
370 } catch (FileNotFoundException e) { 366 } catch (FileNotFoundException e) {
371 // TODO Auto-generated catch block 367 // TODO Auto-generated catch block
@@ -378,9 +374,9 @@ public class CMSServer implements ApplicationRunner { @@ -378,9 +374,9 @@ public class CMSServer implements ApplicationRunner {
378 374
379 pFilePath.write(0, strFilePath.getBytes(), 0, strFilePath.getBytes().length); 375 pFilePath.write(0, strFilePath.getBytes(), 0, strFilePath.getBytes().length);
380 376
381 - if (isZhuaPai) { 377 +// if (isZhuaPai) {
382 // MqtUtils.getInstance().sendMsg("http://campus.myjxt.com//face17e5/School16/Student/" + pFileName); 378 // MqtUtils.getInstance().sendMsg("http://campus.myjxt.com//face17e5/School16/Student/" + pFileName);
383 - } 379 +// }
384 380
385 return true; 381 return true;
386 } 382 }
@@ -393,11 +389,13 @@ public class CMSServer implements ApplicationRunner { @@ -393,11 +389,13 @@ public class CMSServer implements ApplicationRunner {
393 * 389 *
394 * @param strFilePathFile 390 * @param strFilePathFile
395 */ 391 */
396 - public void sendToKB(File strFilePathFile) { 392 + public void sendToKB(File strFilePathFile, String deviceId) {
397 try { 393 try {
398 394
  395 + String schoolId = userDao.getSchoolIdWithDevId(deviceId);
  396 +
399 log.error("开始识别....."); 397 log.error("开始识别.....");
400 - String url = "http://120.26.116.253:9214/baiduapi/search/16"; 398 + String url = "http://120.26.116.253:9214/baiduapi/search/" + schoolId;
401 399
402 RestTemplate restTemplate = new RestTemplate(); 400 RestTemplate restTemplate = new RestTemplate();
403 401
@@ -415,7 +413,7 @@ public class CMSServer implements ApplicationRunner { @@ -415,7 +413,7 @@ public class CMSServer implements ApplicationRunner {
415 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); 413 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
416 414
417 String face = jsonObject.getString("data"); 415 String face = jsonObject.getString("data");
418 - if (face.startsWith("face")||face.startsWith("pic")) return; 416 + if (face.startsWith("face") || face.startsWith("pic")) return;
419 417
420 JSONObject data = jsonObject.getJSONObject("data"); 418 JSONObject data = jsonObject.getJSONObject("data");
421 String error_msg = data.getString("error_msg"); 419 String error_msg = data.getString("error_msg");
@@ -441,11 +439,11 @@ public class CMSServer implements ApplicationRunner { @@ -441,11 +439,11 @@ public class CMSServer implements ApplicationRunner {
441 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 439 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
442 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); 440 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder();
443 baiduFaceRecorder.setName(teacherBean.getName()); 441 baiduFaceRecorder.setName(teacherBean.getName());
444 - baiduFaceRecorder.setScore(sc+""); 442 + baiduFaceRecorder.setScore(sc + "");
445 baiduFaceRecorder.setTime(time); 443 baiduFaceRecorder.setTime(time);
446 baiduFaceRecorder.setUserImgUrl(teacherBean.getFace()); 444 baiduFaceRecorder.setUserImgUrl(teacherBean.getFace());
447 - baiduFaceRecorder.setUploadImgUrl(strFilePathFile.getAbsolutePath().contains(date)?  
448 - "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id="+strFilePathFile.getName().substring(0,strFilePathFile.getName().indexOf(date)):strFilePathFile.getAbsolutePath()); 445 + baiduFaceRecorder.setUploadImgUrl(strFilePathFile.getAbsolutePath().contains(date) ?
  446 + "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + strFilePathFile.getName().substring(0, strFilePathFile.getName().indexOf(date)) : strFilePathFile.getAbsolutePath());
449 baiduFaceRecorder.setUserId(user_id); 447 baiduFaceRecorder.setUserId(user_id);
450 userDao.insertBaiduFaceRecorder(baiduFaceRecorder); 448 userDao.insertBaiduFaceRecorder(baiduFaceRecorder);
451 449
@@ -455,26 +453,26 @@ public class CMSServer implements ApplicationRunner { @@ -455,26 +453,26 @@ public class CMSServer implements ApplicationRunner {
455 if (userMap.containsKey(user_id)) { 453 if (userMap.containsKey(user_id)) {
456 454
457 long value = userMap.get(user_id); 455 long value = userMap.get(user_id);
458 - if ((System.currentTimeMillis() - value) / 1000 > 6) { 456 + if ((System.currentTimeMillis() - value) / 1000 > 60) {
459 userMap.put(user_id, System.currentTimeMillis()); 457 userMap.put(user_id, System.currentTimeMillis());
460 - MqtUtils.getInstance().sendMsg("09EA8EB5142F2964", 1, teacherBean.toString()); 458 + send2DeviceIds(schoolId, teacherBean);
461 log.error("发送成功....."); 459 log.error("发送成功.....");
462 } 460 }
463 461
464 } else { 462 } else {
465 userMap.put(user_id, System.currentTimeMillis()); 463 userMap.put(user_id, System.currentTimeMillis());
466 - MqtUtils.getInstance().sendMsg("09EA8EB5142F2964", 1, teacherBean.toString()); 464 + send2DeviceIds(schoolId, teacherBean);
467 log.error("发送成功....."); 465 log.error("发送成功.....");
468 } 466 }
469 467
470 // strFilePathFile.deleteOnExit(); 468 // strFilePathFile.deleteOnExit();
471 } else { 469 } else {
472 System.out.println("用户身份信息不存在"); 470 System.out.println("用户身份信息不存在");
473 - sendNoPersonImg(strFilePathFile); 471 + sendNoPersonImg(strFilePathFile,schoolId);
474 } 472 }
475 } else { 473 } else {
476 System.out.println("用户身份信息不存在" + score); 474 System.out.println("用户身份信息不存在" + score);
477 - sendNoPersonImg(strFilePathFile); 475 + sendNoPersonImg(strFilePathFile,schoolId);
478 } 476 }
479 477
480 } 478 }
@@ -490,12 +488,29 @@ public class CMSServer implements ApplicationRunner { @@ -490,12 +488,29 @@ public class CMSServer implements ApplicationRunner {
490 488
491 } 489 }
492 490
493 - private void sendNoPersonImg(File strFilePathFile) { 491 + private void send2DeviceIds(String schoolId, TeacherBean teacherBean) {
  492 +
  493 + List<String> deviceIds = userDao.getKBDevices(schoolId);
  494 + if (deviceIds != null)
  495 + for (int i = 0; i < deviceIds.size(); i++) {
  496 + String deviceId = deviceIds.get(i);
  497 + if (!StringUtils.isEmpty(deviceId))
  498 + MqtUtils.getInstance().sendMsg(deviceId, 1, teacherBean.toString());
  499 + }
  500 +
  501 + }
  502 +
  503 + private void sendNoPersonImg(File strFilePathFile, String schoolId) {
  504 + List<String> deviceIds = userDao.getKBDevices(schoolId);
494 String imgName = strFilePathFile.getName(); 505 String imgName = strFilePathFile.getName();
495 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); 506 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
496 if (imgName.contains(date)) { 507 if (imgName.contains(date)) {
497 String imgId = imgName.substring(0, imgName.indexOf(date)); 508 String imgId = imgName.substring(0, imgName.indexOf(date));
498 - MqtUtils.getInstance().sendMsg("09EA8EB5142F2964", 2, "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + imgId); 509 + for (int i = 0; i < deviceIds.size(); i++) {
  510 + String deviceId = deviceIds.get(i);
  511 + if (!StringUtils.isEmpty(deviceId))
  512 + MqtUtils.getInstance().sendMsg(deviceId, 2, "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + imgId);
  513 + }
499 } 514 }
500 } 515 }
501 516
@@ -568,7 +583,7 @@ public class CMSServer implements ApplicationRunner { @@ -568,7 +583,7 @@ public class CMSServer implements ApplicationRunner {
568 // System.out.println(strXML); 583 // System.out.println(strXML);
569 // log.error("报警监听:{}", strXML); 584 // log.error("报警监听:{}", strXML);
570 if (null == alarmUtils) { 585 if (null == alarmUtils) {
571 - alarmUtils = new AlarmUtils(deviceDao,userDao); 586 + alarmUtils = new AlarmUtils(deviceDao, userDao);
572 alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() { 587 alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() {
573 @Override 588 @Override
574 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { 589 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
@@ -578,7 +593,6 @@ public class CMSServer implements ApplicationRunner { @@ -578,7 +593,6 @@ public class CMSServer implements ApplicationRunner {
578 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 593 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
579 break; 594 break;
580 case "0x426"://人证设备在线 595 case "0x426"://人证设备在线
581 -  
582 break; 596 break;
583 case "0x427"://人证设备离线 597 case "0x427"://人证设备离线
584 map.remove(deviceID); 598 map.remove(deviceID);
@@ -639,10 +653,10 @@ public class CMSServer implements ApplicationRunner { @@ -639,10 +653,10 @@ public class CMSServer implements ApplicationRunner {
639 if (!TextUtils.isEmpty(currTemperature)) {//只有有温度的才存记录 653 if (!TextUtils.isEmpty(currTemperature)) {//只有有温度的才存记录
640 userDao.addWGTem(studentBean.getUser_id(), studentBean.getStudent_id(), studentBean.getName(), studentBean.getClass_id() + "", 654 userDao.addWGTem(studentBean.getUser_id(), studentBean.getStudent_id(), studentBean.getName(), studentBean.getClass_id() + "",
641 studentBean.getClass_name(), currTemperature, studentBean.getStudent_type() + "", studentBean.getSchool_id() + "", time); 655 studentBean.getClass_name(), currTemperature, studentBean.getStudent_type() + "", studentBean.getSchool_id() + "", time);
642 -  
643 - sendRecordDao.addFaceRecoder(face_recoder.getDeviceId(), face_recoder.getUser_id(), face_recoder.getName(),  
644 - face_recoder.getImgurl(), face_recoder.getInOrOut(), face_recoder.getTime(), face_recoder.getCardNum(), currTemperature);  
645 } 656 }
  657 + //记录签到成功的流水
  658 + sendRecordDao.addFaceRecoder(face_recoder.getDeviceId(), face_recoder.getUser_id(), face_recoder.getName(),
  659 + face_recoder.getImgurl(), face_recoder.getInOrOut(), face_recoder.getTime(), face_recoder.getCardNum(), currTemperature);
646 } else { 660 } else {
647 //教师点名 661 //教师点名
648 isTeacher(cardNo, deviceID); 662 isTeacher(cardNo, deviceID);
@@ -673,7 +687,7 @@ public class CMSServer implements ApplicationRunner { @@ -673,7 +687,7 @@ public class CMSServer implements ApplicationRunner {
673 public void isTeacher(String cardNo, String deviceID) { 687 public void isTeacher(String cardNo, String deviceID) {
674 688
675 List<String> devLists = userDao.getDeviceRoomRelation(deviceID); 689 List<String> devLists = userDao.getDeviceRoomRelation(deviceID);
676 - log.error("cardNo:{},devLists{}", cardNo, devLists); 690 +// log.error("cardNo:{},devLists{}", cardNo, devLists);
677 691
678 if (null != devLists && devLists.size() > 0) { 692 if (null != devLists && devLists.size() > 0) {
679 693
@@ -813,7 +827,7 @@ public class CMSServer implements ApplicationRunner { @@ -813,7 +827,7 @@ public class CMSServer implements ApplicationRunner {
813 "</CardCfg>\r\n" + 827 "</CardCfg>\r\n" +
814 "</ConfigXML>\r\n" + 828 "</ConfigXML>\r\n" +
815 "</Params>"; 829 "</Params>";
816 - System.out.println("strConfigXMLCard:" + strConfigXMLCard + name + nameAfter); 830 +// System.out.println("strConfigXMLCard:" + strConfigXMLCard + name + nameAfter);
817 byte[] nameBeforBy = null; 831 byte[] nameBeforBy = null;
818 byte[] resultBy = null; 832 byte[] resultBy = null;
819 try { 833 try {
@@ -861,10 +875,10 @@ public class CMSServer implements ApplicationRunner { @@ -861,10 +875,10 @@ public class CMSServer implements ApplicationRunner {
861 int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); 875 int iErr = hCEhomeCMS.NET_ECMS_GetLastError();
862 if (validTimeEnabled == 0) System.err.println("删除卡号失败,错误号:" + iErr + "card:" + card); 876 if (validTimeEnabled == 0) System.err.println("删除卡号失败,错误号:" + iErr + "card:" + card);
863 else System.err.println("下发卡号失败,错误号:" + iErr + "card:" + card); 877 else System.err.println("下发卡号失败,错误号:" + iErr + "card:" + card);
864 - if (iErr == 10) map.remove(deviceId); 878 +// if (iErr == 10) map.remove(deviceId);
865 } else { 879 } else {
866 if (validTimeEnabled == 0) System.out.println("删除卡号成功"); 880 if (validTimeEnabled == 0) System.out.println("删除卡号成功");
867 - else System.out.println("下发卡号成功"); 881 + else System.out.println("下发卡号成功:"+name);
868 } 882 }
869 883
870 } 884 }
@@ -1015,7 +1029,7 @@ public class CMSServer implements ApplicationRunner { @@ -1015,7 +1029,7 @@ public class CMSServer implements ApplicationRunner {
1015 } else { 1029 } else {
1016 stringXMLOut.read(); 1030 stringXMLOut.read();
1017 String strOutXML = new String(stringXMLOut.byString).trim(); 1031 String strOutXML = new String(stringXMLOut.byString).trim();
1018 - System.out.println(content + "成功:" + strOutXML); 1032 + System.out.println(content + "成功:" + card);
1019 } 1033 }
1020 } 1034 }
1021 return false; 1035 return false;
cloud/haikangface/src/main/java/com/sincere/haikangface/Test.java 0 → 100644
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +package com.sincere.haikangface;
  2 +
  3 +import java.io.File;
  4 +import java.io.IOException;
  5 +
  6 +public class Test {
  7 +
  8 + public static void main(String[] args){
  9 + String strPath = "C://EhomePicServer/";
  10 + String img = "5EA6FC3BC6C6285812F92A68CB43F4F52020-09-27T16:01:59A08:00_01_qj111111_01.jpg";
  11 + String isQJFileName = img;//用来判断是否是枪机
  12 +
  13 + img = img.split("T")[0];
  14 +// img = img.substring(img.indexOf("01_")+3,img.lastIndexOf("_01"));
  15 + String strFilePath = strPath + img;
  16 + //保存抓拍到的人脸图片,比对通过后的图片资源
  17 + //若此目录不存在,则创建之
  18 + File myPath = new File(strPath);
  19 + if (!myPath.exists()) {
  20 + myPath.mkdir();
  21 + System.out.println("创建文件夹路径为:" + strPath);
  22 + }
  23 +
  24 + File strFilePathFile = new File(strFilePath);
  25 + System.out.println("strFilePath:" + strFilePath);
  26 + if (!strFilePathFile.exists()) {
  27 + try {
  28 + strFilePathFile.createNewFile();
  29 + } catch (IOException e) {
  30 + e.printStackTrace();
  31 + }
  32 + }
  33 +
  34 + if (img.contains("T")) {//人脸抓拍机抓拍到的图片
  35 + String deviceId = "";
  36 + int start = img.indexOf("01_") + 3;
  37 + int end = img.lastIndexOf("_01");
  38 + if (start < end) {
  39 + deviceId = img.substring(start, end);
  40 + }
  41 + System.out.println("deviceId:"+deviceId+"isQJFileName:"+isQJFileName.replace("_",""));
  42 + }
  43 +
  44 +
  45 +
  46 + }
  47 +
  48 +}
cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java
@@ -83,15 +83,15 @@ public class FileControl { @@ -83,15 +83,15 @@ public class FileControl {
83 long time = System.currentTimeMillis(); 83 long time = System.currentTimeMillis();
84 // if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png"); 84 // if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png");
85 if (new File(filePath.trim()).exists()) { 85 if (new File(filePath.trim()).exists()) {
86 - String targetPath = FileUtils.picPathComp + new File(filePath).getName().replace(".png", ".jpg"); 86 + String targetPath = FileUtils.picPathComp + new File(filePath).getName();
87 87
88 try { 88 try {
89 CompressPic.CompressPic(filePath, targetPath); 89 CompressPic.CompressPic(filePath, targetPath);
90 } catch (Exception e) { 90 } catch (Exception e) {
91 e.printStackTrace(); 91 e.printStackTrace();
92 } 92 }
93 - File targetFile = new File(targetPath);  
94 - System.out.println("targetPath:" + targetFile.exists() + targetFile.getAbsolutePath()); 93 +// File targetFile = new File(targetPath);
  94 +// System.out.println("targetPath:" + targetFile.exists() + targetFile.getAbsolutePath());
95 try { 95 try {
96 int isPiliang = 0;//0:批量,1:单张 96 int isPiliang = 0;//0:批量,1:单张
97 if (filePath.contains("face17e50")) {//批量发送 97 if (filePath.contains("face17e50")) {//批量发送
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java
@@ -3,13 +3,10 @@ package com.sincere.haikangface.control; @@ -3,13 +3,10 @@ package com.sincere.haikangface.control;
3 //import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; 3 //import com.sincere.common.dto.smartCampus.SZ_AttendanceDto;
4 4
5 import com.alibaba.fastjson.JSON; 5 import com.alibaba.fastjson.JSON;
6 -import com.sincere.haikangface.bean.Images2Ddevices; 6 +import com.sincere.haikangface.bean.*;
7 //import com.sincere.haikangface.utils.BaiduApiUtiols; 7 //import com.sincere.haikangface.utils.BaiduApiUtiols;
8 import com.sincere.haikangface.CMSServer; 8 import com.sincere.haikangface.CMSServer;
9 import com.sincere.haikangface.async.SendUserAsync; 9 import com.sincere.haikangface.async.SendUserAsync;
10 -import com.sincere.haikangface.bean.StudentBean;  
11 -import com.sincere.haikangface.bean.StudentInfo;  
12 -import com.sincere.haikangface.bean.TeacherBean;  
13 import com.sincere.haikangface.bean.face.PermissionBean; 10 import com.sincere.haikangface.bean.face.PermissionBean;
14 import com.sincere.haikangface.bean.face.UserAndPermission; 11 import com.sincere.haikangface.bean.face.UserAndPermission;
15 import com.sincere.haikangface.dao.UserDao; 12 import com.sincere.haikangface.dao.UserDao;
@@ -21,22 +18,17 @@ import io.swagger.annotations.ApiImplicitParam; @@ -21,22 +18,17 @@ import io.swagger.annotations.ApiImplicitParam;
21 import io.swagger.annotations.ApiImplicitParams; 18 import io.swagger.annotations.ApiImplicitParams;
22 import io.swagger.annotations.ApiOperation; 19 import io.swagger.annotations.ApiOperation;
23 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
24 -import org.apache.poi.util.StringUtil;  
25 import org.slf4j.Logger; 21 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory; 22 import org.slf4j.LoggerFactory;
27 import org.springframework.beans.factory.annotation.Autowired; 23 import org.springframework.beans.factory.annotation.Autowired;
28 import org.springframework.http.MediaType; 24 import org.springframework.http.MediaType;
29 import org.springframework.util.StringUtils; 25 import org.springframework.util.StringUtils;
30 import org.springframework.web.bind.annotation.*; 26 import org.springframework.web.bind.annotation.*;
31 -import org.springframework.web.client.RestTemplate;  
32 import org.springframework.web.multipart.MultipartFile; 27 import org.springframework.web.multipart.MultipartFile;
33 28
34 import java.io.*; 29 import java.io.*;
35 import java.text.SimpleDateFormat; 30 import java.text.SimpleDateFormat;
36 -import java.util.ArrayList;  
37 -import java.util.Calendar;  
38 -import java.util.Date;  
39 -import java.util.List; 31 +import java.util.*;
40 32
41 @RestController 33 @RestController
42 @RequestMapping(value = "/facereco/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 34 @RequestMapping(value = "/facereco/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -67,7 +59,7 @@ public class UserControl { @@ -67,7 +59,7 @@ public class UserControl {
67 @ApiOperation("下发权限给设备") 59 @ApiOperation("下发权限给设备")
68 public boolean sendPermiss(@RequestBody PermissionBean permissionBean) { 60 public boolean sendPermiss(@RequestBody PermissionBean permissionBean) {
69 log.error("permissionBean:{}", JSON.toJSONString(permissionBean)); 61 log.error("permissionBean:{}", JSON.toJSONString(permissionBean));
70 - FileUtils.getInstance().writeLogs("传入权限模板:"+JSON.toJSONString(permissionBean),"设置权限内容.txt"); 62 + FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt");
71 if (!StringUtils.isEmpty(permissionBean.getDeviceIds())) { 63 if (!StringUtils.isEmpty(permissionBean.getDeviceIds())) {
72 // List<String> cardNumList = userDao.getStudentCardsWidthSchoolId(permissionBean.getSchoolId()); 64 // List<String> cardNumList = userDao.getStudentCardsWidthSchoolId(permissionBean.getSchoolId());
73 return sendUserAsync.sendPermiss(permissionBean, 0); 65 return sendUserAsync.sendPermiss(permissionBean, 0);
@@ -100,9 +92,9 @@ public class UserControl { @@ -100,9 +92,9 @@ public class UserControl {
100 92
101 @RequestMapping(value = "sendToKB", method = RequestMethod.GET) 93 @RequestMapping(value = "sendToKB", method = RequestMethod.GET)
102 @ApiOperation("发送数据到看板") 94 @ApiOperation("发送数据到看板")
103 - public void sendToKB(@RequestParam("filePath") String filePath) { 95 + public void sendToKB(@RequestParam("filePath") String filePath, @RequestParam("deviceid") String deviceid) {
104 try { 96 try {
105 - cmsServer.sendToKB(new File(filePath)); 97 + cmsServer.sendToKB(new File(filePath), deviceid);
106 } catch (Exception e) { 98 } catch (Exception e) {
107 e.printStackTrace(); 99 e.printStackTrace();
108 } 100 }
@@ -313,6 +305,139 @@ public class UserControl { @@ -313,6 +305,139 @@ public class UserControl {
313 305
314 } 306 }
315 307
  308 +
  309 + @RequestMapping(value = "sendErrorFaces", method = RequestMethod.GET)
  310 + @ApiOperation(value = "下发失败的人脸", notes = "下发失败的人脸")
  311 + @ApiImplicitParams({
  312 + @ApiImplicitParam(name = "deviceid", required = false),
  313 + @ApiImplicitParam(name = "userType", required = false),
  314 + @ApiImplicitParam(name = "schoolId", required = true)
  315 + })
  316 + public void sendErrorFaces(String schoolId, String deviceid, String userType) {
  317 +
  318 + System.out.println("schoolId:" + schoolId + "---deviceid:" + deviceid + "---userType:" + userType);
  319 + if (StringUtils.isEmpty(userType)) userType = "0";//不传的话就默认失败表中的类型
  320 + if (!StringUtils.isEmpty(deviceid)) {
  321 + sendFace(deviceid, Integer.parseInt(userType));
  322 + } else {
  323 + List<String> deviceIds = sendRecordDao.getDeviceIds(schoolId);
  324 +
  325 + if (null != deviceIds) {
  326 + for (int j = 0; j < deviceIds.size(); j++) {
  327 + String deviceId = deviceIds.get(j);
  328 + sendFace(deviceId, Integer.parseInt(userType));
  329 + }
  330 + }
  331 + }
  332 +
  333 +
  334 + }
  335 +
  336 +
  337 + private void sendFace(String deviceId, int userType) {
  338 +
  339 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getSendFailWithDevId(deviceId);
  340 + if (null != sendRecordBeans) {
  341 +
  342 + for (int i = 0; i < sendRecordBeans.size(); i++) {
  343 +
  344 + SendRecordBean sendRecordBean = sendRecordBeans.get(i);
  345 + String typeName = "";
  346 + if (userType == 0) {
  347 + typeName = sendRecordBean.getUserType() == 1 ? "Teacher" : "Student";
  348 + } else {
  349 + typeName = userType == 1 ? "Teacher" : "Student";
  350 + }
  351 + String studentCode = "";
  352 +
  353 + if (sendRecordBean.getUserType() == 1) {
  354 + studentCode = userDao.getTeaNumWithCard(sendRecordBean.getNum());
  355 + } else if (sendRecordBean.getUserType() == 2) {
  356 + studentCode = userDao.getStudentCode(sendRecordBean.getNum());
  357 + }
  358 +
  359 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + sendRecordBean.getSchoolId() + "\\" + typeName + "\\" + studentCode + ".png";
  360 + File imgFile = new File(imgPath);
  361 + if (imgFile.exists()) {
  362 + String targetPath = FileUtils.picPathComp + imgFile.getName();
  363 + try {
  364 + CompressPic.CompressPic(imgFile.getAbsolutePath(), targetPath);
  365 + } catch (Exception e) {
  366 + e.printStackTrace();
  367 + }
  368 + sendImg(imgPath, targetPath, sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getUserType() + "");
  369 + } else {
  370 + System.out.println("文件不存在");
  371 + }
  372 + }
  373 +
  374 + }
  375 +
  376 + }
  377 +
  378 +
  379 + @RequestMapping(value = "sendFaceNotExits", method = RequestMethod.GET)
  380 + @ApiOperation(value = "下发学校下还没有下发的人脸给指定设备", notes = "下发学校下还没有下发的人脸给指定设备")
  381 + public void sendFaceNotExits(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) {
  382 +
  383 + String typeName = userType.equals("1") ? "Teacher" : "Student";
  384 +
  385 + String imgPath = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  386 +
  387 + File imgPathFile = new File(imgPath);//目录
  388 +
  389 + String[] deviceIdsStr = deviceIds.split(",");
  390 +
  391 +
  392 + if (imgPathFile.exists()) {
  393 + File[] imgfiles = imgPathFile.listFiles();
  394 + if (null != imgfiles) {
  395 +
  396 + for (int i = 0; i < imgfiles.length; i++) {
  397 + File file = imgfiles[i];//图片
  398 + String targetPath = FileUtils.picPathComp + file.getName();
  399 + try {
  400 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath);
  401 + } catch (Exception e) {
  402 + e.printStackTrace();
  403 + }
  404 + if (file.exists())
  405 + for (int j = 0; j < deviceIdsStr.length; j++) {
  406 + String deviceId = deviceIdsStr[j];
  407 +
  408 + StudentBean studentBean = null;
  409 + String card = "", name = "";
  410 + if (userType.equals("1")) {
  411 + studentBean = userDao.getTeacherWithstudentcode(file.getName().split("\\.")[0], schoolId);
  412 + if (null != studentBean) {
  413 + card = studentBean.getTeacher_num();
  414 + name = studentBean.getName();
  415 + }
  416 + } else if (userType.equals("2")) {
  417 + studentBean = userDao.getStudentWithstudentcode(file.getName().split("\\.")[0], schoolId);
  418 + if (null != studentBean) {
  419 + card = studentBean.getStudent_num();
  420 + name = studentBean.getName();
  421 + }
  422 + }
  423 +
  424 + if (!StringUtils.isEmpty(card)) {
  425 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getFaceSendSucess(card, deviceId);
  426 + if (sendRecordBeans == null || sendRecordBeans.size() == 0)
  427 + sendImg(file.getAbsolutePath(), targetPath, deviceId, card, name, userType);
  428 + else System.out.println("人脸已经下发");
  429 + }
  430 +
  431 + }
  432 +
  433 + }
  434 +
  435 + }
  436 + }
  437 +
  438 + }
  439 +
  440 +
316 @RequestMapping(value = "sendFaceToDevices", method = RequestMethod.GET) 441 @RequestMapping(value = "sendFaceToDevices", method = RequestMethod.GET)
317 @ApiOperation(value = "下发单个用户给指定设备", notes = "下发单个用户给指定设备") 442 @ApiOperation(value = "下发单个用户给指定设备", notes = "下发单个用户给指定设备")
318 @ApiImplicitParams({@ApiImplicitParam(name = "deviceIds", value = "设备id用逗号,拼接"), 443 @ApiImplicitParams({@ApiImplicitParam(name = "deviceIds", value = "设备id用逗号,拼接"),
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
@@ -216,7 +216,7 @@ public interface UserDao { @@ -216,7 +216,7 @@ public interface UserDao {
216 "where num = #{num} and school_id = #{schoolId}") 216 "where num = #{num} and school_id = #{schoolId}")
217 StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId") String schoolId); 217 StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId") String schoolId);
218 218
219 - @Select("select school_id from SZ_Attendance where clint_id = #{devId}") 219 + @Select("select top(1) school_id from SZ_Attendance where clint_id = #{devId}")
220 String getSchoolIdWithDevId(@Param("devId") String devId); 220 String getSchoolIdWithDevId(@Param("devId") String devId);
221 221
222 @Insert("insert into CW_StuTemperatureReocrd values (#{UserId},#{StudentId},#{Name},#{ClassId},#{ClassName},#{Temperature},#{Type},#{SchoolId},#{Intime})") 222 @Insert("insert into CW_StuTemperatureReocrd values (#{UserId},#{StudentId},#{Name},#{ClassId},#{ClassName},#{Temperature},#{Type},#{SchoolId},#{Intime})")
@@ -236,6 +236,9 @@ public interface UserDao { @@ -236,6 +236,9 @@ public interface UserDao {
236 @Select("select student_num from SZ_V_School_Student where user_id = #{userId}") 236 @Select("select student_num from SZ_V_School_Student where user_id = #{userId}")
237 String getStudentCardWithUserId(@Param("userId") String userId); 237 String getStudentCardWithUserId(@Param("userId") String userId);
238 238
  239 + @Select("select Top(1) studentcode from SZ_V_School_Student where student_num = #{num}")
  240 + String getStudentCode(@Param("num") String num);
  241 +
239 @Select("select Top(1) * from SZ_V_School_Teacher where user_id = #{userId} and teacher_num<>''") 242 @Select("select Top(1) * from SZ_V_School_Teacher where user_id = #{userId} and teacher_num<>''")
240 TeacherBean getTeacherWithUserId(@Param("userId") String userId); 243 TeacherBean getTeacherWithUserId(@Param("userId") String userId);
241 244
@@ -250,4 +253,9 @@ public interface UserDao { @@ -250,4 +253,9 @@ public interface UserDao {
250 253
251 void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder); 254 void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder);
252 255
  256 + @Select("select top(1) num from SZ_V_School_Teacher where teacher_num=#{num}")
  257 + String getTeaNumWithCard(@Param("num") String num);
  258 +
  259 + @Select("select clint_id from SZ_Attendance where clint_type in(8,9,10) and school_id = #{schoolId}")
  260 + List<String> getKBDevices(@Param("schoolId") String schoolId);
253 } 261 }
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java
@@ -46,19 +46,19 @@ public class AlarmUtils { @@ -46,19 +46,19 @@ public class AlarmUtils {
46 } 46 }
47 47
48 public void deleAlarm(String strXML) { 48 public void deleAlarm(String strXML) {
49 - System.out.println("人脸抓拍机:" + strXML); 49 +// System.out.println("人脸抓拍机:" + strXML);
50 if (strXML.contains("FACESNAPREPORT")) {//人脸抓拍机器 50 if (strXML.contains("FACESNAPREPORT")) {//人脸抓拍机器
51 51
52 // System.out.println("人脸抓拍机:" + strXML); 52 // System.out.println("人脸抓拍机:" + strXML);
53 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); 53 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder();
54 baiduFaceRecorder.setUploadImgUrl(strXML); 54 baiduFaceRecorder.setUploadImgUrl(strXML);
55 baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 55 baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
56 - userDao.insertBaiduFaceRecorder(baiduFaceRecorder);  
57 56
58 String deviceId = strXML.substring(strXML.indexOf("DeviceID"),strXML.lastIndexOf("DeviceID")).trim(); 57 String deviceId = strXML.substring(strXML.indexOf("DeviceID"),strXML.lastIndexOf("DeviceID")).trim();
59 deviceId = deviceId.replace("DeviceID>",""); 58 deviceId = deviceId.replace("DeviceID>","");
60 deviceId = deviceId.replace("</",""); 59 deviceId = deviceId.replace("</","");
61 60
  61 + userDao.insertBaiduFaceRecorder(baiduFaceRecorder);
62 // if (null != alarmCallBack) 62 // if (null != alarmCallBack)
63 // alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature); 63 // alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature);
64 64
@@ -245,9 +245,11 @@ public class AlarmUtils { @@ -245,9 +245,11 @@ public class AlarmUtils {
245 switch (minorType) { 245 switch (minorType) {
246 case "0x3a"://网络断开 246 case "0x3a"://网络断开
247 content = "网络断开"; 247 content = "网络断开";
  248 + FileUtils.getInstance().writeLogs("网络断开:"+deviceID,"设备网络.txt");
248 break; 249 break;
249 case "0x400"://设备上电启动 250 case "0x400"://设备上电启动
250 content = "设备上电启动"; 251 content = "设备上电启动";
  252 + FileUtils.getInstance().writeLogs("设备上电启动:"+deviceID,"设备网络.txt");
251 break; 253 break;
252 case "0x401"://设备掉电关闭 254 case "0x401"://设备掉电关闭
253 content = "设备掉电关闭"; 255 content = "设备掉电关闭";
@@ -266,6 +268,8 @@ public class AlarmUtils { @@ -266,6 +268,8 @@ public class AlarmUtils {
266 break; 268 break;
267 case "0x407"://网络恢复 269 case "0x407"://网络恢复
268 content = "网络恢复"; 270 content = "网络恢复";
  271 + if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", "");
  272 + FileUtils.getInstance().writeLogs("网络恢复:"+deviceID,"设备网络.txt");
269 break; 273 break;
270 case "0x421"://摄像头未连接 274 case "0x421"://摄像头未连接
271 content = "摄像头未连接"; 275 content = "摄像头未连接";
@@ -274,12 +278,14 @@ public class AlarmUtils { @@ -274,12 +278,14 @@ public class AlarmUtils {
274 content = "摄像头连接恢复"; 278 content = "摄像头连接恢复";
275 break; 279 break;
276 case "0x426"://人证设备在线 280 case "0x426"://人证设备在线
  281 + FileUtils.getInstance().writeLogs("人证设备在线:"+deviceID,"设备网络.txt");
277 content = "人证设备在线"; 282 content = "人证设备在线";
278 if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); 283 if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", "");
279 break; 284 break;
280 case "0x427"://人证设备离线 285 case "0x427"://人证设备离线
281 content = "人证设备离线"; 286 content = "人证设备离线";
282 if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); 287 if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", "");
  288 + FileUtils.getInstance().writeLogs("人证设备离线:"+deviceID,"设备网络.txt");
283 break; 289 break;
284 } 290 }
285 saveWater(content, minorType, deviceID, "", time, "0x02"); 291 saveWater(content, minorType, deviceID, "", time, "0x02");
cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
@@ -115,7 +115,12 @@ public interface SendRecordDao { @@ -115,7 +115,12 @@ public interface SendRecordDao {
115 void deleteARecords(@Param("customerId") String customerId, @Param("systime") String systime); 115 void deleteARecords(@Param("customerId") String customerId, @Param("systime") String systime);
116 116
117 117
118 - @Select("select * from Face_SendSuccess where schoolId = 4 and time < '2020-05-06'")  
119 - List<SendRecordBean> getFaceSendSucess(); 118 + @Select("select * from Face_SendSuccess where Num = #{Num} and deviceID = #{deviceID}")
  119 + List<SendRecordBean> getFaceSendSucess(@Param("Num")String Num,@Param("deviceID")String deviceID);
120 120
  121 + @Select("select * from Face_SendFail where deviceID = #{deviceID}")
  122 + List<SendRecordBean> getSendFailWithDevId(@Param("deviceID") String deviceId);
  123 +
  124 + @Select("select DISTINCT deviceID from Face_SendFail where schoolId = #{schoolId} ")
  125 + List<String> getDeviceIds(@Param("schoolId") String schoolId);
121 } 126 }
cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java
@@ -40,7 +40,7 @@ public class MyRunnerableInt implements ApplicationRunner { @@ -40,7 +40,7 @@ public class MyRunnerableInt implements ApplicationRunner {
40 40
41 @Override 41 @Override
42 public void run(ApplicationArguments args) throws Exception { 42 public void run(ApplicationArguments args) throws Exception {
43 -// initMqConsumer(); 43 + initMqConsumer();
44 } 44 }
45 45
46 /** 46 /**
cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java
@@ -85,7 +85,7 @@ public class MypulsarApplicationTests { @@ -85,7 +85,7 @@ public class MypulsarApplicationTests {
85 85
86 } 86 }
87 87
88 - private String closeModel = "{\"mode\":\"0\",\"power\":\"0\",\"remote_id\":\"%s\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}"; 88 + private String closeModel = "{\"mode\":\"0\",\"power\":\"1\",\"remote_id\":\"%s\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}";
89 89
90 90
91 private void closeAllDevice() { 91 private void closeAllDevice() {
@@ -96,11 +96,9 @@ public class MypulsarApplicationTests { @@ -96,11 +96,9 @@ public class MypulsarApplicationTests {
96 String deviceId = deviceIds.get(i).getClint_id(); 96 String deviceId = deviceIds.get(i).getClint_id();
97 String conValue = getRemoteId(deviceDao.getConBeValue(deviceId)); 97 String conValue = getRemoteId(deviceDao.getConBeValue(deviceId));
98 String devName = deviceIds.get(i).getName(); 98 String devName = deviceIds.get(i).getName();
99 -// System.out.println("closeModel:" + closeModel);  
100 String con = String.format(closeModel, conValue); 99 String con = String.format(closeModel, conValue);
101 -// System.out.println("con:" + con);  
102 -  
103 - HttpUtil.addAirCode(con, deviceId, devName); 100 +// if (deviceId.equals("22000203ecfabcace679"))
  101 + HttpUtil.addAirCode(con, deviceId, devName);
104 } 102 }
105 103
106 104
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <!-- <module>weigeng</module>--> 41 <!-- <module>weigeng</module>-->
42 <!-- <module>independence</module>--> 42 <!-- <module>independence</module>-->
43 <module>quartz</module> 43 <module>quartz</module>
44 - <!-- <module>zkAttendance</module>--> 44 + <module>zkAttendance</module>
45 <module>user_search</module> 45 <module>user_search</module>
46 <module>fIle-center</module> 46 <module>fIle-center</module>
47 <module>RibbonConsume</module> 47 <module>RibbonConsume</module>
cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java
1 -//package com.sincere.quartz.job;  
2 -//  
3 -//import com.sincere.quartz.third.yixueyun.YXYReadService;  
4 -//import com.sincere.quartz.third.yixueyun.YXYWriteService;  
5 -//import org.springframework.beans.factory.annotation.Autowired;  
6 -//import org.springframework.scheduling.annotation.Scheduled;  
7 -//import org.springframework.stereotype.Service;  
8 -//  
9 -///**  
10 -// * @author chen  
11 -// * @version 1.0  
12 -// * @date 2019/12/24 0024 10:54  
13 -// */  
14 -//@Service  
15 -//public class SyncJob {  
16 -//  
17 -// @Autowired  
18 -// YXYWriteService yxyWriteService ;  
19 -//  
20 -// @Autowired  
21 -// YXYReadService yxyReadService ;  
22 -//  
23 -// @Scheduled(cron = "30 1 22 * * ? ")  
24 -// public void Sync(){  
25 -// //翼校通的同步 之后还有钉钉的同步等等  
26 -// yxyReadService.sync();  
27 -// yxyWriteService.sync();  
28 -// }  
29 -//} 1 +package com.sincere.quartz.job;
  2 +
  3 +import com.sincere.quartz.third.yixueyun.YXYReadService;
  4 +import com.sincere.quartz.third.yixueyun.YXYWriteService;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.scheduling.annotation.Scheduled;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +/**
  10 + * @author chen
  11 + * @version 1.0
  12 + * @date 2019/12/24 0024 10:54
  13 + */
  14 +@Service
  15 +public class SyncJob {
  16 +
  17 + @Autowired
  18 + YXYWriteService yxyWriteService ;
  19 +
  20 + @Autowired
  21 + YXYReadService yxyReadService ;
  22 +
  23 + @Scheduled(cron = "30 1 22 * * ? ")
  24 + public void Sync(){
  25 + //翼校通的同步 之后还有钉钉的同步等等
  26 + yxyReadService.sync();
  27 + yxyWriteService.sync();
  28 + }
  29 +}
cloud/zkAttendance/pom.xml
@@ -37,6 +37,14 @@ @@ -37,6 +37,14 @@
37 <artifactId>commons-lang3</artifactId> 37 <artifactId>commons-lang3</artifactId>
38 <version>3.3.2</version> 38 <version>3.3.2</version>
39 </dependency> 39 </dependency>
  40 + <dependency>
  41 + <groupId>org.springframework.boot</groupId>
  42 + <artifactId>spring-boot-starter-web</artifactId>
  43 + </dependency>
  44 +<!-- <dependency>-->
  45 +<!-- <groupId>org.apache.tomcat.embed</groupId>-->
  46 +<!-- <artifactId>tomcat-embed-core</artifactId>-->
  47 +<!-- </dependency>-->
40 </dependencies> 48 </dependencies>
41 49
42 <dependencyManagement> 50 <dependencyManagement>
@@ -75,7 +83,7 @@ @@ -75,7 +83,7 @@
75 <configuration> 83 <configuration>
76 <archive> 84 <archive>
77 <manifest> 85 <manifest>
78 - <mainClass>com.sincere.quartz.QuartzApplication</mainClass> 86 + <mainClass>com.sincere.att.AttApplication</mainClass>
79 <addClasspath>true</addClasspath> 87 <addClasspath>true</addClasspath>
80 <classpathPrefix>lib/</classpathPrefix> 88 <classpathPrefix>lib/</classpathPrefix>
81 </manifest> 89 </manifest>
cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java
@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; @@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5 import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 5 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
6 import org.springframework.cloud.openfeign.EnableFeignClients; 6 import org.springframework.cloud.openfeign.EnableFeignClients;
  7 +import org.springframework.context.annotation.Configuration;
7 8
8 /** 9 /**
9 * @author chen 10 * @author chen
@@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; @@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
13 @EnableFeignClients(basePackages = "com.sincere.att.feign") 14 @EnableFeignClients(basePackages = "com.sincere.att.feign")
14 @EnableEurekaClient 15 @EnableEurekaClient
15 @SpringBootApplication 16 @SpringBootApplication
  17 +@Configuration
16 public class AttApplication { 18 public class AttApplication {
17 19
18 // public static void main(String[] args) { 20 // public static void main(String[] args) {
cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java
1 package com.sincere.att; 1 package com.sincere.att;
2 2
3 -import io.swagger.annotations.ApiOperation;  
4 import org.springframework.context.annotation.Bean; 3 import org.springframework.context.annotation.Bean;
5 import org.springframework.context.annotation.Configuration; 4 import org.springframework.context.annotation.Configuration;
6 import springfox.documentation.builders.ApiInfoBuilder; 5 import springfox.documentation.builders.ApiInfoBuilder;
cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
@@ -40,80 +40,86 @@ public class AttPushController { @@ -40,80 +40,86 @@ public class AttPushController {
40 private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo); 40 private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo);
41 41
42 private static Map<String, List<String>> cmdMap = new HashMap<>(); 42 private static Map<String, List<String>> cmdMap = new HashMap<>();
43 - private static Map<String , Integer> cmdOrderMap = new HashMap<>(); 43 + private static Map<String, Integer> cmdOrderMap = new HashMap<>();
44 44
45 - private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f" ;  
46 - private static String account = "yueqingzhijiao" ; 45 + private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f";
  46 + private static String account = "yueqingzhijiao";
47 47
48 48
49 @Autowired 49 @Autowired
50 ScFeign scFeign; 50 ScFeign scFeign;
51 51
52 @Autowired 52 @Autowired
53 - XaFeign xaFeign ; 53 + XaFeign xaFeign;
54 54
55 - @RequestMapping(value = "sendUser" , method = RequestMethod.GET)  
56 - public void sendUser(int roomId){ 55 + @RequestMapping(value = "sendUser", method = RequestMethod.GET)
  56 + public void sendUser(int roomId) {
57 JSONObject object = new JSONObject(); 57 JSONObject object = new JSONObject();
58 - object.put("pageIndex",1);  
59 - object.put("roomId",roomId);  
60 - object.put("pageSize",9999);  
61 - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString());  
62 - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ;  
63 - List<String> order = new ArrayList<>(); 58 + object.put("pageIndex", 1);
  59 + object.put("roomId", roomId);
  60 + object.put("pageSize", 9999);
  61 + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString());
  62 + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList");
64 List<String> attendanceList = scFeign.selectRoomAttendance(roomId); 63 List<String> attendanceList = scFeign.selectRoomAttendance(roomId);
65 - for(String attendance : attendanceList){  
66 - for(int i = 0 ; i < array.size() ; i++){ 64 + System.out.println("设备数量:" + JSONObject.toJSONString(attendanceList));
  65 + for (String attendance : attendanceList) {
  66 + List<String> order = new ArrayList<>();
  67 + for (int i = 0; i < array.size(); i++) {
67 JSONObject student = (JSONObject) array.get(i); 68 JSONObject student = (JSONObject) array.get(i);
68 UserOrderVo vo = new UserOrderVo(); 69 UserOrderVo vo = new UserOrderVo();
69 vo.setStudentId((Integer) student.get("studentid")); 70 vo.setStudentId((Integer) student.get("studentid"));
70 vo.setStudentName((String) student.get("name")); 71 vo.setStudentName((String) student.get("name"));
71 - int number = 1 ;  
72 - try{  
73 - number = cmdOrderMap.get(attendance) ;  
74 - }catch (Exception e){ 72 + int number = 1;
  73 + try {
  74 + number = cmdOrderMap.get(attendance);
  75 + } catch (Exception e) {
75 76
76 } 77 }
77 vo.setNumber(number); 78 vo.setNumber(number);
78 - number++ ;  
79 - cmdOrderMap.put(attendance,number) ;  
80 - if(vo.getStudentId() != 0){  
81 - order.add(vo.toString()); 79 + number++;
  80 + cmdOrderMap.put(attendance, number);
  81 + if (vo.getStudentId() != 0) {
  82 +// if (vo.getStudentId() == 72196){
  83 + //todo:测试专用
  84 + if (!order.contains(vo.toString())){
  85 + order.add(vo.toString());
  86 + }
  87 +// }
82 } 88 }
83 } 89 }
84 - cmdMap.put(attendance,order); 90 + cmdMap.put(attendance, order);
85 } 91 }
86 } 92 }
87 93
88 - @RequestMapping(value = "sendFinger" , method = RequestMethod.GET)  
89 - public void sendFinger(int roomId){ 94 + @RequestMapping(value = "sendFinger", method = RequestMethod.GET)
  95 + public void sendFinger(int roomId) {
90 JSONObject object = new JSONObject(); 96 JSONObject object = new JSONObject();
91 - object.put("PageIndex",1);  
92 - object.put("roomId",roomId);  
93 - object.put("pageSize",9999);  
94 - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString());  
95 - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ;  
96 - List<String> order = new ArrayList<>(); 97 + object.put("PageIndex", 1);
  98 + object.put("roomId", roomId);
  99 + object.put("pageSize", 9999);
  100 + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString());
  101 + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList");
97 List<String> attendanceList = scFeign.selectRoomAttendance(roomId); 102 List<String> attendanceList = scFeign.selectRoomAttendance(roomId);
98 - for(String attendance : attendanceList){  
99 - for(int i = 0 ; i < array.size() ; i++){ 103 + for (String attendance : attendanceList) {
  104 + List<String> order = new ArrayList<>();
  105 + for (int i = 0; i < array.size(); i++) {
100 JSONObject student = (JSONObject) array.get(i); 106 JSONObject student = (JSONObject) array.get(i);
101 FingerOrderVo vo = new FingerOrderVo(); 107 FingerOrderVo vo = new FingerOrderVo();
102 - int number = 1 ;  
103 - try{  
104 - number = cmdOrderMap.get(attendance) ;  
105 - }catch (Exception e){ 108 + int number = 1;
  109 + try {
  110 + number = cmdOrderMap.get(attendance);
  111 + } catch (Exception e) {
106 112
107 } 113 }
108 vo.setNumber(number); 114 vo.setNumber(number);
109 - vo.setOrder(xaFeign.selectFinger((Integer)student.get("studentid")));  
110 - number++ ;  
111 - cmdOrderMap.put(attendance,number) ;  
112 - if(StringUtils.isNotBlank(vo.getOrder())){ 115 + vo.setOrder(xaFeign.selectFinger((Integer) student.get("studentid")));
  116 + number++;
  117 + cmdOrderMap.put(attendance, number);
  118 + if (StringUtils.isNotBlank(vo.getOrder())) {
113 order.add(vo.toString()); 119 order.add(vo.toString());
114 } 120 }
115 } 121 }
116 - cmdMap.put(attendance,order); 122 + cmdMap.put(attendance, order);
117 } 123 }
118 } 124 }
119 125
@@ -121,29 +127,29 @@ public class AttPushController { @@ -121,29 +127,29 @@ public class AttPushController {
121 * 1,设备通完电以后第一个发送到后台的请求 127 * 1,设备通完电以后第一个发送到后台的请求
122 * 格式为 /iclock/cdata?options=all&language=xxxx&pushver=xxxx 128 * 格式为 /iclock/cdata?options=all&language=xxxx&pushver=xxxx
123 */ 129 */
124 - @RequestMapping(value="/cdata",params = {"options","language","pushver"},method = RequestMethod.GET)  
125 - public void init(String SN, String options, String language, String pushver, HttpServletRequest request ,  
126 - @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response){ 130 + @RequestMapping(value = "/cdata", params = {"options", "language", "pushver"}, method = RequestMethod.GET)
  131 + public void init(String SN, String options, String language, String pushver, HttpServletRequest request,
  132 + @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response) {
127 try { 133 try {
128 - if(cmdMap.get(SN) == null){ 134 + if (cmdMap.get(SN) == null) {
129 System.out.println("设备上线:" + SN); 135 System.out.println("设备上线:" + SN);
130 - cmdMap.put(SN,new ArrayList<>());  
131 - cmdOrderMap.put(SN,1); 136 + cmdMap.put(SN, new ArrayList<>());
  137 + cmdOrderMap.put(SN, 1);
132 } 138 }
133 - if(scFeign.selectAttendaceWithId(SN) == null){ 139 + if (scFeign.selectAttendaceWithId(SN) == null) {
134 SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto(); 140 SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto();
135 attendanceDto.setClint_id(SN); 141 attendanceDto.setClint_id(SN);
136 attendanceDto.setClint_type("24"); 142 attendanceDto.setClint_type("24");
137 attendanceDto.setIp(request.getRemoteAddr()); 143 attendanceDto.setIp(request.getRemoteAddr());
138 attendanceDto.setPort(request.getRemotePort()); 144 attendanceDto.setPort(request.getRemotePort());
139 - attendanceDto.setIntime(DateUtils.date2String(new Date(),DateUtils.format2)); 145 + attendanceDto.setIntime(DateUtils.date2String(new Date(), DateUtils.format2));
140 attendanceDto.setSchool_id("-1"); 146 attendanceDto.setSchool_id("-1");
141 attendanceDto.setState(1); 147 attendanceDto.setState(1);
142 scFeign.insertAttendance(attendanceDto); 148 scFeign.insertAttendance(attendanceDto);
143 - }else { 149 + } else {
144 scFeign.updateAttendance(SN); 150 scFeign.updateAttendance(SN);
145 } 151 }
146 - String initOptions = initOptions(SN,PushOptionsFlag); 152 + String initOptions = initOptions(SN, PushOptionsFlag);
147 response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求 153 response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求
148 } catch (IOException e) { 154 } catch (IOException e) {
149 e.printStackTrace(); 155 e.printStackTrace();
@@ -154,19 +160,19 @@ public class AttPushController { @@ -154,19 +160,19 @@ public class AttPushController {
154 * 2,心跳请求,会从服务器拿到命令返回 给设备 160 * 2,心跳请求,会从服务器拿到命令返回 给设备
155 */ 161 */
156 @RequestMapping("/getrequest") 162 @RequestMapping("/getrequest")
157 - public void heartBeat(String SN, HttpServletResponse response){ 163 + public void heartBeat(String SN, HttpServletResponse response) {
158 scFeign.updateAttendance(SN); 164 scFeign.updateAttendance(SN);
159 StringBuffer sb = new StringBuffer("OK"); 165 StringBuffer sb = new StringBuffer("OK");
160 - List<String> cmds = cmdMap.get(SN);  
161 - if(cmds==null){//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0 166 + List<String> cmds = cmdMap.get(SN);
  167 + if (cmds == null) {//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0
162 System.out.println("设备上线:" + SN); 168 System.out.println("设备上线:" + SN);
163 cmds = new ArrayList<>(); 169 cmds = new ArrayList<>();
164 - cmdMap.put(SN,cmds);  
165 - cmdOrderMap.put(SN,1); 170 + cmdMap.put(SN, cmds);
  171 + cmdOrderMap.put(SN, 1);
166 } 172 }
167 - if(cmds!=null&&cmds.size()>0){  
168 - sb.setLength(0);//如果有命令就不返回OK了  
169 - cmds.stream().forEach(cmd->sb.append(cmd).append("\r\n\r\n")); 173 + if (cmds != null && cmds.size() > 0) {
  174 + sb.setLength(0);//如果有命令就不返回OK了
  175 + cmds.stream().forEach(cmd -> sb.append(cmd).append("\r\n\r\n"));
170 176
171 } 177 }
172 try { 178 try {
@@ -183,8 +189,8 @@ public class AttPushController { @@ -183,8 +189,8 @@ public class AttPushController {
183 * 这个请求,服务器只能返回OK,不可以返回命令 189 * 这个请求,服务器只能返回OK,不可以返回命令
184 */ 190 */
185 @RequestMapping("/ping") 191 @RequestMapping("/ping")
186 - public void ping(HttpServletResponse response){  
187 - System.out.println("考勤机心跳请求大量进来了......ping"+new SimpleDateFormat("HH:mm:ss").format(new Date())); 192 + public void ping(HttpServletResponse response) {
  193 + System.out.println("考勤机心跳请求大量进来了......ping" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
188 try { 194 try {
189 response.getWriter().write("OK"); 195 response.getWriter().write("OK");
190 } catch (IOException e) { 196 } catch (IOException e) {
@@ -196,20 +202,35 @@ public class AttPushController { @@ -196,20 +202,35 @@ public class AttPushController {
196 * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果 202 * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果
197 */ 203 */
198 @RequestMapping("/devicecmd") 204 @RequestMapping("/devicecmd")
199 - public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response){ 205 + public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response) {
200 //判断data 清空map 206 //判断data 清空map
201 List<String> cmdList = cmdMap.get(SN); 207 List<String> cmdList = cmdMap.get(SN);
  208 + System.out.println("----请求设备:" + SN+"ssssss:"+(cmdList==null?"false":"true"));
202 String[] returnList = data.split("\n"); 209 String[] returnList = data.split("\n");
203 - if(returnList.length > 0 && cmdList.size() > 0){  
204 - for(String message : returnList){  
205 - String number = message.substring(message.indexOf("=")+1,message.indexOf("&"));  
206 - String result = message.substring(message.indexOf("=",message.indexOf("&"))+1,message.indexOf("&",message.indexOf("&")+1));  
207 - if(result.equals("0")){ 210 + if (returnList.length > 0 && cmdList.size() > 0) {
  211 + for (String message : returnList) {
  212 + String number = message.substring(message.indexOf("=") + 1, message.indexOf("&"));
  213 + String result = message.substring(message.indexOf("=", message.indexOf("&")) + 1, message.indexOf("&", message.indexOf("&") + 1));
  214 + if (result.equals("0")) {
  215 + /*for (int i = 0; i < cmdList.size(); i++) {
  216 +
  217 + String b = cmdList.get(i);
  218 +// if (null==b)System.out.println("内容为空:"+i);
  219 +// else System.out.println("内容为:"+b+"----number:"+number);
  220 + if (b.contains("C:"+number)) {
  221 + Log_orderSuccess.info("指令成功=========="+b);
  222 + }
  223 +
  224 + }
  225 + cmdList.clear();*/
208 Iterator<String> it = cmdList.iterator(); 226 Iterator<String> it = cmdList.iterator();
209 while (((Iterator) it).hasNext()) { 227 while (((Iterator) it).hasNext()) {
210 String b = it.next(); 228 String b = it.next();
211 - if (b.contains("C:"+number)) {  
212 - Log_orderSuccess.info("指令成功=========="+b); 229 +// if (b.contains("72196"))
  230 +// System.out.println("下发指令==========" + b + "----设备id:" + SN);
  231 + if (b.contains("C:" + number)) {
  232 + Log_orderSuccess.info("指令成功==========" + b);
  233 + System.out.println( "----设备id:" + SN+"======指令成功==========" + b);
213 it.remove(); 234 it.remove();
214 } 235 }
215 } 236 }
@@ -232,22 +253,22 @@ public class AttPushController { @@ -232,22 +253,22 @@ public class AttPushController {
232 request.setCharacterEncoding("gbk"); 253 request.setCharacterEncoding("gbk");
233 String data = ""; 254 String data = "";
234 ByteArrayOutputStream bos = null; 255 ByteArrayOutputStream bos = null;
235 - byte[] b= new byte[1024]; 256 + byte[] b = new byte[1024];
236 try { 257 try {
237 InputStream is = request.getInputStream(); 258 InputStream is = request.getInputStream();
238 bos = new ByteArrayOutputStream(); 259 bos = new ByteArrayOutputStream();
239 int len = 0; 260 int len = 0;
240 - while((len=is.read(b))!=-1){  
241 - bos.write(b,0,len); 261 + while ((len = is.read(b)) != -1) {
  262 + bos.write(b, 0, len);
242 } 263 }
243 - data = new String(bos.toByteArray(),"gbk"); 264 + data = new String(bos.toByteArray(), "gbk");
244 } catch (IOException e) { 265 } catch (IOException e) {
245 e.printStackTrace(); 266 e.printStackTrace();
246 } 267 }
247 - if("ATTLOG".equals(table)){ 268 + if ("ATTLOG".equals(table)) {
248 String[] list = data.split("\t"); 269 String[] list = data.split("\t");
249 String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0])); 270 String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0]));
250 - if(StringUtils.isNotBlank(cardNo)){ 271 + if (StringUtils.isNotBlank(cardNo)) {
251 String cardNo10 = new BigInteger(cardNo, 16).toString(); 272 String cardNo10 = new BigInteger(cardNo, 16).toString();
252 //考勤日志 273 //考勤日志
253 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 274 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -262,20 +283,20 @@ public class AttPushController { @@ -262,20 +283,20 @@ public class AttPushController {
262 String jsonResult = JSON.toJSONString(attendanceInfoBean); 283 String jsonResult = JSON.toJSONString(attendanceInfoBean);
263 String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY"; 284 String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY";
264 JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult); 285 JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult);
265 - if ((int) jsonObject.get("status") == 1){ 286 + if ((int) jsonObject.get("status") == 1) {
266 Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); 287 Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo);
267 - }else { 288 + } else {
268 Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); 289 Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString());
269 } 290 }
270 - }else { 291 + } else {
271 System.out.println(cardNo); 292 System.out.println(cardNo);
272 } 293 }
273 } 294 }
274 - if("OPERLOG".equals(table)){ 295 + if ("OPERLOG".equals(table)) {
275 //操作日志 296 //操作日志
276 - if(data.substring(0,3).contains("FP")){ 297 + if (data.substring(0, 3).contains("FP")) {
277 //添加指纹 298 //添加指纹
278 - String studentId = data.substring(data.indexOf("=")+1,data.indexOf("\t",data.indexOf("="))); 299 + String studentId = data.substring(data.indexOf("=") + 1, data.indexOf("\t", data.indexOf("=")));
279 String order = data.substring(3); 300 String order = data.substring(3);
280 FingerDto fingerDto = new FingerDto(); 301 FingerDto fingerDto = new FingerDto();
281 fingerDto.setOrderMsg(order); 302 fingerDto.setOrderMsg(order);
@@ -291,40 +312,54 @@ public class AttPushController { @@ -291,40 +312,54 @@ public class AttPushController {
291 } 312 }
292 } 313 }
293 314
294 - public static void main(String[] args){  
295 - String cardNo = "FF013E0F" ;  
296 - String SN = "A4JS174260624" ;  
297 - String cardNo10 = new BigInteger(cardNo, 16).toString();  
298 - //考勤日志  
299 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
300 - String info = String.format("<AttendanceInfo submitTime=\"%s\"><Info device=\"%s\" card=\"%s\" operTime=\"%s\" direc=\"%s\"></Info></AttendanceInfo>",  
301 - simpleDateFormat.format(new Date()), SN, cardNo10, DateUtils.date2String(new Date(),DateUtils.format2), "-1");  
302 - AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean();  
303 - attendanceInfoBean.setInfo(info);  
304 - attendanceInfoBean.setIsControl(0);  
305 - attendanceInfoBean.setPwd(pwd);  
306 - attendanceInfoBean.setUsername(account); 315 + public static void main(String[] args) {
  316 + /*JSONObject object = new JSONObject();
  317 + object.put("pageIndex",1);
  318 + object.put("roomId","13299");
  319 + object.put("pageSize",9999);
  320 + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString());
  321 + JSONObject data = result.getJSONObject("data");
  322 + JSONArray roomList = data.getJSONArray("roomList");
  323 + for (int i = 0; i < roomList.size(); i++) {
  324 + String name = roomList.getJSONObject(i).getString("name");
  325 + String studentId = roomList.getJSONObject(i).getString("studentid");
  326 + System.out.println(name+","+studentId);
  327 + }*/
307 328
308 - String jsonResult = JSON.toJSONString(attendanceInfoBean);  
309 - String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY";  
310 - JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult);  
311 - if ((int) jsonObject.get("status") == 1){  
312 - Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo);  
313 - }else {  
314 - Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString());  
315 - }  
316 - } 329 + String cardNo = "FF013E0F";
  330 + String SN = "A4JS174260624";
  331 + String cardNo10 = new BigInteger(cardNo, 16).toString();
  332 + //考勤日志
  333 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  334 + String info = String.format("<AttendanceInfo submitTime=\"%s\"><Info device=\"%s\" card=\"%s\" operTime=\"%s\" direc=\"%s\"></Info></AttendanceInfo>",
  335 + simpleDateFormat.format(new Date()), SN, cardNo10, DateUtils.date2String(new Date(), DateUtils.format2), "-1");
  336 + AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean();
  337 + attendanceInfoBean.setInfo(info);
  338 + attendanceInfoBean.setIsControl(0);
  339 + attendanceInfoBean.setPwd(pwd);
  340 + attendanceInfoBean.setUsername(account);
  341 +
  342 + String jsonResult = JSON.toJSONString(attendanceInfoBean);
  343 + String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY";
  344 + JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult);
  345 + if ((int) jsonObject.get("status") == 1) {
  346 + Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo);
  347 + } else {
  348 + Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString());
  349 + }
  350 + }
317 351
318 352
319 /** 353 /**
320 * 设备通电以后连接到服务器,需要返回的初始化参数 354 * 设备通电以后连接到服务器,需要返回的初始化参数
  355 + *
321 * @param sn 356 * @param sn
322 * @param PushOptionsFlag 357 * @param PushOptionsFlag
323 * @return 358 * @return
324 */ 359 */
325 - private String initOptions(String sn,String PushOptionsFlag) { 360 + private String initOptions(String sn, String PushOptionsFlag) {
326 StringBuffer devOptions = new StringBuffer(); 361 StringBuffer devOptions = new StringBuffer();
327 - devOptions.append("GET OPTION FROM: "+sn); 362 + devOptions.append("GET OPTION FROM: " + sn);
328 // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp") 363 // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp")
329 devOptions.append("\nATTLOGStamp=0"); 364 devOptions.append("\nATTLOGStamp=0");
330 devOptions.append("\nOPERLOGStamp=0"); 365 devOptions.append("\nOPERLOGStamp=0");
@@ -348,9 +383,8 @@ public class AttPushController { @@ -348,9 +383,8 @@ public class AttPushController {
348 // 11 工作号码 383 // 11 工作号码
349 // 12 比对照片 384 // 12 比对照片
350 devOptions.append("\nTransFlag=111111111111");// 1-12二进制位 分别代表以上含义 385 devOptions.append("\nTransFlag=111111111111");// 1-12二进制位 分别代表以上含义
351 - System.out.println("PushOptionsFlag============="+PushOptionsFlag);  
352 - if (PushOptionsFlag!=null&&PushOptionsFlag.equals("1"))  
353 - { 386 + System.out.println("PushOptionsFlag=============" + PushOptionsFlag);
  387 + if (PushOptionsFlag != null && PushOptionsFlag.equals("1")) {
354 // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926 388 // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926
355 devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56"); 389 devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56");
356 } 390 }
cloud/zkAttendance/src/main/resources/application.yaml
@@ -12,5 +12,6 @@ eureka: @@ -12,5 +12,6 @@ eureka:
12 lease-renewal-interval-in-seconds: 10 12 lease-renewal-interval-in-seconds: 10
13 client: 13 client:
14 service-url: 14 service-url:
15 - defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ 15 +# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
  16 + defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/
16 17