From c480bda112a0af15f3088752d80fea14526ee5e0 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Fri, 19 Dec 2025 14:06:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=B4=E6=A0=8F=E8=BF=9B=E5=87=BA=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fuyuanshen/Text.java | 64 ++++++++++++++++ .../app/controller/AppVideoController.java | 1 + .../global/mqtt/config/MqttConfiguration.java | 35 +++++++-- .../mqtt/config/MqttInboundConfiguration.java | 8 +- .../config/MqttOutboundConfiguration.java | 8 +- .../DeviceFenceAccessRecordController.java | 1 + .../fence/DeviceGeoFenceController.java | 2 + .../encrypt/utils/EncryptUtilsTest.java | 4 +- .../domain/vo/DeviceFenceAccessRecordVo.java | 21 +++--- .../mapper/DeviceFenceAccessRecordMapper.java | 6 +- .../DeviceFenceAccessRecordServiceImpl.java | 5 +- .../impl/DeviceGeoFenceServiceImpl.java | 1 + .../equipment/utils/AlibabaTTSUtil.java | 74 ++++++++++++------- 13 files changed, 180 insertions(+), 50 deletions(-) create mode 100644 fys-admin/src/main/java/com/fuyuanshen/Text.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/Text.java b/fys-admin/src/main/java/com/fuyuanshen/Text.java new file mode 100644 index 00000000..356b6d61 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/Text.java @@ -0,0 +1,64 @@ +package com.fuyuanshen; + +import com.fuyuanshen.equipment.utils.AlibabaTTSUtil; +import com.fuyuanshen.equipment.utils.AudioProcessUtil; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * @author: 默苍璃 + * @date: 2025-12-1518:51 + */ +public class Text { + public static void main(String[] args) throws IOException { + String text = "简述人生观的主要内容。\n" + + "人生观的主要内容包括以下三个方面:\n" + + "1.人生目的:回答“人为什么活着”的根本问题。它规定了人生的方向,是人生观的核心。\n" + + "2.人生态度:回答“人应该怎样活着”的问题。它是指人们通过生活实践形成的对人生问题的一种稳定的心理倾向和基本意图。\n" + + "3.人生价值:回答“什么样的人生才有意义”的问题。它是指人的生命及其实践活动对于社会和个人所具有的作用和意义。\n" + + "人生目的、人生态度和人生价值相互联系、相辅相成,共同构成一个有机整体。\n" + + "人生目的是人生观的核心,它决定人生态度和人生价值的方向;人生态度影响人生目的的实现和人生价值的创造;人生价值是衡量人生观正确与否的尺度。"; + + AlibabaTTSUtil alibabaTTSUtil = new AlibabaTTSUtil(); + AudioProcessUtil audioProcessUtil = new AudioProcessUtil(); + + byte[] rawPcmData = alibabaTTSUtil.generateStandardPcmData(text); + + // 使用AudioProcessUtil转换成带头44字节 PCM + byte[] pcmData = audioProcessUtil.rawPcmToStandardWav(rawPcmData); + +// String savedPath = audioProcessUtil.saveWavToFile(pcmData, "test_output.wav"); +// if (savedPath != null) { +// log.info("测试文件已保存: {}", savedPath); +// } + + // 保存WAV文件到本地 + String savedPath = saveByteArrayToFile(pcmData, "人生观.wav"); + if (savedPath != null) { + System.out.println("WAV文件已保存: " + savedPath); + } + } + + + private static String saveByteArrayToFile(byte[] data, String filename) throws IOException { + // 确定保存路径(可以是临时目录或指定目录) + String directory = System.getProperty("java.io.tmpdir"); // 使用系统临时目录 + File dir = new File(directory); + if (!dir.exists()) { + dir.mkdirs(); + } + + // 创建完整文件路径 + File file = new File(dir, filename); + + // 写入文件 + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(data); + } + + return file.getAbsolutePath(); + } + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppVideoController.java b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppVideoController.java index 87c08404..63ddfb37 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppVideoController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppVideoController.java @@ -64,4 +64,5 @@ public class AppVideoController extends BaseController { public R extract(@RequestParam("file") MultipartFile file) throws Exception { return R.ok("Success",audioProcessService.extract(file)); } + } diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttConfiguration.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttConfiguration.java index 745dd638..41361662 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttConfiguration.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttConfiguration.java @@ -10,22 +10,43 @@ import org.springframework.integration.mqtt.core.MqttPahoClientFactory; @Configuration public class MqttConfiguration { + @Autowired private MqttPropertiesConfig mqttPropertiesConfig; - /** 创建连接工厂 **/ + + + /** + * 创建连接工厂 + **/ @Bean - public MqttPahoClientFactory mqttPahoClientFactory(){ + public MqttPahoClientFactory mqttPahoClientFactory() { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); MqttConnectOptions options = new MqttConnectOptions(); - options.setCleanSession(true); //设置新会话 - options.setUserName(mqttPropertiesConfig.getUsername()); - options.setPassword(mqttPropertiesConfig.getPassword().toCharArray()); - options.setServerURIs(new String[]{mqttPropertiesConfig.getUrl()}); + options.setCleanSession(true); // 设置新会话 + + // 修复用户名为null时的空指针异常 + String username = mqttPropertiesConfig.getUsername(); + if (username != null) { + options.setUserName(username); + } + + // 修复密码为null时的空指针异常 + String password = mqttPropertiesConfig.getPassword(); + if (password != null) { + options.setPassword(password.toCharArray()); + } + + // 修复URL为null时的空指针异常 + String url = mqttPropertiesConfig.getUrl(); + if (url != null) { + options.setServerURIs(new String[]{url}); + } + options.setAutomaticReconnect(true); // 启用自动重连 options.setConnectionTimeout(10); // 设置连接超时时间 options.setKeepAliveInterval(60); // 设置心跳间隔 factory.setConnectionOptions(options); return factory; } - + } \ No newline at end of file diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java index a9f9311c..102005ca 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java @@ -39,8 +39,14 @@ public class MqttInboundConfiguration { public MessageProducer messageProducer(){ // 生成一个不重复的随机数 String clientId = mqttPropertiesConfig.getSubClientId() + "_" + UUID.fastUUID(); + // 修复URL为null时的空指针异常 + String url = mqttPropertiesConfig.getUrl(); + if (url == null) { + throw new IllegalStateException("MQTT服务器URL未配置"); + } + MqttPahoMessageDrivenChannelAdapter mqttPahoMessageDrivenChannelAdapter = new MqttPahoMessageDrivenChannelAdapter( - mqttPropertiesConfig.getUrl(), + url, clientId, mqttPahoClientFactory, mqttPropertiesConfig.getSubTopic().split(",") diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttOutboundConfiguration.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttOutboundConfiguration.java index 01cddded..b717acdb 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttOutboundConfiguration.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttOutboundConfiguration.java @@ -32,8 +32,14 @@ public class MqttOutboundConfiguration { @ServiceActivator(inputChannel = "mqttOutboundChannel") // 指定处理器针对哪个通道的消息进行处理 public MessageHandler mqttOutboundMessageHandler(){ String clientId = mqttPropertiesConfig.getPubClientId() + "_" + UUID.fastUUID(); + // 修复URL为null时的空指针异常 + String url = mqttPropertiesConfig.getUrl(); + if (url == null) { + throw new IllegalStateException("MQTT服务器URL未配置"); + } + MqttPahoMessageHandler mqttPahoMessageHandler = new MqttPahoMessageHandler( - mqttPropertiesConfig.getUrl(), + url, clientId, mqttPahoClientFactory ); diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceFenceAccessRecordController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceFenceAccessRecordController.java index 644d5585..d8a17b3c 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceFenceAccessRecordController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceFenceAccessRecordController.java @@ -59,6 +59,7 @@ public class DeviceFenceAccessRecordController extends BaseController { ExcelUtil.exportExcel(list, "围栏进出记录", DeviceFenceAccessRecordVo.class, response); } + /** * 获取围栏进出记录详细信息 * diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceGeoFenceController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceGeoFenceController.java index 34506027..c35f73a1 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceGeoFenceController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/fence/DeviceGeoFenceController.java @@ -103,6 +103,7 @@ public class DeviceGeoFenceController extends BaseController { return toAjax(deviceGeoFenceService.updateByBo(bo)); } + /** * 删除电子围栏 * @@ -130,6 +131,7 @@ public class DeviceGeoFenceController extends BaseController { return ResponseEntity.ok(response); } + /** * 添加电子围栏终端 * diff --git a/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java b/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java index 05e035d2..c1b72532 100644 --- a/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java +++ b/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java @@ -39,8 +39,8 @@ public class EncryptUtilsTest { loginBody.setClientId("e5cd7e4891bf95d1d19206ce24a7b32e"); loginBody.setGrantType("password"); loginBody.setTenantId("894078"); - loginBody.setCode("0"); - loginBody.setUuid("1d6615668c7f410da77c4e002c601073"); + loginBody.setCode("15"); + loginBody.setUuid("28ecf3d396ce4e6db8eb414992235fad"); // loginBody.setUsername("admin"); // loginBody.setPassword("admin123"); loginBody.setUsername("dyf"); diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java index c8d114c4..8c23b458 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceFenceAccessRecordVo.java @@ -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; - } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceFenceAccessRecordMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceFenceAccessRecordMapper.java index b20d37f5..e157ebe7 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceFenceAccessRecordMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceFenceAccessRecordMapper.java @@ -28,17 +28,19 @@ public interface DeviceFenceAccessRecordMapper extends BaseMapperPlus selectVoPageWithFenceAndDeviceName(Page page, @Param(Constants.WRAPPER) Wrapper wrapper); - List selectVoPageWithFenceAndDeviceName(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("fenceName") String fenceName); + List selectVoPageWithFenceAndDeviceName(@Param(Constants.WRAPPER) Wrapper wrapper, @Param("fenceName") String fenceName); /** * 分页查询围栏进出记录列表(纯XML形式) * * @param page 分页参数 - * @param bo 查询条件 + * @param bo 查询条件 * @return 围栏进出记录分页列表 */ Page selectVoPageByXml(Page page, @Param("bo") DeviceFenceAccessRecordBo bo); + List selectVoPageByXml(@Param("bo") DeviceFenceAccessRecordBo bo); + /** * 查询设备最新的围栏记录 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java index 1ab86d3a..41ecac72 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceFenceAccessRecordServiceImpl.java @@ -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 queryList(DeviceFenceAccessRecordBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoPageWithFenceAndDeviceName(lqw, bo.getFenceName()); + // LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoPageByXml(bo); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java index 65035586..f5e48277 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceGeoFenceServiceImpl.java @@ -275,6 +275,7 @@ public class DeviceGeoFenceServiceImpl extends ServiceImpl