Commit 623099fe3b1eefc4c587adbb1038f01e833caba4

Authored by 徐泉
1 parent c28016fb
Exists in master

大华设备对接艺校考勤

cloud/dahua/src/main/java/com/example/dahua/MyTask.java
1 1 package com.example.dahua;
2 2  
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONObject;
3 5 import com.example.dahua.bean.*;
4 6 import com.example.dahua.dao.UserDao;
5 7 import com.example.dahua.enums.EnumDeviceType;
... ... @@ -25,8 +27,15 @@ import lombok.extern.slf4j.Slf4j;
25 27 import org.springframework.beans.factory.annotation.Autowired;
26 28 import org.springframework.boot.ApplicationArguments;
27 29 import org.springframework.boot.ApplicationRunner;
  30 +import org.springframework.http.HttpEntity;
  31 +import org.springframework.http.HttpHeaders;
  32 +import org.springframework.http.MediaType;
  33 +import org.springframework.http.ResponseEntity;
28 34 import org.springframework.stereotype.Component;
  35 +import org.springframework.util.LinkedMultiValueMap;
  36 +import org.springframework.util.MultiValueMap;
29 37 import org.springframework.util.StringUtils;
  38 +import org.springframework.web.client.RestTemplate;
30 39  
31 40 import javax.annotation.PostConstruct;
32 41 import javax.imageio.ImageIO;
... ... @@ -38,6 +47,7 @@ import java.io.UnsupportedEncodingException;
38 47 import java.text.SimpleDateFormat;
39 48 import java.util.*;
40 49 import java.util.concurrent.CopyOnWriteArrayList;
  50 +import java.util.stream.Collectors;
41 51  
42 52 @Component
43 53 @Slf4j
... ... @@ -388,7 +398,6 @@ public class MyTask implements ApplicationRunner {
388 398 if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) {
389 399 return -1;
390 400 }
391   -
392 401 byte[] bufferBytes = new byte[dwBufSize];
393 402 pBuffer.read(0, bufferBytes, 0, dwBufSize);
394 403 File path = new File(".\\FaceRecoder");
... ... @@ -399,14 +408,6 @@ public class MyTask implements ApplicationRunner {
399 408 CDevInfo data = new CDevInfo();
400 409 ToolKits.GetPointerData(dwUser, data);
401 410 String szSn = new String(data.szSN).trim();
402   -// if(dwAlarmType == NetSDKLib.EVENT_IVS_FACERECOGNITION){
403   -//// ToolKits.GetPointerData(pAlarmInfo, msg);
404   -//// //卡号
405   -//// String card = new String(msg.szCardNo).trim();
406   -//// //开门用户
407   -//// String userId = new String(msg.szUID).trim();
408   -//// log.info("你来了。。。。");
409   -// }
410 411 ///< 门禁事件
411 412 if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
412 413 NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
... ... @@ -423,66 +424,70 @@ public class MyTask implements ApplicationRunner {
423 424 saveAttendanceService(szSn,"",0,1);
424 425 try {
425 426 if (!StringUtils.isEmpty(card)) {
426   - // 保存图片,获取图片缓存
427   - // 图片服务器路径
428   - String snapPicPath = path + "\\" + System.currentTimeMillis() + ".png";
  427 + //根据卡号获取卡身份信息
  428 + CardBean cardBean = myTaskUtil.userDao.getCards(card);
  429 + if(cardBean ==null){
  430 + card = cardNo(card);
  431 + cardBean = myTaskUtil.userDao.getCards(card);
  432 + }
  433 + if(cardBean ==null){
  434 + return -1;
  435 + }
  436 +
  437 + // 缓存抓拍人脸
  438 + String fileName = StringUtils.isEmpty(userId)? card + ".png" : userId + ".png";
  439 + String snapPicPath = path + "\\" + fileName;
429 440 byte[] buffer = pBuffer.getByteArray(0, dwBufSize);
430 441 ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer);
431 442 gateBufferedImage = ImageIO.read(byteArrInputGlobal);
432 443 if (gateBufferedImage != null) {
433 444 ImageIO.write(gateBufferedImage, "png", new File(snapPicPath));
434 445 }
435   - int schoolId=0;
436   - int outOrIn =0;
437   - AttendanceBean attendanceBean = myTaskUtil.userDao.getTypeByClint_id(szSn);
438   - if(attendanceBean !=null){
439   - if(org.apache.commons.lang.StringUtils.isNotBlank(attendanceBean.getSchool_id())){
440   - schoolId=Integer.parseInt(attendanceBean.getSchool_id());
441   - outOrIn= StringUtils.isEmpty(attendanceBean.getOutOrIn())?0:Integer.parseInt(attendanceBean.getOutOrIn());
442   - }
443   - }
444   - /**
445   - * 卡号取反(大写)
446   - * 注:若设备为一体机、且非"126上虞城东小学、393上虞实验中学"学校,卡则取反
447   - */
448   - if(szSn.startsWith("ytj")&&schoolId!=126&&schoolId!=393){
449   - card = card;
450   - } else{
451   - card = cardNo(card);
452   - }
453   - //根据卡号获取卡身份信息
454   - CardBean cardBean = myTaskUtil.userDao.getCards(card);
455   - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
456 446 snapPicPath = snapPicPath.replaceFirst("\\.", "http://121.40.109.21:8991");
457 447 snapPicPath = snapPicPath.replace("FaceRecoder", "image");
458   - if (null != cardBean && cardBean.getType() == 0) {
459   - //老师人脸信息,保存人脸记录表
460   - TeacherBean teacherBean = myTaskUtil.userDao.getTeacherWithId(cardBean.getUser_id());
461   - myTaskUtil.sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath,outOrIn,
462   - time, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"");
463   - } else if (null != cardBean && cardBean.getType() == 2) {
464   - //学生人脸信息,保存人脸记录表
465   - UserInfoBean userInfoBean = myTaskUtil.userDao.getStudentWithid(cardBean.getUser_id());
466   - myTaskUtil.sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath,outOrIn,
467   - time, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"");
468   - }
469   - if(szSn.startsWith("ytj")) {
470   - //门禁进出类型:1进0出
471   - int eventType = EnumSzBusinessType.EnumDeviceInAndOut.INT.code;
472   - if(StringUtils.isEmpty(attendanceBean.getOutOrIn())){
473   - eventType = EnumSzBusinessType.EnumDeviceInAndOut.INT.code;
474   - }
475   - if(Integer.parseInt(attendanceBean.getOutOrIn()) != EnumSzBusinessType.EnumDeviceInAndOut.INT.code){
476   - eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code;
  448 + //关联设备信息
  449 + AttendanceBean attendanceBean = myTaskUtil.userDao.getTypeByClint_id(szSn);
  450 + if(attendanceBean !=null){
  451 + if(StringUtils.isEmpty(attendanceBean.getSchool_id())){
  452 + int schoolId = Integer.parseInt(attendanceBean.getSchool_id());
  453 + //门禁进出类型:1进0出
  454 + int eventType = 0;
  455 + if(StringUtils.isEmpty(attendanceBean.getOutOrIn())){
  456 + eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code;
  457 + }else{
  458 + eventType = Integer.parseInt(attendanceBean.getOutOrIn());
  459 + }
  460 + //刷卡时间
  461 + String eventTime = DateUtils.date2String(new Date(), DateUtils.format2);
  462 + //老师
  463 + if (cardBean.getType() == 0) {
  464 + //老师人脸信息,保存人脸记录表
  465 + TeacherBean teacherBean = myTaskUtil.userDao.getTeacherWithId(cardBean.getUser_id());
  466 + myTaskUtil.sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath,eventType,
  467 + eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"");
  468 + }
  469 + UserInfoBean userInfoBean = null;
  470 + if (cardBean.getType() == 2) {
  471 + //学生人脸信息,保存人脸记录表
  472 + userInfoBean = myTaskUtil.userDao.getStudentWithid(cardBean.getUser_id());
  473 + myTaskUtil.sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath,eventType,
  474 + eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"");
  475 + }
  476 +
  477 + // TODO 考勤记录
  478 + //刷卡结果,1表示成功, 0表示失败
  479 + int status = msg.bStatus;
  480 +
  481 + if(szSn.startsWith("ytj")) {
  482 + //保存考勤记录
  483 + kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle);
  484 + // 艺校考勤
  485 + if(schoolId ==12 && status ==1){
  486 + int intOrOut = eventType ==1? 1 : 2;
  487 + sendRecordToSXYX(userInfoBean.getName(),userInfoBean.getUser_id(),intOrOut,eventTime);
  488 + }
  489 + }
477 490 }
478   - // TODO 考勤记录
479   - //刷卡结果,1表示成功, 0表示失败
480   - int status = msg.bStatus;
481   - //刷卡时间
482   - String eventTime = DateUtils.date2String(new Date(), DateUtils.format2);
483   -
484   - //保存考勤记录
485   - kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle);
486 491 }
487 492 }
488 493 } catch (IOException e2) {
... ... @@ -765,6 +770,25 @@ public class MyTask implements ApplicationRunner {
765 770 return true;
766 771 }
767 772  
  773 + public static void sendRecordToSXYX(String name,String userId,int intOrOut,String eventTime) {
  774 + try {
  775 + String api = "http://yixiao.198.hmkj.com.cn/index.php/Attend/send";
  776 + RestTemplate restTemplate = new RestTemplate();
  777 + MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
  778 + map.add("name", name);
  779 + map.add("xuehao", userId);
  780 + map.add("time", eventTime);
  781 + map.add("state", intOrOut);
  782 + HttpHeaders headers = new HttpHeaders();
  783 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  784 + HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
  785 + ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class);
  786 + String body = response.getBody();
  787 + System.out.println(body);
  788 + } catch (Exception e) {
  789 + sendRecordToSXYX(name,userId,intOrOut,eventTime);
  790 + }
  791 + }
768 792 }
769 793  
770 794  
... ...
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
... ... @@ -2,9 +2,10 @@ package com.example.dahua.control;
2 2  
3 3 import com.example.dahua.MyTask;
4 4 import com.example.dahua.async.SendUserInfoTask;
5   -import com.example.dahua.bean.PermissionBean;
6   -import com.example.dahua.bean.SendRecordBean;
7   -import com.example.dahua.bean.StudentBean;
  5 +import com.example.dahua.bean.*;
  6 +import com.example.dahua.bean.yx.Result;
  7 +import com.example.dahua.bean.yx.ResultGenerator;
  8 +import com.example.dahua.bean.yx.StudentInfo;
8 9 import com.example.dahua.dao.UserDao;
9 10 import com.example.dahua.enums.EnumSzBusinessType;
10 11 import com.example.dahua.lib.CompressPic;
... ... @@ -13,6 +14,7 @@ import com.example.dahua.service.UserService;
13 14 import com.example.dahua.service.imp.BaseService;
14 15 import com.example.dahua.utils.*;
15 16 import com.example.dahua.xiananDao.SendRecordDao;
  17 +import com.google.gson.Gson;
16 18 import io.swagger.annotations.Api;
17 19 import io.swagger.annotations.ApiImplicitParam;
18 20 import io.swagger.annotations.ApiImplicitParams;
... ... @@ -21,7 +23,13 @@ import lombok.extern.slf4j.Slf4j;
21 23 import org.json.JSONException;
22 24 import org.json.JSONObject;
23 25 import org.springframework.beans.factory.annotation.Autowired;
  26 +import org.springframework.http.HttpEntity;
  27 +import org.springframework.http.HttpHeaders;
24 28 import org.springframework.http.MediaType;
  29 +import org.springframework.http.ResponseEntity;
  30 +import org.springframework.util.CollectionUtils;
  31 +import org.springframework.util.LinkedMultiValueMap;
  32 +import org.springframework.util.MultiValueMap;
25 33 import org.springframework.util.StringUtils;
26 34 import org.springframework.web.bind.annotation.*;
27 35 import org.springframework.web.client.RestTemplate;
... ... @@ -455,4 +463,63 @@ public class UserControl {
455 463 }
456 464 }
457 465  
  466 + @RequestMapping(value = "getStudent", method = RequestMethod.GET)
  467 + @ApiOperation("艺校对账查询")
  468 + @ResponseBody
  469 + public Result queryStudent(@RequestHeader("code") String code) {
  470 + if(StringUtils.isEmpty(code) || !code.equals("sxyx")){
  471 + return ResultGenerator.genFailResult("请求标识匹配错误");
  472 + }
  473 + List<UserInfoBean> students = userService.getStudent(12);
  474 + if(CollectionUtils.isEmpty(students)){
  475 + return ResultGenerator.genSuccessResult();
  476 + }
  477 + StudentInfo info = new StudentInfo();
  478 + List<StudentInfo.Student> studentList = new ArrayList<>();
  479 + students.stream().distinct().forEach(s->{
  480 + StudentInfo.Student student = new StudentInfo.Student();
  481 + student.setUserName(s.getName());
  482 + student.setStudentCode(s.getUser_id());
  483 + studentList.add(student);
  484 + });
  485 + info.setTotal(students.size());
  486 + info.setStudentList(studentList);
  487 + return ResultGenerator.genSuccessResult(new Gson().toJson(info));
  488 + }
  489 +
  490 + @RequestMapping(value = "syncStudent", method = RequestMethod.GET)
  491 + @ApiOperation("艺校对账新增")
  492 + @ResponseBody
  493 + public Result syncStudent(@RequestParam("userId") String userId) {
  494 + if(StringUtils.isEmpty(userId)){
  495 + return ResultGenerator.genFailResult("参数为空");
  496 + }
  497 + UserInfoBean student = userService.getStudentByUserId(userId);
  498 + if(student ==null){
  499 + return ResultGenerator.genFailResult("此学生不存在");
  500 + }
  501 + sendRecordToSXYX(student.getName(),userId);
  502 + return ResultGenerator.genSuccessResult();
  503 + }
  504 +
  505 + public static String sendRecordToSXYX(String name,String userId) {
  506 + String result = "";
  507 + try {
  508 + String api = "http://yixiao.198.hmkj.com.cn/index.php/Attend/student";
  509 + RestTemplate restTemplate = new RestTemplate();
  510 + MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
  511 + map.add("name", name);
  512 + map.add("xuehao", userId);
  513 + HttpHeaders headers = new HttpHeaders();
  514 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  515 + HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
  516 + ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class);
  517 + result = response.getBody();
  518 + System.out.println(result);
  519 + } catch (Exception e) {
  520 + sendRecordToSXYX(name,userId);
  521 + }
  522 + return result;
  523 + }
  524 +
458 525 }
... ...
cloud/dahua/src/main/java/com/example/dahua/control/sxyx/SxyxOaControl.java 0 → 100644
... ... @@ -0,0 +1,95 @@
  1 +package com.example.dahua.control.sxyx;
  2 +
  3 +import com.example.dahua.bean.UserInfoBean;
  4 +import com.example.dahua.bean.yx.Result;
  5 +import com.example.dahua.bean.yx.ResultGenerator;
  6 +import com.example.dahua.bean.yx.StudentInfo;
  7 +import com.example.dahua.service.UserService;
  8 +import com.google.gson.Gson;
  9 +import io.swagger.annotations.Api;
  10 +import io.swagger.annotations.ApiOperation;
  11 +import lombok.extern.slf4j.Slf4j;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.http.HttpEntity;
  14 +import org.springframework.http.HttpHeaders;
  15 +import org.springframework.http.MediaType;
  16 +import org.springframework.http.ResponseEntity;
  17 +import org.springframework.util.CollectionUtils;
  18 +import org.springframework.util.LinkedMultiValueMap;
  19 +import org.springframework.util.MultiValueMap;
  20 +import org.springframework.util.StringUtils;
  21 +import org.springframework.web.bind.annotation.*;
  22 +import org.springframework.web.client.RestTemplate;
  23 +
  24 +import java.util.ArrayList;
  25 +import java.util.List;
  26 +
  27 +@Slf4j
  28 +@RestController
  29 +@Api(tags = "绍兴艺校对外接口")
  30 +@RequestMapping("/sxyx/student")
  31 +public class SxyxOaControl {
  32 +
  33 + @Autowired
  34 + UserService userService;
  35 +
  36 + @RequestMapping(value = "/getStudent", method = RequestMethod.GET)
  37 + @ApiOperation("艺校对账查询")
  38 + @ResponseBody
  39 + public Result queryStudent(@RequestHeader("code") String code) {
  40 + if(StringUtils.isEmpty(code) || !code.equals("sxyx")){
  41 + return ResultGenerator.genFailResult("请求标识匹配错误");
  42 + }
  43 + List<UserInfoBean> students = userService.getStudent(12);
  44 + if(CollectionUtils.isEmpty(students)){
  45 + return ResultGenerator.genSuccessResult();
  46 + }
  47 + StudentInfo info = new StudentInfo();
  48 + List<StudentInfo.Student> studentList = new ArrayList<>();
  49 + students.stream().distinct().forEach(s->{
  50 + StudentInfo.Student student = new StudentInfo.Student();
  51 + student.setUserName(s.getName());
  52 + student.setStudentCode(s.getUser_id());
  53 + studentList.add(student);
  54 + });
  55 + info.setTotal(students.size());
  56 + info.setStudentList(studentList);
  57 + return ResultGenerator.genSuccessResult(new Gson().toJson(info));
  58 + }
  59 +
  60 + @RequestMapping(value = "/syncStudent", method = RequestMethod.GET)
  61 + @ApiOperation("艺校对账新增")
  62 + @ResponseBody
  63 + public Result syncStudent(@RequestParam("userId") String userId) {
  64 + if(StringUtils.isEmpty(userId)){
  65 + return ResultGenerator.genFailResult("参数为空");
  66 + }
  67 + UserInfoBean student = userService.getStudentByUserId(userId);
  68 + if(student ==null){
  69 + return ResultGenerator.genFailResult("此学生不存在");
  70 + }
  71 + sendRecordToSXYX(student.getName(),userId);
  72 + return ResultGenerator.genSuccessResult();
  73 + }
  74 +
  75 + public static String sendRecordToSXYX(String name,String userId) {
  76 + String result = "";
  77 + try {
  78 + String api = "http://yixiao.198.hmkj.com.cn/index.php/Attend/student";
  79 + RestTemplate restTemplate = new RestTemplate();
  80 + MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
  81 + map.add("name", name);
  82 + map.add("xuehao", userId);
  83 + HttpHeaders headers = new HttpHeaders();
  84 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  85 + HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
  86 + ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class);
  87 + result = response.getBody();
  88 + System.out.println(result);
  89 + } catch (Exception e) {
  90 + sendRecordToSXYX(name,userId);
  91 + }
  92 + return result;
  93 + }
  94 +
  95 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
... ... @@ -94,12 +94,18 @@ public interface UserDao {
94 94 @Select(" select top 1* from SZ_V_School_Student where student_id = #{student_id}")
95 95 UserInfoBean getStudentWithid(@Param("student_id") String student_id);
96 96  
  97 + @Select(" select top 1* from SZ_V_School_Student where user_id = #{userId}")
  98 + UserInfoBean getStudentByUserId(@Param("userId") String userId);
  99 +
97 100 @Select(" select * from SZ_V_School_Student where student_num = #{student_num} and name = #{name}")
98 101 UserInfoBean getStudent(@Param("student_num") String student_num, @Param("name") String name);
99 102  
100 103 @Select(" select * from SZ_V_School_Student where school_id = #{school_id} and sex = #{sex} and student_type = #{student_type}")
101 104 List<UserInfoBean> getStudentWithSchoolId(@Param("school_id") String school_id, @Param("sex") String sex, @Param("student_type") String student_type);
102 105  
  106 + @Select(" select * from SZ_V_School_Student where school_id = #{school_id}")
  107 + List<UserInfoBean> getStudentBySchoolId(@Param("school_id") Integer school_id);
  108 +
103 109 @Select("select * from SZ_V_School_Student where school_id = 479 and student_type = 2")
104 110 List<UserInfoBean> getUsers();
105 111  
... ...
cloud/dahua/src/main/java/com/example/dahua/service/UserService.java
... ... @@ -67,4 +67,8 @@ public interface UserService {
67 67 * @param url
68 68 */
69 69 void test(String url);
  70 +
  71 + List<UserInfoBean> getStudent(Integer schoolId);
  72 +
  73 + UserInfoBean getStudentByUserId(String userId);
70 74 }
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java
... ... @@ -182,4 +182,14 @@ public class UserServiceImp implements UserService {
182 182 }
183 183 }
184 184 }
  185 +
  186 + @Override
  187 + public List<UserInfoBean> getStudent(Integer schoolId) {
  188 + return userDao.getStudentBySchoolId(schoolId);
  189 + }
  190 +
  191 + @Override
  192 + public UserInfoBean getStudentByUserId(String userId) {
  193 + return userDao.getStudentByUserId(userId);
  194 + }
185 195 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java
... ... @@ -145,4 +145,13 @@ public class UserOperateController {
145 145 @RequestParam(value = "deviceIds",required = false) String deviceIds){
146 146 return userOperateService.deleteFaceBySchoolId(schoolId,deviceIds);
147 147 }
  148 +
  149 +
  150 + public static void main(String[] args) {
  151 + String photo = "http://campus.myjxt.com//f0i5l7e5/0/alluser/20171008/aa26754eb6f24fceb8881d50ee37cdf3.jpg";
  152 + //以学籍号为名的文件名
  153 + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length());
  154 + System.out.println(fileName);
  155 + System.out.println(fileName.split(".")[0]);
  156 + }
148 157 }
... ...