Commit 3d2b122faed2614a9b03468034b6c58e6b45a68e
1 parent
191a8018
Exists in
master
人脸抓拍机实现
Showing
34 changed files
with
896 additions
and
320 deletions
Show diff stats
... | ... | @@ -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 | 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 | 66 | public void run(ApplicationArguments args) throws Exception { |
67 | 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 | 73 | // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess()); |
74 | 74 | } |
... | ... | @@ -205,7 +205,11 @@ public class MyTask implements ApplicationRunner { |
205 | 205 | lLongMap.put(deviceId, loginHandleLong); |
206 | 206 | isHasNewDevice = true; |
207 | 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 | 213 | DeviceInfoBean deviceInfoBean = new DeviceInfoBean(); |
210 | 214 | deviceInfoBean.setDevcieId(deviceId); |
211 | 215 | deviceInfoBean.setDeviceIp(pIp); |
... | ... | @@ -232,9 +236,9 @@ public class MyTask implements ApplicationRunner { |
232 | 236 | if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) { |
233 | 237 | for (DeviceInfoBean dev : |
234 | 238 | deviceInfoBeans) { |
235 | -// FileUtils.getInstance().writeLogs(dev.getDevcieId() + "------" + lLongMap.get(dev.getDevcieId()), FileUtils.device_login); | |
236 | 239 | if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { |
237 | 240 | NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); |
241 | +// System.out.println("监听成功:"+dev.getDevcieId()); | |
238 | 242 | if (lLong.intValue() != -1) { |
239 | 243 | deviceInfoBeans.remove(dev); |
240 | 244 | } |
... | ... | @@ -291,10 +295,10 @@ public class MyTask implements ApplicationRunner { |
291 | 295 | snapPicPath = snapPicPath.replace("FaceRecoder", "image"); |
292 | 296 | if (cardBean.getType() == 0) {//老师 |
293 | 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 | 299 | } else if (cardBean.getType() == 2) {//学生 |
296 | 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 | 63 | |
64 | 64 | private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径 |
65 | 65 | |
66 | - // @Scheduled(fixedRate = 5000) | |
66 | + @Scheduled(fixedRate = 5000) | |
67 | 67 | private void sendErrorInfo() throws InterruptedException { |
68 | - System.out.println("---------------------------sendErrorInfo:"); | |
68 | +// System.out.println("---------------------------sendErrorInfo:"); | |
69 | 69 | // System.out.println("定时任务执行中...."); |
70 | 70 | deleteFaceImg(); |
71 | 71 | |
... | ... | @@ -76,13 +76,13 @@ public class MyScheduledTask { |
76 | 76 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH"); |
77 | 77 | int hour = Integer.parseInt(simpleDateFormat.format(new Date())); |
78 | 78 | |
79 | - if (hour >= 9 && hour < 11) { | |
79 | + /* if (hour >= 9 && hour < 11) { | |
80 | 80 | dealData(); |
81 | 81 | } else if (hour >= 13 && hour < 14) { |
82 | 82 | dealData(); |
83 | 83 | } else if (hour >= 20 || hour < 5) { |
84 | 84 | dealData(); |
85 | - } | |
85 | + }*/ | |
86 | 86 | |
87 | 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 | 267 | Memory memory = null;//图片缓存 |
268 | 268 | try { |
269 | 269 | String targPath = FilePath.picPathComp + userInfoBean.getStudentcode() + ".jpg"; |
270 | -// String targPath = "C:\\Users\\taohandong\\Desktop\\comp\\"+userInfoBean.getStudentcode()+".jpg"; | |
271 | 270 | if (new File(picSrc).exists()) |
272 | 271 | CompressPic.CompressPic(picSrc, targPath, userInfoBean.getStudentcode());//压缩后的图片 |
273 | 272 | memory = ToolKits.readPictureFile(targPath); |
274 | 273 | sendRecordBean.setImgPath(picSrc); |
275 | -// System.out.println("下发学生信息:" + "targPath:" + new File(targPath).exists() + targPath + " userInfoBean:" + userInfoBean); | |
276 | 274 | } catch (Exception e) { |
277 | 275 | e.printStackTrace(); |
278 | 276 | } |
279 | 277 | |
280 | 278 | for (AttendanceBean attendanceBean : |
281 | 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 | 285 | sendRecordBean.setDeviceID(attendanceBean.getClint_id()); |
288 | 286 | sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id())); |
289 | 287 | sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
... | ... | @@ -299,7 +297,6 @@ public class SendUserInfoTask { |
299 | 297 | // System.out.println("loginHandleLong:" + loginHandleLong + MyTask.lLongMap.toString() + " 设备ID:" + attendanceBean.getClint_id()); |
300 | 298 | // System.out.println("loginHandleLong:" +loginHandleLong); |
301 | 299 | if (loginHandleLong == null) { |
302 | - | |
303 | 300 | FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); |
304 | 301 | String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id()); |
305 | 302 | sendRecordBean.setFailType(2); |
... | ... | @@ -315,7 +312,7 @@ public class SendUserInfoTask { |
315 | 312 | String cardNum = cardNo(student_num); |
316 | 313 | if (bCardFlags != -1) {//修改卡信息 |
317 | 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 | 316 | userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id()); |
320 | 317 | bFaceFalgs = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong); |
321 | 318 | //卡号添加成功,但是人脸不成功的话,就需要新增人脸 |
... | ... | @@ -326,7 +323,7 @@ public class SendUserInfoTask { |
326 | 323 | |
327 | 324 | bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" |
328 | 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 | 328 | if (bCardFlags != -1) { |
332 | 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 | 13 | |
14 | 14 | private int StudentType; |
15 | 15 | |
16 | + private String teacher_num; | |
17 | + | |
16 | 18 | private int UserType; |
17 | 19 | |
18 | 20 | private String Name; |
... | ... | @@ -21,6 +23,12 @@ public class StudentBean implements Serializable { |
21 | 23 | |
22 | 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 | 32 | private String OldCard; |
25 | 33 | |
26 | 34 | private String Card; |
... | ... | @@ -49,6 +57,24 @@ public class StudentBean implements Serializable { |
49 | 57 | |
50 | 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 | 78 | public String getUser_id() { |
53 | 79 | return user_id; |
54 | 80 | } |
... | ... | @@ -225,6 +251,30 @@ public class StudentBean implements Serializable { |
225 | 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 | 278 | @Override |
229 | 279 | public String toString() { |
230 | 280 | return "StudentBean{" + |
... | ... | @@ -236,6 +286,9 @@ public class StudentBean implements Serializable { |
236 | 286 | ", Name='" + Name + '\'' + |
237 | 287 | ", ClassId=" + ClassId + |
238 | 288 | ", ClassName='" + ClassName + '\'' + |
289 | + ", class_id='" + class_id + '\'' + | |
290 | + ", class_name='" + class_name + '\'' + | |
291 | + ", student_type='" + student_type + '\'' + | |
239 | 292 | ", OldCard='" + OldCard + '\'' + |
240 | 293 | ", Card='" + Card + '\'' + |
241 | 294 | ", SchoolId=" + SchoolId + |
... | ... | @@ -245,7 +298,6 @@ public class StudentBean implements Serializable { |
245 | 298 | ", AddTime=" + AddTime + |
246 | 299 | ", Sex=" + Sex + |
247 | 300 | ", Face='" + Face + '\'' + |
248 | -// ", StudentCode='" + StudentCode + '\'' + | |
249 | 301 | ", student_num='" + student_num + '\'' + |
250 | 302 | ", student_id='" + student_id + '\'' + |
251 | 303 | ", user_id='" + user_id + '\'' + | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
... | ... | @@ -126,7 +126,7 @@ public class FileControl { |
126 | 126 | @ApiOperation(value = "下发卡信息") |
127 | 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 | 131 | File[] files = file.listFiles(); |
132 | 132 | |
... | ... | @@ -148,7 +148,7 @@ public class FileControl { |
148 | 148 | } |
149 | 149 | |
150 | 150 | |
151 | - } | |
151 | + }*/ | |
152 | 152 | |
153 | 153 | |
154 | 154 | return 1; | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
1 | 1 | package com.example.dahua.control; |
2 | 2 | |
3 | 3 | import com.example.dahua.MyTask; |
4 | -import com.example.dahua.async.ImageUtils; | |
5 | 4 | import com.example.dahua.async.SendUserInfoTask; |
6 | 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 | 9 | import com.example.dahua.lib.CompressPic; |
9 | 10 | import com.example.dahua.service.UserService; |
10 | 11 | import com.example.dahua.utils.*; |
12 | +import com.example.dahua.xiananDao.SendRecordDao; | |
11 | 13 | import io.swagger.annotations.Api; |
12 | 14 | import io.swagger.annotations.ApiImplicitParam; |
13 | 15 | import io.swagger.annotations.ApiImplicitParams; |
14 | 16 | import io.swagger.annotations.ApiOperation; |
15 | -import org.json.JSONArray; | |
16 | 17 | import org.json.JSONException; |
17 | 18 | import org.json.JSONObject; |
18 | 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 | 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 | 21 | import org.springframework.util.StringUtils; |
27 | 22 | import org.springframework.web.bind.annotation.*; |
28 | 23 | import org.springframework.web.client.RestTemplate; |
29 | -import org.springframework.web.multipart.MultipartFile; | |
30 | 24 | |
31 | -import javax.imageio.stream.FileImageInputStream; | |
32 | 25 | import java.io.*; |
33 | -import java.net.HttpURLConnection; | |
34 | -import java.net.URL; | |
35 | 26 | import java.util.*; |
36 | 27 | |
37 | 28 | /** |
... | ... | @@ -51,6 +42,12 @@ public class UserControl { |
51 | 42 | @Autowired |
52 | 43 | MyTask myTasks; |
53 | 44 | |
45 | + @Autowired | |
46 | + SendRecordDao sendRecordDao; | |
47 | + | |
48 | + @Autowired | |
49 | + UserDao userDao; | |
50 | + | |
54 | 51 | |
55 | 52 | @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET) |
56 | 53 | @ApiOperation(value = "上传用户信息") |
... | ... | @@ -72,6 +69,130 @@ public class UserControl { |
72 | 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 | 196 | @RequestMapping(value = "sendSingle", method = RequestMethod.GET) |
76 | 197 | @ApiOperation(value = "单张卡下发") |
77 | 198 | public String sendSIngle(@RequestParam("SchoolId") String SchoolId, @RequestParam("Card") String Card) { |
... | ... | @@ -123,11 +244,11 @@ public class UserControl { |
123 | 244 | |
124 | 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 | 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 | 252 | schoolId = httpurl.substring(httpurl.indexOf("School") + 6, httpurl.indexOf("\\Teacher")); |
132 | 253 | } |
133 | 254 | System.out.println("choolId:" + schoolId + "userCode:" + userCode); |
... | ... | @@ -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 | 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 | 129 | void getUserWidthUserId(@Param("userId") String userId); |
130 | 130 | |
131 | 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 | 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 | 137 | @Select("select Top(1) user_id from SZ_V_School_Student where studentcode = #{studentcode}") |
138 | 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 | 165 | |
166 | 166 | public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, |
167 | 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 | 192 | accessCardInfo.sznDoors[0] = 0; |
193 | 193 | accessCardInfo.sznDoors[1] = 1; |
194 | 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 | 204 | accessCardInfo.emStatus = cardStatus; |
... | ... | @@ -380,17 +385,19 @@ public class GateModule { |
380 | 385 | |
381 | 386 | // 获取 |
382 | 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 | 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 | 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 | 521 | |
515 | 522 | public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, |
516 | 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 | 550 | accessCardInfo.sznDoors[0] = 0; |
544 | 551 | accessCardInfo.sznDoors[1] = 1; |
545 | 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 | 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 | 16 | import org.springframework.util.StringUtils; |
17 | 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 | 20 | import java.net.URI; |
23 | 21 | import java.net.URISyntaxException; |
24 | 22 | import java.util.List; |
... | ... | @@ -187,18 +185,30 @@ public class PermissFaceServiceImp implements PermissFaceService { |
187 | 185 | for (int i = 0; i < studentBeans.size(); i++) { |
188 | 186 | StudentBean studentBean = studentBeans.get(i); |
189 | 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 | 194 | uploadImgs(saveImgFile, schoolId + "", studentBean.getStudentcode(), 2, studentBean.getCard(), studentBean.getName()); |
191 | 195 | } |
192 | 196 | |
193 | 197 | } else { |
194 | 198 | List<TeacherBean> teacherBeans = userDao.getTeaWithUserId(userId); |
195 | -log.error("教师下发"); | |
199 | + log.error("教师下发"); | |
196 | 200 | if (null != teacherBeans && teacherBeans.size() > 0) { |
197 | 201 | |
198 | 202 | for (int i = 0; i < teacherBeans.size(); i++) { |
199 | 203 | TeacherBean teacherBean = teacherBeans.get(i); |
200 | 204 | |
201 | 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 | 212 | uploadImgs(saveImgFile, schoolId, teacherBean.getNum(), 1, teacherBean.getTeacher_num(), teacherBean.getName()); |
203 | 213 | |
204 | 214 | } |
... | ... | @@ -225,6 +235,33 @@ log.error("教师下发"); |
225 | 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 | 265 | private void uploadImgs(File saveImgFile, String schoolId, String studentcode, int userType, String card, String name) { |
229 | 266 | List<AttendanceBean> attendanceBeanList = userDao.getAllDevices(schoolId + ""); |
230 | 267 | if (null != attendanceBeanList && attendanceBeanList.size() > 0) |
... | ... | @@ -233,7 +270,7 @@ log.error("教师下发"); |
233 | 270 | |
234 | 271 | String clintType = attendanceBean.getClint_type(); |
235 | 272 | //根据设备类型上传人脸 |
236 | - log.error("设备:{}",clintType); | |
273 | + log.error("设备:{}", clintType); | |
237 | 274 | if (clintType.equals("18") || clintType.equals("28")) { |
238 | 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 | 29 | |
30 | 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 | 39 | @Override |
... | ... | @@ -49,7 +53,9 @@ public class UserServiceImp implements UserService { |
49 | 53 | @Override |
50 | 54 | public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) { |
51 | 55 | List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);//获取学校下的大华设备 |
56 | + | |
52 | 57 | System.out.println("设备数量:" + attendanceBeans.size()); |
58 | + | |
53 | 59 | UserInfoBean userInfoBean = null; |
54 | 60 | try { |
55 | 61 | if (userType == 2) { | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/utils/BaiduUtils.java
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java
... | ... | @@ -75,14 +75,16 @@ public interface SendRecordDao { |
75 | 75 | @Select("select * from Face_SendFail where schoolId = #{schoolId} and userType = #{userType} and deviceID = #{deviceID}") |
76 | 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 | 79 | void addFaceRecoder(@Param("deviceId") String deviceId, @Param("user_id") String user_id, @Param("name") String name, |
80 | 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 | 479 | @Test |
480 | 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 | ... | ... |
... | ... | @@ -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 | 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 | 80 | } |
81 | 81 | |
82 | 82 | |
83 | - @RequestMapping(value = "getWord", method = RequestMethod.GET) | |
83 | + /*@RequestMapping(value = "getWord", method = RequestMethod.GET) | |
84 | 84 | @ApiOperation("获取21世纪题目") |
85 | 85 | @ApiImplicitParams( |
86 | 86 | {@ApiImplicitParam(name = "url", value = "链接")} |
... | ... | @@ -106,7 +106,7 @@ public class FileControl { |
106 | 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 | 43 | |
44 | 44 | @Override |
45 | 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 | 48 | String keyObjectName = filePath + "/" + fileName; |
49 | 49 | |
50 | 50 | // boolean isExist = ossClient.doesObjectExist(bucketName, keyObjectName); | ... | ... |
... | ... | @@ -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 | 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 | 4 | import com.alibaba.fastjson.JSONArray; |
5 | 5 | import com.alibaba.fastjson.JSONObject; |
6 | 6 | import com.sincere.haikangface.bean.*; |
7 | -import com.sincere.haikangface.bean.face.BaiduUserInfoBean; | |
8 | 7 | import com.sincere.haikangface.bean.xiaoan.Face_Recoder; |
9 | 8 | import com.sincere.haikangface.dao.DeviceDao; |
10 | 9 | import com.sincere.haikangface.dao.UserDao; |
... | ... | @@ -12,7 +11,6 @@ import com.sincere.haikangface.haikanglibs.HCEHomeAlarm; |
12 | 11 | import com.sincere.haikangface.haikanglibs.HCEHomeCMS; |
13 | 12 | import com.sincere.haikangface.haikanglibs.HCEHomeSS; |
14 | 13 | import com.sincere.haikangface.mqtt.MqtUtils; |
15 | -import com.sincere.haikangface.mqtt.MqttManager; | |
16 | 14 | import com.sincere.haikangface.utils.*; |
17 | 15 | import com.sincere.haikangface.xiananDao.SendRecordDao; |
18 | 16 | import com.sun.jna.NativeLong; |
... | ... | @@ -38,13 +36,8 @@ import java.io.*; |
38 | 36 | import java.net.InetAddress; |
39 | 37 | import java.net.UnknownHostException; |
40 | 38 | import java.nio.ByteBuffer; |
41 | -import java.text.DecimalFormat; | |
42 | -import java.text.ParseException; | |
43 | 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 | 41 | import java.util.regex.Pattern; |
49 | 42 | |
50 | 43 | @Component |
... | ... | @@ -318,23 +311,19 @@ public class CMSServer implements ApplicationRunner { |
318 | 311 | public class PSS_Storage_Callback implements HCEHomeSS.EHomeSSStorageCallBack { |
319 | 312 | |
320 | 313 | public boolean invoke(NativeLong iHandle, String pFileName, Pointer pFileBuf, int dwFileLen, Pointer pFilePath, Pointer pUser) { |
321 | -// log.error("图片进来:{}", pFileName); | |
322 | 314 | String strPath = "C://EhomePicServer/"; |
323 | -// System.out.println("pFileName:" + pFileName); | |
324 | 315 | FileUtils.getInstance().writeLogs("文件名:" + pFileName, FileUtils.fileName); |
316 | + | |
317 | + String isQJFileName = pFileName;//用来判断是否是枪机 | |
318 | + | |
325 | 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 | 325 | String strFilePath = strPath + pFileName; |
335 | 326 | //保存抓拍到的人脸图片,比对通过后的图片资源 |
336 | - | |
337 | -// System.out.println("文件保存回调函数:" + strFilePath); | |
338 | 327 | //若此目录不存在,则创建之 |
339 | 328 | File myPath = new File(strPath); |
340 | 329 | if (!myPath.exists()) { |
... | ... | @@ -363,9 +352,16 @@ public class CMSServer implements ApplicationRunner { |
363 | 352 | buffers.get(bytes); |
364 | 353 | fout.write(bytes); |
365 | 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 | 366 | } catch (FileNotFoundException e) { |
371 | 367 | // TODO Auto-generated catch block |
... | ... | @@ -378,9 +374,9 @@ public class CMSServer implements ApplicationRunner { |
378 | 374 | |
379 | 375 | pFilePath.write(0, strFilePath.getBytes(), 0, strFilePath.getBytes().length); |
380 | 376 | |
381 | - if (isZhuaPai) { | |
377 | +// if (isZhuaPai) { | |
382 | 378 | // MqtUtils.getInstance().sendMsg("http://campus.myjxt.com//face17e5/School16/Student/" + pFileName); |
383 | - } | |
379 | +// } | |
384 | 380 | |
385 | 381 | return true; |
386 | 382 | } |
... | ... | @@ -393,11 +389,13 @@ public class CMSServer implements ApplicationRunner { |
393 | 389 | * |
394 | 390 | * @param strFilePathFile |
395 | 391 | */ |
396 | - public void sendToKB(File strFilePathFile) { | |
392 | + public void sendToKB(File strFilePathFile, String deviceId) { | |
397 | 393 | try { |
398 | 394 | |
395 | + String schoolId = userDao.getSchoolIdWithDevId(deviceId); | |
396 | + | |
399 | 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 | 400 | RestTemplate restTemplate = new RestTemplate(); |
403 | 401 | |
... | ... | @@ -415,7 +413,7 @@ public class CMSServer implements ApplicationRunner { |
415 | 413 | JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); |
416 | 414 | |
417 | 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 | 418 | JSONObject data = jsonObject.getJSONObject("data"); |
421 | 419 | String error_msg = data.getString("error_msg"); |
... | ... | @@ -441,11 +439,11 @@ public class CMSServer implements ApplicationRunner { |
441 | 439 | String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); |
442 | 440 | BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); |
443 | 441 | baiduFaceRecorder.setName(teacherBean.getName()); |
444 | - baiduFaceRecorder.setScore(sc+""); | |
442 | + baiduFaceRecorder.setScore(sc + ""); | |
445 | 443 | baiduFaceRecorder.setTime(time); |
446 | 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 | 447 | baiduFaceRecorder.setUserId(user_id); |
450 | 448 | userDao.insertBaiduFaceRecorder(baiduFaceRecorder); |
451 | 449 | |
... | ... | @@ -455,26 +453,26 @@ public class CMSServer implements ApplicationRunner { |
455 | 453 | if (userMap.containsKey(user_id)) { |
456 | 454 | |
457 | 455 | long value = userMap.get(user_id); |
458 | - if ((System.currentTimeMillis() - value) / 1000 > 6) { | |
456 | + if ((System.currentTimeMillis() - value) / 1000 > 60) { | |
459 | 457 | userMap.put(user_id, System.currentTimeMillis()); |
460 | - MqtUtils.getInstance().sendMsg("09EA8EB5142F2964", 1, teacherBean.toString()); | |
458 | + send2DeviceIds(schoolId, teacherBean); | |
461 | 459 | log.error("发送成功....."); |
462 | 460 | } |
463 | 461 | |
464 | 462 | } else { |
465 | 463 | userMap.put(user_id, System.currentTimeMillis()); |
466 | - MqtUtils.getInstance().sendMsg("09EA8EB5142F2964", 1, teacherBean.toString()); | |
464 | + send2DeviceIds(schoolId, teacherBean); | |
467 | 465 | log.error("发送成功....."); |
468 | 466 | } |
469 | 467 | |
470 | 468 | // strFilePathFile.deleteOnExit(); |
471 | 469 | } else { |
472 | 470 | System.out.println("用户身份信息不存在"); |
473 | - sendNoPersonImg(strFilePathFile); | |
471 | + sendNoPersonImg(strFilePathFile,schoolId); | |
474 | 472 | } |
475 | 473 | } else { |
476 | 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 | 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 | 505 | String imgName = strFilePathFile.getName(); |
495 | 506 | String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); |
496 | 507 | if (imgName.contains(date)) { |
497 | 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 | 583 | // System.out.println(strXML); |
569 | 584 | // log.error("报警监听:{}", strXML); |
570 | 585 | if (null == alarmUtils) { |
571 | - alarmUtils = new AlarmUtils(deviceDao,userDao); | |
586 | + alarmUtils = new AlarmUtils(deviceDao, userDao); | |
572 | 587 | alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() { |
573 | 588 | @Override |
574 | 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 | 593 | saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); |
579 | 594 | break; |
580 | 595 | case "0x426"://人证设备在线 |
581 | - | |
582 | 596 | break; |
583 | 597 | case "0x427"://人证设备离线 |
584 | 598 | map.remove(deviceID); |
... | ... | @@ -639,10 +653,10 @@ public class CMSServer implements ApplicationRunner { |
639 | 653 | if (!TextUtils.isEmpty(currTemperature)) {//只有有温度的才存记录 |
640 | 654 | userDao.addWGTem(studentBean.getUser_id(), studentBean.getStudent_id(), studentBean.getName(), studentBean.getClass_id() + "", |
641 | 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 | 660 | } else { |
647 | 661 | //教师点名 |
648 | 662 | isTeacher(cardNo, deviceID); |
... | ... | @@ -673,7 +687,7 @@ public class CMSServer implements ApplicationRunner { |
673 | 687 | public void isTeacher(String cardNo, String deviceID) { |
674 | 688 | |
675 | 689 | List<String> devLists = userDao.getDeviceRoomRelation(deviceID); |
676 | - log.error("cardNo:{},devLists{}", cardNo, devLists); | |
690 | +// log.error("cardNo:{},devLists{}", cardNo, devLists); | |
677 | 691 | |
678 | 692 | if (null != devLists && devLists.size() > 0) { |
679 | 693 | |
... | ... | @@ -813,7 +827,7 @@ public class CMSServer implements ApplicationRunner { |
813 | 827 | "</CardCfg>\r\n" + |
814 | 828 | "</ConfigXML>\r\n" + |
815 | 829 | "</Params>"; |
816 | - System.out.println("strConfigXMLCard:" + strConfigXMLCard + name + nameAfter); | |
830 | +// System.out.println("strConfigXMLCard:" + strConfigXMLCard + name + nameAfter); | |
817 | 831 | byte[] nameBeforBy = null; |
818 | 832 | byte[] resultBy = null; |
819 | 833 | try { |
... | ... | @@ -861,10 +875,10 @@ public class CMSServer implements ApplicationRunner { |
861 | 875 | int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); |
862 | 876 | if (validTimeEnabled == 0) System.err.println("删除卡号失败,错误号:" + iErr + "card:" + card); |
863 | 877 | else System.err.println("下发卡号失败,错误号:" + iErr + "card:" + card); |
864 | - if (iErr == 10) map.remove(deviceId); | |
878 | +// if (iErr == 10) map.remove(deviceId); | |
865 | 879 | } else { |
866 | 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 | 1029 | } else { |
1016 | 1030 | stringXMLOut.read(); |
1017 | 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 | 1035 | return false; | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/Test.java
0 → 100644
... | ... | @@ -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 | 83 | long time = System.currentTimeMillis(); |
84 | 84 | // if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png"); |
85 | 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 | 88 | try { |
89 | 89 | CompressPic.CompressPic(filePath, targetPath); |
90 | 90 | } catch (Exception e) { |
91 | 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 | 95 | try { |
96 | 96 | int isPiliang = 0;//0:批量,1:单张 |
97 | 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 | 3 | //import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; |
4 | 4 | |
5 | 5 | import com.alibaba.fastjson.JSON; |
6 | -import com.sincere.haikangface.bean.Images2Ddevices; | |
6 | +import com.sincere.haikangface.bean.*; | |
7 | 7 | //import com.sincere.haikangface.utils.BaiduApiUtiols; |
8 | 8 | import com.sincere.haikangface.CMSServer; |
9 | 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 | 10 | import com.sincere.haikangface.bean.face.PermissionBean; |
14 | 11 | import com.sincere.haikangface.bean.face.UserAndPermission; |
15 | 12 | import com.sincere.haikangface.dao.UserDao; |
... | ... | @@ -21,22 +18,17 @@ import io.swagger.annotations.ApiImplicitParam; |
21 | 18 | import io.swagger.annotations.ApiImplicitParams; |
22 | 19 | import io.swagger.annotations.ApiOperation; |
23 | 20 | import lombok.extern.slf4j.Slf4j; |
24 | -import org.apache.poi.util.StringUtil; | |
25 | 21 | import org.slf4j.Logger; |
26 | 22 | import org.slf4j.LoggerFactory; |
27 | 23 | import org.springframework.beans.factory.annotation.Autowired; |
28 | 24 | import org.springframework.http.MediaType; |
29 | 25 | import org.springframework.util.StringUtils; |
30 | 26 | import org.springframework.web.bind.annotation.*; |
31 | -import org.springframework.web.client.RestTemplate; | |
32 | 27 | import org.springframework.web.multipart.MultipartFile; |
33 | 28 | |
34 | 29 | import java.io.*; |
35 | 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 | 33 | @RestController |
42 | 34 | @RequestMapping(value = "/facereco/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) |
... | ... | @@ -67,7 +59,7 @@ public class UserControl { |
67 | 59 | @ApiOperation("下发权限给设备") |
68 | 60 | public boolean sendPermiss(@RequestBody PermissionBean permissionBean) { |
69 | 61 | log.error("permissionBean:{}", JSON.toJSONString(permissionBean)); |
70 | - FileUtils.getInstance().writeLogs("传入权限模板:"+JSON.toJSONString(permissionBean),"设置权限内容.txt"); | |
62 | + FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt"); | |
71 | 63 | if (!StringUtils.isEmpty(permissionBean.getDeviceIds())) { |
72 | 64 | // List<String> cardNumList = userDao.getStudentCardsWidthSchoolId(permissionBean.getSchoolId()); |
73 | 65 | return sendUserAsync.sendPermiss(permissionBean, 0); |
... | ... | @@ -100,9 +92,9 @@ public class UserControl { |
100 | 92 | |
101 | 93 | @RequestMapping(value = "sendToKB", method = RequestMethod.GET) |
102 | 94 | @ApiOperation("发送数据到看板") |
103 | - public void sendToKB(@RequestParam("filePath") String filePath) { | |
95 | + public void sendToKB(@RequestParam("filePath") String filePath, @RequestParam("deviceid") String deviceid) { | |
104 | 96 | try { |
105 | - cmsServer.sendToKB(new File(filePath)); | |
97 | + cmsServer.sendToKB(new File(filePath), deviceid); | |
106 | 98 | } catch (Exception e) { |
107 | 99 | e.printStackTrace(); |
108 | 100 | } |
... | ... | @@ -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 | 441 | @RequestMapping(value = "sendFaceToDevices", method = RequestMethod.GET) |
317 | 442 | @ApiOperation(value = "下发单个用户给指定设备", notes = "下发单个用户给指定设备") |
318 | 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 | 216 | "where num = #{num} and school_id = #{schoolId}") |
217 | 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 | 220 | String getSchoolIdWithDevId(@Param("devId") String devId); |
221 | 221 | |
222 | 222 | @Insert("insert into CW_StuTemperatureReocrd values (#{UserId},#{StudentId},#{Name},#{ClassId},#{ClassName},#{Temperature},#{Type},#{SchoolId},#{Intime})") |
... | ... | @@ -236,6 +236,9 @@ public interface UserDao { |
236 | 236 | @Select("select student_num from SZ_V_School_Student where user_id = #{userId}") |
237 | 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 | 242 | @Select("select Top(1) * from SZ_V_School_Teacher where user_id = #{userId} and teacher_num<>''") |
240 | 243 | TeacherBean getTeacherWithUserId(@Param("userId") String userId); |
241 | 244 | |
... | ... | @@ -250,4 +253,9 @@ public interface UserDao { |
250 | 253 | |
251 | 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 | 46 | } |
47 | 47 | |
48 | 48 | public void deleAlarm(String strXML) { |
49 | - System.out.println("人脸抓拍机:" + strXML); | |
49 | +// System.out.println("人脸抓拍机:" + strXML); | |
50 | 50 | if (strXML.contains("FACESNAPREPORT")) {//人脸抓拍机器 |
51 | 51 | |
52 | 52 | // System.out.println("人脸抓拍机:" + strXML); |
53 | 53 | BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); |
54 | 54 | baiduFaceRecorder.setUploadImgUrl(strXML); |
55 | 55 | baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
56 | - userDao.insertBaiduFaceRecorder(baiduFaceRecorder); | |
57 | 56 | |
58 | 57 | String deviceId = strXML.substring(strXML.indexOf("DeviceID"),strXML.lastIndexOf("DeviceID")).trim(); |
59 | 58 | deviceId = deviceId.replace("DeviceID>",""); |
60 | 59 | deviceId = deviceId.replace("</",""); |
61 | 60 | |
61 | + userDao.insertBaiduFaceRecorder(baiduFaceRecorder); | |
62 | 62 | // if (null != alarmCallBack) |
63 | 63 | // alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature); |
64 | 64 | |
... | ... | @@ -245,9 +245,11 @@ public class AlarmUtils { |
245 | 245 | switch (minorType) { |
246 | 246 | case "0x3a"://网络断开 |
247 | 247 | content = "网络断开"; |
248 | + FileUtils.getInstance().writeLogs("网络断开:"+deviceID,"设备网络.txt"); | |
248 | 249 | break; |
249 | 250 | case "0x400"://设备上电启动 |
250 | 251 | content = "设备上电启动"; |
252 | + FileUtils.getInstance().writeLogs("设备上电启动:"+deviceID,"设备网络.txt"); | |
251 | 253 | break; |
252 | 254 | case "0x401"://设备掉电关闭 |
253 | 255 | content = "设备掉电关闭"; |
... | ... | @@ -266,6 +268,8 @@ public class AlarmUtils { |
266 | 268 | break; |
267 | 269 | case "0x407"://网络恢复 |
268 | 270 | content = "网络恢复"; |
271 | + if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); | |
272 | + FileUtils.getInstance().writeLogs("网络恢复:"+deviceID,"设备网络.txt"); | |
269 | 273 | break; |
270 | 274 | case "0x421"://摄像头未连接 |
271 | 275 | content = "摄像头未连接"; |
... | ... | @@ -274,12 +278,14 @@ public class AlarmUtils { |
274 | 278 | content = "摄像头连接恢复"; |
275 | 279 | break; |
276 | 280 | case "0x426"://人证设备在线 |
281 | + FileUtils.getInstance().writeLogs("人证设备在线:"+deviceID,"设备网络.txt"); | |
277 | 282 | content = "人证设备在线"; |
278 | 283 | if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); |
279 | 284 | break; |
280 | 285 | case "0x427"://人证设备离线 |
281 | 286 | content = "人证设备离线"; |
282 | 287 | if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); |
288 | + FileUtils.getInstance().writeLogs("人证设备离线:"+deviceID,"设备网络.txt"); | |
283 | 289 | break; |
284 | 290 | } |
285 | 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 | 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
cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java
... | ... | @@ -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 | 91 | private void closeAllDevice() { |
... | ... | @@ -96,11 +96,9 @@ public class MypulsarApplicationTests { |
96 | 96 | String deviceId = deviceIds.get(i).getClint_id(); |
97 | 97 | String conValue = getRemoteId(deviceDao.getConBeValue(deviceId)); |
98 | 98 | String devName = deviceIds.get(i).getName(); |
99 | -// System.out.println("closeModel:" + closeModel); | |
100 | 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 | ... | ... |
cloud/pom.xml
... | ... | @@ -41,7 +41,7 @@ |
41 | 41 | <!-- <module>weigeng</module>--> |
42 | 42 | <!-- <module>independence</module>--> |
43 | 43 | <module>quartz</module> |
44 | - <!-- <module>zkAttendance</module>--> | |
44 | + <module>zkAttendance</module> | |
45 | 45 | <module>user_search</module> |
46 | 46 | <module>fIle-center</module> |
47 | 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 | 37 | <artifactId>commons-lang3</artifactId> |
38 | 38 | <version>3.3.2</version> |
39 | 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 | 48 | </dependencies> |
41 | 49 | |
42 | 50 | <dependencyManagement> |
... | ... | @@ -75,7 +83,7 @@ |
75 | 83 | <configuration> |
76 | 84 | <archive> |
77 | 85 | <manifest> |
78 | - <mainClass>com.sincere.quartz.QuartzApplication</mainClass> | |
86 | + <mainClass>com.sincere.att.AttApplication</mainClass> | |
79 | 87 | <addClasspath>true</addClasspath> |
80 | 88 | <classpathPrefix>lib/</classpathPrefix> |
81 | 89 | </manifest> | ... | ... |
cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java
... | ... | @@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; |
4 | 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; |
5 | 5 | import org.springframework.cloud.netflix.eureka.EnableEurekaClient; |
6 | 6 | import org.springframework.cloud.openfeign.EnableFeignClients; |
7 | +import org.springframework.context.annotation.Configuration; | |
7 | 8 | |
8 | 9 | /** |
9 | 10 | * @author chen |
... | ... | @@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; |
13 | 14 | @EnableFeignClients(basePackages = "com.sincere.att.feign") |
14 | 15 | @EnableEurekaClient |
15 | 16 | @SpringBootApplication |
17 | +@Configuration | |
16 | 18 | public class AttApplication { |
17 | 19 | |
18 | 20 | // public static void main(String[] args) { | ... | ... |
cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java
cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
... | ... | @@ -40,80 +40,86 @@ public class AttPushController { |
40 | 40 | private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo); |
41 | 41 | |
42 | 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 | 49 | @Autowired |
50 | 50 | ScFeign scFeign; |
51 | 51 | |
52 | 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 | 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 | 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 | 68 | JSONObject student = (JSONObject) array.get(i); |
68 | 69 | UserOrderVo vo = new UserOrderVo(); |
69 | 70 | vo.setStudentId((Integer) student.get("studentid")); |
70 | 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 | 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 | 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 | 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 | 106 | JSONObject student = (JSONObject) array.get(i); |
101 | 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 | 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 | 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 | 127 | * 1,设备通完电以后第一个发送到后台的请求 |
122 | 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 | 133 | try { |
128 | - if(cmdMap.get(SN) == null){ | |
134 | + if (cmdMap.get(SN) == null) { | |
129 | 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 | 140 | SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto(); |
135 | 141 | attendanceDto.setClint_id(SN); |
136 | 142 | attendanceDto.setClint_type("24"); |
137 | 143 | attendanceDto.setIp(request.getRemoteAddr()); |
138 | 144 | attendanceDto.setPort(request.getRemotePort()); |
139 | - attendanceDto.setIntime(DateUtils.date2String(new Date(),DateUtils.format2)); | |
145 | + attendanceDto.setIntime(DateUtils.date2String(new Date(), DateUtils.format2)); | |
140 | 146 | attendanceDto.setSchool_id("-1"); |
141 | 147 | attendanceDto.setState(1); |
142 | 148 | scFeign.insertAttendance(attendanceDto); |
143 | - }else { | |
149 | + } else { | |
144 | 150 | scFeign.updateAttendance(SN); |
145 | 151 | } |
146 | - String initOptions = initOptions(SN,PushOptionsFlag); | |
152 | + String initOptions = initOptions(SN, PushOptionsFlag); | |
147 | 153 | response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求 |
148 | 154 | } catch (IOException e) { |
149 | 155 | e.printStackTrace(); |
... | ... | @@ -154,19 +160,19 @@ public class AttPushController { |
154 | 160 | * 2,心跳请求,会从服务器拿到命令返回 给设备 |
155 | 161 | */ |
156 | 162 | @RequestMapping("/getrequest") |
157 | - public void heartBeat(String SN, HttpServletResponse response){ | |
163 | + public void heartBeat(String SN, HttpServletResponse response) { | |
158 | 164 | scFeign.updateAttendance(SN); |
159 | 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 | 168 | System.out.println("设备上线:" + SN); |
163 | 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 | 178 | try { |
... | ... | @@ -183,8 +189,8 @@ public class AttPushController { |
183 | 189 | * 这个请求,服务器只能返回OK,不可以返回命令 |
184 | 190 | */ |
185 | 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 | 194 | try { |
189 | 195 | response.getWriter().write("OK"); |
190 | 196 | } catch (IOException e) { |
... | ... | @@ -196,20 +202,35 @@ public class AttPushController { |
196 | 202 | * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果 |
197 | 203 | */ |
198 | 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 | 206 | //判断data 清空map |
201 | 207 | List<String> cmdList = cmdMap.get(SN); |
208 | + System.out.println("----请求设备:" + SN+"ssssss:"+(cmdList==null?"false":"true")); | |
202 | 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 | 226 | Iterator<String> it = cmdList.iterator(); |
209 | 227 | while (((Iterator) it).hasNext()) { |
210 | 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 | 234 | it.remove(); |
214 | 235 | } |
215 | 236 | } |
... | ... | @@ -232,22 +253,22 @@ public class AttPushController { |
232 | 253 | request.setCharacterEncoding("gbk"); |
233 | 254 | String data = ""; |
234 | 255 | ByteArrayOutputStream bos = null; |
235 | - byte[] b= new byte[1024]; | |
256 | + byte[] b = new byte[1024]; | |
236 | 257 | try { |
237 | 258 | InputStream is = request.getInputStream(); |
238 | 259 | bos = new ByteArrayOutputStream(); |
239 | 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 | 265 | } catch (IOException e) { |
245 | 266 | e.printStackTrace(); |
246 | 267 | } |
247 | - if("ATTLOG".equals(table)){ | |
268 | + if ("ATTLOG".equals(table)) { | |
248 | 269 | String[] list = data.split("\t"); |
249 | 270 | String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0])); |
250 | - if(StringUtils.isNotBlank(cardNo)){ | |
271 | + if (StringUtils.isNotBlank(cardNo)) { | |
251 | 272 | String cardNo10 = new BigInteger(cardNo, 16).toString(); |
252 | 273 | //考勤日志 |
253 | 274 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
... | ... | @@ -262,20 +283,20 @@ public class AttPushController { |
262 | 283 | String jsonResult = JSON.toJSONString(attendanceInfoBean); |
263 | 284 | String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY"; |
264 | 285 | JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult); |
265 | - if ((int) jsonObject.get("status") == 1){ | |
286 | + if ((int) jsonObject.get("status") == 1) { | |
266 | 287 | Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); |
267 | - }else { | |
288 | + } else { | |
268 | 289 | Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); |
269 | 290 | } |
270 | - }else { | |
291 | + } else { | |
271 | 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 | 300 | String order = data.substring(3); |
280 | 301 | FingerDto fingerDto = new FingerDto(); |
281 | 302 | fingerDto.setOrderMsg(order); |
... | ... | @@ -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 | 356 | * @param sn |
322 | 357 | * @param PushOptionsFlag |
323 | 358 | * @return |
324 | 359 | */ |
325 | - private String initOptions(String sn,String PushOptionsFlag) { | |
360 | + private String initOptions(String sn, String PushOptionsFlag) { | |
326 | 361 | StringBuffer devOptions = new StringBuffer(); |
327 | - devOptions.append("GET OPTION FROM: "+sn); | |
362 | + devOptions.append("GET OPTION FROM: " + sn); | |
328 | 363 | // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp") |
329 | 364 | devOptions.append("\nATTLOGStamp=0"); |
330 | 365 | devOptions.append("\nOPERLOGStamp=0"); |
... | ... | @@ -348,9 +383,8 @@ public class AttPushController { |
348 | 383 | // 11 工作号码 |
349 | 384 | // 12 比对照片 |
350 | 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 | 388 | // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926 |
355 | 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 | 12 | lease-renewal-interval-in-seconds: 10 |
13 | 13 | client: |
14 | 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 | ... | ... |