fix: 无桌台代客下单修改

This commit is contained in:
SongZhang 2024-10-28 14:19:24 +08:00
parent 7a9d226783
commit 9988723044
4 changed files with 65 additions and 30 deletions

View File

@ -27,6 +27,8 @@ public interface RedisConstant {
// 选择人数锁
String CHOSE_TABLE_COUNT = "CHOSE_TABLE_COUNT";
String MASTER_ID = "SHOP:CODE:USER:pc:";
static String getCurrentOrderKey(String tableId, String shopId) {
return CURRENT_TABLE_ORDER + shopId + ":" + tableId;
}
@ -48,4 +50,8 @@ public interface RedisConstant {
static String getTableCallNumKey(Integer shopId, Integer callTableId) {
return TABLE_CALL_NUMBER + shopId + ":" + callTableId;
}
static String getMasterIdKey(Integer shopId, String day, String tableId) {
return MASTER_ID + shopId + ":" + day + ":" + tableId;
}
}

View File

@ -1,6 +1,38 @@
package cn.ysk.cashier.cons;
import lombok.Getter;
public interface TableConstant {
String CART_SEAT_ID = "-999";
class OrderInfo {
@Getter
public enum Status {
REFUNDING("refunding"), REFUND("refund"), CLOSED("closed"), CREATE("create"),
UNPAID("unpaid"), PAYING("paying"), RETURN("return");
private final String value;
Status(String value) {
this.value = value;
}
}
@Getter
public enum UseType {
TAKEOUT("takeout"),
NONE_TABLE("dine-in"),
DINE_IN_AFTER("dine-in-after"),
DINE_IN_BEFORE("dine-in-before");
private final String value;
UseType(String value) {
this.value = value;
}
public boolean equalsVals(String value) {
return this.value.equals(value);
}
}
}
}

View File

@ -19,6 +19,8 @@ public class ShopEatTypeInfoDTO {
private boolean needSeatFee;
// 是否无桌台下单
private boolean isNoneTable;
// 是否增加masterId
private boolean isIncrMaterId;
private TbShopInfo shopInfo;
private String useType;
private Object shopId;

View File

@ -187,14 +187,19 @@ public class TbShopTableServiceImpl implements TbShopTableService {
boolean isMunchies = StrUtil.isNotBlank(shopInfo.getRegisterType()) &&
ShopInfoRegisterlEnum.MUNCHIES.getValue().equals(shopInfo.getRegisterType());
boolean isDineInAfter = !isMunchies && !isTakeout;
boolean isDineInBefore = isMunchies && !isTakeout;
boolean hasTable = StrUtil.isNotBlank(tableId);
// 是否先付费
boolean isDineInAfter = hasTable && !isMunchies && !isTakeout;
// 是否后付费
boolean isDineInBefore = hasTable && isMunchies && !isTakeout;
// 是否无台桌
boolean isNoneTable = !hasTable && !isTakeout;
boolean needSeatFee = shopInfo.getIsTableFee() == null || shopInfo.getIsTableFee() == 0;
boolean isNoneTable = StrUtil.isBlank(tableId) && !isTakeout;
boolean isIncrMasterId = isTakeout || isNoneTable;
return new ShopEatTypeInfoDTO(isTakeout, isMunchies, isDineInAfter, isDineInBefore, needSeatFee, isNoneTable, shopInfo, isTakeout ? OrderUseTypeEnum.TAKEOUT.getValue() :
isMunchies ? OrderUseTypeEnum.DINE_IN_BEFORE.getValue() : OrderUseTypeEnum.DINE_IN_AFTER.getValue(),
return new ShopEatTypeInfoDTO(isTakeout, isMunchies, isDineInAfter, isDineInBefore, needSeatFee, isNoneTable, isIncrMasterId, shopInfo, isTakeout ? TableConstant.OrderInfo.UseType.TAKEOUT.getValue() :
isDineInBefore ? TableConstant.OrderInfo.UseType.DINE_IN_BEFORE.getValue() : isNoneTable ? TableConstant.OrderInfo.UseType.NONE_TABLE.getValue() : TableConstant.OrderInfo.UseType.DINE_IN_AFTER.getValue(),
shopId, tableId, isTakeout ? OrderSendTypeEnums.TAKE_SELF.getValue() : OrderSendTypeEnums.TABLE.getValue());
}
@ -494,7 +499,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 首次加入
if (tbCashierCart == null) {
tbCashierCart = new TbCashierCart();
tbCashierCart.setUseType(addCartDTO.getUseType());
tbCashierCart.setUseType(shopEatTypeInfoDTO.getUseType());
tbCashierCart.setCoverImg(product.getCoverImg());
tbCashierCart.setCreatedAt(System.currentTimeMillis());
tbCashierCart.setIsSku(product.getTypeEnum());
@ -735,30 +740,21 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public void clearCart(ClearCartDTO clearCartDTO) {
Integer orderId;
ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(clearCartDTO.getShopId(), clearCartDTO.getTableId());
if (clearCartDTO.getTableId() != null) {
orderId = getCurrentOrderId(shopEatTypeInfoDTO);
} else {
orderId = null;
}
ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(clearCartDTO.getShopId(), clearCartDTO.getTableId(), clearCartDTO.getUseType());
LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, clearCartDTO.getShopId())
.isNull(TbCashierCart::getPlaceNum)
.eq(TbCashierCart::getUseType, clearCartDTO.getUseType())
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
.and(q -> q.eq(TbCashierCart::getMasterId, clearCartDTO.getMasterId())
.or()
.isNull(TbCashierCart::getMasterId)
.or()
.eq(TbCashierCart::getMasterId, ""))
.and(q -> q.eq(TbCashierCart::getOrderId, orderId)
.or()
.isNull(TbCashierCart::getOrderId));
.isNull(TbCashierCart::getOrderId);
if (clearCartDTO.getTableId() != null) {
if (StrUtil.isNotBlank(clearCartDTO.getTableId())) {
query.eq(TbCashierCart::getTableId, clearCartDTO.getTableId());
}
cashierCartMapper.delete(query);
@ -779,7 +775,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.in(TbCashierCart::getStatus, "create", "return")
.eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getUseType, useType)
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
.gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime())
.and(q -> q.eq(TbCashierCart::getMasterId, masterId).or().isNull(TbCashierCart::getMasterId));
@ -1063,11 +1059,10 @@ public class TbShopTableServiceImpl implements TbShopTableService {
if (account == null) {
throw new BadRequestException("token解析失败");
}
TbMerchantAccount merchantAccount = merchantAccountMapper.selectOne(new LambdaQueryWrapper<TbMerchantAccount>().eq(TbMerchantAccount::getAccount, account));
String day = DateUtils.getDay();
JSONObject jsonObject = new JSONObject();
// 当前台桌码
String key = "SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + ":" + tableId + useType;
String key = RedisConstant.getMasterIdKey(shopId, day, tableId);
String userCode = redisTemplate.opsForValue().get(key);
if (StringUtils.isEmpty(userCode) || "null".equals(userCode) || "#null".equals(userCode)) {
@ -1112,7 +1107,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, createOrderDTO.getShopId())
.eq(TbCashierCart::getUseType, createOrderDTO.getUseType())
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
.in(TbCashierCart::getStatus, "create", "return")
.gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime())
.and(q -> q.eq(TbCashierCart::getMasterId, createOrderDTO.getMasterId()).or().isNull(TbCashierCart::getMasterId));
@ -1235,7 +1230,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderDetail.setShopId(Integer.valueOf(cashierCart.getShopId()));
orderDetail.setPackAmount(cashierCart.getPackFee());
orderDetail.setStatus("unpaid");
orderDetail.setUseType(createOrderDTO.getUseType());
orderDetail.setUseType(shopEatTypeInfoDTO.getUseType());
orderDetail.setProductImg(cashierCart.getCoverImg());
orderDetail.setCartId(cashierCart.getId());
if (cashierCart.getOrderId() != null) {
@ -1267,7 +1262,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setFreightAmount(feeAmount);
orderInfo.setProductAmount(saleAmount);
orderInfo.setTradeDay(DateUtils.getDay());
orderInfo.setUseType(createOrderDTO.getUseType());
orderInfo.setUseType(shopEatTypeInfoDTO.getUseType());
orderInfo.setCreatedAt(DateUtil.current());
if (seatCart != null) {
orderInfo.setSeatAmount(seatCart.getTotalAmount());
@ -1307,7 +1302,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setCreatedAt(DateUtil.current());
orderInfo.setTableName(tbShopTable != null ? tbShopTable.getName() : null);
orderInfo.setPlaceNum(placeNum);
orderInfo.setUseType(createOrderDTO.getUseType());
orderInfo.setUseType(shopEatTypeInfoDTO.getUseType());
if (StrUtil.isNotBlank(createOrderDTO.getVipUserId())) {
orderInfo.setUserId(createOrderDTO.getVipUserId());
}
@ -1359,7 +1354,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}
// 先付费模式结束购物车状态
if (shopEatTypeInfoDTO.isDineInBefore() || shopEatTypeInfoDTO.isTakeout() || StrUtil.isBlank(createOrderDTO.getTableId())) {
if (!shopEatTypeInfoDTO.isDineInAfter() || StrUtil.isBlank(createOrderDTO.getTableId())) {
cashierCart.setStatus("final");
}
cashierCartMapper.updateById(cashierCart);
@ -1380,12 +1375,12 @@ public class TbShopTableServiceImpl implements TbShopTableService {
if (isFirst) {
// 后付费不增加当前台桌取餐号
if (!shopEatTypeInfoDTO.isTakeout()) {
if (!shopEatTypeInfoDTO.isIncrMaterId()) {
addGlobalCode(cn.ysk.cashier.utils.DateUtils.getDay(), "pc", String.valueOf(createOrderDTO.getShopId()));
}
if (!shopEatTypeInfoDTO.isTakeout() || (addMaterId && "pending".equals(orderInfo.getStatus()))) {
String key = "SHOP:CODE:USER:pc" + ":" + createOrderDTO.getShopId() + ":" + cn.ysk.cashier.utils.DateUtils.getDay() + ":" + orderInfo.getTableId();
if (shopEatTypeInfoDTO.isIncrMaterId() && "pending".equals(orderInfo.getStatus())) {
String key = RedisConstant.getMasterIdKey(createOrderDTO.getShopId(), cn.ysk.cashier.utils.DateUtils.getDay(), orderInfo.getTableId());;
redisTemplate.delete(key);
}
}