From a8e4a5d65f90aa8219053654e3a85904b51101ba Mon Sep 17 00:00:00 2001 From: winter <664946893@qq.com> Date: Fri, 17 Jan 2025 20:11:46 +0800 Subject: [PATCH] fix --- .../controller/HaiKangController.java | 82 ++++++++--- .../interceptor/RequestInterceptor.java | 133 +++++++++--------- .../src/main/resources/application-dev.yml | 4 +- .../haikang/HKPeopleNumberFactory.java | 44 ++++++ 4 files changed, 172 insertions(+), 91 deletions(-) create mode 100644 bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java diff --git a/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java b/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java index f9360f5..8389041 100644 --- a/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java +++ b/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java @@ -5,6 +5,7 @@ import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.HttpEntity; 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.RestController; +import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject; import com.iformall.annotation.AuthIgnore; +import com.iformall.common.ResultData; import com.iformall.haikang.HKHttpClientInstanceFactory; +import com.iformall.haikang.HKPeopleNumberFactory; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; @@ -59,6 +63,16 @@ public class HaiKangController { @Autowired HKHttpClientInstanceFactory httpFactory; + + @Autowired + HKPeopleNumberFactory peopleNumberFactory; + + @AuthIgnore + @GetMapping("/getPeopleNumber") + public ResultData getPeopleNumber() { + return new ResultData(peopleNumberFactory.getPeopleNumber()); + } + /** * 监听接口事件解析,设备监听页面设置URL为“/notify” * @param request @@ -80,38 +94,60 @@ public class HaiKangController { for (FileItem fi : formData) { if (fi.isFormField()) { //解析报文中json - System.out.println("field_name:" + fi.getFieldName()); + logger.info("field_name:" + fi.getFieldName()); //打印json格式上传的事件报文 - System.out.println(fi.getString("UTF-8")); + String baowen = fi.getString("UTF-8"); //通过表单name属性进行解析报文 switch (fi.getFieldName()) { case "event_log"://门禁、身份证事件解析 - System.out.println("receive Acs event"); + logger.info("receive Acs event"); 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: - System.out.println("unknow data"); + logger.info("unknow data"); } } 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"); +// } } } //正常接收平台响应回复 diff --git a/bjairCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/bjairCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index 9163385..01ce952 100644 --- a/bjairCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/bjairCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -43,72 +43,73 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { @Override 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.execute(new RedisCallback() { - @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.execute(new RedisCallback() { +// @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 diff --git a/bjairCApi/src/main/resources/application-dev.yml b/bjairCApi/src/main/resources/application-dev.yml index f954aa6..28d268a 100644 --- a/bjairCApi/src/main/resources/application-dev.yml +++ b/bjairCApi/src/main/resources/application-dev.yml @@ -27,7 +27,7 @@ spring: # REDIS redis: - host: 101.200.130.134 + host: 101.200.130.135 port: 6379 password: iF0rm@2l2ol9 timeout: 3600 @@ -124,7 +124,7 @@ wechat: componentToken: ss componentAesKey: ss redis: - host: 101.200.130.134 + host: 101.200.130.135 port: 6379 password: iF0rm@2l2ol9 timeout: 3600 diff --git a/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java new file mode 100644 index 0000000..c61fc1a --- /dev/null +++ b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java @@ -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 peopleCountMap; + + public void setPeopleNumber(String ip,Integer count) { + synchronized (ip) { + if (null == peopleCountMap) { + peopleCountMap = new ConcurrentHashMap(); + } + peopleCountMap.put(ip, count); + } + } + + public Integer getPeopleNumber() { + if (null == peopleCountMap) { + return 0; + } + Integer all = 0; + for (Iterator it = peopleCountMap.keySet().iterator();it.hasNext();) { + String ip = it.next(); + Integer count = peopleCountMap.get(ip); + if (null != count ) { + all = all + count; + } + } + return all; + } + +}