| @@ -5,6 +5,7 @@ import org.apache.commons.fileupload.FileItem; | |||||
| import org.apache.commons.fileupload.FileItemFactory; | import org.apache.commons.fileupload.FileItemFactory; | ||||
| import org.apache.commons.fileupload.disk.DiskFileItemFactory; | import org.apache.commons.fileupload.disk.DiskFileItemFactory; | ||||
| import org.apache.commons.fileupload.servlet.ServletFileUpload; | import org.apache.commons.fileupload.servlet.ServletFileUpload; | ||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.apache.http.Header; | import org.apache.http.Header; | ||||
| import org.apache.http.HttpEntity; | import org.apache.http.HttpEntity; | ||||
| import org.apache.http.auth.AuthScope; | import org.apache.http.auth.AuthScope; | ||||
| @@ -29,8 +30,11 @@ import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import org.springframework.web.bind.annotation.RequestMethod; | import org.springframework.web.bind.annotation.RequestMethod; | ||||
| import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
| import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject; | |||||
| import com.iformall.annotation.AuthIgnore; | import com.iformall.annotation.AuthIgnore; | ||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.haikang.HKHttpClientInstanceFactory; | import com.iformall.haikang.HKHttpClientInstanceFactory; | ||||
| import com.iformall.haikang.HKPeopleNumberFactory; | |||||
| import javax.servlet.ServletException; | import javax.servlet.ServletException; | ||||
| import javax.servlet.ServletOutputStream; | import javax.servlet.ServletOutputStream; | ||||
| @@ -59,6 +63,16 @@ public class HaiKangController { | |||||
| @Autowired | @Autowired | ||||
| HKHttpClientInstanceFactory httpFactory; | HKHttpClientInstanceFactory httpFactory; | ||||
| @Autowired | |||||
| HKPeopleNumberFactory peopleNumberFactory; | |||||
| @AuthIgnore | |||||
| @GetMapping("/getPeopleNumber") | |||||
| public ResultData getPeopleNumber() { | |||||
| return new ResultData(peopleNumberFactory.getPeopleNumber()); | |||||
| } | |||||
| /** | /** | ||||
| * 监听接口事件解析,设备监听页面设置URL为“/notify” | * 监听接口事件解析,设备监听页面设置URL为“/notify” | ||||
| * @param request | * @param request | ||||
| @@ -80,38 +94,60 @@ public class HaiKangController { | |||||
| for (FileItem fi : formData) { | for (FileItem fi : formData) { | ||||
| if (fi.isFormField()) { | if (fi.isFormField()) { | ||||
| //解析报文中json | //解析报文中json | ||||
| System.out.println("field_name:" + fi.getFieldName()); | |||||
| logger.info("field_name:" + fi.getFieldName()); | |||||
| //打印json格式上传的事件报文 | //打印json格式上传的事件报文 | ||||
| System.out.println(fi.getString("UTF-8")); | |||||
| String baowen = fi.getString("UTF-8"); | |||||
| //通过表单name属性进行解析报文 | //通过表单name属性进行解析报文 | ||||
| switch (fi.getFieldName()) { | switch (fi.getFieldName()) { | ||||
| case "event_log"://门禁、身份证事件解析 | case "event_log"://门禁、身份证事件解析 | ||||
| System.out.println("receive Acs event"); | |||||
| logger.info("receive Acs event"); | |||||
| break; | break; | ||||
| case "personQueueRealTime": | |||||
| if (StringUtils.isNotBlank(baowen)) { | |||||
| JSONObject bobj = JSONObject.parseObject(baowen); | |||||
| if (null != bobj) { | |||||
| JSONObject rtd = bobj.getJSONObject("PersonQueueRealTimeData"); | |||||
| String ip = bobj.getString("ipAddress"); | |||||
| if (null != rtd) { | |||||
| Integer peopleNum = rtd.getInteger("peopleNum"); | |||||
| if (null != peopleNum) { | |||||
| peopleNumberFactory.setPeopleNumber(ip, peopleNum); | |||||
| }else { | |||||
| logger.info("unValid response:"+baowen); | |||||
| } | |||||
| }else { | |||||
| logger.info("unValid response:"+baowen); | |||||
| } | |||||
| }else { | |||||
| logger.info("unValid response:"+baowen); | |||||
| } | |||||
| }else { | |||||
| logger.info("unValid response:"+baowen); | |||||
| } | |||||
| default: | default: | ||||
| System.out.println("unknow data"); | |||||
| logger.info("unknow data"); | |||||
| } | } | ||||
| } else { | } else { | ||||
| //保存报文中的图片数据 | //保存报文中的图片数据 | ||||
| String image_name = fi.getName(); | |||||
| logger.info("image_name:" + image_name); | |||||
| if (image_name != "") { | |||||
| //图片保存路径 | |||||
| String image_dir_path = "C:\\image\\"; | |||||
| File image_dir = new File(image_dir_path); | |||||
| if (!image_dir.exists()) { | |||||
| image_dir.mkdir(); | |||||
| } | |||||
| String file_name = UUID.randomUUID().toString(); | |||||
| String suffix = image_name.substring(fi.getName().lastIndexOf(".")); | |||||
| System.out.println("图片报文路径:" + image_dir_path); | |||||
| System.out.println("图片名称:" + file_name); | |||||
| System.out.println("图片格式:" + suffix); | |||||
| fi.write(new File(image_dir_path, file_name + suffix)); | |||||
| } else { | |||||
| throw new Exception("no file receive"); | |||||
| } | |||||
| // String image_name = fi.getName(); | |||||
| // logger.info("image_name:" + image_name); | |||||
| // if (image_name != "") { | |||||
| // //图片保存路径 | |||||
| // String image_dir_path = "C:\\image\\"; | |||||
| // | |||||
| // File image_dir = new File(image_dir_path); | |||||
| // if (!image_dir.exists()) { | |||||
| // image_dir.mkdir(); | |||||
| // } | |||||
| // String file_name = UUID.randomUUID().toString(); | |||||
| // String suffix = image_name.substring(fi.getName().lastIndexOf(".")); | |||||
| // System.out.println("图片报文路径:" + image_dir_path); | |||||
| // System.out.println("图片名称:" + file_name); | |||||
| // System.out.println("图片格式:" + suffix); | |||||
| // fi.write(new File(image_dir_path, file_name + suffix)); | |||||
| // } else { | |||||
| // throw new Exception("no file receive"); | |||||
| // } | |||||
| } | } | ||||
| } | } | ||||
| //正常接收平台响应回复 | //正常接收平台响应回复 | ||||
| @@ -43,72 +43,73 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||||
| @Override | @Override | ||||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | ||||
| logger.debug("preHandle start"); | |||||
| if ("GET".equalsIgnoreCase(request.getMethod())) { | |||||
| // 获取不检查幂等 | |||||
| logger.debug("preHandle start 1"); | |||||
| return true; | |||||
| } | |||||
| String ipaddress = IPUtil.getIpAddr(request); | |||||
| String url = request.getRequestURL().toString(); | |||||
| if (UrlCheck.checkUrl(url)) { | |||||
| // pvlog不检查幂等 | |||||
| // awsFileUpload不检查幂等 | |||||
| // stopFee | |||||
| return true; | |||||
| } | |||||
| StringBuilder sb = new StringBuilder(); | |||||
| sb.append(url); | |||||
| sb.append("method=").append(request.getMethod()).append("&"); | |||||
| sb.append("ip=").append(ipaddress).append("&"); | |||||
| final Enumeration parameterNames = request.getParameterNames(); | |||||
| while (parameterNames.hasMoreElements()) { | |||||
| String key = (String) parameterNames.nextElement(); | |||||
| if(key.equalsIgnoreCase("ran")) // 跳过ran | |||||
| continue; | |||||
| String parameter = request.getParameter(key); | |||||
| sb.append(key).append("=").append(parameter).append("&"); | |||||
| } | |||||
| InputStream inStream = request.getInputStream(); | |||||
| ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | |||||
| byte[] buffer = new byte[1024]; | |||||
| int len = 0; | |||||
| while ((len = inStream.read(buffer)) != -1) { | |||||
| outSteam.write(buffer, 0, len); | |||||
| } | |||||
| String resultBody = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||||
| inStream.close(); | |||||
| outSteam.close(); | |||||
| sb.append(resultBody); | |||||
| String key = "request:C:" + HashUtil.md5(sb.toString()); | |||||
| Boolean isAbsent = redisTemplate.<Boolean>execute(new RedisCallback<Boolean>() { | |||||
| @Override | |||||
| public Boolean doInRedis(RedisConnection connection) throws DataAccessException { | |||||
| RedisSerializer valueSerializer = redisTemplate.getValueSerializer(); | |||||
| RedisSerializer keySerializer = redisTemplate.getKeySerializer(); | |||||
| Object obj = connection.execute("set", keySerializer.serialize(key), | |||||
| valueSerializer.serialize(key), | |||||
| SafeEncoder.encode("NX"), | |||||
| SafeEncoder.encode("EX"), | |||||
| Protocol.toByteArray(3)); // 3s | |||||
| return obj != null; | |||||
| } | |||||
| }); | |||||
| if (isAbsent) { | |||||
| logger.info(key + ": 第一次提交"); | |||||
| logger.debug("preHandle start 2"); | |||||
| return true; | |||||
| } | |||||
| logger.info(key + ": 第二次提交"); | |||||
| logger.debug("preHandle start 3"); | |||||
| throw new MallinkException(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||||
| // logger.debug("preHandle start"); | |||||
| // if ("GET".equalsIgnoreCase(request.getMethod())) { | |||||
| // // 获取不检查幂等 | |||||
| // logger.debug("preHandle start 1"); | |||||
| // return true; | |||||
| // } | |||||
| // String ipaddress = IPUtil.getIpAddr(request); | |||||
| // String url = request.getRequestURL().toString(); | |||||
| // if (UrlCheck.checkUrl(url)) { | |||||
| // // pvlog不检查幂等 | |||||
| // // awsFileUpload不检查幂等 | |||||
| // // stopFee | |||||
| // return true; | |||||
| // } | |||||
| // StringBuilder sb = new StringBuilder(); | |||||
| // | |||||
| // sb.append(url); | |||||
| // | |||||
| // sb.append("method=").append(request.getMethod()).append("&"); | |||||
| // | |||||
| // sb.append("ip=").append(ipaddress).append("&"); | |||||
| // | |||||
| // final Enumeration parameterNames = request.getParameterNames(); | |||||
| // while (parameterNames.hasMoreElements()) { | |||||
| // String key = (String) parameterNames.nextElement(); | |||||
| // if(key.equalsIgnoreCase("ran")) // 跳过ran | |||||
| // continue; | |||||
| // String parameter = request.getParameter(key); | |||||
| // sb.append(key).append("=").append(parameter).append("&"); | |||||
| // } | |||||
| // | |||||
| // InputStream inStream = request.getInputStream(); | |||||
| // ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | |||||
| // byte[] buffer = new byte[1024]; | |||||
| // int len = 0; | |||||
| // while ((len = inStream.read(buffer)) != -1) { | |||||
| // outSteam.write(buffer, 0, len); | |||||
| // } | |||||
| // String resultBody = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||||
| // inStream.close(); | |||||
| // outSteam.close(); | |||||
| // | |||||
| // sb.append(resultBody); | |||||
| // | |||||
| // String key = "request:C:" + HashUtil.md5(sb.toString()); | |||||
| // Boolean isAbsent = redisTemplate.<Boolean>execute(new RedisCallback<Boolean>() { | |||||
| // @Override | |||||
| // public Boolean doInRedis(RedisConnection connection) throws DataAccessException { | |||||
| // RedisSerializer valueSerializer = redisTemplate.getValueSerializer(); | |||||
| // RedisSerializer keySerializer = redisTemplate.getKeySerializer(); | |||||
| // Object obj = connection.execute("set", keySerializer.serialize(key), | |||||
| // valueSerializer.serialize(key), | |||||
| // SafeEncoder.encode("NX"), | |||||
| // SafeEncoder.encode("EX"), | |||||
| // Protocol.toByteArray(3)); // 3s | |||||
| // return obj != null; | |||||
| // } | |||||
| // }); | |||||
| // if (isAbsent) { | |||||
| // logger.info(key + ": 第一次提交"); | |||||
| // logger.debug("preHandle start 2"); | |||||
| // return true; | |||||
| // } | |||||
| // logger.info(key + ": 第二次提交"); | |||||
| // logger.debug("preHandle start 3"); | |||||
| // throw new MallinkException(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); | |||||
| return true; | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -27,7 +27,7 @@ spring: | |||||
| # REDIS | # REDIS | ||||
| redis: | redis: | ||||
| host: 101.200.130.134 | |||||
| host: 101.200.130.135 | |||||
| port: 6379 | port: 6379 | ||||
| password: iF0rm@2l2ol9 | password: iF0rm@2l2ol9 | ||||
| timeout: 3600 | timeout: 3600 | ||||
| @@ -124,7 +124,7 @@ wechat: | |||||
| componentToken: ss | componentToken: ss | ||||
| componentAesKey: ss | componentAesKey: ss | ||||
| redis: | redis: | ||||
| host: 101.200.130.134 | |||||
| host: 101.200.130.135 | |||||
| port: 6379 | port: 6379 | ||||
| password: iF0rm@2l2ol9 | password: iF0rm@2l2ol9 | ||||
| timeout: 3600 | timeout: 3600 | ||||
| @@ -0,0 +1,44 @@ | |||||
| package com.iformall.haikang; | |||||
| import java.util.Iterator; | |||||
| import java.util.Map; | |||||
| import java.util.concurrent.ConcurrentHashMap; | |||||
| import org.apache.http.auth.AuthScope; | |||||
| import org.apache.http.auth.UsernamePasswordCredentials; | |||||
| import org.apache.http.client.CredentialsProvider; | |||||
| import org.apache.http.impl.client.BasicCredentialsProvider; | |||||
| import org.apache.http.impl.client.CloseableHttpClient; | |||||
| import org.apache.http.impl.client.HttpClients; | |||||
| import org.springframework.stereotype.Component; | |||||
| @Component | |||||
| public class HKPeopleNumberFactory { | |||||
| private Map<String,Integer> peopleCountMap; | |||||
| public void setPeopleNumber(String ip,Integer count) { | |||||
| synchronized (ip) { | |||||
| if (null == peopleCountMap) { | |||||
| peopleCountMap = new ConcurrentHashMap<String,Integer>(); | |||||
| } | |||||
| peopleCountMap.put(ip, count); | |||||
| } | |||||
| } | |||||
| public Integer getPeopleNumber() { | |||||
| if (null == peopleCountMap) { | |||||
| return 0; | |||||
| } | |||||
| Integer all = 0; | |||||
| for (Iterator<String> it = peopleCountMap.keySet().iterator();it.hasNext();) { | |||||
| String ip = it.next(); | |||||
| Integer count = peopleCountMap.get(ip); | |||||
| if (null != count ) { | |||||
| all = all + count; | |||||
| } | |||||
| } | |||||
| return all; | |||||
| } | |||||
| } | |||||