From 0d8dcd08e261df785c43d38538bdbae10a17c320 Mon Sep 17 00:00:00 2001 From: limqhz Date: Mon, 20 Jul 2020 14:59:30 +0800 Subject: [PATCH] =?UTF-8?q?api-=E8=BF=9B=E5=9C=BA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=8F=90=E4=BA=A4-=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../netty/controller/QREnterController.java | 26 +++- .../netty/netty/service/MessageService.java | 21 ++++ .../impl/TcpMessageHandlerAdapter.java | 114 ++++++++---------- .../com/sv/service/api/QRCodeService.java | 4 - 4 files changed, 99 insertions(+), 66 deletions(-) diff --git a/api/src/main/java/com/sv/netty/controller/QREnterController.java b/api/src/main/java/com/sv/netty/controller/QREnterController.java index 3acb8c0..c31122c 100644 --- a/api/src/main/java/com/sv/netty/controller/QREnterController.java +++ b/api/src/main/java/com/sv/netty/controller/QREnterController.java @@ -35,7 +35,16 @@ public class QREnterController extends BaseApiController { Integer venueId = getVenueId(deviceId); String deviceName = getDeviceName(deviceId); DeviceType enterOrOut = getEnterOrOut(deviceId); - qrCodeService.enter(venueId,deviceName,enterOrOut,memberId); + Venue venue = qrCodeService.initEnter(venueId, deviceName); + if (venue!=null){ + if (DeviceType.OUT == enterOrOut){ + // 出场 + messageService.outVenue(deviceName,venueId,enterOrOut,memberId,venue); + }else{ + // 进场 + messageService.enterVenue(deviceName,venueId,enterOrOut,memberId,venue); + } + } return ResponseDTO.ok(); } @@ -58,6 +67,11 @@ public class QREnterController extends BaseApiController { } + /** + * 根据字符串获取场馆 + * @param deviceId + * @return + */ private Integer getVenueId(String deviceId){ String venueId = "0"; if (deviceId!=null && deviceId.contains(Constant.SPIT_WORD)){ @@ -70,6 +84,11 @@ public class QREnterController extends BaseApiController { } } + /** + * 根据字符串获取设备号 + * @param deviceId + * @return + */ private String getDeviceName(String deviceId){ if (deviceId!=null){ return deviceId.split(Constant.SPIT_WORD)[0]; @@ -77,6 +96,11 @@ public class QREnterController extends BaseApiController { return null; } + /** + * 根据字符串获取门禁类型 + * @param deviceId + * @return + */ private DeviceType getEnterOrOut(String deviceId){ DeviceType returnType = DeviceType.ENTER; if (deviceId!=null && deviceId.contains(Constant.SPIT_WORD)){ diff --git a/api/src/main/java/com/sv/netty/netty/service/MessageService.java b/api/src/main/java/com/sv/netty/netty/service/MessageService.java index 73628d4..4825134 100644 --- a/api/src/main/java/com/sv/netty/netty/service/MessageService.java +++ b/api/src/main/java/com/sv/netty/netty/service/MessageService.java @@ -1,6 +1,7 @@ package com.sv.netty.netty.service; import com.enums.DeviceType; +import com.sv.entity.Venue; import com.sv.netty.netty.message.HeartBeat; import io.netty.channel.Channel; @@ -37,4 +38,24 @@ public interface MessageService { Set countConnection(); boolean sendLoading(Channel channel, Integer memberId); + + /** + * 出场 + * @param deviceName + * @param venueId + * @param enterOrOut + * @param memberId + * @param venue + */ + void outVenue(String deviceName, Integer venueId, DeviceType enterOrOut, 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); } diff --git a/api/src/main/java/com/sv/netty/netty/service/impl/TcpMessageHandlerAdapter.java b/api/src/main/java/com/sv/netty/netty/service/impl/TcpMessageHandlerAdapter.java index a9b326e..78e48e0 100644 --- a/api/src/main/java/com/sv/netty/netty/service/impl/TcpMessageHandlerAdapter.java +++ b/api/src/main/java/com/sv/netty/netty/service/impl/TcpMessageHandlerAdapter.java @@ -1,11 +1,10 @@ package com.sv.netty.netty.service.impl; +import com.enums.DeviceType; import com.sv.dto.EnterResult; -import com.sv.entity.Device; import com.sv.entity.Member; import com.sv.entity.MemberEnterVenueLog; import com.sv.entity.Venue; -import com.sv.entity.face.FaceRecognizeResponse; import com.sv.netty.config.ClientChannelCache; import com.sv.netty.netty.message.HeartBeat; import com.sv.netty.netty.message.MessageDTO; @@ -56,24 +55,9 @@ public class TcpMessageHandlerAdapter implements MessageService { @Resource private MemberEnterVenueLogService memberEnterVenueLogService; - @Resource private RestTemplate restTemplate; -// public void sendMessage(MemberDto memberDto, Integer deviceId) { -// MessageDto messageDto = new MessageDto(); -// messageDto.setCmdId(Cmd.FACEID.id); -// messageDto.setResult(memberDto); -// logger.info("发送消息" + channels.size() + ";deviceId:" + deviceId); -// if (deviceId == 1) { -// if (enter != null) { -// enter.writeAndFlush(messageDto); -// } -// } else { -// out.writeAndFlush(messageDto); -// } -// } - /** * 处理心跳信息,存储心跳信息 * @param clientId @@ -136,17 +120,49 @@ public class TcpMessageHandlerAdapter implements MessageService { return false; } - private void sendMessage(Channel channel, MessageDTO messageDTO) { - channel.writeAndFlush(messageDTO); + + @Override + public void outVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue) { + Member member = memberService.findByMember(memberId); + if (member != null) { + //出场 不用判断直接出 + MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog(); + memberEnterVenueLog.setOrderSn(""); + memberEnterVenueLog.setType(1); + memberEnterVenueLog.setMemberId(member.getId()); +// memberEnterVenueLog.setVeneuType(device.getVenueType()); +// memberEnterVenueLog.setVenueId(device.getVenueId()); + memberEnterVenueLog.setPlatformId(member.getPlatformId()); + memberEnterVenueLogService.save(memberEnterVenueLog); + logger.info("用户" + member.getNickname() + "出场"); +// MemberDto memberMessageDto = new MemberDto(); +// memberMessageDto.setAmount(member.getMoney()); +// memberMessageDto.setName(member.getNickname()); +// memberMessageDto.setAvatar(member.getAvatar()); +// memberMessageDto.setMobile(member.getMobile()); +// memberMessageDto.setPlaceName(""); +// memberMessageDto.setMessage("欢迎下次再来" + venue.getName()); +// memberMessageDto.setCode(2); +// MessageDto messageDto = new MessageDto(); +// messageDto.setCmdId(Cmd.OPEN_DOOR.id); +// messageDto.setDoor(2); +// sendOpenMessage(messageDto, device.getId()); + // 校验玩就可以出场了 +// sendMessage(memberMessageDto, device.getId()); +// venueService.addNumber(venue.getId(), -1, member.getId()); +// venue = venueService.findById(venue.getId()); +// sendNumberChange(venue.getNumber()); + } } - public void enter(Device device, FaceRecognizeResponse response, Venue venue) { + @Override + public void enterVenue(String deviceName, Integer venueId, DeviceType enterOrOut, Integer memberId, Venue venue) { try { int code = 1; - Member member = memberService.findByFaceId(response.getPerson().getId()); + Member member = memberService.findByMember(memberId); if (member != null) { //最后进场记录 - MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLogNoType(member.getId(), device.getVenueId()); + MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLogNoType(member.getId(), venue.getId()); if (enterVenueLog != null) { //有记录 查看 最后一次是否是出场 if (enterVenueLog.getType() == 1) { @@ -155,7 +171,7 @@ public class TcpMessageHandlerAdapter implements MessageService { //是进场 Date date = new Date(); //本日连续进场次数 - int continuityEnterCount = memberEnterVenueLogService.countEnterByDate(member.getId(), device.getVenueId(), date); + int continuityEnterCount = memberEnterVenueLogService.countEnterByDate(member.getId(), venue.getId(), date); logger.info("连续进场次数:" + continuityEnterCount); //距离上次入场差多少秒 int differenceSeconds = (int) (date.getTime() - enterVenueLog.getCreatedTime().getTime()) / (1000); @@ -188,7 +204,7 @@ public class TcpMessageHandlerAdapter implements MessageService { // member = memberService.findByFaceId(response.getPerson().getId()); // memberMessageDto.setAmount(member.getMoney()); if (code > 0) { - EnterResult result = venueService.enterVenue(response.getPerson().getId(), device.getId()); + EnterResult result = venueService.enterVenue(memberId, venue.getId()); if (result.getStatus() >= 0) { // memberMessageDto.setCode(1); if (result.getStatus() == 1) { @@ -243,44 +259,20 @@ public class TcpMessageHandlerAdapter implements MessageService { } } - public void out(Device device, FaceRecognizeResponse response, Venue venue) { - Member member = memberService.findByFaceId(response.getPerson().getId()); - if (member != null) { - //出场 不用判断直接出 - MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog(); - memberEnterVenueLog.setOrderSn(""); - memberEnterVenueLog.setType(1); - memberEnterVenueLog.setMemberId(member.getId()); - memberEnterVenueLog.setVeneuType(device.getVenueType()); - memberEnterVenueLog.setVenueId(device.getVenueId()); - memberEnterVenueLog.setPlatformId(member.getPlatformId()); - memberEnterVenueLogService.save(memberEnterVenueLog); - logger.info("用户" + member.getNickname() + "出场"); -// MemberDto memberMessageDto = new MemberDto(); -// memberMessageDto.setAmount(member.getMoney()); -// memberMessageDto.setName(member.getNickname()); -// memberMessageDto.setAvatar(member.getAvatar()); -// memberMessageDto.setMobile(member.getMobile()); -// memberMessageDto.setPlaceName(""); -// memberMessageDto.setMessage("欢迎下次再来" + venue.getName()); -// memberMessageDto.setCode(2); -// MessageDto messageDto = new MessageDto(); -// messageDto.setCmdId(Cmd.OPEN_DOOR.id); -// messageDto.setDoor(2); -// sendOpenMessage(messageDto, device.getId()); - // 校验玩就可以出场了 -// sendMessage(memberMessageDto, device.getId()); - venueService.addNumber(venue.getId(), -1, member.getId()); -// venue = venueService.findById(venue.getId()); -// sendNumberChange(venue.getNumber()); - } + /** + * 给客户端发送信息 + * @param channel + * @param messageDTO + */ + private void sendMessage(Channel channel, MessageDTO messageDTO) { + channel.writeAndFlush(messageDTO); } -// /** -// * 控制硬件,门禁灯光控制 -// * @param number -// */ -// public void sendNumberChange(Integer number) { + /** + * 控制硬件,篮球馆的门禁灯光控制 + * @param number + */ + public void sendNumberChange(Integer number) { // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // MultiValueMap param = new LinkedMultiValueMap<>(); @@ -289,6 +281,6 @@ public class TcpMessageHandlerAdapter implements MessageService { // HttpEntity> request = new HttpEntity<>(param, headers); // ResponseEntity result = restTemplate.exchange("http://lingtek.jalasmart.com/api/v1/lingtek/number", HttpMethod.PUT, request, Result.class); // logger.info("灯光结果" + JsonMapper.nonDefaultMapper().toJson(result)); -// } + } } diff --git a/service/src/main/java/com/sv/service/api/QRCodeService.java b/service/src/main/java/com/sv/service/api/QRCodeService.java index 32aa947..979a42c 100644 --- a/service/src/main/java/com/sv/service/api/QRCodeService.java +++ b/service/src/main/java/com/sv/service/api/QRCodeService.java @@ -25,10 +25,6 @@ public class QRCodeService { @Resource private DeviceMapper deviceMapper; - public void enter(Integer venueId, String deviceName, DeviceType enterOrOut, Integer memberId) throws ServiceException{ - return; - } - public Venue initEnter(Integer venueId,String deviceName) { Integer integer = deviceMapper.checkDevice(deviceName, venueId); if (integer != 1){