diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardBroadcastEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardBroadcastEntity.java index 25a26116f..2c92d122f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardBroadcastEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardBroadcastEntity.java @@ -23,10 +23,10 @@ public class HardBroadcastEntity extends Model { /** - * 编号 + * 广播编号 */ @TableId(type = IdType.ASSIGN_ID) - @Schema(description = "编号") + @Schema(description = "广播编号") private Long id; /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java index 929a1c0c9..240de46e7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.hard.api.dto.HardBroadcastDto; import com.bsd.pjcloud.hard.api.entity.HardBroadcastEntity; @@ -15,7 +16,7 @@ public interface HardBroadcastService extends IService { /** * 添加线下食堂预约订单广播 */ - void addReserveOrderTask(HardOrderEntity orderdetail); + void addReserveOrderTask(HardOrderEntity orderdetail, UserInfo userInfo); /** * 完成硬件广播 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index be6a7b735..d1ef932a7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.service.PjcloudUser; @@ -92,5 +93,5 @@ public interface HardOrderService extends IService { /** * 创建订单后发送mq消息 */ - void createOrderAfterSendMqMsg(Long orderId); + void createOrderAfterSendMqMsg(Long orderId, UserInfo userInfo); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java index f678793cf..ea55921eb 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.utils.DataUtil; import com.bsd.pjcloud.admin.api.vo.UserVO; @@ -24,6 +25,9 @@ import com.bsd.pjcloud.hard.api.vo.HardBroadcastVo; import com.bsd.pjcloud.hard.mapper.HardBroadcastMapper; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; import com.bsd.pjcloud.hard.service.HardBroadcastService; +import com.bsd.pjcloud.mqtt.api.feign.RemoteMqttEventService; +import com.bsd.pjcloud.mqtt.constant.MqttActionEnum; +import com.bsd.pjcloud.mqtt.dto.hard.HardTakeFoodBroadcastMsg; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -47,6 +51,8 @@ public class HardBroadcastServiceImpl extends ServiceImpl scopePageJoin(Page page, HardBroadcastDto dto, DataScope dataScope) { Page pageList = baseMapper.scopePageJoin(page, dto, dataScope); @@ -58,17 +64,17 @@ public class HardBroadcastServiceImpl extends ServiceImpl() + .eq(HardManagerEntity::getMerchantId, orderdetail.getMerchantId()) + .eq(HardManagerEntity::getIsTakeFood, YesNoEnum.YES.getCode()) + ); + if (ObjectUtil.isEmpty(hardDetail)) { + log.error("|{}|发送线下订餐mq消息失败,默认订餐设备不存在|{}|", TAG, orderdetail.getId()); + return; + } + String content = ""; + String phone = userInfo.getSysUser().getPhone(); + if (ObjectUtil.isNotEmpty(phone) && phone.length() >= 4) { + content = phone.substring(phone.length() - 4); + } + if (ObjectUtil.isEmpty(content)) { + log.error("|{}|发送线下订餐mq消息失败,生成发送消息错误|{}|", TAG, orderdetail.getId()); + return; + } HardBroadcastEntity saveObj = HardBroadcastEntity.builder() .userId(orderdetail.getUserId()) .hardId(orderdetail.getHardId()) - .topic("") + .topic(hardDetail.getMainTopic()) .bizType(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getType()) .bizId(String.valueOf(orderdetail.getId())) .title(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getDescription()) - .content("") + .content(content) .broadcastCount(0) .broadcastMaxCount(20) .isBroadcast(YesNoEnum.YES.getCode()) .isDone(YesNoEnum.NO.getCode()) .build(); baseMapper.insert(saveObj); + // 发送mq + HardTakeFoodBroadcastMsg msg = new HardTakeFoodBroadcastMsg(); + msg.setTopic(saveObj.getTopic()); + msg.setAction(MqttActionEnum.TAKE_FOOD_BROADCAST); + msg.setUserId(String.valueOf(userInfo.getSysUser().getUserId())); + msg.setUserName(userInfo.getSysUser().getName()); + msg.setUserMobile(userInfo.getSysUser().getPhone()); + msg.setId(String.valueOf(saveObj.getId())); + msg.setTitle(saveObj.getTitle()); + msg.setContent(saveObj.getContent()); + msg.setBroadcastMaxCount(saveObj.getBroadcastMaxCount()); + msg.setProductDesc(orderdetail.getProductDesc()); + msg.setPayPrice(orderdetail.getPayPrice()); + remoteMqttEventService.sendTakeFoodBroadcast(msg); } /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index ad4940338..5d8e0456b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -287,7 +287,7 @@ public class HardOrderServiceImpl extends ServiceImpl sendFaceChangeMsg(@RequestParam Long userDeptId, @RequestParam Long userId, @RequestParam(required = false) Boolean isGlobalFace); /** - * 人脸变化 + * 打印机 */ @NoToken @PostMapping("/mqtt/send-print") R sendPrint(@RequestBody HardPrintMsg dto); + + /** + * 订餐广播 + */ + @NoToken + @PostMapping("/mqtt/send-take-food-broadcast") + R sendTakeFoodBroadcast(@RequestBody HardTakeFoodBroadcastMsg dto); } diff --git a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/constant/MqttActionEnum.java b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/constant/MqttActionEnum.java index 1d394e21a..58142a103 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/constant/MqttActionEnum.java +++ b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/constant/MqttActionEnum.java @@ -16,6 +16,7 @@ public enum MqttActionEnum { SUPERMARKET_CLASSIFY("超市分类变化"), PRINT("打印变化"), FACE("人脸变化"), + TAKE_FOOD_BROADCAST("定餐广播"), ; private final String description; } \ No newline at end of file diff --git a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardTakeFoodBroadcastMsg.java b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardTakeFoodBroadcastMsg.java new file mode 100644 index 000000000..4f79a1f62 --- /dev/null +++ b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardTakeFoodBroadcastMsg.java @@ -0,0 +1,59 @@ +package com.bsd.pjcloud.mqtt.dto.hard; + +import com.bsd.pjcloud.mqtt.dto.MqttHardBaseMsg; +import lombok.Data; + +@Data +public class HardTakeFoodBroadcastMsg extends MqttHardBaseMsg { + + /** + * 发送硬件的topic + */ + private String topic; + + /** + * 预定用户id + */ + private String userId; + + /** + * 预定用户名 + */ + private String userName; + + /** + * 预定用户手机号 + */ + private String userMobile; + + /** + * 广播id + */ + private String id; + + /** + * 预定标题 + */ + private String title; + + /** + * 广播内容 + */ + private String content; + + /** + * 最大广播次数 + */ + private Integer broadcastMaxCount; + + /** + * 商品介绍 + */ + private String productDesc; + + /** + * 支付价格 + */ + private Integer payPrice; + +} 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 deleted file mode 100644 index 9f376ca9b..000000000 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/broadcast/BroadcastVideoService.java +++ /dev/null @@ -1,74 +0,0 @@ -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 fa6715f42..358e6a5d7 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 @@ -7,6 +7,7 @@ import com.bsd.pjcloud.mqtt.constant.MqttActionEnum; import com.bsd.pjcloud.mqtt.dto.MqttBaseDto; import com.bsd.pjcloud.mqtt.dto.hard.HardCustomerMsg; import com.bsd.pjcloud.mqtt.dto.hard.HardPrintMsg; +import com.bsd.pjcloud.mqtt.dto.hard.HardTakeFoodBroadcastMsg; import com.bsd.pjcloud.mqtt.service.MqttEventService; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -133,4 +134,15 @@ public class MqttEventController { return R.ok(mqttEventService.defaultAction(mqttBaseDto)); } + /** + * 订餐广播 + */ + @Inner + @PostMapping("/send-take-food-broadcast") + public R sendTakeFoodBroadcast(@RequestBody HardTakeFoodBroadcastMsg dto) { + MqttBaseDto mqttBaseDto = new MqttBaseDto(); + mqttBaseDto.setAction(dto.getAction()); + mqttBaseDto.setData(dto); + return R.ok(mqttEventService.sendTakeFoodBroadcast(mqttBaseDto, dto.getTopic())); + } } diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java index 1423f2447..56c7a88e7 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java @@ -39,4 +39,20 @@ public class MqttEventService { } dto.setHardGroupId(dept.getHardGroupId()); } + + /** + * 订餐广播 + */ + public Boolean sendTakeFoodBroadcast(MqttBaseDto dto, String topic) { + try { + MqttHardBaseMsg msg = dto.getData(); + if (ObjectUtil.isEmpty(msg)) msg = new MqttHardBaseMsg(); + msg.setAction(dto.getAction()); + mqttService.publish(dto.getQos(), false, topic, JSON.toJSONString(msg)); + return true; + } catch (Exception e) { + log.error("|{}|发送订餐广播失败dto:|{}|", TAG, JSON.toJSONString(dto), e); + return false; + } + } }