api-完善二维码入场逻辑,目前只支持健身馆
This commit is contained in:
@@ -2,7 +2,9 @@ package com.sv.netty.config;
|
||||
|
||||
public enum ErrorCode {
|
||||
MEMBER_NOT_EXIST(10001,"用户校验失败"),
|
||||
NO_ENOUGH_AMOUNT(10002,"余额不足");
|
||||
NO_ENOUGH_AMOUNT(10002,"余额不足"),
|
||||
NO_USE_CARD(10003,"您好,暂无可用会员卡,请扫描门禁上张贴的小程序二维码购买!"),
|
||||
CHECK_ENTER_INTERVAL(10004,"无出门记录连续入场,请{0}分钟之后再试");
|
||||
|
||||
|
||||
private int code;
|
||||
|
||||
@@ -37,12 +37,13 @@ public class QREnterController extends BaseApiController {
|
||||
DeviceType enterOrOut = getEnterOrOut(deviceId);
|
||||
Venue venue = qrCodeService.initEnter(venueId, deviceName);
|
||||
if (venue!=null){
|
||||
Channel channel = ClientChannelCache.getCurrentChannel(deviceName,venueId ,enterOrOut);
|
||||
if (DeviceType.OUT == enterOrOut){
|
||||
// 出场
|
||||
messageService.outVenue(deviceName,venueId,memberId,venue);
|
||||
messageService.outVenue(deviceName,venueId,memberId,venue,channel);
|
||||
}else{
|
||||
// 进场
|
||||
messageService.enterVenue(deviceName,venueId,memberId,venue);
|
||||
messageService.enterVenue(deviceName,venueId,memberId,venue,channel);
|
||||
}
|
||||
}
|
||||
return ResponseDTO.ok();
|
||||
|
||||
@@ -7,6 +7,11 @@ public class MessageDTO implements Serializable {
|
||||
private MessageType messageType;
|
||||
private String message;
|
||||
|
||||
public MessageDTO(MessageType messageType, String message) {
|
||||
this.messageType = messageType;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public MessageType getMessageType() {
|
||||
return messageType;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@ package com.sv.netty.netty.message;
|
||||
|
||||
public enum MessageType {
|
||||
LOAD("加载"),
|
||||
OPENDOOR("开门");
|
||||
OPENDOOR("开门"),
|
||||
FAILED("开门校验失败");
|
||||
|
||||
private String message;
|
||||
MessageType(String message) {
|
||||
|
||||
@@ -46,7 +46,7 @@ public interface MessageService {
|
||||
* @param memberId
|
||||
* @param venue
|
||||
*/
|
||||
void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue);
|
||||
void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue,Channel channel);
|
||||
|
||||
/**
|
||||
* 进场
|
||||
@@ -55,5 +55,5 @@ public interface MessageService {
|
||||
* @param memberId
|
||||
* @param venue
|
||||
*/
|
||||
void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue);
|
||||
void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue,Channel channel);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package com.sv.netty.netty.service.impl;
|
||||
|
||||
import com.sv.dto.EnterResult;
|
||||
import com.enums.DeviceType;
|
||||
import com.sv.entity.Member;
|
||||
import com.sv.entity.MemberEnterVenueLog;
|
||||
import com.sv.entity.Venue;
|
||||
import com.sv.netty.config.ClientChannelCache;
|
||||
import com.sv.netty.config.ErrorCode;
|
||||
import com.sv.netty.netty.message.HeartBeat;
|
||||
import com.sv.netty.netty.message.MessageDTO;
|
||||
import com.sv.netty.netty.message.MessageType;
|
||||
@@ -22,8 +23,10 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
@@ -111,9 +114,7 @@ public class AppMessageHandlerAdapter implements MessageService {
|
||||
Member thisMember = memberService.findByMember(memberId);
|
||||
if (thisMember!=null){
|
||||
String nickname = thisMember.getNickname();
|
||||
MessageDTO messageDTO = new MessageDTO();
|
||||
messageDTO.setMessageType(MessageType.LOAD);
|
||||
messageDTO.setMessage("欢迎光临" + nickname);
|
||||
MessageDTO messageDTO = new MessageDTO(MessageType.LOAD,"欢迎光临!" + nickname);
|
||||
sendMessage(channel,messageDTO);
|
||||
return true;
|
||||
}
|
||||
@@ -122,7 +123,7 @@ public class AppMessageHandlerAdapter implements MessageService {
|
||||
|
||||
|
||||
@Override
|
||||
public void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue) {
|
||||
public void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue,Channel channel) {
|
||||
Member member = memberService.findByMember(memberId);
|
||||
if (member != null) {
|
||||
//出场 不用判断直接出
|
||||
@@ -163,74 +164,35 @@ public class AppMessageHandlerAdapter implements MessageService {
|
||||
* @param venue
|
||||
*/
|
||||
@Override
|
||||
public void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue) {
|
||||
try {
|
||||
public void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue,Channel channel) {
|
||||
Member member = memberService.findByMember(memberId);
|
||||
// 校验入场时间是否正常
|
||||
if (checkInterval(member,venueId)) {
|
||||
EnterResult result = venueService.qrCodeEnterVenue(memberId,deviceName,venueId,venue);
|
||||
if (result.getStatus() >= 0) {
|
||||
// memberMessageDto.setCode(1);
|
||||
if (result.getStatus() == 1) {
|
||||
// memberMessageDto.setCardName("会员卡");
|
||||
}
|
||||
if (result.getStatus() == 2) {
|
||||
// memberMessageDto.setPlacePrice(result.getMoney());
|
||||
// memberMessageDto.setFirst(true);
|
||||
// logger.info(member.getId() + "入场成功:" + member.getMoney().toString());
|
||||
// member = memberService.findByFaceId(response.getPerson().getId());
|
||||
// memberMessageDto.setAmount(member.getMoney());
|
||||
//5秒后开门
|
||||
// scheduledExecutorService.schedule(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
//// MessageDto messageDto = new MessageDto();
|
||||
//// messageDto.setCmdId(Cmd.OPEN_DOOR.id);
|
||||
//// messageDto.setDoor(1);
|
||||
//// sendOpenMessage(messageDto, 1);
|
||||
// }
|
||||
// }, 5, TimeUnit.SECONDS);
|
||||
} else {
|
||||
//开门
|
||||
// MessageDto messageDto = new MessageDto();
|
||||
// messageDto.setCmdId(Cmd.OPEN_DOOR.id);
|
||||
// messageDto.setDoor(1);
|
||||
// sendOpenMessage(messageDto, 1);
|
||||
logger.info(member.getId() + "入场成功:" + member.getMoney().toString());
|
||||
|
||||
}
|
||||
// memberMessageDto.setMessage("门禁已开,请入门");
|
||||
venueService.addNumber(venue.getId(), 1, member.getId());
|
||||
// venue = venueService.findById(venue.getId());
|
||||
// sendNumberChange(venue.getNumber());
|
||||
if(venueService.qrCodeEnterVenue(memberId,deviceName,venueId,venue)){
|
||||
// 可以进场
|
||||
scheduledExecutorService.schedule(() -> {
|
||||
sendMessage(channel,new MessageDTO(MessageType.OPENDOOR,"OK"));
|
||||
}, 5, TimeUnit.SECONDS);
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:" + member.getMoney().toString());
|
||||
// memberMessageDto.setCode(-1);
|
||||
// memberMessageDto.setMessage(member.getName() + "您好,您的余额不足,请扫描门禁上张贴的小程序二维码充值");
|
||||
// 进场失败
|
||||
sendMessage(channel,new MessageDTO(MessageType.FAILED, ErrorCode.NO_USE_CARD.getMsg()));
|
||||
}
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:连续入场");
|
||||
// memberMessageDto.setCode(0);
|
||||
Config config = configService.findById(1);
|
||||
// memberMessageDto.setMessage("无出门记录连续入场,请" + config.getValue() + "分钟之后再试");
|
||||
sendMessage(channel,new MessageDTO(MessageType.OPENDOOR, MessageFormat.format(ErrorCode.CHECK_ENTER_INTERVAL.getMsg(),config.getValue())));
|
||||
}
|
||||
// TODO 校验完,就可以进场了
|
||||
// sendMessage(memberMessageDto, device.getId());
|
||||
} catch (Exception e) {
|
||||
logger.error("进场失败",e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkInterval(Member member,Integer venueId){
|
||||
if (member == null) {
|
||||
if (member == null || venueId == null) {
|
||||
return false;
|
||||
}else{
|
||||
//最后进场记录
|
||||
MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLogNoType(member.getId(), venueId);
|
||||
if (enterVenueLog == null) {
|
||||
return true;
|
||||
}else {
|
||||
if (enterVenueLog != null) {
|
||||
//有记录 查看 最后一次是否是出场
|
||||
if (enterVenueLog.getType() == 1) {
|
||||
if (enterVenueLog.getType().intValue() == DeviceType.OUT.getCode()) {
|
||||
return true;
|
||||
} else {
|
||||
//是进场
|
||||
@@ -260,8 +222,8 @@ public class AppMessageHandlerAdapter implements MessageService {
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user