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

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