提交diamagnetic

dev
姜玉琦 2024-11-22 00:39:54 +08:00
parent 752daf1d28
commit 7c4c765124
8 changed files with 242 additions and 14 deletions

View File

@ -1,5 +1,7 @@
package com.ruoyi.api.labour.controller;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.api.base.PubTokenReqVo;
import com.ruoyi.api.labour.domain.AiBoxApiReqVo;
import com.ruoyi.common.annotation.Anonymous;
@ -16,6 +18,7 @@ import com.ruoyi.common.enums.*;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.system.domain.SysApplyConfig;
import com.ruoyi.system.service.ISysUserService;
@ -170,4 +173,27 @@ public class AiBoxApiController extends BaseController {
}
return getDataTable(list);
}
private static final String baseUrl = "http://localhost:8090/jhapi";
public static void main(String[] args) {
String appId = "jhcf17140956314490N6VSHsPjx008";
String AppSecret = "xx+UsVJ9cIJ8PTWpWU5GcNx+x+chJBQIDAQAB";
Long time = System.currentTimeMillis();
String sign = Md5Utils.hash(appId+AppSecret+time);
System.out.println(time);
System.out.println(sign);
String url = baseUrl + "/api/aiboxs/v1/getToken";
Map<String, Object> body = new HashMap<>();
body.put("appId",appId);
body.put("sign",sign);
body.put("timestamp",time);
String result = HttpUtil.post(url, body);
JSONObject jsonObject = JSONObject.parseObject(result);
if(jsonObject.getInteger("code")==200){
// 获取到存入redis设置30分钟有效期
String token = jsonObject.getString("Authorization");
}
}
}

View File

@ -52,6 +52,11 @@ public class CacheConstants
*/
public static final String YANZHU_DEVICE_TOWER = "device.tower_cfg:";
/**
* yanzhu redis key
*/
public static final String YANZHU_DEVICE_AI = "device.aibox_cfg:";
/**
* redis key
*/

View File

@ -6,6 +6,7 @@ import com.ruoyi.common.annotation.RateLimiter;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.LimitType;
import com.yanzhu.jh.video.domain.DevAiProjectDataVO;
import com.yanzhu.jh.video.domain.DevBwAiProjectDataVo;
import com.yanzhu.jh.video.service.IDevAiProjectDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -34,11 +35,11 @@ public class AIBoxController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger("AIBoxController");
/**
* aibox
* aibox
*/
@PostMapping("/v1/push")
@RateLimiter(count = 10, limitType = LimitType.IP)
public void push(@RequestBody Map<String,Object> dataMap)
public void boGuanPush(@RequestBody Map<String,Object> dataMap)
{
try{
List<Map<String,Object>> list = (List<Map<String,Object>>)dataMap.get("BehaviorResults");
@ -46,10 +47,24 @@ public class AIBoxController extends BaseController {
devAiProjectDataService.insertHttpDevAiProjectData(devAiProjectDataVO);
}catch (Exception e){
logger.info("AiBox解析参数失败");
logger.info(dataMap.toString());
e.printStackTrace();
}
}
/**
* aibox
*/
@PostMapping("/v2/push")
public void boWaPush(@RequestBody DevBwAiProjectDataVo data)
{
try{
logger.info("BOWAN...{}");
devAiProjectDataService.insertHttpBwDevAiProjectData(data);
}catch (Exception e){
logger.info("BW...AiBox解析参数失败");
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,23 @@
package com.yanzhu.jh.video.domain;
import lombok.Data;
import java.util.Map;
/**
*
*/
@Data
public class DevBwAiProjectDataVo {
private String device_sn;
private String device_version;
private String date;
private Long timestamp;
private String label;
private String alias;
private String count;
private String img;
private Map<String, Object> extend;
}

View File

@ -11,6 +11,12 @@ import com.yanzhu.jh.video.domain.DevAiProjectConfig;
*/
public interface IDevAiProjectConfigService
{
/**
*
*/
public void loadingDevAiConfigCache();
/**
*
*

View File

@ -5,6 +5,7 @@ import java.util.Map;
import com.yanzhu.jh.video.domain.DevAiProjectData;
import com.yanzhu.jh.video.domain.DevAiProjectDataVO;
import com.yanzhu.jh.video.domain.DevBwAiProjectDataVo;
/**
* Service
@ -46,6 +47,14 @@ public interface IDevAiProjectDataService
*/
public void insertHttpDevAiProjectData(DevAiProjectDataVO devAiProjectDataVO);
/**
*
*
* @param devBwAiProjectDataVo
* @return
*/
public void insertHttpBwDevAiProjectData(DevBwAiProjectDataVo devBwAiProjectDataVo);
/**
*
*

View File

@ -3,8 +3,11 @@ package com.yanzhu.jh.video.service.impl;
import java.util.Arrays;
import java.util.List;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.PublicStateEnum;
import com.ruoyi.common.utils.DateUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -15,6 +18,9 @@ import com.yanzhu.jh.video.mapper.DevAiProjectConfigMapper;
import com.yanzhu.jh.video.domain.DevAiProjectConfig;
import com.yanzhu.jh.video.service.IDevAiProjectConfigService;
import com.ruoyi.common.utils.SecurityUtils;
import javax.annotation.PostConstruct;
/**
* Service
*
@ -24,9 +30,35 @@ import com.ruoyi.common.utils.SecurityUtils;
@Service
public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService
{
@Autowired
private RedisCache redisCache;
@Autowired
private DevAiProjectConfigMapper devAiProjectConfigMapper;
/**
*
*/
@PostConstruct
public void init()
{
loadingDevAiConfigCache();
}
/**
*
*/
@Override
public void loadingDevAiConfigCache()
{
List<DevAiProjectConfig> configList = devAiProjectConfigMapper.selectDevAiProjectConfigList(new DevAiProjectConfig());
if(CollectionUtils.isNotEmpty(configList)){
for (DevAiProjectConfig devConfig : configList) {
redisCache.setCacheObject(CacheConstants.YANZHU_DEVICE_AI + devConfig.getSerialNumber(), devConfig);
}
}
}
/**
*
*
@ -71,6 +103,9 @@ public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService
devAiProjectConfig.setCreateTime(DateUtils.getNowDate());
int rows = devAiProjectConfigMapper.insertDevAiProjectConfig(devAiProjectConfig);
insertDevAiProjectConfigPassage(devAiProjectConfig);
if(rows>0){
this.loadingDevAiConfigCache();
}
return rows;
}
@ -88,7 +123,11 @@ public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService
devAiProjectConfig.setUpdateTime(DateUtils.getNowDate());
devAiProjectConfigMapper.deleteDevAiProjectConfigPassageByAiboxId(devAiProjectConfig.getId());
insertDevAiProjectConfigPassage(devAiProjectConfig);
return devAiProjectConfigMapper.updateDevAiProjectConfig(devAiProjectConfig);
int rows = devAiProjectConfigMapper.updateDevAiProjectConfig(devAiProjectConfig);
if(rows>0){
this.loadingDevAiConfigCache();
}
return rows;
}
/**
@ -102,7 +141,11 @@ public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService
public int deleteDevAiProjectConfigByIds(Long[] ids)
{
devAiProjectConfigMapper.deleteDevAiProjectConfigPassageByAiboxIds(ids);
return devAiProjectConfigMapper.deleteDevAiProjectConfigByIds(ids);
int rows = devAiProjectConfigMapper.deleteDevAiProjectConfigByIds(ids);
if(rows>0){
this.loadingDevAiConfigCache();
}
return rows;
}
/**
@ -116,7 +159,11 @@ public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService
public int deleteDevAiProjectConfigById(Long id)
{
devAiProjectConfigMapper.deleteDevAiProjectConfigPassageByAiboxId(id);
return devAiProjectConfigMapper.deleteDevAiProjectConfigById(id);
int rows = devAiProjectConfigMapper.deleteDevAiProjectConfigById(id);
if(rows>0){
this.loadingDevAiConfigCache();
}
return rows;
}
/**

View File

@ -3,14 +3,20 @@ package com.yanzhu.jh.video.service.impl;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.PublicStateEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.MultipartFileUtils;
import com.yanzhu.jh.video.domain.DevAiProjectConfig;
import com.yanzhu.jh.video.domain.DevAiProjectDataVO;
import com.yanzhu.jh.video.domain.DevBwAiProjectDataVo;
import com.yanzhu.jh.video.mapper.DevAiProjectConfigMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -32,6 +38,9 @@ public class DevAiProjectDataServiceImpl implements IDevAiProjectDataService
{
private static final Logger logger = LoggerFactory.getLogger("DevAiProjectDataServiceImpl");
@Autowired
private RedisCache redisCache;
@Autowired
private DevAiProjectDataMapper devAiProjectDataMapper;
@ -84,6 +93,11 @@ public class DevAiProjectDataServiceImpl implements IDevAiProjectDataService
@Override
public void insertHttpDevAiProjectData(DevAiProjectDataVO devAiProjectDataVO)
{
//根据设备配置查询设备绑定的项目和单位信息
DevAiProjectConfig config = redisCache.getCacheObject(CacheConstants.YANZHU_DEVICE_AI+devAiProjectDataVO.getSerialNumber());
if(Objects.isNull(config)){
throw new ServiceException("设备信息未注册...");
}
logger.info("AiBox消息解析成功开始转换实体");
DevAiProjectData devAiProjectData = new DevAiProjectData();
devAiProjectData.setDeviceId(devAiProjectDataVO.getDeviceId());
@ -150,18 +164,101 @@ public class DevAiProjectDataServiceImpl implements IDevAiProjectDataService
}
devAiProjectData.setCreateTime(DateUtils.getNowDate());
devAiProjectData.setIsDel(PublicStateEnum.OK.getCode());
//根据设备配置查询设备绑定的项目和单位信息
DevAiProjectConfig devAiProjectConfig = new DevAiProjectConfig();
devAiProjectConfig.setSerialNumber(devAiProjectData.getSerialNumber());
List<DevAiProjectConfig> devAiProjectConfigList = devAiProjectConfigMapper.selectDevAiProjectConfigList(devAiProjectConfig);
if(devAiProjectConfigList!=null && devAiProjectConfigList.size()>0){
devAiProjectData.setProjectId(devAiProjectConfigList.get(0).getProjectId());
devAiProjectData.setDeptId(devAiProjectConfigList.get(0).getDeptId());
}
devAiProjectData.setProjectId(config.getProjectId());
devAiProjectData.setDeptId(config.getDeptId());
logger.info("新增AI设备数据成功");
devAiProjectDataMapper.insertDevAiProjectData(devAiProjectData);
}
/**
*
*
* @param devBwAiProjectDataVo
* @return
*/
@Override
public void insertHttpBwDevAiProjectData(DevBwAiProjectDataVo devBwAiProjectDataVo){
//根据设备配置查询设备绑定的项目和单位信息
DevAiProjectConfig config = redisCache.getCacheObject(CacheConstants.YANZHU_DEVICE_AI+devBwAiProjectDataVo.getDevice_sn());
if(Objects.isNull(config)){
throw new ServiceException("设备信息未注册...");
}
Map<String, Object> extendMap = devBwAiProjectDataVo.getExtend();
logger.info("AiBox消息解析成功开始转换实体");
DevAiProjectData devAiProjectData = new DevAiProjectData();
devAiProjectData.setDeviceName(config.getDeviceName());
/** 设备的序列号 */
devAiProjectData.setSerialNumber(devBwAiProjectDataVo.getDevice_sn());
/** 相机的序列号 */
devAiProjectData.setIpcSerialNum(devBwAiProjectDataVo.getDevice_sn());
if(Objects.nonNull(extendMap)){
devAiProjectData.setChannelId(Convert.toLong(extendMap.get("ch")));
devAiProjectData.setChannelName(Convert.toStr(extendMap.get("source_name")));
}
/** 报警类型 */
String type = this.switchAlarmType(devBwAiProjectDataVo.getLabel());
if(!type.equals("-1")){
devAiProjectData.setAlarmType(Convert.toLong(type));
/** 采集时间 */
devAiProjectData.setTimestamp(new Date(devBwAiProjectDataVo.getTimestamp()));
logger.info("实体转换成功Base64开始转换图片");
String objImg64 = devBwAiProjectDataVo.getImg();
try {
MultipartFile file = MultipartFileUtils.base64ToMultipartFile("data:image/png;base64,"+objImg64);
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String profileFile = FileUploadUtils.upload(filePath, file);
devAiProjectData.setImageUrl(profileFile);
logger.info("Base64上传图片成功");
} catch (Exception e) {
e.printStackTrace();
}
devAiProjectData.setCreateTime(DateUtils.getNowDate());
devAiProjectData.setIsDel(PublicStateEnum.OK.getCode());
devAiProjectData.setProjectId(config.getProjectId());
devAiProjectData.setDeptId(config.getDeptId());
logger.info("新增AI设备数据成功");
devAiProjectDataMapper.insertDevAiProjectData(devAiProjectData);
}
}
/**
*
* @return
*/
private String switchAlarmType(String aliasLabel){
String alarmType;
switch (aliasLabel){
case "nohelmet" : alarmType="4";break;
case "head" : alarmType="4";break;
case "helmet" : alarmType="4";break;
case "fire" : alarmType="8";break;
case "vest" : alarmType="65";break;
case "smoke" : alarmType="7";break;
case "smoking" : alarmType="8";break;
case "calling" : alarmType="6";break;
case "face" : alarmType="face";break;
case "mask" : alarmType="mask";break;
case "garbage" : alarmType="garbage";break;
case "tricycle" : alarmType="tricycle";break;
case "person" : alarmType="person";break;
case "clothes" : alarmType="65";break;
case "down" : alarmType="62";break;
case "phone" : alarmType="6";break;
case "body" : alarmType="body";break;
case "ponding" : alarmType="ponding";break;
case "car" : alarmType="car";break;
case "bicycle" : alarmType="bicycle";break;
case "motorcycle" : alarmType="motorcycle";break;
case "bus" : alarmType="bus";break;
case "truck" : alarmType="truck";break;
case "van" : alarmType="van";break;
default : alarmType="0";
}
return alarmType;
}
/**
*
*