新增判断用户是否在场内逻辑,新增清场功能,修改二维码多样性
This commit is contained in:
@@ -17,11 +17,6 @@
|
||||
<artifactId>sv-service</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>smartvenue</groupId>
|
||||
<artifactId>netty-model</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
|
||||
@@ -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,24 +111,25 @@ public class VenueController extends BaseApiController {
|
||||
*/
|
||||
@RequestMapping(value = "/venue/join", method = RequestMethod.GET)
|
||||
public ResponseDTO join(@RequestParam("venueId") Integer venueId) {
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
BarCodeResult join = venueService.join(memberId, venueId);
|
||||
if (join.getFlg() == 0) {
|
||||
Device byDevice = deviceService.findByDevice(venueId);
|
||||
BarCodeResult join = new BarCodeResult();
|
||||
if (byDevice == null) {
|
||||
join.setFlg(999);
|
||||
join.setMsg("通讯异常,门禁设备离线中");
|
||||
}else {
|
||||
return ResponseDTO.ok().addAttribute("join", join);
|
||||
}
|
||||
String doorSn = byDevice.getName();
|
||||
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
|
||||
if (lockStat) {
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
String barcode = newBarcode(doorSn, EnterEnum.ENTER, venueId, memberId);
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
join = venueService.join(memberId, venueId);
|
||||
if (join.getFlg() == 0) {
|
||||
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) {
|
||||
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
BarCodeResult out = venueService.out(memberId, venueId);
|
||||
if (out.getFlg() == 0) {
|
||||
Device byDevice = deviceService.findByDevice(venueId);
|
||||
BarCodeResult out = new BarCodeResult();
|
||||
if (byDevice == null) {
|
||||
out.setFlg(999);
|
||||
out.setMsg("通讯异常,门禁设备离线中");
|
||||
}else {
|
||||
return ResponseDTO.ok().addAttribute("out", out);
|
||||
}
|
||||
String doorSn = byDevice.getName();
|
||||
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
|
||||
if (lockStat) {
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
String barcode = newBarcode(doorSn,EnterEnum.OUT,venueId,memberId);
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
out = venueService.out(memberId, venueId);
|
||||
if (out.getFlg() == 0) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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=");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.enums;
|
||||
|
||||
/**
|
||||
* Enum - 入场支付类型
|
||||
* Enum - 篮球入场支付类型
|
||||
*
|
||||
*/
|
||||
public enum EnterVenuePayTypeEnum {
|
||||
WEI_XIN(1, "微信"),
|
||||
WEI_XIN(1, "余额"),
|
||||
MEMBER_CARD(2, "会员卡");
|
||||
public Integer value;
|
||||
public String name;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.enums;
|
||||
|
||||
/**
|
||||
* Enum - 删除标志位
|
||||
* Enum - 用户账号账单支付方式 目前入场记录和改支付方式不一致!!
|
||||
*
|
||||
*/
|
||||
public enum PayTypeEnum {
|
||||
|
||||
42
entity/src/main/java/com/enums/StayEnum.java
Normal file
42
entity/src/main/java/com/enums/StayEnum.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package com.enums;
|
||||
|
||||
/**
|
||||
* Enum - 入场标志
|
||||
*
|
||||
*/
|
||||
public enum StayEnum {
|
||||
OUT(0, "场外"),
|
||||
IN(1, "场内");
|
||||
public Integer value;
|
||||
public String name;
|
||||
|
||||
StayEnum(Integer value, String name) {
|
||||
this.value = value;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(Integer value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static StayEnum getByValue(Integer value) {
|
||||
for (StayEnum type : StayEnum.values()) {
|
||||
if (type.value.equals(value)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
78
entity/src/main/java/com/sv/entity/MemberEnterStatus.java
Normal file
78
entity/src/main/java/com/sv/entity/MemberEnterStatus.java
Normal file
@@ -0,0 +1,78 @@
|
||||
package com.sv.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class MemberEnterStatus {
|
||||
private Integer id;
|
||||
|
||||
private Integer memberId;
|
||||
|
||||
private Integer venueId;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private Date createdTime;
|
||||
|
||||
private Date modifiedTime;
|
||||
|
||||
public MemberEnterStatus(Integer id, Integer memberId, Integer venueId, Integer status, Date createdTime, Date modifiedTime) {
|
||||
this.id = id;
|
||||
this.memberId = memberId;
|
||||
this.venueId = venueId;
|
||||
this.status = status;
|
||||
this.createdTime = createdTime;
|
||||
this.modifiedTime = modifiedTime;
|
||||
}
|
||||
|
||||
public MemberEnterStatus() {
|
||||
super();
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getMemberId() {
|
||||
return memberId;
|
||||
}
|
||||
|
||||
public void setMemberId(Integer memberId) {
|
||||
this.memberId = memberId;
|
||||
}
|
||||
|
||||
public Integer getVenueId() {
|
||||
return venueId;
|
||||
}
|
||||
|
||||
public void setVenueId(Integer venueId) {
|
||||
this.venueId = venueId;
|
||||
}
|
||||
|
||||
public Integer getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Integer status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public Date getCreatedTime() {
|
||||
return createdTime;
|
||||
}
|
||||
|
||||
public void setCreatedTime(Date createdTime) {
|
||||
this.createdTime = createdTime;
|
||||
}
|
||||
|
||||
public Date getModifiedTime() {
|
||||
return modifiedTime;
|
||||
}
|
||||
|
||||
public void setModifiedTime(Date modifiedTime) {
|
||||
this.modifiedTime = modifiedTime;
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,20 @@ 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) {
|
||||
String information = memberId + NettyConstant.SPIT_WORD + venueId + NettyConstant.SPIT_WORD + deviceName + NettyConstant.SPIT_WORD + 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;
|
||||
}
|
||||
|
||||
@@ -32,7 +40,7 @@ public class MakeCode {
|
||||
if (decrypt!=null && decrypt.contains(NettyConstant.SPIT_WORD)){
|
||||
list = decrypt.split(NettyConstant.SPIT_WORD);
|
||||
}
|
||||
if (list != null && list.length == 4) {
|
||||
if (list != null && list.length == 6) {
|
||||
venueBarCode = new VenueBarCode();
|
||||
venueBarCode.setMemberId(Integer.parseInt(list[0]));
|
||||
venueBarCode.setVenueId(Integer.parseInt(list[1]));
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.ydd.oms.task;
|
||||
|
||||
import com.enums.BarCodeStatusEnum;
|
||||
import com.enums.StayEnum;
|
||||
import com.sv.entity.BarcodeOrderTime;
|
||||
import com.sv.entity.MemberEnterStatus;
|
||||
import com.sv.mapper.BarcodeOrderTimeMapper;
|
||||
import com.sv.mapper.MemberEnterStatusMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
@@ -26,6 +29,8 @@ public class BarcodeTimeOrderTask {
|
||||
|
||||
@Resource
|
||||
BarcodeOrderTimeMapper barcodeOrderTimeMapper;
|
||||
@Resource
|
||||
MemberEnterStatusMapper memberEnterStatusMapper;
|
||||
|
||||
@Scheduled(cron = "0 0/5 * * * ?")
|
||||
@Transactional
|
||||
@@ -41,9 +46,19 @@ public class BarcodeTimeOrderTask {
|
||||
}
|
||||
}
|
||||
|
||||
@Scheduled(cron = "0 0 0 * * ?")
|
||||
@Transactional
|
||||
public void clearMember(){
|
||||
// TODO 清场,将所有没有出场记录的用户、都删除最近一次入场记录、希望这个内容能够做成一个新表,记录场馆以及用户的出入场状态
|
||||
// 清场,将所有没有出场记录的用户、都设置为场外
|
||||
List<MemberEnterStatus> allNeedClear = memberEnterStatusMapper.findAllNeedClear();
|
||||
if (allNeedClear != null && allNeedClear.size() > 0) {
|
||||
logger.info("有" + allNeedClear.size() + "的人还在场内!!!");
|
||||
for (MemberEnterStatus memberEnterStatus : allNeedClear) {
|
||||
memberEnterStatus.setStatus(StayEnum.OUT.getValue());
|
||||
logger.info("用户:" + memberEnterStatus.getMemberId() + ",在场馆" + memberEnterStatus.getVenueId() + "还没出来");
|
||||
memberEnterStatusMapper.updateByPrimaryKey(memberEnterStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,4 +20,9 @@ public class BarcodeTimeTaskTest {
|
||||
barcodeTimeOrderTask.execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClearTask(){
|
||||
barcodeTimeOrderTask.clearMember();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,3 +6,18 @@ ADD COLUMN `time_pay_hour` int(11) NULL COMMENT '按次收费几小时内免费'
|
||||
|
||||
ALTER TABLE `smart_venue`.`sv_barcode_order_time`
|
||||
ADD COLUMN `status` int(11) NULL COMMENT '0- 有效 1-失效' AFTER `order_end`;
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sv_member_enter_status
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sv_member_enter_status`;
|
||||
CREATE TABLE `sv_member_enter_status` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`member_id` int(11) NOT NULL COMMENT '客户ID',
|
||||
`venue_id` int(11) NOT NULL COMMENT '场馆ID',
|
||||
`status` int(11) NOT NULL COMMENT '状态 0-场外 1-场内',
|
||||
`created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1231 DEFAULT CHARSET=utf8mb4 COMMENT='用户在场馆的状态';
|
||||
@@ -17,6 +17,11 @@
|
||||
<artifactId>sv-entity</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>smartvenue</groupId>
|
||||
<artifactId>netty-model</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
|
||||
@@ -20,4 +20,12 @@ public interface BarcodeEnterLogMapper {
|
||||
@NoPlatform
|
||||
BarcodeEnterLog findLastByBarcode(String barcode);
|
||||
|
||||
/**
|
||||
* 统计线下订单二维码最多只能使用6次
|
||||
* @param barcode
|
||||
* @return
|
||||
*/
|
||||
@NoPlatform
|
||||
int countTimesByBarcode(String barcode);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.sv.mapper;
|
||||
|
||||
import com.sv.entity.MemberEnterStatus;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MemberEnterStatusMapper {
|
||||
int deleteByPrimaryKey(Integer id);
|
||||
|
||||
int insert(MemberEnterStatus record);
|
||||
|
||||
int insertSelective(MemberEnterStatus record);
|
||||
|
||||
MemberEnterStatus selectByPrimaryKey(Integer id);
|
||||
|
||||
int updateByPrimaryKeySelective(MemberEnterStatus record);
|
||||
|
||||
int updateByPrimaryKey(MemberEnterStatus record);
|
||||
|
||||
MemberEnterStatus selectByMemberVenue(@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
|
||||
|
||||
List<MemberEnterStatus> findAllNeedClear();
|
||||
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
package com.sv.service.api;
|
||||
|
||||
import com.enums.EnterEnum;
|
||||
import com.enums.StayEnum;
|
||||
import com.sv.entity.MemberEnterStatus;
|
||||
import com.sv.entity.MemberEnterVenueLog;
|
||||
import com.sv.mapper.MemberEnterStatusMapper;
|
||||
import com.sv.mapper.MemberEnterVenueLogMapper;
|
||||
import com.ydd.framework.core.service.impl.BaseServiceImpl;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@@ -28,6 +32,8 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
|
||||
|
||||
@Resource
|
||||
private MemberEnterVenueLogMapper memberEnterVenueLogMapper;
|
||||
@Resource
|
||||
private MemberEnterStatusMapper memberEnterStatusMapper;
|
||||
|
||||
/**
|
||||
* 获取用户最后的出入场记录
|
||||
@@ -39,6 +45,16 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
|
||||
return memberEnterVenueLogMapper.findLastByMember(memberId, venueId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户最后的出入场记录
|
||||
*
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
public MemberEnterStatus memberStayStatus(Integer memberId, Integer venueId) {
|
||||
return memberEnterStatusMapper.selectByMemberVenue(memberId, venueId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户最后的进场记录
|
||||
*
|
||||
@@ -64,6 +80,25 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
|
||||
@Transactional
|
||||
public void save(MemberEnterVenueLog memberEnterVenueLog) {
|
||||
memberEnterVenueLogMapper.insert(memberEnterVenueLog);
|
||||
MemberEnterStatus memberEnterStatus =
|
||||
memberEnterStatusMapper.selectByMemberVenue(memberEnterVenueLog.getMemberId(), memberEnterVenueLog.getVenueId());
|
||||
StayEnum stayEnum = StayEnum.OUT;
|
||||
if (EnterEnum.ENTER.getValue().equals(memberEnterVenueLog.getType())){
|
||||
stayEnum = StayEnum.IN;
|
||||
}
|
||||
if (memberEnterStatus != null){
|
||||
memberEnterStatus.setStatus(stayEnum.getValue());
|
||||
memberEnterStatus.setModifiedTime(new Date());
|
||||
memberEnterStatusMapper.updateByPrimaryKey(memberEnterStatus);
|
||||
}else {
|
||||
memberEnterStatus = new MemberEnterStatus();
|
||||
memberEnterStatus.setMemberId(memberEnterVenueLog.getMemberId());
|
||||
memberEnterStatus.setVenueId(memberEnterVenueLog.getVenueId());
|
||||
memberEnterStatus.setStatus(stayEnum.getValue());
|
||||
memberEnterStatus.setCreatedTime(new Date());
|
||||
memberEnterStatus.setModifiedTime(new Date());
|
||||
memberEnterStatusMapper.insert(memberEnterStatus);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -124,11 +124,11 @@ public class VenueService extends BaseServiceImpl {
|
||||
if (getVenue.getStatus() != 0) {
|
||||
throw new ServiceException("场馆维护中,请等待场馆恢复");
|
||||
}
|
||||
getVenue.setEnterFlag(EnterEnum.OUT.getValue());
|
||||
if (VenueTypeEnum.BASKETBALL.getValue().equals(getVenue.getType())){
|
||||
MemberEnterVenueLog memberLastLog = memberEnterVenueLogService.findMemberLastLog(memberId, id);
|
||||
if (memberLastLog != null) {
|
||||
getVenue.setEnterFlag(memberLastLog.getType());
|
||||
MemberEnterStatus memberStayStatus = memberEnterVenueLogService.memberStayStatus(memberId, id);
|
||||
getVenue.setEnterFlag(StayEnum.OUT.getValue());
|
||||
if (memberStayStatus != null) {
|
||||
getVenue.setEnterFlag(memberStayStatus.getStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.sv.service.common;
|
||||
|
||||
import com.enums.BarCodeStatusEnum;
|
||||
import com.enums.EnterEnum;
|
||||
import com.sv.entity.Barcode;
|
||||
import com.sv.mapper.BarcodeMapper;
|
||||
import com.sv.netty.utils.MakeCode;
|
||||
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;
|
||||
|
||||
public 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,4 +149,11 @@
|
||||
WHERE barcode = #{barcode,jdbcType=VARCHAR} order by created_time desc LIMIT 1
|
||||
</select>
|
||||
|
||||
<select id="countTimesByBarcode" resultType="int">
|
||||
select
|
||||
count(1)
|
||||
from sv_barcode_enter_venue_log
|
||||
WHERE barcode = #{barcode,jdbcType=VARCHAR}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.sv.mapper.MemberEnterStatusMapper" >
|
||||
<resultMap id="BaseResultMap" type="com.sv.entity.MemberEnterStatus" >
|
||||
<constructor >
|
||||
<idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
|
||||
<arg column="member_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
|
||||
<arg column="venue_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
|
||||
<arg column="status" jdbcType="INTEGER" javaType="java.lang.Integer" />
|
||||
<arg column="created_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
|
||||
<arg column="modified_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
|
||||
</constructor>
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List" >
|
||||
id, member_id, venue_id, status, created_time, modified_time
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from sv_member_enter_status
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
|
||||
delete from sv_member_enter_status
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</delete>
|
||||
<insert id="insert" parameterType="com.sv.entity.MemberEnterStatus" >
|
||||
insert into sv_member_enter_status (id, member_id, venue_id,
|
||||
status, created_time, modified_time
|
||||
)
|
||||
values (#{id,jdbcType=INTEGER}, #{memberId,jdbcType=INTEGER}, #{venueId,jdbcType=INTEGER},
|
||||
#{status,jdbcType=INTEGER}, #{createdTime,jdbcType=TIMESTAMP}, #{modifiedTime,jdbcType=TIMESTAMP}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.sv.entity.MemberEnterStatus" >
|
||||
insert into sv_member_enter_status
|
||||
<trim prefix="(" suffix=")" suffixOverrides="," >
|
||||
<if test="id != null" >
|
||||
id,
|
||||
</if>
|
||||
<if test="memberId != null" >
|
||||
member_id,
|
||||
</if>
|
||||
<if test="venueId != null" >
|
||||
venue_id,
|
||||
</if>
|
||||
<if test="status != null" >
|
||||
status,
|
||||
</if>
|
||||
<if test="createdTime != null" >
|
||||
created_time,
|
||||
</if>
|
||||
<if test="modifiedTime != null" >
|
||||
modified_time,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides="," >
|
||||
<if test="id != null" >
|
||||
#{id,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="memberId != null" >
|
||||
#{memberId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="venueId != null" >
|
||||
#{venueId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="status != null" >
|
||||
#{status,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="createdTime != null" >
|
||||
#{createdTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="modifiedTime != null" >
|
||||
#{modifiedTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.sv.entity.MemberEnterStatus" >
|
||||
update sv_member_enter_status
|
||||
<set >
|
||||
<if test="memberId != null" >
|
||||
member_id = #{memberId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="venueId != null" >
|
||||
venue_id = #{venueId,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="status != null" >
|
||||
status = #{status,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="createdTime != null" >
|
||||
created_time = #{createdTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="modifiedTime != null" >
|
||||
modified_time = #{modifiedTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="com.sv.entity.MemberEnterStatus" >
|
||||
update sv_member_enter_status
|
||||
set member_id = #{memberId,jdbcType=INTEGER},
|
||||
venue_id = #{venueId,jdbcType=INTEGER},
|
||||
status = #{status,jdbcType=INTEGER},
|
||||
created_time = #{createdTime,jdbcType=TIMESTAMP},
|
||||
modified_time = #{modifiedTime,jdbcType=TIMESTAMP}
|
||||
where id = #{id,jdbcType=INTEGER}
|
||||
</update>
|
||||
|
||||
<select id="selectByMemberVenue" resultMap="BaseResultMap" >
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from sv_member_enter_status
|
||||
where member_id = #{memberId} and venue_id = #{venueId}
|
||||
</select>
|
||||
|
||||
<select id="findAllNeedClear" resultMap="BaseResultMap" >
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from sv_member_enter_status
|
||||
where status = 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -90,7 +90,7 @@
|
||||
domainObjectName 给表对应的 model 起名字
|
||||
注意:大小写敏感问题。
|
||||
-->
|
||||
<table tableName="sv_barcode_order_time" domainObjectName="BarcodeOrderTime"
|
||||
<table tableName="sv_member_enter_status" domainObjectName="MemberEnterStatus"
|
||||
enableInsert="true"
|
||||
enableDeleteByPrimaryKey="true"
|
||||
enableSelectByPrimaryKey="true"
|
||||
|
||||
Reference in New Issue
Block a user