From c51120b64c928b7b4fe0ac6039ff8ad83ad7bc32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 19 Feb 2025 09:50:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=8C=E7=A0=81=E7=94=9F=E6=88=90=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/account/dto/ShopTableCodeDTO.java | 57 +++++++++++++++++ .../dto/shopinfo/ShopInfoByCodeDTO.java | 5 ++ .../com/czg/account/entity/ShopTableCode.java | 64 +++++++++++++++++++ .../account/service/ShopTableCodeService.java | 14 ++++ .../account/mapper/ShopTableCodeMapper.java | 14 ++++ .../service/impl/ShopInfoServiceImpl.java | 6 +- .../impl/ShopTableCodeServiceImpl.java | 18 ++++++ .../service/impl/ShopTableServiceImpl.java | 45 +++++++++---- .../resources/mapper/ShopTableCodeMapper.xml | 7 ++ .../src/main/java/com/czg/Main.java | 2 +- 10 files changed, 216 insertions(+), 16 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableCodeDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableCode.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableCodeService.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopTableCodeMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableCodeServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/ShopTableCodeMapper.xml diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableCodeDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableCodeDTO.java new file mode 100644 index 00000000..9c6b2bfb --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopTableCodeDTO.java @@ -0,0 +1,57 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author zs + * @since 2025-02-19 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopTableCodeDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 桌码 + */ + private String tableCode; + + /** + * 状态 待绑定0 已绑定1 + */ + private Integer state; + + /** + * 创建时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** + * 绑定时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime bindTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopinfo/ShopInfoByCodeDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopinfo/ShopInfoByCodeDTO.java index 15fe1fe5..77c99dfa 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopinfo/ShopInfoByCodeDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/shopinfo/ShopInfoByCodeDTO.java @@ -25,4 +25,9 @@ public class ShopInfoByCodeDTO { * 台桌信息 */ private ShopTable shopTable; + + /** + * 是否会员 + */ + private boolean isVip; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableCode.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableCode.java new file mode 100644 index 00000000..ab3c4510 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableCode.java @@ -0,0 +1,64 @@ +package com.czg.account.entity; + +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.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 实体类。 + * + * @author zs + * @since 2025-02-19 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_table_code") +@Accessors(chain = true) +public class ShopTableCode implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 桌码 + */ + private String tableCode; + + /** + * 状态 待绑定0 已绑定1 + */ + private Integer state; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + /** + * 绑定时间 + */ + private LocalDateTime bindTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableCodeService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableCodeService.java new file mode 100644 index 00000000..1ccb0d9e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableCodeService.java @@ -0,0 +1,14 @@ +package com.czg.account.service; + +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.ShopTableCode; + +/** + * 服务层。 + * + * @author zs + * @since 2025-02-19 + */ +public interface ShopTableCodeService extends IService { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopTableCodeMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopTableCodeMapper.java new file mode 100644 index 00000000..5d53a128 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopTableCodeMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopTableCode; + +/** + * 映射层。 + * + * @author zs + * @since 2025-02-19 + */ +public interface ShopTableCodeMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java index ea5c388f..5984e3dd 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java @@ -42,6 +42,8 @@ public class ShopInfoServiceImpl extends ServiceImpl i private MerchantRegisterService merchantRegisterService; @Resource private ShopTableService shopTableService; + @Resource + private ShopUserService shopUserService; private ShopInfo getShopInfo(Long shopId) { ShopInfo shopInfo = getById(shopId); @@ -152,6 +154,8 @@ public class ShopInfoServiceImpl extends ServiceImpl i // 计算距离,单位:米 distance = GeoUtil.getDistance(Long.parseLong(shopInfo.getLat()), Long.parseLong(shopInfo.getLng()), Long.parseLong(lat), Long.parseLong(lng)); } - return new ShopInfoByCodeDTO(distance, shopInfo, shopTable); + + ShopUser shopUser = shopUserService.queryChain().eq(ShopUser::getShopId, shopInfo.getId()).eq(ShopUser::getUserId, StpKit.USER.getLoginIdAsLong()).one(); + return new ShopInfoByCodeDTO(distance, shopInfo, shopTable, shopUser != null && shopUser.getIsVip() != null && shopUser.getIsVip() == 1); } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableCodeServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableCodeServiceImpl.java new file mode 100644 index 00000000..4f509cd9 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableCodeServiceImpl.java @@ -0,0 +1,18 @@ +package com.czg.service.account.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopTableCode; +import com.czg.account.service.ShopTableCodeService; +import com.czg.service.account.mapper.ShopTableCodeMapper; +import org.springframework.stereotype.Service; + +/** + * 服务层实现。 + * + * @author zs + * @since 2025-02-19 + */ +@Service +public class ShopTableCodeServiceImpl extends ServiceImpl implements ShopTableCodeService{ + +} 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 d8fc4586..d88e53df 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 @@ -6,7 +6,9 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import com.czg.account.dto.table.ShopTableAddDTO; import com.czg.account.entity.ShopTableArea; +import com.czg.account.entity.ShopTableCode; import com.czg.account.service.ShopAreaService; +import com.czg.account.service.ShopTableCodeService; import com.czg.enums.ShopTableStatusEnum; import com.czg.exception.ApiNotPrintException; import com.mybatisflex.core.paginate.Page; @@ -24,6 +26,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -37,6 +41,8 @@ import java.util.zip.ZipOutputStream; public class ShopTableServiceImpl extends ServiceImpl implements ShopTableService{ @Resource private ShopAreaService shopAreaService; + @Resource + private ShopTableCodeService shopTableCodeService; @Override public Boolean add(Long shopId, ShopTableAddDTO shopTableAddDTO) { @@ -81,27 +87,24 @@ public class ShopTableServiceImpl extends ServiceImpl idList = queryChain().isNull(ShopTable::getTableCode) - .select("id").orderBy(ShopTable::getId, false) - .page(new Page<>(1, num)).getRecords().stream() - .map(ShopTable::getId).toList(); + List records = shopTableCodeService.queryChain().orderBy(ShopTableCode::getId, false).page(new Page<>(1, 1)).getRecords(); + Map codeMap = shopTableCodeService.queryChain().eq(ShopTableCode::getShopId, shopId).select(ShopTableCode::getTableCode, ShopTableCode::getId) + .list().stream().collect(Collectors.toMap(ShopTableCode::getTableCode, ShopTableCode::getId)); - long maxId = idList.isEmpty() ? 1 : idList.getLast(); + long maxId = records.isEmpty() ? 0 : records.getFirst().getId(); // 设置 ZIP 响应头 response.setContentType("application/zip"); - response.setHeader("Content-Disposition", "attachment; filename=shop_qrcodes_" + shopId + ".zip"); + response.setHeader("Content-Disposition", STR."attachment; filename=shop_qrcodes_\{shopId}.zip"); + ArrayList codeList = new ArrayList<>(); // 使用 ZipOutputStream 将二维码写入 zip try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { for (int i = 0; i < num; i++) { - String tableCode = shopId.toString(); - if (i > idList.size() - 1) { - tableCode = tableCode + ++maxId; - } else { - tableCode = tableCode + idList.get(i); - } - tableCode = tableCode + RandomUtil.randomNumbers(8); + String tableCode = generateCode(1, shopId, ++maxId, codeMap); + codeMap.put(tableCode, maxId); + + codeList.add(new ShopTableCode().setShopId(shopId).setTableCode(tableCode)); // 生成二维码 BufferedImage qrImage = QrCodeUtil.generate(tableCode, 300, 300); @@ -112,10 +115,24 @@ public class ShopTableServiceImpl extends ServiceImpl map) { + if (count > 100) { + throw new ApiNotPrintException("桌码生成失败"); + } + String tableCode = STR."40\{shopId % 10}\{id % 10}\{RandomUtil.randomNumbers(7)}"; + if (map.containsKey(tableCode)) { + generateCode(++count, shopId, id + 1, map); + } + return tableCode; + } } diff --git a/cash-service/account-service/src/main/resources/mapper/ShopTableCodeMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopTableCodeMapper.xml new file mode 100644 index 00000000..ed8ee719 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopTableCodeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/code-generator/src/main/java/com/czg/Main.java b/cash-service/code-generator/src/main/java/com/czg/Main.java index 8eeba7f2..77f751e0 100644 --- a/cash-service/code-generator/src/main/java/com/czg/Main.java +++ b/cash-service/code-generator/src/main/java/com/czg/Main.java @@ -28,7 +28,7 @@ public class Main { // String packageName = "product"; // String packageName = "order"; - String tableName = "tb_shop_area"; + String tableName = "tb_shop_table_code"; String author = "zs"; //是否生成DTO实体 默认生成 boolean isGenerateDto = true;