排队取号保存号码
This commit is contained in:
parent
5e8601745b
commit
a73530df84
|
|
@ -21,6 +21,8 @@ public interface RedisConstant {
|
||||||
String LOCK_KEY = "LOCK:";
|
String LOCK_KEY = "LOCK:";
|
||||||
String CREATE_ORDER = "CREATE_ORDER";
|
String CREATE_ORDER = "CREATE_ORDER";
|
||||||
|
|
||||||
|
// 排队取号全局号码
|
||||||
|
String TABLE_CALL_NUMBER = "TABLE_CALL_NUMBER:";
|
||||||
|
|
||||||
static String getCurrentOrderKey(String tableId, String shopId) {
|
static String getCurrentOrderKey(String tableId, String shopId) {
|
||||||
return CURRENT_TABLE_ORDER + shopId + ":" + tableId;
|
return CURRENT_TABLE_ORDER + shopId + ":" + tableId;
|
||||||
|
|
@ -37,4 +39,8 @@ public interface RedisConstant {
|
||||||
}
|
}
|
||||||
return key.toString();
|
return key.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String getTableCallNumKey(Integer shopId, Integer callTableId) {
|
||||||
|
return TABLE_CALL_NUMBER + shopId + ":" + callTableId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,4 +70,7 @@ public class TbCallQueue {
|
||||||
@Column(name = "sub_state")
|
@Column(name = "sub_state")
|
||||||
private Integer subState;
|
private Integer subState;
|
||||||
|
|
||||||
|
@Column(name = "call_num")
|
||||||
|
private String callNum;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||||
import cn.hutool.extra.qrcode.QrConfig;
|
import cn.hutool.extra.qrcode.QrConfig;
|
||||||
|
import cn.ysk.cashier.cons.RedisConstant;
|
||||||
import cn.ysk.cashier.dto.calltable.*;
|
import cn.ysk.cashier.dto.calltable.*;
|
||||||
import cn.ysk.cashier.exception.BadRequestException;
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
import cn.ysk.cashier.mybatis.entity.TbCallQueue;
|
import cn.ysk.cashier.mybatis.entity.TbCallQueue;
|
||||||
|
|
@ -16,14 +17,17 @@ import cn.ysk.cashier.pojo.shop.TbShopInfo;
|
||||||
import cn.ysk.cashier.pojo.shop.TbShopUser;
|
import cn.ysk.cashier.pojo.shop.TbShopUser;
|
||||||
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
||||||
import cn.ysk.cashier.service.app.TbCallService;
|
import cn.ysk.cashier.service.app.TbCallService;
|
||||||
|
import cn.ysk.cashier.utils.Utils;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -34,6 +38,7 @@ public class TbCallServiceImpl implements TbCallService {
|
||||||
private final TbCallQueueService callQueueService;
|
private final TbCallQueueService callQueueService;
|
||||||
private final TbShopUserMapper shopUserMapper;
|
private final TbShopUserMapper shopUserMapper;
|
||||||
private final TbShopInfoRepository shopInfoRepository;
|
private final TbShopInfoRepository shopInfoRepository;
|
||||||
|
private final StringRedisTemplate redisTemplate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object add(CallTableDTO addCallTableDTO) {
|
public Object add(CallTableDTO addCallTableDTO) {
|
||||||
|
|
@ -76,6 +81,35 @@ public class TbCallServiceImpl implements TbCallService {
|
||||||
.eq(TbCallTable::getShopId, baseCallTableDTO.getShopId()));
|
.eq(TbCallTable::getShopId, baseCallTableDTO.getShopId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getCallNumber(Integer shopId, TbCallTable callTable) {
|
||||||
|
return Utils.runFunAndCheckKey(() -> {
|
||||||
|
String callNumKey = RedisConstant.getTableCallNumKey(shopId, callTable.getId());
|
||||||
|
String value = redisTemplate.opsForValue().get(callNumKey);
|
||||||
|
AtomicReference<String> newVal = new AtomicReference<>("");
|
||||||
|
// 初始化
|
||||||
|
if (StrUtil.isBlank(value)) {
|
||||||
|
Boolean setFlag = Utils.runFunAndRetry(() -> redisTemplate.opsForValue().setIfAbsent(callNumKey, callTable.getStart().toString()), flag -> !flag,
|
||||||
|
r -> newVal.set(redisTemplate.opsForValue().get(callNumKey)));
|
||||||
|
|
||||||
|
if (setFlag) {
|
||||||
|
return callTable.getPrefix() + callTable.getStart();
|
||||||
|
}else if (StrUtil.isNotBlank(newVal.get())){
|
||||||
|
value = String.valueOf((Integer.parseInt(newVal.get()) + 1));
|
||||||
|
redisTemplate.opsForValue().set(callNumKey, value);
|
||||||
|
return callTable.getPrefix() + value;
|
||||||
|
}else {
|
||||||
|
throw new BadRequestException("生成排队号码失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
value = String.valueOf((Integer.parseInt(value) + 1));
|
||||||
|
redisTemplate.opsForValue().set(callNumKey, value);
|
||||||
|
return callTable.getPrefix() + value;
|
||||||
|
}
|
||||||
|
}, redisTemplate, RedisConstant.getLockKey("UPDATE_TABLE", shopId, callTable.getId()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object takeNumber(TakeNumberDTO takeNumberDTO) {
|
public Object takeNumber(TakeNumberDTO takeNumberDTO) {
|
||||||
TbShopInfo shopInfo = shopInfoRepository.findById(takeNumberDTO.getShopId()).orElse(null);
|
TbShopInfo shopInfo = shopInfoRepository.findById(takeNumberDTO.getShopId()).orElse(null);
|
||||||
|
|
@ -90,6 +124,8 @@ public class TbCallServiceImpl implements TbCallService {
|
||||||
throw new BadRequestException("桌型不存在");
|
throw new BadRequestException("桌型不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询当前
|
||||||
|
|
||||||
// 拿取系统内部用户信息
|
// 拿取系统内部用户信息
|
||||||
TbCallQueue callQueue;
|
TbCallQueue callQueue;
|
||||||
if (takeNumberDTO.getUserId() != null) {
|
if (takeNumberDTO.getUserId() != null) {
|
||||||
|
|
@ -133,6 +169,7 @@ public class TbCallServiceImpl implements TbCallService {
|
||||||
callQueue.setSubState(1);
|
callQueue.setSubState(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callQueue.setCallNum(getCallNumber(takeNumberDTO.getShopId(), callTable));
|
||||||
callQueue.setCreateTime(DateUtil.date().toInstant());
|
callQueue.setCreateTime(DateUtil.date().toInstant());
|
||||||
callQueue.setShopId(shopInfo.getId());
|
callQueue.setShopId(shopInfo.getId());
|
||||||
callQueue.setShopName(shopInfo.getShopName());
|
callQueue.setShopName(shopInfo.getShopName());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue