Commit b7125c31aba41ee19a3fce2f643c357e68ea8478

Authored by 徐泉
1 parent 38f269ab
Exists in master

智能校卫:海康、大华人脸机代码提交

cloud/dahua/src/main/java/com/example/dahua/bean/WeekTime.java
@@ -28,3 +28,4 @@ public class WeekTime implements Serializable { @@ -28,3 +28,4 @@ public class WeekTime implements Serializable {
28 this.endTime = endTime; 28 this.endTime = endTime;
29 } 29 }
30 } 30 }
  31 +
cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
@@ -191,6 +191,12 @@ public class FileControl { @@ -191,6 +191,12 @@ public class FileControl {
191 return clearCard; 191 return clearCard;
192 } 192 }
193 193
  194 + @RequestMapping(value = "getUserCard", method = RequestMethod.GET)
  195 + @ApiOperation(value = "获取卡信息")
  196 + public void clearFaceInfo(@RequestParam("userId") String userId,@RequestParam("deviceId") String deviceId) {
  197 + GateModule.getCard(userId, MyTask.lLongSendMap.get(deviceId));
  198 + }
  199 +
194 200
195 public String cardNo(String cardDex) { 201 public String cardNo(String cardDex) {
196 202
@@ -209,7 +215,6 @@ public class FileControl { @@ -209,7 +215,6 @@ public class FileControl {
209 215
210 } 216 }
211 217
212 -  
213 @Autowired 218 @Autowired
214 private DeleteBatchTest deleteBatchTest; 219 private DeleteBatchTest deleteBatchTest;
215 220
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
@@ -139,7 +139,7 @@ public interface UserDao { @@ -139,7 +139,7 @@ public interface UserDao {
139 @Select("select Top(1) PlaceId from XA_PlaceAttendance where KanBanAttendance = #{kanBanDevId}") 139 @Select("select Top(1) PlaceId from XA_PlaceAttendance where KanBanAttendance = #{kanBanDevId}")
140 String getPlaceIdWithKanBanDevid(@Param("kanBanDevId") String kanBanDevId); 140 String getPlaceIdWithKanBanDevid(@Param("kanBanDevId") String kanBanDevId);
141 141
142 - @Select("select KanBanAttendance from XA_PlaceAttendance where PlaceId = #{PlaceId} and (len(KanBanAttendance)>0 and KanBanAttendance is not null )") 142 + @Select("select KanBanAttendance from XA_PlaceAttendance where PlaceId = #{PlaceId} and (len(KanBanAttendance)>0 and KanBanAttendance is not null)")
143 List<String> getKanBanIdWithPlaceId(@Param("PlaceId") String placeId); 143 List<String> getKanBanIdWithPlaceId(@Param("PlaceId") String placeId);
144 144
145 @Select("select user_id,studentcode from SZ_V_School_Student where school_id = 27") 145 @Select("select user_id,studentcode from SZ_V_School_Student where school_id = 27")
@@ -269,6 +269,4 @@ public interface UserDao { @@ -269,6 +269,4 @@ public interface UserDao {
269 List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId); 269 List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId);
270 270
271 List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId); 271 List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId);
272 -  
273 -  
274 } 272 }
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
@@ -988,8 +988,7 @@ public class GateModule { @@ -988,8 +988,7 @@ public class GateModule {
988 System.out.println("[" + i + "]卡号 : " 988 System.out.println("[" + i + "]卡号 : "
989 + new String(cards[i].szCardNo).trim()); 989 + new String(cards[i].szCardNo).trim());
990 System.out.println("[" + i + "]卡类型 : " + cards[i].emType); 990 System.out.println("[" + i + "]卡类型 : " + cards[i].emType);
991 - System.out.println("[" + i + "]查询卡结果 : "  
992 - + failCodes[i].nFailCode + "\n"); 991 + System.out.println("[" + i + "]查询卡结果 : " + failCodes[i].nFailCode + "\n");
993 } 992 }
994 } else { 993 } else {
995 System.err.println("查询卡失败, " + ToolKits.getErrorCodePrint()); 994 System.err.println("查询卡失败, " + ToolKits.getErrorCodePrint());
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
@@ -7,6 +7,7 @@ import com.sincere.haikangface.bean.AttendanceBean; @@ -7,6 +7,7 @@ import com.sincere.haikangface.bean.AttendanceBean;
7 import com.sincere.haikangface.bean.BaiduFaceRecorder; 7 import com.sincere.haikangface.bean.BaiduFaceRecorder;
8 import com.sincere.haikangface.bean.StudentBean; 8 import com.sincere.haikangface.bean.StudentBean;
9 import com.sincere.haikangface.bean.TeacherBean; 9 import com.sincere.haikangface.bean.TeacherBean;
  10 +import com.sincere.haikangface.bean.xiaoan.CheckIn;
10 import com.sincere.haikangface.bean.xiaoan.Face_Recoder; 11 import com.sincere.haikangface.bean.xiaoan.Face_Recoder;
11 import com.sincere.haikangface.dao.DeviceDao; 12 import com.sincere.haikangface.dao.DeviceDao;
12 import com.sincere.haikangface.dao.UserDao; 13 import com.sincere.haikangface.dao.UserDao;
@@ -17,6 +18,7 @@ import com.sincere.haikangface.mqtt.MqtUtils; @@ -17,6 +18,7 @@ import com.sincere.haikangface.mqtt.MqtUtils;
17 import com.sincere.haikangface.service.impl.BaseService; 18 import com.sincere.haikangface.service.impl.BaseService;
18 import com.sincere.haikangface.utils.AlarmUtils; 19 import com.sincere.haikangface.utils.AlarmUtils;
19 import com.sincere.haikangface.utils.HttpUtil; 20 import com.sincere.haikangface.utils.HttpUtil;
  21 +import com.sincere.haikangface.utils.JsonUtils;
20 import com.sincere.haikangface.utils.SpringContextHolder; 22 import com.sincere.haikangface.utils.SpringContextHolder;
21 import com.sincere.haikangface.xiananDao.SendRecordDao; 23 import com.sincere.haikangface.xiananDao.SendRecordDao;
22 import com.sun.jna.NativeLong; 24 import com.sun.jna.NativeLong;
@@ -65,7 +67,7 @@ public class CMSServer implements ApplicationRunner { @@ -65,7 +67,7 @@ public class CMSServer implements ApplicationRunner {
65 //114.55.30.100 67 //114.55.30.100
66 //120.26.116.253 68 //120.26.116.253
67 // private String ip_cloud = "114.55.30.100"; 69 // private String ip_cloud = "114.55.30.100";
68 - private String ip_cloud = "114.55.30.100"; 70 + private String ip_cloud = "120.26.116.253";
69 71
70 private String ip; 72 private String ip;
71 { 73 {
@@ -366,6 +368,7 @@ public class CMSServer implements ApplicationRunner { @@ -366,6 +368,7 @@ public class CMSServer implements ApplicationRunner {
366 pPlateInfo.write(0, pAlarmMsg.pXmlBuf.getByteArray(0, strXMLData.size()), 0, strXMLData.size()); 368 pPlateInfo.write(0, pAlarmMsg.pXmlBuf.getByteArray(0, strXMLData.size()), 0, strXMLData.size());
367 strXMLData.read(); 369 strXMLData.read();
368 String strXML = new String(strXMLData.byValue); 370 String strXML = new String(strXMLData.byValue);
  371 +// log.info("strXML: "+strXML);
369 if (null == alarmUtils) { 372 if (null == alarmUtils) {
370 log.info("初始化报警工具类"); 373 log.info("初始化报警工具类");
371 alarmUtils = new AlarmUtils(deviceDao, userDao); 374 alarmUtils = new AlarmUtils(deviceDao, userDao);
@@ -373,10 +376,18 @@ public class CMSServer implements ApplicationRunner { @@ -373,10 +376,18 @@ public class CMSServer implements ApplicationRunner {
373 @Override 376 @Override
374 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { 377 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
375 saveAttendance(deviceID); 378 saveAttendance(deviceID);
  379 + AttendanceBean attendanceBean = deviceDao.selectDevice(deviceID);
  380 + int outOrIn = attendanceBean.getOutOrIn();
  381 + String schoolId = attendanceBean.getSchool_id();
376 switch (minorType) { 382 switch (minorType) {
377 case "0x4b"://人脸认证通过 383 case "0x4b"://人脸认证通过
378 log.info("人脸验证通过,事件次类型:"+minorType); 384 log.info("人脸验证通过,事件次类型:"+minorType);
379 - saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 385 + //人脸记录
  386 + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
  387 + //944柯桥实验幼儿园,海康一体机考勤签到
  388 + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){
  389 + kaoQinRecord(outOrIn,cardNo,deviceID,time);
  390 + }
380 break; 391 break;
381 case "0x426"://人证设备在线 392 case "0x426"://人证设备在线
382 break; 393 break;
@@ -387,11 +398,19 @@ public class CMSServer implements ApplicationRunner { @@ -387,11 +398,19 @@ public class CMSServer implements ApplicationRunner {
387 break; 398 break;
388 case "0x69"://人证比对通过 399 case "0x69"://人证比对通过
389 log.info("人证比对通过,事件次类型:"+minorType); 400 log.info("人证比对通过,事件次类型:"+minorType);
390 - saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 401 + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
  402 + //944柯桥实验幼儿园,海康一体机考勤签到
  403 + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo)&& isNumeric(cardNo)){
  404 + kaoQinRecord(outOrIn,cardNo,deviceID,time);
  405 + }
391 break; 406 break;
392 case "0x6": 407 case "0x6":
393 log.info("通过,事件次类型:"+minorType); 408 log.info("通过,事件次类型:"+minorType);
394 - saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 409 + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
  410 + //944柯桥实验幼儿园,海康一体机考勤签到
  411 + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){
  412 + kaoQinRecord(outOrIn,cardNo,deviceID,time);
  413 + }
395 break; 414 break;
396 } 415 }
397 } 416 }
@@ -406,6 +425,27 @@ public class CMSServer implements ApplicationRunner { @@ -406,6 +425,27 @@ public class CMSServer implements ApplicationRunner {
406 } 425 }
407 } 426 }
408 427
  428 + public void kaoQinRecord(int outOrIn,String cardNo,String deviceId,String eventTime) {
  429 + BaseService baseService = SpringContextHolder.getBaseService();
  430 + //十进制卡转十六进制卡
  431 + String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase();
  432 + //卡号逆转
  433 + cardNo = baseService.getCard(card);
  434 + //有效刷卡调考勤存储过程
  435 + CheckIn checkIn = new CheckIn();
  436 + checkIn.setDeviceId(deviceId);
  437 + checkIn.setCardNo(cardNo);
  438 + checkIn.setFunNo(8);
  439 + checkIn.setFlag(outOrIn == 1 ? 1:0);
  440 + checkIn.setCheckTime(eventTime);
  441 + sendRecordDao.checkIn(checkIn);
  442 + if (checkIn.getIsSuccess() == 1) {
  443 + log.info("考勤成功: checkIn: {}, 方向:{}", JsonUtils.nonDefaultMapper().toJson(checkIn),outOrIn == 1 ? "门" : "出门");
  444 + } else {
  445 + log.info("考勤失败: checkIn: {}, 方向:{}",JsonUtils.nonDefaultMapper().toJson(checkIn),outOrIn == 1 ? "进门" : "出门");
  446 + }
  447 + }
  448 +
409 /** 449 /**
410 * 判断设备是否在线 450 * 判断设备是否在线
411 * @param deviceId 451 * @param deviceId
@@ -420,7 +460,7 @@ public class CMSServer implements ApplicationRunner { @@ -420,7 +460,7 @@ public class CMSServer implements ApplicationRunner {
420 * @param time 460 * @param time
421 * @param picDataUrlId 461 * @param picDataUrlId
422 */ 462 */
423 - private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { 463 + private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature,int OutOrIn) {
424 BaseService baseService = SpringContextHolder.getBaseService(); 464 BaseService baseService = SpringContextHolder.getBaseService();
425 try { 465 try {
426 if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) { 466 if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) {
@@ -430,7 +470,6 @@ public class CMSServer implements ApplicationRunner { @@ -430,7 +470,6 @@ public class CMSServer implements ApplicationRunner {
430 //卡号逆转 470 //卡号逆转
431 cardNo = baseService.getCard(card); 471 cardNo = baseService.getCard(card);
432 StudentBean studentBean = userDao.getStudentWithCard(cardNo,null); 472 StudentBean studentBean = userDao.getStudentWithCard(cardNo,null);
433 - AttendanceBean attendanceBean = deviceDao.selectDevice(deviceID);  
434 if (null != studentBean) { 473 if (null != studentBean) {
435 String name = studentBean.getName(); 474 String name = studentBean.getName();
436 int schoolId = studentBean.getSchool_id(); 475 int schoolId = studentBean.getSchool_id();
@@ -441,7 +480,7 @@ public class CMSServer implements ApplicationRunner { @@ -441,7 +480,7 @@ public class CMSServer implements ApplicationRunner {
441 face_recoder.setTime(time); 480 face_recoder.setTime(time);
442 face_recoder.setName(name); 481 face_recoder.setName(name);
443 face_recoder.setUser_id(studentBean.getUser_id()); 482 face_recoder.setUser_id(studentBean.getUser_id());
444 - face_recoder.setInOrOut(attendanceBean.getOutOrIn()); 483 + face_recoder.setInOrOut(OutOrIn);
445 String imgUrl = "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId; 484 String imgUrl = "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId;
446 face_recoder.setImgurl(imgUrl); 485 face_recoder.setImgurl(imgUrl);
447 log.info("设备: {},人脸抓怕:学校id: {} ,班级:{} ,用户名:{} ,卡号:{} ,",deviceID,schoolId,className,name,cardNo); 486 log.info("设备: {},人脸抓怕:学校id: {} ,班级:{} ,用户名:{} ,卡号:{} ,",deviceID,schoolId,className,name,cardNo);
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/xiaoan/CheckIn.java 0 → 100644
@@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
  1 +package com.sincere.haikangface.bean.xiaoan;
  2 +
  3 +/**
  4 + * @author chen
  5 + * @version 1.0
  6 + * @date 2019/10/30 0030 10:26
  7 + */
  8 +public class CheckIn {
  9 +
  10 + private String deviceId ;
  11 + private String cardNo ;
  12 + private int funNo ;
  13 + private int flag ;
  14 + private String checkTime ;
  15 +
  16 + private String out;
  17 + private int isSuccess ;
  18 +
  19 + public String getDeviceId() {
  20 + return deviceId;
  21 + }
  22 +
  23 + public void setDeviceId(String deviceId) {
  24 + this.deviceId = deviceId;
  25 + }
  26 +
  27 + public String getCardNo() {
  28 + return cardNo;
  29 + }
  30 +
  31 + public void setCardNo(String cardNo) {
  32 + this.cardNo = cardNo;
  33 + }
  34 +
  35 + public int getFlag() {
  36 + return flag;
  37 + }
  38 +
  39 + public void setFlag(int flag) {
  40 + this.flag = flag;
  41 + }
  42 +
  43 + public String getCheckTime() {
  44 + return checkTime;
  45 + }
  46 +
  47 + public void setCheckTime(String checkTime) {
  48 + this.checkTime = checkTime;
  49 + }
  50 +
  51 + public String getOut() {
  52 + return out;
  53 + }
  54 +
  55 + public void setOut(String out) {
  56 + this.out = out;
  57 + }
  58 +
  59 + public int getIsSuccess() {
  60 + return isSuccess;
  61 + }
  62 +
  63 + public void setIsSuccess(int isSuccess) {
  64 + this.isSuccess = isSuccess;
  65 + }
  66 +
  67 + public int getFunNo() {
  68 + return funNo;
  69 + }
  70 +
  71 + public void setFunNo(int funNo) {
  72 + this.funNo = funNo;
  73 + }
  74 +}
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
@@ -6,6 +6,7 @@ import com.sincere.haikangface.bean.AttendanceBean; @@ -6,6 +6,7 @@ import com.sincere.haikangface.bean.AttendanceBean;
6 import com.sincere.haikangface.bean.FaceWaterRecoder; 6 import com.sincere.haikangface.bean.FaceWaterRecoder;
7 import com.sincere.haikangface.bean.PlaceAttendance; 7 import com.sincere.haikangface.bean.PlaceAttendance;
8 import com.sincere.haikangface.bean.QianDaoManager; 8 import com.sincere.haikangface.bean.QianDaoManager;
  9 +import com.sincere.haikangface.bean.xiaoan.CheckIn;
9 import org.apache.ibatis.annotations.*; 10 import org.apache.ibatis.annotations.*;
10 import org.springframework.stereotype.Repository; 11 import org.springframework.stereotype.Repository;
11 12
@@ -57,5 +58,4 @@ public interface DeviceDao { @@ -57,5 +58,4 @@ public interface DeviceDao {
57 @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}") 58 @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}")
58 List<AttendanceBean> selectDeviceWithschool_id(@Param("clint_type") String clint_type, @Param("school_id") String school_id); 59 List<AttendanceBean> selectDeviceWithschool_id(@Param("clint_type") String clint_type, @Param("school_id") String school_id);
59 60
60 -  
61 } 61 }
cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
@@ -3,6 +3,7 @@ package com.sincere.haikangface.xiananDao; @@ -3,6 +3,7 @@ package com.sincere.haikangface.xiananDao;
3 import com.sincere.haikangface.bean.AttendanceRecords; 3 import com.sincere.haikangface.bean.AttendanceRecords;
4 import com.sincere.haikangface.bean.SendRecordBean; 4 import com.sincere.haikangface.bean.SendRecordBean;
5 import com.sincere.haikangface.bean.xiaoan.AttendanceRecordsSS; 5 import com.sincere.haikangface.bean.xiaoan.AttendanceRecordsSS;
  6 +import com.sincere.haikangface.bean.xiaoan.CheckIn;
6 import com.sincere.haikangface.bean.xiaoan.CreditCardRecordsSS; 7 import com.sincere.haikangface.bean.xiaoan.CreditCardRecordsSS;
7 import org.apache.ibatis.annotations.*; 8 import org.apache.ibatis.annotations.*;
8 import org.springframework.stereotype.Repository; 9 import org.springframework.stereotype.Repository;
@@ -162,4 +163,11 @@ public interface SendRecordDao { @@ -162,4 +163,11 @@ public interface SendRecordDao {
162 163
163 @Select("select top 1000 * from Face_SendFail where schoolId = 865 ") 164 @Select("select top 1000 * from Face_SendFail where schoolId = 865 ")
164 List<SendRecordBean> getFaceFailList(); 165 List<SendRecordBean> getFaceFailList();
  166 +
  167 + /**
  168 + * 考勤推送存储过程
  169 + * @param checkIn
  170 + * @return
  171 + */
  172 + void checkIn(CheckIn checkIn);
165 } 173 }
cloud/haikangface/src/main/resources/application.yaml
@@ -3,7 +3,7 @@ server: @@ -3,7 +3,7 @@ server:
3 3
4 spring: 4 spring:
5 profiles: 5 profiles:
6 - active: prod 6 + active: dev
7 application: 7 application:
8 name: haikangserver 8 name: haikangserver
9 servlet: 9 servlet:
cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 -<mapper namespace="com.sincere.haikangface.xiananDao"> 3 +<mapper namespace="com.sincere.haikangface.xiananDao.SendRecordDao">
4 4
5 - <!--<select id="getStudentNum" resultType="String" parameterType="String">-->  
6 - <!--select student_num-->  
7 - <!--from SZ_V_School_Student-->  
8 - <!--where school_id = #{school_id}-->  
9 - <!--and studentcode = #{studentcode}-->  
10 - <!--</select>--> 5 + <resultMap id="resultMap" type="com.sincere.haikangface.bean.xiaoan.CheckIn">
  6 + <result column="arr" property="out" jdbcType="VARCHAR" />
  7 + <result column="iscuccess" property="isSuccess" jdbcType="INTEGER" />
  8 + </resultMap>
11 9
  10 + <insert id="checkIn" parameterType="com.sincere.haikangface.bean.xiaoan.CheckIn" statementType="CALLABLE">
  11 + {call AttendanceService(
  12 + #{deviceId,mode=IN},#{cardNo,mode=IN},#{funNo,mode=IN},#{flag,mode=IN},#{checkTime,mode=IN},
  13 + #{out,mode=OUT,jdbcType=VARCHAR,resultMap=resultMap},#{isSuccess,mode=OUT,jdbcType=INTEGER,resultMap=resultMap}
  14 + )}
  15 + </insert>
12 </mapper> 16 </mapper>
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <module>autho</module> 30 <module>autho</module>
31 <module>common</module> 31 <module>common</module>
32 <module>getaway</module> 32 <module>getaway</module>
33 -<!-- <module>haikang</module>--> 33 + <!--<module>haikang</module>-->
34 <module>dahua</module> 34 <module>dahua</module>
35 <!-- <module>consumer</module>--> 35 <!-- <module>consumer</module>-->
36 <module>haikangface</module> 36 <module>haikangface</module>