Commit 41b5b3f843e4e08980f36c8aea8937336357f509

Authored by 徐泉
1 parent fd892de1
Exists in master

考勤修改

cloud/dahua/src/main/java/com/example/dahua/MyTask.java
... ... @@ -3,6 +3,7 @@ package com.example.dahua;
3 3 import com.example.dahua.async.MyScheduledTask;
4 4 import com.example.dahua.bean.*;
5 5 import com.example.dahua.dao.UserDao;
  6 +import com.example.dahua.enums.EnumDeviceType;
6 7 import com.example.dahua.enums.EnumSendFaceType;
7 8 import com.example.dahua.enums.EnumSzBusinessType;
8 9 import com.example.dahua.lib.NetSDKLib;
... ... @@ -58,7 +59,7 @@ public class MyTask implements ApplicationRunner {
58 59 public static String password = "q12345678";
59 60  
60 61 //在线设备信息集合
61   - private List<DeviceInfoBean> deviceInfoBeans = new ArrayList<>();
  62 + private static List<DeviceInfoBean> deviceInfoBeans = new ArrayList<>();
62 63  
63 64 //存放登录句柄
64 65 public static Map<String, NetSDKLib.LLong> lLongMap = new HashMap<>();
... ... @@ -327,9 +328,9 @@ public class MyTask implements ApplicationRunner {
327 328 return 0;
328 329 }
329 330 int schoolId=0;
330   - String schoolIdStr=userDao.getSchoolIdbyClint_id(szSn);
331   - if(org.apache.commons.lang.StringUtils.isNotBlank(schoolIdStr)){
332   - schoolId=Integer.parseInt(schoolIdStr);
  331 + AttendanceBean attendanceBean =userDao.getTypeByClint_id(szSn);
  332 + if(org.apache.commons.lang.StringUtils.isNotBlank(attendanceBean.getSchool_id())){
  333 + schoolId=Integer.parseInt(attendanceBean.getSchool_id());
333 334 }
334 335 /**
335 336 * 卡号取反(大写)
... ... @@ -359,17 +360,19 @@ public class MyTask implements ApplicationRunner {
359 360 }
360 361  
361 362 if(szSn.startsWith("ytj")) {
  363 + //门禁进出类型:1进0出
  364 + int eventType = EnumSzBusinessType.EnumDeviceInAndOut.INT.code;
  365 + if(attendanceBean.getOutOrIn() != EnumSzBusinessType.EnumDeviceInAndOut.INT.code){
  366 + eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code;
  367 + }
362 368 // TODO 考勤记录
363 369 //刷卡结果,1表示成功, 0表示失败
364 370 int status = msg.bStatus;
365   -
366   - //门禁事件类型:1进2出
367   - int eventType = msg.emEventType;
368 371 //刷卡时间
369 372 String eventTime = DateUtils.date2String(new Date(), DateUtils.format2);
370 373  
371 374 //保存考勤记录
372   - kaoQinRecord(status, eventType, card, szSn, eventTime, snapPicPath, messageCode);
  375 + kaoQinRecord(status, eventType, card, szSn, eventTime, snapPicPath, messageCode,lAnalyzerHandle);
373 376 }
374 377 }
375 378  
... ... @@ -434,14 +437,14 @@ public class MyTask implements ApplicationRunner {
434 437 * @param eventTime
435 438 * @param imageUrl
436 439 */
437   - public void kaoQinRecord(int status,int eventType,String cardNo,String deviceId,String eventTime,String imageUrl,int messageCode) {
  440 + public void kaoQinRecord(int status,int eventType,String cardNo,String deviceId,String eventTime,String imageUrl,int messageCode,NetSDKLib.LLong lLong) {
438 441 if (status == 1) {
439 442 //有效刷卡调考勤存储过程
440 443 CheckIn checkIn = new CheckIn();
441 444 checkIn.setDeviceId(deviceId);
442 445 checkIn.setCardNo(cardNo);
443 446 checkIn.setFunNo(8);
444   - checkIn.setFlag(eventType == 2 ? 1 : 0);
  447 + checkIn.setFlag(eventType == EnumSzBusinessType.EnumDeviceInAndOut.INT.code ? 0:1);
445 448 checkIn.setCheckTime(eventTime);
446 449 searchMapper.checkIn(checkIn);
447 450  
... ... @@ -481,6 +484,10 @@ public class MyTask implements ApplicationRunner {
481 484 shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后进校,请知晓;");
482 485 }
483 486 userDao.insertMessage(shortMsg.getTableName(),shortMsg.getSchoolId()+"",shortMsg.getMobile(),shortMsg.getMsg());
  487 + /**
  488 + * 远程开门
  489 + */
  490 + openDoor(lLong);
484 491 }
485 492 } else {
486 493 //若即不成功,也不是请假,则按刷卡异常处理
... ... @@ -532,27 +539,36 @@ public class MyTask implements ApplicationRunner {
532 539 mqttManager = new MqttManager();
533 540 mqttManager.init();
534 541 }
535   -
  542 + // inOrOut:1出门0进门
536 543 String inOrOut = eventType == 1 ? "0" : "1";
537   - //获取寝室关联的场景id
  544 + //获取设备关联的场景id
538 545 String placeId = userDao.getPlaceIdWithKaoqinDevid(deviceId);
539 546  
540 547 if (null != placeId) {
541 548 //关联的显示看板设备
542 549 List<String> kanbanIds = userDao.getKanBanIdWithPlaceId(placeId);
  550 + if(kanbanIds.size()<1){
  551 + log.info("设备id: {},关联placeId: {},未查询到关联看板设备。",deviceId,placeId);
  552 + return;
  553 + }
543 554 log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(kanbanIds));
544   - for (int i = 0; i < kanbanIds.size(); i++) {
545   - String kanbanId = kanbanIds.get(i);
  555 + for (String kanbanId : kanbanIds) {
546 556 String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}";
547 557 log.info("====== 开始推送看板======, kanbanId = {}, cardNum = {},content ={}",kanbanId,cardNum,data);
548 558 mqttManager.sendMqQD(kanbanId, data);
549 559 }
550   -
551 560 } else {
552   -
553 561 String schoolId = userDao.getSchoolIdWidthCardNum(cardNum);
554   - if(StringUtils.isEmpty(schoolId)||Integer.parseInt(schoolId) <=0)return;
  562 + if(StringUtils.isEmpty(schoolId)||Integer.parseInt(schoolId) <=0){
  563 + log.info("卡号未查询到对应学校。卡号: {}",cardNum);
  564 + return;
  565 + }
  566 + //查询学校看板设备ID
555 567 List<String> clintIds = userDao.getClintIds(schoolId);
  568 + if(clintIds.size()<1){
  569 + log.info("学校下未查询到看板信息,学校id: {}",schoolId);
  570 + return;
  571 + }
556 572 log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(clintIds));
557 573 for (int i = 0; i < clintIds.size(); i++) {
558 574 String clintId = clintIds.get(i);
... ... @@ -561,8 +577,28 @@ public class MyTask implements ApplicationRunner {
561 577 mqttManager.sendMqQD(clintId, data);
562 578 }
563 579 }
  580 + }
  581 +
  582 + /**
  583 + * 远程开门
  584 + */
  585 + private static NetSDKLib.NET_CTRL_ACCESS_OPEN open = new NetSDKLib.NET_CTRL_ACCESS_OPEN();
  586 + public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
  587 +
  588 + public static boolean openDoor(NetSDKLib.LLong lLong) {
  589 + open.nChannelID = 0;
564 590  
  591 + open.write();
  592 + boolean openSuccess = LoginModule.netsdk.CLIENT_ControlDeviceEx(lLong, NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, open.getPointer(), null, 5000);
  593 + open.read();
  594 +
  595 + if (!openSuccess) {
  596 + log.warn("open Door error: 0x: "+ Long.toHexString(LoginModule.netsdk.CLIENT_GetLastError()));
  597 + return false;
  598 + }
  599 + return true;
565 600 }
  601 +
566 602 }
567 603  
568 604  
... ...
cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java
... ... @@ -16,6 +16,8 @@ public class AttendanceBean implements Serializable {
16 16 private String intime;
17 17  
18 18 private String school_id;
  19 + //进出方向
  20 + private int OutOrIn;
19 21  
20 22 public String getClint_id() {
21 23 return clint_id;
... ... @@ -57,6 +59,14 @@ public class AttendanceBean implements Serializable {
57 59 this.school_id = school_id;
58 60 }
59 61  
  62 + public int getOutOrIn() {
  63 + return OutOrIn;
  64 + }
  65 +
  66 + public void setOutOrIn(int outOrIn) {
  67 + OutOrIn = outOrIn;
  68 + }
  69 +
60 70 @Override
61 71 public String toString() {
62 72 return "AttendanceBean{" +
... ...
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
... ... @@ -16,6 +16,14 @@ public interface UserDao {
16 16 @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ")
17 17 String getSchoolIdbyClint_id( @Param("clint_id") String clint_id);
18 18  
  19 + /**
  20 + * 获取设备出入类型
  21 + * @param clint_id
  22 + * @return
  23 + */
  24 + @Select("select * from SZ_Attendance where clint_id = #{clint_id} ")
  25 + AttendanceBean getTypeByClint_id( @Param("clint_id") String clint_id);
  26 +
19 27 @Select("select * from SZ_Attendance where school_id = #{school_id} and clint_type = #{clint_type}")
20 28 List<AttendanceBean> getAttendanceBeans(@Param("school_id") String school_id, @Param("clint_type") String clint_type);
21 29  
... ...
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java
... ... @@ -47,4 +47,21 @@ public interface EnumSzBusinessType {
47 47 }
48 48 }
49 49  
  50 + /**
  51 + * 设备出入类型
  52 + */
  53 + public enum EnumDeviceInAndOut {
  54 +
  55 + INT(1, "进校"),
  56 + OUT(0, "出校");
  57 +
  58 + public final int code;
  59 + public final String name;
  60 +
  61 + EnumDeviceInAndOut(int code, String name) {
  62 + this.code = code;
  63 + this.name = name;
  64 + }
  65 + }
  66 +
50 67 }
... ...