feat:广播

This commit is contained in:
dzc committed 2025-05-12 14:17:55 +08:00
1 parent 081dacce4e
commit 07466a7c90
6 files changed
+104 -75

No files matched your search

@@ -44,8 +44,7 @@ public class HardBroadcastController {
@Operation(summary = "android查询今日的广播", description = "android查询今日的广播")
@GetMapping("/ad/today")
public R<Page<HardBroadcastVo>> androidToday(@ParameterObject Page page) {
HardBroadcastDto dto = new HardBroadcastDto();
public R<Page<HardBroadcastVo>> androidToday(@ParameterObject Page page, @RequestBody HardBroadcastDto dto) {
DataScope dataScope = null;
LocalDate today = LocalDate.now();
dto.setIsDone(YesNoEnum.NO.getCode());
@@ -163,7 +163,7 @@ public class HardOrderController {
@Operation(summary = "app创建订单", description = "app创建订单")
@GetMapping("/app/create-order")
@Idempotent(expireTime = 10, info = "正在创建订单中,请勿重复操作")
@Idempotent(expireTime = 3, info = "正在创建订单中,请勿重复操作")
public R appCreateOrder(@RequestParam Long carParentId, @RequestParam Long apptId, @RequestParam HardTypeEnum hardType) {
PjcloudUser user = SecurityUtils.getUser();
HardAppCreateOrderDto dto = HardAppCreateOrderDto.builder().carParentId(carParentId).walletType(WalletTypeEnum.EAT).hardType(hardType).userId(user.getId()).orderType(HardOrderTypeEnum.RESERVE).payType(HardPayTypeEnum.WALLET_DEFAULT).apptId(apptId).build();
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
@@ -81,19 +82,19 @@ public class HardBroadcastServiceImpl extends ServiceImpl<HardBroadcastMapper, H
}
if (ObjectUtil.notEqual(hardOrderType, HardOrderTypeEnum.RESERVE)) return;
// 是否重复
HardBroadcastEntity broadcastDetail = baseMapper.selectOne(new LambdaQueryWrapper<HardBroadcastEntity>()
Long broadcastCount = baseMapper.selectCount(new LambdaQueryWrapper<HardBroadcastEntity>()
.eq(HardBroadcastEntity::getBizId, orderdetail.getId())
);
if (ObjectUtil.isNotEmpty(broadcastDetail)) {
if (broadcastCount >= 1) {
log.error("|{}|发送线下订餐mq消息失败,广播已存在|{}|", TAG, orderdetail.getId());
return;
}
// 查询设备
HardManagerEntity hardDetail = hardManagerMapper.selectOne(new LambdaQueryWrapper<HardManagerEntity>()
List<HardManagerEntity> hardList = hardManagerMapper.selectList(new LambdaQueryWrapper<HardManagerEntity>()
.eq(HardManagerEntity::getMerchantId, orderdetail.getMerchantId())
.eq(HardManagerEntity::getIsTakeFood, YesNoEnum.YES.getCode())
);
if (ObjectUtil.isEmpty(hardDetail)) {
if (ObjectUtil.isEmpty(hardList)) {
log.error("|{}|发送线下订餐mq消息失败,默认订餐设备不存在|{}|", TAG, orderdetail.getId());
return;
}
@@ -106,37 +107,42 @@ public class HardBroadcastServiceImpl extends ServiceImpl<HardBroadcastMapper, H
log.error("|{}|发送线下订餐mq消息失败,生成发送消息错误|{}|", TAG, orderdetail.getId());
return;
}
HardBroadcastEntity saveObj = HardBroadcastEntity.builder()
.userId(orderdetail.getUserId())
.hardId(hardDetail.getId())
.topic(hardDetail.getMainTopic())
.bizType(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getType())
.bizId(String.valueOf(orderdetail.getId()))
.title(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getDescription())
.content(content)
.broadcastCount(0)
.broadcastMaxCount(20)
.isBroadcast(YesNoEnum.YES.getCode())
.isDone(YesNoEnum.NO.getCode())
.build();
baseMapper.insert(saveObj);
String topic = saveObj.getTopic().replaceAll("/#", "");
// 发送mq
HardTakeFoodBroadcastMsg msg = new HardTakeFoodBroadcastMsg();
msg.setTopic(topic);
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());
msg.setHourType(orderdetail.getHourType());
msg.setIsDone(saveObj.getIsDone());
remoteMqttEventService.sendTakeFoodBroadcast(msg);
for (HardManagerEntity v : hardList) {
HardBroadcastEntity saveObj = HardBroadcastEntity.builder()
.userId(orderdetail.getUserId())
.hardId(v.getId())
.topic(v.getMainTopic())
.bizType(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getType())
.bizId(String.valueOf(orderdetail.getId()))
.title(HardBroadcastEnum.OFFLINE_CANTEEN_RESERVE.getDescription())
.content(content)
.broadcastCount(0)
.broadcastMaxCount(20)
.isBroadcast(YesNoEnum.YES.getCode())
.isDone(YesNoEnum.NO.getCode())
.build();
baseMapper.insert(saveObj);
String topic = saveObj.getTopic().replaceAll("/#", "");
// 发送mq
HardTakeFoodBroadcastMsg msg = new HardTakeFoodBroadcastMsg();
msg.setTopic(topic);
msg.setMchDeptId(v.getDeptId());
msg.setHardwareId(v.getId());
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.setOrderId(String.valueOf(orderdetail.getId()));
msg.setTitle(saveObj.getTitle());
msg.setContent(saveObj.getContent());
msg.setBroadcastMaxCount(saveObj.getBroadcastMaxCount());
msg.setProductDesc(orderdetail.getProductDesc());
msg.setPayPrice(orderdetail.getPayPrice());
msg.setHourType(orderdetail.getHourType());
msg.setIsDone(saveObj.getIsDone());
remoteMqttEventService.sendTakeFoodBroadcast(msg);
}
}
/**
@@ -157,35 +163,53 @@ public class HardBroadcastServiceImpl extends ServiceImpl<HardBroadcastMapper, H
return;
}
if (ObjectUtil.notEqual(hardOrderType, HardOrderTypeEnum.RESERVE)) return;
HardBroadcastEntity broadcastDetail = baseMapper.selectOne(new LambdaQueryWrapper<HardBroadcastEntity>().eq(HardBroadcastEntity::getBizId, orderdetail.getId()));
HardBroadcastEntity broadcastDetail = baseMapper.selectOne(new LambdaQueryWrapper<HardBroadcastEntity>()
.eq(HardBroadcastEntity::getBizId, orderdetail.getId())
.orderByDesc(HardBroadcastEntity::getCreateTime)
.orderByDesc(HardBroadcastEntity::getId)
.last("limit 1")
);
if (ObjectUtil.isEmpty(broadcastDetail)) {
log.error("|{}|doneBroadcast发送mq消息失败,广播不存在|{}|", TAG, orderdetail.getId());
return;
}
HardBroadcastEntity updateObj = HardBroadcastEntity.builder()
.id(broadcastDetail.getId())
.isBroadcast(YesNoEnum.NO.getCode())
.isDone(YesNoEnum.YES.getCode())
.isDoneTime(orderdetail.getCreateTime())
.build();
baseMapper.updateById(updateObj);
// 查询设备
List<HardManagerEntity> hardList = hardManagerMapper.selectList(new LambdaQueryWrapper<HardManagerEntity>()
.eq(HardManagerEntity::getMerchantId, orderdetail.getMerchantId())
.eq(HardManagerEntity::getIsTakeFood, YesNoEnum.YES.getCode())
);
if (ObjectUtil.isEmpty(hardList)) {
log.error("|{}|发送线下订餐完成mq消息失败,默认订餐设备不存在|{}|", TAG, orderdetail.getId());
return;
}
baseMapper.update(new LambdaUpdateWrapper<HardBroadcastEntity>().set(HardBroadcastEntity::getIsBroadcast, YesNoEnum.NO.getCode())
.set(HardBroadcastEntity::getIsDone, YesNoEnum.YES.getCode())
.set(HardBroadcastEntity::getIsDoneTime, orderdetail.getCreateTime())
.eq(HardBroadcastEntity::getBizId, orderdetail.getId())
.eq(HardBroadcastEntity::getIsDone, YesNoEnum.NO.getCode())
);
// 发送mq
String topic = broadcastDetail.getTopic().replaceAll("/#", "");
HardTakeFoodBroadcastMsg msg = new HardTakeFoodBroadcastMsg();
msg.setTopic(topic);
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(broadcastDetail.getId()));
msg.setTitle(broadcastDetail.getTitle());
msg.setContent(broadcastDetail.getContent());
msg.setBroadcastMaxCount(broadcastDetail.getBroadcastMaxCount());
msg.setProductDesc(orderdetail.getProductDesc());
msg.setPayPrice(orderdetail.getPayPrice());
msg.setHourType(orderdetail.getHourType());
msg.setIsDone(updateObj.getIsDone());
remoteMqttEventService.sendTakeFoodBroadcast(msg);
for (HardManagerEntity v : hardList) {
String topic = v.getMainTopic().replaceAll("/#", "");
HardTakeFoodBroadcastMsg msg = new HardTakeFoodBroadcastMsg();
msg.setTopic(topic);
msg.setMchDeptId(v.getDeptId());
msg.setHardwareId(v.getId());
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(v.getId()));
msg.setOrderId(String.valueOf(orderdetail.getId()));
msg.setTitle(broadcastDetail.getTitle());
msg.setContent(broadcastDetail.getContent());
msg.setBroadcastMaxCount(broadcastDetail.getBroadcastMaxCount());
msg.setProductDesc(orderdetail.getProductDesc());
msg.setPayPrice(orderdetail.getPayPrice());
msg.setHourType(orderdetail.getHourType());
msg.setIsDone(YesNoEnum.YES.getCode());
remoteMqttEventService.sendTakeFoodBroadcast(msg);
}
}
/**
@@ -7,18 +7,6 @@
<result property="parentCarId" column="parent_car_id"/>
<result property="productId" column="product_id"/>
<result property="productName" column="product_name"/>
<result property="productPic" column="product_pic"/>
<result property="productPrice" column="product_price"/>
<result property="productCount" column="product_count"/>
@@ -6,6 +6,16 @@ import lombok.Data;
@Data
public class HardTakeFoodBroadcastMsg extends MqttHardBaseMsg {
/**
* 商户部门id
*/
private Long mchDeptId;
/**
* 硬件id
*/
private Long hardwareId;
/**
* 发送硬件的topic
*/
@@ -31,6 +41,11 @@ public class HardTakeFoodBroadcastMsg extends MqttHardBaseMsg {
*/
private String id;
/**
* 订单id
*/
private String orderId;
/**
* 预定标题
*/
@@ -141,8 +141,11 @@ public class MqttEventController {
@PostMapping("/send-take-food-broadcast")
public R<Boolean> sendTakeFoodBroadcast(@RequestBody HardTakeFoodBroadcastMsg dto) {
MqttBaseDto mqttBaseDto = new MqttBaseDto();
mqttEventService.getTopicParamsByUserDeptId(mqttBaseDto, dto.getMchDeptId());
mqttBaseDto.setMerchantDeptId(dto.getMchDeptId());
mqttBaseDto.setHardwareId(dto.getHardwareId());
mqttBaseDto.setAction(dto.getAction());
mqttBaseDto.setData(dto);
return R.ok(mqttEventService.sendTakeFoodBroadcast(mqttBaseDto, dto.getTopic()));
return R.ok(mqttEventService.sendTakeFoodBroadcast(mqttBaseDto, mqttBaseDto.getTopic()));
}
}