diff --git a/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java b/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java index 642bb0d5..d824fdd2 100644 --- a/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java +++ b/cash-api/order-server/src/main/java/com/czg/config/RedisKeyExpirationListener.java @@ -1,8 +1,10 @@ package com.czg.config; +import com.czg.account.service.ShopTableService; import com.czg.order.service.OrderInfoService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -25,6 +27,8 @@ public class RedisKeyExpirationListener implements MessageListener { private String database; @Resource private OrderInfoService tbOrderInfoService; + @DubboReference + private ShopTableService tableService; //redis key失效监听 @@ -46,6 +50,10 @@ public class RedisKeyExpirationListener implements MessageListener { log.info("监听到订单过期,订单Id: {}", expiredKey); String orderId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_ORDER.length()); tbOrderInfoService.expired(Long.parseLong(orderId)); + }else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_TABLE)) { + log.info("监听到台桌清台过期,台桌Id: {}", expiredKey); + String tableId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_TABLE.length()); + tableService.expiredTable(Long.parseLong(tableId)); } } } diff --git a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java index 738ade0b..28712c5e 100644 --- a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java +++ b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java @@ -19,6 +19,8 @@ public interface RedisCst { class classKeyExpired { //订单key过期 public static final String EXPIRED_ORDER = "expired:order:"; + //台桌清台key过期 + public static final String EXPIRED_TABLE = "expired:table:"; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java index b8582565..784c4fb4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/table/ShopTableDTO.java @@ -57,19 +57,30 @@ public class ShopTableDTO implements Serializable { private BigDecimal predateAmount; /** - * idle-空闲 using-使用中 subscribe预定,closed--关台, opening 开台中,cleaning 台桌清理中 + * 未绑定:unbound + * 空闲:idle + * 点餐中:ordering + * 未结账:unsettled + * 支付中:paying + * 已结账 (待清台):settled + * 关台:closed */ private String status; /** * 二维码 */ - private String qrcode; + private String tableCode; /** * 自动清台 0手动 1自动 */ private Integer autoClear; + /** + * 自动清台时间 单位分钟 默认10 + */ + private Integer autoClearTime; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopConfig.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopConfig.java index 7be743ba..2b70c71f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopConfig.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopConfig.java @@ -82,4 +82,13 @@ public class ShopConfig implements Serializable { * 分店数据同步方式 auto-自动同步 manual-手动同步 */ private String branchDataSyncMethod; + + /** + * 台桌清理类型 'auto 自动 hand 手动' 默认auto + */ + private String tableClearType; + /** + * '自动清台 支付几分钟后 默认10分钟后' + */ + private Integer tableClearTime; } \ No newline at end of file diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopInfo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopInfo.java index bb156e53..79e495f9 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopInfo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopInfo.java @@ -301,4 +301,15 @@ public class ShopInfo implements Serializable { @Column(ignore = true) private String headShopName; + /** + * 台桌清理类型 'auto 自动 hand 手动' 默认auto + */ + @Column(ignore = true) + private String tableClearType; + /** + * '自动清台 支付几分钟后 默认10分钟后' + */ + @Column(ignore = true) + private Integer tableClearTime; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTable.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTable.java index 64f7b43d..b36b77c4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTable.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTable.java @@ -5,6 +5,7 @@ import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; + import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -67,7 +68,14 @@ public class ShopTable implements Serializable { private BigDecimal predateAmount; /** - * idle-空闲 using-使用中 subscribe预定,closed--关台, opening 开台中,cleaning 台桌清理中 + * {@link com.czg.enums.ShopTableStatusEnum} + * 未绑定:unbound + * 空闲:idle + * 点餐中:ordering + * 未结账:unsettled + * 支付中:paying + * 已结账 (待清台):settled + * 关台:closed */ private String status; @@ -83,10 +91,9 @@ public class ShopTable implements Serializable { private String tableCode; /** - * 自动清台 0手动 1自动 + * 清台时间(自动清台时使用) */ - private Integer autoClear; - + private LocalDateTime clearTime; /** * 使用时间 */ @@ -118,7 +125,10 @@ public class ShopTable implements Serializable { private Integer useNum; public boolean canUseByStatus() { - return !ShopTableStatusEnum.CLOSED.equalsVal(status) && !ShopTableStatusEnum.CLEANING.equalsVal(status) && !ShopTableStatusEnum.SUBSCRIBE.equalsVal(status); + return !ShopTableStatusEnum.UNBOUND.equalsVal(status) + && !ShopTableStatusEnum.SETTLED.equalsVal(status) + && !ShopTableStatusEnum.SUBSCRIBE.equalsVal(status) + && !ShopTableStatusEnum.CLOSED.equalsVal(status); } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java index 256b486a..cf00d44b 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableService.java @@ -34,6 +34,7 @@ public interface ShopTableService extends IService { Boolean updateInfo(long shopId, ShopTableDTO shopTableDTO); Boolean clear(long shopId, ShopTableClearDTO shopTableClearDTO); + Boolean expiredTable(long tableId); Page pageInfo(Long shopId, Integer areaId, String tableCode, String status, String name, Boolean isBind); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java b/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java index 17f9f077..c1ce3f9c 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java @@ -18,6 +18,9 @@ public enum SysParamCodeEnum { ALI_OSS_ENDPOINT("ali_oss_endpoint", "阿里云endpoint"), ALI_OSS_ROLE_ARN("ali_oss_role_arn", "阿里云roleArn"), WX_MINI_VIP_URL("wx_mini_vip_url", "小程序会员页面地址"), + TABLE_CODE_URL("table_code_url", "桌码生成路径"), + + ; private final String code; diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/enums/ShopTableStatusEnum.java b/cash-common/cash-common-tools/src/main/java/com/czg/enums/ShopTableStatusEnum.java index 1b6359f6..f1a2e888 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/enums/ShopTableStatusEnum.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/enums/ShopTableStatusEnum.java @@ -9,20 +9,29 @@ import lombok.Getter; @Getter public enum ShopTableStatusEnum { + // 未绑定 + UNBOUND("unbound","未绑定"), // 空闲 - IDLE("idle"), - // 使用中 - USING("using"), + IDLE("idle","空闲"), + // 点餐中 + ORDERING("ordering","点餐中"), + // 未结账 + UNSETTLED("unsettled","未结账"), + // 支付中 + PAYING("paying","支付中"), + // 已结账 (待清台) + SETTLED("settled","已结账 (待清台)"), // 关台 - CLOSED("closed"), + CLOSED("closed","关台"), // 预定 - SUBSCRIBE("subscribe"), - // 清台 - CLEANING("cleaning"); + SUBSCRIBE("subscribe","预定"), + ; private final String value; + private final String msg; - ShopTableStatusEnum(String value) { + ShopTableStatusEnum(String value,String msg) { this.value = value; + this.msg = msg; } public boolean equalsVal(String val) { diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java index 92dbfd3a..88e85cad 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableServiceImpl.java @@ -11,6 +11,7 @@ import com.czg.account.dto.table.ShopTableAddDTO; import com.czg.account.dto.table.ShopTableBindDTO; import com.czg.account.dto.table.ShopTableClearDTO; import com.czg.account.dto.table.ShopTableDTO; +import com.czg.account.entity.ShopAd; import com.czg.account.entity.ShopTable; import com.czg.account.entity.ShopTableArea; import com.czg.account.entity.ShopTableCode; @@ -20,22 +21,28 @@ import com.czg.account.service.ShopTableService; import com.czg.account.vo.ShopTableVO; import com.czg.enums.ShopTableStatusEnum; import com.czg.exception.ApiNotPrintException; +import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.service.account.mapper.ShopTableMapper; +import com.czg.system.enums.SysParamCodeEnum; +import com.czg.system.service.SysParamsService; import com.czg.utils.PageUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; +import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; import java.io.*; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -55,6 +62,20 @@ public class ShopTableServiceImpl extends ServiceImpl pageInfo(Long shopId, Integer areaId, String tableCode, String status, String name, Boolean isBind) { PageHelper.startPage(PageUtil.buildPageHelp()); diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 22775f03..066b913f 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -1,7 +1,9 @@ package com.czg.service.order.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.*; @@ -14,6 +16,7 @@ import com.czg.config.RabbitPublisher; import com.czg.config.RedisCst; import com.czg.entity.notify.CzgPayNotifyDTO; import com.czg.entity.notify.CzgRefundNotifyDTO; +import com.czg.enums.ShopTableStatusEnum; import com.czg.enums.ShopUserFlowBizEnum; import com.czg.exception.ApiNotPrintException; import com.czg.exception.CzgException; @@ -253,6 +256,8 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails = cartService.getCartByTableCode(shopInfo.getId(), param.getTableCode(), param.getPlaceNum()); AssertUtil.isListEmpty(orderDetails, "下单失败 购物车为空"); @@ -791,6 +796,20 @@ public class OrderInfoServiceImpl extends ServiceImpl