提交diamagnetic
parent
752daf1d28
commit
7c4c765124
|
@ -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");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -11,6 +11,12 @@ import com.yanzhu.jh.video.domain.DevAiProjectConfig;
|
|||
*/
|
||||
public interface IDevAiProjectConfigService
|
||||
{
|
||||
|
||||
/**
|
||||
* 加载注册设备
|
||||
*/
|
||||
public void loadingDevAiConfigCache();
|
||||
|
||||
/**
|
||||
* 查询设备配置
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 修改设备数据
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改设备数据
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue