api-设备新增设备类型字段,是入场还是出场。完善入场逻辑
This commit is contained in:
@@ -39,10 +39,10 @@ public class QREnterController extends BaseApiController {
|
||||
if (venue!=null){
|
||||
if (DeviceType.OUT == enterOrOut){
|
||||
// 出场
|
||||
messageService.outVenue(deviceName,venueId,enterOrOut,memberId,venue);
|
||||
messageService.outVenue(deviceName,venueId,memberId,venue);
|
||||
}else{
|
||||
// 进场
|
||||
messageService.enterVenue(deviceName,venueId,enterOrOut,memberId,venue);
|
||||
messageService.enterVenue(deviceName,venueId,memberId,venue);
|
||||
}
|
||||
}
|
||||
return ResponseDTO.ok();
|
||||
|
||||
@@ -43,19 +43,17 @@ public interface MessageService {
|
||||
* 出场
|
||||
* @param deviceName
|
||||
* @param venueId
|
||||
* @param enterOrOut
|
||||
* @param memberId
|
||||
* @param venue
|
||||
*/
|
||||
void outVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue);
|
||||
void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue);
|
||||
|
||||
/**
|
||||
* 进场
|
||||
* @param deviceName
|
||||
* @param venueId
|
||||
* @param enterOrOut
|
||||
* @param memberId
|
||||
* @param venue
|
||||
*/
|
||||
void enterVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue);
|
||||
void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.sv.netty.netty.service.impl;
|
||||
|
||||
import com.enums.DeviceType;
|
||||
import com.sv.dto.EnterResult;
|
||||
import com.sv.entity.Member;
|
||||
import com.sv.entity.MemberEnterVenueLog;
|
||||
@@ -24,6 +23,7 @@ import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -33,9 +33,9 @@ import java.util.*;
|
||||
* @Date 08/05/2017 10:43 PM
|
||||
*/
|
||||
@Service("messageService")
|
||||
public class TcpMessageHandlerAdapter implements MessageService {
|
||||
public class AppMessageHandlerAdapter implements MessageService {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(TcpMessageHandlerAdapter.class);
|
||||
private Logger logger = LoggerFactory.getLogger(AppMessageHandlerAdapter.class);
|
||||
|
||||
@Resource
|
||||
private MemberService memberService;
|
||||
@@ -49,8 +49,8 @@ public class TcpMessageHandlerAdapter implements MessageService {
|
||||
@Resource
|
||||
private ConfigService configService;
|
||||
|
||||
// @Resource(name = "scheduledExecutorService")
|
||||
// private ScheduledExecutorService scheduledExecutorService;
|
||||
@Resource(name = "scheduledExecutorService")
|
||||
private ScheduledExecutorService scheduledExecutorService;
|
||||
|
||||
@Resource
|
||||
private MemberEnterVenueLogService memberEnterVenueLogService;
|
||||
@@ -122,7 +122,7 @@ public class TcpMessageHandlerAdapter implements MessageService {
|
||||
|
||||
|
||||
@Override
|
||||
public void outVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue) {
|
||||
public void outVenue(String deviceName, Integer venueId, Integer memberId, Venue venue) {
|
||||
Member member = memberService.findByMember(memberId);
|
||||
if (member != null) {
|
||||
//出场 不用判断直接出
|
||||
@@ -155,68 +155,31 @@ public class TcpMessageHandlerAdapter implements MessageService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 进场逻辑
|
||||
* @param deviceName
|
||||
* @param venueId
|
||||
* @param memberId
|
||||
* @param venue
|
||||
*/
|
||||
@Override
|
||||
public void enterVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue) {
|
||||
public void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue) {
|
||||
try {
|
||||
int code = 1;
|
||||
Member member = memberService.findByMember(memberId);
|
||||
if (member != null) {
|
||||
//最后进场记录
|
||||
MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLogNoType(member.getId(), venue.getId());
|
||||
if (enterVenueLog != null) {
|
||||
//有记录 查看 最后一次是否是出场
|
||||
if (enterVenueLog.getType() == 1) {
|
||||
//是出场 不用限制
|
||||
} else {
|
||||
//是进场
|
||||
Date date = new Date();
|
||||
//本日连续进场次数
|
||||
int continuityEnterCount = memberEnterVenueLogService.countEnterByDate(member.getId(), venue.getId(), date);
|
||||
logger.info("连续进场次数:" + continuityEnterCount);
|
||||
//距离上次入场差多少秒
|
||||
int differenceSeconds = (int) (date.getTime() - enterVenueLog.getCreatedTime().getTime()) / (1000);
|
||||
if (continuityEnterCount <= 0) {
|
||||
//没有连续进场 间隔5分钟
|
||||
Config config = configService.findById(1);
|
||||
if (differenceSeconds <= (Integer.parseInt(config.getValue()) * 60)) {
|
||||
//小于5分钟 不允许入场
|
||||
code = -1;
|
||||
}
|
||||
} else if (continuityEnterCount == 1) {
|
||||
//有过一次连续进场 间隔20分钟
|
||||
Config config = configService.findById(2);
|
||||
if (differenceSeconds <= (Integer.parseInt(config.getValue()) * 60)) {
|
||||
//小于20分钟 不允许入场
|
||||
code = -1;
|
||||
}
|
||||
} else {
|
||||
//超过两次连续入场 入场失败
|
||||
code = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// MemberDto memberMessageDto = new MemberDto();
|
||||
// memberMessageDto.setName(member.getNickname());
|
||||
// memberMessageDto.setAvatar(member.getAvatar());
|
||||
// memberMessageDto.setMobile(member.getMobile());
|
||||
//
|
||||
// memberMessageDto.setPlaceName("");
|
||||
// member = memberService.findByFaceId(response.getPerson().getId());
|
||||
// memberMessageDto.setAmount(member.getMoney());
|
||||
if (code > 0) {
|
||||
EnterResult result = venueService.enterVenue(memberId, venue.getId());
|
||||
if (result.getStatus() >= 0) {
|
||||
if (checkInterval(member,venueId)) {
|
||||
EnterResult result = venueService.qrCodeEnterVenue(memberId,deviceName,venueId,venue);
|
||||
if (result.getStatus() >= 0) {
|
||||
// memberMessageDto.setCode(1);
|
||||
if (result.getStatus() == 1) {
|
||||
if (result.getStatus() == 1) {
|
||||
// memberMessageDto.setCardName("会员卡");
|
||||
}
|
||||
if (result.getStatus() == 2) {
|
||||
}
|
||||
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秒后开门
|
||||
//5秒后开门
|
||||
// scheduledExecutorService.schedule(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
@@ -226,39 +189,81 @@ public class TcpMessageHandlerAdapter implements MessageService {
|
||||
//// sendOpenMessage(messageDto, 1);
|
||||
// }
|
||||
// }, 5, TimeUnit.SECONDS);
|
||||
} else {
|
||||
//开门
|
||||
} else {
|
||||
//开门
|
||||
// MessageDto messageDto = new MessageDto();
|
||||
// messageDto.setCmdId(Cmd.OPEN_DOOR.id);
|
||||
// messageDto.setDoor(1);
|
||||
// sendOpenMessage(messageDto, 1);
|
||||
logger.info(member.getId() + "入场成功:" + member.getMoney().toString());
|
||||
logger.info(member.getId() + "入场成功:" + member.getMoney().toString());
|
||||
|
||||
}
|
||||
}
|
||||
// memberMessageDto.setMessage("门禁已开,请入门");
|
||||
venueService.addNumber(venue.getId(), 1, member.getId());
|
||||
venueService.addNumber(venue.getId(), 1, member.getId());
|
||||
// venue = venueService.findById(venue.getId());
|
||||
// sendNumberChange(venue.getNumber());
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:" + member.getMoney().toString());
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:" + member.getMoney().toString());
|
||||
// memberMessageDto.setCode(-1);
|
||||
// memberMessageDto.setMessage(member.getName() + "您好,您的余额不足,请扫描门禁上张贴的小程序二维码充值");
|
||||
}
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:连续入场");
|
||||
// memberMessageDto.setCode(0);
|
||||
Config config = configService.findById(1);
|
||||
// memberMessageDto.setMessage("无出门记录连续入场,请" + config.getValue() + "分钟之后再试");
|
||||
}
|
||||
// TODO 校验完,就可以进场了
|
||||
// sendMessage(memberMessageDto, device.getId());
|
||||
|
||||
} else {
|
||||
logger.info(member.getId() + "入场失败:连续入场");
|
||||
// memberMessageDto.setCode(0);
|
||||
Config config = configService.findById(1);
|
||||
// memberMessageDto.setMessage("无出门记录连续入场,请" + config.getValue() + "分钟之后再试");
|
||||
}
|
||||
// TODO 校验完,就可以进场了
|
||||
// sendMessage(memberMessageDto, device.getId());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
logger.error("进场失败",e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkInterval(Member member,Integer venueId){
|
||||
if (member == null) {
|
||||
return false;
|
||||
}else{
|
||||
//最后进场记录
|
||||
MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLogNoType(member.getId(), venueId);
|
||||
if (enterVenueLog == null) {
|
||||
return true;
|
||||
}else {
|
||||
//有记录 查看 最后一次是否是出场
|
||||
if (enterVenueLog.getType() == 1) {
|
||||
return true;
|
||||
} else {
|
||||
//是进场
|
||||
Date date = new Date();
|
||||
//本日连续进场次数
|
||||
int continuityEnterCount = memberEnterVenueLogService.countEnterByDate(member.getId(), venueId, date);
|
||||
logger.info("连续进场次数:" + continuityEnterCount);
|
||||
//距离上次入场差多少秒
|
||||
int differenceSeconds = (int) (date.getTime() - enterVenueLog.getCreatedTime().getTime()) / (1000);
|
||||
if (continuityEnterCount <= 0) {
|
||||
//没有连续进场 间隔5分钟
|
||||
Config config = configService.findById(1);
|
||||
if (differenceSeconds <= (Integer.parseInt(config.getValue()) * 60)) {
|
||||
//
|
||||
return false;
|
||||
}
|
||||
} else if (continuityEnterCount == 1) {
|
||||
//有过一次连续进场 间隔20分钟
|
||||
Config config = configService.findById(2);
|
||||
if (differenceSeconds <= (Integer.parseInt(config.getValue()) * 60)) {
|
||||
//小于20分钟 不允许入场
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
//当日超过两次连续入场 入场失败
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 给客户端发送信息
|
||||
* @param channel
|
||||
Reference in New Issue
Block a user