智能识别

This commit is contained in:
cwchen 2024-08-28 10:47:52 +08:00
parent a218d59449
commit e78fb79d76
6 changed files with 88 additions and 22 deletions

View File

@ -1,12 +1,14 @@
package com.bonus.common.core.utils;
import cn.hutool.core.codec.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* @authorcwchen
* @date2024-06-11 17:53-10:10
@ -17,6 +19,7 @@ public class BASE64DecodedMultipartFile implements MultipartFile {
private final byte[] imgContent;
private final String header;
private final static String IMG_PREFIX = "data:image/jpeg;base64,";
public BASE64DecodedMultipartFile(byte[] imgContent, String header) {
this.imgContent = imgContent;
@ -84,6 +87,42 @@ public class BASE64DecodedMultipartFile implements MultipartFile {
}
}
public static MultipartFile base64ToMultipart2(String base64) {
try {
if (StringUtils.isEmpty(base64)) {
return null;
}
String[] baseStrs = base64.split(",");
if (baseStrs.length == 1) {
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = new byte[0];
b = decoder.decodeBuffer(baseStrs[0]);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new BASE64DecodedMultipartFile(b, IMG_PREFIX);
} else if (baseStrs.length == 2) {
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = new byte[0];
b = decoder.decodeBuffer(baseStrs[1]);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new BASE64DecodedMultipartFile(b, baseStrs[0]);
}
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static String getBase64(String path) {
File file = new File(path);

View File

@ -15,6 +15,7 @@ import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.RequestPath;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
@ -23,6 +24,8 @@ import reactor.core.publisher.Flux;
import java.lang.reflect.Field;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
@ -39,6 +42,13 @@ public class AecDecryptParamFilter extends AbstractGatewayFilterFactory {
public final static String HEARD_NAME="decrypt";
/**忽略加密的参数的请求*/
public static List<String> ignoreUrls = new ArrayList<>();
{
ignoreUrls.add("/tcp/ball/xmlAnalysis");
}
@Override
public GatewayFilter apply(Object config) {
return (exchange, chain) -> {
@ -47,6 +57,11 @@ public class AecDecryptParamFilter extends AbstractGatewayFilterFactory {
if(StringUtils.isNotEmpty(head)&& HEARD_NAME.equals(head)){
return chain.filter(exchange);
}
String reqPath = serverHttpRequest.getURI().getPath();
boolean sf = ignoreUrls.contains(reqPath);
if(sf){
return chain.filter(exchange);
}
if(!jaData){
return chain.filter(exchange);
}

View File

@ -27,6 +27,8 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -47,13 +49,24 @@ public class ResponseEncryptFilter implements GlobalFilter, Ordered {
*/
public final static String KEY_HEAD="decrypt";
/**忽略加密的参数的请求*/
public static List<String> ignoreUrls = new ArrayList<>();
{
ignoreUrls.add("/tcp/ball/xmlAnalysis");
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("============================ResponseEncryptFilter start===================================");
ServerHttpRequest request = exchange.getRequest();
URI uri = request.getURI();
String reqPath = request.getURI().getPath();
boolean sf = ignoreUrls.contains(reqPath);
if(sf){
return chain.filter(exchange);
}
HttpHeaders headers=request.getHeaders();
if(headers!=null){
Object object=headers.getFirst("Content-Type");

View File

@ -100,7 +100,7 @@ public class SmartIdentifyController {
eventTime = DateTimeHelper.stampToDate(element.attributeValue("Time"));
}
Iterator desc2Interator = element.elementIterator("Desc2");
if(desc2Interator != null){
if (desc2Interator != null) {
Element idCardEle = (Element) desc2Interator.next();
idCard = idCardEle.attributeValue("IDCard");
}
@ -112,6 +112,7 @@ public class SmartIdentifyController {
// 十分钟内存在该事件直接返回
Object cacheObject = redisService.getCacheObject(evenID + "_" + puid);
if (Objects.nonNull(cacheObject)) {
log.info("十分钟内存在该事件");
return "error";
}
Iterator resInterator = headEle.elementIterator("Res");
@ -127,11 +128,11 @@ public class SmartIdentifyController {
}
//存在该设备
if (existence) {
switchEvent(evenID, element, eventTime, puid, ballName,idCard, devices);
switchEvent(evenID, element, eventTime, puid, ballName, idCard, devices);
// 事件推送成功后设置缓存
String key = evenID + "_" + puid;
log.info("redis-key:{}",key);
redisService.setCacheObject(key, puid, 100L, TimeUnit.MILLISECONDS);
log.info("redis-key:{}", key);
redisService.setCacheObject(key, puid, 10L, TimeUnit.MINUTES);
} else {
return "error";
}
@ -156,42 +157,36 @@ public class SmartIdentifyController {
return "ok";
}
private void switchEvent(String eventId, Element element, String eventTime, String puid, String ballName,String idCard, List<DeviceUseVo> devices) {
private void switchEvent(String eventId, Element element, String eventTime, String puid, String ballName, String idCard, List<DeviceUseVo> devices) {
List<MultipartFile> files = null;
DeviceUseVo deviceUseVo = devices.get(0);
deviceUseVo.setWarnTime(eventTime);
deviceUseVo.setIdCard(idCard);
switch (eventId) {
case "E_IVS_FaceRecognition":
log.info(puid + ":违章事件:人脸识别");
deviceUseVo.setWarnContent("未戴安全帽");
files = deviceVolEvenHandler(puid, eventTime, element);
// service.addEventData(deviceUseVo, files);
break;
case "E_IVS_HelmetNotWear":
log.info(puid + ":违章事件:未戴安全帽");
deviceUseVo.setWarnContent("未戴安全帽");
files = deviceVolEvenHandler(puid, eventTime, element);
// service.addEventData(deviceUseVo, files);
files = deviceVolEvenHandler(element);
service.addEventData(deviceUseVo, files);
break;
case "E_IVS_Smoking":
log.info(puid + ":违章事件:吸烟行为");
deviceUseVo.setWarnContent("吸烟行为");
files = deviceVolEvenHandler(puid, eventTime, element);
// service.addEventData(deviceUseVo, files);
files = deviceVolEvenHandler(element);
service.addEventData(deviceUseVo, files);
break;
case "E_IVS_NotWear3ColorVest":
log.info(puid + ":违章事件:未穿马甲");
deviceUseVo.setWarnContent("未穿马甲");
files = deviceVolEvenHandler(puid, eventTime, element);
// service.addEventData(deviceUseVo, files);
files = deviceVolEvenHandler(element);
service.addEventData(deviceUseVo, files);
break;
default:
break;
}
}
private List<MultipartFile> deviceVolEvenHandler(String puid, String volTime, Element element) {
private List<MultipartFile> deviceVolEvenHandler(Element element) {
List<MultipartFile> multipartFiles = new ArrayList<>();
Iterator silcesInterator = element.elementIterator("Slices");
if (silcesInterator.hasNext()) {
@ -206,8 +201,10 @@ public class SmartIdentifyController {
Element TestEle = (Element) snapshotInterator.next();
String photoBase64 = TestEle.getText();
log.info("base64地址{}", photoBase64);
// MultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart(photoBase64);
// multipartFiles.add(multipartFile);
MultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart2(photoBase64);
if (multipartFile != null) {
multipartFiles.add(multipartFile);
}
}
}
}

View File

@ -101,7 +101,7 @@ public class SmartIdentifyServiceImpl implements SmartIdentifyService {
R<Boolean> r = null;
try {
r = remoteSourceService.addFileSource(fileVo, SecurityConstants.INNER);
if (!r.getData()) {
if (r.getData()) {
// 资源文件保存失败删除文件
remoteFileService.delFile(item.getString("fileId"), SecurityConstants.INNER);
return null;

View File

@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null">user_id,</if>
<if test="warnContent != null and warnContent!=''">warn_content,</if>
<if test="warnTime != null and warnTime!=''">warn_time,</if>
<if test="warnType != null">warn_type,</if>
<if test="devType != null">dev_type,</if>
<if test="peopleType != null">people_type,</if>
create_time,
@ -26,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null">#{userId},</if>
<if test="warnContent != null and warnContent!=''">#{warnContent},</if>
<if test="warnTime != null and warnTime!=''">#{warnTime},</if>
<if test="warnType != null">#{warnType},</if>
<if test="devType != null">#{devType},</if>
<if test="peopleType != null">#{peopleType},</if>
#{createTime},