From 41b5b3f843e4e08980f36c8aea8937336357f509 Mon Sep 17 00:00:00 2001 From: 1099815072@qq.com <1099815072@qq.com> Date: Thu, 19 Nov 2020 17:35:31 +0800 Subject: [PATCH] 考勤修改 --- cloud/dahua/src/main/java/com/example/dahua/MyTask.java | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------------- cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java | 10 ++++++++++ cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java | 8 ++++++++ cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java | 17 +++++++++++++++++ 4 files changed, 88 insertions(+), 17 deletions(-) diff --git a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java index 277a8d1..cd9a038 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -3,6 +3,7 @@ package com.example.dahua; import com.example.dahua.async.MyScheduledTask; import com.example.dahua.bean.*; import com.example.dahua.dao.UserDao; +import com.example.dahua.enums.EnumDeviceType; import com.example.dahua.enums.EnumSendFaceType; import com.example.dahua.enums.EnumSzBusinessType; import com.example.dahua.lib.NetSDKLib; @@ -58,7 +59,7 @@ public class MyTask implements ApplicationRunner { public static String password = "q12345678"; //在线设备信息集合 - private List deviceInfoBeans = new ArrayList<>(); + private static List deviceInfoBeans = new ArrayList<>(); //存放登录句柄 public static Map lLongMap = new HashMap<>(); @@ -327,9 +328,9 @@ public class MyTask implements ApplicationRunner { return 0; } int schoolId=0; - String schoolIdStr=userDao.getSchoolIdbyClint_id(szSn); - if(org.apache.commons.lang.StringUtils.isNotBlank(schoolIdStr)){ - schoolId=Integer.parseInt(schoolIdStr); + AttendanceBean attendanceBean =userDao.getTypeByClint_id(szSn); + if(org.apache.commons.lang.StringUtils.isNotBlank(attendanceBean.getSchool_id())){ + schoolId=Integer.parseInt(attendanceBean.getSchool_id()); } /** * 卡号取反(大写) @@ -359,17 +360,19 @@ public class MyTask implements ApplicationRunner { } if(szSn.startsWith("ytj")) { + //门禁进出类型:1进0出 + int eventType = EnumSzBusinessType.EnumDeviceInAndOut.INT.code; + if(attendanceBean.getOutOrIn() != EnumSzBusinessType.EnumDeviceInAndOut.INT.code){ + eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code; + } // TODO 考勤记录 //刷卡结果,1表示成功, 0表示失败 int status = msg.bStatus; - - //门禁事件类型:1进2出 - int eventType = msg.emEventType; //刷卡时间 String eventTime = DateUtils.date2String(new Date(), DateUtils.format2); //保存考勤记录 - kaoQinRecord(status, eventType, card, szSn, eventTime, snapPicPath, messageCode); + kaoQinRecord(status, eventType, card, szSn, eventTime, snapPicPath, messageCode,lAnalyzerHandle); } } @@ -434,14 +437,14 @@ public class MyTask implements ApplicationRunner { * @param eventTime * @param imageUrl */ - public void kaoQinRecord(int status,int eventType,String cardNo,String deviceId,String eventTime,String imageUrl,int messageCode) { + public void kaoQinRecord(int status,int eventType,String cardNo,String deviceId,String eventTime,String imageUrl,int messageCode,NetSDKLib.LLong lLong) { if (status == 1) { //有效刷卡调考勤存储过程 CheckIn checkIn = new CheckIn(); checkIn.setDeviceId(deviceId); checkIn.setCardNo(cardNo); checkIn.setFunNo(8); - checkIn.setFlag(eventType == 2 ? 1 : 0); + checkIn.setFlag(eventType == EnumSzBusinessType.EnumDeviceInAndOut.INT.code ? 0:1); checkIn.setCheckTime(eventTime); searchMapper.checkIn(checkIn); @@ -481,6 +484,10 @@ public class MyTask implements ApplicationRunner { shortMsg.setMsg(mobileMessage.getName() + "家长您好,你的孩子于" + DateUtils.date2String(new Date(), DateUtils.format2) + "请假后进校,请知晓;"); } userDao.insertMessage(shortMsg.getTableName(),shortMsg.getSchoolId()+"",shortMsg.getMobile(),shortMsg.getMsg()); + /** + * 远程开门 + */ + openDoor(lLong); } } else { //若即不成功,也不是请假,则按刷卡异常处理 @@ -532,27 +539,36 @@ public class MyTask implements ApplicationRunner { mqttManager = new MqttManager(); mqttManager.init(); } - + // inOrOut:1出门0进门 String inOrOut = eventType == 1 ? "0" : "1"; - //获取寝室关联的场景id + //获取设备关联的场景id String placeId = userDao.getPlaceIdWithKaoqinDevid(deviceId); if (null != placeId) { //关联的显示看板设备 List kanbanIds = userDao.getKanBanIdWithPlaceId(placeId); + if(kanbanIds.size()<1){ + log.info("设备id: {},关联placeId: {},未查询到关联看板设备。",deviceId,placeId); + return; + } log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(kanbanIds)); - for (int i = 0; i < kanbanIds.size(); i++) { - String kanbanId = kanbanIds.get(i); + for (String kanbanId : kanbanIds) { String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; log.info("====== 开始推送看板======, kanbanId = {}, cardNum = {},content ={}",kanbanId,cardNum,data); mqttManager.sendMqQD(kanbanId, data); } - } else { - String schoolId = userDao.getSchoolIdWidthCardNum(cardNum); - if(StringUtils.isEmpty(schoolId)||Integer.parseInt(schoolId) <=0)return; + if(StringUtils.isEmpty(schoolId)||Integer.parseInt(schoolId) <=0){ + log.info("卡号未查询到对应学校。卡号: {}",cardNum); + return; + } + //查询学校看板设备ID List clintIds = userDao.getClintIds(schoolId); + if(clintIds.size()<1){ + log.info("学校下未查询到看板信息,学校id: {}",schoolId); + return; + } log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(clintIds)); for (int i = 0; i < clintIds.size(); i++) { String clintId = clintIds.get(i); @@ -561,8 +577,28 @@ public class MyTask implements ApplicationRunner { mqttManager.sendMqQD(clintId, data); } } + } + + /** + * 远程开门 + */ + private static NetSDKLib.NET_CTRL_ACCESS_OPEN open = new NetSDKLib.NET_CTRL_ACCESS_OPEN(); + public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; + + public static boolean openDoor(NetSDKLib.LLong lLong) { + open.nChannelID = 0; + open.write(); + boolean openSuccess = LoginModule.netsdk.CLIENT_ControlDeviceEx(lLong, NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, open.getPointer(), null, 5000); + open.read(); + + if (!openSuccess) { + log.warn("open Door error: 0x: "+ Long.toHexString(LoginModule.netsdk.CLIENT_GetLastError())); + return false; + } + return true; } + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java index 03c1538..6596bba 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/AttendanceBean.java @@ -16,6 +16,8 @@ public class AttendanceBean implements Serializable { private String intime; private String school_id; + //进出方向 + private int OutOrIn; public String getClint_id() { return clint_id; @@ -57,6 +59,14 @@ public class AttendanceBean implements Serializable { this.school_id = school_id; } + public int getOutOrIn() { + return OutOrIn; + } + + public void setOutOrIn(int outOrIn) { + OutOrIn = outOrIn; + } + @Override public String toString() { return "AttendanceBean{" + diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java index a490316..638cdd8 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java @@ -16,6 +16,14 @@ public interface UserDao { @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ") String getSchoolIdbyClint_id( @Param("clint_id") String clint_id); + /** + * 获取设备出入类型 + * @param clint_id + * @return + */ + @Select("select * from SZ_Attendance where clint_id = #{clint_id} ") + AttendanceBean getTypeByClint_id( @Param("clint_id") String clint_id); + @Select("select * from SZ_Attendance where school_id = #{school_id} and clint_type = #{clint_type}") List getAttendanceBeans(@Param("school_id") String school_id, @Param("clint_type") String clint_type); diff --git a/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java b/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java index cee6afd..c9c5b53 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java +++ b/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java @@ -47,4 +47,21 @@ public interface EnumSzBusinessType { } } + /** + * 设备出入类型 + */ + public enum EnumDeviceInAndOut { + + INT(1, "进校"), + OUT(0, "出校"); + + public final int code; + public final String name; + + EnumDeviceInAndOut(int code, String name) { + this.code = code; + this.name = name; + } + } + } -- libgit2 0.21.0