Commit a4c5d51e88c8970e6c95d9ba865f796fa466bb2d
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 | -/* | |
| 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 | -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 | 1 | package com.example.dahua; |
| 2 | 2 | |
| 3 | 3 | import com.example.dahua.bean.*; |
| 4 | -import com.example.dahua.dao.SearchDao; | |
| 5 | 4 | import com.example.dahua.dao.UserDao; |
| 6 | 5 | import com.example.dahua.lib.NetSDKLib; |
| 7 | 6 | import com.example.dahua.lib.ToolKits; |
| 8 | 7 | import com.example.dahua.lib.Utils; |
| 9 | 8 | import com.example.dahua.module.AutoRegisterModule; |
| 10 | -import com.example.dahua.module.FaceRecognitionModule; | |
| 11 | 9 | import com.example.dahua.module.GateModule; |
| 12 | 10 | import com.example.dahua.module.LoginModule; |
| 13 | 11 | import com.example.dahua.service.AttendanceService; |
| 14 | 12 | import com.example.dahua.utils.DateUtils; |
| 15 | 13 | import com.example.dahua.utils.FileUtils; |
| 14 | +import com.example.dahua.xiananDao.SearchMapper; | |
| 16 | 15 | import com.example.dahua.xiananDao.SendRecordDao; |
| 17 | 16 | import com.sun.jna.Pointer; |
| 18 | 17 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -61,7 +60,7 @@ public class MyTask implements ApplicationRunner { |
| 61 | 60 | SendRecordDao sendRecordDao; |
| 62 | 61 | |
| 63 | 62 | @Autowired |
| 64 | - SearchDao searchDao; | |
| 63 | + SearchMapper searchMapper; | |
| 65 | 64 | |
| 66 | 65 | @Autowired |
| 67 | 66 | UserDao userDao; |
| ... | ... | @@ -392,7 +391,7 @@ public class MyTask implements ApplicationRunner { |
| 392 | 391 | checkIn.setFunNo(8); |
| 393 | 392 | checkIn.setFlag(eventType == 2 ? 1 : 0); |
| 394 | 393 | checkIn.setCheckTime(eventTime); |
| 395 | - searchDao.checkIn(checkIn); | |
| 394 | + searchMapper.checkIn(checkIn); | |
| 396 | 395 | if (checkIn.getIsSuccess() == 1) { |
| 397 | 396 | //考勤成功 |
| 398 | 397 | String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime; |
| ... | ... | @@ -406,10 +405,10 @@ public class MyTask implements ApplicationRunner { |
| 406 | 405 | } |
| 407 | 406 | } else { |
| 408 | 407 | //判断是否请假 |
| 409 | - String studentNum = searchDao.checkLeave(cardNo); | |
| 408 | + String studentNum = userDao.checkLeave(cardNo); | |
| 410 | 409 | if (org.apache.commons.lang.StringUtils.isNotBlank(studentNum)) { |
| 411 | 410 | //短信信息 |
| 412 | - Message mobileMessage = searchDao.selectByParentMobile(cardNo); | |
| 411 | + Message mobileMessage = userDao.selectByParentMobile(cardNo); | |
| 413 | 412 | if (mobileMessage.getSchoolId() == 4) { |
| 414 | 413 | //才发送短信 |
| 415 | 414 | ShortMsg shortMsg = new ShortMsg(); |
| ... | ... | @@ -423,11 +422,11 @@ public class MyTask implements ApplicationRunner { |
| 423 | 422 | } else { |
| 424 | 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 | 427 | } else { |
| 429 | 428 | //若即不成功,也不是请假,则按刷卡异常处理 |
| 430 | - User user = searchDao.selectUserByCardNum(cardNo).get(0); | |
| 429 | + User user = userDao.selectUserByCardNum(cardNo).get(0); | |
| 431 | 430 | if(user ==null ){ |
| 432 | 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 | 10 | import com.example.dahua.bean.UserInfoBean; |
| 11 | 11 | import com.example.dahua.common.Res; |
| 12 | 12 | import com.example.dahua.dao.UserDao; |
| 13 | +import com.example.dahua.enums.*; | |
| 13 | 14 | import com.example.dahua.lib.CompressPic; |
| 14 | 15 | import com.example.dahua.lib.FilePath; |
| 15 | 16 | import com.example.dahua.lib.NetSDKLib; |
| ... | ... | @@ -44,21 +45,32 @@ public class SendUserInfoTask { |
| 44 | 45 | @Autowired |
| 45 | 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 | 58 | // @Async("taskExecutor") |
| 48 | 59 | public void doTaskOne(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String schoolId, int failType, int userType) throws Exception { |
| 49 | 60 | File studentFile = new File(file); |
| 61 | + //学籍号 | |
| 50 | 62 | String studentCode = studentFile.getName().split("\\.")[0]; |
| 51 | 63 | //判断是否是副卡 |
| 52 | 64 | String[] studentCodes = studentCode.split("_"); |
| 53 | 65 | |
| 54 | - | |
| 55 | - if (studentCodes.length > 1) {//副卡 | |
| 56 | - | |
| 66 | + //副卡 | |
| 67 | + if (studentCodes.length > 1) { | |
| 57 | 68 | String cardType = studentCodes[1]; |
| 69 | + //获取卡号 | |
| 58 | 70 | String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), cardType); |
| 59 | 71 | userInfoBean.setStudent_num(cardNum); |
| 60 | - | |
| 61 | 72 | } |
| 73 | + //设置下发记录 | |
| 62 | 74 | SendRecordBean sendRecordBean = new SendRecordBean(); |
| 63 | 75 | sendRecordBean.setSchoolId(Integer.parseInt(schoolId)); |
| 64 | 76 | sendRecordBean.setSchoolName(userDao.getSchoolName(schoolId)); |
| ... | ... | @@ -67,9 +79,11 @@ public class SendUserInfoTask { |
| 67 | 79 | sendRecordBean.setNum(userInfoBean.getStudent_num()); |
| 68 | 80 | sendRecordBean.setName(userInfoBean.getName()); |
| 69 | 81 | sendRecordBean.setImgPath(file); |
| 82 | + //用户id(即学生ID) | |
| 70 | 83 | sendRecordBean.setCustomerid(userInfoBean.getStudent_id()); |
| 71 | 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 | 89 | // @Async("taskExecutor") |
| ... | ... | @@ -217,26 +231,30 @@ public class SendUserInfoTask { |
| 217 | 231 | |
| 218 | 232 | private synchronized boolean sendUserInfoToDev(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String userType, SendRecordBean sendRecordBean) { |
| 219 | 233 | try { |
| 234 | + //用户信息 | |
| 220 | 235 | if (userInfoBean == null) { |
| 221 | - System.out.println("学生用户不存在"); | |
| 236 | + log.warn("学生用户信息不存在"); | |
| 222 | 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 | 240 | String cardNum = userInfoBean.getStudent_num(); |
| 237 | - System.out.println("cardNum:" + cardNum); | |
| 238 | 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 | 258 | return false; |
| 241 | 259 | } |
| 242 | 260 | |
| ... | ... | @@ -276,9 +294,9 @@ public class SendUserInfoTask { |
| 276 | 294 | } catch (Exception e) { |
| 277 | 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 | 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 | 313 | */ |
| 296 | 314 | private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) { |
| 297 | 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 | 332 | //人脸下发成功标识:false:失败 true:成功 |
| 327 | 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 | 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 | 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 | 524 | for (int i = 0; i < sendRecordBeanList.size(); i++) { |
| 441 | 525 | sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID()); |
| 442 | 526 | } |
| 443 | - | |
| 527 | + //TODO 不明含义 | |
| 444 | 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 | 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 | 7 | */ |
| 8 | 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 | 13 | private String Num; |
| 14 | - | |
| 14 | + //用户姓名 | |
| 15 | 15 | private String Name; |
| 16 | - | |
| 16 | + //学校ID | |
| 17 | 17 | private int schoolId; |
| 18 | - | |
| 19 | - private String schoolName;//下发结果 | |
| 20 | - | |
| 18 | + //学校名 | |
| 19 | + private String schoolName; | |
| 20 | + //设备iD | |
| 21 | 21 | private String deviceID; |
| 22 | - | |
| 23 | - private String imgPath;//下发的图片路径 | |
| 24 | - | |
| 22 | + //下发的图片路径 | |
| 23 | + private String imgPath; | |
| 24 | + //用户类型 | |
| 25 | 25 | private int userType; |
| 26 | - | |
| 26 | + //下发时间 | |
| 27 | 27 | private String time; |
| 28 | - | |
| 28 | + //下发失败原因 | |
| 29 | 29 | private String failContent; |
| 30 | - | |
| 30 | + //下发失败类型:详情见枚举:EnumSendFaceType | |
| 31 | 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 | 42 | @Autowired |
| 43 | 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 | 55 | @RequestMapping(method = RequestMethod.POST, value = "uploadImg") |
| 46 | 56 | public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, |
| 47 | 57 | @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type, |
| ... | ... | @@ -67,6 +77,11 @@ public class FileControl { |
| 67 | 77 | return "0"; |
| 68 | 78 | } |
| 69 | 79 | |
| 80 | + /** | |
| 81 | + * 权限下发至设备 | |
| 82 | + * @param permissionBean | |
| 83 | + * @return | |
| 84 | + */ | |
| 70 | 85 | @RequestMapping(value = "sendPermission", method = RequestMethod.POST) |
| 71 | 86 | @ApiOperation(value = "设置权限") |
| 72 | 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 | 48 | @Autowired |
| 49 | 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 | 59 | @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET) |
| 53 | 60 | @ApiOperation(value = "上传用户信息") |
| 54 | 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 | 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 | 71 | @RequestMapping(value = "sendPermission", method = RequestMethod.POST) |
| 60 | 72 | @ApiOperation(value = "设置权限") |
| 61 | 73 | public boolean sendPermission(@RequestBody PermissionBean permissionBean) { |
| ... | ... | @@ -69,6 +81,12 @@ public class UserControl { |
| 69 | 81 | return true; |
| 70 | 82 | } |
| 71 | 83 | |
| 84 | + /** | |
| 85 | + * 批量下发人脸 | |
| 86 | + * @param deviceIds | |
| 87 | + * @param schoolId | |
| 88 | + * @param userType | |
| 89 | + */ | |
| 72 | 90 | @RequestMapping(value = "sendFaces", method = RequestMethod.GET) |
| 73 | 91 | @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备") |
| 74 | 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 | -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 | 169 | " where studentcode = #{studentcode} and school_id = #{school_id}\n" + |
| 170 | 170 | ")") |
| 171 | 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 | 10 | import org.springframework.context.annotation.Configuration; |
| 11 | 11 | import org.springframework.context.annotation.Primary; |
| 12 | 12 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver; |
| 13 | -import org.springframework.jdbc.core.JdbcTemplate; | |
| 14 | 13 | |
| 15 | 14 | import javax.sql.DataSource; |
| 16 | 15 | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumDeviceType.java
0 → 100644
| ... | ... | @@ -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 @@ |
| 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 @@ |
| 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 @@ |
| 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 @@ |
| 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 | 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 | 3 | import com.example.dahua.bean.PermissionBean; |
| 14 | 4 | import com.example.dahua.bean.WeekDay; |
| 15 | 5 | import com.example.dahua.bean.WeekTime; |
| 6 | +import com.example.dahua.enums.EnumSendCardErrorType; | |
| 7 | +import com.example.dahua.enums.EnumSendFaceErrorType; | |
| 16 | 8 | import com.example.dahua.lib.NetSDKLib; |
| 17 | 9 | import com.example.dahua.lib.NetSDKLib.*; |
| 18 | 10 | import com.example.dahua.lib.ToolKits; |
| ... | ... | @@ -21,6 +13,15 @@ import com.sun.jna.ptr.IntByReference; |
| 21 | 13 | import lombok.extern.slf4j.Slf4j; |
| 22 | 14 | |
| 23 | 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 | 27 | @Slf4j |
| ... | ... | @@ -201,7 +202,8 @@ public class GateModule { |
| 201 | 202 | |
| 202 | 203 | public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, |
| 203 | 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 | 289 | String ret=ToolKits.getErrorCodePrint(); |
| 288 | 290 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 289 | 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 | 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 | 304 | return -1; |
| 301 | 305 | } else { |
| 302 | 306 | log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo); |
| ... | ... | @@ -682,7 +686,8 @@ public class GateModule { |
| 682 | 686 | */ |
| 683 | 687 | public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, |
| 684 | 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 | 775 | String ret=ToolKits.getErrorCodePrint(); |
| 771 | 776 | //结果码 |
| 772 | 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 | 779 | log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); |
| 780 | + | |
| 782 | 781 | return false; |
| 783 | 782 | } |
| 784 | 783 | log.info("修改卡信息成功!"); |
| ... | ... | @@ -1081,7 +1080,7 @@ public class GateModule { |
| 1081 | 1080 | log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode); |
| 1082 | 1081 | } |
| 1083 | 1082 | } else { |
| 1084 | - log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint()); | |
| 1083 | + log.error("删除用户失败"+ ToolKits.getErrorCodePrint()); | |
| 1085 | 1084 | } |
| 1086 | 1085 | |
| 1087 | 1086 | stIn.read(); |
| ... | ... | @@ -1138,7 +1137,7 @@ public class GateModule { |
| 1138 | 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 | 1141 | int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 |
| 1143 | 1142 | |
| 1144 | 1143 | /** |
| ... | ... | @@ -1173,14 +1172,17 @@ public class GateModule { |
| 1173 | 1172 | } else { |
| 1174 | 1173 | String ret=ToolKits.getErrorCodePrint(); |
| 1175 | 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 | 1187 | return false; |
| 1186 | 1188 | } |
| ... | ... | @@ -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 | 1244 | int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 |
| 1243 | 1245 | |
| 1244 | 1246 | /** |
| ... | ... | @@ -1274,6 +1276,7 @@ public class GateModule { |
| 1274 | 1276 | } else { |
| 1275 | 1277 | String ret=ToolKits.getErrorCodePrint(); |
| 1276 | 1278 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 1279 | + faceErrNum = number; | |
| 1277 | 1280 | log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number); |
| 1278 | 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 | 4 | import com.example.dahua.async.SendUserInfoTask; |
| 5 | 5 | import com.example.dahua.bean.*; |
| 6 | 6 | import com.example.dahua.dao.UserDao; |
| 7 | +import com.example.dahua.enums.EnumDeviceType; | |
| 7 | 8 | import com.example.dahua.lib.NetSDKLib; |
| 8 | 9 | import com.example.dahua.module.GateModule; |
| 9 | 10 | import com.example.dahua.service.UserService; |
| 11 | +import lombok.extern.slf4j.Slf4j; | |
| 10 | 12 | import org.apache.commons.lang.StringUtils; |
| 11 | 13 | import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 14 | import org.springframework.stereotype.Repository; |
| ... | ... | @@ -16,6 +18,7 @@ import java.util.List; |
| 16 | 18 | |
| 17 | 19 | @Repository |
| 18 | 20 | @Service |
| 21 | +@Slf4j | |
| 19 | 22 | public class UserServiceImp implements UserService { |
| 20 | 23 | |
| 21 | 24 | @Autowired |
| ... | ... | @@ -26,13 +29,16 @@ public class UserServiceImp implements UserService { |
| 26 | 29 | |
| 27 | 30 | @Override |
| 28 | 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 | 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 | 42 | return attendanceBeanList; |
| 37 | 43 | } |
| 38 | 44 | |
| ... | ... | @@ -52,10 +58,11 @@ public class UserServiceImp implements UserService { |
| 52 | 58 | */ |
| 53 | 59 | @Override |
| 54 | 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 | 66 | UserInfoBean userInfoBean = null; |
| 60 | 67 | try { |
| 61 | 68 | if (userType == 2) { |
| ... | ... | @@ -87,7 +94,7 @@ public class UserServiceImp implements UserService { |
| 87 | 94 | userInfoBean.setStudent_id(teacher.getTeacher_id()); |
| 88 | 95 | } |
| 89 | 96 | } |
| 90 | - | |
| 97 | + //下发任务 | |
| 91 | 98 | myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); |
| 92 | 99 | } catch (Exception e) { |
| 93 | 100 | e.printStackTrace(); |
| ... | ... | @@ -107,14 +114,20 @@ public class UserServiceImp implements UserService { |
| 107 | 114 | myTask.doTaskSendUserInfos(schoolId, clint_type, type, -1); |
| 108 | 115 | } |
| 109 | 116 | |
| 117 | + /** | |
| 118 | + * 下发权限至设备 | |
| 119 | + * @param permissionBean | |
| 120 | + * @return | |
| 121 | + */ | |
| 110 | 122 | @Override |
| 111 | 123 | public boolean sendPermission(PermissionBean permissionBean) { |
| 112 | - | |
| 124 | + //下发权限对应设备集合 | |
| 113 | 125 | List<String> deviceIds = permissionBean.getDeviceIds(); |
| 114 | 126 | if (null != deviceIds) |
| 115 | - for (String deviceId : | |
| 116 | - deviceIds) { | |
| 127 | + for (String deviceId : deviceIds) { | |
| 128 | + // 句柄 | |
| 117 | 129 | NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(deviceId); |
| 130 | + //下发权限 | |
| 118 | 131 | GateModule.setAccessTimeSchedule(loginHandleLong, permissionBean); |
| 119 | 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 | 22 | |
| 23 | 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 | 36 | public static boolean uploadImgs(File file, String schoolId, String studentCode, String clint_type, int userType,String deviceId) { |
| 26 | 37 | |
| 27 | 38 | if (!file.exists()) { |
| ... | ... | @@ -88,7 +99,11 @@ public class HttpUtils { |
| 88 | 99 | return result.getBody(); |
| 89 | 100 | } |
| 90 | 101 | |
| 91 | - | |
| 102 | + /** | |
| 103 | + * 权限下发至设备 | |
| 104 | + * @param permissionBean | |
| 105 | + * @return | |
| 106 | + */ | |
| 92 | 107 | public static boolean sendPermission(PermissionBean permissionBean) { |
| 93 | 108 | String url = "http://121.40.109.21:8991/file/sendPermission"; |
| 94 | 109 | RestTemplate restTemplate = new RestTemplate(); |
| ... | ... | @@ -107,6 +122,10 @@ public class HttpUtils { |
| 107 | 122 | return responseEntity.getBody().equals("1"); |
| 108 | 123 | } |
| 109 | 124 | |
| 125 | + /** | |
| 126 | + * 权限下发至海康设备 | |
| 127 | + * @param permissionFaceBean | |
| 128 | + */ | |
| 110 | 129 | public static void sendPermission2HK(PermissionFaceBean permissionFaceBean) { |
| 111 | 130 | String url = "http://114.55.30.100:8089/facereco/sendPermiss"; |
| 112 | 131 | PermissionBean permissionBean = permissionFaceBean.getPermissionBean(); | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SearchMapper.java
0 → 100644
cloud/dahua/src/main/resources/application.yml
cloud/dahua/src/main/resources/xiaoanmapper/SearchMapper.xml
| 1 | 1 | <?xml version="1.0" encoding="UTF-8" ?> |
| 2 | 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 | 6 | <resultMap id="resultMap" type="com.example.dahua.bean.CheckIn"> |
| 7 | 7 | <result column="arr" property="out" jdbcType="VARCHAR" /> |
| 8 | 8 | <result column="iscuccess" property="isSuccess" jdbcType="INTEGER" /> |
| 9 | 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 | 12 | {call AttendanceService( |
| 12 | 13 | #{deviceId,mode=IN} , #{cardNo,mode=IN} , #{funNo,mode=IN}, #{flag,mode=IN} , #{checkTime,mode=IN}, |
| 13 | 14 | #{out,mode=OUT,jdbcType=VARCHAR,resultMap=resultMap},#{isSuccess,mode=OUT,jdbcType=INTEGER,resultMap=resultMap} |
| 14 | 15 | )} |
| 15 | 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 | 18 | </mapper> |
| 36 | 19 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -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 @@ |
| 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 | -#!/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 | -@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% |