排队取号保存号码
This commit is contained in:
@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||
import cn.hutool.extra.qrcode.QrConfig;
|
||||
import cn.ysk.cashier.cons.RedisConstant;
|
||||
import cn.ysk.cashier.dto.calltable.*;
|
||||
import cn.ysk.cashier.exception.BadRequestException;
|
||||
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.repository.shop.TbShopInfoRepository;
|
||||
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.extension.conditions.query.LambdaQueryChainWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@@ -34,6 +38,7 @@ public class TbCallServiceImpl implements TbCallService {
|
||||
private final TbCallQueueService callQueueService;
|
||||
private final TbShopUserMapper shopUserMapper;
|
||||
private final TbShopInfoRepository shopInfoRepository;
|
||||
private final StringRedisTemplate redisTemplate;
|
||||
|
||||
@Override
|
||||
public Object add(CallTableDTO addCallTableDTO) {
|
||||
@@ -76,6 +81,35 @@ public class TbCallServiceImpl implements TbCallService {
|
||||
.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
|
||||
public Object takeNumber(TakeNumberDTO takeNumberDTO) {
|
||||
TbShopInfo shopInfo = shopInfoRepository.findById(takeNumberDTO.getShopId()).orElse(null);
|
||||
@@ -90,6 +124,8 @@ public class TbCallServiceImpl implements TbCallService {
|
||||
throw new BadRequestException("桌型不存在");
|
||||
}
|
||||
|
||||
// 查询当前
|
||||
|
||||
// 拿取系统内部用户信息
|
||||
TbCallQueue callQueue;
|
||||
if (takeNumberDTO.getUserId() != null) {
|
||||
@@ -133,6 +169,7 @@ public class TbCallServiceImpl implements TbCallService {
|
||||
callQueue.setSubState(1);
|
||||
}
|
||||
|
||||
callQueue.setCallNum(getCallNumber(takeNumberDTO.getShopId(), callTable));
|
||||
callQueue.setCreateTime(DateUtil.date().toInstant());
|
||||
callQueue.setShopId(shopInfo.getId());
|
||||
callQueue.setShopName(shopInfo.getShopName());
|
||||
|
||||
Reference in New Issue
Block a user