From 70c1b5df02fdcd86d5f51095ed1f463a13ffb63d Mon Sep 17 00:00:00 2001 From: ChenJevon <504987307@qq.com> Date: Thu, 20 Aug 2020 08:38:02 +0800 Subject: [PATCH] 1 --- cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java | 3 +-- cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------- 2 files changed, 130 insertions(+), 103 deletions(-) diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java index 519d530..1767fc3 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java @@ -19,10 +19,9 @@ public class Swagger2 { public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) - .enableUrlTemplating(true) .select() // 扫描所有有注解的api,用这种方式更灵活 - .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + .apis(RequestHandlerSelectors.basePackage("com.sincere.att.controller")) .paths(PathSelectors.any()) .build(); 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 ae68193..6e330c0 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 @@ -14,12 +14,9 @@ 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.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -35,7 +32,7 @@ import java.util.*; /** * 所有的设备请求都会在url参数里携带SN,这是设备序列号(serial number的缩写),每个设备唯一标识 */ -@Controller +@RestController @RequestMapping("/iclock") public class AttPushController { private static final Logger Log_orderFail = LoggerUtils.Logger(LogName.orderFail); @@ -43,80 +40,80 @@ public class AttPushController { private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo); private static Map> cmdMap = new HashMap<>(); - private static Map cmdOrderMap = new HashMap<>(); + private static Map cmdOrderMap = new HashMap<>(); - private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f"; - private static String account = "yueqingzhijiao"; + private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f" ; + private static String account = "yueqingzhijiao" ; @Autowired ScFeign scFeign; @Autowired - XaFeign xaFeign; + XaFeign xaFeign ; - @RequestMapping(value = "sendUser/{roomId}", method = RequestMethod.GET) - public void sendUser(@PathVariable int roomId) { + @RequestMapping(value = "sendUser" , method = RequestMethod.GET) + public void sendUser(int roomId){ JSONObject object = new JSONObject(); - object.put("PageIndex", 1); - object.put("roomId", roomId); - object.put("pageSize", 9999); - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString()); - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList"); + object.put("pageIndex",1); + object.put("roomId",roomId); + object.put("pageSize",9999); + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString()); + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ; List order = new ArrayList<>(); List attendanceList = scFeign.selectRoomAttendance(roomId); - for (String attendance : attendanceList) { - for (int i = 0; i < array.size(); i++) { + for(String attendance : attendanceList){ + for(int i = 0 ; i < array.size() ; i++){ JSONObject student = (JSONObject) array.get(i); UserOrderVo vo = new UserOrderVo(); vo.setStudentId((Integer) student.get("studentid")); vo.setStudentName((String) student.get("name")); - int number = 1; - try { - number = cmdOrderMap.get(attendance); - } catch (Exception e) { + int number = 1 ; + try{ + number = cmdOrderMap.get(attendance) ; + }catch (Exception e){ } vo.setNumber(number); - number++; - cmdOrderMap.put(attendance, number); - if (vo.getStudentId() != 0) { + number++ ; + cmdOrderMap.put(attendance,number) ; + if(vo.getStudentId() != 0){ order.add(vo.toString()); } } - cmdMap.put(attendance, order); + cmdMap.put(attendance,order); } } - @RequestMapping(value = "sendFinger/{roomId}", method = RequestMethod.GET) - public void sendFinger(@PathVariable int roomId) { + @RequestMapping(value = "sendFinger" , method = RequestMethod.GET) + public void sendFinger(int roomId){ JSONObject object = new JSONObject(); - object.put("PageIndex", 1); - object.put("roomId", roomId); - object.put("pageSize", 9999); - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString()); - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList"); + object.put("PageIndex",1); + object.put("roomId",roomId); + object.put("pageSize",9999); + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString()); + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ; List order = new ArrayList<>(); List attendanceList = scFeign.selectRoomAttendance(roomId); - for (String attendance : attendanceList) { - for (int i = 0; i < array.size(); i++) { + for(String attendance : attendanceList){ + 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(attendance); - } catch (Exception e) { + int number = 1 ; + try{ + number = cmdOrderMap.get(attendance) ; + }catch (Exception e){ } vo.setNumber(number); - vo.setOrder(xaFeign.selectFinger((Integer) student.get("studentid"))); - number++; - cmdOrderMap.put(attendance, number); - if (StringUtils.isNotBlank(vo.getOrder())) { + vo.setOrder(xaFeign.selectFinger((Integer)student.get("studentid"))); + number++ ; + cmdOrderMap.put(attendance,number) ; + if(StringUtils.isNotBlank(vo.getOrder())){ order.add(vo.toString()); } } - cmdMap.put(attendance, order); + cmdMap.put(attendance,order); } } @@ -124,28 +121,29 @@ public class AttPushController { * 1,设备通完电以后第一个发送到后台的请求 * 格式为 /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) { + @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){ try { - if (cmdMap.get(SN) == null) { - cmdMap.put(SN, new ArrayList<>()); - cmdOrderMap.put(SN, 1); + if(cmdMap.get(SN) == null){ + System.out.println("设备上线:" + SN); + cmdMap.put(SN,new ArrayList<>()); + cmdOrderMap.put(SN,1); } - if (scFeign.selectAttendaceWithId(SN) == null) { + if(scFeign.selectAttendaceWithId(SN) == null){ SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto(); attendanceDto.setClint_id(SN); attendanceDto.setClint_type("24"); attendanceDto.setIp(request.getRemoteAddr()); attendanceDto.setPort(request.getRemotePort()); - attendanceDto.setIntime(DateUtils.date2String(new Date(), DateUtils.format2)); + attendanceDto.setIntime(DateUtils.date2String(new Date(),DateUtils.format2)); attendanceDto.setSchool_id("-1"); attendanceDto.setState(1); scFeign.insertAttendance(attendanceDto); - } else { + }else { scFeign.updateAttendance(SN); } - String initOptions = initOptions(SN, PushOptionsFlag); + String initOptions = initOptions(SN,PushOptionsFlag); response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求 } catch (IOException e) { e.printStackTrace(); @@ -156,18 +154,19 @@ public class AttPushController { * 2,心跳请求,会从服务器拿到命令返回 给设备 */ @RequestMapping("/getrequest") - public void heartBeat(String SN, HttpServletResponse response) { + public void heartBeat(String SN, HttpServletResponse response){ scFeign.updateAttendance(SN); StringBuffer sb = new StringBuffer("OK"); - List cmds = cmdMap.get(SN); - if (cmds == null) {//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0 + List cmds = cmdMap.get(SN); + if(cmds==null){//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0 + System.out.println("设备上线:" + SN); cmds = new ArrayList<>(); - cmdMap.put(SN, cmds); - cmdOrderMap.put(SN, 1); + cmdMap.put(SN,cmds); + cmdOrderMap.put(SN,1); } - if (cmds != null && cmds.size() > 0) { - sb.setLength(0);//如果有命令就不返回OK了 - cmds.stream().forEach(cmd -> sb.append(cmd).append("\r\n\r\n")); + if(cmds!=null&&cmds.size()>0){ + sb.setLength(0);//如果有命令就不返回OK了 + cmds.stream().forEach(cmd->sb.append(cmd).append("\r\n\r\n")); } try { @@ -184,8 +183,8 @@ public class AttPushController { * 这个请求,服务器只能返回OK,不可以返回命令 */ @RequestMapping("/ping") - public void ping(HttpServletResponse response) { - System.out.println("考勤机心跳请求大量进来了......ping" + new SimpleDateFormat("HH:mm:ss").format(new Date())); + public void ping(HttpServletResponse response){ + System.out.println("考勤机心跳请求大量进来了......ping"+new SimpleDateFormat("HH:mm:ss").format(new Date())); try { response.getWriter().write("OK"); } catch (IOException e) { @@ -197,20 +196,20 @@ public class AttPushController { * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果 */ @RequestMapping("/devicecmd") - public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response) { + public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response){ //判断data 清空map List cmdList = cmdMap.get(SN); String[] returnList = data.split("\n"); - if (returnList.length > 0 && cmdList.size() > 0) { - for (String message : returnList) { - 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(returnList.length > 0 && cmdList.size() > 0){ + for(String message : returnList){ + 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")){ Iterator it = cmdList.iterator(); while (((Iterator) it).hasNext()) { String b = it.next(); - if (b.contains("C:" + number)) { - Log_orderSuccess.info("指令成功==========" + b); + if (b.contains("C:"+number)) { + Log_orderSuccess.info("指令成功=========="+b); it.remove(); } } @@ -233,46 +232,50 @@ public class AttPushController { request.setCharacterEncoding("gbk"); String data = ""; ByteArrayOutputStream bos = null; - byte[] b = new byte[1024]; + byte[] b= new byte[1024]; try { InputStream is = request.getInputStream(); bos = new ByteArrayOutputStream(); int len = 0; - while ((len = is.read(b)) != -1) { - bos.write(b, 0, len); + while((len=is.read(b))!=-1){ + bos.write(b,0,len); } - data = new String(bos.toByteArray(), "gbk"); + data = new String(bos.toByteArray(),"gbk"); } catch (IOException e) { e.printStackTrace(); } - if ("ATTLOG".equals(table)) { + if("ATTLOG".equals(table)){ String[] list = data.split("\t"); String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0])); - cardNo = new BigInteger(cardNo, 16).toString(); - //考勤日志 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String info = String.format("", - simpleDateFormat.format(new Date()), SN, cardNo, list[1], "-1"); - AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean(); - attendanceInfoBean.setInfo(info); - attendanceInfoBean.setIsControl(0); - attendanceInfoBean.setPwd(pwd); - attendanceInfoBean.setUsername(account); + if(StringUtils.isNotBlank(cardNo)){ + String cardNo10 = new BigInteger(cardNo, 16).toString(); + //考勤日志 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String info = String.format("", + simpleDateFormat.format(new Date()), SN, cardNo10, list[1], "-1"); + AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean(); + attendanceInfoBean.setInfo(info); + attendanceInfoBean.setIsControl(0); + attendanceInfoBean.setPwd(pwd); + attendanceInfoBean.setUsername(account); - 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) { - Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); - } else { - Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); + 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){ + Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); + }else { + Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); + } + }else { + System.out.println(cardNo); } } - if ("OPERLOG".equals(table)) { + if("OPERLOG".equals(table)){ //操作日志 - if (data.substring(0, 3).contains("FP")) { + if(data.substring(0,3).contains("FP")){ //添加指纹 - String studentId = data.substring(data.indexOf("=") + 1, data.indexOf("\t", data.indexOf("="))); + String studentId = data.substring(data.indexOf("=")+1,data.indexOf("\t",data.indexOf("="))); String order = data.substring(3); FingerDto fingerDto = new FingerDto(); fingerDto.setOrderMsg(order); @@ -288,16 +291,40 @@ public class AttPushController { } } + public static void main(String[] args){ + String cardNo = "FF013E0F" ; + String SN = "A4JS174260624" ; + String cardNo10 = new BigInteger(cardNo, 16).toString(); + //考勤日志 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String info = String.format("", + simpleDateFormat.format(new Date()), SN, cardNo10, DateUtils.date2String(new Date(),DateUtils.format2), "-1"); + AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean(); + attendanceInfoBean.setInfo(info); + attendanceInfoBean.setIsControl(0); + attendanceInfoBean.setPwd(pwd); + attendanceInfoBean.setUsername(account); + + 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){ + Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); + }else { + Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); + } + } + + /** * 设备通电以后连接到服务器,需要返回的初始化参数 - * * @param sn * @param PushOptionsFlag * @return */ - private String initOptions(String sn, String PushOptionsFlag) { + private String initOptions(String sn,String PushOptionsFlag) { StringBuffer devOptions = new StringBuffer(); - devOptions.append("GET OPTION FROM: " + sn); + devOptions.append("GET OPTION FROM: "+sn); // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp") devOptions.append("\nATTLOGStamp=0"); devOptions.append("\nOPERLOGStamp=0"); @@ -321,8 +348,9 @@ public class AttPushController { // 11 工作号码 // 12 比对照片 devOptions.append("\nTransFlag=111111111111");// 1-12二进制位 分别代表以上含义 - System.out.println("PushOptionsFlag=============" + PushOptionsFlag); - if (PushOptionsFlag != null && PushOptionsFlag.equals("1")) { + System.out.println("PushOptionsFlag============="+PushOptionsFlag); + if (PushOptionsFlag!=null&&PushOptionsFlag.equals("1")) + { // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926 devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56"); } -- libgit2 0.21.0