From 824b18c990415b3a8328e79975b4728a5f2ed026 Mon Sep 17 00:00:00 2001 From: Yiming Zeng Date: Mon, 3 Jul 2023 21:26:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?redis=20=E7=BC=93=E5=AD=98=E7=A9=BF?= =?UTF-8?q?=E9=80=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hongyi/controller/ShopController.java | 4 +- .../java/com/hongyi/service/IShopService.java | 2 + .../hongyi/service/impl/ShopServiceImpl.java | 163 +++++++++++++++++- .../service/impl/ShopTypeServiceImpl.java | 12 +- .../src/main/resources/application.yaml | 2 + 5 files changed, 172 insertions(+), 11 deletions(-) diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java index a588ca2..c7fa960 100644 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java +++ b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java @@ -56,9 +56,7 @@ public class ShopController { */ @PutMapping public Result updateShop(@RequestBody Shop shop) { - // 写入数据库 - shopService.updateById(shop); - return Result.ok(); + return shopService.update(shop); } /** diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java index c875af4..eb6aa97 100644 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java +++ b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java @@ -16,4 +16,6 @@ public interface IShopService extends IService { Result queryById(Long id); + Result update(Shop shop); + } diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java index 74433fd..83f13ff 100644 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java +++ b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java @@ -1,5 +1,8 @@ package com.hongyi.service.impl; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.hongyi.dto.Result; import com.hongyi.entity.Shop; @@ -7,10 +10,16 @@ import com.hongyi.mapper.ShopMapper; import com.hongyi.service.IShopService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hongyi.utils.RedisConstants; +import com.hongyi.utils.RedisData; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** *

@@ -28,26 +37,166 @@ public class ShopServiceImpl extends ServiceImpl implements IS @Override public Result queryById(Long id) { + // Shop shop = queryWithPassThrough(id); + Shop shop = queryWithLogicalExpire(id); + if (shop == null) { + return Result.fail("店铺不存在"); + } + return Result.ok(shop); + } + + // 互斥锁实现 + public Shop queryWithMutex(Long id) { String key = RedisConstants.CACHE_SHOP_KEY + id; // 查询redis缓存 String shopJson = stringRedisTemplate.opsForValue().get(key); // 判断商户是否在缓存中 + if (StrUtil.isNotBlank(shopJson)) { + // 在则直接返回 + return JSONUtil.toBean(shopJson, Shop.class); + } + + // 命中的是空值,直接返回,防止访问数据库 if (shopJson != null) { + return null; + } + // 缓存重建 + // 获取互斥锁 + String lockKey = null; + Shop shop = null; + try { + lockKey = RedisConstants.LOCK_SHOP_KEY + id; + boolean isLock = tryLock(lockKey); + if (!isLock) { + // 上锁失败,则休眠并重试 + Thread.sleep(50); + return queryWithMutex(id); + } + // 不存在则查询数据库 + shop = getById(id); + if (shop == null) { // 数据库中没有 + // 将空值("")写入redis + stringRedisTemplate.opsForValue().set(key, "", 2, TimeUnit.MINUTES); + return null; + } + // 数据库存在,则需要写入缓存,并添加过期时间 + stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30, TimeUnit.MINUTES); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + // 释放锁 + unlock(lockKey); + } + return shop; + } + + private static final ExecutorService CACHE_REBUILD_EXECUTOR = Executors.newFixedThreadPool(10); + + // 逻辑过期时间 + public Shop queryWithLogicalExpire(Long id) { + String key = RedisConstants.CACHE_SHOP_KEY + id; + // 查询redis缓存 + String shopJson = stringRedisTemplate.opsForValue().get(key); + // 判断商户是否在缓存中 + if (StrUtil.isBlank(shopJson)) { + return null; + } + // 命中,需要先把json反序列化为RedisData + RedisData redisData = JSONUtil.toBean(shopJson, RedisData.class); + JSONObject data = (JSONObject) redisData.getData(); + Shop shop = JSONUtil.toBean(data, Shop.class); + LocalDateTime expireTime = redisData.getExpireTime(); + // 判断是否过期 + if (expireTime.isAfter(LocalDateTime.now())) { + // 未过期 + return shop; + } + // 已过期,则缓存更新 + // 获取互斥锁 + String lockKey = RedisConstants.LOCK_SHOP_KEY + id; + boolean isLock = tryLock(lockKey); + // 判断是否获取锁成功 + if (isLock) { + // 成功,开启独立线程,实现缓存重建 + CACHE_REBUILD_EXECUTOR.submit(() -> { + try { + this.saveShop2Redis(id, 20L); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + // 释放锁 + unlock(lockKey); + } + }); + } + // 返回过期的商铺信息 + return shop; + } + + // 可能会发生缓存穿透 + public Shop queryWithPassThrough(Long id) { + String key = RedisConstants.CACHE_SHOP_KEY + id; + // 查询redis缓存 + String shopJson = stringRedisTemplate.opsForValue().get(key); + // 判断商户是否在缓存中 + if (StrUtil.isNotBlank(shopJson)) { // 在则直接返回 - Shop shop = JSONUtil.toBean(shopJson, Shop.class); - return Result.ok(shop); + return JSONUtil.toBean(shopJson, Shop.class); + } + + // 命中的是空值 + if (shopJson != null) { + return null; } // 不存在则查询数据库 Shop shop = getById(id); if (shop == null) { - // 数据库不存在则返回错误 - return Result.fail("店铺不存在"); + // 将空值写入redis + stringRedisTemplate.opsForValue().set(key, "", 2, TimeUnit.MINUTES); + return null; } - // 数据库存在,则需要写入缓存 - stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop)); - return Result.ok(shop); + // 数据库存在,则需要写入缓存,并添加过期时间 + stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30, TimeUnit.MINUTES); + return shop; + } + + + private boolean tryLock(String key) { + Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(key, "1", 10, TimeUnit.SECONDS); + return BooleanUtil.isTrue(flag); + } + + private void unlock(String key) { + stringRedisTemplate.delete(key); + } + + private void saveShop2Redis(Long id, Long expireSeconds) { + // 查询店铺数据 + Shop shop = getById(id); + + // 封装逻辑过期时间 + RedisData redisData = new RedisData(); + redisData.setData(shop); + redisData.setExpireTime(LocalDateTime.now().plusSeconds(expireSeconds)); + // 写入redis + stringRedisTemplate.opsForValue().set(RedisConstants.CACHE_SHOP_KEY + id, JSONUtil.toJsonStr(redisData)); + } + + + @Override + @Transactional + public Result update(Shop shop) { + Long id = shop.getId(); + if (id == null) { + return Result.fail("店铺id不能为空"); + } + // 更新数据库 + updateById(shop); + // 删除缓存 + stringRedisTemplate.delete(RedisConstants.CACHE_SHOP_KEY + id); + return Result.ok(); } } diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java index 51db388..6da3412 100644 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java +++ b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; import java.util.Map; /** @@ -29,8 +30,17 @@ public class ShopTypeServiceImpl extends ServiceImpl i @Override public Result queryType() { // 查询缓存 + // key: Map typeMap = stringRedisTemplate.opsForHash().entries(RedisConstants.CACHE_SHOP_TYPE_KEY); + // 缓存中有查询到 + if (!typeMap.isEmpty()) { - return null; + } + // 缓存中没有查询到 + // 查询数据库 + List typeList = list(); + + + return Result.ok(); } } diff --git a/redis_demo/hm-dianping/src/main/resources/application.yaml b/redis_demo/hm-dianping/src/main/resources/application.yaml index f46b8c1..3c73d62 100644 --- a/redis_demo/hm-dianping/src/main/resources/application.yaml +++ b/redis_demo/hm-dianping/src/main/resources/application.yaml @@ -22,6 +22,8 @@ spring: default-property-inclusion: non_null # JSON处理时忽略非空字段 mybatis-plus: type-aliases-package: com.hongyi.entity # 别名扫描包 + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl logging: level: com.hmdp: debug \ No newline at end of file -- Gitee From 79c748383d8479b871ecde0fe4c363aab9ca6934 Mon Sep 17 00:00:00 2001 From: Yiming Zeng Date: Thu, 13 Jul 2023 14:23:57 +0800 Subject: [PATCH 2/2] redis project init --- redis_demo/hm-dianping-full | 1 + redis_demo/hm-dianping-old | 1 + redis_demo/hm-dianping/.gitignore | 33 -- redis_demo/hm-dianping/README.md | 23 -- redis_demo/hm-dianping/pom.xml | 92 ------ .../com/hongyi/HmDianPingApplication.java | 15 - .../java/com/hongyi/config/MvcConfig.java | 36 --- .../java/com/hongyi/config/MybatisConfig.java | 17 -- .../com/hongyi/config/WebExceptionAdvice.java | 17 -- .../controller/BlogCommentsController.java | 20 -- .../com/hongyi/controller/BlogController.java | 83 ----- .../hongyi/controller/FollowController.java | 20 -- .../com/hongyi/controller/ShopController.java | 99 ------ .../hongyi/controller/ShopTypeController.java | 33 -- .../hongyi/controller/UploadController.java | 63 ---- .../com/hongyi/controller/UserController.java | 83 ----- .../hongyi/controller/VoucherController.java | 57 ---- .../controller/VoucherOrderController.java | 25 -- .../java/com/hongyi/dto/LoginFormDTO.java | 10 - .../src/main/java/com/hongyi/dto/Result.java | 30 -- .../java/com/hongyi/dto/ScrollResult.java | 12 - .../src/main/java/com/hongyi/dto/UserDTO.java | 10 - .../src/main/java/com/hongyi/entity/Blog.java | 95 ------ .../java/com/hongyi/entity/BlogComments.java | 81 ----- .../main/java/com/hongyi/entity/Follow.java | 51 ---- .../com/hongyi/entity/SeckillVoucher.java | 61 ---- .../src/main/java/com/hongyi/entity/Shop.java | 109 ------- .../main/java/com/hongyi/entity/ShopType.java | 64 ---- .../src/main/java/com/hongyi/entity/User.java | 66 ---- .../main/java/com/hongyi/entity/UserInfo.java | 87 ------ .../main/java/com/hongyi/entity/Voucher.java | 105 ------- .../java/com/hongyi/entity/VoucherOrder.java | 81 ----- .../hongyi/interceptor/LoginInterceptor.java | 42 --- .../interceptor/RefreshTokenInterceptor.java | 58 ---- .../com/hongyi/mapper/BlogCommentsMapper.java | 16 - .../java/com/hongyi/mapper/BlogMapper.java | 16 - .../java/com/hongyi/mapper/FollowMapper.java | 16 - .../hongyi/mapper/SeckillVoucherMapper.java | 16 - .../java/com/hongyi/mapper/ShopMapper.java | 16 - .../com/hongyi/mapper/ShopTypeMapper.java | 16 - .../com/hongyi/mapper/UserInfoMapper.java | 16 - .../java/com/hongyi/mapper/UserMapper.java | 16 - .../java/com/hongyi/mapper/VoucherMapper.java | 20 -- .../com/hongyi/mapper/VoucherOrderMapper.java | 16 - .../hongyi/service/IBlogCommentsService.java | 16 - .../java/com/hongyi/service/IBlogService.java | 16 - .../com/hongyi/service/IFollowService.java | 16 - .../service/ISeckillVoucherService.java | 16 - .../java/com/hongyi/service/IShopService.java | 21 -- .../com/hongyi/service/IShopTypeService.java | 19 -- .../com/hongyi/service/IUserInfoService.java | 16 - .../java/com/hongyi/service/IUserService.java | 24 -- .../hongyi/service/IVoucherOrderService.java | 16 - .../com/hongyi/service/IVoucherService.java | 20 -- .../service/impl/BlogCommentsServiceImpl.java | 20 -- .../hongyi/service/impl/BlogServiceImpl.java | 20 -- .../service/impl/FollowServiceImpl.java | 20 -- .../impl/SeckillVoucherServiceImpl.java | 20 -- .../hongyi/service/impl/ShopServiceImpl.java | 202 ------------- .../service/impl/ShopTypeServiceImpl.java | 46 --- .../service/impl/UserInfoServiceImpl.java | 20 -- .../hongyi/service/impl/UserServiceImpl.java | 103 ------- .../service/impl/VoucherOrderServiceImpl.java | 20 -- .../service/impl/VoucherServiceImpl.java | 51 ---- .../com/hongyi/utils/PasswordEncoder.java | 34 --- .../java/com/hongyi/utils/RedisConstants.java | 24 -- .../main/java/com/hongyi/utils/RedisData.java | 11 - .../java/com/hongyi/utils/RegexPatterns.java | 24 -- .../java/com/hongyi/utils/RegexUtils.java | 42 --- .../com/hongyi/utils/SystemConstants.java | 8 - .../java/com/hongyi/utils/UserHolder.java | 19 -- .../src/main/resources/application.yaml | 29 -- .../src/main/resources/db/hmdp.sql | 284 ------------------ .../resources/mapper/SeckillVoucherMapper.xml | 5 - .../main/resources/mapper/VoucherMapper.xml | 13 - .../hongyi/HmDianPingApplicationTests.java | 9 - 76 files changed, 2 insertions(+), 3046 deletions(-) create mode 160000 redis_demo/hm-dianping-full create mode 160000 redis_demo/hm-dianping-old delete mode 100644 redis_demo/hm-dianping/.gitignore delete mode 100644 redis_demo/hm-dianping/README.md delete mode 100644 redis_demo/hm-dianping/pom.xml delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/HmDianPingApplication.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/config/MvcConfig.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/config/MybatisConfig.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/config/WebExceptionAdvice.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogCommentsController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/FollowController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopTypeController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UploadController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UserController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherOrderController.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/dto/LoginFormDTO.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/dto/Result.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/dto/ScrollResult.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/dto/UserDTO.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Blog.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/BlogComments.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Follow.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/SeckillVoucher.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Shop.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/ShopType.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/User.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/UserInfo.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Voucher.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/entity/VoucherOrder.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/LoginInterceptor.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/RefreshTokenInterceptor.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogCommentsMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/FollowMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/SeckillVoucherMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopTypeMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserInfoMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherOrderMapper.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogCommentsService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IFollowService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/ISeckillVoucherService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopTypeService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserInfoService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherOrderService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherService.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogCommentsServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/FollowServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/SeckillVoucherServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserInfoServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherOrderServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherServiceImpl.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/PasswordEncoder.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisConstants.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisData.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexPatterns.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexUtils.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/SystemConstants.java delete mode 100644 redis_demo/hm-dianping/src/main/java/com/hongyi/utils/UserHolder.java delete mode 100644 redis_demo/hm-dianping/src/main/resources/application.yaml delete mode 100644 redis_demo/hm-dianping/src/main/resources/db/hmdp.sql delete mode 100644 redis_demo/hm-dianping/src/main/resources/mapper/SeckillVoucherMapper.xml delete mode 100644 redis_demo/hm-dianping/src/main/resources/mapper/VoucherMapper.xml delete mode 100644 redis_demo/hm-dianping/src/test/java/com/hongyi/HmDianPingApplicationTests.java diff --git a/redis_demo/hm-dianping-full b/redis_demo/hm-dianping-full new file mode 160000 index 0000000..a129c68 --- /dev/null +++ b/redis_demo/hm-dianping-full @@ -0,0 +1 @@ +Subproject commit a129c68147419d7d64f0c18fec7e9f021e07026f diff --git a/redis_demo/hm-dianping-old b/redis_demo/hm-dianping-old new file mode 160000 index 0000000..a129c68 --- /dev/null +++ b/redis_demo/hm-dianping-old @@ -0,0 +1 @@ +Subproject commit a129c68147419d7d64f0c18fec7e9f021e07026f diff --git a/redis_demo/hm-dianping/.gitignore b/redis_demo/hm-dianping/.gitignore deleted file mode 100644 index 549e00a..0000000 --- a/redis_demo/hm-dianping/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/redis_demo/hm-dianping/README.md b/redis_demo/hm-dianping/README.md deleted file mode 100644 index 8f2b449..0000000 --- a/redis_demo/hm-dianping/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# 代码使用说明 -项目代码包含2个分支: -- master : 主分支,包含完整版代码,作为大家的编码参考使用 -- init : 初始化分支,实战篇的初始代码,建议大家以这个分支作为自己开发的基础代码 -## 1.下载 -克隆完整项目 -```git -git clone https://gitee.com/huyi612/hm-dianping.git -``` -切换分支 -```git -git checkout init -``` - -## 2.常见问题 -部分同学直接使用了master分支项目来启动,控制台会一直报错: -``` -NOGROUP No such key 'stream.orders' or consumer group 'g1' in XREADGROUP with GROUP option -``` -这是因为我们完整版代码会尝试访问Redis,连接Redis的Stream。建议同学切换到init分支来开发,如果一定要运行master分支,请先在Redis运行一下命令: -```text -XGROUP CREATE stream.orders g1 $ MKSTREAM -``` \ No newline at end of file diff --git a/redis_demo/hm-dianping/pom.xml b/redis_demo/hm-dianping/pom.xml deleted file mode 100644 index eefd726..0000000 --- a/redis_demo/hm-dianping/pom.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.6.2 - - - com.hmdp - hm-dianping - 0.0.1-SNAPSHOT - hm-dianping - Demo project for Spring Boot - - 1.8 - - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.apache.commons - commons-pool2 - - - org.springframework.boot - spring-boot-starter-web - - - - mysql - mysql-connector-java - runtime - 5.1.47 - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - - - com.baomidou - mybatis-plus-boot-starter - 3.4.3 - - - - cn.hutool - hutool-all - 5.7.17 - - - org.slf4j - slf4j-api - - - log4j - log4j - 1.2.17 - - - org.springframework.boot - spring-boot-devtools - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - - - - diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/HmDianPingApplication.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/HmDianPingApplication.java deleted file mode 100644 index e41bcdd..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/HmDianPingApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.hongyi; - -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@MapperScan("com.hongyi.mapper") -@SpringBootApplication -public class HmDianPingApplication { - - public static void main(String[] args) { - SpringApplication.run(HmDianPingApplication.class, args); - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MvcConfig.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MvcConfig.java deleted file mode 100644 index 95e9f6f..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MvcConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hongyi.config; - -import com.hongyi.interceptor.LoginInterceptor; -import com.hongyi.interceptor.RefreshTokenInterceptor; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import javax.annotation.Resource; - -/** - * @Author Kisugi Takumi - * @Date 2023/6/27 15:45 - * @Version 1.0 - */ -@Configuration -public class MvcConfig implements WebMvcConfigurer { - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new LoginInterceptor()) - .excludePathPatterns( - "/blog/hot", - "/user/code", - "/user/login", - "/shop/**" - ).order(1); - - // 拦截所有请求 - registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns("/**").order(0); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MybatisConfig.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MybatisConfig.java deleted file mode 100644 index 10e2894..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/MybatisConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hongyi.config; - -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class MybatisConfig { - @Bean - public MybatisPlusInterceptor mybatisPlusInterceptor() { - MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); - return interceptor; - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/WebExceptionAdvice.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/config/WebExceptionAdvice.java deleted file mode 100644 index f71d36d..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/config/WebExceptionAdvice.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hongyi.config; - -import com.hongyi.dto.Result; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -@Slf4j -@RestControllerAdvice -public class WebExceptionAdvice { - - @ExceptionHandler(RuntimeException.class) - public Result handleRuntimeException(RuntimeException e) { - log.error(e.toString(), e); - return Result.fail("服务器异常"); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogCommentsController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogCommentsController.java deleted file mode 100644 index 22ad914..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogCommentsController.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.controller; - - -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/blog-comments") -public class BlogCommentsController { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogController.java deleted file mode 100644 index fd73a42..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/BlogController.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.hongyi.controller; - - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.hongyi.dto.Result; -import com.hongyi.dto.UserDTO; -import com.hongyi.entity.Blog; -import com.hongyi.entity.User; -import com.hongyi.service.IBlogService; -import com.hongyi.service.IUserService; -import com.hongyi.utils.SystemConstants; -import com.hongyi.utils.UserHolder; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/blog") -public class BlogController { - - @Resource - private IBlogService blogService; - @Resource - private IUserService userService; - - @PostMapping - public Result saveBlog(@RequestBody Blog blog) { - // 获取登录用户 - UserDTO user = UserHolder.getUser(); - blog.setUserId(user.getId()); - // 保存探店博文 - blogService.save(blog); - // 返回id - return Result.ok(blog.getId()); - } - - @PutMapping("/like/{id}") - public Result likeBlog(@PathVariable("id") Long id) { - // 修改点赞数量 - blogService.update() - .setSql("liked = liked + 1").eq("id", id).update(); - return Result.ok(); - } - - @GetMapping("/of/me") - public Result queryMyBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { - // 获取登录用户 - UserDTO user = UserHolder.getUser(); - // 根据用户查询 - Page page = blogService.query() - .eq("user_id", user.getId()).page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); - // 获取当前页数据 - List records = page.getRecords(); - return Result.ok(records); - } - - @GetMapping("/hot") - public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) { - // 根据用户查询 - Page page = blogService.query() - .orderByDesc("liked") - .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); - // 获取当前页数据 - List records = page.getRecords(); - // 查询用户 - records.forEach(blog ->{ - Long userId = blog.getUserId(); - User user = userService.getById(userId); - blog.setName(user.getNickName()); - blog.setIcon(user.getIcon()); - }); - return Result.ok(records); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/FollowController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/FollowController.java deleted file mode 100644 index 9bfb807..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/FollowController.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.controller; - - -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/follow") -public class FollowController { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java deleted file mode 100644 index c7fa960..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopController.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.hongyi.controller; - - -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.hongyi.dto.Result; -import com.hongyi.entity.Shop; -import com.hongyi.service.IShopService; -import com.hongyi.utils.SystemConstants; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/shop") -public class ShopController { - - @Resource - public IShopService shopService; - - /** - * 根据id查询商铺信息 - * @param id 商铺id - * @return 商铺详情数据 - */ - @GetMapping("/{id}") - public Result queryShopById(@PathVariable("id") Long id) { - return shopService.queryById(id); - } - - /** - * 新增商铺信息 - * @param shop 商铺数据 - * @return 商铺id - */ - @PostMapping - public Result saveShop(@RequestBody Shop shop) { - // 写入数据库 - shopService.save(shop); - // 返回店铺id - return Result.ok(shop.getId()); - } - - /** - * 更新商铺信息 - * @param shop 商铺数据 - * @return 无 - */ - @PutMapping - public Result updateShop(@RequestBody Shop shop) { - return shopService.update(shop); - } - - /** - * 根据商铺类型分页查询商铺信息 - * @param typeId 商铺类型 - * @param current 页码 - * @return 商铺列表 - */ - @GetMapping("/of/type") - public Result queryShopByType( - @RequestParam("typeId") Integer typeId, - @RequestParam(value = "current", defaultValue = "1") Integer current - ) { - // 根据类型分页查询 - Page page = shopService.query() - .eq("type_id", typeId) - .page(new Page<>(current, SystemConstants.DEFAULT_PAGE_SIZE)); - // 返回数据 - return Result.ok(page.getRecords()); - } - - /** - * 根据商铺名称关键字分页查询商铺信息 - * @param name 商铺名称关键字 - * @param current 页码 - * @return 商铺列表 - */ - @GetMapping("/of/name") - public Result queryShopByName( - @RequestParam(value = "name", required = false) String name, - @RequestParam(value = "current", defaultValue = "1") Integer current - ) { - // 根据类型分页查询 - Page page = shopService.query() - .like(StrUtil.isNotBlank(name), "name", name) - .page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE)); - // 返回数据 - return Result.ok(page.getRecords()); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopTypeController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopTypeController.java deleted file mode 100644 index d6390fb..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/ShopTypeController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.hongyi.controller; - - -import com.hongyi.dto.Result; -import com.hongyi.entity.ShopType; -import com.hongyi.service.IShopTypeService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.List; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/shop-type") -public class ShopTypeController { - @Resource - private IShopTypeService typeService; - - @GetMapping("list") - public Result queryTypeList() { - return typeService.queryType(); - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UploadController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UploadController.java deleted file mode 100644 index fd75f87..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UploadController.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.hongyi.controller; - -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.StrUtil; -import com.hongyi.dto.Result; -import com.hongyi.utils.SystemConstants; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.IOException; -import java.util.UUID; - -@Slf4j -@RestController -@RequestMapping("upload") -public class UploadController { - - @PostMapping("blog") - public Result uploadImage(@RequestParam("file") MultipartFile image) { - try { - // 获取原始文件名称 - String originalFilename = image.getOriginalFilename(); - // 生成新文件名 - String fileName = createNewFileName(originalFilename); - // 保存文件 - image.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName)); - // 返回结果 - log.debug("文件上传成功,{}", fileName); - return Result.ok(fileName); - } catch (IOException e) { - throw new RuntimeException("文件上传失败", e); - } - } - - @GetMapping("/blog/delete") - public Result deleteBlogImg(@RequestParam("name") String filename) { - File file = new File(SystemConstants.IMAGE_UPLOAD_DIR, filename); - if (file.isDirectory()) { - return Result.fail("错误的文件名称"); - } - FileUtil.del(file); - return Result.ok(); - } - - private String createNewFileName(String originalFilename) { - // 获取后缀 - String suffix = StrUtil.subAfter(originalFilename, ".", true); - // 生成目录 - String name = UUID.randomUUID().toString(); - int hash = name.hashCode(); - int d1 = hash & 0xF; - int d2 = (hash >> 4) & 0xF; - // 判断目录是否存在 - File dir = new File(SystemConstants.IMAGE_UPLOAD_DIR, StrUtil.format("/blogs/{}/{}", d1, d2)); - if (!dir.exists()) { - dir.mkdirs(); - } - // 生成文件名 - return StrUtil.format("/blogs/{}/{}/{}.{}", d1, d2, name, suffix); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UserController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UserController.java deleted file mode 100644 index f173262..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/UserController.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.hongyi.controller; - - -import com.hongyi.dto.LoginFormDTO; -import com.hongyi.dto.Result; -import com.hongyi.dto.UserDTO; -import com.hongyi.entity.UserInfo; -import com.hongyi.service.IUserInfoService; -import com.hongyi.service.IUserService; -import com.hongyi.utils.UserHolder; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.servlet.http.HttpSession; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/user") -public class UserController { - - @Resource - private IUserService userService; - - @Resource - private IUserInfoService userInfoService; - - /** - * 发送手机验证码 - */ - @PostMapping("code") - public Result sendCode(@RequestParam("phone") String phone, HttpSession session) { - // TODO 发送短信验证码并保存验证码 - return userService.sendCode(phone, session); - } - - /** - * 登录功能 - * @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码 - */ - @PostMapping("/login") - public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){ - // TODO 实现登录功能 - return userService.login(loginForm, session); - } - - /** - * 登出功能 - * @return 无 - */ - @PostMapping("/logout") - public Result logout(){ - // TODO 实现登出功能 - return Result.fail("功能未完成"); - } - - @GetMapping("/me") - public Result me(){ - // TODO 获取当前登录的用户并返回 - UserDTO user = UserHolder.getUser(); - return Result.ok(user); - } - - @GetMapping("/info/{id}") - public Result info(@PathVariable("id") Long userId){ - // 查询详情 - UserInfo info = userInfoService.getById(userId); - if (info == null) { - // 没有详情,应该是第一次查看详情 - return Result.ok(); - } - info.setCreateTime(null); - info.setUpdateTime(null); - // 返回 - return Result.ok(info); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherController.java deleted file mode 100644 index d36e685..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherController.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.hongyi.controller; - - -import com.hongyi.dto.Result; -import com.hongyi.entity.Voucher; -import com.hongyi.service.IVoucherService; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/voucher") -public class VoucherController { - - @Resource - private IVoucherService voucherService; - - /** - * 新增普通券 - * @param voucher 优惠券信息 - * @return 优惠券id - */ - @PostMapping - public Result addVoucher(@RequestBody Voucher voucher) { - voucherService.save(voucher); - return Result.ok(voucher.getId()); - } - - /** - * 新增秒杀券 - * @param voucher 优惠券信息,包含秒杀信息 - * @return 优惠券id - */ - @PostMapping("seckill") - public Result addSeckillVoucher(@RequestBody Voucher voucher) { - voucherService.addSeckillVoucher(voucher); - return Result.ok(voucher.getId()); - } - - /** - * 查询店铺的优惠券列表 - * @param shopId 店铺id - * @return 优惠券列表 - */ - @GetMapping("/list/{shopId}") - public Result queryVoucherOfShop(@PathVariable("shopId") Long shopId) { - return voucherService.queryVoucherOfShop(shopId); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherOrderController.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherOrderController.java deleted file mode 100644 index efc004d..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/controller/VoucherOrderController.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.hongyi.controller; - - -import com.hongyi.dto.Result; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 前端控制器 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@RestController -@RequestMapping("/voucher-order") -public class VoucherOrderController { - @PostMapping("seckill/{id}") - public Result seckillVoucher(@PathVariable("id") Long voucherId) { - return Result.fail("功能未完成"); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/LoginFormDTO.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/LoginFormDTO.java deleted file mode 100644 index 2113da6..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/LoginFormDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.hongyi.dto; - -import lombok.Data; - -@Data -public class LoginFormDTO { - private String phone; - private String code; - private String password; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/Result.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/Result.java deleted file mode 100644 index 228deb4..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/Result.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hongyi.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Result { - private Boolean success; - private String errorMsg; - private Object data; - private Long total; - - public static Result ok(){ - return new Result(true, null, null, null); - } - public static Result ok(Object data){ - return new Result(true, null, data, null); - } - public static Result ok(List data, Long total){ - return new Result(true, null, data, total); - } - public static Result fail(String errorMsg){ - return new Result(false, errorMsg, null, null); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/ScrollResult.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/ScrollResult.java deleted file mode 100644 index 2ccfa2c..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/ScrollResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.hongyi.dto; - -import lombok.Data; - -import java.util.List; - -@Data -public class ScrollResult { - private List list; - private Long minTime; - private Integer offset; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/UserDTO.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/UserDTO.java deleted file mode 100644 index 089b989..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/dto/UserDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.hongyi.dto; - -import lombok.Data; - -@Data -public class UserDTO { - private Long id; - private String nickName; - private String icon; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Blog.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Blog.java deleted file mode 100644 index b654284..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Blog.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_blog") -public class Blog implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - /** - * 商户id - */ - private Long shopId; - /** - * 用户id - */ - private Long userId; - /** - * 用户图标 - */ - @TableField(exist = false) - private String icon; - /** - * 用户姓名 - */ - @TableField(exist = false) - private String name; - /** - * 是否点赞过了 - */ - @TableField(exist = false) - private Boolean isLike; - - /** - * 标题 - */ - private String title; - - /** - * 探店的照片,最多9张,多张以","隔开 - */ - private String images; - - /** - * 探店的文字描述 - */ - private String content; - - /** - * 点赞数量 - */ - private Integer liked; - - /** - * 评论数量 - */ - private Integer comments; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/BlogComments.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/BlogComments.java deleted file mode 100644 index 33014f2..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/BlogComments.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_blog_comments") -public class BlogComments implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 用户id - */ - private Long userId; - - /** - * 探店id - */ - private Long blogId; - - /** - * 关联的1级评论id,如果是一级评论,则值为0 - */ - private Long parentId; - - /** - * 回复的评论id - */ - private Long answerId; - - /** - * 回复的内容 - */ - private String content; - - /** - * 点赞数 - */ - private Integer liked; - - /** - * 状态,0:正常,1:被举报,2:禁止查看 - */ - private Boolean status; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Follow.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Follow.java deleted file mode 100644 index 348d1bb..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Follow.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_follow") -public class Follow implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 用户id - */ - private Long userId; - - /** - * 关联的用户id - */ - private Long followUserId; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/SeckillVoucher.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/SeckillVoucher.java deleted file mode 100644 index 5f7a7cc..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/SeckillVoucher.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * 秒杀优惠券表,与优惠券是一对一关系 - *

- * - * @author 虎哥 - * @since 2022-01-04 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_seckill_voucher") -public class SeckillVoucher implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 关联的优惠券的id - */ - @TableId(value = "voucher_id", type = IdType.INPUT) - private Long voucherId; - - /** - * 库存 - */ - private Integer stock; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 生效时间 - */ - private LocalDateTime beginTime; - - /** - * 失效时间 - */ - private LocalDateTime endTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Shop.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Shop.java deleted file mode 100644 index e34b9f8..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Shop.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_shop") -public class Shop implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 商铺名称 - */ - private String name; - - /** - * 商铺类型的id - */ - private Long typeId; - - /** - * 商铺图片,多个图片以','隔开 - */ - private String images; - - /** - * 商圈,例如陆家嘴 - */ - private String area; - - /** - * 地址 - */ - private String address; - - /** - * 经度 - */ - private Double x; - - /** - * 维度 - */ - private Double y; - - /** - * 均价,取整数 - */ - private Long avgPrice; - - /** - * 销量 - */ - private Integer sold; - - /** - * 评论数量 - */ - private Integer comments; - - /** - * 评分,1~5分,乘10保存,避免小数 - */ - private Integer score; - - /** - * 营业时间,例如 10:00-22:00 - */ - private String openHours; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - - @TableField(exist = false) - private Double distance; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/ShopType.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/ShopType.java deleted file mode 100644 index 5ea96bb..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/ShopType.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_shop_type") -public class ShopType implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 类型名称 - */ - private String name; - - /** - * 图标 - */ - private String icon; - - /** - * 顺序 - */ - private Integer sort; - - /** - * 创建时间 - */ - @JsonIgnore - private LocalDateTime createTime; - - /** - * 更新时间 - */ - @JsonIgnore - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/User.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/User.java deleted file mode 100644 index 407179b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/User.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_user") -public class User implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 手机号码 - */ - private String phone; - - /** - * 密码,加密存储 - */ - private String password; - - /** - * 昵称,默认是随机字符 - */ - private String nickName; - - /** - * 用户头像 - */ - private String icon = ""; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/UserInfo.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/UserInfo.java deleted file mode 100644 index 5e33697..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/UserInfo.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDate; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-24 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_user_info") -public class UserInfo implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键,用户id - */ - @TableId(value = "user_id", type = IdType.AUTO) - private Long userId; - - /** - * 城市名称 - */ - private String city; - - /** - * 个人介绍,不要超过128个字符 - */ - private String introduce; - - /** - * 粉丝数量 - */ - private Integer fans; - - /** - * 关注的人的数量 - */ - private Integer followee; - - /** - * 性别,0:男,1:女 - */ - private Boolean gender; - - /** - * 生日 - */ - private LocalDate birthday; - - /** - * 积分 - */ - private Integer credits; - - /** - * 会员级别,0~9级,0代表未开通会员 - */ - private Boolean level; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Voucher.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Voucher.java deleted file mode 100644 index d3eb4e5..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/Voucher.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_voucher") -public class Voucher implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 商铺id - */ - private Long shopId; - - /** - * 代金券标题 - */ - private String title; - - /** - * 副标题 - */ - private String subTitle; - - /** - * 使用规则 - */ - private String rules; - - /** - * 支付金额 - */ - private Long payValue; - - /** - * 抵扣金额 - */ - private Long actualValue; - - /** - * 优惠券类型 - */ - private Integer type; - - /** - * 优惠券类型 - */ - private Integer status; - /** - * 库存 - */ - @TableField(exist = false) - private Integer stock; - - /** - * 生效时间 - */ - @TableField(exist = false) - private LocalDateTime beginTime; - - /** - * 失效时间 - */ - @TableField(exist = false) - private LocalDateTime endTime; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/VoucherOrder.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/VoucherOrder.java deleted file mode 100644 index 7cec56e..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/entity/VoucherOrder.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.hongyi.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - *

- * - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@TableName("tb_voucher_order") -public class VoucherOrder implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.INPUT) - private Long id; - - /** - * 下单的用户id - */ - private Long userId; - - /** - * 购买的代金券id - */ - private Long voucherId; - - /** - * 支付方式 1:余额支付;2:支付宝;3:微信 - */ - private Integer payType; - - /** - * 订单状态,1:未支付;2:已支付;3:已核销;4:已取消;5:退款中;6:已退款 - */ - private Integer status; - - /** - * 下单时间 - */ - private LocalDateTime createTime; - - /** - * 支付时间 - */ - private LocalDateTime payTime; - - /** - * 核销时间 - */ - private LocalDateTime useTime; - - /** - * 退款时间 - */ - private LocalDateTime refundTime; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/LoginInterceptor.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/LoginInterceptor.java deleted file mode 100644 index 03d559a..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/LoginInterceptor.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.hongyi.interceptor; - -import cn.hutool.core.bean.BeanUtil; -import com.hongyi.dto.UserDTO; -import com.hongyi.entity.User; -import com.hongyi.utils.RedisConstants; -import com.hongyi.utils.UserHolder; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -/** - * @Author Kisugi Takumi - * @Date 2023/6/27 15:37 - * @Version 1.0 - */ -public class LoginInterceptor implements HandlerInterceptor { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - // 判断是否需要拦截 - if(UserHolder.getUser() == null) { - response.setStatus(401); - return false; - } - // 有用户则放行 - return true; - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - // 移除用户 - UserHolder.removeUser(); - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/RefreshTokenInterceptor.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/RefreshTokenInterceptor.java deleted file mode 100644 index a9bba10..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/interceptor/RefreshTokenInterceptor.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.hongyi.interceptor; - -import cn.hutool.core.bean.BeanUtil; -import com.hongyi.dto.UserDTO; -import com.hongyi.utils.RedisConstants; -import com.hongyi.utils.UserHolder; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -/** - * @Author Kisugi Takumi - * @Date 2023/6/27 15:37 - * @Version 1.0 - */ -public class RefreshTokenInterceptor implements HandlerInterceptor { - - private StringRedisTemplate stringRedisTemplate; - - public RefreshTokenInterceptor(StringRedisTemplate stringRedisTemplate) { - this.stringRedisTemplate = stringRedisTemplate; - } - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - // 获取请求头中的token - String token = request.getHeader("authorization"); - if (token == null) { - return true; - } - // 完整的token - String keyToken = RedisConstants.LOGIN_USER_KEY + token; - // 基于token获取redis中的用户 - Map userMap = stringRedisTemplate.opsForHash().entries(keyToken); - // 判断用户是否存在 - if (userMap.isEmpty()) { - return true; - } - // 将hash数据转为UserDTO对象 - UserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false); - // 将用户将用户信息保存到ThreadLocal - UserHolder.saveUser(userDTO); - // 刷新token的有效期 - stringRedisTemplate.expire(keyToken, 30, TimeUnit.MINUTES); - return true; - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - // 移除用户 - UserHolder.removeUser(); - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogCommentsMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogCommentsMapper.java deleted file mode 100644 index 9d07d81..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogCommentsMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.BlogComments; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface BlogCommentsMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogMapper.java deleted file mode 100644 index 95dcdfb..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/BlogMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.Blog; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface BlogMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/FollowMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/FollowMapper.java deleted file mode 100644 index b312652..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/FollowMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.Follow; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface FollowMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/SeckillVoucherMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/SeckillVoucherMapper.java deleted file mode 100644 index 534dee9..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/SeckillVoucherMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.SeckillVoucher; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * 秒杀优惠券表,与优惠券是一对一关系 Mapper 接口 - *

- * - * @author 虎哥 - * @since 2022-01-04 - */ -public interface SeckillVoucherMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopMapper.java deleted file mode 100644 index 7baa2e4..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.Shop; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface ShopMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopTypeMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopTypeMapper.java deleted file mode 100644 index 33314e9..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/ShopTypeMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.ShopType; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface ShopTypeMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserInfoMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserInfoMapper.java deleted file mode 100644 index 5d60b72..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserInfoMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.UserInfo; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-24 - */ -public interface UserInfoMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserMapper.java deleted file mode 100644 index 7fad941..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/UserMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.User; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface UserMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherMapper.java deleted file mode 100644 index 0ba2364..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.hongyi.entity.Voucher; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface VoucherMapper extends BaseMapper { - - List queryVoucherOfShop(@Param("shopId") Long shopId); -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherOrderMapper.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherOrderMapper.java deleted file mode 100644 index 523d4aa..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/mapper/VoucherOrderMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.mapper; - -import com.hongyi.entity.VoucherOrder; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface VoucherOrderMapper extends BaseMapper { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogCommentsService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogCommentsService.java deleted file mode 100644 index ca59579..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogCommentsService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.BlogComments; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IBlogCommentsService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogService.java deleted file mode 100644 index ba9276a..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IBlogService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.Blog; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IBlogService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IFollowService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IFollowService.java deleted file mode 100644 index f393f7b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IFollowService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.Follow; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IFollowService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/ISeckillVoucherService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/ISeckillVoucherService.java deleted file mode 100644 index 24bbfc0..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/ISeckillVoucherService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.SeckillVoucher; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 秒杀优惠券表,与优惠券是一对一关系 服务类 - *

- * - * @author 虎哥 - * @since 2022-01-04 - */ -public interface ISeckillVoucherService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java deleted file mode 100644 index eb6aa97..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.dto.Result; -import com.hongyi.entity.Shop; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IShopService extends IService { - - Result queryById(Long id); - - Result update(Shop shop); - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopTypeService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopTypeService.java deleted file mode 100644 index 1e64b1b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IShopTypeService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.dto.Result; -import com.hongyi.entity.ShopType; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IShopTypeService extends IService { - - Result queryType(); - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserInfoService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserInfoService.java deleted file mode 100644 index 7b9728b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserInfoService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.UserInfo; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-24 - */ -public interface IUserInfoService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserService.java deleted file mode 100644 index 5d7b981..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IUserService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hongyi.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.hongyi.dto.LoginFormDTO; -import com.hongyi.dto.Result; -import com.hongyi.entity.User; - -import javax.servlet.http.HttpSession; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IUserService extends IService { - - Result sendCode(String phone, HttpSession session); - - Result login(LoginFormDTO loginForm, HttpSession session); - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherOrderService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherOrderService.java deleted file mode 100644 index bcf5fe7..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherOrderService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.entity.VoucherOrder; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IVoucherOrderService extends IService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherService.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherService.java deleted file mode 100644 index b7a545c..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/IVoucherService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service; - -import com.hongyi.dto.Result; -import com.hongyi.entity.Voucher; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -public interface IVoucherService extends IService { - - Result queryVoucherOfShop(Long shopId); - - void addSeckillVoucher(Voucher voucher); -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogCommentsServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogCommentsServiceImpl.java deleted file mode 100644 index de0f242..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogCommentsServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.BlogComments; -import com.hongyi.mapper.BlogCommentsMapper; -import com.hongyi.service.IBlogCommentsService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class BlogCommentsServiceImpl extends ServiceImpl implements IBlogCommentsService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogServiceImpl.java deleted file mode 100644 index a34ce3c..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/BlogServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.Blog; -import com.hongyi.mapper.BlogMapper; -import com.hongyi.service.IBlogService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class BlogServiceImpl extends ServiceImpl implements IBlogService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/FollowServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/FollowServiceImpl.java deleted file mode 100644 index 27f02d5..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/FollowServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.Follow; -import com.hongyi.mapper.FollowMapper; -import com.hongyi.service.IFollowService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class FollowServiceImpl extends ServiceImpl implements IFollowService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/SeckillVoucherServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/SeckillVoucherServiceImpl.java deleted file mode 100644 index ecea3f2..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/SeckillVoucherServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.SeckillVoucher; -import com.hongyi.mapper.SeckillVoucherMapper; -import com.hongyi.service.ISeckillVoucherService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 秒杀优惠券表,与优惠券是一对一关系 服务实现类 - *

- * - * @author 虎哥 - * @since 2022-01-04 - */ -@Service -public class SeckillVoucherServiceImpl extends ServiceImpl implements ISeckillVoucherService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java deleted file mode 100644 index 83f13ff..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopServiceImpl.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.hongyi.service.impl; - -import cn.hutool.core.util.BooleanUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; -import com.hongyi.dto.Result; -import com.hongyi.entity.Shop; -import com.hongyi.mapper.ShopMapper; -import com.hongyi.service.IShopService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.hongyi.utils.RedisConstants; -import com.hongyi.utils.RedisData; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.time.LocalDateTime; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class ShopServiceImpl extends ServiceImpl implements IShopService { - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Override - public Result queryById(Long id) { - // Shop shop = queryWithPassThrough(id); - Shop shop = queryWithLogicalExpire(id); - if (shop == null) { - return Result.fail("店铺不存在"); - } - return Result.ok(shop); - } - - // 互斥锁实现 - public Shop queryWithMutex(Long id) { - String key = RedisConstants.CACHE_SHOP_KEY + id; - // 查询redis缓存 - String shopJson = stringRedisTemplate.opsForValue().get(key); - // 判断商户是否在缓存中 - if (StrUtil.isNotBlank(shopJson)) { - // 在则直接返回 - return JSONUtil.toBean(shopJson, Shop.class); - } - - // 命中的是空值,直接返回,防止访问数据库 - if (shopJson != null) { - return null; - } - // 缓存重建 - // 获取互斥锁 - String lockKey = null; - Shop shop = null; - try { - lockKey = RedisConstants.LOCK_SHOP_KEY + id; - boolean isLock = tryLock(lockKey); - if (!isLock) { - // 上锁失败,则休眠并重试 - Thread.sleep(50); - return queryWithMutex(id); - } - // 不存在则查询数据库 - shop = getById(id); - if (shop == null) { // 数据库中没有 - // 将空值("")写入redis - stringRedisTemplate.opsForValue().set(key, "", 2, TimeUnit.MINUTES); - return null; - } - // 数据库存在,则需要写入缓存,并添加过期时间 - stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30, TimeUnit.MINUTES); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } finally { - // 释放锁 - unlock(lockKey); - } - return shop; - } - - private static final ExecutorService CACHE_REBUILD_EXECUTOR = Executors.newFixedThreadPool(10); - - // 逻辑过期时间 - public Shop queryWithLogicalExpire(Long id) { - String key = RedisConstants.CACHE_SHOP_KEY + id; - // 查询redis缓存 - String shopJson = stringRedisTemplate.opsForValue().get(key); - // 判断商户是否在缓存中 - if (StrUtil.isBlank(shopJson)) { - return null; - } - // 命中,需要先把json反序列化为RedisData - RedisData redisData = JSONUtil.toBean(shopJson, RedisData.class); - JSONObject data = (JSONObject) redisData.getData(); - Shop shop = JSONUtil.toBean(data, Shop.class); - LocalDateTime expireTime = redisData.getExpireTime(); - // 判断是否过期 - if (expireTime.isAfter(LocalDateTime.now())) { - // 未过期 - return shop; - } - // 已过期,则缓存更新 - // 获取互斥锁 - String lockKey = RedisConstants.LOCK_SHOP_KEY + id; - boolean isLock = tryLock(lockKey); - // 判断是否获取锁成功 - if (isLock) { - // 成功,开启独立线程,实现缓存重建 - CACHE_REBUILD_EXECUTOR.submit(() -> { - try { - this.saveShop2Redis(id, 20L); - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - // 释放锁 - unlock(lockKey); - } - }); - } - // 返回过期的商铺信息 - return shop; - } - - // 可能会发生缓存穿透 - public Shop queryWithPassThrough(Long id) { - String key = RedisConstants.CACHE_SHOP_KEY + id; - // 查询redis缓存 - String shopJson = stringRedisTemplate.opsForValue().get(key); - // 判断商户是否在缓存中 - if (StrUtil.isNotBlank(shopJson)) { - // 在则直接返回 - return JSONUtil.toBean(shopJson, Shop.class); - } - - // 命中的是空值 - if (shopJson != null) { - return null; - } - - // 不存在则查询数据库 - Shop shop = getById(id); - if (shop == null) { - // 将空值写入redis - stringRedisTemplate.opsForValue().set(key, "", 2, TimeUnit.MINUTES); - return null; - } - - // 数据库存在,则需要写入缓存,并添加过期时间 - stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30, TimeUnit.MINUTES); - return shop; - } - - - private boolean tryLock(String key) { - Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(key, "1", 10, TimeUnit.SECONDS); - return BooleanUtil.isTrue(flag); - } - - private void unlock(String key) { - stringRedisTemplate.delete(key); - } - - private void saveShop2Redis(Long id, Long expireSeconds) { - // 查询店铺数据 - Shop shop = getById(id); - - // 封装逻辑过期时间 - RedisData redisData = new RedisData(); - redisData.setData(shop); - redisData.setExpireTime(LocalDateTime.now().plusSeconds(expireSeconds)); - // 写入redis - stringRedisTemplate.opsForValue().set(RedisConstants.CACHE_SHOP_KEY + id, JSONUtil.toJsonStr(redisData)); - } - - - @Override - @Transactional - public Result update(Shop shop) { - Long id = shop.getId(); - if (id == null) { - return Result.fail("店铺id不能为空"); - } - // 更新数据库 - updateById(shop); - // 删除缓存 - stringRedisTemplate.delete(RedisConstants.CACHE_SHOP_KEY + id); - return Result.ok(); - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java deleted file mode 100644 index 6da3412..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/ShopTypeServiceImpl.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.dto.Result; -import com.hongyi.entity.ShopType; -import com.hongyi.mapper.ShopTypeMapper; -import com.hongyi.service.IShopTypeService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.hongyi.utils.RedisConstants; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; -import java.util.Map; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class ShopTypeServiceImpl extends ServiceImpl implements IShopTypeService { - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Override - public Result queryType() { - // 查询缓存 - // key: - Map typeMap = stringRedisTemplate.opsForHash().entries(RedisConstants.CACHE_SHOP_TYPE_KEY); - // 缓存中有查询到 - if (!typeMap.isEmpty()) { - - } - // 缓存中没有查询到 - // 查询数据库 - List typeList = list(); - - - return Result.ok(); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserInfoServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserInfoServiceImpl.java deleted file mode 100644 index ddf998b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserInfoServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.UserInfo; -import com.hongyi.mapper.UserInfoMapper; -import com.hongyi.service.IUserInfoService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-24 - */ -@Service -public class UserInfoServiceImpl extends ServiceImpl implements IUserInfoService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserServiceImpl.java deleted file mode 100644 index 417c800..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.hongyi.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.lang.UUID; -import cn.hutool.core.util.RandomUtil; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.hongyi.dto.LoginFormDTO; -import com.hongyi.dto.Result; -import com.hongyi.dto.UserDTO; -import com.hongyi.entity.User; -import com.hongyi.mapper.UserMapper; -import com.hongyi.service.IUserService; -import com.hongyi.utils.RedisConstants; -import com.hongyi.utils.RegexUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.servlet.http.HttpSession; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import static com.hongyi.utils.SystemConstants.USER_NICK_NAME_PREFIX; - -@Slf4j -@Service -public class UserServiceImpl extends ServiceImpl implements IUserService { - - @Resource - private StringRedisTemplate stringRedisTemplate; - - @Override - public Result sendCode(String phone, HttpSession session) { - // 1.校验手机号 - if (RegexUtils.isPhoneInvalid(phone)) { - // 2.不符合则返回错误信息 - return Result.fail("手机号格式错误"); - } - // 3.符合,则生成一个验证码 - String code = RandomUtil.randomNumbers(6); - // 4.保存验证码到redis,2min后过期 - stringRedisTemplate.opsForValue().set(RedisConstants.LOGIN_CODE_KEY + phone, code, 2, TimeUnit.MINUTES); - // 5.发送验证码(模拟) - log.info("发送验证码成功, 验证码为: {}", code); - // 返回ok - return Result.ok(); - } - - @Override - public Result login(LoginFormDTO loginForm, HttpSession session) { - String phone = loginForm.getPhone(); - // 校验手机号 - if (RegexUtils.isPhoneInvalid(phone)) { - // 不符合则返回错误信息 - return Result.fail("手机号格式错误"); - } - - // 从redis获取验证码并校验 - String cacheCode = stringRedisTemplate.opsForValue().get(RedisConstants.LOGIN_CODE_KEY + phone); - String code = loginForm.getCode(); - if (cacheCode == null || !cacheCode.equals(code)) { - return Result.fail("验证码错误"); - } - - // 根据手机号查询数据库 - User user = query().eq("phone", phone).one(); - if (user == null) { - // 不存在则创建新用户 - user = createUserWithPhone(phone); - } - // 保存user到redis - // 生成随机token - String token = UUID.randomUUID().toString(true); - // 将user对象转换为Hash存储 - UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class); - Map userMap = BeanUtil.beanToMap(userDTO, - new HashMap<>(), - CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor( - (fieldName, fieldValue) -> fieldValue.toString() - )); - // 将用户信息存储在redis - String tokenKey = RedisConstants.LOGIN_USER_KEY + token; - stringRedisTemplate.opsForHash().putAll(tokenKey, userMap); - // 为该键值对设置有效期 - stringRedisTemplate.expire(tokenKey, 30, TimeUnit.MINUTES); - // 返回token - return Result.ok(token); - } - - private User createUserWithPhone(String phone) { - User user = new User(); - user.setPhone(phone); - user.setNickName(USER_NICK_NAME_PREFIX + RandomUtil.randomString(10)); - // 保存用户到数据库 - save(user); - return user; - } - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherOrderServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherOrderServiceImpl.java deleted file mode 100644 index a510f8c..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherOrderServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hongyi.service.impl; - -import com.hongyi.entity.VoucherOrder; -import com.hongyi.mapper.VoucherOrderMapper; -import com.hongyi.service.IVoucherOrderService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class VoucherOrderServiceImpl extends ServiceImpl implements IVoucherOrderService { - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherServiceImpl.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherServiceImpl.java deleted file mode 100644 index b51f03a..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/service/impl/VoucherServiceImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.hongyi.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.hongyi.dto.Result; -import com.hongyi.entity.Voucher; -import com.hongyi.mapper.VoucherMapper; -import com.hongyi.entity.SeckillVoucher; -import com.hongyi.service.ISeckillVoucherService; -import com.hongyi.service.IVoucherService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.util.List; - -/** - *

- * 服务实现类 - *

- * - * @author 虎哥 - * @since 2021-12-22 - */ -@Service -public class VoucherServiceImpl extends ServiceImpl implements IVoucherService { - - @Resource - private ISeckillVoucherService seckillVoucherService; - - @Override - public Result queryVoucherOfShop(Long shopId) { - // 查询优惠券信息 - List vouchers = getBaseMapper().queryVoucherOfShop(shopId); - // 返回结果 - return Result.ok(vouchers); - } - - @Override - @Transactional - public void addSeckillVoucher(Voucher voucher) { - // 保存优惠券 - save(voucher); - // 保存秒杀信息 - SeckillVoucher seckillVoucher = new SeckillVoucher(); - seckillVoucher.setVoucherId(voucher.getId()); - seckillVoucher.setStock(voucher.getStock()); - seckillVoucher.setBeginTime(voucher.getBeginTime()); - seckillVoucher.setEndTime(voucher.getEndTime()); - seckillVoucherService.save(seckillVoucher); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/PasswordEncoder.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/PasswordEncoder.java deleted file mode 100644 index 6881f32..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/PasswordEncoder.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.hongyi.utils; - - -import cn.hutool.core.util.RandomUtil; -import org.springframework.util.DigestUtils; - -import java.nio.charset.StandardCharsets; - -public class PasswordEncoder { - - public static String encode(String password) { - // 生成盐 - String salt = RandomUtil.randomString(20); - // 加密 - return encode(password,salt); - } - private static String encode(String password, String salt) { - // 加密 - return salt + "@" + DigestUtils.md5DigestAsHex((password + salt).getBytes(StandardCharsets.UTF_8)); - } - public static Boolean matches(String encodedPassword, String rawPassword) { - if (encodedPassword == null || rawPassword == null) { - return false; - } - if(!encodedPassword.contains("@")){ - throw new RuntimeException("密码格式不正确!"); - } - String[] arr = encodedPassword.split("@"); - // 获取盐 - String salt = arr[0]; - // 比较 - return encodedPassword.equals(encode(rawPassword, salt)); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisConstants.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisConstants.java deleted file mode 100644 index d40f3a7..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisConstants.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hongyi.utils; - -public class RedisConstants { - public static final String LOGIN_CODE_KEY = "login:code:"; - public static final Long LOGIN_CODE_TTL = 2L; - public static final String LOGIN_USER_KEY = "login:token:"; - public static final Long LOGIN_USER_TTL = 36000L; - - public static final Long CACHE_NULL_TTL = 2L; - - public static final Long CACHE_SHOP_TTL = 30L; - public static final String CACHE_SHOP_KEY = "cache:shop:"; - - public static final String CACHE_SHOP_TYPE_KEY = "cache:shop_type"; - - public static final String LOCK_SHOP_KEY = "lock:shop:"; - public static final Long LOCK_SHOP_TTL = 10L; - - public static final String SECKILL_STOCK_KEY = "seckill:stock:"; - public static final String BLOG_LIKED_KEY = "blog:liked:"; - public static final String FEED_KEY = "feed:"; - public static final String SHOP_GEO_KEY = "shop:geo:"; - public static final String USER_SIGN_KEY = "sign:"; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisData.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisData.java deleted file mode 100644 index 4b6173b..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RedisData.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.hongyi.utils; - -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -public class RedisData { - private LocalDateTime expireTime; - private Object data; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexPatterns.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexPatterns.java deleted file mode 100644 index 3bc6b73..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexPatterns.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hongyi.utils; - -/** - * @author 虎哥 - */ -public abstract class RegexPatterns { - /** - * 手机号正则 - */ - public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$"; - /** - * 邮箱正则 - */ - public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; - /** - * 密码正则。4~32位的字母、数字、下划线 - */ - public static final String PASSWORD_REGEX = "^\\w{4,32}$"; - /** - * 验证码正则, 6位数字或字母 - */ - public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$"; - -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexUtils.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexUtils.java deleted file mode 100644 index 4367ee2..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/RegexUtils.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.hongyi.utils; - -import cn.hutool.core.util.StrUtil; - -/** - * @author 虎哥 - */ -public class RegexUtils { - /** - * 是否是无效手机格式 - * @param phone 要校验的手机号 - * @return true:符合,false:不符合 - */ - public static boolean isPhoneInvalid(String phone){ - return mismatch(phone, RegexPatterns.PHONE_REGEX); - } - /** - * 是否是无效邮箱格式 - * @param email 要校验的邮箱 - * @return true:符合,false:不符合 - */ - public static boolean isEmailInvalid(String email){ - return mismatch(email, RegexPatterns.EMAIL_REGEX); - } - - /** - * 是否是无效验证码格式 - * @param code 要校验的验证码 - * @return true:符合,false:不符合 - */ - public static boolean isCodeInvalid(String code){ - return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX); - } - - // 校验是否不符合正则格式 - private static boolean mismatch(String str, String regex){ - if (StrUtil.isBlank(str)) { - return true; - } - return !str.matches(regex); - } -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/SystemConstants.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/SystemConstants.java deleted file mode 100644 index e1420fc..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/SystemConstants.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.hongyi.utils; - -public class SystemConstants { - public static final String IMAGE_UPLOAD_DIR = "D:\\lesson\\nginx-1.18.0\\html\\hmdp\\imgs\\"; - public static final String USER_NICK_NAME_PREFIX = "user_"; - public static final int DEFAULT_PAGE_SIZE = 5; - public static final int MAX_PAGE_SIZE = 10; -} diff --git a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/UserHolder.java b/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/UserHolder.java deleted file mode 100644 index 602bbff..0000000 --- a/redis_demo/hm-dianping/src/main/java/com/hongyi/utils/UserHolder.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hongyi.utils; - -import com.hongyi.dto.UserDTO; - -public class UserHolder { - private static final ThreadLocal tl = new ThreadLocal<>(); - - public static void saveUser(UserDTO user){ - tl.set(user); - } - - public static UserDTO getUser(){ - return tl.get(); - } - - public static void removeUser(){ - tl.remove(); - } -} diff --git a/redis_demo/hm-dianping/src/main/resources/application.yaml b/redis_demo/hm-dianping/src/main/resources/application.yaml deleted file mode 100644 index 3c73d62..0000000 --- a/redis_demo/hm-dianping/src/main/resources/application.yaml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 8081 -spring: - application: - name: hmdp - datasource: - driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://:3306/redis_test?useSSL=false&serverTimezone=UTC - username: root - password: - redis: - host: - port: 6379 - password: - lettuce: - pool: - max-active: 10 - max-idle: 10 - min-idle: 1 - time-between-eviction-runs: 10s - jackson: - default-property-inclusion: non_null # JSON处理时忽略非空字段 -mybatis-plus: - type-aliases-package: com.hongyi.entity # 别名扫描包 - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl -logging: - level: - com.hmdp: debug \ No newline at end of file diff --git a/redis_demo/hm-dianping/src/main/resources/db/hmdp.sql b/redis_demo/hm-dianping/src/main/resources/db/hmdp.sql deleted file mode 100644 index 91747d0..0000000 --- a/redis_demo/hm-dianping/src/main/resources/db/hmdp.sql +++ /dev/null @@ -1,284 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : local - Source Server Type : MySQL - Source Server Version : 50622 - Source Host : localhost:3306 - Source Schema : hmdp - - Target Server Type : MySQL - Target Server Version : 50622 - File Encoding : 65001 - - Date: 14/03/2022 21:38:11 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for tb_blog --- ---------------------------- -DROP TABLE IF EXISTS `tb_blog`; -CREATE TABLE `tb_blog` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `shop_id` bigint(20) NOT NULL COMMENT '商户id', - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标题', - `images` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '探店的照片,最多9张,多张以\",\"隔开', - `content` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '探店的文字描述', - `liked` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '点赞数量', - `comments` int(8) UNSIGNED NULL DEFAULT NULL COMMENT '评论数量', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_blog --- ---------------------------- -INSERT INTO `tb_blog` VALUES (4, 4, 2, '无尽浪漫的夜晚丨在万花丛中摇晃着红酒杯🍷品战斧牛排🥩', '/imgs/blogs/7/14/4771fefb-1a87-4252-816c-9f7ec41ffa4a.jpg,/imgs/blogs/4/10/2f07e3c9-ddce-482d-9ea7-c21450f8d7cd.jpg,/imgs/blogs/2/6/b0756279-65da-4f2d-b62a-33f74b06454a.jpg,/imgs/blogs/10/7/7e97f47d-eb49-4dc9-a583-95faa7aed287.jpg,/imgs/blogs/1/2/4a7b496b-2a08-4af7-aa95-df2c3bd0ef97.jpg,/imgs/blogs/14/3/52b290eb-8b5d-403b-8373-ba0bb856d18e.jpg', '生活就是一半烟火·一半诗意
手执烟火谋生活·心怀诗意以谋爱·
当然
\r\n男朋友给不了的浪漫要学会自己给🍒
\n无法重来的一生·尽量快乐.

🏰「小筑里·神秘浪漫花园餐厅」🏰

\n💯这是一家最最最美花园的西餐厅·到处都是花餐桌上是花前台是花 美好无处不在\n品一口葡萄酒,维亚红酒马瑟兰·微醺上头工作的疲惫消失无际·生如此多娇🍃

📍地址:延安路200号(家乐福面)

🚌交通:地铁①号线定安路B口出右转过下通道右转就到啦~

--------------🥣菜品详情🥣---------------

「战斧牛排]
\n超大一块战斧牛排经过火焰的炙烤发出阵阵香,外焦里嫩让人垂涎欲滴,切开牛排的那一刻,牛排的汁水顺势流了出来,分熟的牛排肉质软,简直细嫩到犯规,一刻都等不了要放入嘴里咀嚼~

「奶油培根意面」
太太太好吃了💯
我真的无法形容它的美妙,意面混合奶油香菇的香味真的太太太香了,我真的舔盘了,一丁点美味都不想浪费‼️


「香菜汁烤鲈鱼」
这个酱是辣的 真的绝好吃‼️
鲈鱼本身就很嫩没什么刺,烤过之后外皮酥酥的,鱼肉蘸上酱料根本停不下来啊啊啊啊
能吃辣椒的小伙伴一定要尝尝

非常可 好吃子🍽\n
--------------🍃个人感受🍃---------------

【👩🏻‍🍳服务】
小姐姐特别耐心的给我们介绍彩票
推荐特色菜品,拍照需要帮忙也是尽心尽力配合,太爱他们了

【🍃环境】
比较有格调的西餐厅 整个餐厅的布局可称得上的万花丛生 有种在人间仙境的感觉🌸
集美食美酒与鲜花为一体的风格店铺 令人向往
烟火皆是生活 人间皆是浪漫
', 1, 104, '2021-12-28 19:50:01', '2022-03-10 14:26:34'); -INSERT INTO `tb_blog` VALUES (5, 1, 2, '人均30💰杭州这家港式茶餐厅我疯狂打call‼️', '/imgs/blogs/4/7/863cc302-d150-420d-a596-b16e9232a1a6.jpg,/imgs/blogs/11/12/8b37d208-9414-4e78-b065-9199647bb3e3.jpg,/imgs/blogs/4/1/fa74a6d6-3026-4cb7-b0b6-35abb1e52d11.jpg,/imgs/blogs/9/12/ac2ce2fb-0605-4f14-82cc-c962b8c86688.jpg,/imgs/blogs/4/0/26a7cd7e-6320-432c-a0b4-1b7418f45ec7.jpg,/imgs/blogs/15/9/cea51d9b-ac15-49f6-b9f1-9cf81e9b9c85.jpg', '又吃到一家好吃的茶餐厅🍴环境是怀旧tvb港风📺边吃边拍照片📷几十种菜品均价都在20+💰可以是很平价了!
·
店名:九记冰厅(远洋店)
地址:杭州市丽水路远洋乐堤港负一楼(溜冰场旁边)
·
✔️黯然销魂饭(38💰)
这碗饭我吹爆!米饭上盖满了甜甜的叉烧 还有两颗溏心蛋🍳每一粒米饭都裹着浓郁的酱汁 光盘了
·
✔️铜锣湾漏奶华(28💰)
黄油吐司烤的脆脆的 上面洒满了可可粉🍫一刀切开 奶盖流心像瀑布一样流出来 满足
·
✔️神仙一口西多士士(16💰)
简简单单却超级好吃!西多士烤的很脆 黄油味浓郁 面包体超级柔软 上面淋了炼乳
·
✔️怀旧五柳炸蛋饭(28💰)
四个鸡蛋炸成蓬松的炸蛋!也太好吃了吧!还有大块鸡排 上淋了酸甜的酱汁 太合我胃口了!!
·
✔️烧味双拼例牌(66💰)
选了烧鹅➕叉烧 他家烧腊品质真的惊艳到我!据说是每日广州发货 到店现烧现卖的黑棕鹅 每口都是正宗的味道!肉质很嫩 皮超级超级酥脆!一口爆油!叉烧肉也一点都不柴 甜甜的很入味 搭配梅子酱很解腻 !
·
✔️红烧脆皮乳鸽(18.8💰)
乳鸽很大只 这个价格也太划算了吧, 肉质很有嚼劲 脆皮很酥 越吃越香~
·
✔️大满足小吃拼盘(25💰)
翅尖➕咖喱鱼蛋➕蝴蝶虾➕盐酥鸡
zui喜欢里面的咖喱鱼!咖喱酱香甜浓郁!鱼蛋很q弹~
·
✔️港式熊仔丝袜奶茶(19💰)
小熊🐻造型的奶茶冰也太可爱了!颜值担当 很地道的丝袜奶茶 茶味特别浓郁~
·', 1, 0, '2021-12-28 20:57:49', '2022-03-10 09:21:39'); -INSERT INTO `tb_blog` VALUES (6, 10, 1, '杭州周末好去处|💰50就可以骑马啦🐎', '/imgs/blogs/blog1.jpg', '杭州周末好去处|💰50就可以骑马啦🐎', 1, 0, '2022-01-11 16:05:47', '2022-03-10 09:21:41'); -INSERT INTO `tb_blog` VALUES (7, 10, 1, '杭州周末好去处|💰50就可以骑马啦🐎', '/imgs/blogs/blog1.jpg', '杭州周末好去处|💰50就可以骑马啦🐎', 1, 0, '2022-01-11 16:05:47', '2022-03-10 09:21:42'); - --- ---------------------------- --- Table structure for tb_blog_comments --- ---------------------------- -DROP TABLE IF EXISTS `tb_blog_comments`; -CREATE TABLE `tb_blog_comments` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', - `blog_id` bigint(20) UNSIGNED NOT NULL COMMENT '探店id', - `parent_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的1级评论id,如果是一级评论,则值为0', - `answer_id` bigint(20) UNSIGNED NOT NULL COMMENT '回复的评论id', - `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '回复的内容', - `liked` int(8) UNSIGNED NULL DEFAULT NULL COMMENT '点赞数', - `status` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '状态,0:正常,1:被举报,2:禁止查看', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_blog_comments --- ---------------------------- - --- ---------------------------- --- Table structure for tb_follow --- ---------------------------- -DROP TABLE IF EXISTS `tb_follow`; -CREATE TABLE `tb_follow` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', - `follow_user_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的用户id', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_follow --- ---------------------------- - --- ---------------------------- --- Table structure for tb_seckill_voucher --- ---------------------------- -DROP TABLE IF EXISTS `tb_seckill_voucher`; -CREATE TABLE `tb_seckill_voucher` ( - `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的优惠券的id', - `stock` int(8) NOT NULL COMMENT '库存', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `begin_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '生效时间', - `end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '失效时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`voucher_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '秒杀优惠券表,与优惠券是一对一关系' ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_seckill_voucher --- ---------------------------- - --- ---------------------------- --- Table structure for tb_shop --- ---------------------------- -DROP TABLE IF EXISTS `tb_shop`; -CREATE TABLE `tb_shop` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商铺名称', - `type_id` bigint(20) UNSIGNED NOT NULL COMMENT '商铺类型的id', - `images` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商铺图片,多个图片以\',\'隔开', - `area` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商圈,例如陆家嘴', - `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地址', - `x` double UNSIGNED NOT NULL COMMENT '经度', - `y` double UNSIGNED NOT NULL COMMENT '维度', - `avg_price` bigint(10) UNSIGNED NULL DEFAULT NULL COMMENT '均价,取整数', - `sold` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '销量', - `comments` int(10) UNSIGNED ZEROFILL NOT NULL COMMENT '评论数量', - `score` int(2) UNSIGNED ZEROFILL NOT NULL COMMENT '评分,1~5分,乘10保存,避免小数', - `open_hours` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '营业时间,例如 10:00-22:00', - `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `foreign_key_type`(`type_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_shop --- ---------------------------- -INSERT INTO `tb_shop` VALUES (1, '103茶餐厅', 1, 'https://qcloud.dpfile.com/pc/jiclIsCKmOI2arxKN1Uf0Hx3PucIJH8q0QSz-Z8llzcN56-_QiKuOvyio1OOxsRtFoXqu0G3iT2T27qat3WhLVEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vfCF2ubeXzk49OsGrXt_KYDCngOyCwZK-s3fqawWswzk.jpg,https://qcloud.dpfile.com/pc/IOf6VX3qaBgFXFVgp75w-KKJmWZjFc8GXDU8g9bQC6YGCpAmG00QbfT4vCCBj7njuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '大关', '金华路锦昌文华苑29号', 120.149192, 30.316078, 80, 0000004215, 0000003035, 37, '10:00-22:00', '2021-12-22 18:10:39', '2022-01-13 17:32:19'); -INSERT INTO `tb_shop` VALUES (2, '蔡馬洪涛烤肉·老北京铜锅涮羊肉', 1, 'https://p0.meituan.net/bbia/c1870d570e73accbc9fee90b48faca41195272.jpg,http://p0.meituan.net/mogu/397e40c28fc87715b3d5435710a9f88d706914.jpg,https://qcloud.dpfile.com/pc/MZTdRDqCZdbPDUO0Hk6lZENRKzpKRF7kavrkEI99OxqBZTzPfIxa5E33gBfGouhFuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '拱宸桥/上塘', '上塘路1035号(中国工商银行旁)', 120.151505, 30.333422, 85, 0000002160, 0000001460, 46, '11:30-03:00', '2021-12-22 19:00:13', '2022-01-11 16:12:26'); -INSERT INTO `tb_shop` VALUES (3, '新白鹿餐厅(运河上街店)', 1, 'https://p0.meituan.net/biztone/694233_1619500156517.jpeg,https://img.meituan.net/msmerchant/876ca8983f7395556eda9ceb064e6bc51840883.png,https://img.meituan.net/msmerchant/86a76ed53c28eff709a36099aefe28b51554088.png', '运河上街', '台州路2号运河上街购物中心F5', 120.151954, 30.32497, 61, 0000012035, 0000008045, 47, '10:30-21:00', '2021-12-22 19:10:05', '2022-01-11 16:12:42'); -INSERT INTO `tb_shop` VALUES (4, 'Mamala(杭州远洋乐堤港店)', 1, 'https://img.meituan.net/msmerchant/232f8fdf09050838bd33fb24e79f30f9606056.jpg,https://qcloud.dpfile.com/pc/rDe48Xe15nQOHCcEEkmKUp5wEKWbimt-HDeqYRWsYJseXNncvMiXbuED7x1tXqN4uzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '拱宸桥/上塘', '丽水路66号远洋乐堤港商城2期1层B115号', 120.146659, 30.312742, 290, 0000013519, 0000009529, 49, '11:00-22:00', '2021-12-22 19:17:15', '2022-01-11 16:12:51'); -INSERT INTO `tb_shop` VALUES (5, '海底捞火锅(水晶城购物中心店)', 1, 'https://img.meituan.net/msmerchant/054b5de0ba0b50c18a620cc37482129a45739.jpg,https://img.meituan.net/msmerchant/59b7eff9b60908d52bd4aea9ff356e6d145920.jpg,https://qcloud.dpfile.com/pc/Qe2PTEuvtJ5skpUXKKoW9OQ20qc7nIpHYEqJGBStJx0mpoyeBPQOJE4vOdYZwm9AuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg', '大关', '上塘路458号水晶城购物中心F6', 120.15778, 30.310633, 104, 0000004125, 0000002764, 49, '10:00-07:00', '2021-12-22 19:20:58', '2022-01-11 16:13:01'); -INSERT INTO `tb_shop` VALUES (6, '幸福里老北京涮锅(丝联店)', 1, 'https://img.meituan.net/msmerchant/e71a2d0d693b3033c15522c43e03f09198239.jpg,https://img.meituan.net/msmerchant/9f8a966d60ffba00daf35458522273ca658239.jpg,https://img.meituan.net/msmerchant/ef9ca5ef6c05d381946fe4a9aa7d9808554502.jpg', '拱宸桥/上塘', '金华南路189号丝联166号', 120.148603, 30.318618, 130, 0000009531, 0000007324, 46, '11:00-13:50,17:00-20:50', '2021-12-22 19:24:53', '2022-01-11 16:13:09'); -INSERT INTO `tb_shop` VALUES (7, '炉鱼(拱墅万达广场店)', 1, 'https://img.meituan.net/msmerchant/909434939a49b36f340523232924402166854.jpg,https://img.meituan.net/msmerchant/32fd2425f12e27db0160e837461c10303700032.jpg,https://img.meituan.net/msmerchant/f7022258ccb8dabef62a0514d3129562871160.jpg', '北部新城', '杭行路666号万达商业中心4幢2单元409室(铺位号4005)', 120.124691, 30.336819, 85, 0000002631, 0000001320, 47, '00:00-24:00', '2021-12-22 19:40:52', '2022-01-11 16:13:19'); -INSERT INTO `tb_shop` VALUES (8, '浅草屋寿司(运河上街店)', 1, 'https://img.meituan.net/msmerchant/cf3dff697bf7f6e11f4b79c4e7d989e4591290.jpg,https://img.meituan.net/msmerchant/0b463f545355c8d8f021eb2987dcd0c8567811.jpg,https://img.meituan.net/msmerchant/c3c2516939efaf36c4ccc64b0e629fad587907.jpg', '运河上街', '拱墅区金华路80号运河上街B1', 120.150526, 30.325231, 88, 0000002406, 0000001206, 46, ' 11:00-21:30', '2021-12-22 19:51:06', '2022-01-11 16:13:25'); -INSERT INTO `tb_shop` VALUES (9, '羊老三羊蝎子牛仔排北派炭火锅(运河上街店)', 1, 'https://p0.meituan.net/biztone/163160492_1624251899456.jpeg,https://img.meituan.net/msmerchant/e478eb16f7e31a7f8b29b5e3bab6de205500837.jpg,https://img.meituan.net/msmerchant/6173eb1d18b9d70ace7fdb3f2dd939662884857.jpg', '运河上街', '台州路2号运河上街购物中心F5', 120.150598, 30.325251, 101, 0000002763, 0000001363, 44, '11:00-21:30', '2021-12-22 19:53:59', '2022-01-11 16:13:34'); -INSERT INTO `tb_shop` VALUES (10, '开乐迪KTV(运河上街店)', 2, 'https://p0.meituan.net/joymerchant/a575fd4adb0b9099c5c410058148b307-674435191.jpg,https://p0.meituan.net/merchantpic/68f11bf850e25e437c5f67decfd694ab2541634.jpg,https://p0.meituan.net/dpdeal/cb3a12225860ba2875e4ea26c6d14fcc197016.jpg', '运河上街', '台州路2号运河上街购物中心F4', 120.149093, 30.324666, 67, 0000026891, 0000000902, 37, '00:00-24:00', '2021-12-22 20:25:16', '2021-12-22 20:25:16'); -INSERT INTO `tb_shop` VALUES (11, 'INLOVE KTV(水晶城店)', 2, 'https://p0.meituan.net/dpmerchantpic/53e74b200211d68988a4f02ae9912c6c1076826.jpg,https://qcloud.dpfile.com/pc/4iWtIvzLzwM2MGgyPu1PCDb4SWEaKqUeHm--YAt1EwR5tn8kypBcqNwHnjg96EvT_Gd2X_f-v9T8Yj4uLt25Gg.jpg,https://qcloud.dpfile.com/pc/WZsJWRI447x1VG2x48Ujgu7vwqksi_9WitdKI4j3jvIgX4MZOpGNaFtM93oSSizbGybIjx5eX6WNgCPvcASYAw.jpg', '水晶城', '上塘路458号水晶城购物中心6层', 120.15853, 30.310002, 75, 0000035977, 0000005684, 47, '11:30-06:00', '2021-12-22 20:29:02', '2021-12-22 20:39:00'); -INSERT INTO `tb_shop` VALUES (12, '魅(杭州远洋乐堤港店)', 2, 'https://p0.meituan.net/dpmerchantpic/63833f6ba0393e2e8722420ef33f3d40466664.jpg,https://p0.meituan.net/dpmerchantpic/ae3c94cc92c529c4b1d7f68cebed33fa105810.png,', '远洋乐堤港', '丽水路58号远洋乐堤港F4', 120.14983, 30.31211, 88, 0000006444, 0000000235, 46, '10:00-02:00', '2021-12-22 20:34:34', '2021-12-22 20:34:34'); -INSERT INTO `tb_shop` VALUES (13, '讴K拉量贩KTV(北城天地店)', 2, 'https://p1.meituan.net/merchantpic/598c83a8c0d06fe79ca01056e214d345875600.jpg,https://qcloud.dpfile.com/pc/HhvI0YyocYHRfGwJWqPQr34hRGRl4cWdvlNwn3dqghvi4WXlM2FY1te0-7pE3Wb9_Gd2X_f-v9T8Yj4uLt25Gg.jpg,https://qcloud.dpfile.com/pc/F5ZVzZaXFE27kvQzPnaL4V8O9QCpVw2nkzGrxZE8BqXgkfyTpNExfNG5CEPQX4pjGybIjx5eX6WNgCPvcASYAw.jpg', 'D32天阳购物中心', '湖州街567号北城天地5层', 120.130453, 30.327655, 58, 0000018997, 0000001857, 41, '12:00-02:00', '2021-12-22 20:38:54', '2021-12-22 20:40:04'); -INSERT INTO `tb_shop` VALUES (14, '星聚会KTV(拱墅区万达店)', 2, 'https://p0.meituan.net/dpmerchantpic/f4cd6d8d4eb1959c3ea826aa05a552c01840451.jpg,https://p0.meituan.net/dpmerchantpic/2efc07aed856a8ab0fc75c86f4b9b0061655777.jpg,https://qcloud.dpfile.com/pc/zWfzzIorCohKT0bFwsfAlHuayWjI6DBEMPHHncmz36EEMU9f48PuD9VxLLDAjdoU_Gd2X_f-v9T8Yj4uLt25Gg.jpg', '北部新城', '杭行路666号万达广场C座1-2F', 120.128958, 30.337252, 60, 0000017771, 0000000685, 47, '10:00-22:00', '2021-12-22 20:48:54', '2021-12-22 20:48:54'); - --- ---------------------------- --- Table structure for tb_shop_type --- ---------------------------- -DROP TABLE IF EXISTS `tb_shop_type`; -CREATE TABLE `tb_shop_type` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型名称', - `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标', - `sort` int(3) UNSIGNED NULL DEFAULT NULL COMMENT '顺序', - `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_shop_type --- ---------------------------- -INSERT INTO `tb_shop_type` VALUES (1, '美食', '/types/ms.png', 1, '2021-12-22 20:17:47', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (2, 'KTV', '/types/KTV.png', 2, '2021-12-22 20:18:27', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (3, '丽人·美发', '/types/lrmf.png', 3, '2021-12-22 20:18:48', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (4, '健身运动', '/types/jsyd.png', 10, '2021-12-22 20:19:04', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (5, '按摩·足疗', '/types/amzl.png', 5, '2021-12-22 20:19:27', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (6, '美容SPA', '/types/spa.png', 6, '2021-12-22 20:19:35', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (7, '亲子游乐', '/types/qzyl.png', 7, '2021-12-22 20:19:53', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (8, '酒吧', '/types/jiuba.png', 8, '2021-12-22 20:20:02', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (9, '轰趴馆', '/types/hpg.png', 9, '2021-12-22 20:20:08', '2021-12-23 11:24:31'); -INSERT INTO `tb_shop_type` VALUES (10, '美睫·美甲', '/types/mjmj.png', 4, '2021-12-22 20:21:46', '2021-12-23 11:24:31'); - --- ---------------------------- --- Table structure for tb_sign --- ---------------------------- -DROP TABLE IF EXISTS `tb_sign`; -CREATE TABLE `tb_sign` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户id', - `year` year NOT NULL COMMENT '签到的年', - `month` tinyint(2) NOT NULL COMMENT '签到的月', - `date` date NOT NULL COMMENT '签到的日期', - `is_backup` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否补签', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_sign --- ---------------------------- - --- ---------------------------- --- Table structure for tb_user --- ---------------------------- -DROP TABLE IF EXISTS `tb_user`; -CREATE TABLE `tb_user` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号码', - `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码,加密存储', - `nick_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '昵称,默认是用户id', - `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '人物头像', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uniqe_key_phone`(`phone`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1010 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_user --- ---------------------------- -INSERT INTO `tb_user` VALUES (1, '13686869696', '', '小鱼同学', '/imgs/blogs/blog1.jpg', '2021-12-24 10:27:19', '2022-01-11 16:04:00'); -INSERT INTO `tb_user` VALUES (2, '13838411438', '', '可可今天不吃肉', '/imgs/icons/kkjtbcr.jpg', '2021-12-24 15:14:39', '2021-12-28 19:58:04'); -INSERT INTO `tb_user` VALUES (4, '13456789011', '', 'user_slxaxy2au9f3tanffaxr', '', '2022-01-07 12:07:53', '2022-01-07 12:07:53'); -INSERT INTO `tb_user` VALUES (5, '13456789001', '', '可爱多', '/imgs/icons/user5-icon.png', '2022-01-07 16:11:33', '2022-03-11 09:09:20'); -INSERT INTO `tb_user` VALUES (6, '13456762069', '', 'user_xn5wr3hpsv', '', '2022-02-07 17:54:10', '2022-02-07 17:54:10'); - --- ---------------------------- --- Table structure for tb_user_info --- ---------------------------- -DROP TABLE IF EXISTS `tb_user_info`; -CREATE TABLE `tb_user_info` ( - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键,用户id', - `city` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '城市名称', - `introduce` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '个人介绍,不要超过128个字符', - `fans` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '粉丝数量', - `followee` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '关注的人的数量', - `gender` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '性别,0:男,1:女', - `birthday` date NULL DEFAULT NULL COMMENT '生日', - `credits` int(8) UNSIGNED NULL DEFAULT 0 COMMENT '积分', - `level` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '会员级别,0~9级,0代表未开通会员', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`user_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_user_info --- ---------------------------- - --- ---------------------------- --- Table structure for tb_voucher --- ---------------------------- -DROP TABLE IF EXISTS `tb_voucher`; -CREATE TABLE `tb_voucher` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', - `shop_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '商铺id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '代金券标题', - `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '副标题', - `rules` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用规则', - `pay_value` bigint(10) UNSIGNED NOT NULL COMMENT '支付金额,单位是分。例如200代表2元', - `actual_value` bigint(10) NOT NULL COMMENT '抵扣金额,单位是分。例如200代表2元', - `type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '0,普通券;1,秒杀券', - `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '1,上架; 2,下架; 3,过期', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_voucher --- ---------------------------- -INSERT INTO `tb_voucher` VALUES (1, 1, '50元代金券', '周一至周日均可使用', '全场通用\\n无需预约\\n可无限叠加\\不兑现、不找零\\n仅限堂食', 4750, 5000, 0, 1, '2022-01-04 09:42:39', '2022-01-04 09:43:31'); - --- ---------------------------- --- Table structure for tb_voucher_order --- ---------------------------- -DROP TABLE IF EXISTS `tb_voucher_order`; -CREATE TABLE `tb_voucher_order` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '下单的用户id', - `voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '购买的代金券id', - `pay_type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '支付方式 1:余额支付;2:支付宝;3:微信', - `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '订单状态,1:未支付;2:已支付;3:已核销;4:已取消;5:退款中;6:已退款', - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间', - `pay_time` timestamp NULL DEFAULT NULL COMMENT '支付时间', - `use_time` timestamp NULL DEFAULT NULL COMMENT '核销时间', - `refund_time` timestamp NULL DEFAULT NULL COMMENT '退款时间', - `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; - --- ---------------------------- --- Records of tb_voucher_order --- ---------------------------- - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/redis_demo/hm-dianping/src/main/resources/mapper/SeckillVoucherMapper.xml b/redis_demo/hm-dianping/src/main/resources/mapper/SeckillVoucherMapper.xml deleted file mode 100644 index 8451c90..0000000 --- a/redis_demo/hm-dianping/src/main/resources/mapper/SeckillVoucherMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/redis_demo/hm-dianping/src/main/resources/mapper/VoucherMapper.xml b/redis_demo/hm-dianping/src/main/resources/mapper/VoucherMapper.xml deleted file mode 100644 index cd7be45..0000000 --- a/redis_demo/hm-dianping/src/main/resources/mapper/VoucherMapper.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/redis_demo/hm-dianping/src/test/java/com/hongyi/HmDianPingApplicationTests.java b/redis_demo/hm-dianping/src/test/java/com/hongyi/HmDianPingApplicationTests.java deleted file mode 100644 index 4b094c9..0000000 --- a/redis_demo/hm-dianping/src/test/java/com/hongyi/HmDianPingApplicationTests.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.hongyi; - -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class HmDianPingApplicationTests { - - -} -- Gitee