新增判断用户是否在场内逻辑,新增清场功能,修改二维码多样性

This commit is contained in:
limqhz
2023-12-07 18:16:03 +08:00
parent b4f9663bb2
commit 3345c2b6f3
21 changed files with 498 additions and 111 deletions

View File

@@ -1,18 +1,13 @@
package com.sv.api.controller;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum;
import com.sv.dto.BarCodeResult;
import com.sv.entity.Barcode;
import com.sv.entity.Device;
import com.sv.entity.Venue;
import com.sv.mapper.BarcodeMapper;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.utils.AesUtil;
import com.sv.netty.utils.MakeCode;
import com.sv.service.api.VenueService;
import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil;
import com.sv.service.common.RedisCache;
import com.sv.service.oms.DeviceService;
import com.ydd.framework.core.common.Pagination;
import com.ydd.framework.core.common.dto.ResponseDTO;
@@ -20,12 +15,9 @@ import com.ydd.framework.core.controller.BaseApiController;
import com.ydd.framework.core.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* Controller - 场馆
@@ -41,6 +33,8 @@ public class VenueController extends BaseApiController {
@Resource
private VenueService venueService;
@Resource
private BarcodeService barcodeService;
@Resource
private DoorLockUtil doorLockUtil;
/**
@@ -117,23 +111,24 @@ public class VenueController extends BaseApiController {
*/
@RequestMapping(value = "/venue/join", method = RequestMethod.GET)
public ResponseDTO join(@RequestParam("venueId") Integer venueId) {
Device byDevice = deviceService.findByDevice(venueId);
BarCodeResult join = new BarCodeResult();
if (byDevice == null) {
join.setFlg(999);
join.setMsg("通讯异常,门禁设备离线中");
return ResponseDTO.ok().addAttribute("join", join);
}
String doorSn = byDevice.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
throw new ServiceException("有人正在使用门禁,请稍后再试");
}
Integer memberId = getMemberIdByAccessToken();
BarCodeResult join = venueService.join(memberId, venueId);
join = venueService.join(memberId, venueId);
if (join.getFlg() == 0) {
Device byDevice = deviceService.findByDevice(venueId);
if (byDevice == null) {
join.setFlg(999);
join.setMsg("通讯异常,门禁设备离线中");
}else {
String doorSn = byDevice.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
throw new ServiceException("有人正在使用门禁,请稍后再试");
}
String barcode = newBarcode(doorSn, EnterEnum.ENTER, venueId, memberId);
join.setBarcode(barcode);
doorLockUtil.lockDoor(doorSn);
}
String barcode = barcodeService.newBarcode(doorSn, EnterEnum.ENTER, venueId, memberId);
join.setBarcode(barcode);
doorLockUtil.lockDoor(doorSn);
}
return ResponseDTO.ok().addAttribute("join", join);
}
@@ -146,45 +141,26 @@ public class VenueController extends BaseApiController {
*/
@RequestMapping(value = "/venue/out", method = RequestMethod.GET)
public ResponseDTO out(@RequestParam("venueId") Integer venueId) {
Device byDevice = deviceService.findByDevice(venueId);
BarCodeResult out = new BarCodeResult();
if (byDevice == null) {
out.setFlg(999);
out.setMsg("通讯异常,门禁设备离线中");
return ResponseDTO.ok().addAttribute("out", out);
}
String doorSn = byDevice.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
throw new ServiceException("有人正在使用门禁,请稍后再试");
}
Integer memberId = getMemberIdByAccessToken();
BarCodeResult out = venueService.out(memberId, venueId);
out = venueService.out(memberId, venueId);
if (out.getFlg() == 0) {
Device byDevice = deviceService.findByDevice(venueId);
if (byDevice == null) {
out.setFlg(999);
out.setMsg("通讯异常,门禁设备离线中");
}else {
String doorSn = byDevice.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
throw new ServiceException("有人正在使用门禁,请稍后再试");
}
String barcode = newBarcode(doorSn,EnterEnum.OUT,venueId,memberId);
out.setBarcode(barcode);
doorLockUtil.lockDoor(doorSn);
}
String barcode = barcodeService.newBarcode(doorSn,EnterEnum.OUT,venueId,memberId);
out.setBarcode(barcode);
doorLockUtil.lockDoor(doorSn);
}
return ResponseDTO.ok().addAttribute("out", out);
}
private String newBarcode (String deviceName,EnterEnum enterEnum,Integer venueId,Integer memberId){
String barcode = "";
Barcode res = barcodeMapper.findBarcode(venueId, memberId);
if (res == null) {
barcode = MakeCode.makeCode(venueId, memberId, deviceName, enterEnum.getValue() + "");
Barcode b = new Barcode();
logger.info("用户扫码【" + memberId + "$" + venueId + "】生成二维码为" + barcode);
b.setBarcode(barcode);
b.setStatus(BarCodeStatusEnum.INIT.getValue());
b.setMemberId(memberId);
b.setVenueId(venueId);
b.setEnter(enterEnum.getValue());
barcodeMapper.insert(b);
}else {
barcode = res.getBarcode();
}
return barcode;
}
}

View File

@@ -2,6 +2,7 @@ package com.sv.netty.netty.service.impl;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum;
import com.enums.EnterVenuePayTypeEnum;
import com.sv.entity.*;
import com.sv.mapper.BarcodeEnterLogMapper;
import com.sv.mapper.BarcodeMapper;
@@ -131,19 +132,16 @@ public class ServerMessageHandlerAdapter implements MessageService {
Channel channel = getCurrentChannel(doorSn,venueBarCode.getVenueId());
Member member = memberService.findByMember(venueBarCode.getMemberId());
if (member != null) {
MemberMoneyLog memberMoneyLog = memberMoneyLogService.selectLastLog(member.getId(), venueBarCode.getVenueId());
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
memberEnterVenueLog.setOrderSn(barcode);
memberEnterVenueLog.setType(EnterEnum.OUT.getValue());
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
if (memberMoneyLog != null) {
memberEnterVenueLog.setPayType(memberMoneyLog.getPayType());
}
memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn);
logger.info("用户" + member.getNickname() + "出场");
logger.info("用户" + member.getId() + "&" + member.getNickname() + "出场");
writeOffCode(barcode);
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK"));
}
@@ -177,6 +175,7 @@ public class ServerMessageHandlerAdapter implements MessageService {
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn);
writeOffCode(barcode);
@@ -246,6 +245,10 @@ public class ServerMessageHandlerAdapter implements MessageService {
logger.error("有人正在操作,请稍后再试!!!");
throw new ServiceException("有人正在操作,请稍后再试!!!");
}
int i = barcodeEnterLogMapper.countTimesByBarcode(barcode);
if (i >= 6) {
throw new ServiceException("线下进场太过频繁,请重新下单!该二维码已经失效!");
}
BarcodeEnterLog lastByBarcode = barcodeEnterLogMapper.findLastByBarcode(barcode);
Integer venueId = barcodeOffline.getVenueId();
Channel channel = getCurrentChannel(doorSn, venueId);

View File

@@ -2,32 +2,18 @@ package com.sv.wx;
import com.WeiXinApplication;
import com.enums.EnterEnum;
import com.enums.VenueTypeEnum;
import com.sv.dto.BarCodeResult;
import com.sv.entity.*;
import com.sv.mapper.WxConfigMapper;
import com.sv.netty.config.MessageType;
import com.sv.netty.config.VenueMessage;
import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils;
import com.sv.netty.utils.ServerMessageUtils;
import com.sv.service.api.MemberEnterVenueLogService;
import com.sv.service.api.MemberService;
import com.sv.service.api.VenueLessonService;
import com.sv.service.api.VenueService;
import com.sv.service.api.util.DateUtilCard;
import com.sv.service.message.SendMsg;
import com.sv.service.message.WeiXinSendUtils;
import com.ydd.oms.entity.sys.WxConfig;
import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes={WeiXinApplication.class})
@@ -36,33 +22,44 @@ public class VenueJoinTest {
@Resource
VenueService venueService;
@Resource
MemberService memberService;
MessageService messageService;
@Resource
MemberEnterVenueLogService memberEnterVenueLogService;
BarcodeService barcodeService;
@Resource
DoorLockUtil doorLockUtil;
@Test
public void testJoin(){
BarCodeResult join = venueService.join(535, 32);
System.out.println(JsonUtils.encode(join));
Member member = memberService.findById(535);
if (member != null) {
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
memberEnterVenueLog.setOrderSn("barcode");
memberEnterVenueLog.setType(EnterEnum.ENTER.getValue());
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(32);
memberEnterVenueLogService.save(memberEnterVenueLog);
if (join.getFlg() == 0) {
String barcode = barcodeService.newBarcode("doorSn", EnterEnum.ENTER, 32, 535);
System.err.println("入场的二维码为:" + barcode);
join.setBarcode(barcode);
doorLockUtil.lockDoor("doorSn");
}
}
@Test
public void enterVenue() {
messageService.enterVenue("oC+Smw+mDDsDSXP/RhHQXvm8I4mobxXZXN621ia2gKE=");
}
@Test
public void testOut(){
BarCodeResult out = venueService.out(535, 32);
System.out.println(JsonUtils.encode(out));
if (out.getFlg() == 0) {
String barcode = barcodeService.newBarcode("doorSn", EnterEnum.OUT, 32, 535);
System.err.println("出场的二维码为:" + barcode);
out.setBarcode(barcode);
doorLockUtil.lockDoor("doorSn");
}
}
@Test
public void outVenue() {
messageService.outVenue("oC+Smw+mDDsDSXP/RhHQXvE3OTXb2IAZ8Zo8MwN8dnI=");
}
}