围栏进出记录

This commit is contained in:
2025-12-19 14:06:01 +08:00
parent 8c636d0484
commit c480bda112
13 changed files with 180 additions and 50 deletions

View File

@ -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;
}

View File

@ -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);
/**
* 查询设备最新的围栏记录

View File

@ -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);
}

View File

@ -275,6 +275,7 @@ public class DeviceGeoFenceServiceImpl extends ServiceImpl<DeviceGeoFenceMapper
return response;
}
@Override
public Boolean addFenceTerminal(FenceTerminalBo bo) {
// 新增围栏与终端关联信息

View File

@ -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);