围栏进出记录
This commit is contained in:
@ -2,6 +2,7 @@ package com.fuyuanshen.equipment.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
@ -60,6 +61,13 @@ public class DeviceFenceAccessRecordVo implements Serializable {
|
||||
@ExcelProperty(value = "设备名称")
|
||||
private String deviceName;
|
||||
|
||||
/**
|
||||
* 事件时间
|
||||
*/
|
||||
@ExcelProperty(value = "事件时间")
|
||||
@ColumnWidth(120)
|
||||
private String eventTime;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
@ -76,27 +84,21 @@ public class DeviceFenceAccessRecordVo implements Serializable {
|
||||
/**
|
||||
* 纬度
|
||||
*/
|
||||
@ExcelProperty(value = "纬度")
|
||||
// @ExcelProperty(value = "纬度")
|
||||
private Double latitude;
|
||||
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
@ExcelProperty(value = "经度")
|
||||
// @ExcelProperty(value = "经度")
|
||||
private Double longitude;
|
||||
|
||||
/**
|
||||
* 定位精度
|
||||
*/
|
||||
@ExcelProperty(value = "定位精度")
|
||||
// @ExcelProperty(value = "定位精度")
|
||||
private Long accuracy;
|
||||
|
||||
/**
|
||||
* 事件时间
|
||||
*/
|
||||
@ExcelProperty(value = "事件时间")
|
||||
private Date eventTime;
|
||||
|
||||
/**
|
||||
* 事件地址
|
||||
*/
|
||||
@ -109,5 +111,4 @@ public class DeviceFenceAccessRecordVo implements Serializable {
|
||||
@ExcelProperty(value = "记录创建时间")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -28,17 +28,19 @@ public interface DeviceFenceAccessRecordMapper extends BaseMapperPlus<DeviceFenc
|
||||
*/
|
||||
Page<DeviceFenceAccessRecordVo> selectVoPageWithFenceAndDeviceName(Page<DeviceFenceAccessRecord> page, @Param(Constants.WRAPPER) Wrapper<DeviceFenceAccessRecord> wrapper);
|
||||
|
||||
List<DeviceFenceAccessRecordVo> selectVoPageWithFenceAndDeviceName(@Param(Constants.WRAPPER) Wrapper<DeviceFenceAccessRecord> wrapper,@Param("fenceName") String fenceName);
|
||||
List<DeviceFenceAccessRecordVo> selectVoPageWithFenceAndDeviceName(@Param(Constants.WRAPPER) Wrapper<DeviceFenceAccessRecord> wrapper, @Param("fenceName") String fenceName);
|
||||
|
||||
/**
|
||||
* 分页查询围栏进出记录列表(纯XML形式)
|
||||
*
|
||||
* @param page 分页参数
|
||||
* @param bo 查询条件
|
||||
* @param bo 查询条件
|
||||
* @return 围栏进出记录分页列表
|
||||
*/
|
||||
Page<DeviceFenceAccessRecordVo> selectVoPageByXml(Page<DeviceFenceAccessRecord> page, @Param("bo") DeviceFenceAccessRecordBo bo);
|
||||
|
||||
List<DeviceFenceAccessRecordVo> selectVoPageByXml(@Param("bo") DeviceFenceAccessRecordBo bo);
|
||||
|
||||
|
||||
/**
|
||||
* 查询设备最新的围栏记录
|
||||
|
||||
@ -33,6 +33,7 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec
|
||||
|
||||
private final DeviceFenceAccessRecordMapper baseMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 查询围栏进出记录
|
||||
*
|
||||
@ -68,8 +69,8 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec
|
||||
*/
|
||||
@Override
|
||||
public List<DeviceFenceAccessRecordVo> queryList(DeviceFenceAccessRecordBo bo) {
|
||||
LambdaQueryWrapper<DeviceFenceAccessRecord> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoPageWithFenceAndDeviceName(lqw, bo.getFenceName());
|
||||
// LambdaQueryWrapper<DeviceFenceAccessRecord> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoPageByXml(bo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -275,6 +275,7 @@ public class DeviceGeoFenceServiceImpl extends ServiceImpl<DeviceGeoFenceMapper
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean addFenceTerminal(FenceTerminalBo bo) {
|
||||
// 新增围栏与终端关联信息
|
||||
|
||||
@ -30,27 +30,45 @@ import static cn.dev33.satoken.SaManager.log;
|
||||
@Component
|
||||
public class AlibabaTTSUtil {
|
||||
// ========== 常量配置 ==========
|
||||
/** 阿里云TTS服务基础URL */
|
||||
/**
|
||||
* 阿里云TTS服务基础URL
|
||||
*/
|
||||
private static final String BASE_URL = "https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts";
|
||||
/** 音频内容类型标识 */
|
||||
/**
|
||||
* 音频内容类型标识
|
||||
*/
|
||||
private static final String CONTENT_TYPE_AUDIO = "audio/mpeg";
|
||||
|
||||
// ========== 默认参数值 ==========
|
||||
/** 默认发音人 - 小云 */
|
||||
/**
|
||||
* 默认发音人 - 小云
|
||||
*/
|
||||
private static final String DEFAULT_VOICE = "xiaoyun";
|
||||
/** 默认音量 50% */
|
||||
/**
|
||||
* 默认音量 50%
|
||||
*/
|
||||
private static final int DEFAULT_VOLUME = 50;
|
||||
/** 默认语速 0(正常) */
|
||||
/**
|
||||
* 默认语速 0(正常)
|
||||
*/
|
||||
private static final int DEFAULT_SPEECH_RATE = 1;
|
||||
/** 默认语调 0(正常) */
|
||||
/**
|
||||
* 默认语调 0(正常)
|
||||
*/
|
||||
private static final int DEFAULT_PITCH_RATE = 0;
|
||||
/** 默认音频格式 pcm */
|
||||
/**
|
||||
* 默认音频格式 pcm
|
||||
*/
|
||||
private static final String DEFAULT_FORMAT = "pcm";
|
||||
/** 默认采样率 16000Hz */
|
||||
/**
|
||||
* 默认采样率 16000Hz
|
||||
*/
|
||||
private static final int DEFAULT_SAMPLE_RATE = 16000;
|
||||
|
||||
// ========== Token管理配置 ==========
|
||||
/** Token刷新缓冲时间(提前5分钟刷新,单位:毫秒) */
|
||||
/**
|
||||
* Token刷新缓冲时间(提前5分钟刷新,单位:毫秒)
|
||||
*/
|
||||
private static final long TOKEN_REFRESH_BUFFER = 5 * 60 * 1000L;
|
||||
|
||||
// ========== 配置参数(从配置文件读取) ==========
|
||||
@ -70,7 +88,8 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 生成语音文件 - 简化版(使用默认参数)
|
||||
* @param text 要转换的文本内容
|
||||
*
|
||||
* @param text 要转换的文本内容
|
||||
* @param audioSaveFile 音频文件保存路径
|
||||
* @return true-成功 false-失败
|
||||
*/
|
||||
@ -80,11 +99,12 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 生成语音文件 - 标准版
|
||||
* @param text 要转换的文本内容
|
||||
*
|
||||
* @param text 要转换的文本内容
|
||||
* @param audioSaveFile 音频文件保存路径
|
||||
* @param format 音频格式(如:mp3, wav等)
|
||||
* @param sampleRate 采样率(如:16000, 22050, 44100等)
|
||||
* @param voice 发音人(如:xiaoyun, xiaoqian等)
|
||||
* @param format 音频格式(如:mp3, wav等)
|
||||
* @param sampleRate 采样率(如:16000, 22050, 44100等)
|
||||
* @param voice 发音人(如:xiaoyun, xiaoqian等)
|
||||
* @return true-成功 false-失败
|
||||
*/
|
||||
public boolean generateSpeech(String text, String audioSaveFile, String format,
|
||||
@ -95,14 +115,15 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 生成语音文件 - 完整版(支持所有参数调节)
|
||||
* @param text 要转换的文本内容
|
||||
*
|
||||
* @param text 要转换的文本内容
|
||||
* @param audioSaveFile 音频文件保存路径
|
||||
* @param format 音频格式
|
||||
* @param sampleRate 采样率
|
||||
* @param voice 发音人
|
||||
* @param volume 音量(0-100)
|
||||
* @param speechRate 语速(-500~500)
|
||||
* @param pitchRate 语调(-500~500)
|
||||
* @param format 音频格式
|
||||
* @param sampleRate 采样率
|
||||
* @param voice 发音人
|
||||
* @param volume 音量(0-100)
|
||||
* @param speechRate 语速(-500~500)
|
||||
* @param pitchRate 语调(-500~500)
|
||||
* @return true-成功 false-失败
|
||||
*/
|
||||
public boolean generateSpeech(String text, String audioSaveFile, String format,
|
||||
@ -158,6 +179,7 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 获取有效的访问令牌(优先从缓存获取,缓存不存在则重新生成)
|
||||
*
|
||||
* @return 访问令牌,获取失败返回null
|
||||
*/
|
||||
private String getValidAccessToken() {
|
||||
@ -181,6 +203,7 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 刷新访问令牌(调用阿里云API获取新令牌并缓存)
|
||||
*
|
||||
* @return 新的访问令牌,获取失败返回null
|
||||
*/
|
||||
private String refreshAccessToken() {
|
||||
@ -202,6 +225,7 @@ public class AlibabaTTSUtil {
|
||||
|
||||
/**
|
||||
* 参数验证
|
||||
*
|
||||
* @throws IllegalArgumentException 参数不合法时抛出异常
|
||||
*/
|
||||
private void validateParameters(String text, String audioSaveFile, String format, int sampleRate) {
|
||||
@ -248,10 +272,10 @@ public class AlibabaTTSUtil {
|
||||
"&text=" + encodedText +
|
||||
"&format=" + format +
|
||||
"&sample_rate=" + sampleRate;
|
||||
//"&voice=" + actualVoice +
|
||||
//"&volume=" + Math.max(0, Math.min(100, volume)) + // 音量范围限制
|
||||
//"&speech_rate=" + Math.max(-500, Math.min(500, speechRate)) + // 语速范围限制
|
||||
//"&pitch_rate=" + Math.max(-500, Math.min(500, pitchRate)); // 语调范围限制
|
||||
//"&voice=" + actualVoice +
|
||||
//"&volume=" + Math.max(0, Math.min(100, volume)) + // 音量范围限制
|
||||
//"&speech_rate=" + Math.max(-500, Math.min(500, speechRate)) + // 语速范围限制
|
||||
//"&pitch_rate=" + Math.max(-500, Math.min(500, pitchRate)); // 语调范围限制
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException("UTF-8编码不支持", e);
|
||||
|
||||
Reference in New Issue
Block a user