fix - 篮球入场出场逻辑优化、丢弃二维码的逻辑

This commit is contained in:
2026-06-13 17:30:00 +08:00
parent 81bf02794c
commit 8cfe0ef7d8
17 changed files with 111 additions and 738 deletions

View File

@@ -7,10 +7,10 @@ import com.sv.dto.api.BasketballPayResult;
import com.sv.entity.Device; import com.sv.entity.Device;
import com.sv.entity.Order; import com.sv.entity.Order;
import com.sv.entity.Venue; import com.sv.entity.Venue;
import com.sv.netty.netty.service.MessageService;
import com.sv.service.api.OrderService; import com.sv.service.api.OrderService;
import com.sv.service.api.VenueEnterService; import com.sv.service.api.VenueEnterService;
import com.sv.service.api.VenueService; import com.sv.service.api.VenueService;
import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil; import com.sv.service.common.DoorLockUtil;
import com.sv.service.oms.DeviceService; import com.sv.service.oms.DeviceService;
import com.ydd.framework.core.annotation.AccessToken; import com.ydd.framework.core.annotation.AccessToken;
@@ -42,11 +42,11 @@ public class VenueController extends BaseApiController {
@Resource @Resource
private VenueEnterService venueEnterService; private VenueEnterService venueEnterService;
@Resource @Resource
private BarcodeService barcodeService;
@Resource
private DoorLockUtil doorLockUtil; private DoorLockUtil doorLockUtil;
@Resource @Resource
DeviceService deviceService; DeviceService deviceService;
@Resource
MessageService messageService;
/** /**
* 分页查询场馆列表 * 分页查询场馆列表
@@ -117,6 +117,7 @@ public class VenueController extends BaseApiController {
* @param orderSn 订单号 * @param orderSn 订单号
* @return * @return
*/ */
@Deprecated
@RequestMapping(value = "/member/isPayed", method = RequestMethod.POST) @RequestMapping(value = "/member/isPayed", method = RequestMethod.POST)
public ResponseDTO isPayed(@RequestParam("orderSn") String orderSn) { public ResponseDTO isPayed(@RequestParam("orderSn") String orderSn) {
Integer memberId = getMemberIdByAccessToken(); Integer memberId = getMemberIdByAccessToken();
@@ -203,17 +204,42 @@ public class VenueController extends BaseApiController {
throw new ServiceException("门禁通讯异常"); throw new ServiceException("门禁通讯异常");
} }
String doorSn = byDevice.getName(); String doorSn = byDevice.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
throw new ServiceException("有人正在使用门禁,请稍后再试");
}
EnterEnum enterEnum = EnterEnum.OUT; EnterEnum enterEnum = EnterEnum.OUT;
if (enterFlag != null) { if (enterFlag != null) {
enterEnum = EnterEnum.getByValue(enterFlag); enterEnum = EnterEnum.getByValue(enterFlag);
} }
String barcode = barcodeService.newBarcode(doorSn,orderSn,enterEnum,venueId,memberId); // 这里应该是直接开门
logger.info("[生成二维码] 成功 memberId={}, barcode={}", memberId, barcode); if (EnterEnum.OUT.equals(enterEnum)) {
return ResponseDTO.ok().addAttribute("barcode", barcode); messageService.outVenue(memberId, venueId, doorSn);
}else {
messageService.enterVenue(memberId, venueId, doorSn);
}
return ResponseDTO.ok();
}
/**
* 检验客户端读取能力
* @return
*/
@RequestMapping("/user/check/barcode")
public ResponseDTO uploadLog(@RequestParam("code") String code) {
// code = code.substring(1,code.length()-1);
// String offline = MakeCode.decodeOfflineCode(code);
// logger.info("[核销二维码] code={}, isOffline={}", code, offline.startsWith("venue-"));
// if (offline.startsWith("venue-")) {
// messageService.offlineOpenDoor(code);
// } else {
// VenueBarCode venueBarCode = MakeCode.decodeCode(code);
// logger.info("[核销二维码] 解析结果: memberId={}, venueId={}, direction={}, deviceName={}",
// venueBarCode.getMemberId(), venueBarCode.getVenueId(),
// venueBarCode.getDirection(), venueBarCode.getDeviceName());
// if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) {
// messageService.enterVenue(code);
// } else {
// messageService.outVenue(code);
// }
// }
return ResponseDTO.ok();
} }
/** /**
@@ -261,14 +287,15 @@ public class VenueController extends BaseApiController {
return ResponseDTO.ok().addAttribute("memberEnterDetail",venueEnterService.memberOrderEnterDetail(getMemberIdByAccessToken(),enterId)); return ResponseDTO.ok().addAttribute("memberEnterDetail",venueEnterService.memberOrderEnterDetail(getMemberIdByAccessToken(),enterId));
} }
/** // /**
* 判断是否支付成功 // * 判断是否支付成功
* @param barcode 订单号 // * @param barcode 订单号
* @return // * @return
*/ // */
@RequestMapping(value = "/member/barcode/isUsed", method = RequestMethod.POST) // @Deprecated
public ResponseDTO isUsed(@RequestParam("barcode") String barcode) { // @RequestMapping(value = "/member/barcode/isUsed", method = RequestMethod.POST)
return ResponseDTO.ok().addAttribute("barcodeDTO", barcodeService.isUsed(barcode)); // public ResponseDTO isUsed(@RequestParam("barcode") String barcode) {
} // return ResponseDTO.ok().addAttribute("barcodeDTO", barcodeService.isUsed(barcode));
// }
} }

View File

@@ -1,30 +1,18 @@
package com.sv.netty.controller; package com.sv.netty.controller;
import com.enums.DeviceStatusEnum; import com.enums.DeviceStatusEnum;
import com.enums.EnterEnum;
import com.sv.entity.Device; import com.sv.entity.Device;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.config.VenueBarCode;
import com.sv.netty.config.VenueMessage;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils;
import com.sv.netty.utils.MakeCode;
import com.sv.service.common.DoorLockUtil;
import com.sv.service.oms.DeviceService; import com.sv.service.oms.DeviceService;
import com.sv.service.utils.VenueBarcodeUtil;
import com.ydd.framework.core.common.dto.ResponseDTO; import com.ydd.framework.core.common.dto.ResponseDTO;
import com.ydd.framework.core.controller.BaseApiController; import com.ydd.framework.core.controller.BaseApiController;
import com.ydd.framework.core.exception.ServiceException; import com.ydd.framework.core.exception.ServiceException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import java.io.FileOutputStream;
import java.io.*;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@@ -40,8 +28,6 @@ public class AdminNettyController extends BaseApiController {
DeviceService deviceService; DeviceService deviceService;
@Resource @Resource
private MessageService messageService; private MessageService messageService;
@Resource
DoorLockUtil doorLockUtil;
/** /**
* 进场指令发布 * 进场指令发布
*/ */
@@ -58,31 +44,6 @@ public class AdminNettyController extends BaseApiController {
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
/**
* 检验客户端读取能力
* @return
*/
@RequestMapping("/user/check/barcode")
public ResponseDTO uploadLog(@RequestParam("code") String code) {
code = code.substring(1,code.length()-1);
String offline = MakeCode.decodeOfflineCode(code);
logger.info("[核销二维码] code={}, isOffline={}", code, offline.startsWith("venue-"));
if (offline.startsWith("venue-")) {
messageService.offlineOpenDoor(code);
} else {
VenueBarCode venueBarCode = MakeCode.decodeCode(code);
logger.info("[核销二维码] 解析结果: memberId={}, venueId={}, direction={}, deviceName={}",
venueBarCode.getMemberId(), venueBarCode.getVenueId(),
venueBarCode.getDirection(), venueBarCode.getDeviceName());
if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) {
messageService.enterVenue(code);
} else {
messageService.outVenue(code);
}
}
return ResponseDTO.ok();
}
@RequestMapping(value = "/admin/out/{id}", method = RequestMethod.POST) @RequestMapping(value = "/admin/out/{id}", method = RequestMethod.POST)
public ResponseDTO out(@PathVariable("id") Integer id) { public ResponseDTO out(@PathVariable("id") Integer id) {
Device device = deviceService.findById(id); Device device = deviceService.findById(id);
@@ -96,42 +57,6 @@ public class AdminNettyController extends BaseApiController {
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
private Integer getVenueId(String deviceId){
String venueId = "0";
if (deviceId!=null && deviceId.contains(NettyConstant.SPIT_WORD)){
venueId = deviceId.split(NettyConstant.SPIT_WORD)[1];
}
try {
return Integer.parseInt(venueId);
}catch (Exception e){
return 0;
}
}
private String getDeviceName(String deviceId){
if (deviceId!=null){
return deviceId.split(NettyConstant.SPIT_WORD)[0];
}
return null;
}
/**
* 检验客户端读取能力
* @return
*/
@RequestMapping("/checkAlive/{id}")
public ResponseDTO checkAlive(@PathVariable("id") Integer id) {
Device device = deviceService.findById(id);
if (device == null){
throw new ServiceException("设备不存在");
}
if (!DeviceStatusEnum.ONLINE.value.equals(device.getStatus())){
throw new ServiceException("设备离线!请检查连接");
}
messageService.testLoad(device.getName(),device.getVenueId());
return ResponseDTO.ok();
}
/** /**
* 检验客户端读取能力 * 检验客户端读取能力
* @return * @return
@@ -183,82 +108,4 @@ public class AdminNettyController extends BaseApiController {
} }
} }
/**
* 下载线下入场凭证(二维码)
* @param id
* @param response
* @throws IOException
* @throws InvalidFormatException
*/
@RequestMapping(value = "/qrcode/print/{id}")
public void print(@PathVariable("id") Integer id, HttpServletResponse response) throws IOException, InvalidFormatException {
Device device = deviceService.findById(id);
if (device == null){
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write("设备不存在!!!");
writer.flush();
writer.close();
return;
}
String doorSn = device.getName();
if(doorLockUtil.checkBarcode(doorSn)){
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write("生成二维码过于频繁,请稍候再试!!!");
writer.flush();
writer.close();
return;
}
long l = System.currentTimeMillis();
String barcodeSn = "venue-" + l;
String barcode = MakeCode.makeOfflineCode(barcodeSn);
deviceService.makeDeviceBarcode(device.getName(),device.getVenueId(),barcode);
logger.info("[线下二维码] 生成 doorSn={}, venueId={}, barcodeSn={}", doorSn, device.getVenueId(), barcodeSn);
String documentPath = getDocument(barcode,barcodeSn);
response.setHeader("Content-disposition","attachment; filename=" + barcodeSn + ".docx");
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(documentPath));
try {
byte[] content = new byte[1024];
int length;
while ((length = fin.read(content, 0, content.length)) != -1) {
out.write(content, 0, length);
}
doorLockUtil.lockBarcode(doorSn);
} catch (Exception e) {
logger.error("[线下二维码] 下载失败 doorSn={}", doorSn, e);
throw e;
} finally {
fin.close();
out.flush();
out.close();
}
}
private static String getDocument(String barcode, String barcodeSn) throws IOException, InvalidFormatException {
String newFilePath = "/home/test/" + barcodeSn + ".docx";
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun run = paragraph.createRun();
run.setText("订单号:" + barcodeSn);
run.addBreak();
run.setText("二维码使用有效期为2小时请及时离场");
run.addBreak();
String imgFile = VenueBarcodeUtil.generateBarcode(barcode,barcodeSn + ".jpg");
int imgFormat = XWPFDocument.PICTURE_TYPE_JPEG;
run.addPicture(new FileInputStream(imgFile), imgFormat, "image description",
Units.toEMU(200), Units.toEMU(200));
document.write(new FileOutputStream(newFilePath));
document.close();
return newFilePath;
}
} }

View File

@@ -1,12 +1,12 @@
package com.sv.netty.netty; package com.sv.netty.netty;
import com.enums.EnterEnum;
import com.sv.netty.config.*; import com.sv.netty.config.*;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.AesUtil;
import com.sv.netty.utils.JsonUtils; import com.sv.netty.utils.JsonUtils;
import com.sv.netty.utils.MakeCode; import io.netty.channel.Channel;
import io.netty.channel.*; import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent; import io.netty.handler.timeout.IdleStateEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -66,21 +66,21 @@ public class ServerHandler extends SimpleChannelInboundHandler<String> {
ctx.channel().attr(NettyConstant.CHANNEL_PARAM).get().setDeviceName(hb.getDeviceName()); ctx.channel().attr(NettyConstant.CHANNEL_PARAM).get().setDeviceName(hb.getDeviceName());
messageService.online(clientIp,ctx.channel(), hb); messageService.online(clientIp,ctx.channel(), hb);
break; break;
case SCAN_CODE: // case SCAN_CODE:
logger.info("客户端【" + clientIp + "】开门了..."); // logger.info("客户端【" + clientIp + "】开门了...");
String offline = MakeCode.decodeOfflineCode(message.getMessage()); // String offline = MakeCode.decodeOfflineCode(message.getMessage());
if (offline.startsWith("venue-")) { // if (offline.startsWith("venue-")) {
// 这是线下开门的逻辑 // // 这是线下开门的逻辑
messageService.offlineOpenDoor(message.getMessage()); // messageService.offlineOpenDoor(message.getMessage());
} else { // } else {
VenueBarCode venueBarCode = MakeCode.decodeCode(message.getMessage()); // VenueBarCode venueBarCode = MakeCode.decodeCode(message.getMessage());
if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) { // if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) {
messageService.enterVenue(message.getMessage()); // messageService.enterVenue(message.getMessage());
} else { // } else {
messageService.outVenue(message.getMessage()); // messageService.outVenue(message.getMessage());
} // }
} // }
break; // break;
default: default:
logger.info( "default"); logger.info( "default");
} }

View File

@@ -36,16 +36,14 @@ public interface MessageService {
*/ */
Set<String> countConnection(); Set<String> countConnection();
/** /**
* 出场 * 篮球出场
* @param barcode
*/ */
void outVenue(String barcode); void outVenue(Integer memberId, Integer venueId, String doorSn);
/** /**
* 进场 * 篮球进场
* @param barcode
*/ */
void enterVenue(String barcode); void enterVenue(Integer memberId, Integer venueId, String doorSn);
/** /**
* 足球场开门逻辑 * 足球场开门逻辑
@@ -58,9 +56,6 @@ public interface MessageService {
public void adminOut(String deviceName, Integer venueId); public void adminOut(String deviceName, Integer venueId);
void testLoad(String deviceName, Integer venueId);
void uploadLog(String deviceName, Integer venueId); void uploadLog(String deviceName, Integer venueId);
void offlineOpenDoor(String message);
} }

View File

@@ -1,17 +1,16 @@
package com.sv.netty.netty.service.impl; package com.sv.netty.netty.service.impl;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum; import com.enums.EnterEnum;
import com.enums.EnterVenuePayTypeEnum; import com.enums.EnterVenuePayTypeEnum;
import com.sv.entity.*; import com.sv.entity.*;
import com.sv.mapper.*; import com.sv.mapper.*;
import com.sv.netty.config.*; import com.sv.netty.config.HeartBeat;
import com.sv.netty.config.MessageType;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.config.VenueMessage;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils;
import com.sv.netty.utils.MakeCode;
import com.sv.netty.utils.ServerMessageUtils; import com.sv.netty.utils.ServerMessageUtils;
import com.sv.service.api.MemberEnterVenueLogService; import com.sv.service.api.MemberEnterVenueLogService;
import com.sv.service.api.MemberMoneyLogService;
import com.sv.service.api.MemberService; import com.sv.service.api.MemberService;
import com.sv.service.api.VenueService; import com.sv.service.api.VenueService;
import com.sv.service.common.DoorLockUtil; import com.sv.service.common.DoorLockUtil;
@@ -27,7 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.Date;
import java.util.Set;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
/** /**
* 消息实现类 * 消息实现类
@@ -54,17 +54,9 @@ public class ServerMessageHandlerAdapter implements MessageService {
@Resource @Resource
private MemberEnterVenueLogService memberEnterVenueLogService; private MemberEnterVenueLogService memberEnterVenueLogService;
@Resource
private BarcodeMapper barcodeMapper;
@Resource @Resource
private DoorLockUtil doorLockUtil; private DoorLockUtil doorLockUtil;
@Resource
private BarcodeOfflineMapper barcodeOfflineMapper;
@Resource
private BarcodeEnterLogMapper barcodeEnterLogMapper;
@Resource @Resource
private BarcodeOrderTimeMapper barcodeOrderTimeMapper; private BarcodeOrderTimeMapper barcodeOrderTimeMapper;
@@ -173,42 +165,28 @@ public class ServerMessageHandlerAdapter implements MessageService {
} }
/** /**
* 核销扫码出场逻辑 * 核销篮球出场逻辑
* @param barcode
*/ */
@Override @Override
@Transactional @Transactional
public void outVenue(String barcode) { public void outVenue(Integer memberId, Integer venueId, String doorSn) {
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode); logger.info("[篮球出场] 开始处理 memberId={}, venueId={} ",memberId,venueId);
String doorSn = venueBarCode.getDeviceName(); Channel channel = getCurrentChannel(doorSn,venueId);
logger.info("[扫码出场] 开始处理 memberId={}, venueId={}, deviceName={}",
venueBarCode.getMemberId(), venueBarCode.getVenueId(), doorSn);
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
logger.error("[扫码出场] 门锁被占用 doorSn={}", doorSn);
throw new ServiceException("有人正在操作,请稍后再出场!!!");
}
barcode = MakeCode.reWriteBarcode(barcode);
if (!checkBarcode(barcode)){
logger.error("[扫码出场] 二维码已使用 barcode={}", barcode);
throw new ServiceException("二维码已经使用");
}
Channel channel = getCurrentChannel(doorSn,venueBarCode.getVenueId());
if (channel == null) { if (channel == null) {
logger.error("[扫码出场] 门禁离线 doorSn={}, venueId={}", doorSn, venueBarCode.getVenueId()); logger.error("[篮球出场] 门禁离线 doorSn={}, venueId={}", doorSn, venueId);
throw new ServiceException("门禁异常离线中"); throw new ServiceException("门禁异常离线中");
} }
Member member = memberService.findByMember(venueBarCode.getMemberId()); Member member = memberService.findByMember(memberId);
if (member != null) { if (member != null) {
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId()); BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueId);
if (lastOrder == null) { if (lastOrder == null) {
logger.error("[扫码出场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueBarCode.getVenueId()); logger.error("[篮球出场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueId);
throw new ServiceException("未找到入场订单"); throw new ServiceException("未找到入场订单");
} }
lastOrder.setLastOut(new Date()); lastOrder.setLastOut(new Date());
if (lastOrder.getPayMoney() != null && lastOrder.getPayMoney().compareTo(java.math.BigDecimal.ZERO) > 0) { if (lastOrder.getPayMoney() != null && lastOrder.getPayMoney().compareTo(java.math.BigDecimal.ZERO) > 0) {
lastOrder.setModifiedTime(new Date()); lastOrder.setModifiedTime(new Date());
logger.info("[扫码出场] 有退款金额 orderSn={}, payMoney={}", lastOrder.getOrderSn(), lastOrder.getPayMoney()); logger.info("[篮球出场] 有退款金额 orderSn={}, payMoney={}", lastOrder.getOrderSn(), lastOrder.getPayMoney());
} }
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder); barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog(); MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
@@ -217,49 +195,36 @@ public class ServerMessageHandlerAdapter implements MessageService {
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue()); memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLog.setMemberId(member.getId()); memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId()); memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId()); memberEnterVenueLog.setVenueId(venueId);
memberEnterVenueLogService.save(memberEnterVenueLog); memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn); doorLockUtil.lockDoor(doorSn);
logger.info("[扫码出场] 成功 memberId={}, nickname={}, orderSn={}, venueId={}", logger.info("[篮球出场] 成功 memberId={}, mobile={}, orderSn={}, venueId={}",
member.getId(), member.getNickname(), lastOrder.getOrderSn(), venueBarCode.getVenueId()); member.getId(), member.getMobile(), lastOrder.getOrderSn(), venueId);
writeOffCode(barcode);
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK")); ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK"));
} else { } else {
logger.error("[扫码出场] 用户不存在 memberId={}", venueBarCode.getMemberId()); logger.error("[篮球出场] 用户不存在 memberId={}", memberId);
throw new ServiceException("用户不存在,请登录");
} }
} }
/** /**
* 核销扫码进场逻辑 * 核销篮球进场逻辑
* @param barcode
*/ */
@Override @Override
@Transactional @Transactional
public void enterVenue(String barcode) { public void enterVenue(Integer memberId, Integer venueId, String doorSn) {
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode); logger.info("[篮球入场] 开始处理 memberId={}, venueId={}, deviceName={}",
String doorSn = venueBarCode.getDeviceName(); memberId, venueId, doorSn);
logger.info("[扫码入场] 开始处理 memberId={}, venueId={}, deviceName={}", Channel channel = getCurrentChannel(doorSn, venueId);
venueBarCode.getMemberId(), venueBarCode.getVenueId(), doorSn);
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
logger.error("[扫码入场] 门锁被占用 doorSn={}", doorSn);
throw new ServiceException("有人正在操作,请稍后再试");
}
barcode = MakeCode.reWriteBarcode(barcode);
if (!checkBarcode(barcode)){
logger.error("[扫码入场] 二维码已使用 barcode={}", barcode);
throw new ServiceException("二维码已经使用");
}
Channel channel = getCurrentChannel(doorSn, venueBarCode.getVenueId());
if (channel == null) { if (channel == null) {
logger.error("[扫码入场] 门禁离线 doorSn={}, venueId={}", doorSn, venueBarCode.getVenueId()); logger.error("[篮球入场] 门禁离线 doorSn={}, venueId={}", doorSn, venueId);
throw new ServiceException("门禁异常离线中"); throw new ServiceException("门禁异常离线中");
} }
Member member = memberService.findByMember(venueBarCode.getMemberId()); Member member = memberService.findByMember(memberId);
if (member != null) { if (member != null) {
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId()); BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueId);
if (lastOrder == null) { if (lastOrder == null) {
logger.error("[扫码入场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueBarCode.getVenueId()); logger.error("[篮球入场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueId);
throw new ServiceException("未找到入场订单"); throw new ServiceException("未找到入场订单");
} }
lastOrder.setLastEnter(new Date()); lastOrder.setLastEnter(new Date());
@@ -270,53 +235,24 @@ public class ServerMessageHandlerAdapter implements MessageService {
memberEnterVenueLog.setType(EnterEnum.ENTER.getValue()); memberEnterVenueLog.setType(EnterEnum.ENTER.getValue());
memberEnterVenueLog.setMemberId(member.getId()); memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId()); memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId()); memberEnterVenueLog.setVenueId(venueId);
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue()); memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLogService.save(memberEnterVenueLog); memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn); doorLockUtil.lockDoor(doorSn);
writeOffCode(barcode); logger.info("[篮球入场] 成功 memberId={}, mobile={}, orderSn={}, venueId={}",
logger.info("[扫码入场] 成功 memberId={}, nickname={}, orderSn={}, venueId={}", member.getId(), member.getMobile(), lastOrder.getOrderSn(), venueId);
member.getId(), member.getNickname(), lastOrder.getOrderSn(), venueBarCode.getVenueId());
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.ENTER_DOOR,"OK")); ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.ENTER_DOOR,"OK"));
} else { } else {
logger.error("[扫码入场] 用户不存在 memberId={}", venueBarCode.getMemberId()); logger.error("[篮球入场] 用户不存在 memberId={}", memberId);
throw new ServiceException("用户不存在,请登录");
} }
} }
private boolean checkBarcode(String barcode) {
Barcode code = barcodeMapper.checkCodeStatus(barcode);
if (code == null) {
logger.error("[二维码校验] 二维码不存在 barcode={}", barcode);
throw new ServiceException("二维码不存在或者已经被使用");
}
if (BarCodeStatusEnum.INIT.getValue()==code.getStatus()){
return true;
}
logger.warn("[二维码校验] 二维码状态异常 barcode={}, status={}", barcode, code.getStatus());
return false;
}
private void writeOffCode(String barcode) {
barcodeMapper.writeOffCode(barcode);
}
@Override @Override
public Set<String> countConnection() { public Set<String> countConnection() {
return links.keySet(); return links.keySet();
} }
/**
* 测试客户端连接
* @return
*/
@Override
public void testLoad(String deviceName, Integer venueId) {
Channel currentChannel = getCurrentChannel(deviceName, venueId);
ServerMessageUtils.INSTANCE.sendMsg(currentChannel,new VenueMessage(MessageType.HB,"测试链接"));
logger.info("[连接测试] deviceName={}, venueId={}", deviceName, venueId);
}
/** /**
* 测试客户端连接 * 测试客户端连接
* @return * @return
@@ -328,56 +264,6 @@ public class ServerMessageHandlerAdapter implements MessageService {
logger.info("[上传日志] 指令已发送 deviceName={}, venueId={}", deviceName, venueId); logger.info("[上传日志] 指令已发送 deviceName={}, venueId={}", deviceName, venueId);
} }
/**
* 线下订单
*/
@Override
public void offlineOpenDoor(String message) {
String barcode = MakeCode.reWriteBarcode(message);
BarcodeOffline barcodeOffline = barcodeOfflineMapper.selectByBarcode(barcode);
String doorSn = barcodeOffline.getDeviceName();
Date endTime = barcodeOffline.getEndTime();
if (endTime.before(new Date())) {
logger.error("[线下开门] 二维码已失效 barcode={}, endTime={}", barcode, endTime);
throw new ServiceException("二维码已经失效,无法继续使用");
}
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
logger.error("[线下开门] 门锁被占用 doorSn={}", doorSn);
throw new ServiceException("有人正在操作,请稍后再试!!!");
}
int i = barcodeEnterLogMapper.countTimesByBarcode(barcode);
if (i >= 6) {
logger.warn("[线下开门] 进场过于频繁 barcode={}, count={}", barcode, i);
throw new ServiceException("线下进场太过频繁,请重新下单!该二维码已经失效!");
}
BarcodeEnterLog lastByBarcode = barcodeEnterLogMapper.findLastByBarcode(barcode);
Integer venueId = barcodeOffline.getVenueId();
Channel channel = getCurrentChannel(doorSn, venueId);
if (lastByBarcode != null && EnterEnum.ENTER.getValue().equals(lastByBarcode.getType())) {
//出场
BarcodeEnterLog barcodeEnterLog = new BarcodeEnterLog();
barcodeEnterLog.setBarcode(barcode);
barcodeEnterLog.setType(EnterEnum.OUT.getValue());
barcodeEnterLog.setVenueId(venueId);
barcodeEnterLog.setPlatformId(1);
barcodeEnterLogMapper.insert(barcodeEnterLog);
doorLockUtil.lockDoor(doorSn);
logger.info("[线下开门] 出场成功 doorSn={}, venueId={}", doorSn, venueId);
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK"));
return;
}
BarcodeEnterLog barcodeEnterLog = new BarcodeEnterLog();
barcodeEnterLog.setBarcode(barcode);
barcodeEnterLog.setType(EnterEnum.ENTER.getValue());
barcodeEnterLog.setVenueId(venueId);
barcodeEnterLog.setPlatformId(1);
barcodeEnterLogMapper.insert(barcodeEnterLog);
doorLockUtil.lockDoor(doorSn);
logger.info("[线下开门] 入场成功 doorSn={}, venueId={}", doorSn, venueId);
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.ENTER_DOOR,"OK"));
}
/** /**
* 管理员入场 * 管理员入场
* @return * @return

View File

@@ -1,39 +0,0 @@
package com.sv.wx;
import com.WeiXinApplication;
import com.enums.EnterEnum;
import com.enums.VenueTypeEnum;
import com.sv.entity.Constants;
import com.sv.entity.Venue;
import com.sv.entity.VenueLesson;
import com.sv.mapper.WxConfigMapper;
import com.sv.service.api.VenueLessonService;
import com.sv.service.api.VenueService;
import com.sv.service.api.util.DateUtilCard;
import com.sv.service.common.BarcodeService;
import com.sv.service.message.SendMsg;
import com.sv.service.message.WeiXinSendUtils;
import com.ydd.oms.entity.sys.WxConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes={WeiXinApplication.class})
public class MakeBarcodeTest {
@Resource
BarcodeService barcodeService;
@Test
public void testTask(){
barcodeService.newBarcode("123123","2312313123", EnterEnum.ENTER, 1, 1);
}
}

View File

@@ -1,15 +1,9 @@
package com.sv.wx; package com.sv.wx;
import com.WeiXinApplication; import com.WeiXinApplication;
import com.enums.EnterEnum;
import com.sv.dto.BasketEnterResult;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils;
import com.sv.service.api.VenueEnterService; import com.sv.service.api.VenueEnterService;
import com.sv.service.api.VenueService;
import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil; import com.sv.service.common.DoorLockUtil;
import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
@@ -25,40 +19,8 @@ public class VenueJoinTest {
@Resource @Resource
MessageService messageService; MessageService messageService;
@Resource @Resource
BarcodeService barcodeService;
@Resource
DoorLockUtil doorLockUtil; DoorLockUtil doorLockUtil;
@Test
public void testJoin(){
BasketEnterResult join = venueEnterService.join(535, 32);
System.out.println(JsonUtils.encode(join));
if (join.getFlg() == 0) {
String barcode = barcodeService.newBarcode("doorSn", "",EnterEnum.ENTER, 32, 535);
System.err.println("入场的二维码为:" + barcode);
doorLockUtil.lockDoor("doorSn");
}
}
@Test
public void enterVenue() {
messageService.enterVenue("oC+Smw+mDDsDSXP/RhHQXvm8I4mobxXZXN621ia2gKE=");
}
@Test
public void testOut(){
BasketEnterResult out = venueEnterService.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);
doorLockUtil.lockDoor("doorSn");
}
}
@Test
public void outVenue() {
messageService.outVenue("oC+Smw+mDDsDSXP/RhHQXvE3OTXb2IAZ8Zo8MwN8dnI=");
}
} }

View File

@@ -3,7 +3,6 @@ package com.sv.barcode;
import com.sv.barcode.button.EnterClick; import com.sv.barcode.button.EnterClick;
import com.sv.barcode.button.OutClick; import com.sv.barcode.button.OutClick;
import com.sv.barcode.button.PlayerClick; import com.sv.barcode.button.PlayerClick;
import com.sv.barcode.button.TestCodeClick;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@@ -26,15 +25,9 @@ public class ListenKeyFrame {
buttonIn.addActionListener(new EnterClick()); buttonIn.addActionListener(new EnterClick());
JButton buttonOut = new JButton("出场开门"); JButton buttonOut = new JButton("出场开门");
buttonOut.addActionListener(new OutClick()); buttonOut.addActionListener(new OutClick());
JTextField jTextField = new JTextField(33);
//设置输入框大小
JButton buttonSubmit = new JButton("验证二维码(测试专用)");
buttonSubmit.addActionListener(new TestCodeClick(jTextField));
JButton buttonPlay = new JButton("播放声音"); JButton buttonPlay = new JButton("播放声音");
buttonPlay.addActionListener(new PlayerClick()); buttonPlay.addActionListener(new PlayerClick());
frame.addKeyListener(new ScanBarCode());
frame.add(label); frame.add(label);
frame.add(buttonIn); frame.add(buttonIn);
frame.add(buttonOut); frame.add(buttonOut);

View File

@@ -1,44 +0,0 @@
package com.sv.barcode;
import com.sv.netty.ClientHandler;
import com.sv.netty.ClientThread;
import com.sv.netty.config.NettyConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.List;
public class ScanBarCode extends KeyAdapter {
private final Logger logger = LoggerFactory.getLogger(ClientHandler.class);
private List<Character> barcode = new LinkedList<>();
@Override
public void keyTyped(KeyEvent e) {
if (barcode.size() > 200) {
barcode.clear();
}
char keyChar = e.getKeyChar();
logger.info("each time didi key【" + keyChar + "");
if (NettyConstant.BARCODE_END == keyChar) {
String barStr = "";
if (barcode.size() > 0 && barcode != null) {
for (Character character : barcode) {
barStr = barStr + character;
}
}
logger.info(barStr);
ClientThread.getInstance().checkBarcode(barStr);
barcode.clear();
}
barcode.add(keyChar);
if (NettyConstant.BARCODE_BEGIN == keyChar) {
barcode.clear();
}
}
}

View File

@@ -1,29 +0,0 @@
package com.sv.barcode.button;
import com.sv.netty.ClientHandler;
import com.sv.netty.ClientThread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestCodeClick implements ActionListener {
private final Logger logger = LoggerFactory.getLogger(TestCodeClick.class);
private JTextField barcode;
public TestCodeClick(JTextField barcode) {
this.barcode = barcode;
}
@Override
public void actionPerformed(ActionEvent e) {
String text = barcode.getText();
text = text.substring(1,text.length() -1);
logger.error("sending barcode msg to api =========" + text);
ClientThread.getInstance().checkBarcode(text);
}
}

View File

@@ -71,23 +71,6 @@ public class ClientThread extends Thread{
doConnect(); doConnect();
} }
public void checkBarcode(String barcode) {
try {
if (future != null) {
Channel channel = future.channel();
if (channel != null) {
String sendCode = MessageHandler.checkBarcode(barcode);
if (StringUtil.isNullOrEmpty(sendCode)){
return;
}
channel.writeAndFlush(sendCode);
}
}
}catch (Exception e) {
logger.error("link netty server fail ,send barcode fail",e);
}
}
public void clearFuture(){ public void clearFuture(){
future = null; future = null;
} }

View File

@@ -1,10 +1,11 @@
package com.sv.netty; package com.sv.netty;
import com.sv.netty.config.*; import com.sv.netty.config.HeartBeat;
import com.sv.netty.utils.AesUtil; import com.sv.netty.config.MessageType;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.config.VenueMessage;
import com.sv.netty.utils.EncodeMsg; import com.sv.netty.utils.EncodeMsg;
import com.sv.netty.utils.JsonUtils; import com.sv.netty.utils.JsonUtils;
import com.sv.netty.utils.MakeCode;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -23,29 +24,4 @@ public class MessageHandler {
return EncodeMsg.INSTANCE.encode(venueMessage); return EncodeMsg.INSTANCE.encode(venueMessage);
} }
/**
* 核销二维码
* @return
*/
public static String checkBarcode(String barcode) {
String decrypt = AesUtil.decrypt(barcode);
if (decrypt == null) {
logger.error("barcode unable to decrypt" + barcode);
return null;
}
// 这个二维码是线下的二维码
if (!decrypt.startsWith("venue-")){
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode);
if (venueBarCode == null) {
logger.error("user barcode can't not decodeCode" + barcode);
return null;
}
}
VenueMessage venueMessage = new VenueMessage();
venueMessage.setMessageType(MessageType.SCAN_CODE);
venueMessage.setMessage(barcode);
logger.info("use barcode to api ===" + barcode);
return EncodeMsg.INSTANCE.encode(venueMessage);
}
} }

View File

@@ -19,7 +19,4 @@ public interface NettyConstant {
*/ */
String SPIT_WORD = "&&&"; String SPIT_WORD = "&&&";
char BARCODE_BEGIN = '@';
char BARCODE_END = '#';
} }

View File

@@ -1,69 +0,0 @@
package com.sv.netty.utils;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.config.VenueBarCode;
public class MakeCode {
public static int addSno = 0;
/**
* 生成二维码
* @return
*/
public static String makeCode (Integer venueId, Integer memberId, String deviceName, String direction) {
if (addSno == 9999){
addSno = 0;
}
String information = memberId + NettyConstant.SPIT_WORD + venueId
+ NettyConstant.SPIT_WORD + deviceName
+ NettyConstant.SPIT_WORD + direction
+ NettyConstant.SPIT_WORD + System.currentTimeMillis()
+ NettyConstant.SPIT_WORD + addSno++;
return NettyConstant.BARCODE_BEGIN + AesUtil.encrypt(information) + NettyConstant.BARCODE_END;
}
/**
* 生成二维码
* @return
*/
public static String makeOfflineCode (String barcodeSn) {
return NettyConstant.BARCODE_BEGIN + AesUtil.encrypt(barcodeSn) + NettyConstant.BARCODE_END;
}
/**
* 解析二维码
*/
public static VenueBarCode decodeCode (String barcode) {
VenueBarCode venueBarCode = null;
String decrypt = AesUtil.decrypt(barcode);
String [] list = new String[0];
if (decrypt!=null && decrypt.contains(NettyConstant.SPIT_WORD)){
list = decrypt.split(NettyConstant.SPIT_WORD);
}
if (list != null && list.length == 6) {
venueBarCode = new VenueBarCode();
venueBarCode.setMemberId(Integer.parseInt(list[0]));
venueBarCode.setVenueId(Integer.parseInt(list[1]));
venueBarCode.setDeviceName(list[2]);
venueBarCode.setDirection(Integer.parseInt(list[3]));
} else {
return null;
}
return venueBarCode;
}
/**
* 解析二维码
*/
public static String decodeOfflineCode (String barcodeSn) {
return AesUtil.decrypt(barcodeSn);
}
/**
* 还原二维码
*/
public static String reWriteBarcode(String barcode) {
return NettyConstant.BARCODE_BEGIN + barcode + NettyConstant.BARCODE_END;
}
}

View File

@@ -1,78 +0,0 @@
package com.sv.service.common;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum;
import com.sv.dto.api.BarcodeDTO;
import com.sv.entity.Barcode;
import com.sv.entity.BarcodeOrderTime;
import com.sv.mapper.BarcodeMapper;
import com.sv.mapper.BarcodeOrderTimeMapper;
import com.sv.netty.utils.MakeCode;
import com.ydd.framework.core.exception.ServiceException;
import com.ydd.framework.core.service.impl.BaseServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* Service - 短信
*
* @author lh
* @since 2018-08-01
*/
@Service
@Transactional
public class BarcodeService extends BaseServiceImpl {
private final Logger logger = LoggerFactory.getLogger(BarcodeService.class);
@Resource
BarcodeMapper barcodeMapper;
@Resource
BarcodeOrderTimeMapper barcodeOrderTimeMapper;
public String newBarcode (String deviceName, String orderSn, 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={}, orderSn={}, enterEnum={}, deviceName={}, barcode={}",
memberId, venueId, orderSn, enterEnum.getValue(), deviceName, barcode);
b.setBarcode(barcode);
b.setStatus(BarCodeStatusEnum.INIT.getValue());
b.setMemberId(memberId);
b.setVenueId(venueId);
b.setOrderSn(orderSn);
b.setEnter(enterEnum.getValue());
barcodeMapper.insert(b);
}else {
barcode = res.getBarcode();
logger.info("[生成二维码] 复用已有二维码 memberId={}, venueId={}, barcode={}, enter={}",
memberId, venueId, barcode, res.getEnter());
}
return barcode;
}
public BarcodeDTO isUsed(String barcode){
BarcodeDTO barcodeDTO = new BarcodeDTO();
barcodeDTO.setUsed(false);
Barcode code = barcodeMapper.checkIsUsed(barcode);
if (code == null) {
logger.error("[二维码校验] 二维码不存在 barcode={}", barcode);
throw new ServiceException("二维码不存在!");
}
if (BarCodeStatusEnum.USED.value == code.getStatus()){
barcodeDTO.setUsed(true);
BarcodeOrderTime lastEnterOrder = barcodeOrderTimeMapper.findLastOrder(code.getMemberId(), code.getVenueId());
barcodeDTO.setEnterId(lastEnterOrder.getId());
logger.info("[二维码校验] 已使用 memberId={}, venueId={}, enterId={}", code.getMemberId(), code.getVenueId(), lastEnterOrder.getId());
} else {
logger.info("[二维码校验] 未使用 memberId={}, venueId={}", code.getMemberId(), code.getVenueId());
}
return barcodeDTO;
}
}

View File

@@ -9,14 +9,13 @@ import java.util.concurrent.TimeUnit;
public class DoorLockUtil { public class DoorLockUtil {
private final static String DOOR_LOCK = "DOOR_LOCK_"; private final static String DOOR_LOCK = "DOOR_LOCK_";
private final static String DOOR_BARCODE_LOCK = "DOOR_BARCODE_LOCK_"; private final static Integer LOCK_TIMEOUT = 20;
private final static Integer LOCK_TIMEOUT = 15;
@Resource @Resource
RedisCache redisCache; RedisCache redisCache;
/** /**
* 门禁有人扫码之后,需要锁定门禁30s * 门禁有人扫码之后,需要锁定门禁20s
* @return * @return
*/ */
public boolean checkDoorLock(String doorSn){ public boolean checkDoorLock(String doorSn){
@@ -28,7 +27,7 @@ public class DoorLockUtil {
} }
/** /**
* 门禁有人扫码之后,需要锁定门禁30s * 门禁有人扫码之后,需要锁定门禁20s
* @param doorSn * @param doorSn
*/ */
public void lockDoor(String doorSn){ public void lockDoor(String doorSn){
@@ -36,25 +35,4 @@ public class DoorLockUtil {
redisCache.setCacheObject(doorKey,true,LOCK_TIMEOUT, TimeUnit.SECONDS); redisCache.setCacheObject(doorKey,true,LOCK_TIMEOUT, TimeUnit.SECONDS);
} }
/**
* 门禁有人扫码之后需要锁定门禁30s
* @return
*/
public boolean checkBarcode(String doorSn){
String doorKey = DOOR_BARCODE_LOCK + doorSn;
if (redisCache.getCacheObject(doorKey) == null){
return false;
}
return true;
}
/**
* 门禁有人扫码之后需要锁定门禁30s
* @param doorSn
*/
public void lockBarcode(String doorSn){
String doorKey = DOOR_BARCODE_LOCK + doorSn;
redisCache.setCacheObject(doorKey,true,LOCK_TIMEOUT, TimeUnit.SECONDS);
}
} }

View File

@@ -238,17 +238,5 @@ public class DeviceService extends BaseServiceImpl {
return deviceMapper.findByDevice(venueId); return deviceMapper.findByDevice(venueId);
} }
@Transactional
public void makeDeviceBarcode(String deviceName, Integer venueId, String barcode) {
BarcodeOffline barcodeOffline = new BarcodeOffline();
Date startTime = new Date();
barcodeOffline.setStartTime(startTime);
barcodeOffline.setEndTime(DateUtils.addHours(startTime,2));
barcodeOffline.setVenueId(venueId);
barcodeOffline.setDeviceName(deviceName);
barcodeOffline.setBarcode(barcode);
barcodeOfflineMapper.insert(barcodeOffline);
}
} }