From de21279e53db06924d85c41fe3c78593785e0a1a Mon Sep 17 00:00:00 2001 From: qiuyc <1026314800@qq.com> Date: Tue, 10 Nov 2020 16:47:45 +0800 Subject: [PATCH] 增加获取设备指纹 --- cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 171 insertions(+), 20 deletions(-) diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java index 1395d26..cd1f99e 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java @@ -8,12 +8,16 @@ import com.sincere.att.feign.XaFeign; import com.sincere.att.logs.LogName; import com.sincere.att.logs.LoggerUtils; import com.sincere.att.vo.AttendanceInfoBean; +import com.sincere.att.vo.CheckOrderVo; import com.sincere.att.vo.FingerOrderVo; import com.sincere.att.vo.UserOrderVo; import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; import com.sincere.common.dto.xiaoan.FingerDto; import com.sincere.common.util.DateUtils; import com.sincere.common.util.HttpClientUtils; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +32,7 @@ import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; /** * 所有的设备请求都会在url参数里携带SN,这是设备序列号(serial number的缩写),每个设备唯一标识 @@ -52,8 +57,125 @@ public class AttPushController { @Autowired XaFeign xaFeign; + @RequestMapping(value = "GetDeviceCmd", method = RequestMethod.GET) + @ApiOperation(value = "查询待处理指令") + @ApiImplicitParams({@ApiImplicitParam(name = "schoolId", value = "学校id"), + @ApiImplicitParam(name = "deviceId", value = "设备id")}) + public String GetDeviceCmd(@RequestParam("schoolId") String schoolId, + @RequestParam("deviceId") String deviceId) { + try { + if(schoolId=="1221") + { + + } + if(StringUtils.isNotBlank(deviceId)){ + List cmds = cmdMap.get(deviceId); + if (cmds != null && cmds.size() > 0) { + return cmds.toString(); + } + return "cmd is empty"; + } + else{ + return "device not is null"; + } + } catch (Exception e) { + return e.getMessage(); + } + } + + //C:${CmdID}:Check 检查并传送新数据 + @RequestMapping(value = "GetLatestData", method = RequestMethod.GET) + @ApiOperation(value = "检查并上传新数据") + @ApiImplicitParams({@ApiImplicitParam(name = "schoolId", value = "学校id"), + @ApiImplicitParam(name = "deviceId", value = "设备id")}) + public void GetLatestData(@RequestParam("schoolId") String schoolId, + @RequestParam("deviceId") String deviceId) { + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String date=simpleDateFormat.format(new Date()); + List order = new ArrayList<>(); + CheckOrderVo vo = new CheckOrderVo(); + vo.setStudentName(deviceId+date); + int number = 1; + try { + number = cmdOrderMap.get(deviceId); + } catch (Exception e) { + + } + number++; + cmdOrderMap.put(deviceId, number); + + if (!order.contains(vo.toString())) { + order.add(vo.toString()); + } + + cmdMap.put(deviceId, order); + + } + + @RequestMapping(value = "sendSingleUser", method = RequestMethod.GET) + @ApiOperation(value = "下发单个用户") + @ApiImplicitParams({@ApiImplicitParam(name = "schoolId", value = "学校id"), + @ApiImplicitParam(name = "deviceId", value = "设备id"), + @ApiImplicitParam(name = "studentId", value = "学生id")}) + public void sendSingleUser(@RequestParam("schoolId") String schoolId, + @RequestParam("deviceId") String deviceId, + @RequestParam("studentId") int studentId) { +// String result1 = HttpClientUtils.httpGet2("http://campus.myjxt.com/api/EasyN/GetStudentDetail?studentid="+studentId+"&schoolId="+schoolId); + JSONObject result = HttpClientUtils.httpGet("http://campus.myjxt.com/api/EasyN/GetStudentDetail?studentid="+studentId+"&schoolId="+schoolId); + JSONObject array = (JSONObject) result.get("data"); + List order = new ArrayList<>(); + UserOrderVo vo = new UserOrderVo(); + vo.setStudentId((Integer) array.get("studentId")); + vo.setStudentName((String) array.get("studentName")); + int number = 1; + try { + number = cmdOrderMap.get(deviceId); + } catch (Exception e) { + + } + vo.setNumber(number); + number++; + cmdOrderMap.put(deviceId, number); + if (vo.getStudentId() != 0) { +// if (vo.getStudentId() == 72196){ + //todo:测试专用 + if (!order.contains(vo.toString())) { + order.add(vo.toString()); + } +// } + } + cmdMap.put(deviceId, order); + + } + + @RequestMapping(value = "sendSingleFinger", method = RequestMethod.GET) + public void sendSingleFinger(@RequestParam("StudentId") int StudentId,@RequestParam(value = "deviceId") String deviceId) { + + List order = new ArrayList<>(); +// for (int i = 0; i < array.size(); i++) { +// JSONObject student = (JSONObject) array.get(i); + FingerOrderVo vo = new FingerOrderVo(); + int number = 1; + try { + number = cmdOrderMap.get(deviceId); + } catch (Exception e) { + + } + vo.setNumber(number); + vo.setOrder(xaFeign.selectFinger((Integer) StudentId)); + number++; + cmdOrderMap.put(deviceId, number); + if (StringUtils.isNotBlank(vo.getOrder())) { + order.add(vo.toString()); + } + //} + cmdMap.put(deviceId, order); + //} + } + @RequestMapping(value = "sendUser", method = RequestMethod.GET) - public void sendUser(int roomId) { + public void sendUser(@RequestParam("roomId") int roomId) { JSONObject object = new JSONObject(); object.put("pageIndex", 1); object.put("roomId", roomId); @@ -91,7 +213,7 @@ public class AttPushController { } @RequestMapping(value = "sendFinger", method = RequestMethod.GET) - public void sendFinger(int roomId) { + public void sendFinger(@RequestParam("roomId") int roomId,@RequestParam(value = "deviceId",required = false) String deviceId) { JSONObject object = new JSONObject(); object.put("PageIndex", 1); object.put("roomId", roomId); @@ -100,6 +222,7 @@ public class AttPushController { JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList"); List attendanceList = scFeign.selectRoomAttendance(roomId); for (String attendance : attendanceList) { + if(StringUtils.isNotBlank(deviceId)&&!attendance.contains(deviceId)) continue; List order = new ArrayList<>(); for (int i = 0; i < array.size(); i++) { JSONObject student = (JSONObject) array.get(i); @@ -127,13 +250,15 @@ public class AttPushController { * 格式为 /iclock/cdata?options=all&language=xxxx&pushver=xxxx */ @RequestMapping(value = "/cdata", params = {"options", "language", "pushver"}, method = RequestMethod.GET) - public void init(String SN, String options, String language, String pushver, HttpServletRequest request, - @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response) { + public void init(String SN,String options,String language,String pushver,HttpServletRequest request, + @RequestParam(required = false) String PushOptionsFlag, + HttpServletResponse response) { try { + System.out.println("设备上电:" + SN); if (cmdMap.get(SN) == null) { System.out.println("设备上线:" + SN); cmdMap.put(SN, new ArrayList<>()); - cmdOrderMap.put(SN, 1); + cmdOrderMap.put(SN, 10000); } if (scFeign.selectAttendaceWithId(SN) == null) { SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto(); @@ -162,6 +287,7 @@ public class AttPushController { public void heartBeat(String SN, HttpServletResponse response) { scFeign.updateAttendance(SN); StringBuffer sb = new StringBuffer("OK"); + //System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"设备心跳:" + SN); List cmds = cmdMap.get(SN); // if (null != cmds && cmds.size() > 10) // cmds = cmds.subList(0, 10); @@ -169,7 +295,7 @@ public class AttPushController { System.out.println("设备上线:" + SN); cmds = new ArrayList<>(); cmdMap.put(SN, cmds); - cmdOrderMap.put(SN, 1); + cmdOrderMap.put(SN, 10000); } if (cmds != null && cmds.size() > 0) { sb.setLength(0);//如果有命令就不返回OK了 @@ -205,24 +331,36 @@ public class AttPushController { @RequestMapping("/devicecmd") public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response) { //判断data 清空map + //ID=10000&Return=-10&CMD=DATA 指纹下发返回return=-10,表示指纹机没有这个用户数据 List cmdList = cmdMap.get(SN); String[] returnList = data.split("\n"); if (returnList != null && returnList.length > 0 && cmdList != null && cmdList.size() > 0) { System.out.println("----returnList:" + returnList.length); for (String message : returnList) { + System.out.println("----returnList:"+ SN + "," + message); String number = message.substring(message.indexOf("=") + 1, message.indexOf("&")); String result = message.substring(message.indexOf("=", message.indexOf("&")) + 1, message.indexOf("&", message.indexOf("&") + 1)); - if (result.equals("0")) { + //if (result.equals("0")) { Iterator it = cmdList.iterator(); while (((Iterator) it).hasNext()) { String b = it.next(); if (b.contains("C:" + number)) { it.remove(); - System.out.println("----设备接收数据成功:" + SN + "----number:" + number); + + System.out.println("----设备接收数据"+(Integer.parseInt(result)==0?"成功":"--失败--")+":" + SN + "----number:" + number); } } - } + if(message.contains("CMD=DATA")) + { + + } + if(message.contains("CMD=CHECK")) + { + + } + //} } + } try { response.getWriter().write("OK"); @@ -270,26 +408,39 @@ public class AttPushController { String jsonResult = JSON.toJSONString(attendanceInfoBean); String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY"; JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult); - if ((int) jsonObject.get("status") == 1) { + //if ((int) jsonObject.get("status") == 1) { + if ( Integer.parseInt(jsonObject.get("data").toString()) == 0) { Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); } else { - Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); + Log_kaoInfo.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); } } else { - System.out.println(cardNo); + System.out.println(list[0]+":card is "+cardNo); } } if ("OPERLOG".equals(table)) { + //操作日志 if (data.substring(0, 3).contains("FP")) { - //添加指纹 - String studentId = data.substring(data.indexOf("=") + 1, data.indexOf("\t", data.indexOf("="))); - String order = data.substring(3); - FingerDto fingerDto = new FingerDto(); - fingerDto.setOrderMsg(order); - fingerDto.setStudentId(Integer.valueOf(studentId)); - fingerDto.setCreateTime(new Date()); - xaFeign.insertFinger(fingerDto); + String[] finger = data.split("FP "); + for (int j = 0; j < finger.length; j++) { + String fingerInfo = finger[j]; + if(org.springframework.util.StringUtils.isEmpty(fingerInfo)) continue; + + //添加指纹 + String studentId = fingerInfo .substring(fingerInfo .indexOf("=") + 1, fingerInfo .indexOf("\t", fingerInfo .indexOf("="))); +// String order = data.substring(3); + String ret= xaFeign.selectFinger(Integer.parseInt(studentId)); + if(!org.springframework.util.StringUtils.isEmpty(ret)) continue; + + //String order = data; + FingerDto fingerDto = new FingerDto(); + fingerDto.setOrderMsg(fingerInfo); + fingerDto.setStudentId(Integer.valueOf(studentId)); + fingerDto.setCreateTime(new Date()); + xaFeign.insertFinger(fingerDto); + + } } } try { -- libgit2 0.21.0