Commit fc5b7f69c60e50d0202575d34f5c0076a53c74a9

Authored by 邱一成
2 parents ee86e799 410a48a6
Exists in master

本地合并远程的优化

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.CardBean;  
4 -import com.example.dahua.bean.DeviceInfoBean;  
5 -import com.example.dahua.bean.TeacherBean;  
6 -import com.example.dahua.bean.UserInfoBean; 3 +import com.example.dahua.bean.*;
  4 +import com.example.dahua.dao.SearchDao;
7 import com.example.dahua.dao.UserDao; 5 import com.example.dahua.dao.UserDao;
8 import com.example.dahua.lib.NetSDKLib; 6 import com.example.dahua.lib.NetSDKLib;
9 import com.example.dahua.lib.ToolKits; 7 import com.example.dahua.lib.ToolKits;
10 import com.example.dahua.lib.Utils; 8 import com.example.dahua.lib.Utils;
11 import com.example.dahua.module.AutoRegisterModule; 9 import com.example.dahua.module.AutoRegisterModule;
  10 +import com.example.dahua.module.FaceRecognitionModule;
12 import com.example.dahua.module.GateModule; 11 import com.example.dahua.module.GateModule;
13 import com.example.dahua.module.LoginModule; 12 import com.example.dahua.module.LoginModule;
14 import com.example.dahua.service.AttendanceService; 13 import com.example.dahua.service.AttendanceService;
  14 +import com.example.dahua.utils.DateUtils;
  15 +import com.example.dahua.utils.FileUtils;
15 import com.example.dahua.xiananDao.SendRecordDao; 16 import com.example.dahua.xiananDao.SendRecordDao;
16 import com.sun.jna.Pointer; 17 import com.sun.jna.Pointer;
  18 +import lombok.extern.slf4j.Slf4j;
17 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.boot.ApplicationArguments; 20 import org.springframework.boot.ApplicationArguments;
19 import org.springframework.boot.ApplicationRunner; 21 import org.springframework.boot.ApplicationRunner;
@@ -31,6 +33,7 @@ import java.util.*; @@ -31,6 +33,7 @@ import java.util.*;
31 import java.util.List; 33 import java.util.List;
32 34
33 @Component 35 @Component
  36 +@Slf4j
34 public class MyTask implements ApplicationRunner { 37 public class MyTask implements ApplicationRunner {
35 38
36 // 主动注册监听回调 39 // 主动注册监听回调
@@ -58,6 +61,9 @@ public class MyTask implements ApplicationRunner { @@ -58,6 +61,9 @@ public class MyTask implements ApplicationRunner {
58 SendRecordDao sendRecordDao; 61 SendRecordDao sendRecordDao;
59 62
60 @Autowired 63 @Autowired
  64 + SearchDao searchDao;
  65 +
  66 + @Autowired
61 UserDao userDao; 67 UserDao userDao;
62 68
63 public boolean isHasNewDevice = false;//判断是否有新设备上线 69 public boolean isHasNewDevice = false;//判断是否有新设备上线
@@ -65,10 +71,10 @@ public class MyTask implements ApplicationRunner { @@ -65,10 +71,10 @@ public class MyTask implements ApplicationRunner {
65 @Override 71 @Override
66 public void run(ApplicationArguments args) throws Exception { 72 public void run(ApplicationArguments args) throws Exception {
67 // 121.40.109.21 73 // 121.40.109.21
68 -  
69 - LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化  
70 -  
71 - autoRegister();//自注册 74 + // 打开工程,初始化
  75 + LoginModule.init(disConnect, haveReConnect);
  76 + //自注册
  77 + autoRegister();
72 78
73 // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess()); 79 // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess());
74 } 80 }
@@ -228,7 +234,7 @@ public class MyTask implements ApplicationRunner { @@ -228,7 +234,7 @@ public class MyTask implements ApplicationRunner {
228 break; 234 break;
229 } 235 }
230 236
231 - return 0; 237 + return 1;
232 } 238 }
233 } 239 }
234 240
@@ -238,7 +244,7 @@ public class MyTask implements ApplicationRunner { @@ -238,7 +244,7 @@ public class MyTask implements ApplicationRunner {
238 for (DeviceInfoBean dev : 244 for (DeviceInfoBean dev :
239 deviceInfoBeans) { 245 deviceInfoBeans) {
240 if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { 246 if (lLongMap.get(dev.getDevcieId()).intValue() > 0) {
241 - NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); 247 + NetSDKLib.LLong lLong = GateModule.realLoadPic2(0, analyzerCallback, lLongMap.get(dev.getDevcieId()),dev.getDevcieId());
242 // System.out.println("监听成功:"+dev.getDevcieId()); 248 // System.out.println("监听成功:"+dev.getDevcieId());
243 // if (lLong.intValue() != -1) { 249 // if (lLong.intValue() != -1) {
244 // //deviceInfoBeans.remove(dev); 250 // //deviceInfoBeans.remove(dev);
@@ -273,32 +279,25 @@ public class MyTask implements ApplicationRunner { @@ -273,32 +279,25 @@ public class MyTask implements ApplicationRunner {
273 path.mkdir(); 279 path.mkdir();
274 } 280 }
275 281
  282 + //设备ID获取
  283 + NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
  284 + ToolKits.GetPointerData(dwUser, deviceInfo);
  285 +
  286 + String szSn = new String(deviceInfo.sSerialNumber).trim();
  287 +
276 ///< 门禁事件 288 ///< 门禁事件
277 if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) { 289 if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
278 NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO(); 290 NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
279 ToolKits.GetPointerData(pAlarmInfo, msg); 291 ToolKits.GetPointerData(pAlarmInfo, msg);
  292 + //卡号
  293 + String card = new String(msg.szCardNo).trim();
280 294
281 -// String b =new String(msg.szSN);  
282 -// System.out.println("readid: "+new String(msg.szReaderID));  
283 -// System.out.println("imageurl: "+new String(msg.szSnapURL));  
284 -// NetSDKLib.ALARM_ACCESS_CTL_STATUS_INFO msg1 = new NetSDKLib.ALARM_ACCESS_CTL_STATUS_INFO();  
285 -// ToolKits.GetPointerData(pBuffer, msg1);  
286 -// try{  
287 -// String a =new String(msg1.szSerialNumber,"utf-8").trim();  
288 -// System.out.println("无线设备序列号: "+ a);  
289 -// } catch (UnsupportedEncodingException e) {  
290 -// e.printStackTrace();  
291 -// }  
292 -// System.out.println("sda:" + new String(msg.szCardNo) + " 抓拍照片存储地址:");  
293 -// NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO msg2 = new NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO();  
294 -// ToolKits.GetPointerData(pBuffer, msg2);  
295 -// String c =new String(msg2.szSN);  
296 -// System.out.println("智能锁序列号 " +c); 295 + System.out.println("sda:" + card + " 抓拍照片存储地址:");
297 296
298 try { 297 try {
299 - String card = new String(msg.szCardNo).trim();  
300 if (!StringUtils.isEmpty(card)) { 298 if (!StringUtils.isEmpty(card)) {
301 // 保存图片,获取图片缓存 299 // 保存图片,获取图片缓存
  300 + // 图片服务器路径
302 String snapPicPath = path + "\\" + System.currentTimeMillis() + ".png"; // 保存图片地址 301 String snapPicPath = path + "\\" + System.currentTimeMillis() + ".png"; // 保存图片地址
303 byte[] buffer = pBuffer.getByteArray(0, dwBufSize); 302 byte[] buffer = pBuffer.getByteArray(0, dwBufSize);
304 ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer); 303 ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer);
@@ -306,19 +305,32 @@ public class MyTask implements ApplicationRunner { @@ -306,19 +305,32 @@ public class MyTask implements ApplicationRunner {
306 if (gateBufferedImage != null) { 305 if (gateBufferedImage != null) {
307 ImageIO.write(gateBufferedImage, "png", new File(snapPicPath)); 306 ImageIO.write(gateBufferedImage, "png", new File(snapPicPath));
308 } 307 }
  308 + //卡号取反(大写)
309 card = cardNo(card); 309 card = cardNo(card);
310 -  
311 - CardBean cardBean = userDao.getCards(card);//根据卡号获取身份信息 310 + //根据卡号获取卡身份信息
  311 + CardBean cardBean = userDao.getCards(card);
312 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 312 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
313 snapPicPath = snapPicPath.replaceFirst("\\.", "http://121.40.109.21:8991"); 313 snapPicPath = snapPicPath.replaceFirst("\\.", "http://121.40.109.21:8991");
314 snapPicPath = snapPicPath.replace("FaceRecoder", "image"); 314 snapPicPath = snapPicPath.replace("FaceRecoder", "image");
315 - if (null != cardBean && cardBean.getType() == 0) {//老师 315 + if (null != cardBean && cardBean.getType() == 0) {
  316 + //老师人脸信息,保存人脸记录表
316 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id()); 317 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id());
317 - sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,"");  
318 - } else if (null != cardBean && cardBean.getType() == 2) {//学生 318 + sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,"");
  319 + } else if (null != cardBean && cardBean.getType() == 2) {
  320 + //学生人脸信息,保存人脸记录表
319 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id()); 321 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id());
320 - sendRecordDao.addFaceRecoder("", userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,""); 322 + sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,"");
321 } 323 }
  324 +
  325 + // TODO 考勤记录
  326 + //刷卡结果,1表示成功, 0表示失败
  327 + int status = msg.bStatus;
  328 + //门禁事件类型:1进2出
  329 + int eventType = msg.emEventType;
  330 + //刷卡时间
  331 + String eventTime = msg.UTC.toStringTime();
  332 + //保存考勤记录
  333 + kaoQinRecord(status,eventType,card,szSn,eventTime,snapPicPath);
322 } 334 }
323 335
324 } catch (IOException e2) { 336 } catch (IOException e2) {
@@ -338,6 +350,7 @@ public class MyTask implements ApplicationRunner { @@ -338,6 +350,7 @@ public class MyTask implements ApplicationRunner {
338 } 350 }
339 } 351 }
340 352
  353 +
341 /** 354 /**
342 * 卡号两两取反 355 * 卡号两两取反
343 * 356 *
@@ -361,4 +374,85 @@ public class MyTask implements ApplicationRunner { @@ -361,4 +374,85 @@ public class MyTask implements ApplicationRunner {
361 374
362 } 375 }
363 376
  377 + /**
  378 + * 大华设备考勤记录
  379 + * @param status
  380 + * @param eventType
  381 + * @param cardNo
  382 + * @param deviceId
  383 + * @param eventTime
  384 + * @param imageUrl
  385 + */
  386 + public void kaoQinRecord(int status,int eventType,String cardNo,String deviceId,String eventTime,String imageUrl) {
  387 + if (status == 1) {
  388 + //有效刷卡调考勤存储过程
  389 + CheckIn checkIn = new CheckIn();
  390 + checkIn.setDeviceId(deviceId);
  391 + checkIn.setCardNo(cardNo);
  392 + checkIn.setFunNo(8);
  393 + checkIn.setFlag(eventType == 2 ? 1 : 0);
  394 + checkIn.setCheckTime(eventTime);
  395 + searchDao.checkIn(checkIn);
  396 + if (checkIn.getIsSuccess() == 1) {
  397 + //考勤成功
  398 + String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime;
  399 + //记录学生考勤签到记录
  400 + FileUtils.getInstance().writeLogs(content, FileUtils.qiandaoSuccess);
  401 + } else {
  402 + //考勤失败
  403 + String content = "考勤失败!,设备:" + deviceId + "卡号:" + cardNo + "---" + checkIn.getOut();
  404 + //记录学生考勤签到记录
  405 + FileUtils.getInstance().writeLogs(content, FileUtils.qiandaoErr);
  406 + }
  407 + } else {
  408 + //判断是否请假
  409 + String studentNum = searchDao.checkLeave(cardNo);
  410 + if (org.apache.commons.lang.StringUtils.isNotBlank(studentNum)) {
  411 + //短信信息
  412 + Message mobileMessage = searchDao.selectByParentMobile(cardNo);
  413 + if (mobileMessage.getSchoolId() == 4) {
  414 + //才发送短信
  415 + ShortMsg shortMsg = new ShortMsg();
  416 + String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
  417 + shortMsg.setTableName("smsNew" + tableSuffix);
  418 + shortMsg.setSchoolId(mobileMessage.getSchoolId());
  419 + shortMsg.setMobile(mobileMessage.getParentMobile());
  420 + if (eventType == 2) {
  421 + //出门
  422 + shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后出校,请知晓;");
  423 + } else {
  424 + shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后进校,请知晓;");
  425 + }
  426 + searchDao.insertMessage(shortMsg.getTableName(),shortMsg.getSchoolId()+"",shortMsg.getMobile(),shortMsg.getMsg());
  427 + }
  428 + } else {
  429 + //若即不成功,也不是请假,则按刷卡异常处理
  430 + User user = searchDao.selectUserByCardNum(cardNo).get(0);
  431 + if(user ==null ){
  432 + System.out.println("卡号"+cardNo+"没找到对应学生或老师");
  433 + }
  434 + int deviceType;
  435 + if (deviceId.startsWith("ytj")){
  436 + deviceType = 29;
  437 + }else {
  438 + deviceType = 22;
  439 + }
  440 + //失败记录
  441 + SendRecordBean sendRecordBean = new SendRecordBean();
  442 + sendRecordBean.setSchoolId(user.getSchoolId());
  443 + sendRecordBean.setSchoolName(userDao.getSchoolName(String.valueOf(user.getSchoolId())));
  444 + sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  445 + sendRecordBean.setUserType(2);
  446 + sendRecordBean.setNum(cardNo);
  447 + sendRecordBean.setName(user.getName());
  448 + sendRecordBean.setImgPath(imageUrl);
  449 + sendRecordBean.setCustomerid(String.valueOf(user.getStudentId()));
  450 + sendRecordBean.setFailType(8);
  451 + sendRecordBean.setFailContent("人脸认证失败");
  452 + sendRecordBean.setDeviceID(deviceId);
  453 + sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
  454 + sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), deviceType);
  455 + }
  456 + }
  457 + }
364 } 458 }
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java
1 package com.example.dahua.async; 1 package com.example.dahua.async;
2 2
3 //import com.example.dahua.Gate.Gate; 3 //import com.example.dahua.Gate.Gate;
  4 +
  5 +import com.alibaba.fastjson.JSON;
4 import com.example.dahua.MyTask; 6 import com.example.dahua.MyTask;
5 -import com.example.dahua.bean.*; 7 +import com.example.dahua.bean.AttendanceBean;
  8 +import com.example.dahua.bean.SendRecordBean;
  9 +import com.example.dahua.bean.TeacherBean;
  10 +import com.example.dahua.bean.UserInfoBean;
6 import com.example.dahua.common.Res; 11 import com.example.dahua.common.Res;
7 import com.example.dahua.dao.UserDao; 12 import com.example.dahua.dao.UserDao;
8 import com.example.dahua.lib.CompressPic; 13 import com.example.dahua.lib.CompressPic;
@@ -14,15 +19,11 @@ import com.example.dahua.utils.FileUtils; @@ -14,15 +19,11 @@ import com.example.dahua.utils.FileUtils;
14 import com.example.dahua.utils.HttpUtils; 19 import com.example.dahua.utils.HttpUtils;
15 import com.example.dahua.xiananDao.SendRecordDao; 20 import com.example.dahua.xiananDao.SendRecordDao;
16 import com.sun.jna.Memory; 21 import com.sun.jna.Memory;
  22 +import lombok.extern.slf4j.Slf4j;
17 import org.springframework.beans.factory.annotation.Autowired; 23 import org.springframework.beans.factory.annotation.Autowired;
18 -import org.springframework.http.HttpEntity;  
19 -import org.springframework.http.HttpHeaders;  
20 -import org.springframework.http.MediaType;  
21 import org.springframework.http.ResponseEntity; 24 import org.springframework.http.ResponseEntity;
22 import org.springframework.scheduling.annotation.Async; 25 import org.springframework.scheduling.annotation.Async;
23 import org.springframework.stereotype.Component; 26 import org.springframework.stereotype.Component;
24 -import org.springframework.util.LinkedMultiValueMap;  
25 -import org.springframework.util.MultiValueMap;  
26 import org.springframework.util.StringUtils; 27 import org.springframework.util.StringUtils;
27 import org.springframework.web.client.RestTemplate; 28 import org.springframework.web.client.RestTemplate;
28 29
@@ -34,6 +35,7 @@ import java.util.*; @@ -34,6 +35,7 @@ import java.util.*;
34 * 下发卡号的异步操作 35 * 下发卡号的异步操作
35 */ 36 */
36 @Component 37 @Component
  38 +@Slf4j
37 public class SendUserInfoTask { 39 public class SendUserInfoTask {
38 40
39 @Autowired 41 @Autowired
@@ -281,6 +283,16 @@ public class SendUserInfoTask { @@ -281,6 +283,16 @@ public class SendUserInfoTask {
281 } 283 }
282 } 284 }
283 285
  286 + /**
  287 + * 下发人脸/卡信息
  288 + * @param attendanceBean
  289 + * @param user_id
  290 + * @param student_num
  291 + * @param name
  292 + * @param memory
  293 + * @param sendRecordBean
  294 + * @param userType
  295 + */
284 private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) { 296 private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) {
285 try{ 297 try{
286 sendRecordBean.setDeviceID(attendanceBean.getClint_id()); 298 sendRecordBean.setDeviceID(attendanceBean.getClint_id());
@@ -291,14 +303,17 @@ public class SendUserInfoTask { @@ -291,14 +303,17 @@ public class SendUserInfoTask {
291 Calendar calendar = Calendar.getInstance(); 303 Calendar calendar = Calendar.getInstance();
292 calendar.add(Calendar.YEAR, 4); 304 calendar.add(Calendar.YEAR, 4);
293 String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); 305 String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
294 - int bCardFlags = -1;//记录集编号,存在于设备的 306 + //记录集编号,存在于设备的,默认为 -1, 其他值为存在下发记录
  307 + int bCardFlags = -1;
  308 + //从下发记录表:SZ_Student_RecoderNo 获取记录集编号
295 bCardFlags = userDao.getRecordNo(user_id, attendanceBean.getClint_id()) == null ? -1 : Integer.parseInt(userDao.getRecordNo(user_id, attendanceBean.getClint_id())); 309 bCardFlags = userDao.getRecordNo(user_id, attendanceBean.getClint_id()) == null ? -1 : Integer.parseInt(userDao.getRecordNo(user_id, attendanceBean.getClint_id()));
296 310
297 NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id()); 311 NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id());
298 -// System.out.println("loginHandleLong:" + loginHandleLong + MyTask.lLongMap.toString() + " 设备ID:" + attendanceBean.getClint_id());  
299 -// System.out.println("loginHandleLong:" +loginHandleLong); 312 + log.info("设备ID: {},设备登录句柄: {}",loginHandleLong,attendanceBean.getClint_id() );
  313 +
  314 + //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线
300 if (loginHandleLong == null) { 315 if (loginHandleLong == null) {
301 - System.out.println("设备不在线:" + attendanceBean.getClint_id()); 316 + log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() );
302 FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); 317 FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices);
303 String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id()); 318 String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id());
304 sendRecordBean.setFailType(2); 319 sendRecordBean.setFailType(2);
@@ -307,76 +322,50 @@ public class SendUserInfoTask { @@ -307,76 +322,50 @@ public class SendUserInfoTask {
307 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态 322 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态
308 addFailDace(sendRecordBean); 323 addFailDace(sendRecordBean);
309 } 324 }
310 -  
311 } else { 325 } else {
  326 + //人脸下发成功标识:false:失败 true:成功
312 boolean bFaceFalgs = false; 327 boolean bFaceFalgs = false;
313 -  
314 - String cardNum = "";  
315 - //大华一体机,刷卡开门需要平台十六进制反读直接下发才可正常开门,因这两所学校已下发完成且不用刷卡,所以不做处理,  
316 - // 以后使用大华一体机,下发卡号统一处理直接下发,不做取反处理  
317 - if(attendanceBean.getClint_id().startsWith("ytj")  
318 - &&Integer.parseInt(attendanceBean.getSchool_id())!=126  
319 - &&Integer.parseInt(attendanceBean.getSchool_id())!=393)  
320 - {cardNum = student_num;}  
321 - else{cardNum =cardNo(student_num);}  
322 -// GateModule.getFace(user_id, loginHandleLong);  
323 -// GateModule.getUser(user_id, loginHandleLong);  
324 -// GateModule.getCard(cardNum, loginHandleLong);  
325 - if (bCardFlags != -1) {//修改卡信息  
326 - int newRecordNo=0;  
327 - int bFaceFalgsInt=0;  
328 -  
329 - newRecordNo=GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 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),
330 0, 0, 1, startTime, endTime, loginHandleLong, userType); 334 0, 0, 1, startTime, endTime, loginHandleLong, userType);
331 335
332 - if(newRecordNo==1) {  
333 - 336 + if (isEditCard) {
  337 + //设备修改卡成功, 更新下发记录表
334 userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id()); 338 userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id());
335 -  
336 - bFaceFalgsInt = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong);  
337 - if (bFaceFalgsInt == 1) {//1照片修改成功  
338 - bFaceFalgs = true;  
339 - }  
340 -// else if (bFaceFalgsInt == 1029)//问题,编辑人脸提示用户id不存在,故此增加此  
341 -// {  
342 -// bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456"  
343 -// , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1  
344 -// , 1, startTime, endTime, loginHandleLong, userType);  
345 -// if (bCardFlags != -1) {  
346 -// userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id());  
347 -// }  
348 -// //添加人脸  
349 -// bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);  
350 -// }  
351 - else {  
352 - bFaceFalgs = false;  
353 - }  
354 - //卡号添加成功,但是人脸不成功的话,就需要新增人脸  
355 - if (!bFaceFalgs) 339 + //设备卡修改成功后,更新设备人脸信息
  340 + boolean isEditFace = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong);
  341 + //修改卡信息成功,但是人脸不成功的话,就需要新增人脸
  342 + if (!isEditFace) {
356 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); 343 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);
357 - }  
358 - else{ 344 + }
  345 + }else{
  346 + //设备修改卡信息失败,则删除下发记录集编号表记录:SZ_Student_RecoderNo,重新下发.
359 userDao.deleteRecordNo(user_id, bCardFlags); 347 userDao.deleteRecordNo(user_id, bCardFlags);
  348 + //重新下发卡号至设备
360 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" 349 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456"
361 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 350 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1
362 , 1, startTime, endTime, loginHandleLong,userType); 351 , 1, startTime, endTime, loginHandleLong,userType);
  352 + //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表
363 if (bCardFlags != -1) { 353 if (bCardFlags != -1) {
364 - int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 354 + userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号
365 } 355 }
366 //添加人脸 356 //添加人脸
367 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); 357 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);
368 } 358 }
369 359
370 - } else {//新增卡信息  
371 - 360 + } else {
  361 + //新增卡信息, 新增人脸信息至设备
372 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" 362 bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456"
373 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 363 , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1
374 , 1, startTime, endTime, loginHandleLong,userType); 364 , 1, startTime, endTime, loginHandleLong,userType);
375 - 365 + //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表
376 if (bCardFlags != -1) { 366 if (bCardFlags != -1) {
377 - int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 367 + userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());
378 } 368 }
379 -  
380 //添加人脸 369 //添加人脸
381 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); 370 bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong);
382 371
@@ -384,25 +373,21 @@ public class SendUserInfoTask { @@ -384,25 +373,21 @@ public class SendUserInfoTask {
384 373
385 if (bCardFlags != -1 && bFaceFalgs) { 374 if (bCardFlags != -1 && bFaceFalgs) {
386 FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); 375 FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
387 - System.out.println("人脸下发成功" + "sendRecordBean:" + sendRecordBean); 376 + log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));
388 377
389 - //先判断是否已经存在了 378 + //人脸下发成功记录, 先判断是否已经存在了
390 List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getCustomerid()); 379 List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getCustomerid());
391 if (sendRecordBeanList.size() > 0) { 380 if (sendRecordBeanList.size() > 0) {
392 -  
393 //删除重复数据 381 //删除重复数据
394 for (int i = 0; i < sendRecordBeanList.size(); i++) { 382 for (int i = 0; i < sendRecordBeanList.size(); i++) {
395 sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum()); 383 sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum());
396 } 384 }
397 385
398 -// //更新数据  
399 -// sendRecordDao.updateFaceSuccess(sendRecordBean.getTime(), sendRecordBean.getDeviceID(), sendRecordBean.getNum());  
400 - } else {  
401 } 386 }
402 - int index = sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), 387 + //重新添加人脸下发记录
  388 + sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
403 sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22); 389 sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22);
404 -// File imgFile = new File(sendRecordBean.getImgPath());  
405 -// imgFile.deleteOnExit(); 390 +
406 //删除成功 391 //删除成功
407 if (sendRecordBean.getFailType() != 0) 392 if (sendRecordBean.getFailType() != 0)
408 sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID()); 393 sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID());
@@ -412,8 +397,7 @@ public class SendUserInfoTask { @@ -412,8 +397,7 @@ public class SendUserInfoTask {
412 // 添加卡信息和人脸失败 397 // 添加卡信息和人脸失败
413 if (bCardFlags == -1 && !bFaceFalgs) { 398 if (bCardFlags == -1 && !bFaceFalgs) {
414 FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); 399 FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt);
415 -// System.out.println("添加卡信息和人脸失败");  
416 - System.out.println("下发人脸和卡号失败" + "sendRecordBean:" + sendRecordBean.getDeviceID() + " ," + sendRecordBean.getNum() + "," + loginHandleLong + ",bCardFlags:" + bCardFlags + "\r\n"); 400 + log.error("下发人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));
417 sendRecordBean.setFailContent("下发人脸和卡号失败"); 401 sendRecordBean.setFailContent("下发人脸和卡号失败");
418 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 7);//更新下发失败状态 402 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 7);//更新下发失败状态
419 sendRecordBean.setFailType(8); 403 sendRecordBean.setFailType(8);
@@ -422,16 +406,15 @@ public class SendUserInfoTask { @@ -422,16 +406,15 @@ public class SendUserInfoTask {
422 406
423 // 添加卡信息成功,添加人脸失败 407 // 添加卡信息成功,添加人脸失败
424 if (bCardFlags != -1 && !bFaceFalgs) { 408 if (bCardFlags != -1 && !bFaceFalgs) {
425 - FileUtils.getInstance().writeLogs("下发卡号成功,人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt);  
426 -// System.out.println("添加卡信息成功,添加人脸失败");  
427 - System.out.println("customerId:" + sendRecordBean.getCustomerid() + " deviceId:" + sendRecordBean.getDeviceID() + " failType:" + sendRecordBean.getFailType() + "\r\n"); 409 + FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt);
  410 + log.error("下发人脸和卡号失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean));
428 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 5);//更新下发失败状态 411 sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 5);//更新下发失败状态
429 sendRecordBean.setFailContent("下发卡号成功,人脸失败:照片特征值提取失败"); 412 sendRecordBean.setFailContent("下发卡号成功,人脸失败:照片特征值提取失败");
430 sendRecordBean.setFailType(5); 413 sendRecordBean.setFailType(5);
431 addFailDace(sendRecordBean); 414 addFailDace(sendRecordBean);
432 } 415 }
433 416
434 - // 卡信息已存在,添加人脸成功 417 + // 卡信息已存在,添加人脸成功,此情况不存在.
435 if (bCardFlags == -1 && bFaceFalgs) { 418 if (bCardFlags == -1 && bFaceFalgs) {
436 FileUtils.getInstance().writeLogs("下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); 419 FileUtils.getInstance().writeLogs("下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
437 System.out.println("卡信息已存在,添加人脸成功-----------\n"); 420 System.out.println("卡信息已存在,添加人脸成功-----------\n");
@@ -440,32 +423,35 @@ public class SendUserInfoTask { @@ -440,32 +423,35 @@ public class SendUserInfoTask {
440 } catch (Exception e) { 423 } catch (Exception e) {
441 e.printStackTrace(); 424 e.printStackTrace();
442 } 425 }
443 - System.out.println("\n");  
444 } 426 }
445 427
446 - //人脸发送失败信息添加 428 +
  429 + /**
  430 + * 添加人脸下发失败记录
  431 + * @param sendRecordBean
  432 + */
447 private void addFailDace(SendRecordBean sendRecordBean) { 433 private void addFailDace(SendRecordBean sendRecordBean) {
448 -// System.out.println("sendRecordBean:" + sendRecordBean != null ? sendRecordBean.toString() : "不存在"); 434 + //获取指定设备指定用户的人脸失败记录
449 List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceFailIsExit(sendRecordBean.getDeviceID(), sendRecordBean.getCustomerid()); 435 List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceFailIsExit(sendRecordBean.getDeviceID(), sendRecordBean.getCustomerid());
450 - 436 + if(sendRecordBeanList.size() ==0){
  437 + return;
  438 + }
  439 + //删除失败记录
451 for (int i = 0; i < sendRecordBeanList.size(); i++) { 440 for (int i = 0; i < sendRecordBeanList.size(); i++) {
452 sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID()); 441 sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID());
453 } 442 }
454 443
455 -// String name = sendRecordDao.getFailNameIsExit(sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getFailType());  
456 -  
457 -// if (StringUtils.isEmpty(name)) {  
458 -  
459 if (sendRecordBean.getFailType() == 5) sendRecordBean.setFailType(8); 444 if (sendRecordBean.getFailType() == 5) sendRecordBean.setFailType(8);
460 445
461 String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom", 446 String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom",
462 String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), sendRecordBean.getUserType() == 1 ? "Teacher" : "Student")); 447 String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), sendRecordBean.getUserType() == 1 ? "Teacher" : "Student"));
463 448
  449 + //添加失败记录
464 sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), 450 sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
465 sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22); 451 sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22);
466 -// }  
467 } 452 }
468 453
  454 +
469 public String cardNo(String cardDex) { 455 public String cardNo(String cardDex) {
470 456
471 String cardR = ""; 457 String cardR = "";
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
@@ -18,10 +18,12 @@ import com.example.dahua.lib.NetSDKLib.*; @@ -18,10 +18,12 @@ import com.example.dahua.lib.NetSDKLib.*;
18 import com.example.dahua.lib.ToolKits; 18 import com.example.dahua.lib.ToolKits;
19 import com.sun.jna.Memory; 19 import com.sun.jna.Memory;
20 import com.sun.jna.ptr.IntByReference; 20 import com.sun.jna.ptr.IntByReference;
  21 +import lombok.extern.slf4j.Slf4j;
21 22
22 import javax.imageio.ImageIO; 23 import javax.imageio.ImageIO;
23 24
24 25
  26 +@Slf4j
25 public class GateModule { 27 public class GateModule {
26 // 查询句柄 28 // 查询句柄
27 private static LLong m_lFindHandle = new LLong(0); 29 private static LLong m_lFindHandle = new LLong(0);
@@ -50,6 +52,33 @@ public class GateModule { @@ -50,6 +52,33 @@ public class GateModule {
50 return m_hAttachHandle; 52 return m_hAttachHandle;
51 } 53 }
52 54
  55 + public static LLong realLoadPic2(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB, LLong lLong,String devcieId) {
  56 +
  57 + final NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
  58 +
  59 + // 设备ID
  60 + System.arraycopy(devcieId.getBytes(), 0, deviceInfo.sSerialNumber, 0, devcieId.getBytes().length);
  61 +
  62 + /**
  63 + * 说明:
  64 + * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取
  65 + * 下列仅订阅了0通道的智能事件.
  66 + */
  67 + int bNeedPicture = 1; // 是否需要图片
  68 + deviceInfo.write();
  69 + LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(lLong, ChannelId, NetSDKLib.EVENT_IVS_ALL,
  70 + bNeedPicture, m_AnalyzerDataCB, deviceInfo.getPointer(), null);
  71 + deviceInfo.read();
  72 + if (m_hAttachHandle.longValue() != 0) {
  73 + System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId);
  74 + } else {
  75 + System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
  76 + return null;
  77 + }
  78 +
  79 + return m_hAttachHandle;
  80 + }
  81 +
53 /** 82 /**
54 * 停止上传智能分析数据-图片 83 * 停止上传智能分析数据-图片
55 */ 84 */
@@ -169,6 +198,7 @@ public class GateModule { @@ -169,6 +198,7 @@ public class GateModule {
169 // return true; 198 // return true;
170 } 199 }
171 200
  201 +
172 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, 202 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd,
173 int cardStatus, int cardType, int useTimes, int isFirstEnter, 203 int cardStatus, int cardType, int useTimes, int isFirstEnter,
174 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { 204 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
@@ -254,24 +284,25 @@ public class GateModule { @@ -254,24 +284,25 @@ public class GateModule {
254 accessCardInfo.read(); 284 accessCardInfo.read();
255 285
256 if(!bRet) { 286 if(!bRet) {
257 - //System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint());  
258 String ret=ToolKits.getErrorCodePrint(); 287 String ret=ToolKits.getErrorCodePrint();
259 - System.err.println("添加卡信息失败." + ret);  
260 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 288 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
261 - if(number.equals("21")||number.equals("146"))//146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")||  
262 - { 289 + log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  290 + //146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")||
  291 + if(number.equals("21")||number.equals("146")) {
  292 + //用户已存在/返回数据校验出错时,执行删除用户
263 deleteUser( userId, lLong); 293 deleteUser( userId, lLong);
  294 + //重新下发卡至设备
264 return insertCard( cardNo, userId, cardName, cardPwd, 295 return insertCard( cardNo, userId, cardName, cardPwd,
265 cardStatus, cardType, useTimes, isFirstEnter, 296 cardStatus, cardType, useTimes, isFirstEnter,
266 isValid, startValidTime, endValidTime, lLong, userType); 297 isValid, startValidTime, endValidTime, lLong, userType);
267 } 298 }
  299 + //其他错误码,返回-1
268 return -1; 300 return -1;
269 } else { 301 } else {
270 - System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); 302 + log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo);
271 return insert.stuCtrlRecordSetResult.nRecNo; 303 return insert.stuCtrlRecordSetResult.nRecNo;
272 } 304 }
273 305
274 -  
275 // return true; 306 // return true;
276 } 307 }
277 308
@@ -378,22 +409,21 @@ public class GateModule { @@ -378,22 +409,21 @@ public class GateModule {
378 409
379 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO(); 410 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO();
380 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE; 411 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE;
381 - int nChannel = 120; // 通道号 412 + // 通道号
  413 + int nChannel = 120;
382 // msg.stuTimeWeekDay[0].stuTimeSection[0].dwRecordMask 414 // msg.stuTimeWeekDay[0].stuTimeSection[0].dwRecordMask
383 - String name = "4"; 415 + String name = "3";
384 System.arraycopy(name.getBytes(), 0, msg.szName, 0, name.getBytes().length); 416 System.arraycopy(name.getBytes(), 0, msg.szName, 0, name.getBytes().length);
385 msg.bEnable = 1; 417 msg.bEnable = 1;
386 418
387 List<WeekDay> weekDays = permissionBean.getWeekDays(); 419 List<WeekDay> weekDays = permissionBean.getWeekDays();
388 Map<Integer, List<WeekTime>> map = new HashMap<>(); 420 Map<Integer, List<WeekTime>> map = new HashMap<>();
389 421
390 - for (WeekDay weekDay :  
391 - weekDays) { 422 + for (WeekDay weekDay : weekDays) {
392 //整理时间 423 //整理时间
393 initWeedayAndTimes(weekDay, map); 424 initWeedayAndTimes(weekDay, map);
394 //设置周计划信息 425 //设置周计划信息
395 - for (Map.Entry<Integer, List<WeekTime>> entry :  
396 - map.entrySet()) { 426 + for (Map.Entry<Integer, List<WeekTime>> entry : map.entrySet()) {
397 427
398 int weekDayIndex = entry.getKey(); 428 int weekDayIndex = entry.getKey();
399 429
@@ -632,7 +662,25 @@ public class GateModule { @@ -632,7 +662,25 @@ public class GateModule {
632 return true; 662 return true;
633 } 663 }
634 664
635 - public static int modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, 665 + /**
  666 + * 修改设备卡信息
  667 + * @param recordNo
  668 + * @param cardNo
  669 + * @param userId
  670 + * @param cardName
  671 + * @param cardPwd
  672 + * @param cardStatus
  673 + * @param cardType
  674 + * @param useTimes
  675 + * @param isFirstEnter
  676 + * @param isValid
  677 + * @param startValidTime
  678 + * @param endValidTime
  679 + * @param lLong
  680 + * @param userType
  681 + * @return
  682 + */
  683 + public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
636 int cardStatus, int cardType, int useTimes, int isFirstEnter, 684 int cardStatus, int cardType, int useTimes, int isFirstEnter,
637 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { 685 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
638 /** 686 /**
@@ -717,29 +765,24 @@ public class GateModule { @@ -717,29 +765,24 @@ public class GateModule {
717 CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); 765 CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000);
718 update.read(); 766 update.read();
719 accessCardInfo.read(); 767 accessCardInfo.read();
720 - 768 + // 返回值:1成功,否则返回
721 if (!bRet) { 769 if (!bRet) {
722 - //System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint());  
723 String ret=ToolKits.getErrorCodePrint(); 770 String ret=ToolKits.getErrorCodePrint();
  771 + //结果码
724 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 772 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
725 - System.err.println("修改卡信息失败." + ret+" "+number);  
726 - if(number.equals("21")||number.equals("147"))//147用户不存在,21对返回数据的校验出错  
727 - {  
728 -// newRecordNo= insertCard( cardNo, userId, cardName, cardPwd,  
729 -// cardStatus, cardType, useTimes, isFirstEnter,  
730 -// isValid, startValidTime, endValidTime, lLong, userType);  
731 - }  
732 - if(number.equals("1091")||number.equals("1147"))//未知错误  
733 - {  
734 - return Integer.parseInt(number);  
735 - }  
736 - return 0;  
737 - }  
738 - else {  
739 - System.out.println("修改卡信息成功 "); 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 +// }
  781 + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  782 + return false;
740 } 783 }
741 -  
742 - return 1; 784 + log.info("修改卡信息成功!");
  785 + return true;
743 } 786 }
744 787
745 /** 788 /**
@@ -779,8 +822,7 @@ public class GateModule { @@ -779,8 +822,7 @@ public class GateModule {
779 msg.pBuf = new IntByReference(recordNo).getPointer(); 822 msg.pBuf = new IntByReference(recordNo).getPointer();
780 823
781 msg.write(); 824 msg.write();
782 - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong,  
783 - CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); 825 + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000);
784 msg.read(); 826 msg.read();
785 827
786 if (!bRet) { 828 if (!bRet) {
@@ -1036,12 +1078,10 @@ public class GateModule { @@ -1036,12 +1078,10 @@ public class GateModule {
1036 * 打印具体的信息 1078 * 打印具体的信息
1037 */ 1079 */
1038 for (int i = 0; i < nMaxNum; i++) { 1080 for (int i = 0; i < nMaxNum; i++) {
1039 - System.out.println("[" + i + "]删除用户结果:"  
1040 - + failCodes[i].nFailCode); 1081 + log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode);
1041 } 1082 }
1042 } else { 1083 } else {
1043 - //System.err.println("删除用户失败, " + getErrorCode());  
1044 - System.err.println("删除用户失败, " + ToolKits.getErrorCodePrint()); 1084 + log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint());
1045 } 1085 }
1046 1086
1047 stIn.read(); 1087 stIn.read();
@@ -1129,23 +1169,21 @@ public class GateModule { @@ -1129,23 +1169,21 @@ public class GateModule {
1129 stIn.read(); 1169 stIn.read();
1130 stOut.read(); 1170 stOut.read();
1131 if (bRet) { 1171 if (bRet) {
1132 - System.out.println("添加人脸成功!"); 1172 + log.info("添加人脸成功!");
1133 } else { 1173 } else {
1134 -// System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint());  
1135 String ret=ToolKits.getErrorCodePrint(); 1174 String ret=ToolKits.getErrorCodePrint();
1136 - System.err.println("添加人脸失败!" + ret);  
1137 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 1175 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
1138 - if(number.equals("1031"))//照片已存在  
1139 - {  
1140 - return modifyFaceInfo( userId, memory, lLong)==1?true:false; 1176 + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  1177 + //number = 1031:照片已存在;number = 1029 :用户ID不存在
  1178 + if(number.equals("1031")){
  1179 + return modifyFaceInfo( userId, memory, lLong);
1141 } 1180 }
1142 - if(number.equals("1029"))//用户ID不存在 1181 + if(number.equals("1029"))
1143 { 1182 {
1144 - //return addFaceInfo( userId, memory, lLong); 1183 + return addFaceInfo( userId, memory, lLong);
1145 } 1184 }
1146 return false; 1185 return false;
1147 } 1186 }
1148 -  
1149 return true; 1187 return true;
1150 } 1188 }
1151 1189
@@ -1187,7 +1225,7 @@ public class GateModule { @@ -1187,7 +1225,7 @@ public class GateModule {
1187 stIn.read(); 1225 stIn.read();
1188 stOut.read(); 1226 stOut.read();
1189 if (bRet) { 1227 if (bRet) {
1190 - System.out.println("修改人脸成功!"); 1228 + log.info("修改人脸成功!");
1191 } else { 1229 } else {
1192 // System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); 1230 // System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint());
1193 String ret=ToolKits.getErrorCodePrint(); 1231 String ret=ToolKits.getErrorCodePrint();
@@ -1200,7 +1238,7 @@ public class GateModule { @@ -1200,7 +1238,7 @@ public class GateModule {
1200 } 1238 }
1201 1239
1202 1240
1203 - public static int modifyFaceInfo(String userId, Memory memory, LLong lLong) { 1241 + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) {
1204 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 1242 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改
1205 1243
1206 /** 1244 /**
@@ -1230,22 +1268,16 @@ public class GateModule { @@ -1230,22 +1268,16 @@ public class GateModule {
1230 boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); 1268 boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000);
1231 stIn.read(); 1269 stIn.read();
1232 stOut.read(); 1270 stOut.read();
  1271 +
1233 if (bRet) { 1272 if (bRet) {
1234 - System.out.println("修改人脸成功!"); 1273 + log.info("修改人脸成功!");
1235 } else { 1274 } else {
1236 -// System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint());  
1237 String ret=ToolKits.getErrorCodePrint(); 1275 String ret=ToolKits.getErrorCodePrint();
1238 - System.err.println("修改人脸失败!" + ret);  
1239 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); 1276 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
1240 - if(number.equals("1029"))//1029用户ID不存在  
1241 - {  
1242 - //return addFaceInfo(userId, memory, lLong);  
1243 - return Integer.parseInt(number);  
1244 - }  
1245 - return 0; 1277 + log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number);
  1278 + return false;
1246 } 1279 }
1247 -  
1248 - return 1; 1280 + return true;
1249 } 1281 }
1250 1282
1251 /** 1283 /**
cloud/dahua/src/main/java/com/example/dahua/service/UserService.java
@@ -54,6 +54,12 @@ public interface UserService { @@ -54,6 +54,12 @@ public interface UserService {
54 */ 54 */
55 boolean sendPermission(PermissionBean permissionBean); 55 boolean sendPermission(PermissionBean permissionBean);
56 56
  57 + /**
  58 + * 根据学籍号、学校id获取用户id
  59 + * @param code
  60 + * @param schoolId
  61 + * @return
  62 + */
57 String getUserId(String code,String schoolId); 63 String getUserId(String code,String schoolId);
58 64
59 65