diff --git a/api/src/main/java/com/sv/netty/controller/AppVenueLessonController.java b/api/src/main/java/com/sv/netty/controller/AppVenueLessonController.java
index da56c33..75ea6b7 100644
--- a/api/src/main/java/com/sv/netty/controller/AppVenueLessonController.java
+++ b/api/src/main/java/com/sv/netty/controller/AppVenueLessonController.java
@@ -31,6 +31,7 @@ public class AppVenueLessonController {
*/
@RequestMapping("/getLessonOrder/{id}")
public String getLessonOrder(@PathVariable("id") Integer id,String date) {
+ System.out.println("测试一下 ====================== " + date);
if (date == null && "".equals(date)){
LocalDate now = LocalDate.now();
date = now.toString();
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 173577b..a15f4a3 100644
--- a/api/src/main/java/com/sv/netty/controller/QREnterController.java
+++ b/api/src/main/java/com/sv/netty/controller/QREnterController.java
@@ -9,6 +9,7 @@ import com.sv.netty.netty.service.MessageService;
import com.sv.service.api.QRCodeService;
import com.ydd.framework.core.common.dto.ResponseDTO;
import com.ydd.framework.core.controller.BaseApiController;
+import com.ydd.framework.core.exception.ServiceException;
import io.netty.channel.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,7 +37,8 @@ public class QREnterController extends BaseApiController {
Integer venueId = getVenueId(deviceId);
String deviceName = getDeviceName(deviceId);
DeviceType enterOrOut = getEnterOrOut(deviceId);
- Venue venue = qrCodeService.initEnter(venueId, deviceName,enterOrOut);
+ Venue venue = qrCodeService.initEnter(venueId, deviceName,enterOrOut,memberId);
+ qrCodeService.unBindMember(venueId, deviceName, enterOrOut);
if (venue!=null){
if (DeviceType.OUT == enterOrOut){
// 出场
@@ -55,13 +57,18 @@ public class QREnterController extends BaseApiController {
*/
@RequestMapping(value = "/qrCode/init", method = RequestMethod.GET)
public ResponseDTO initEnter(@RequestParam("deviceId")String deviceId) {
- Integer memberId = getMemberIdByAccessToken();
- Integer venueId = getVenueId(deviceId);
- String deviceName = getDeviceName(deviceId);
- DeviceType enterOrOut = getEnterOrOut(deviceId);
- Venue venue = qrCodeService.initEnter(venueId, deviceName,enterOrOut);
- messageService.sendLoading(deviceName,venueId ,enterOrOut,memberId);
- return ResponseDTO.ok().addAttribute("venueInit", venue);
+ try {
+ Integer memberId = getMemberIdByAccessToken();
+ Integer venueId = getVenueId(deviceId);
+ String deviceName = getDeviceName(deviceId);
+ DeviceType enterOrOut = getEnterOrOut(deviceId);
+ Venue venue = qrCodeService.initEnter(venueId, deviceName, enterOrOut,memberId);
+ qrCodeService.bindMember(venueId, deviceName, enterOrOut,memberId);
+ messageService.sendLoading(deviceName, venueId, enterOrOut, memberId);
+ return ResponseDTO.ok().addAttribute("venueInit", venue);
+ }catch(ServiceException e){
+ return ResponseDTO.ok().addAttribute("InitError",e.getMessage());
+ }
}
diff --git a/api/src/main/java/com/sv/netty/netty/service/impl/AppMessageHandlerAdapter.java b/api/src/main/java/com/sv/netty/netty/service/impl/AppMessageHandlerAdapter.java
index 4711637..2d2ac18 100644
--- a/api/src/main/java/com/sv/netty/netty/service/impl/AppMessageHandlerAdapter.java
+++ b/api/src/main/java/com/sv/netty/netty/service/impl/AppMessageHandlerAdapter.java
@@ -180,7 +180,7 @@ public class AppMessageHandlerAdapter implements MessageService {
*/
@Override
public void enterVenue(String deviceName, Integer venueId, Integer memberId, Venue venue) {
- Member member = memberService.findByMember(memberId);
+ Member member = memberService.findByMember(memberId);
Channel channel = getCurrentChannel(deviceName, venueId, DeviceType.ENTER);
// 校验入场时间是否正常
if (checkInterval(member,venueId)) {
@@ -194,7 +194,7 @@ public class AppMessageHandlerAdapter implements MessageService {
sendMessage(channel,new MessageDTO(MessageType.FAILED, ErrorCode.NO_USE_CARD.getMsg()));
}
} else {
- logger.info(member.getId() + "入场失败:连续入场");
+ logger.info(member == null ? "null" : member.getId() + "入场失败:连续入场");
Config config = configService.findById(1);
sendMessage(channel,new MessageDTO(MessageType.OPEN_DOOR, MessageFormat.format(ErrorCode.CHECK_ENTER_INTERVAL.getMsg(),config.getValue())));
}
diff --git a/api/src/main/resources/logback.xml b/api/src/main/resources/logback.xml
index 94d7708..7f4908b 100644
--- a/api/src/main/resources/logback.xml
+++ b/api/src/main/resources/logback.xml
@@ -58,5 +58,6 @@
+
\ No newline at end of file
diff --git a/api/src/test/java/com/test/netty/client/ClientThread.java b/api/src/test/java/com/test/netty/client/ClientThread.java
index 76cb632..18ddfce 100644
--- a/api/src/test/java/com/test/netty/client/ClientThread.java
+++ b/api/src/test/java/com/test/netty/client/ClientThread.java
@@ -32,7 +32,7 @@ public class ClientThread extends Thread{
if (instance == null) {
synchronized (ClientThread.class) {
if (instance == null) {
- instance = new ClientThread("127.0.0.1", 56792);
+ instance = new ClientThread("lmqhznn.goho.co", 26283);
}
}
}
diff --git a/entity/src/main/java/com/sv/entity/Device.java b/entity/src/main/java/com/sv/entity/Device.java
index 396492f..0267515 100644
--- a/entity/src/main/java/com/sv/entity/Device.java
+++ b/entity/src/main/java/com/sv/entity/Device.java
@@ -39,6 +39,10 @@ public class Device implements Serializable {
private Integer venueType;
private DeviceType deviceType;
+
+ private Integer bindMember;
+
+ private Date bindTime;
/**
* 创建者编号
*/
@@ -252,4 +256,20 @@ public class Device implements Serializable {
public void setDeviceType(DeviceType deviceType) {
this.deviceType = deviceType;
}
+
+ public Integer getBindMember() {
+ return bindMember;
+ }
+
+ public void setBindMember(Integer bindMember) {
+ this.bindMember = bindMember;
+ }
+
+ public Date getBindTime() {
+ return bindTime;
+ }
+
+ public void setBindTime(Date bindTime) {
+ this.bindTime = bindTime;
+ }
}
\ No newline at end of file
diff --git a/entity/src/main/java/com/sv/exception/api/ExceptionCodeTemplate.java b/entity/src/main/java/com/sv/exception/api/ExceptionCodeTemplate.java
index d0cd1d9..89de9a2 100644
--- a/entity/src/main/java/com/sv/exception/api/ExceptionCodeTemplate.java
+++ b/entity/src/main/java/com/sv/exception/api/ExceptionCodeTemplate.java
@@ -53,6 +53,8 @@ public class ExceptionCodeTemplate {
public static final ExceptionCode DEVICE_ERROR = ExceptionCode.init(30024, "未找到该设备");
public static final ExceptionCode VENUE_TYPE_ERROR = ExceptionCode.init(30025, "该场馆暂不支持扫码入场");
+ public static final ExceptionCode OPERATE_TIMEOUT_ERROR = ExceptionCode.init(30026, "操作超时,请重新扫码入场");
+ public static final ExceptionCode BIND_ERROR = ExceptionCode.init(30027, "已有用户正在入场,请有序排队入场");
diff --git a/service/src/main/java/com/sv/mapper/DeviceMapper.java b/service/src/main/java/com/sv/mapper/DeviceMapper.java
index db82e9d..6d725fb 100644
--- a/service/src/main/java/com/sv/mapper/DeviceMapper.java
+++ b/service/src/main/java/com/sv/mapper/DeviceMapper.java
@@ -85,4 +85,16 @@ public interface DeviceMapper {
* @return
*/
Device findByDevice(@Param("deviceName") String deviceName,@Param("venueId") Integer venueId,@Param("deviceType") DeviceType deviceType);
+
+ /**
+ * 设备绑定正在扫码的用户
+ */
+ void bindMember(@Param("bindMember") Integer bindMember,@Param("venueId") Integer venueId,@Param("deviceName") String deviceName,@Param("deviceType")DeviceType deviceType);
+
+ /**
+ * 更新设备状态为 2 - 连接成功
+ */
+ void unBindMember(@Param("venueId") Integer venueId, @Param("deviceName") String deviceName, @Param("deviceType")DeviceType deviceType);
+
+
}
\ No newline at end of file
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 2447bf6..a579478 100644
--- a/service/src/main/java/com/sv/service/api/QRCodeService.java
+++ b/service/src/main/java/com/sv/service/api/QRCodeService.java
@@ -2,16 +2,20 @@ package com.sv.service.api;
import com.enums.DeviceType;
import com.enums.VenueTypeEnum;
+import com.sv.entity.Device;
import com.sv.entity.Venue;
import com.sv.mapper.DeviceMapper;
import com.sv.mapper.VenueMapper;
+import com.sv.service.api.util.DateUtilCard;
import com.ydd.framework.core.exception.ServiceException;
+import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import java.util.Date;
/**
* 小程序扫二维码处理
@@ -26,11 +30,29 @@ public class QRCodeService {
@Resource
private DeviceMapper deviceMapper;
- public Venue initEnter(Integer venueId,String deviceName,DeviceType deviceType) {
+ public Venue initEnter(Integer venueId,String deviceName,DeviceType deviceType,Integer memberId) throws ServiceException{
Integer integer = deviceMapper.checkDevice(deviceName, venueId,deviceType);
if (integer != 1){
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.DEVICE_ERROR);
}
+ Device device = deviceMapper.findByDevice(deviceName, venueId, deviceType);
+ if (device == null){
+ throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.DEVICE_ERROR);
+ }else {
+ Date bindTime = device.getBindTime();
+ Integer bindMember = device.getBindMember();
+ if (bindTime != null && bindMember != null){
+ Date now = new Date();
+ Date endTime = DateUtils.addSeconds(bindTime, 60);
+ if (bindMember == memberId && now.after(endTime)){
+ // 设备绑定人员是自己 但是绑定时间已经超过了一分钟
+ throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.OPERATE_TIMEOUT_ERROR);
+ }else if (bindMember != memberId && now.before(endTime)){
+ // 设备绑定的人不是自己,并且呢人家的操作时间还没有结束呢(还没有解绑)
+ throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.BIND_ERROR);
+ }
+ }
+ }
Venue venue = venueMapper.findById(venueId);
if (venue==null){
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.VENUE_ERROR);
@@ -41,5 +63,14 @@ public class QRCodeService {
return venue;
}
+ @Transactional
+ public void bindMember(Integer venueId,String deviceName,DeviceType deviceType,Integer memberId){
+ deviceMapper.bindMember(memberId, venueId, deviceName, deviceType);
+ }
+
+ @Transactional
+ public void unBindMember(Integer venueId,String deviceName,DeviceType deviceType){
+ deviceMapper.unBindMember(venueId, deviceName, deviceType);
+ }
}
diff --git a/service/src/main/resources/mybatis/mapper/sv/DeviceMapper.xml b/service/src/main/resources/mybatis/mapper/sv/DeviceMapper.xml
index c607aba..4e57b2d 100644
--- a/service/src/main/resources/mybatis/mapper/sv/DeviceMapper.xml
+++ b/service/src/main/resources/mybatis/mapper/sv/DeviceMapper.xml
@@ -9,6 +9,8 @@
+
+
@@ -35,6 +37,8 @@
status,
venue_type,
device_type,
+ bind_member,
+ bind_time,
created_id,
modified_id,
created_time,
@@ -50,6 +54,8 @@
#{venue_id, jdbcType=INTEGER},
#{venue_type, jdbcType=INTEGER},
#{device_type, jdbcType=VARCHAR},
+ #{bind_member, jdbcType=INTEGER},
+ #{bind_time, jdbcType=TIMESTAMP},
#{createdId, jdbcType=INTEGER},
#{modifiedId, jdbcType=INTEGER},
#{createdTime, jdbcType=TIMESTAMP},
@@ -91,6 +97,12 @@
device_type,
+
+ bind_member,
+
+
+ bind_time,
+
status,
@@ -129,6 +141,12 @@
#{deviceType},
+
+ #{bindMember},
+
+
+ #{bindTime},
+
#{status},
@@ -196,6 +214,12 @@
device_type = #{deviceType},
+
+ bind_member = #{bindMember},
+
+
+ bind_time = #{bindTime},
+
created_id = #{createdId},
@@ -277,4 +301,19 @@
+
+ UPDATE sv_device set bind_member = #{bind_member},bind_time = now()
+ WHERE name = #{deviceName} and venue_id=#{venueId}
+
+ and device_type = #{deviceType}
+
+
+
+
+ UPDATE sv_device set bind_member = null,bind_time = null
+ WHERE name = #{deviceName} and venue_id=#{venueId}
+
+ and device_type = #{deviceType}
+
+
\ No newline at end of file