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

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

View File

@@ -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>

View File

@@ -1,18 +1,13 @@
package com.sv.api.controller;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum;
import com.sv.dto.BarCodeResult;
import com.sv.entity.Barcode;
import com.sv.entity.Device;
import com.sv.entity.Venue;
import com.sv.mapper.BarcodeMapper;
import com.sv.netty.config.NettyConstant;
import com.sv.netty.utils.AesUtil;
import com.sv.netty.utils.MakeCode;
import com.sv.service.api.VenueService;
import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil;
import com.sv.service.common.RedisCache;
import com.sv.service.oms.DeviceService;
import com.ydd.framework.core.common.Pagination;
import com.ydd.framework.core.common.dto.ResponseDTO;
@@ -20,12 +15,9 @@ import com.ydd.framework.core.controller.BaseApiController;
import com.ydd.framework.core.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* Controller - 场馆
@@ -41,6 +33,8 @@ public class VenueController extends BaseApiController {
@Resource
private VenueService venueService;
@Resource
private BarcodeService barcodeService;
@Resource
private DoorLockUtil doorLockUtil;
/**
@@ -117,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;
}
}

View File

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

View File

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

View File

@@ -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;

View File

@@ -1,7 +1,7 @@
package com.enums;
/**
* Enum - 删除标志位
* Enum - 用户账号账单支付方式 目前入场记录和改支付方式不一致!!
*
*/
public enum PayTypeEnum {

View 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;
}
}

View 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;
}
}

View File

@@ -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]));

View File

@@ -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);
}
}
}
}

View File

@@ -20,4 +20,9 @@ public class BarcodeTimeTaskTest {
barcodeTimeOrderTask.execute();
}
@Test
public void testClearTask(){
barcodeTimeOrderTask.clearMember();
}
}

View File

@@ -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='用户在场馆的状态';

View File

@@ -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>

View File

@@ -20,4 +20,12 @@ public interface BarcodeEnterLogMapper {
@NoPlatform
BarcodeEnterLog findLastByBarcode(String barcode);
/**
* 统计线下订单二维码最多只能使用6次
* @param barcode
* @return
*/
@NoPlatform
int countTimesByBarcode(String barcode);
}

View File

@@ -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();
}

View File

@@ -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);
}
}
/**

View File

@@ -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());
}
}
}

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"