lutong пре 2 недеља
родитељ
комит
8ad7f5b989

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/StoreTable.java

@@ -61,7 +61,7 @@ public class StoreTable {
     @TableField("qrcode_url")
     private String qrcodeUrl;
 
-    @ApiModelProperty(value = "APP扫码二维码URL(内容为门店ID+桌号JSON,非微信太阳码)")
+    @ApiModelProperty(value = "APP扫码二维码URL(内容为 storeId+tableId+menuType 的 JSON,非微信太阳码)")
     @TableField("app_qrcode_url")
     private String appQrcodeUrl;
 

+ 1 - 1
alien-entity/src/main/resources/db/migration/store_table_app_qrcode_url.sql

@@ -1,3 +1,3 @@
 -- APP 桌码二维码 URL(与微信小程序码并列存储)
 ALTER TABLE `store_table`
-    ADD COLUMN `app_qrcode_url` VARCHAR(512) DEFAULT NULL COMMENT 'APP桌码二维码URL(JSON: storeId + tableNumber)' AFTER `qrcode_url`;
+    ADD COLUMN `app_qrcode_url` VARCHAR(512) DEFAULT NULL COMMENT 'APP桌码二维码URL(JSON: storeId + tableId + menuType)' AFTER `qrcode_url`;

+ 8 - 8
alien-store/src/main/java/shop/alien/store/service/TableAppQrCodeService.java

@@ -1,24 +1,24 @@
 package shop.alien.store.service;
 
 /**
- * APP 桌码二维码(普通 QR,内容为门店ID+桌 JSON,供 APP 扫码识别)
+ * APP 桌码二维码(普通 QR,内容为门店ID+桌台主键 JSON,供 APP 扫码识别)
  */
 public interface TableAppQrCodeService {
 
     /**
      * 生成 APP 桌码(默认美食 {@code menuType=1})
      */
-    default String generateTableAppQrCodeAndUpload(Integer storeId, String tableNumber) {
-        return generateTableAppQrCodeAndUpload(storeId, tableNumber, 1);
+    default String generateTableAppQrCodeAndUpload(Integer storeId, Integer tableId) {
+        return generateTableAppQrCodeAndUpload(storeId, tableId, 1);
     }
 
     /**
-     * 生成二维码图片并上传 OSS,内容为 {@code {"storeId":..,"tableNumber":"..","menuType":1|2}}
+     * 生成二维码图片并上传 OSS,内容为 {@code {"storeId":..,"tableId":..,"menuType":1|2}}
      *
-     * @param storeId      商户/门店 ID
-     * @param tableNumber  桌号
-     * @param menuType     1=美食 2=通用价目,与 store_table.type 一致;非法或 null 按 1
+     * @param storeId   商户/门店 ID
+     * @param tableId   桌台主键 {@code store_table.id}(非桌号展示文案)
+     * @param menuType  1=美食 2=通用价目,与 store_table.type 一致;非法或 null 按 1
      * @return OSS 访问 URL
      */
-    String generateTableAppQrCodeAndUpload(Integer storeId, String tableNumber, Integer menuType);
+    String generateTableAppQrCodeAndUpload(Integer storeId, Integer tableId, Integer menuType);
 }

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreTableServiceImpl.java

@@ -145,7 +145,7 @@ public class StoreTableServiceImpl extends ServiceImpl<StoreTableMapper, StoreTa
                     }
 
                     if (StringUtils.isBlank(table.getAppQrcodeUrl())) {
-                        String appUrl = tableAppQrCodeService.generateTableAppQrCodeAndUpload(storeId, table.getTableNumber(),
+                        String appUrl = tableAppQrCodeService.generateTableAppQrCodeAndUpload(storeId, table.getId(),
                                 resolveQrMenuTypeForTable(table));
                         if (StringUtils.isNotBlank(appUrl)) {
                             updateWrapper.set(StoreTable::getAppQrcodeUrl, appUrl);
@@ -225,7 +225,7 @@ public class StoreTableServiceImpl extends ServiceImpl<StoreTableMapper, StoreTa
 
             String qrCodeUrl = weChatMiniProgramQrCodeService.generateTableQrCode(tableId, storeId,
                     resolveQrMenuTypeForTable(table));
-            String appUrl = tableAppQrCodeService.generateTableAppQrCodeAndUpload(storeId, table.getTableNumber(),
+            String appUrl = tableAppQrCodeService.generateTableAppQrCodeAndUpload(storeId, table.getId(),
                     resolveQrMenuTypeForTable(table));
 
             LambdaUpdateWrapper<StoreTable> updateWrapper = new LambdaUpdateWrapper<>();

+ 9 - 11
alien-store/src/main/java/shop/alien/store/service/impl/TableAppQrCodeServiceImpl.java

@@ -7,7 +7,6 @@ import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.QRCodeWriter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import shop.alien.store.service.TableAppQrCodeService;
 import shop.alien.util.ali.AliOSSUtil;
@@ -16,7 +15,7 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 
 /**
- * APP 桌码:仅编码 storeId + tableNumber,不依赖微信接口
+ * APP 桌码:编码 storeId + tableId(store_table 主键),不依赖微信接口
  */
 @Slf4j
 @Service
@@ -28,33 +27,32 @@ public class TableAppQrCodeServiceImpl implements TableAppQrCodeService {
     private final AliOSSUtil aliOSSUtil;
 
     @Override
-    public String generateTableAppQrCodeAndUpload(Integer storeId, String tableNumber, Integer menuType) {
-        if (storeId == null || StringUtils.isBlank(tableNumber)) {
-            throw new IllegalArgumentException("storeId与tableNumber不能为空");
+    public String generateTableAppQrCodeAndUpload(Integer storeId, Integer tableId, Integer menuType) {
+        if (storeId == null || tableId == null) {
+            throw new IllegalArgumentException("storeId与tableId不能为空");
         }
         int m = (menuType != null && menuType == 2) ? 2 : 1;
 
         JSONObject payload = new JSONObject();
         payload.put("storeId", storeId);
-        payload.put("tableNumber", tableNumber.trim());
+        payload.put("tableId", tableId);
         payload.put("menuType", m);
         String content = payload.toJSONString();
 
         byte[] png = encodeQrPng(content, QR_SIZE);
-        String safeNum = tableNumber.trim().replaceAll("[^a-zA-Z0-9_-]", "_");
         String ossPath = String.format(
-                "qrcode/table/app/%d_%s_%d.png",
+                "qrcode/table/app/%d_%d_%d.png",
                 storeId,
-                safeNum,
+                tableId,
                 System.currentTimeMillis());
 
         ByteArrayInputStream in = new ByteArrayInputStream(png);
         String url = aliOSSUtil.uploadFile(in, ossPath);
-        if (StringUtils.isBlank(url)) {
+        if (url == null || url.isEmpty()) {
             log.error("上传APP桌码到OSS失败, ossPath={}", ossPath);
             throw new RuntimeException("上传APP桌码到OSS失败");
         }
-        log.info("APP桌码生成并上传成功, storeId={}, tableNumber={}, menuType={}, url={}", storeId, tableNumber, m, url);
+        log.info("APP桌码生成并上传成功, storeId={}, tableId={}, menuType={}, url={}", storeId, tableId, m, url);
         return url;
     }