Commit 045d8f40 by huangjy

fix:声网相关接口

parent 6fcd2444
Showing with 263 additions and 23 deletions
ALTER TABLE `plat_device_other`
ALTER TABLE `plat_device_other`
......@@ -25,3 +25,8 @@ ALTER TABLE `sys_api_secret`
ALTER TABLE `dev_iot_yanglao_platform`.`plat_device_other`
ADD COLUMN `uuid` varchar(255) COMMENT '设备uuid' AFTER `secure_key`;
ALTER TABLE `plat_device`
ADD COLUMN `device_license` varchar(64) COMMENT '许可证' AFTER `end_date`,
ADD COLUMN `license_info` varchar(255) COMMENT '许可证信息' AFTER `license`;
\ No newline at end of file
......@@ -14,6 +14,9 @@ public class ShengwangProperties {
private String channelName;
private String account;
private String uid;
private String pid;
private String customerKey;
private String customerSecret;
private int tokenExpirationInSeconds;
private int privilegeExpirationInSeconds;
......
package com.makeit.dto.platform.alarm;
package com.makeit.shengwang.agora.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
......
package com.makeit.shengwang.agora.http;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.makeit.config.ShengwangProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@Component
public class ShengwangHttpUtil {
@Autowired
private ShengwangProperties shengwangProperties;
public String active(String licenseKey) {
String plainCredentials = shengwangProperties.getCustomerKey() + ":" + shengwangProperties.getCustomerSecret();
String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));
// 创建 authorization header
String authorizationHeader = "Basic " + base64Credentials;
Map<String,String> reqMap = new HashMap<>();
reqMap.put("pid",shengwangProperties.getPid());
reqMap.put("licenseKey",licenseKey);
reqMap.put("appid",shengwangProperties.getAppId());
String toParams = HttpUtil.toParams(reqMap);
HttpRequest httpRequest = HttpUtil.createPost("https://api.agora.io/dabiz/license/v2/active?" + toParams);
String result = httpRequest
.header("Authorization", authorizationHeader)
.execute().body();
System.out.println(result);
return result;
}
}
package com.makeit.shengwang.agora.service;
import com.alibaba.fastjson.JSON;
import com.makeit.config.ShengwangProperties;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.rtm.RtmTokenBuilder2;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;
@Component
public class ShengwangService {
public static final String REDIS_DEVICE_CALL = "device::call";
@Autowired
private ShengwangProperties shengwangProperties;
@Autowired
private StringRedisTemplate redisTemplate;
public PlatAlarmCallDeviceVO callingDeviceAuthIgnoreRtm(PlatCallingDeviceDTO dto) {
String redisResult = redisTemplate.opsForValue().get(REDIS_DEVICE_CALL + dto.getUserId());
if (StringUtils.isNotBlank(redisResult)) {
return JSON.parseObject(redisResult,PlatAlarmCallDeviceVO.class);
}
PlatAlarmCallDeviceVO platAlarmCallDeviceVO = new PlatAlarmCallDeviceVO();
RtmTokenBuilder2 token = new RtmTokenBuilder2();
String result = token.buildToken(shengwangProperties.getAppId(), shengwangProperties.getAppCertificate(), dto.getUserId(), shengwangProperties.getTokenExpirationInSeconds());
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String format = String.format("%s:%s","RTM",now.format(dateTimeFormatter));
platAlarmCallDeviceVO.setAccessToken(result);
platAlarmCallDeviceVO.setChannelName(format);
platAlarmCallDeviceVO.setAppId(shengwangProperties.getAppId());
platAlarmCallDeviceVO.setUserId(dto.getUserId());
redisTemplate.opsForValue().set(REDIS_DEVICE_CALL + dto.getUserId(),JSON.toJSONString(platAlarmCallDeviceVO),
shengwangProperties.getTokenExpirationInSeconds(), TimeUnit.SECONDS);
return platAlarmCallDeviceVO;
}
}
package com.makeit.vo.platform.alarm;
package com.makeit.shengwang.agora.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
......
package com.makeit.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import org.apache.http.client.HttpClient;
import java.net.URI;
import java.util.Base64;
public class Base64Encoding {
// 客户 ID
final String customerKey = "b3b5f44e536a4fc191358926c6716b7b";
// 客户密钥
final String customerSecret = "bd81828a133140a58dfb04e9d80eba43";
public static void main(String[] args) {
Base64Encoding base64Encoding = new Base64Encoding();
base64Encoding.test();
}
public void test () {
// 拼接客户 ID 和客户密钥并使用 base64 编码
String plainCredentials = customerKey + ":" + customerSecret;
String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));
// 创建 authorization header
String authorizationHeader = "Basic " + base64Credentials;
System.out.println(authorizationHeader);
HttpRequest httpRequest = HttpUtil.createGet("https://api.agora.io/dev/v1/projects");
// 创建 HTTP 请求对象
String result = httpRequest
.header("Authorization", authorizationHeader)
.header("Content-Type", "application/json")
.execute().body();
// 发送 HTTP 请求
System.out.println(result);
}
}
......@@ -7,11 +7,11 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.dto.platform.alarm.PlatCallingDeviceDTO;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.vo.platform.alarm.PlatAlarmCallDeviceVO;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......
......@@ -17,7 +17,8 @@ import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.vo.DeviceProperties;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.task.IotSyncTask;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceViewVO;
import io.swagger.annotations.Api;
......@@ -106,5 +107,23 @@ public class PlatDeviceController {
platDeviceService.batchEditProperties(dto);
return ApiResponseUtils.success();
}
@ApiOperation("激活设备license")
@PostMapping("active")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity active(@RequestBody BaseIdDTO dto) {
platDeviceService.active(dto);
return ApiResponseUtils.success();
}
@ApiOperation("设备获取登录RTMtoken")
@PostMapping("getDeviceRtmToken")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<PlatAlarmCallDeviceVO> getDeviceRtmToken(@RequestBody PlatCallingDeviceDTO dto) {
return ApiResponseUtils.success(platDeviceService.getDeviceRtmToken(dto));
}
}
......@@ -73,6 +73,10 @@ public class PlatDevice extends BaseBusEntity {
@ApiModelProperty(value = "组织路径")
private String orgPath;
@ApiModelProperty(value = "许可证")
private String deviceLicense;
@ApiModelProperty(value = "许可证信息")
private String licenseInfo;
@ApiModelProperty(value = "设备类型 0-呼吸心率雷达 1-空间人体雷达 2-跌倒检测雷达")
private String category;
......
......@@ -6,11 +6,11 @@ import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.dto.platform.alarm.PlatCallingDeviceDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.vo.platform.alarm.PlatAlarmCallDeviceVO;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
/**
......
......@@ -16,7 +16,6 @@ import com.makeit.common.page.PageVO;
import com.makeit.config.ShengwangProperties;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.dto.platform.alarm.PlatCallingDeviceDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatOrg;
......@@ -43,8 +42,11 @@ import com.makeit.service.platform.space.PlatRegionSettingService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.media.RtcTokenBuilder2;
import com.makeit.shengwang.agora.rtm.RtmTokenBuilder2;
import com.makeit.shengwang.agora.service.ShengwangService;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
......@@ -55,7 +57,6 @@ import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.user.common.CommonUserUtil;
import com.makeit.utils.user.common.CommonUserVO;
import com.makeit.utils.user.wechat.WechatUserUtil;
import com.makeit.vo.platform.alarm.PlatAlarmCallDeviceVO;
import com.makeit.vo.platform.alarm.PlatAlarmRecordVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
......@@ -83,7 +84,6 @@ import java.util.stream.Collectors;
public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMapper, PlatAlarmRecord>
implements PlatAlarmRecordService {
public static final String REDIS_DEVICE_CALL = "device::call";
@Autowired
private PlatAlarmConfigService platAlarmConfigService;
......@@ -113,7 +113,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Autowired
private ShengwangProperties shengwangProperties;
@Autowired
private StringRedisTemplate redisTemplate;
private ShengwangService shengwangService;
@Override
......@@ -594,7 +594,6 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
String deviceId = platAlarmRecord.getDeviceId();
PlatDevice platDevice = platDeviceService.getById(deviceId);
platAlarmCallDeviceVO.setDeviceId(platDevice.getOriDeviceId());
platAlarmCallDeviceVO.setUserId(dto.getUserId());
platAlarmCallDeviceVO.setAppId(shengwangProperties.getAppId());
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
......@@ -609,14 +608,6 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Override
public PlatAlarmCallDeviceVO callingDeviceAuthIgnoreRtm(PlatCallingDeviceDTO dto) {
PlatAlarmCallDeviceVO platAlarmCallDeviceVO = new PlatAlarmCallDeviceVO();
RtmTokenBuilder2 token = new RtmTokenBuilder2();
String result = token.buildToken(shengwangProperties.getAppId(), shengwangProperties.getAppCertificate(), dto.getUserId(), shengwangProperties.getTokenExpirationInSeconds());
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String format = String.format("%s:%s","RTM",now.format(dateTimeFormatter));
platAlarmCallDeviceVO.setAccessToken(result);
platAlarmCallDeviceVO.setChannelName(format);
return platAlarmCallDeviceVO;
return shengwangService.callingDeviceAuthIgnoreRtm(dto);
}
}
......@@ -2,6 +2,7 @@ package com.makeit.service.platform.device;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
......@@ -10,6 +11,8 @@ import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.*;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.module.iot.vo.DeviceProperties;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.vo.platform.device.PlatChildDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceViewVO;
......@@ -79,4 +82,8 @@ public interface PlatDeviceService extends IService<PlatDevice> {
void modifyWifiInfo(PlatDeviceSetupDTO dto);
void bindOrg(PlatDeviceBindOrgDTO platDeviceBindOrgDTO);
void active(BaseIdDTO dto);
PlatAlarmCallDeviceVO getDeviceRtmToken(PlatCallingDeviceDTO dto);
}
......@@ -9,17 +9,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.dto.BaseTenantDTO;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.*;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.*;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatRole;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.device.PlatDeviceOther;
import com.makeit.entity.platform.elder.PlatElder;
......@@ -51,6 +52,10 @@ import com.makeit.service.platform.space.PlatRegionSettingService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO;
import com.makeit.shengwang.agora.http.ShengwangHttpUtil;
import com.makeit.shengwang.agora.service.ShengwangService;
import com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO;
import com.makeit.utils.DeviceCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.JsonUtil;
......@@ -60,6 +65,7 @@ import com.makeit.utils.old.StringUtils;
import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.vo.platform.device.PlatChildDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceActiveVO;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.device.PlatDeviceViewVO;
import lombok.Data;
......@@ -114,6 +120,10 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
private SysDictionaryCategoryService sysDictionaryCategoryService;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Autowired
private ShengwangHttpUtil shengwangHttpUtil;
@Autowired
private ShengwangService shengwangService;
@Override
public PageVO<PlatDeviceListVO> page(PageReqDTO<PlatDeviceQueryDTO> pageReqDTO) {
......@@ -721,4 +731,34 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
.set(PlatDevice::getOrgId,dto.getOrgId())
.in(CollectionUtils.isNotEmpty(dto.getIdList()),BaseEntity::getId,dto.getIdList()));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void active(BaseIdDTO dto) {
PlatDevice platDevice = getById(dto.getId());
String active = shengwangHttpUtil.active(platDevice.getOriDeviceId());
ApiResponseEntity responseEntity = JSON.parseObject(active, ApiResponseEntity.class);
if (responseEntity.getCode() != 200) {
throw new RuntimeException(responseEntity.getMessage());
}
Object data = responseEntity.getData();
if (data != null) {
PlatDeviceActiveVO platDeviceActiveVO = JSON.parseObject(data.toString(), PlatDeviceActiveVO.class);
platDevice.setDeviceLicense(platDeviceActiveVO.getLicense());
platDevice.setLicenseInfo(JSON.toJSONString(platDeviceActiveVO.getSkuView()));
updateById(platDevice);
// 调用设备写入接口
Map<String, Object> map = new HashMap<>();
map.put("license",platDeviceActiveVO.getLicense());
devicePropertiesOperateService.deviceWriteAttr(platDevice.getOriDeviceId(),map);
}
}
@Override
public PlatAlarmCallDeviceVO getDeviceRtmToken(PlatCallingDeviceDTO dto) {
return shengwangService.callingDeviceAuthIgnoreRtm(dto);
}
}
package com.makeit.vo.platform.device;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* <p>
* 设备
* </p>
*
* @author eugene young
* @since 2023-09-05
*/
@Data
@ApiModel(value = "设备激活许可", description = "设备激活许可")
public class PlatDeviceActiveVO {
private String license;
private SkuView skuView;
@Data
public static class SkuView {
private Integer product;
private Integer minutes;
private Integer mediaType;
private String name;
private String period;
}
}
......@@ -156,6 +156,9 @@ shengwang:
uid: 0
tokenExpirationInSeconds: 3600
privilegeExpirationInSeconds: 3600
customerKey: b3b5f44e536a4fc191358926c6716b7b
customerSecret: bd81828a133140a58dfb04e9d80eba43
pid: 9851781E9E31453DA3C572A4A4AF9402
......
......@@ -153,4 +153,7 @@ shengwang:
uid: 0
tokenExpirationInSeconds: 3600
privilegeExpirationInSeconds: 3600
customerKey: b3b5f44e536a4fc191358926c6716b7b
customerSecret: bd81828a133140a58dfb04e9d80eba43
pid: 9851781E9E31453DA3C572A4A4AF9402
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment