提交 8b21acf2 作者: 谭志磊

style : 访客代码格式,注释调整

上级 7bf585c5
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.rabbitmq.zy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.yiring.app.config.zy.ZyRabbitConfig;
import com.yiring.app.push.domain.PushMessage;
import com.yiring.app.push.service.PushService;
import java.io.IOException;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* 国标 RabbitMQ 消息监听(消息消费者)
*
* @author tzl
* @version 0.1
* 2022/4/13 17:13
*/
@Slf4j
@Component
@Configuration
@ConditionalOnProperty(prefix = "zy-config.rabbitmq", value = "enabled", havingValue = "true")
public class GbRabbitmqReceiver {
// TODO
// 1. 新增消息订阅定时任务,检查是否正常订阅了真源定位系统的消息
// 2. 如果没有所需的订阅记录,则发起消息订阅(见接口文档: 6.2)
// 3. 订阅 position(定位数据)、lowPower(低电量报警)、deviceStatus(设备状态)、keyWarning(按键报警)
@Resource
PushService pushService;
/**
* 订阅真源定位系统 RabbitMQ 推送过来的消息(主动订阅的一些消息类别)
* 参见: 定位平台接口规范V3.0.1 - 通用版.pdf #6
* @param msg 消息内容
* @param channel 消息通道
* @param message 消息主体
* @throws IOException 消息确认异常
*/
@RabbitHandler
@RabbitListener(
queues = ZyRabbitConfig.MESSAGE_QUEUES_NAME,
containerFactory = ZyRabbitConfig.LISTENER_FACTORY_NAME
)
public void listen(String msg, Channel channel, Message message) throws IOException {
// 手动确认消息已收到
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
try {
// 将消息转换成 JSON 格式
JSONObject info = JSON.parseObject(msg);
log.info("Receiver Message: {}", info);
// 解构消息内容
JSONObject data = info.getJSONObject("params");
String method = info.getString("method");
switch (method) {
// 实时定位
case "position" -> processPositionMessage(data);
// 设备低电量
case "lowPower" -> processLowPowerMessage(data);
// 设备状态变更
case "deviceStatus" -> processDeviceStatusMessage(data);
// 按键报警
case "keyWarning" -> processKeyWarningMessage(data);
default -> log.warn("Unknown Message Type: {}", info);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
/**
* 处理定位消息
* @param data 消息内容
*/
@Transactional(rollbackFor = Exception.class)
public void processPositionMessage(JSONObject data) {
// TODO
log.info("Position Message: {}", data);
// 包装消息
// TODO
// 1. 解析消息内容,进行围栏、出入标识判断等处理,将定位记录录入数据库
// 2. 创建一条需要进行消息推送的记录
// 3. 将记录推送的消息推送模块
// WebSocket 消息推送
pushService.push(PushMessage.Type.WS, data);
}
/**
* 处理低电量报警消息
* @param data 消息内容
*/
@Transactional(rollbackFor = Exception.class)
public void processLowPowerMessage(JSONObject data) {
// TODO
log.info("LowPower Message: {}", data);
}
/**
* 处理设备状态更新消息
* @param data 消息内容
*/
@Transactional(rollbackFor = Exception.class)
public void processDeviceStatusMessage(JSONObject data) {
// TODO
log.info("DeviceStatus Message: {}", data);
}
/**
* 处理按键报警消息
* @param data 消息内容
*/
@Transactional(rollbackFor = Exception.class)
public void processKeyWarningMessage(JSONObject data) {
// TODO
log.info("KeyWarning Message: {}", data);
}
}
......@@ -56,4 +56,19 @@ public interface VisitorService {
* @param response HttpServletResponse
*/
void exportVisitor(VisitorQueryParam visitorQueryParam, HttpServletResponse response);
/**
* 发卡
* @param labelCard 标签卡号
* @param idParam 主键id
* @return 是否成功
*/
Result<String> cardSend(String labelCard, IdParam idParam);
/**
* 收卡
* @param idParam 主键id
* @return 是否成功
*/
Result<String> cardRec(IdParam idParam);
}
......@@ -185,6 +185,34 @@ public class VisitorServiceImpl implements VisitorService {
}
}
@Override
public Result<String> cardSend(String labelCard, IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Visitor visitor = optional.get();
//状态变更为使用中
visitor.setLabelCardStatus("2");
visitor.setCardSendTime(LocalDateTime.now());
visitor.setLabelCard(labelCard);
visitorRepository.saveAndFlush(visitor);
return Result.ok();
}
@Override
public Result<String> cardRec(IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Visitor visitor = optional.get();
visitor.setLabelCardStatus("3");
visitor.setCardRecTime(LocalDateTime.now());
visitorRepository.saveAndFlush(visitor);
return Result.ok();
}
public boolean hasCarNum(String carNum) {
Visitor visitor = Visitor.builder().visitorCarNum(carNum).build();
return visitorRepository.count(Example.of(visitor)) > 0;
......
......@@ -9,6 +9,7 @@ import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
......@@ -47,18 +48,18 @@ public class VisitorController {
return visitorService.updateVisitor(visitorParam, idParam);
}
// @ApiOperation(value = "收卡")
// @PostMapping("cardRec")
// public Result<Long> cardRec(@Valid IdParam idParam) {
// return carService.cardRec(idParam);
// }
//
// @ApiOperation(value = "发卡")
// @ApiImplicitParam(value = "标签卡", example = "DW8544568", required = true, name = "labelCard")
// @PostMapping("cardSend")
// public Result<Long> cardSend(@Valid IdParam idParam, String labelCard) {
// return carService.cardSend(idParam, labelCard);
// }
@ApiOperation(value = "收卡")
@PostMapping("cardRec")
public Result<String> cardRec(@Valid IdParam idParam) {
return visitorService.cardRec(idParam);
}
@ApiOperation(value = "发卡")
@ApiImplicitParam(value = "标签卡", example = "DW8544568", required = true, name = "labelCard")
@PostMapping("cardSend")
public Result<String> cardSend(@Valid IdParam idParam, String labelCard) {
return visitorService.cardSend(labelCard, idParam);
}
@ApiOperation(value = "删除访客信息")
@PostMapping("deleteVisitor")
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论