diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/RedisConstant.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/RedisConstant.java index 42d0a782..7ce69f61 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/RedisConstant.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/RedisConstant.java @@ -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; + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/TableConstant.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/TableConstant.java index 5479fe20..f9ea2835 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/TableConstant.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/TableConstant.java @@ -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); + } + } + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ShopEatTypeInfoDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ShopEatTypeInfoDTO.java index 6926a8aa..a472da78 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ShopEatTypeInfoDTO.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ShopEatTypeInfoDTO.java @@ -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; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index ffb8c855..5d5619fe 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -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 query = new LambdaQueryWrapper() .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 queryWrapper = new LambdaQueryWrapper() .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().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 queryWrapper = new LambdaQueryWrapper() .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); } }