Commit a4c5d51e88c8970e6c95d9ba865f796fa466bb2d

Authored by 邱一成
2 parents f0d840f4 0a43b0af
Exists in master

Merge branch 'master' of http://git.shunzhi.net/taohd/mycloud

# Conflicts:
#	cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java
#	cloud/dahua/src/main/resources/application.yml
Showing 26 changed files with 715 additions and 850 deletions   Show diff stats
cloud/.mvn/wrapper/MavenWrapperDownloader.java
@@ -1,114 +0,0 @@ @@ -1,114 +0,0 @@
1 -/*  
2 -Licensed to the Apache Software Foundation (ASF) under one  
3 -or more contributor license agreements. See the NOTICE file  
4 -distributed with this work for additional information  
5 -regarding copyright ownership. The ASF licenses this file  
6 -to you under the Apache License, Version 2.0 (the  
7 -"License"); you may not use this file except in compliance  
8 -with the License. You may obtain a copy of the License at  
9 -  
10 - https://www.apache.org/licenses/LICENSE-2.0  
11 -  
12 -Unless required by applicable law or agreed to in writing,  
13 -software distributed under the License is distributed on an  
14 -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
15 -KIND, either express or implied. See the License for the  
16 -specific language governing permissions and limitations  
17 -under the License.  
18 -*/  
19 -  
20 -import java.io.File;  
21 -import java.io.FileInputStream;  
22 -import java.io.FileOutputStream;  
23 -import java.io.IOException;  
24 -import java.net.URL;  
25 -import java.nio.channels.Channels;  
26 -import java.nio.channels.ReadableByteChannel;  
27 -import java.util.Properties;  
28 -  
29 -public class MavenWrapperDownloader {  
30 -  
31 - /**  
32 - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.  
33 - */  
34 - private static final String DEFAULT_DOWNLOAD_URL =  
35 - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";  
36 -  
37 - /**  
38 - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to  
39 - * use instead of the default one.  
40 - */  
41 - private static final String MAVEN_WRAPPER_PROPERTIES_PATH =  
42 - ".mvn/wrapper/maven-wrapper.properties";  
43 -  
44 - /**  
45 - * Path where the maven-wrapper.jar will be saved to.  
46 - */  
47 - private static final String MAVEN_WRAPPER_JAR_PATH =  
48 - ".mvn/wrapper/maven-wrapper.jar";  
49 -  
50 - /**  
51 - * Name of the property which should be used to override the default download url for the wrapper.  
52 - */  
53 - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";  
54 -  
55 - public static void main(String args[]) {  
56 - System.out.println("- Downloader started");  
57 - File baseDirectory = new File(args[0]);  
58 - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());  
59 -  
60 - // If the maven-wrapper.properties exists, read it and check if it contains a custom  
61 - // wrapperUrl parameter.  
62 - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);  
63 - String url = DEFAULT_DOWNLOAD_URL;  
64 - if (mavenWrapperPropertyFile.exists()) {  
65 - FileInputStream mavenWrapperPropertyFileInputStream = null;  
66 - try {  
67 - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);  
68 - Properties mavenWrapperProperties = new Properties();  
69 - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);  
70 - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);  
71 - } catch (IOException e) {  
72 - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");  
73 - } finally {  
74 - try {  
75 - if (mavenWrapperPropertyFileInputStream != null) {  
76 - mavenWrapperPropertyFileInputStream.close();  
77 - }  
78 - } catch (IOException e) {  
79 - // Ignore ...  
80 - }  
81 - }  
82 - }  
83 - System.out.println("- Downloading from: : " + url);  
84 -  
85 - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);  
86 - if (!outputFile.getParentFile().exists()) {  
87 - if (!outputFile.getParentFile().mkdirs()) {  
88 - System.out.println(  
89 - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");  
90 - }  
91 - }  
92 - System.out.println("- Downloading to: " + outputFile.getAbsolutePath());  
93 - try {  
94 - downloadFileFromURL(url, outputFile);  
95 - System.out.println("Done");  
96 - System.exit(0);  
97 - } catch (Throwable e) {  
98 - System.out.println("- Error downloading");  
99 - e.printStackTrace();  
100 - System.exit(1);  
101 - }  
102 - }  
103 -  
104 - private static void downloadFileFromURL(String urlString, File destination) throws Exception {  
105 - URL website = new URL(urlString);  
106 - ReadableByteChannel rbc;  
107 - rbc = Channels.newChannel(website.openStream());  
108 - FileOutputStream fos = new FileOutputStream(destination);  
109 - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);  
110 - fos.close();  
111 - rbc.close();  
112 - }  
113 -  
114 -}  
cloud/.mvn/wrapper/maven-wrapper.jar
No preview for this file type
cloud/.mvn/wrapper/maven-wrapper.properties
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip  
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
1 package com.example.dahua; 1 package com.example.dahua;
2 2
3 import com.example.dahua.bean.*; 3 import com.example.dahua.bean.*;
4 -import com.example.dahua.dao.SearchDao;  
5 import com.example.dahua.dao.UserDao; 4 import com.example.dahua.dao.UserDao;
6 import com.example.dahua.lib.NetSDKLib; 5 import com.example.dahua.lib.NetSDKLib;
7 import com.example.dahua.lib.ToolKits; 6 import com.example.dahua.lib.ToolKits;
8 import com.example.dahua.lib.Utils; 7 import com.example.dahua.lib.Utils;
9 import com.example.dahua.module.AutoRegisterModule; 8 import com.example.dahua.module.AutoRegisterModule;
10 -import com.example.dahua.module.FaceRecognitionModule;  
11 import com.example.dahua.module.GateModule; 9 import com.example.dahua.module.GateModule;
12 import com.example.dahua.module.LoginModule; 10 import com.example.dahua.module.LoginModule;
13 import com.example.dahua.service.AttendanceService; 11 import com.example.dahua.service.AttendanceService;
14 import com.example.dahua.utils.DateUtils; 12 import com.example.dahua.utils.DateUtils;
15 import com.example.dahua.utils.FileUtils; 13 import com.example.dahua.utils.FileUtils;
  14 +import com.example.dahua.xiananDao.SearchMapper;
16 import com.example.dahua.xiananDao.SendRecordDao; 15 import com.example.dahua.xiananDao.SendRecordDao;
17 import com.sun.jna.Pointer; 16 import com.sun.jna.Pointer;
18 import lombok.extern.slf4j.Slf4j; 17 import lombok.extern.slf4j.Slf4j;
@@ -61,7 +60,7 @@ public class MyTask implements ApplicationRunner { @@ -61,7 +60,7 @@ public class MyTask implements ApplicationRunner {
61 SendRecordDao sendRecordDao; 60 SendRecordDao sendRecordDao;
62 61
63 @Autowired 62 @Autowired
64 - SearchDao searchDao; 63 + SearchMapper searchMapper;
65 64
66 @Autowired 65 @Autowired
67 UserDao userDao; 66 UserDao userDao;
@@ -392,7 +391,7 @@ public class MyTask implements ApplicationRunner { @@ -392,7 +391,7 @@ public class MyTask implements ApplicationRunner {
392 checkIn.setFunNo(8); 391 checkIn.setFunNo(8);
393 checkIn.setFlag(eventType == 2 ? 1 : 0); 392 checkIn.setFlag(eventType == 2 ? 1 : 0);
394 checkIn.setCheckTime(eventTime); 393 checkIn.setCheckTime(eventTime);
395 - searchDao.checkIn(checkIn); 394 + searchMapper.checkIn(checkIn);
396 if (checkIn.getIsSuccess() == 1) { 395 if (checkIn.getIsSuccess() == 1) {
397 //考勤成功 396 //考勤成功
398 String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime; 397 String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime;
@@ -406,10 +405,10 @@ public class MyTask implements ApplicationRunner { @@ -406,10 +405,10 @@ public class MyTask implements ApplicationRunner {
406 } 405 }
407 } else { 406 } else {
408 //判断是否请假 407 //判断是否请假
409 - String studentNum = searchDao.checkLeave(cardNo); 408 + String studentNum = userDao.checkLeave(cardNo);
410 if (org.apache.commons.lang.StringUtils.isNotBlank(studentNum)) { 409 if (org.apache.commons.lang.StringUtils.isNotBlank(studentNum)) {
411 //短信信息 410 //短信信息
412 - Message mobileMessage = searchDao.selectByParentMobile(cardNo); 411 + Message mobileMessage = userDao.selectByParentMobile(cardNo);
413 if (mobileMessage.getSchoolId() == 4) { 412 if (mobileMessage.getSchoolId() == 4) {
414 //才发送短信 413 //才发送短信
415 ShortMsg shortMsg = new ShortMsg(); 414 ShortMsg shortMsg = new ShortMsg();
@@ -423,11 +422,11 @@ public class MyTask implements ApplicationRunner { @@ -423,11 +422,11 @@ public class MyTask implements ApplicationRunner {
423 } else { 422 } else {
424 shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后进校,请知晓;"); 423 shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后进校,请知晓;");
425 } 424 }
426 - searchDao.insertMessage(shortMsg.getTableName(),shortMsg.getSchoolId()+"",shortMsg.getMobile(),shortMsg.getMsg()); 425 + userDao.insertMessage(shortMsg.getTableName(),shortMsg.getSchoolId()+"",shortMsg.getMobile(),shortMsg.getMsg());
427 } 426 }
428 } else { 427 } else {
429 //若即不成功,也不是请假,则按刷卡异常处理 428 //若即不成功,也不是请假,则按刷卡异常处理
430 - User user = searchDao.selectUserByCardNum(cardNo).get(0); 429 + User user = userDao.selectUserByCardNum(cardNo).get(0);
431 if(user ==null ){ 430 if(user ==null ){
432 System.out.println("卡号"+cardNo+"没找到对应学生或老师"); 431 System.out.println("卡号"+cardNo+"没找到对应学生或老师");
433 } 432 }
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java
@@ -10,6 +10,7 @@ import com.example.dahua.bean.TeacherBean; @@ -10,6 +10,7 @@ import com.example.dahua.bean.TeacherBean;
10 import com.example.dahua.bean.UserInfoBean; 10 import com.example.dahua.bean.UserInfoBean;
11 import com.example.dahua.common.Res; 11 import com.example.dahua.common.Res;
12 import com.example.dahua.dao.UserDao; 12 import com.example.dahua.dao.UserDao;
  13 +import com.example.dahua.enums.*;
13 import com.example.dahua.lib.CompressPic; 14 import com.example.dahua.lib.CompressPic;
14 import com.example.dahua.lib.FilePath; 15 import com.example.dahua.lib.FilePath;
15 import com.example.dahua.lib.NetSDKLib; 16 import com.example.dahua.lib.NetSDKLib;
@@ -44,21 +45,32 @@ public class SendUserInfoTask { @@ -44,21 +45,32 @@ public class SendUserInfoTask {
44 @Autowired 45 @Autowired
45 SendRecordDao sendRecordDao; 46 SendRecordDao sendRecordDao;
46 47
  48 + /**
  49 + * 下发单个用户人脸任务
  50 + * @param file
  51 + * @param attendanceBeans
  52 + * @param userInfoBean
  53 + * @param schoolId
  54 + * @param failType
  55 + * @param userType
  56 + * @throws Exception
  57 + */
47 // @Async("taskExecutor") 58 // @Async("taskExecutor")
48 public void doTaskOne(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String schoolId, int failType, int userType) throws Exception { 59 public void doTaskOne(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String schoolId, int failType, int userType) throws Exception {
49 File studentFile = new File(file); 60 File studentFile = new File(file);
  61 + //学籍号
50 String studentCode = studentFile.getName().split("\\.")[0]; 62 String studentCode = studentFile.getName().split("\\.")[0];
51 //判断是否是副卡 63 //判断是否是副卡
52 String[] studentCodes = studentCode.split("_"); 64 String[] studentCodes = studentCode.split("_");
53 65
54 -  
55 - if (studentCodes.length > 1) {//副卡  
56 - 66 + //副卡
  67 + if (studentCodes.length > 1) {
57 String cardType = studentCodes[1]; 68 String cardType = studentCodes[1];
  69 + //获取卡号
58 String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), cardType); 70 String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), cardType);
59 userInfoBean.setStudent_num(cardNum); 71 userInfoBean.setStudent_num(cardNum);
60 -  
61 } 72 }
  73 + //设置下发记录
62 SendRecordBean sendRecordBean = new SendRecordBean(); 74 SendRecordBean sendRecordBean = new SendRecordBean();
63 sendRecordBean.setSchoolId(Integer.parseInt(schoolId)); 75 sendRecordBean.setSchoolId(Integer.parseInt(schoolId));
64 sendRecordBean.setSchoolName(userDao.getSchoolName(schoolId)); 76 sendRecordBean.setSchoolName(userDao.getSchoolName(schoolId));
@@ -67,9 +79,11 @@ public class SendUserInfoTask { @@ -67,9 +79,11 @@ public class SendUserInfoTask {
67 sendRecordBean.setNum(userInfoBean.getStudent_num()); 79 sendRecordBean.setNum(userInfoBean.getStudent_num());
68 sendRecordBean.setName(userInfoBean.getName()); 80 sendRecordBean.setName(userInfoBean.getName());
69 sendRecordBean.setImgPath(file); 81 sendRecordBean.setImgPath(file);
  82 + //用户id(即学生ID)
70 sendRecordBean.setCustomerid(userInfoBean.getStudent_id()); 83 sendRecordBean.setCustomerid(userInfoBean.getStudent_id());
71 sendRecordBean.setFailType(failType); 84 sendRecordBean.setFailType(failType);
72 - sendUserInfoToDev(file, attendanceBeans, userInfoBean, userType + "", sendRecordBean); 85 + //下发至设备
  86 + sendUserInfoToDev(file, attendanceBeans, userInfoBean, String.valueOf(userType), sendRecordBean);
73 } 87 }
74 88
75 // @Async("taskExecutor") 89 // @Async("taskExecutor")
@@ -217,26 +231,30 @@ public class SendUserInfoTask { @@ -217,26 +231,30 @@ public class SendUserInfoTask {
217 231
218 private synchronized boolean sendUserInfoToDev(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String userType, SendRecordBean sendRecordBean) { 232 private synchronized boolean sendUserInfoToDev(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String userType, SendRecordBean sendRecordBean) {
219 try { 233 try {
  234 + //用户信息
220 if (userInfoBean == null) { 235 if (userInfoBean == null) {
221 - System.out.println("学生用户不存在"); 236 + log.warn("学生用户信息不存在");
222 return false; 237 return false;
223 } 238 }
224 - if (attendanceBeans.size() == 0) {//"该学校下没有人脸设备"  
225 - System.out.println("该学校下没有人脸设备:");  
226 - sendRecordBean.setFailType(2);  
227 - sendRecordBean.setFailContent("图片目录不存在");  
228 - String schoolName = sendRecordDao.getSchoolDevice(sendRecordBean.getSchoolId(), 2);//判断是否已经记录改学校没有设备  
229 - if (StringUtils.isEmpty(schoolName)) {//不存在记录则添加,保证没有设备的学校记录只有一条  
230 - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态  
231 - addFailDace(sendRecordBean);  
232 - }  
233 - return false;  
234 - }  
235 - 239 + //卡号
236 String cardNum = userInfoBean.getStudent_num(); 240 String cardNum = userInfoBean.getStudent_num();
237 - System.out.println("cardNum:" + cardNum);  
238 if (StringUtils.isEmpty(cardNum) || cardNum.equals("null")) { 241 if (StringUtils.isEmpty(cardNum) || cardNum.equals("null")) {
239 - System.out.println("卡号为空"); 242 + log.warn("下发卡号为空");
  243 + return false;
  244 + }
  245 + //该学校下没有人脸设备
  246 + if (attendanceBeans.size() == 0) {
  247 + sendRecordBean.setFailType(EnumSendFaceType.NOT_EXIST_DEVICE.code);
  248 + sendRecordBean.setFailContent(EnumSendFaceType.NOT_EXIST_DEVICE.message);
  249 + //获取学校下发失败记录,判断是否已经记录该学校没有设备
  250 + String schoolName = sendRecordDao.getSchoolDevice(sendRecordBean.getSchoolId(), EnumSendFaceType.NOT_EXIST_DEVICE.code);
  251 + //不存在记录则添加,保证没有设备的学校记录只有一条
  252 + if (StringUtils.isEmpty(schoolName)) {
  253 + //更新下发失败状态
  254 + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_EXIST_DEVICE.code);
  255 + addFailDace(sendRecordBean);
  256 + }
  257 + log.warn("该学校下没有人脸设备");
240 return false; 258 return false;
241 } 259 }
242 260
@@ -276,9 +294,9 @@ public class SendUserInfoTask { @@ -276,9 +294,9 @@ public class SendUserInfoTask {
276 } catch (Exception e) { 294 } catch (Exception e) {
277 e.printStackTrace(); 295 e.printStackTrace();
278 } 296 }
279 -  
280 - for (AttendanceBean attendanceBean :  
281 - attendanceBeans) { 297 + log.info("下发人脸设备总数,size: "+ attendanceBeans.size());
  298 + //下发至所有设备
  299 + for (AttendanceBean attendanceBean : attendanceBeans) {
282 pushCardAndFace(attendanceBean, userInfoBean.getUser_id(), userInfoBean.getStudent_num(), userInfoBean.getName(), memory, sendRecordBean,userType); 300 pushCardAndFace(attendanceBean, userInfoBean.getUser_id(), userInfoBean.getStudent_num(), userInfoBean.getName(), memory, sendRecordBean,userType);
283 } 301 }
284 } 302 }
@@ -295,136 +313,202 @@ public class SendUserInfoTask { @@ -295,136 +313,202 @@ public class SendUserInfoTask {
295 */ 313 */
296 private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) { 314 private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) {
297 try{ 315 try{
298 - sendRecordBean.setDeviceID(attendanceBean.getClint_id());  
299 - sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id()));  
300 - sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));  
301 - sendRecordBean.setSchoolName(userDao.getSchoolName(attendanceBean.getSchool_id()));  
302 - String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());  
303 - Calendar calendar = Calendar.getInstance();  
304 - calendar.add(Calendar.YEAR, 4);  
305 - String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());  
306 - //记录集编号,存在于设备的,默认为 -1, 其他值为存在下发记录  
307 - int bCardFlags = -1;  
308 - //从下发记录表:SZ_Student_RecoderNo 获取记录集编号  
309 - bCardFlags = userDao.getRecordNo(user_id, attendanceBean.getClint_id()) == null ? -1 : Integer.parseInt(userDao.getRecordNo(user_id, attendanceBean.getClint_id()));  
310 -  
311 - NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id());  
312 - log.info("设备ID: {},设备登录句柄: {}",loginHandleLong,attendanceBean.getClint_id() );  
313 -  
314 - //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线  
315 - if (loginHandleLong == null) {  
316 - log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() );  
317 - FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices);  
318 - String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id());  
319 - sendRecordBean.setFailType(2);  
320 - sendRecordBean.setFailContent("设备不在线");  
321 - if (!StringUtils.isEmpty(deviceId)) {  
322 - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态  
323 - addFailDace(sendRecordBean);  
324 - }  
325 - } else { 316 + sendRecordBean.setDeviceID(attendanceBean.getClint_id());
  317 + sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id()));
  318 + sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  319 + sendRecordBean.setSchoolName(userDao.getSchoolName(attendanceBean.getSchool_id()));
  320 +
  321 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  322 + Calendar calendar = Calendar.getInstance();
  323 + calendar.add(Calendar.YEAR, 4);
  324 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  325 +
  326 + /**
  327 + * 注:用户下发逻辑
  328 + * 下发时,先从下发记录表:SZ_Student_RecoderNo 获取当前用户下发记录集编号,存在于设备的,新增卡号时返回,
  329 + * 若存在记录集编号,则表示用户已下发过,执行修改用户信息,反之,则新增下发用户人脸、卡信息
  330 + */
  331 +
326 //人脸下发成功标识:false:失败 true:成功 332 //人脸下发成功标识:false:失败 true:成功
327 boolean bFaceFalgs = false; 333 boolean bFaceFalgs = false;
328 - //卡号取反  
329 - String cardNum = cardNo(student_num);  
330 - log.info("=====开始执行下发人脸及卡号任务=====: clintId:{}, userId:{}, cardNum:{}, name:{} ",attendanceBean.getClint_id(),user_id,cardNum,name);  
331 - if (bCardFlags != -1) {  
332 - //修改设备卡信息  
333 - boolean isEditCard = GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1),  
334 - 0, 0, 1, startTime, endTime, loginHandleLong, userType);  
335 -  
336 - if (isEditCard) {  
337 - //设备修改卡成功, 更新下发记录表  
338 - userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id());  
339 - //设备卡修改成功后,更新设备人脸信息  
340 - boolean isEditFace = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong);  
341 - //修改卡信息成功,但是人脸不成功的话,就需要新增人脸  
342 - if (!isEditFace) {  
343 - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); 334 + //卡下发成功标识:false:失败 true:成功
  335 + boolean bCardFlags = false;
  336 + //卡操作错误号
  337 + String cardErrNum ="";
  338 + //人脸操作错误号
  339 + String faceErrNum ="";
  340 + //新的记录集编号
  341 + int newRecordNo = 0;
  342 + //获取记录集编号
  343 + String recordNo = userDao.getRecordNo(user_id, attendanceBean.getClint_id());
  344 + if(!StringUtils.isEmpty(recordNo)){
  345 + bCardFlags = true;
  346 + }
  347 + //登录设备
  348 + NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id());
  349 + log.info("设备ID: {},设备登录句柄: {}",attendanceBean.getClint_id(),loginHandleLong);
  350 +
  351 + //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线
  352 + if (loginHandleLong == null) {
  353 + log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() );
  354 + FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices);
  355 + //设备不在线
  356 + sendRecordBean.setFailType(EnumSendFaceType.NOT_ONLINE_DEVICE.code);
  357 + sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message);
  358 + //判断该学校设备ID对应失败记录是否存在:Face_SendFail
  359 + String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id());
  360 + if (!StringUtils.isEmpty(deviceId)) {
  361 + //更新下发失败状态
  362 + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_ONLINE_DEVICE.code);
  363 + //添加下发失败记录
  364 + addFailDace(sendRecordBean);
  365 + }
  366 + } else {
  367 + log.info("=================开始执行下发人脸及卡号任务=================");
  368 + //卡号取反
  369 + String cardNum = cardNo(student_num);
  370 + //bCardFlags = true, 存在下发记录,则存在下发记录集编号,执行修改卡、人脸信息
  371 + if (bCardFlags) {
  372 + //修改设备卡信息
  373 + boolean isEditCard = GateModule.modifyCard(Integer.parseInt(recordNo),cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1),
  374 + Res.string().getCardTypeInt(1), 0, 0, 1, startTime, endTime, loginHandleLong, userType,cardErrNum);
  375 +
  376 + if (isEditCard) {
  377 + //修改卡成功, 更新下发记录集编号表
  378 + userDao.updateRecordNo(user_id, Integer.parseInt(recordNo), attendanceBean.getClint_id());
  379 + //修改卡成功, 更新设备用户人脸信息
  380 + boolean isEditFace = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong,faceErrNum);
  381 + //修改卡信息成功,但是人脸修改不成功的话,就需要新增人脸
  382 + if (!isEditFace) {
  383 + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum);
  384 + }
  385 + }else{
  386 + //设备修改卡信息失败,则删除下发记录集编号表记录:SZ_Student_RecoderNo,重新下发.
  387 + userDao.deleteRecordNo(user_id, Integer.parseInt(recordNo));
  388 + //重新下发卡号至设备
  389 + newRecordNo = GateModule.insertCard(cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1),
  390 + Res.string().getCardTypeInt(1), 0, 1, 1, startTime, endTime, loginHandleLong,userType,cardErrNum);
  391 +
  392 + //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表
  393 + if (newRecordNo != -1) {
  394 + userDao.saveRecordNo(user_id, newRecordNo, name, attendanceBean.getClint_id());//存储记录集编号
  395 + }
  396 + //添加人脸
  397 + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum);
344 } 398 }
345 - }else{  
346 - //设备修改卡信息失败,则删除下发记录集编号表记录:SZ_Student_RecoderNo,重新下发.  
347 - userDao.deleteRecordNo(user_id, bCardFlags);  
348 - //重新下发卡号至设备  
349 - bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" 399 +
  400 + } else {
  401 + //新增卡信息, 新增人脸信息至设备
  402 + newRecordNo = GateModule.insertCard(cardNum, user_id, name, "123456"
350 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 403 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1
351 - , 1, startTime, endTime, loginHandleLong,userType); 404 + , 1, startTime, endTime, loginHandleLong,userType,cardErrNum);
  405 +
352 //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表 406 //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表
353 - if (bCardFlags != -1) {  
354 - userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 407 + if (newRecordNo != -1) {
  408 + userDao.saveRecordNo(user_id, newRecordNo, name, attendanceBean.getClint_id());
355 } 409 }
356 //添加人脸 410 //添加人脸
357 - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);  
358 - } 411 + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum);
359 412
360 - } else {  
361 - //新增卡信息, 新增人脸信息至设备  
362 - bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456"  
363 - , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1  
364 - , 1, startTime, endTime, loginHandleLong,userType);  
365 - //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表  
366 - if (bCardFlags != -1) {  
367 - userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());  
368 } 413 }
369 - //添加人脸  
370 - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);  
371 -  
372 - }  
373 -  
374 - if (bCardFlags != -1 && bFaceFalgs) {  
375 - FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);  
376 - log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));  
377 -  
378 - //人脸下发成功记录, 先判断是否已经存在了  
379 - List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getCustomerid());  
380 - if (sendRecordBeanList.size() > 0) {  
381 - //删除重复数据  
382 - for (int i = 0; i < sendRecordBeanList.size(); i++) {  
383 - sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum()); 414 + /**
  415 + * 人脸和卡都下发成功
  416 + */
  417 + if (bCardFlags && bFaceFalgs) {
  418 + FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
  419 + log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));
  420 +
  421 + //人脸下发成功记录, 先判断是否已经存在了
  422 + List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getNum());
  423 + if (sendRecordBeanList.size() > 0) {
  424 + //删除重复数据
  425 + for (int i = 0; i < sendRecordBeanList.size(); i++) {
  426 + sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum());
  427 + }
384 } 428 }
  429 + //重新添加人脸下发记录
  430 + sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
  431 + sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22);
385 432
  433 + //重新下发时,删除之前失败记录
  434 + if (sendRecordBean.getFailType() != 0){
  435 + sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID());
  436 + }
  437 + }
  438 + /**
  439 + * 人脸和卡都下发失败
  440 + */
  441 + if (!bCardFlags && !bFaceFalgs) {
  442 + FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt);
  443 + log.info("下发人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));
  444 + //失败信息
  445 + String failContent = analysisErrorMsg(cardErrNum,faceErrNum);
  446 + sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code);
  447 + sendRecordBean.setFailContent(failContent);
  448 + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_AND_CARD_FAIL.code);
  449 + addFailDace(sendRecordBean);
  450 + }
  451 + /**
  452 + * 下发卡号成功,下发人脸失败,
  453 + */
  454 + if (bCardFlags && !bFaceFalgs) {
  455 + FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt);
  456 + log.info("下发卡号成功,下发人脸失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean));
  457 + //失败信息
  458 + String failContent = analysisErrorMsg(cardErrNum,faceErrNum);
  459 + sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code);
  460 + sendRecordBean.setFailContent(failContent);
  461 + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code);
  462 + addFailDace(sendRecordBean);
  463 + }
  464 + /**
  465 + * 下发卡号失败,下发人脸成功,
  466 + * 注:此一般不存在
  467 + */
  468 + if (!bCardFlags && bFaceFalgs) {
  469 + FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
  470 + log.info("-----------卡信息已存在,添加人脸成功----------");
386 } 471 }
387 - //重新添加人脸下发记录  
388 - sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),  
389 - sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22);  
390 -  
391 - //删除成功  
392 - if (sendRecordBean.getFailType() != 0)  
393 - sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID());  
394 -  
395 - }  
396 -  
397 - // 添加卡信息和人脸失败  
398 - if (bCardFlags == -1 && !bFaceFalgs) {  
399 - FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt);  
400 - log.error("下发人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));  
401 - sendRecordBean.setFailContent("下发人脸和卡号失败");  
402 - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 7);//更新下发失败状态  
403 - sendRecordBean.setFailType(8);  
404 - addFailDace(sendRecordBean);  
405 - }  
406 -  
407 - // 添加卡信息成功,添加人脸失败  
408 - if (bCardFlags != -1 && !bFaceFalgs) {  
409 - FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt);  
410 - log.error("下发人脸和卡号失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean));  
411 - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 5);//更新下发失败状态  
412 - sendRecordBean.setFailContent("下发卡号成功,人脸失败:照片特征值提取失败");  
413 - sendRecordBean.setFailType(5);  
414 - addFailDace(sendRecordBean);  
415 } 472 }
  473 + } catch (Exception e) {
  474 + e.printStackTrace();
  475 + }
  476 + }
416 477
417 - // 卡信息已存在,添加人脸成功,此情况不存在.  
418 - if (bCardFlags == -1 && bFaceFalgs) {  
419 - FileUtils.getInstance().writeLogs("下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);  
420 - System.out.println("卡信息已存在,添加人脸成功-----------\n"); 478 + /**
  479 + * 解析下发异常信息
  480 + * @param cardErrNum
  481 + * @param faceErrNum
  482 + * @return
  483 + */
  484 + private String analysisErrorMsg(String cardErrNum,String faceErrNum){
  485 + StringBuffer sb = new StringBuffer();
  486 + //卡异常信息
  487 + if(!StringUtils.isEmpty(cardErrNum)){
  488 + EnumSendCardErrorType enumSendCardErrorType = EnumSendCardErrorType.getByCode(cardErrNum);
  489 + String message = "";
  490 + if(enumSendCardErrorType !=null){
  491 + message= enumSendCardErrorType.getMessage();
  492 + sb.append("下发卡:").append(message).append(";");
421 } 493 }
  494 + log.info("下发卡失败,错误码:{},错误描述:{}",cardErrNum,message);
422 } 495 }
423 - } catch (Exception e) {  
424 - e.printStackTrace(); 496 + //人脸异常信息
  497 + if(!StringUtils.isEmpty(faceErrNum)){
  498 + EnumSendFaceErrorType enumSendFaceErrorType = EnumSendFaceErrorType.getByCode(faceErrNum);
  499 + String message = "";
  500 + if(enumSendFaceErrorType !=null){
  501 + message= enumSendFaceErrorType.getMessage();
  502 + sb.append("下发人脸:").append(message);
  503 + }
  504 + log.info("下发人脸失败,错误码:{},错误描述:{}",faceErrNum,message);
425 } 505 }
  506 + return sb.toString();
426 } 507 }
427 508
  509 + public static void main(String[] args) {
  510 + System.out.println(new SendUserInfoTask().analysisErrorMsg("",""));
  511 + }
428 512
429 /** 513 /**
430 * 添加人脸下发失败记录 514 * 添加人脸下发失败记录
@@ -440,15 +524,16 @@ public class SendUserInfoTask { @@ -440,15 +524,16 @@ public class SendUserInfoTask {
440 for (int i = 0; i < sendRecordBeanList.size(); i++) { 524 for (int i = 0; i < sendRecordBeanList.size(); i++) {
441 sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID()); 525 sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID());
442 } 526 }
443 - 527 + //TODO 不明含义
444 if (sendRecordBean.getFailType() == 5) sendRecordBean.setFailType(8); 528 if (sendRecordBean.getFailType() == 5) sendRecordBean.setFailType(8);
445 -  
446 - String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom",  
447 - String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), sendRecordBean.getUserType() == 1 ? "Teacher" : "Student")); 529 + //
  530 + String rootPath = sendRecordBean.getUserType() == EnumSzBusinessType.EnumUserType.TEACHER.code ? "Teacher" : "Student" ;
  531 + //人脸路径
  532 + String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom", String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), rootPath));
448 533
449 //添加失败记录 534 //添加失败记录
450 sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), 535 sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
451 - sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22); 536 + sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), EnumDeviceType.DH_FACE.deviceType);
452 } 537 }
453 538
454 539
cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java
@@ -7,27 +7,27 @@ import java.io.Serializable; @@ -7,27 +7,27 @@ import java.io.Serializable;
7 */ 7 */
8 public class SendRecordBean implements Serializable { 8 public class SendRecordBean implements Serializable {
9 9
10 -  
11 - private String customerid;//用户编号  
12 - 10 + //用户编号:学生student_id;老师teacher_id
  11 + private String customerid;
  12 + //卡号
13 private String Num; 13 private String Num;
14 - 14 + //用户姓名
15 private String Name; 15 private String Name;
16 - 16 + //学校ID
17 private int schoolId; 17 private int schoolId;
18 -  
19 - private String schoolName;//下发结果  
20 - 18 + //学校名
  19 + private String schoolName;
  20 + //设备iD
21 private String deviceID; 21 private String deviceID;
22 -  
23 - private String imgPath;//下发的图片路径  
24 - 22 + //下发的图片路径
  23 + private String imgPath;
  24 + //用户类型
25 private int userType; 25 private int userType;
26 - 26 + //下发时间
27 private String time; 27 private String time;
28 - 28 + //下发失败原因
29 private String failContent; 29 private String failContent;
30 - 30 + //下发失败类型:详情见枚举:EnumSendFaceType
31 private int failType; 31 private int failType;
32 32
33 33
cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
@@ -42,6 +42,16 @@ public class FileControl { @@ -42,6 +42,16 @@ public class FileControl {
42 @Autowired 42 @Autowired
43 UserDao userDao; 43 UserDao userDao;
44 44
  45 + /**
  46 + * 单个人脸下发至设备
  47 + * @param file
  48 + * @param schoolId
  49 + * @param studentCode
  50 + * @param clint_type
  51 + * @param userType
  52 + * @param deviceId
  53 + * @return
  54 + */
45 @RequestMapping(method = RequestMethod.POST, value = "uploadImg") 55 @RequestMapping(method = RequestMethod.POST, value = "uploadImg")
46 public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, 56 public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId,
47 @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type, 57 @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type,
@@ -67,6 +77,11 @@ public class FileControl { @@ -67,6 +77,11 @@ public class FileControl {
67 return "0"; 77 return "0";
68 } 78 }
69 79
  80 + /**
  81 + * 权限下发至设备
  82 + * @param permissionBean
  83 + * @return
  84 + */
70 @RequestMapping(value = "sendPermission", method = RequestMethod.POST) 85 @RequestMapping(value = "sendPermission", method = RequestMethod.POST)
71 @ApiOperation(value = "设置权限") 86 @ApiOperation(value = "设置权限")
72 public boolean sendPermission(@RequestBody PermissionBean permissionBean) { 87 public boolean sendPermission(@RequestBody PermissionBean permissionBean) {
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
@@ -48,7 +48,14 @@ public class UserControl { @@ -48,7 +48,14 @@ public class UserControl {
48 @Autowired 48 @Autowired
49 UserDao userDao; 49 UserDao userDao;
50 50
51 - 51 + /**
  52 + * 单个人脸下发至设备
  53 + * @param file
  54 + * @param schoolId
  55 + * @param studentCode
  56 + * @param clint_type
  57 + * @return
  58 + */
52 @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET) 59 @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET)
53 @ApiOperation(value = "上传用户信息") 60 @ApiOperation(value = "上传用户信息")
54 public boolean uploadImgAndUserInfo(@RequestParam("file") String file, @RequestParam("schoolId") String schoolId, @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type,@RequestParam(value = "deviceId",required = false) String deviceId) { 61 public boolean uploadImgAndUserInfo(@RequestParam("file") String file, @RequestParam("schoolId") String schoolId, @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type,@RequestParam(value = "deviceId",required = false) String deviceId) {
@@ -56,6 +63,11 @@ public class UserControl { @@ -56,6 +63,11 @@ public class UserControl {
56 return HttpUtils.uploadImgs(new File(file), schoolId, studentCode, clint_type, file.contains("Teacher") ? 1 : 2,deviceId); 63 return HttpUtils.uploadImgs(new File(file), schoolId, studentCode, clint_type, file.contains("Teacher") ? 1 : 2,deviceId);
57 } 64 }
58 65
  66 + /**
  67 + * 权限下发至设备
  68 + * @param permissionBean
  69 + * @return
  70 + */
59 @RequestMapping(value = "sendPermission", method = RequestMethod.POST) 71 @RequestMapping(value = "sendPermission", method = RequestMethod.POST)
60 @ApiOperation(value = "设置权限") 72 @ApiOperation(value = "设置权限")
61 public boolean sendPermission(@RequestBody PermissionBean permissionBean) { 73 public boolean sendPermission(@RequestBody PermissionBean permissionBean) {
@@ -69,6 +81,12 @@ public class UserControl { @@ -69,6 +81,12 @@ public class UserControl {
69 return true; 81 return true;
70 } 82 }
71 83
  84 + /**
  85 + * 批量下发人脸
  86 + * @param deviceIds
  87 + * @param schoolId
  88 + * @param userType
  89 + */
72 @RequestMapping(value = "sendFaces", method = RequestMethod.GET) 90 @RequestMapping(value = "sendFaces", method = RequestMethod.GET)
73 @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备") 91 @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备")
74 public void sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) { 92 public void sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) {
cloud/dahua/src/main/java/com/example/dahua/dao/SearchDao.java
@@ -1,55 +0,0 @@ @@ -1,55 +0,0 @@
1 -package com.example.dahua.dao;  
2 -  
3 -import com.example.dahua.bean.CheckIn;  
4 -import com.example.dahua.bean.Message;  
5 -import com.example.dahua.bean.User;  
6 -import org.apache.ibatis.annotations.Param;  
7 -import org.apache.ibatis.annotations.Select;  
8 -import org.springframework.stereotype.Repository;  
9 -  
10 -import java.util.List;  
11 -  
12 -@Repository  
13 -public interface SearchDao {  
14 - /**  
15 - * 考勤推送存储过程  
16 - * @param checkIn  
17 - * @return  
18 - */  
19 - int checkIn(CheckIn checkIn);  
20 -  
21 - /**  
22 - * 获取学生信息  
23 - * @param cardNum  
24 - * @return  
25 - */  
26 - List<User> selectUserByCardNum(String cardNum);  
27 -  
28 - /**  
29 - * 获取卡号  
30 - * @param cardNo  
31 - * @return  
32 - */  
33 - @Select("select Top(1) StudentNum from HS_LeaveExaminePassList where StudentNum= #{cardNo} and GETDATE() <![CDATA[ > ]]> LeaveTime and GETDATE() <![CDATA[ < ]]> ReturnTime")  
34 - String checkLeave(@Param("cardNo") String cardNo);  
35 -  
36 - /**  
37 - * 获取学生父母电话  
38 - * @param cardNo  
39 - * @return  
40 - */  
41 - @Select("select school_id , ParentMobile , name from SZ_V_School_Student where student_num = #{cardNo}")  
42 - Message selectByParentMobile(@Param("cardNo") String cardNo);  
43 -  
44 - /**  
45 - * 插入短信发送表  
46 - * @param tableName  
47 - * @param schoolId  
48 - * @param mobile  
49 - * @param msg  
50 - */  
51 - @Select("insert into ${tableName} (SchoolID,Mobile,Msg,tdtype,Status,IsNeedSend,SendTime,intime) values (#{schoolId},#{mobile},#{msg},1,0,1,GETDATE(),GETDATE())")  
52 - void insertMessage(@Param("tableName") String tableName,@Param("schoolId") String schoolId,@Param("mobile") String mobile,@Param("msg") String msg);  
53 -  
54 -  
55 -}  
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
@@ -169,4 +169,47 @@ public interface UserDao { @@ -169,4 +169,47 @@ public interface UserDao {
169 " where studentcode = #{studentcode} and school_id = #{school_id}\n" + 169 " where studentcode = #{studentcode} and school_id = #{school_id}\n" +
170 ")") 170 ")")
171 void updateStu(@Param("studentcode") String studentCode,@Param("httpUrl") String httpUrl,@Param("school_id")String school_id); 171 void updateStu(@Param("studentcode") String studentCode,@Param("httpUrl") String httpUrl,@Param("school_id")String school_id);
  172 +
  173 + /**
  174 + * 获取学生信息
  175 + * @param cardNum
  176 + * @return
  177 + */
  178 + @Select(" select school_id , class_id ,name ,student_id from\n" +
  179 + " (select top 1 b.school_id, b.class_id, b.name, student_id from SZ_V_Card a\n" +
  180 + " inner join SZ_V_School_Student b on a.user_id = b.student_id\n" +
  181 + " and b.role_state = 1 where a.type = 2 and a.num = #{cardNum}\n" +
  182 + " union\n" +
  183 + " select top 1 b.school_id, 0 as class_id, b.name,b.teacher_id as student_id from SZ_V_Card a\n" +
  184 + " inner join SZ_V_School_Teacher b on a.user_id = b.teacher_id\n" +
  185 + " and b.role_state = 1 where a.type = 0 and a.num = #{cardNum}\n" +
  186 + " ) x ")
  187 + List<User> selectUserByCardNum(@Param("studentcode") String cardNum);
  188 +
  189 + /**
  190 + * 获取卡号
  191 + * @param cardNo
  192 + * @return
  193 + */
  194 + @Select("select Top(1) StudentNum from HS_LeaveExaminePassList where StudentNum= #{cardNo} and GETDATE() <![CDATA[ > ]]> LeaveTime and GETDATE() <![CDATA[ < ]]> ReturnTime")
  195 + String checkLeave(@Param("cardNo") String cardNo);
  196 +
  197 + /**
  198 + * 获取学生父母电话
  199 + * @param cardNo
  200 + * @return
  201 + */
  202 + @Select("select school_id , ParentMobile , name from SZ_V_School_Student where student_num = #{cardNo}")
  203 + Message selectByParentMobile(@Param("cardNo") String cardNo);
  204 +
  205 + /**
  206 + * 插入短信发送表
  207 + * @param tableName
  208 + * @param schoolId
  209 + * @param mobile
  210 + * @param msg
  211 + */
  212 + @Insert("insert into ${tableName} (SchoolID,Mobile,Msg,tdtype,Status,IsNeedSend,SendTime,intime) values (#{schoolId},#{mobile},#{msg},1,0,1,GETDATE(),GETDATE())")
  213 + void insertMessage(@Param("tableName") String tableName, @Param("schoolId") String schoolId, @Param("mobile") String mobile, @Param("msg") String msg);
  214 +
172 } 215 }
cloud/dahua/src/main/java/com/example/dahua/dbconfig/MessageDataSourceConfig.java
@@ -10,7 +10,6 @@ import org.springframework.context.annotation.Bean; @@ -10,7 +10,6 @@ import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Configuration; 10 import org.springframework.context.annotation.Configuration;
11 import org.springframework.context.annotation.Primary; 11 import org.springframework.context.annotation.Primary;
12 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 12 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
13 -import org.springframework.jdbc.core.JdbcTemplate;  
14 13
15 import javax.sql.DataSource; 14 import javax.sql.DataSource;
16 15
cloud/dahua/src/main/java/com/example/dahua/enums/EnumDeviceType.java 0 → 100644
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +package com.example.dahua.enums;
  2 +
  3 +/**
  4 + * 设备类型枚举
  5 + *
  6 + * @author xuquan
  7 + * @date 2020/11/11 16:06
  8 + */
  9 +
  10 +public enum EnumDeviceType {
  11 +
  12 + SCHOOL_CARD(1, "校牌"),
  13 + CLASS_CARD(2, "班牌"),
  14 + CLOUD_WINDOW(4, "云视窗"),
  15 + ZJ_CONTROL(6, "闸机控制器"),
  16 + LOAN_PERIOD(7, "话机"),
  17 + HK_FACE(18, "海康人脸设备"),
  18 + FACE(19, "人脸设备"),
  19 + DH_FACE(22, "大华人脸设备"),
  20 + HK_ZW(23, "海康指纹机"),
  21 + ZK_ZW(24, "中控指纹机"),
  22 + BG_FACE_WG(25, "博观人脸带温感"),
  23 + BG_FACE_CG(26, "博观人脸常规"),
  24 + LQ_QS(27, "乐清寝室看板"),
  25 + HK_FACE_YTJ(28, "海康人脸权限一体机"),
  26 + DH_FACE_YTJ(29, "大华人脸权限一体机");
  27 +
  28 + public final int deviceType;
  29 + public final String deviceName;
  30 +
  31 + EnumDeviceType(int deviceType, String deviceName) {
  32 + this.deviceType = deviceType;
  33 + this.deviceName = deviceName;
  34 + }
  35 +
  36 +}
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendCardErrorType.java 0 → 100644
@@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
  1 +package com.example.dahua.enums;
  2 +
  3 +import org.apache.commons.lang.StringUtils;
  4 +
  5 +/**
  6 + *下发卡常见异常码、异常描述枚举
  7 + * @author xuquan
  8 + * @date 2020/11/11 15:19
  9 + */
  10 +
  11 +public enum EnumSendCardErrorType {
  12 +
  13 + CHECK_DATA_ERR_21("21", "对返回数据的校验出错"),
  14 + EXIST_USER_146("146", "用户已存在"),
  15 + NOT_ONLINE_USER_147("147", "用户不存在"),
  16 + UNKNOWN_1091("1091" , "未知错误"),
  17 + UNKNOWN_1147("1147" , "未知错误"),
  18 + UNKNOWN_1162("1162", "未知错误");
  19 +
  20 + public final String code;
  21 + public final String message;
  22 +
  23 + public String getCode() {
  24 + return code;
  25 + }
  26 +
  27 + public String getMessage() {
  28 + return message;
  29 + }
  30 +
  31 + EnumSendCardErrorType(String code, String message) {
  32 + this.code = code;
  33 + this.message = message;
  34 + }
  35 +
  36 + /**
  37 + * 根据key获得具体的值
  38 + */
  39 + public static EnumSendCardErrorType getByCode(String code){
  40 + if(StringUtils.isBlank(code)){
  41 + return null;
  42 + }
  43 + for(EnumSendCardErrorType enums: EnumSendCardErrorType.values()){
  44 + if(enums.getCode().equals(code)){
  45 + return enums;
  46 + }
  47 + }
  48 + return null;
  49 + }
  50 +
  51 +}
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java 0 → 100644
@@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
  1 +package com.example.dahua.enums;
  2 +
  3 +import org.apache.commons.lang.StringUtils;
  4 +
  5 +/**
  6 + * 下发人脸常见异常码、异常描述枚举
  7 + * @author xuquan
  8 + * @date 2020/11/11 15:23
  9 + */
  10 +public enum EnumSendFaceErrorType {
  11 +
  12 + EXCEED_SIZE_1028("1028", "图片大小超限"),
  13 + NOT_EXIST_USER_1029("1029", "用户ID不存在"),
  14 + EXTRACT_ERROR_1030("1030", "照片特征值提取失败"),
  15 + EXIST_IMG_1031("1031", "照片已存在"),
  16 + UPPER_LIMIT_1032("1032", "照片数量超过上限");
  17 +
  18 + public final String code;
  19 + public final String message;
  20 +
  21 + public String getCode() {
  22 + return code;
  23 + }
  24 +
  25 + public String getMessage() {
  26 + return message;
  27 + }
  28 +
  29 + EnumSendFaceErrorType(String code, String message) {
  30 + this.code = code;
  31 + this.message = message;
  32 + }
  33 +
  34 + /**
  35 + * 根据key获得具体的值
  36 + */
  37 + public static EnumSendFaceErrorType getByCode(String code){
  38 + if(StringUtils.isBlank(code)){
  39 + return null;
  40 + }
  41 + for(EnumSendFaceErrorType enums: EnumSendFaceErrorType.values()){
  42 + if(enums.getCode().equals(code)){
  43 + return enums;
  44 + }
  45 + }
  46 + return null;
  47 + }
  48 +
  49 +}
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceType.java 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +package com.example.dahua.enums;
  2 +
  3 +/**
  4 + * 下发人脸枚举配置中心
  5 + *
  6 + * @Author: xuquan
  7 + * @Date: 2020/11/1 14:59
  8 + */
  9 +public enum EnumSendFaceType {
  10 +
  11 + NOT_EXIST_DEVICE(1, "设备不存在"),
  12 + NOT_ONLINE_DEVICE(2, "设备不在线"),
  13 + FACE_AND_CARD_FAIL(3, "人脸信息、卡信息下发失败"),
  14 + FACE_FAIL_CARD_SUCCESS(4, "人脸信息下发失败,卡信息下发成功"),
  15 + FACE_SUCCESS_CARD_FAIl(5, "人脸信息下发成功,卡信息下发失败");
  16 +
  17 + public final int code;
  18 + public final String message;
  19 +
  20 + EnumSendFaceType(int code, String message) {
  21 + this.code = code;
  22 + this.message = message;
  23 + }
  24 +
  25 +}
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java 0 → 100644
@@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
  1 +package com.example.dahua.enums;
  2 +
  3 +/**
  4 + * 顺治科技智能校卫业务枚举配置中心
  5 + *
  6 + * @author xuquan
  7 + * @date 2020/11/11 14:43
  8 + */
  9 +
  10 +public interface EnumSzBusinessType {
  11 +
  12 + /**
  13 + * 用户类型
  14 + */
  15 + public enum EnumUserType {
  16 +
  17 + TEACHER(1, "teacher","老师"),
  18 + STUDENT(2, "student","学生");
  19 +// PARENT(3, "parent","家长");
  20 +
  21 + public final int code;
  22 + public final String enName;
  23 + public final String cnName;
  24 +
  25 + EnumUserType(int code, String enName,String cnName) {
  26 + this.code = code;
  27 + this.enName = enName;
  28 + this.cnName = cnName;
  29 + }
  30 + }
  31 +
  32 +// public enum EnumCardType {
  33 +//
  34 +// STUDENT(1, "student","学生"),
  35 +// TEACHER(2, "teacher","老师");
  36 +//// PARENT(3, "parent","家长");
  37 +//
  38 +// public final int code;
  39 +// public final String enName;
  40 +// public final String cnName;
  41 +//
  42 +// EnumUserType(int code, String enName,String cnName) {
  43 +// this.code = code;
  44 +// this.enName = enName;
  45 +// this.cnName = cnName;
  46 +// }
  47 +// }
  48 +
  49 +}
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
1 package com.example.dahua.module; 1 package com.example.dahua.module;
2 2
3 -import java.awt.image.BufferedImage;  
4 -import java.io.ByteArrayInputStream;  
5 -import java.io.File;  
6 -import java.io.IOException;  
7 -import java.io.UnsupportedEncodingException;  
8 -import java.util.ArrayList;  
9 -import java.util.HashMap;  
10 -import java.util.List;  
11 -import java.util.Map;  
12 -  
13 import com.example.dahua.bean.PermissionBean; 3 import com.example.dahua.bean.PermissionBean;
14 import com.example.dahua.bean.WeekDay; 4 import com.example.dahua.bean.WeekDay;
15 import com.example.dahua.bean.WeekTime; 5 import com.example.dahua.bean.WeekTime;
  6 +import com.example.dahua.enums.EnumSendCardErrorType;
  7 +import com.example.dahua.enums.EnumSendFaceErrorType;
16 import com.example.dahua.lib.NetSDKLib; 8 import com.example.dahua.lib.NetSDKLib;
17 import com.example.dahua.lib.NetSDKLib.*; 9 import com.example.dahua.lib.NetSDKLib.*;
18 import com.example.dahua.lib.ToolKits; 10 import com.example.dahua.lib.ToolKits;
@@ -21,6 +13,15 @@ import com.sun.jna.ptr.IntByReference; @@ -21,6 +13,15 @@ import com.sun.jna.ptr.IntByReference;
21 import lombok.extern.slf4j.Slf4j; 13 import lombok.extern.slf4j.Slf4j;
22 14
23 import javax.imageio.ImageIO; 15 import javax.imageio.ImageIO;
  16 +import java.awt.image.BufferedImage;
  17 +import java.io.ByteArrayInputStream;
  18 +import java.io.File;
  19 +import java.io.IOException;
  20 +import java.io.UnsupportedEncodingException;
  21 +import java.util.ArrayList;
  22 +import java.util.HashMap;
  23 +import java.util.List;
  24 +import java.util.Map;
24 25
25 26
26 @Slf4j 27 @Slf4j
@@ -201,7 +202,8 @@ public class GateModule { @@ -201,7 +202,8 @@ public class GateModule {
201 202
202 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, 203 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd,
203 int cardStatus, int cardType, int useTimes, int isFirstEnter, 204 int cardStatus, int cardType, int useTimes, int isFirstEnter,
204 - int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { 205 + int isValid, String startValidTime, String endValidTime, LLong lLong,
  206 + String userType,String cardErrNum) {
205 /** 207 /**
206 * 门禁卡记录集信息 208 * 门禁卡记录集信息
207 */ 209 */
@@ -287,16 +289,18 @@ public class GateModule { @@ -287,16 +289,18 @@ public class GateModule {
287 String ret=ToolKits.getErrorCodePrint(); 289 String ret=ToolKits.getErrorCodePrint();
288 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 290 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
289 log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number); 291 log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
290 - //146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")||  
291 - if(number.equals("21")||number.equals("146")) { 292 + cardErrNum = number;
  293 + //146用户已存在,21对返回数据的校验出错,1162未知错误
  294 + if(number.equals(EnumSendCardErrorType.CHECK_DATA_ERR_21.code)|| number.equals(EnumSendCardErrorType.EXIST_USER_146.code)||
  295 + number.equals(EnumSendCardErrorType.UNKNOWN_1162.code)) {
292 //用户已存在/返回数据校验出错时,执行删除用户 296 //用户已存在/返回数据校验出错时,执行删除用户
293 deleteUser( userId, lLong); 297 deleteUser( userId, lLong);
294 //重新下发卡至设备 298 //重新下发卡至设备
295 - return insertCard( cardNo, userId, cardName, cardPwd,  
296 - cardStatus, cardType, useTimes, isFirstEnter,  
297 - isValid, startValidTime, endValidTime, lLong, userType); 299 + cardErrNum = "";
  300 + return insertCard(cardNo, userId, cardName, cardPwd, cardStatus, cardType, useTimes, isFirstEnter,
  301 + isValid, startValidTime, endValidTime, lLong, userType,cardErrNum);
298 } 302 }
299 - //其他错误码,返回-1 303 + //新增卡失败,错误码,返回-1
300 return -1; 304 return -1;
301 } else { 305 } else {
302 log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo); 306 log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo);
@@ -682,7 +686,8 @@ public class GateModule { @@ -682,7 +686,8 @@ public class GateModule {
682 */ 686 */
683 public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, 687 public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
684 int cardStatus, int cardType, int useTimes, int isFirstEnter, 688 int cardStatus, int cardType, int useTimes, int isFirstEnter,
685 - int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { 689 + int isValid, String startValidTime, String endValidTime, LLong lLong,
  690 + String userType,String cardErrNum) {
686 /** 691 /**
687 * 门禁卡记录集信息 692 * 门禁卡记录集信息
688 */ 693 */
@@ -770,15 +775,9 @@ public class GateModule { @@ -770,15 +775,9 @@ public class GateModule {
770 String ret=ToolKits.getErrorCodePrint(); 775 String ret=ToolKits.getErrorCodePrint();
771 //结果码 776 //结果码
772 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 777 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
773 - //147用户不存在,21对返回数据的校验出错  
774 -// if(number.equals("21")||number.equals("147")) {  
775 -//  
776 -// }  
777 -// if(number.equals("1091")||number.equals("1147"))//未知错误  
778 -// {  
779 -// return Integer.parseInt(number);  
780 -// } 778 + cardErrNum = number;
781 log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); 779 log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  780 +
782 return false; 781 return false;
783 } 782 }
784 log.info("修改卡信息成功!"); 783 log.info("修改卡信息成功!");
@@ -1081,7 +1080,7 @@ public class GateModule { @@ -1081,7 +1080,7 @@ public class GateModule {
1081 log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode); 1080 log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode);
1082 } 1081 }
1083 } else { 1082 } else {
1084 - log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint()); 1083 + log.error("删除用户失败"+ ToolKits.getErrorCodePrint());
1085 } 1084 }
1086 1085
1087 stIn.read(); 1086 stIn.read();
@@ -1138,7 +1137,7 @@ public class GateModule { @@ -1138,7 +1137,7 @@ public class GateModule {
1138 return true; 1137 return true;
1139 } 1138 }
1140 1139
1141 - public static synchronized boolean addFaceInfo(String userId, Memory memory, LLong lLong) { 1140 + public static synchronized boolean addFaceInfo(String userId, Memory memory, LLong lLong,String faceErrNum) {
1142 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 1141 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加
1143 1142
1144 /** 1143 /**
@@ -1173,14 +1172,17 @@ public class GateModule { @@ -1173,14 +1172,17 @@ public class GateModule {
1173 } else { 1172 } else {
1174 String ret=ToolKits.getErrorCodePrint(); 1173 String ret=ToolKits.getErrorCodePrint();
1175 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 1174 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
1176 - log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);  
1177 - //number = 1031:照片已存在;number = 1029 :用户ID不存在  
1178 - if(number.equals("1031")){  
1179 - return modifyFaceInfo( userId, memory, lLong); 1175 + faceErrNum = number;
  1176 + log.error("添加信息失败,错误信息:{} ,错误码:{} ",ret,number);
  1177 + //照片已存在
  1178 + if(number.equals(EnumSendFaceErrorType.EXIST_IMG_1031.code)){
  1179 + faceErrNum = "";
  1180 + return modifyFaceInfo(userId, memory, lLong,faceErrNum);
1180 } 1181 }
1181 - if(number.equals("1029"))  
1182 - {  
1183 - return addFaceInfo( userId, memory, lLong); 1182 + //用户Id不存在
  1183 + if(number.equals(EnumSendFaceErrorType.NOT_EXIST_USER_1029.code)) {
  1184 + faceErrNum = "";
  1185 + return addFaceInfo( userId, memory, lLong,faceErrNum);
1184 } 1186 }
1185 return false; 1187 return false;
1186 } 1188 }
@@ -1238,7 +1240,7 @@ public class GateModule { @@ -1238,7 +1240,7 @@ public class GateModule {
1238 } 1240 }
1239 1241
1240 1242
1241 - public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) { 1243 + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong,String faceErrNum) {
1242 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 1244 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改
1243 1245
1244 /** 1246 /**
@@ -1274,6 +1276,7 @@ public class GateModule { @@ -1274,6 +1276,7 @@ public class GateModule {
1274 } else { 1276 } else {
1275 String ret=ToolKits.getErrorCodePrint(); 1277 String ret=ToolKits.getErrorCodePrint();
1276 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 1278 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
  1279 + faceErrNum = number;
1277 log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number); 1280 log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number);
1278 return false; 1281 return false;
1279 } 1282 }
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java
@@ -4,9 +4,11 @@ import com.example.dahua.MyTask; @@ -4,9 +4,11 @@ import com.example.dahua.MyTask;
4 import com.example.dahua.async.SendUserInfoTask; 4 import com.example.dahua.async.SendUserInfoTask;
5 import com.example.dahua.bean.*; 5 import com.example.dahua.bean.*;
6 import com.example.dahua.dao.UserDao; 6 import com.example.dahua.dao.UserDao;
  7 +import com.example.dahua.enums.EnumDeviceType;
7 import com.example.dahua.lib.NetSDKLib; 8 import com.example.dahua.lib.NetSDKLib;
8 import com.example.dahua.module.GateModule; 9 import com.example.dahua.module.GateModule;
9 import com.example.dahua.service.UserService; 10 import com.example.dahua.service.UserService;
  11 +import lombok.extern.slf4j.Slf4j;
10 import org.apache.commons.lang.StringUtils; 12 import org.apache.commons.lang.StringUtils;
11 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Repository; 14 import org.springframework.stereotype.Repository;
@@ -16,6 +18,7 @@ import java.util.List; @@ -16,6 +18,7 @@ import java.util.List;
16 18
17 @Repository 19 @Repository
18 @Service 20 @Service
  21 +@Slf4j
19 public class UserServiceImp implements UserService { 22 public class UserServiceImp implements UserService {
20 23
21 @Autowired 24 @Autowired
@@ -26,13 +29,16 @@ public class UserServiceImp implements UserService { @@ -26,13 +29,16 @@ public class UserServiceImp implements UserService {
26 29
27 @Override 30 @Override
28 public List<AttendanceBean> getAttendanceBeans(String schoolId, String clint_type, String devid) { 31 public List<AttendanceBean> getAttendanceBeans(String schoolId, String clint_type, String devid) {
29 -  
30 - if (!StringUtils.isEmpty(devid)) return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid); 32 + //如果设备ID未传,则返回该学校下所有设备,反之,查询对应设备
  33 + if (!StringUtils.isEmpty(devid)) {
  34 + return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid);
  35 + }
31 36
32 List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans(schoolId, clint_type); 37 List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans(schoolId, clint_type);
33 -  
34 - if (attendanceBeanList.size()==0)attendanceBeanList = userDao.getAttendanceBeans(schoolId,"29");  
35 - 38 + if (attendanceBeanList.size()==0){
  39 + //若未查询到结果,则查询大华人脸一体机 29
  40 + attendanceBeanList = userDao.getAttendanceBeans(schoolId,String.valueOf(EnumDeviceType.DH_FACE_YTJ.deviceType));
  41 + }
36 return attendanceBeanList; 42 return attendanceBeanList;
37 } 43 }
38 44
@@ -52,10 +58,11 @@ public class UserServiceImp implements UserService { @@ -52,10 +58,11 @@ public class UserServiceImp implements UserService {
52 */ 58 */
53 @Override 59 @Override
54 public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) { 60 public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) {
55 - List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);//获取学校下的大华设备  
56 -  
57 - System.out.println("设备数量:" + attendanceBeans.size());  
58 - 61 + //获取学校下的大华设备
  62 + List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);
  63 + if(attendanceBeans.size()<1){
  64 + log.warn("下发用户人脸信息失败,学校ID: {},该学校下无设备!设备类型:{}",schoolId,clint_type);
  65 + }
59 UserInfoBean userInfoBean = null; 66 UserInfoBean userInfoBean = null;
60 try { 67 try {
61 if (userType == 2) { 68 if (userType == 2) {
@@ -87,7 +94,7 @@ public class UserServiceImp implements UserService { @@ -87,7 +94,7 @@ public class UserServiceImp implements UserService {
87 userInfoBean.setStudent_id(teacher.getTeacher_id()); 94 userInfoBean.setStudent_id(teacher.getTeacher_id());
88 } 95 }
89 } 96 }
90 - 97 + //下发任务
91 myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); 98 myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType);
92 } catch (Exception e) { 99 } catch (Exception e) {
93 e.printStackTrace(); 100 e.printStackTrace();
@@ -107,14 +114,20 @@ public class UserServiceImp implements UserService { @@ -107,14 +114,20 @@ public class UserServiceImp implements UserService {
107 myTask.doTaskSendUserInfos(schoolId, clint_type, type, -1); 114 myTask.doTaskSendUserInfos(schoolId, clint_type, type, -1);
108 } 115 }
109 116
  117 + /**
  118 + * 下发权限至设备
  119 + * @param permissionBean
  120 + * @return
  121 + */
110 @Override 122 @Override
111 public boolean sendPermission(PermissionBean permissionBean) { 123 public boolean sendPermission(PermissionBean permissionBean) {
112 - 124 + //下发权限对应设备集合
113 List<String> deviceIds = permissionBean.getDeviceIds(); 125 List<String> deviceIds = permissionBean.getDeviceIds();
114 if (null != deviceIds) 126 if (null != deviceIds)
115 - for (String deviceId :  
116 - deviceIds) { 127 + for (String deviceId : deviceIds) {
  128 + // 句柄
117 NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(deviceId); 129 NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(deviceId);
  130 + //下发权限
118 GateModule.setAccessTimeSchedule(loginHandleLong, permissionBean); 131 GateModule.setAccessTimeSchedule(loginHandleLong, permissionBean);
119 GateModule.getAccessTimeSchedule1(loginHandleLong); 132 GateModule.getAccessTimeSchedule1(loginHandleLong);
120 } 133 }
cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java
@@ -22,6 +22,17 @@ import java.util.Map; @@ -22,6 +22,17 @@ import java.util.Map;
22 22
23 public class HttpUtils { 23 public class HttpUtils {
24 24
  25 + /**
  26 + * 单个人脸下发至设备
  27 + * 文件先由文件服务上传至100服务上,在21服务进行下发动作
  28 + * @param file
  29 + * @param schoolId
  30 + * @param studentCode
  31 + * @param clint_type
  32 + * @param userType
  33 + * @param deviceId
  34 + * @return
  35 + */
25 public static boolean uploadImgs(File file, String schoolId, String studentCode, String clint_type, int userType,String deviceId) { 36 public static boolean uploadImgs(File file, String schoolId, String studentCode, String clint_type, int userType,String deviceId) {
26 37
27 if (!file.exists()) { 38 if (!file.exists()) {
@@ -88,7 +99,11 @@ public class HttpUtils { @@ -88,7 +99,11 @@ public class HttpUtils {
88 return result.getBody(); 99 return result.getBody();
89 } 100 }
90 101
91 - 102 + /**
  103 + * 权限下发至设备
  104 + * @param permissionBean
  105 + * @return
  106 + */
92 public static boolean sendPermission(PermissionBean permissionBean) { 107 public static boolean sendPermission(PermissionBean permissionBean) {
93 String url = "http://121.40.109.21:8991/file/sendPermission"; 108 String url = "http://121.40.109.21:8991/file/sendPermission";
94 RestTemplate restTemplate = new RestTemplate(); 109 RestTemplate restTemplate = new RestTemplate();
@@ -107,6 +122,10 @@ public class HttpUtils { @@ -107,6 +122,10 @@ public class HttpUtils {
107 return responseEntity.getBody().equals("1"); 122 return responseEntity.getBody().equals("1");
108 } 123 }
109 124
  125 + /**
  126 + * 权限下发至海康设备
  127 + * @param permissionFaceBean
  128 + */
110 public static void sendPermission2HK(PermissionFaceBean permissionFaceBean) { 129 public static void sendPermission2HK(PermissionFaceBean permissionFaceBean) {
111 String url = "http://114.55.30.100:8089/facereco/sendPermiss"; 130 String url = "http://114.55.30.100:8089/facereco/sendPermiss";
112 PermissionBean permissionBean = permissionFaceBean.getPermissionBean(); 131 PermissionBean permissionBean = permissionFaceBean.getPermissionBean();
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SearchMapper.java 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +package com.example.dahua.xiananDao;
  2 +
  3 +import com.example.dahua.bean.CheckIn;
  4 +
  5 +public interface SearchMapper {
  6 + /**
  7 + * 考勤推送存储过程
  8 + * @param checkIn
  9 + * @return
  10 + */
  11 + void checkIn(CheckIn checkIn);
  12 +
  13 +}
cloud/dahua/src/main/resources/application.yml
@@ -46,6 +46,8 @@ mybatis: @@ -46,6 +46,8 @@ mybatis:
46 mapper-locations: classpath:xiaoanmapper/*.xml 46 mapper-locations: classpath:xiaoanmapper/*.xml
47 config-location: classpath:mybatis-config.xml 47 config-location: classpath:mybatis-config.xml
48 48
  49 +#logging:
  50 +# config: classpath:logback-spring.xml
49 51
50 #haikangpic: E:\wwwhtdocs\HFface\FaceLogs\ 52 #haikangpic: E:\wwwhtdocs\HFface\FaceLogs\
51 53
cloud/dahua/src/main/resources/xiaoanmapper/SearchMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 -<mapper namespace="com.example.dahua.dao.SearchDao" > 3 +<mapper namespace="com.example.dahua.xiananDao.SearchMapper" >
4 4
5 5
6 <resultMap id="resultMap" type="com.example.dahua.bean.CheckIn"> 6 <resultMap id="resultMap" type="com.example.dahua.bean.CheckIn">
7 <result column="arr" property="out" jdbcType="VARCHAR" /> 7 <result column="arr" property="out" jdbcType="VARCHAR" />
8 <result column="iscuccess" property="isSuccess" jdbcType="INTEGER" /> 8 <result column="iscuccess" property="isSuccess" jdbcType="INTEGER" />
9 </resultMap> 9 </resultMap>
10 - <insert id="checkIn" parameterType="com.example.dahua.bean.CheckIn" statementType="CALLABLE" > 10 +
  11 + <insert id="checkIn" parameterType="com.example.dahua.bean.CheckIn" statementType="CALLABLE">
11 {call AttendanceService( 12 {call AttendanceService(
12 #{deviceId,mode=IN} , #{cardNo,mode=IN} , #{funNo,mode=IN}, #{flag,mode=IN} , #{checkTime,mode=IN}, 13 #{deviceId,mode=IN} , #{cardNo,mode=IN} , #{funNo,mode=IN}, #{flag,mode=IN} , #{checkTime,mode=IN},
13 #{out,mode=OUT,jdbcType=VARCHAR,resultMap=resultMap},#{isSuccess,mode=OUT,jdbcType=INTEGER,resultMap=resultMap} 14 #{out,mode=OUT,jdbcType=VARCHAR,resultMap=resultMap},#{isSuccess,mode=OUT,jdbcType=INTEGER,resultMap=resultMap}
14 )} 15 )}
15 </insert> 16 </insert>
16 17
17 - <resultMap id="User" type="com.example.dahua.bean.User" >  
18 - <result column="school_id" property="schoolId" jdbcType="INTEGER" />  
19 - <result column="class_id" property="classId" jdbcType="INTEGER" />  
20 - <result column="name" property="name" jdbcType="VARCHAR" />  
21 - <result column="student_id" property="studentId" jdbcType="INTEGER" />  
22 - </resultMap>  
23 - <select id="selectUserByCardNum" parameterType="java.lang.String" resultMap="User">  
24 - select school_id , class_id ,name ,student_id from  
25 - (select top 1 b.school_id, b.class_id, b.name, student_id from SZ_V_Card a  
26 - inner join SZ_V_School_Student b on a.user_id = b.student_id  
27 - and b.role_state = 1 where a.type = 2 and a.num = #{cardNum}  
28 - union  
29 - select top 1 b.school_id, 0 as class_id, b.name,b.teacher_id as student_id from SZ_V_Card a  
30 - inner join SZ_V_School_Teacher b on a.user_id = b.teacher_id  
31 - and b.role_state = 1 where a.type = 0 and a.num = #{cardNum}  
32 - ) x  
33 - </select>  
34 -  
35 </mapper> 18 </mapper>
36 \ No newline at end of file 19 \ No newline at end of file
cloud/dahua/src/test/java/com/example/dahua/Tester.java 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +package com.example.dahua;
  2 +
  3 +
  4 +import org.junit.runner.RunWith;
  5 +import org.springframework.boot.test.context.SpringBootTest;
  6 +import org.springframework.test.context.junit4.SpringRunner;
  7 +
  8 +/**
  9 + * 单元测试继承该类即可
  10 + */
  11 +@RunWith(SpringRunner.class)
  12 +@SpringBootTest
  13 +public abstract class Tester {}
  14 +
  15 +
  16 +
cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +package com.example.dahua.mapper;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.example.dahua.Tester;
  5 +import com.example.dahua.bean.CheckIn;
  6 +import com.example.dahua.bean.ShortMsg;
  7 +import com.example.dahua.dao.UserDao;
  8 +import com.example.dahua.utils.DateUtils;
  9 +import com.example.dahua.xiananDao.SearchMapper;
  10 +import org.junit.Test;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +
  13 +import java.util.Date;
  14 +
  15 +/**
  16 + * TODO
  17 + *
  18 + * @author xuquan
  19 + * @date 2020/11/11 12:13
  20 + */
  21 +
  22 +public class SearchMapperTest extends Tester {
  23 +
  24 + @Autowired
  25 + private SearchMapper searchMapper;
  26 +
  27 + @Autowired
  28 + private UserDao userDao;
  29 +
  30 + @Test
  31 + public void test(){
  32 + //有效刷卡调考勤存储过程
  33 + CheckIn checkIn = new CheckIn();
  34 + checkIn.setDeviceId("1212");
  35 + checkIn.setCardNo("24234");
  36 + checkIn.setFunNo(8);
  37 + checkIn.setFlag(1);
  38 + checkIn.setCheckTime("2020-11-11 12:19:12");
  39 + searchMapper.checkIn(checkIn);
  40 + System.out.println(JSON.toJSON(checkIn));
  41 + }
  42 +
  43 + @Test
  44 + public void test2(){
  45 + userDao.checkLeave("234232");
  46 + System.out.println(JSON.toJSON(userDao.checkLeave("234232")));
  47 + userDao.selectByParentMobile("234232");
  48 + System.out.println(JSON.toJSON(userDao.selectByParentMobile("234232")));
  49 +// userDao.checkLeave("234232");
  50 +// System.out.println(JSON.toJSON(userDao.checkLeave("234232")));
  51 + }
  52 +
  53 + @Test
  54 + public void test3(){
  55 + ShortMsg shortMsg = new ShortMsg();
  56 + String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
  57 + shortMsg.setTableName("smsNew" + tableSuffix);
  58 + shortMsg.setSchoolId(23);
  59 + shortMsg.setMobile("124124242");
  60 +// userDao.insertMessage();
  61 +// System.out.println(JSON.toJSON(userDao.checkLeave("234232")));
  62 +
  63 + }
  64 +}
cloud/mvnw
@@ -1,286 +0,0 @@ @@ -1,286 +0,0 @@
1 -#!/bin/sh  
2 -# ----------------------------------------------------------------------------  
3 -# Licensed to the Apache Software Foundation (ASF) under one  
4 -# or more contributor license agreements. See the NOTICE file  
5 -# distributed with this work for additional information  
6 -# regarding copyright ownership. The ASF licenses this file  
7 -# to you under the Apache License, Version 2.0 (the  
8 -# "License"); you may not use this file except in compliance  
9 -# with the License. You may obtain a copy of the License at  
10 -#  
11 -# https://www.apache.org/licenses/LICENSE-2.0  
12 -#  
13 -# Unless required by applicable law or agreed to in writing,  
14 -# software distributed under the License is distributed on an  
15 -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
16 -# KIND, either express or implied. See the License for the  
17 -# specific language governing permissions and limitations  
18 -# under the License.  
19 -# ----------------------------------------------------------------------------  
20 -  
21 -# ----------------------------------------------------------------------------  
22 -# Maven2 Start Up Batch script  
23 -#  
24 -# Required ENV vars:  
25 -# ------------------  
26 -# JAVA_HOME - location of a JDK home dir  
27 -#  
28 -# Optional ENV vars  
29 -# -----------------  
30 -# M2_HOME - location of maven2's installed home dir  
31 -# MAVEN_OPTS - parameters passed to the Java VM when running Maven  
32 -# e.g. to debug Maven itself, use  
33 -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000  
34 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files  
35 -# ----------------------------------------------------------------------------  
36 -  
37 -if [ -z "$MAVEN_SKIP_RC" ] ; then  
38 -  
39 - if [ -f /etc/mavenrc ] ; then  
40 - . /etc/mavenrc  
41 - fi  
42 -  
43 - if [ -f "$HOME/.mavenrc" ] ; then  
44 - . "$HOME/.mavenrc"  
45 - fi  
46 -  
47 -fi  
48 -  
49 -# OS specific support. $var _must_ be set to either true or false.  
50 -cygwin=false;  
51 -darwin=false;  
52 -mingw=false  
53 -case "`uname`" in  
54 - CYGWIN*) cygwin=true ;;  
55 - MINGW*) mingw=true;;  
56 - Darwin*) darwin=true  
57 - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home  
58 - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html  
59 - if [ -z "$JAVA_HOME" ]; then  
60 - if [ -x "/usr/libexec/java_home" ]; then  
61 - export JAVA_HOME="`/usr/libexec/java_home`"  
62 - else  
63 - export JAVA_HOME="/Library/Java/Home"  
64 - fi  
65 - fi  
66 - ;;  
67 -esac  
68 -  
69 -if [ -z "$JAVA_HOME" ] ; then  
70 - if [ -r /etc/gentoo-release ] ; then  
71 - JAVA_HOME=`java-config --jre-home`  
72 - fi  
73 -fi  
74 -  
75 -if [ -z "$M2_HOME" ] ; then  
76 - ## resolve links - $0 may be a link to maven's home  
77 - PRG="$0"  
78 -  
79 - # need this for relative symlinks  
80 - while [ -h "$PRG" ] ; do  
81 - ls=`ls -ld "$PRG"`  
82 - link=`expr "$ls" : '.*-> \(.*\)$'`  
83 - if expr "$link" : '/.*' > /dev/null; then  
84 - PRG="$link"  
85 - else  
86 - PRG="`dirname "$PRG"`/$link"  
87 - fi  
88 - done  
89 -  
90 - saveddir=`pwd`  
91 -  
92 - M2_HOME=`dirname "$PRG"`/..  
93 -  
94 - # make it fully qualified  
95 - M2_HOME=`cd "$M2_HOME" && pwd`  
96 -  
97 - cd "$saveddir"  
98 - # echo Using m2 at $M2_HOME  
99 -fi  
100 -  
101 -# For Cygwin, ensure paths are in UNIX format before anything is touched  
102 -if $cygwin ; then  
103 - [ -n "$M2_HOME" ] &&  
104 - M2_HOME=`cygpath --unix "$M2_HOME"`  
105 - [ -n "$JAVA_HOME" ] &&  
106 - JAVA_HOME=`cygpath --unix "$JAVA_HOME"`  
107 - [ -n "$CLASSPATH" ] &&  
108 - CLASSPATH=`cygpath --path --unix "$CLASSPATH"`  
109 -fi  
110 -  
111 -# For Mingw, ensure paths are in UNIX format before anything is touched  
112 -if $mingw ; then  
113 - [ -n "$M2_HOME" ] &&  
114 - M2_HOME="`(cd "$M2_HOME"; pwd)`"  
115 - [ -n "$JAVA_HOME" ] &&  
116 - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"  
117 - # TODO classpath?  
118 -fi  
119 -  
120 -if [ -z "$JAVA_HOME" ]; then  
121 - javaExecutable="`which javac`"  
122 - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then  
123 - # readlink(1) is not available as standard on Solaris 10.  
124 - readLink=`which readlink`  
125 - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then  
126 - if $darwin ; then  
127 - javaHome="`dirname \"$javaExecutable\"`"  
128 - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"  
129 - else  
130 - javaExecutable="`readlink -f \"$javaExecutable\"`"  
131 - fi  
132 - javaHome="`dirname \"$javaExecutable\"`"  
133 - javaHome=`expr "$javaHome" : '\(.*\)/bin'`  
134 - JAVA_HOME="$javaHome"  
135 - export JAVA_HOME  
136 - fi  
137 - fi  
138 -fi  
139 -  
140 -if [ -z "$JAVACMD" ] ; then  
141 - if [ -n "$JAVA_HOME" ] ; then  
142 - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then  
143 - # IBM's JDK on AIX uses strange locations for the executables  
144 - JAVACMD="$JAVA_HOME/jre/sh/java"  
145 - else  
146 - JAVACMD="$JAVA_HOME/bin/java"  
147 - fi  
148 - else  
149 - JAVACMD="`which java`"  
150 - fi  
151 -fi  
152 -  
153 -if [ ! -x "$JAVACMD" ] ; then  
154 - echo "Error: JAVA_HOME is not defined correctly." >&2  
155 - echo " We cannot execute $JAVACMD" >&2  
156 - exit 1  
157 -fi  
158 -  
159 -if [ -z "$JAVA_HOME" ] ; then  
160 - echo "Warning: JAVA_HOME environment variable is not set."  
161 -fi  
162 -  
163 -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher  
164 -  
165 -# traverses directory structure from process work directory to filesystem root  
166 -# first directory with .mvn subdirectory is considered project base directory  
167 -find_maven_basedir() {  
168 -  
169 - if [ -z "$1" ]  
170 - then  
171 - echo "Path not specified to find_maven_basedir"  
172 - return 1  
173 - fi  
174 -  
175 - basedir="$1"  
176 - wdir="$1"  
177 - while [ "$wdir" != '/' ] ; do  
178 - if [ -d "$wdir"/.mvn ] ; then  
179 - basedir=$wdir  
180 - break  
181 - fi  
182 - # workaround for JBEAP-8937 (on Solaris 10/Sparc)  
183 - if [ -d "${wdir}" ]; then  
184 - wdir=`cd "$wdir/.."; pwd`  
185 - fi  
186 - # end of workaround  
187 - done  
188 - echo "${basedir}"  
189 -}  
190 -  
191 -# concatenates all lines of a file  
192 -concat_lines() {  
193 - if [ -f "$1" ]; then  
194 - echo "$(tr -s '\n' ' ' < "$1")"  
195 - fi  
196 -}  
197 -  
198 -BASE_DIR=`find_maven_basedir "$(pwd)"`  
199 -if [ -z "$BASE_DIR" ]; then  
200 - exit 1;  
201 -fi  
202 -  
203 -##########################################################################################  
204 -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central  
205 -# This allows using the maven wrapper in projects that prohibit checking in binary data.  
206 -##########################################################################################  
207 -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then  
208 - if [ "$MVNW_VERBOSE" = true ]; then  
209 - echo "Found .mvn/wrapper/maven-wrapper.jar"  
210 - fi  
211 -else  
212 - if [ "$MVNW_VERBOSE" = true ]; then  
213 - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."  
214 - fi  
215 - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"  
216 - while IFS="=" read key value; do  
217 - case "$key" in (wrapperUrl) jarUrl="$value"; break ;;  
218 - esac  
219 - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"  
220 - if [ "$MVNW_VERBOSE" = true ]; then  
221 - echo "Downloading from: $jarUrl"  
222 - fi  
223 - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"  
224 -  
225 - if command -v wget > /dev/null; then  
226 - if [ "$MVNW_VERBOSE" = true ]; then  
227 - echo "Found wget ... using wget"  
228 - fi  
229 - wget "$jarUrl" -O "$wrapperJarPath"  
230 - elif command -v curl > /dev/null; then  
231 - if [ "$MVNW_VERBOSE" = true ]; then  
232 - echo "Found curl ... using curl"  
233 - fi  
234 - curl -o "$wrapperJarPath" "$jarUrl"  
235 - else  
236 - if [ "$MVNW_VERBOSE" = true ]; then  
237 - echo "Falling back to using Java to download"  
238 - fi  
239 - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"  
240 - if [ -e "$javaClass" ]; then  
241 - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then  
242 - if [ "$MVNW_VERBOSE" = true ]; then  
243 - echo " - Compiling MavenWrapperDownloader.java ..."  
244 - fi  
245 - # Compiling the Java class  
246 - ("$JAVA_HOME/bin/javac" "$javaClass")  
247 - fi  
248 - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then  
249 - # Running the downloader  
250 - if [ "$MVNW_VERBOSE" = true ]; then  
251 - echo " - Running MavenWrapperDownloader.java ..."  
252 - fi  
253 - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")  
254 - fi  
255 - fi  
256 - fi  
257 -fi  
258 -##########################################################################################  
259 -# End of extension  
260 -##########################################################################################  
261 -  
262 -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}  
263 -if [ "$MVNW_VERBOSE" = true ]; then  
264 - echo $MAVEN_PROJECTBASEDIR  
265 -fi  
266 -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"  
267 -  
268 -# For Cygwin, switch paths to Windows format before running java  
269 -if $cygwin; then  
270 - [ -n "$M2_HOME" ] &&  
271 - M2_HOME=`cygpath --path --windows "$M2_HOME"`  
272 - [ -n "$JAVA_HOME" ] &&  
273 - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`  
274 - [ -n "$CLASSPATH" ] &&  
275 - CLASSPATH=`cygpath --path --windows "$CLASSPATH"`  
276 - [ -n "$MAVEN_PROJECTBASEDIR" ] &&  
277 - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`  
278 -fi  
279 -  
280 -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain  
281 -  
282 -exec "$JAVACMD" \  
283 - $MAVEN_OPTS \  
284 - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \  
285 - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \  
286 - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"  
cloud/mvnw.cmd
@@ -1,161 +0,0 @@ @@ -1,161 +0,0 @@
1 -@REM ----------------------------------------------------------------------------  
2 -@REM Licensed to the Apache Software Foundation (ASF) under one  
3 -@REM or more contributor license agreements. See the NOTICE file  
4 -@REM distributed with this work for additional information  
5 -@REM regarding copyright ownership. The ASF licenses this file  
6 -@REM to you under the Apache License, Version 2.0 (the  
7 -@REM "License"); you may not use this file except in compliance  
8 -@REM with the License. You may obtain a copy of the License at  
9 -@REM  
10 -@REM https://www.apache.org/licenses/LICENSE-2.0  
11 -@REM  
12 -@REM Unless required by applicable law or agreed to in writing,  
13 -@REM software distributed under the License is distributed on an  
14 -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
15 -@REM KIND, either express or implied. See the License for the  
16 -@REM specific language governing permissions and limitations  
17 -@REM under the License.  
18 -@REM ----------------------------------------------------------------------------  
19 -  
20 -@REM ----------------------------------------------------------------------------  
21 -@REM Maven2 Start Up Batch script  
22 -@REM  
23 -@REM Required ENV vars:  
24 -@REM JAVA_HOME - location of a JDK home dir  
25 -@REM  
26 -@REM Optional ENV vars  
27 -@REM M2_HOME - location of maven2's installed home dir  
28 -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands  
29 -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending  
30 -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven  
31 -@REM e.g. to debug Maven itself, use  
32 -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000  
33 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files  
34 -@REM ----------------------------------------------------------------------------  
35 -  
36 -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'  
37 -@echo off  
38 -@REM set title of command window  
39 -title %0  
40 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'  
41 -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%  
42 -  
43 -@REM set %HOME% to equivalent of $HOME  
44 -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")  
45 -  
46 -@REM Execute a user defined script before this one  
47 -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre  
48 -@REM check for pre script, once with legacy .bat ending and once with .cmd ending  
49 -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"  
50 -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"  
51 -:skipRcPre  
52 -  
53 -@setlocal  
54 -  
55 -set ERROR_CODE=0  
56 -  
57 -@REM To isolate internal variables from possible post scripts, we use another setlocal  
58 -@setlocal  
59 -  
60 -@REM ==== START VALIDATION ====  
61 -if not "%JAVA_HOME%" == "" goto OkJHome  
62 -  
63 -echo.  
64 -echo Error: JAVA_HOME not found in your environment. >&2  
65 -echo Please set the JAVA_HOME variable in your environment to match the >&2  
66 -echo location of your Java installation. >&2  
67 -echo.  
68 -goto error  
69 -  
70 -:OkJHome  
71 -if exist "%JAVA_HOME%\bin\java.exe" goto init  
72 -  
73 -echo.  
74 -echo Error: JAVA_HOME is set to an invalid directory. >&2  
75 -echo JAVA_HOME = "%JAVA_HOME%" >&2  
76 -echo Please set the JAVA_HOME variable in your environment to match the >&2  
77 -echo location of your Java installation. >&2  
78 -echo.  
79 -goto error  
80 -  
81 -@REM ==== END VALIDATION ====  
82 -  
83 -:init  
84 -  
85 -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".  
86 -@REM Fallback to current working directory if not found.  
87 -  
88 -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%  
89 -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir  
90 -  
91 -set EXEC_DIR=%CD%  
92 -set WDIR=%EXEC_DIR%  
93 -:findBaseDir  
94 -IF EXIST "%WDIR%"\.mvn goto baseDirFound  
95 -cd ..  
96 -IF "%WDIR%"=="%CD%" goto baseDirNotFound  
97 -set WDIR=%CD%  
98 -goto findBaseDir  
99 -  
100 -:baseDirFound  
101 -set MAVEN_PROJECTBASEDIR=%WDIR%  
102 -cd "%EXEC_DIR%"  
103 -goto endDetectBaseDir  
104 -  
105 -:baseDirNotFound  
106 -set MAVEN_PROJECTBASEDIR=%EXEC_DIR%  
107 -cd "%EXEC_DIR%"  
108 -  
109 -:endDetectBaseDir  
110 -  
111 -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig  
112 -  
113 -@setlocal EnableExtensions EnableDelayedExpansion  
114 -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a  
115 -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%  
116 -  
117 -:endReadAdditionalConfig  
118 -  
119 -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"  
120 -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"  
121 -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain  
122 -  
123 -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"  
124 -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (  
125 - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B  
126 -)  
127 -  
128 -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central  
129 -@REM This allows using the maven wrapper in projects that prohibit checking in binary data.  
130 -if exist %WRAPPER_JAR% (  
131 - echo Found %WRAPPER_JAR%  
132 -) else (  
133 - echo Couldn't find %WRAPPER_JAR%, downloading it ...  
134 - echo Downloading from: %DOWNLOAD_URL%  
135 - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"  
136 - echo Finished downloading %WRAPPER_JAR%  
137 -)  
138 -@REM End of extension  
139 -  
140 -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*  
141 -if ERRORLEVEL 1 goto error  
142 -goto end  
143 -  
144 -:error  
145 -set ERROR_CODE=1  
146 -  
147 -:end  
148 -@endlocal & set ERROR_CODE=%ERROR_CODE%  
149 -  
150 -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost  
151 -@REM check for post script, once with legacy .bat ending and once with .cmd ending  
152 -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"  
153 -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"  
154 -:skipRcPost  
155 -  
156 -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'  
157 -if "%MAVEN_BATCH_PAUSE%" == "on" pause  
158 -  
159 -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%  
160 -  
161 -exit /B %ERROR_CODE%