diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index df5e6fe8c..9590ec734 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -221,4 +221,30 @@ CREATE TABLE hard_after_sale_log del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', tenant_id bigint DEFAULT NULL COMMENT '租户ID', PRIMARY KEY (id) -) ENGINE = InnoDB COMMENT ='售后订单日志'; \ No newline at end of file +) ENGINE = InnoDB COMMENT ='售后订单日志'; + +-- ---------------------------- +-- Table structure for hard_broadcast +-- ---------------------------- +DROP TABLE IF EXISTS hard_broadcast; +CREATE TABLE hard_broadcast +( + id bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + user_id bigint NOT NULL COMMENT '预定用户', + hard_id bigint NOT NULL COMMENT '硬件id', + topic varchar(128) NOT NULL COMMENT 'mq主题', + biz_id varchar(64) NOT NULL COMMENT '关联业务编号', + title varchar(64) NOT NULL COMMENT '预定标题', + unique_code varchar(16) NOT NULL COMMENT '广播唯一编号', + broadcast_count int DEFAULT 0 NOT NULL COMMENT '广播次数', + is_broadcast char(1) DEFAULT '0' COMMENT '是否广播语音', + is_done char(1) DEFAULT '0' COMMENT '是否完成', + is_done_time datetime DEFAULT NULL COMMENT '完成时间', + create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + create_time datetime DEFAULT NULL COMMENT '创建时间', + update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', + update_time datetime DEFAULT NULL COMMENT '修改时间', + del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', + tenant_id bigint DEFAULT NULL COMMENT '租户ID', + PRIMARY KEY (id) +) ENGINE = InnoDB COMMENT ='设备广播'; diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/broadcast/BroadcastVideoService.java b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/broadcast/BroadcastVideoService.java new file mode 100644 index 000000000..9f376ca9b --- /dev/null +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/broadcast/BroadcastVideoService.java @@ -0,0 +1,74 @@ +package com.bsd.pjcloud.mqtt.broadcast; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +/** + * 硬件语音广播 + */ +@Service +@Slf4j +public class BroadcastVideoService { + + private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + // 用于管理定时任务 + private ScheduledFuture scheduledFuture; + // 用于管理自动停止任务 + private ScheduledFuture autoStopFuture; + + private final int interval = 60; + private final int autoInterval = 60 * 5; + + /** + * 启动广播 + */ + public void startBroadcast() { + if (scheduledFuture == null || scheduledFuture.isDone()) { + scheduledFuture = executorService.scheduleAtFixedRate(() -> { + playAudio(); + }, 0, interval, TimeUnit.SECONDS); + log.info("广播已启动"); + startAutoStopTask(); + } + } + + /** + * 停止广播 + */ + public void stopBroadcast() { + if (scheduledFuture == null) return; + scheduledFuture.cancel(false); + scheduledFuture = null; + if (autoStopFuture != null) { + autoStopFuture.cancel(false); + autoStopFuture = null; + } + log.info("广播已停止"); + } + + /** + * 自动关闭广播任务 + */ + private void startAutoStopTask() { + autoStopFuture = executorService.schedule(() -> { + if (scheduledFuture != null && !scheduledFuture.isDone()) { + log.info("{}秒内未收到消息,自动停止广播", autoInterval); + stopBroadcast(); + } + }, autoInterval, TimeUnit.MINUTES); + } + + /** + * 播放音频 + */ + private void playAudio() { + + } + +} diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java index 7ad8671b5..fa6715f42 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java @@ -36,6 +36,7 @@ public class MqttEventController { @GetMapping("/send-config-change-msg") public R sendConfigChangeMsg(@RequestParam Long deptId) { MqttBaseDto dto = new MqttBaseDto<>(); + mqttEventService.getTopicParamsByUserDeptId(dto, deptId); dto.setAction(MqttActionEnum.CONFIG); dto.setMerchantDeptId(deptId); return R.ok(mqttEventService.defaultAction(dto)); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index 0a3ce6c91..d9ecfba77 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -4,7 +4,9 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ZipUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter;