fix - 篮球入场出场逻辑优化、丢弃二维码的逻辑
This commit is contained in:
@@ -7,10 +7,10 @@ import com.sv.dto.api.BasketballPayResult;
|
||||
import com.sv.entity.Device;
|
||||
import com.sv.entity.Order;
|
||||
import com.sv.entity.Venue;
|
||||
import com.sv.netty.netty.service.MessageService;
|
||||
import com.sv.service.api.OrderService;
|
||||
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.oms.DeviceService;
|
||||
import com.ydd.framework.core.annotation.AccessToken;
|
||||
@@ -42,11 +42,11 @@ public class VenueController extends BaseApiController {
|
||||
@Resource
|
||||
private VenueEnterService venueEnterService;
|
||||
@Resource
|
||||
private BarcodeService barcodeService;
|
||||
@Resource
|
||||
private DoorLockUtil doorLockUtil;
|
||||
@Resource
|
||||
DeviceService deviceService;
|
||||
@Resource
|
||||
MessageService messageService;
|
||||
|
||||
/**
|
||||
* 分页查询场馆列表
|
||||
@@ -117,6 +117,7 @@ public class VenueController extends BaseApiController {
|
||||
* @param orderSn 订单号
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
@RequestMapping(value = "/member/isPayed", method = RequestMethod.POST)
|
||||
public ResponseDTO isPayed(@RequestParam("orderSn") String orderSn) {
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
@@ -203,17 +204,42 @@ public class VenueController extends BaseApiController {
|
||||
throw new ServiceException("门禁通讯异常");
|
||||
}
|
||||
String doorSn = byDevice.getName();
|
||||
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
|
||||
if (lockStat) {
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
EnterEnum enterEnum = EnterEnum.OUT;
|
||||
if (enterFlag != null) {
|
||||
enterEnum = EnterEnum.getByValue(enterFlag);
|
||||
}
|
||||
String barcode = barcodeService.newBarcode(doorSn,orderSn,enterEnum,venueId,memberId);
|
||||
logger.info("[生成二维码] 成功 memberId={}, barcode={}", memberId, barcode);
|
||||
return ResponseDTO.ok().addAttribute("barcode", barcode);
|
||||
// 这里应该是直接开门
|
||||
if (EnterEnum.OUT.equals(enterEnum)) {
|
||||
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));
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否支付成功
|
||||
* @param barcode 订单号
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/member/barcode/isUsed", method = RequestMethod.POST)
|
||||
public ResponseDTO isUsed(@RequestParam("barcode") String barcode) {
|
||||
return ResponseDTO.ok().addAttribute("barcodeDTO", barcodeService.isUsed(barcode));
|
||||
}
|
||||
// /**
|
||||
// * 判断是否支付成功
|
||||
// * @param barcode 订单号
|
||||
// * @return
|
||||
// */
|
||||
// @Deprecated
|
||||
// @RequestMapping(value = "/member/barcode/isUsed", method = RequestMethod.POST)
|
||||
// public ResponseDTO isUsed(@RequestParam("barcode") String barcode) {
|
||||
// return ResponseDTO.ok().addAttribute("barcodeDTO", barcodeService.isUsed(barcode));
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -1,30 +1,18 @@
|
||||
package com.sv.netty.controller;
|
||||
|
||||
import com.enums.DeviceStatusEnum;
|
||||
import com.enums.EnterEnum;
|
||||
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.utils.JsonUtils;
|
||||
import com.sv.netty.utils.MakeCode;
|
||||
import com.sv.service.common.DoorLockUtil;
|
||||
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.controller.BaseApiController;
|
||||
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.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.io.FileOutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
@@ -40,8 +28,6 @@ public class AdminNettyController extends BaseApiController {
|
||||
DeviceService deviceService;
|
||||
@Resource
|
||||
private MessageService messageService;
|
||||
@Resource
|
||||
DoorLockUtil doorLockUtil;
|
||||
/**
|
||||
* 进场指令发布
|
||||
*/
|
||||
@@ -58,31 +44,6 @@ public class AdminNettyController extends BaseApiController {
|
||||
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)
|
||||
public ResponseDTO out(@PathVariable("id") Integer id) {
|
||||
Device device = deviceService.findById(id);
|
||||
@@ -96,42 +57,6 @@ public class AdminNettyController extends BaseApiController {
|
||||
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
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.sv.netty.netty;
|
||||
|
||||
import com.enums.EnterEnum;
|
||||
import com.sv.netty.config.*;
|
||||
import com.sv.netty.netty.service.MessageService;
|
||||
import com.sv.netty.utils.AesUtil;
|
||||
import com.sv.netty.utils.JsonUtils;
|
||||
import com.sv.netty.utils.MakeCode;
|
||||
import io.netty.channel.*;
|
||||
import io.netty.channel.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.IdleStateEvent;
|
||||
import org.slf4j.Logger;
|
||||
@@ -66,21 +66,21 @@ public class ServerHandler extends SimpleChannelInboundHandler<String> {
|
||||
ctx.channel().attr(NettyConstant.CHANNEL_PARAM).get().setDeviceName(hb.getDeviceName());
|
||||
messageService.online(clientIp,ctx.channel(), hb);
|
||||
break;
|
||||
case SCAN_CODE:
|
||||
logger.info("客户端【" + clientIp + "】开门了...");
|
||||
String offline = MakeCode.decodeOfflineCode(message.getMessage());
|
||||
if (offline.startsWith("venue-")) {
|
||||
// 这是线下开门的逻辑
|
||||
messageService.offlineOpenDoor(message.getMessage());
|
||||
} else {
|
||||
VenueBarCode venueBarCode = MakeCode.decodeCode(message.getMessage());
|
||||
if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) {
|
||||
messageService.enterVenue(message.getMessage());
|
||||
} else {
|
||||
messageService.outVenue(message.getMessage());
|
||||
}
|
||||
}
|
||||
break;
|
||||
// case SCAN_CODE:
|
||||
// logger.info("客户端【" + clientIp + "】开门了...");
|
||||
// String offline = MakeCode.decodeOfflineCode(message.getMessage());
|
||||
// if (offline.startsWith("venue-")) {
|
||||
// // 这是线下开门的逻辑
|
||||
// messageService.offlineOpenDoor(message.getMessage());
|
||||
// } else {
|
||||
// VenueBarCode venueBarCode = MakeCode.decodeCode(message.getMessage());
|
||||
// if (EnterEnum.ENTER.getValue() == venueBarCode.getDirection()) {
|
||||
// messageService.enterVenue(message.getMessage());
|
||||
// } else {
|
||||
// messageService.outVenue(message.getMessage());
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
default:
|
||||
logger.info( "default");
|
||||
}
|
||||
|
||||
@@ -36,16 +36,14 @@ public interface MessageService {
|
||||
*/
|
||||
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);
|
||||
|
||||
void testLoad(String deviceName, Integer venueId);
|
||||
|
||||
void uploadLog(String deviceName, Integer venueId);
|
||||
|
||||
void offlineOpenDoor(String message);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
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.*;
|
||||
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.utils.JsonUtils;
|
||||
import com.sv.netty.utils.MakeCode;
|
||||
import com.sv.netty.utils.ServerMessageUtils;
|
||||
import com.sv.service.api.MemberEnterVenueLogService;
|
||||
import com.sv.service.api.MemberMoneyLogService;
|
||||
import com.sv.service.api.MemberService;
|
||||
import com.sv.service.api.VenueService;
|
||||
import com.sv.service.common.DoorLockUtil;
|
||||
@@ -27,7 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
/**
|
||||
* 消息实现类
|
||||
@@ -54,17 +54,9 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
@Resource
|
||||
private MemberEnterVenueLogService memberEnterVenueLogService;
|
||||
|
||||
@Resource
|
||||
private BarcodeMapper barcodeMapper;
|
||||
|
||||
@Resource
|
||||
private DoorLockUtil doorLockUtil;
|
||||
|
||||
@Resource
|
||||
private BarcodeOfflineMapper barcodeOfflineMapper;
|
||||
|
||||
@Resource
|
||||
private BarcodeEnterLogMapper barcodeEnterLogMapper;
|
||||
@Resource
|
||||
private BarcodeOrderTimeMapper barcodeOrderTimeMapper;
|
||||
|
||||
@@ -173,42 +165,28 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销扫码出场逻辑
|
||||
* @param barcode
|
||||
* 核销篮球出场逻辑
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void outVenue(String barcode) {
|
||||
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode);
|
||||
String doorSn = venueBarCode.getDeviceName();
|
||||
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());
|
||||
public void outVenue(Integer memberId, Integer venueId, String doorSn) {
|
||||
logger.info("[篮球出场] 开始处理 memberId={}, venueId={} ",memberId,venueId);
|
||||
Channel channel = getCurrentChannel(doorSn,venueId);
|
||||
if (channel == null) {
|
||||
logger.error("[扫码出场] 门禁离线 doorSn={}, venueId={}", doorSn, venueBarCode.getVenueId());
|
||||
logger.error("[篮球出场] 门禁离线 doorSn={}, venueId={}", doorSn, venueId);
|
||||
throw new ServiceException("门禁异常离线中");
|
||||
}
|
||||
Member member = memberService.findByMember(venueBarCode.getMemberId());
|
||||
Member member = memberService.findByMember(memberId);
|
||||
if (member != null) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId());
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueId);
|
||||
if (lastOrder == null) {
|
||||
logger.error("[扫码出场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueBarCode.getVenueId());
|
||||
logger.error("[篮球出场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueId);
|
||||
throw new ServiceException("未找到入场订单");
|
||||
}
|
||||
lastOrder.setLastOut(new Date());
|
||||
if (lastOrder.getPayMoney() != null && lastOrder.getPayMoney().compareTo(java.math.BigDecimal.ZERO) > 0) {
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
logger.info("[扫码出场] 有退款金额 orderSn={}, payMoney={}", lastOrder.getOrderSn(), lastOrder.getPayMoney());
|
||||
logger.info("[篮球出场] 有退款金额 orderSn={}, payMoney={}", lastOrder.getOrderSn(), lastOrder.getPayMoney());
|
||||
}
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
|
||||
@@ -217,49 +195,36 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
|
||||
memberEnterVenueLog.setMemberId(member.getId());
|
||||
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
|
||||
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
|
||||
memberEnterVenueLog.setVenueId(venueId);
|
||||
memberEnterVenueLogService.save(memberEnterVenueLog);
|
||||
doorLockUtil.lockDoor(doorSn);
|
||||
logger.info("[扫码出场] 成功 memberId={}, nickname={}, orderSn={}, venueId={}",
|
||||
member.getId(), member.getNickname(), lastOrder.getOrderSn(), venueBarCode.getVenueId());
|
||||
writeOffCode(barcode);
|
||||
logger.info("[篮球出场] 成功 memberId={}, mobile={}, orderSn={}, venueId={}",
|
||||
member.getId(), member.getMobile(), lastOrder.getOrderSn(), venueId);
|
||||
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK"));
|
||||
} else {
|
||||
logger.error("[扫码出场] 用户不存在 memberId={}", venueBarCode.getMemberId());
|
||||
logger.error("[篮球出场] 用户不存在 memberId={}", memberId);
|
||||
throw new ServiceException("用户不存在,请登录");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销扫码进场逻辑
|
||||
* @param barcode
|
||||
* 核销篮球进场逻辑
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void enterVenue(String barcode) {
|
||||
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode);
|
||||
String doorSn = venueBarCode.getDeviceName();
|
||||
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());
|
||||
public void enterVenue(Integer memberId, Integer venueId, String doorSn) {
|
||||
logger.info("[篮球入场] 开始处理 memberId={}, venueId={}, deviceName={}",
|
||||
memberId, venueId, doorSn);
|
||||
Channel channel = getCurrentChannel(doorSn, venueId);
|
||||
if (channel == null) {
|
||||
logger.error("[扫码入场] 门禁离线 doorSn={}, venueId={}", doorSn, venueBarCode.getVenueId());
|
||||
logger.error("[篮球入场] 门禁离线 doorSn={}, venueId={}", doorSn, venueId);
|
||||
throw new ServiceException("门禁异常离线中");
|
||||
}
|
||||
Member member = memberService.findByMember(venueBarCode.getMemberId());
|
||||
Member member = memberService.findByMember(memberId);
|
||||
if (member != null) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueBarCode.getVenueId());
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(member.getId(), venueId);
|
||||
if (lastOrder == null) {
|
||||
logger.error("[扫码入场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueBarCode.getVenueId());
|
||||
logger.error("[篮球入场] 未找到有效订单 memberId={}, venueId={}", member.getId(), venueId);
|
||||
throw new ServiceException("未找到入场订单");
|
||||
}
|
||||
lastOrder.setLastEnter(new Date());
|
||||
@@ -270,53 +235,24 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
memberEnterVenueLog.setType(EnterEnum.ENTER.getValue());
|
||||
memberEnterVenueLog.setMemberId(member.getId());
|
||||
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
|
||||
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
|
||||
memberEnterVenueLog.setVenueId(venueId);
|
||||
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
|
||||
memberEnterVenueLogService.save(memberEnterVenueLog);
|
||||
doorLockUtil.lockDoor(doorSn);
|
||||
writeOffCode(barcode);
|
||||
logger.info("[扫码入场] 成功 memberId={}, nickname={}, orderSn={}, venueId={}",
|
||||
member.getId(), member.getNickname(), lastOrder.getOrderSn(), venueBarCode.getVenueId());
|
||||
logger.info("[篮球入场] 成功 memberId={}, mobile={}, orderSn={}, venueId={}",
|
||||
member.getId(), member.getMobile(), lastOrder.getOrderSn(), venueId);
|
||||
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.ENTER_DOOR,"OK"));
|
||||
} 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
|
||||
public Set<String> countConnection() {
|
||||
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
|
||||
@@ -328,56 +264,6 @@ public class ServerMessageHandlerAdapter implements MessageService {
|
||||
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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,15 +1,9 @@
|
||||
package com.sv.wx;
|
||||
|
||||
import com.WeiXinApplication;
|
||||
import com.enums.EnterEnum;
|
||||
import com.sv.dto.BasketEnterResult;
|
||||
import com.sv.netty.netty.service.MessageService;
|
||||
import com.sv.netty.utils.JsonUtils;
|
||||
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 org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
@@ -25,40 +19,8 @@ public class VenueJoinTest {
|
||||
@Resource
|
||||
MessageService messageService;
|
||||
@Resource
|
||||
BarcodeService barcodeService;
|
||||
@Resource
|
||||
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=");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user