From 48f43f7c4d4c596c5c1eaf6258875e90bffbe94a Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 4 Mar 2024 19:25:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?redis=20key=E8=BF=87=E6=9C=9F=20=E7=9B=91?= =?UTF-8?q?=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/ysk/cashier/config/RedisConfig.java | 22 ++++++++---- .../config/RedisKeyExpirationListener.java | 17 +++++++++ .../order/TbCashierCartController.java | 18 +++++----- .../order/TbOrderDetailController.java | 18 +++++----- .../order/TbOrderInfoController.java | 25 ++++++------- .../ysk/cashier/dto/order/TbOrderInfoDto.java | 7 ++-- .../ysk/cashier/pojo/order/TbOrderDetail.java | 2 +- .../order/TbCashierCartRepository.java | 7 ---- .../order/TbOrderDetailRepository.java | 7 ++++ .../impl/order/TbOrderInfoServiceImpl.java | 35 ++++++++++--------- .../java/cn/ysk/cashier/vo/TbOrderInfoVo.java | 4 +-- 11 files changed, 96 insertions(+), 66 deletions(-) create mode 100644 eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java index b2651602..f60b92ec 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java @@ -21,6 +21,7 @@ import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; @@ -36,6 +37,8 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.PatternTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; import reactor.util.annotation.Nullable; @@ -57,6 +60,9 @@ import java.util.Map; @EnableConfigurationProperties(RedisProperties.class) public class RedisConfig extends CachingConfigurerSupport { + @Autowired + private RedisKeyExpirationListener redisKeyExpirationListener; + /** * 设置 redis 数据默认过期时间,默认2小时 * 设置@cacheable 序列化方式 @@ -83,16 +89,10 @@ public class RedisConfig extends CachingConfigurerSupport { // fastjson 升级到 1.2.83 后需要指定序列化白名单 ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.pojo"); ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.service"); - // 模块内的实体类 -// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.mnt.domain"); -// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.quartz.domain"); -// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system.domain"); - // 模块内的 Dto ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.mnt"); ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system"); ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.quartz"); ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.config"); -// ParserConfig.getGlobalInstance().addAccept("cn.ysk.cashier.system.service.dto"); // key的序列化采用StringRedisSerializer template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); @@ -100,6 +100,16 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } + //redis key失效监听 + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + // 监听特定键的过期事件 + container.addMessageListener(redisKeyExpirationListener, new PatternTopic("__keyevent@0__:expired")); + return container; + } + /** * 自定义缓存key生成策略,默认将使用该策略 */ diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java new file mode 100644 index 00000000..95b6e090 --- /dev/null +++ b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java @@ -0,0 +1,17 @@ +package cn.ysk.cashier.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; + +@Configuration +public class RedisKeyExpirationListener implements MessageListener { + + @Override + public void onMessage(Message message, byte[] pattern) { + String expiredKey = new String(message.getBody()); + System.out.println("过期的Key为: " + expiredKey); + // 在这里添加处理键过期事件的逻辑 + } + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbCashierCartController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbCashierCartController.java index f1ba8751..0f4657a6 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbCashierCartController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbCashierCartController.java @@ -36,7 +36,7 @@ import javax.servlet.http.HttpServletResponse; **/ @RestController @RequiredArgsConstructor -@Api(tags = "/cashierCart管理") +@Api(tags = "购物车管理") @RequestMapping("/api/tbCashierCart") public class TbCashierCartController { @@ -50,30 +50,30 @@ public class TbCashierCartController { } @GetMapping - @Log("查询/cashierCart") - @ApiOperation("查询/cashierCart") + @Log("查询购物车") + @ApiOperation("查询购物车") public ResponseEntity queryTbCashierCart(TbCashierCartQueryCriteria criteria, Pageable pageable){ return new ResponseEntity<>(tbCashierCartService.queryAll(criteria,pageable),HttpStatus.OK); } @PostMapping - @Log("新增/cashierCart") - @ApiOperation("新增/cashierCart") + @Log("新增购物车") + @ApiOperation("新增购物车") public ResponseEntity createTbCashierCart(@Validated @RequestBody TbCashierCart resources){ return new ResponseEntity<>(tbCashierCartService.create(resources),HttpStatus.CREATED); } @PutMapping - @Log("修改/cashierCart") - @ApiOperation("修改/cashierCart") + @Log("修改购物车") + @ApiOperation("修改购物车") public ResponseEntity updateTbCashierCart(@Validated @RequestBody TbCashierCart resources){ tbCashierCartService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @DeleteMapping - @Log("删除/cashierCart") - @ApiOperation("删除/cashierCart") + @Log("删除购物车") + @ApiOperation("删除购物车") public ResponseEntity deleteTbCashierCart(@RequestBody Integer[] ids) { tbCashierCartService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderDetailController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderDetailController.java index 29d65dfa..aaad587c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderDetailController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderDetailController.java @@ -36,7 +36,7 @@ import javax.servlet.http.HttpServletResponse; **/ @RestController @RequiredArgsConstructor -@Api(tags = "/orderDetail管理") +@Api(tags = "订单详情") @RequestMapping("/api/tbOrderDetail") public class TbOrderDetailController { @@ -50,30 +50,30 @@ public class TbOrderDetailController { } @GetMapping - @Log("查询/orderDetail") - @ApiOperation("查询/orderDetail") + @Log("查询订单详情") + @ApiOperation("查询订单详情") public ResponseEntity queryTbOrderDetail(TbOrderDetailQueryCriteria criteria, Pageable pageable){ return new ResponseEntity<>(tbOrderDetailService.queryAll(criteria,pageable),HttpStatus.OK); } @PostMapping - @Log("新增/orderDetail") - @ApiOperation("新增/orderDetail") + @Log("新增订单详情") + @ApiOperation("新增订单详情") public ResponseEntity createTbOrderDetail(@Validated @RequestBody TbOrderDetail resources){ return new ResponseEntity<>(tbOrderDetailService.create(resources),HttpStatus.CREATED); } @PutMapping - @Log("修改/orderDetail") - @ApiOperation("修改/orderDetail") + @Log("修改订单详情") + @ApiOperation("修改订单详情") public ResponseEntity updateTbOrderDetail(@Validated @RequestBody TbOrderDetail resources){ tbOrderDetailService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @DeleteMapping - @Log("删除/orderDetail") - @ApiOperation("删除/orderDetail") + @Log("删除订单详情") + @ApiOperation("删除订单详情") public ResponseEntity deleteTbOrderDetail(@RequestBody Integer[] ids) { tbOrderDetailService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java index 1d6e003c..ec101a23 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java @@ -16,6 +16,7 @@ package cn.ysk.cashier.controller.order; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.dto.order.TbOrderInfoDto; import cn.ysk.cashier.pojo.order.TbOrderInfo; import cn.ysk.cashier.service.order.TbOrderInfoService; import cn.ysk.cashier.dto.order.TbOrderInfoQueryCriteria; @@ -36,7 +37,7 @@ import javax.servlet.http.HttpServletResponse; **/ @RestController @RequiredArgsConstructor -@Api(tags = "/orderInfo管理") +@Api(tags = "订单管理") @RequestMapping("/api/tbOrderInfo") public class TbOrderInfoController { @@ -50,37 +51,37 @@ public class TbOrderInfoController { } @GetMapping - @Log("查询/orderInfo") - @ApiOperation("查询/orderInfo") + @Log("查询订单") + @ApiOperation("查询订单") public ResponseEntity queryTbOrderInfo(TbOrderInfoQueryCriteria criteria, Pageable pageable){ return new ResponseEntity<>(tbOrderInfoService.queryAll(criteria,pageable),HttpStatus.OK); } @GetMapping("/{id}") - @Log("查询/orderInfo") - @ApiOperation("查询/orderInfo") - public Object queryTbOrderInfo(@PathVariable("id") Integer id){ + @Log("通过Id查询订单") + @ApiOperation("通过Id查询订单") + public TbOrderInfoDto queryTbOrderInfo(@PathVariable("id") Integer id){ return tbOrderInfoService.findById(id); } @PostMapping - @Log("新增/orderInfo") - @ApiOperation("新增/orderInfo") + @Log("新增订单") + @ApiOperation("新增订单") public ResponseEntity createTbOrderInfo(@Validated @RequestBody TbOrderInfo resources){ return new ResponseEntity<>(tbOrderInfoService.create(resources),HttpStatus.CREATED); } @PutMapping - @Log("修改/orderInfo") - @ApiOperation("修改/orderInfo") + @Log("修改订单") + @ApiOperation("修改订单") public ResponseEntity updateTbOrderInfo(@Validated @RequestBody TbOrderInfo resources){ tbOrderInfoService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @DeleteMapping - @Log("删除/orderInfo") - @ApiOperation("删除/orderInfo") + @Log("删除订单") + @ApiOperation("删除订单") public ResponseEntity deleteTbOrderInfo(@RequestBody Integer[] ids) { tbOrderInfoService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoDto.java index f614d069..7bc567c1 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoDto.java @@ -15,8 +15,9 @@ */ package cn.ysk.cashier.dto.order; +import cn.ysk.cashier.pojo.order.TbOrderDetail; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import cn.ysk.cashier.pojo.order.TbCashierCart; import java.math.BigDecimal; import java.io.Serializable; @@ -34,8 +35,8 @@ public class TbOrderInfoDto implements Serializable { private Integer id; /** 订单编号 */ + @ApiModelProperty(value = "订单编号") private String orderNo; - /** 商户结算金额 */ private BigDecimal settlementAmount; @@ -154,5 +155,5 @@ public class TbOrderInfoDto implements Serializable { private String remark; - private List cartList; + private List detailList; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java index 1e70f970..039ea857 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java @@ -43,7 +43,7 @@ public class TbOrderDetail implements Serializable { private Integer id; @Column(name = "`order_id`") - @ApiModelProperty(value = "orderId") + @ApiModelProperty(value = "订单id") private Integer orderId; @Column(name = "`shop_id`") diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbCashierCartRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbCashierCartRepository.java index 003161a7..f45552b7 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbCashierCartRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbCashierCartRepository.java @@ -18,10 +18,6 @@ package cn.ysk.cashier.repository.order; import cn.ysk.cashier.pojo.order.TbCashierCart; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -import java.util.List; /** * @website https://eladmin.vip @@ -29,7 +25,4 @@ import java.util.List; * @date 2024-03-02 **/ public interface TbCashierCartRepository extends JpaRepository, JpaSpecificationExecutor { - - @Query("SELECT cart FROM TbCashierCart cart WHERE cart.orderId = :orderId") - List searchCartByOrderId(@Param("orderId")Integer orderId); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java index c41a032e..40e8cfb0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java @@ -18,6 +18,10 @@ package cn.ysk.cashier.repository.order; import cn.ysk.cashier.pojo.order.TbOrderDetail; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; /** * @website https://eladmin.vip @@ -25,4 +29,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2024-03-02 **/ public interface TbOrderDetailRepository extends JpaRepository, JpaSpecificationExecutor { + + @Query("SELECT cart FROM TbOrderDetail cart WHERE cart.orderId = :orderId") + List searchDetailByOrderId(@Param("orderId")Integer orderId); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java index 21747018..690b2298 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java @@ -15,32 +15,32 @@ */ package cn.ysk.cashier.service.impl.order; -import cn.ysk.cashier.pojo.order.TbCashierCart; -import cn.ysk.cashier.repository.order.TbCashierCartRepository; +import cn.ysk.cashier.dto.order.TbOrderInfoDto; +import cn.ysk.cashier.dto.order.TbOrderInfoQueryCriteria; +import cn.ysk.cashier.mapper.order.TbOrderInfoMapper; +import cn.ysk.cashier.pojo.order.TbOrderDetail; import cn.ysk.cashier.pojo.order.TbOrderInfo; +import cn.ysk.cashier.repository.order.TbOrderDetailRepository; +import cn.ysk.cashier.repository.order.TbOrderInfoRepository; +import cn.ysk.cashier.service.order.TbOrderInfoService; import cn.ysk.cashier.utils.FileUtil; import cn.ysk.cashier.utils.PageUtil; import cn.ysk.cashier.utils.QueryHelp; import cn.ysk.cashier.utils.ValidationUtil; import cn.ysk.cashier.vo.TbOrderInfoVo; import lombok.RequiredArgsConstructor; -import cn.ysk.cashier.repository.order.TbOrderInfoRepository; -import cn.ysk.cashier.service.order.TbOrderInfoService; -import cn.ysk.cashier.dto.order.TbOrderInfoDto; -import cn.ysk.cashier.dto.order.TbOrderInfoQueryCriteria; -import cn.ysk.cashier.mapper.order.TbOrderInfoMapper; import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; -import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** * @website https://eladmin.vip @@ -54,15 +54,16 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { private final TbOrderInfoRepository tbOrderInfoRepository; private final TbOrderInfoMapper tbOrderInfoMapper; - private final TbCashierCartRepository tbCashierCartRepository; + + private final TbOrderDetailRepository tbOrderDetailRepository; @Override public Map queryAll(TbOrderInfoQueryCriteria criteria, Pageable pageable){ Page page = tbOrderInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); List orderInfoVoList = new ArrayList<>(); for (TbOrderInfo tbOrderInfo : page.getContent()) { TbOrderInfoVo orderInfoVo=new TbOrderInfoVo(); - List tbCashierCarts = tbCashierCartRepository.searchCartByOrderId(tbOrderInfo.getId()); - orderInfoVo.setCartList(tbCashierCarts); + List details = tbOrderDetailRepository.searchDetailByOrderId(tbOrderInfo.getId()); + orderInfoVo.setDetailList(details); BeanUtils.copyProperties(tbOrderInfo, orderInfoVo); orderInfoVoList.add(orderInfoVo); } @@ -80,8 +81,8 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { TbOrderInfo tbOrderInfo = tbOrderInfoRepository.findById(id).orElseGet(TbOrderInfo::new); ValidationUtil.isNull(tbOrderInfo.getId(),"TbOrderInfo","id",id); TbOrderInfoDto dto = tbOrderInfoMapper.toDto(tbOrderInfo); - List tbCashierCarts = tbCashierCartRepository.searchCartByOrderId(tbOrderInfo.getId()); - dto.setCartList(tbCashierCarts); + List details = tbOrderDetailRepository.searchDetailByOrderId(tbOrderInfo.getId()); + dto.setDetailList(details); return dto; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java index 62d1531f..139cb711 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java @@ -15,8 +15,8 @@ */ package cn.ysk.cashier.vo; +import cn.ysk.cashier.pojo.order.TbOrderDetail; import lombok.Data; -import cn.ysk.cashier.pojo.order.TbCashierCart; import java.math.BigDecimal; import java.util.List; @@ -112,5 +112,5 @@ public class TbOrderInfoVo { private String remark; - private List cartList; + private List detailList; } From c6103ca00f685056416fb22bfa942184a59b9381 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 5 Mar 2024 09:41:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?redis=20key=E8=BF=87=E6=9C=9F=20=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/ysk/cashier/config/RedisConfig.java | 11 ---- .../config/RedisKeyExpirationListener.java | 17 ------ .../java/cn/ysk/cashier/utils/CacheKey.java | 23 +++++--- .../config/RedisKeyExpirationListener.java | 55 +++++++++++++++++++ .../repository/shop/TbShopInfoRepository.java | 40 ++++++++------ .../impl/shopimpl/TbShopInfoServiceImpl.java | 6 ++ .../service/shop/TbShopInfoService.java | 2 + .../system/repository/UserRepository.java | 4 ++ .../cashier/system/service/UserService.java | 2 + .../system/service/impl/UserServiceImpl.java | 7 +++ 10 files changed, 112 insertions(+), 55 deletions(-) delete mode 100644 eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java index f60b92ec..d9fb969c 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisConfig.java @@ -60,8 +60,6 @@ import java.util.Map; @EnableConfigurationProperties(RedisProperties.class) public class RedisConfig extends CachingConfigurerSupport { - @Autowired - private RedisKeyExpirationListener redisKeyExpirationListener; /** * 设置 redis 数据默认过期时间,默认2小时 @@ -100,15 +98,6 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } - //redis key失效监听 - @Bean - public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { - RedisMessageListenerContainer container = new RedisMessageListenerContainer(); - container.setConnectionFactory(connectionFactory); - // 监听特定键的过期事件 - container.addMessageListener(redisKeyExpirationListener, new PatternTopic("__keyevent@0__:expired")); - return container; - } /** * 自定义缓存key生成策略,默认将使用该策略 diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java b/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java deleted file mode 100644 index 95b6e090..00000000 --- a/eladmin-common/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.ysk.cashier.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.Message; -import org.springframework.data.redis.connection.MessageListener; - -@Configuration -public class RedisKeyExpirationListener implements MessageListener { - - @Override - public void onMessage(Message message, byte[] pattern) { - String expiredKey = new String(message.getBody()); - System.out.println("过期的Key为: " + expiredKey); - // 在这里添加处理键过期事件的逻辑 - } - -} \ No newline at end of file diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java index 1134afd1..0f6d7b21 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java @@ -25,34 +25,39 @@ public interface CacheKey { /** * 用户 */ - String USER_ID = "user::id:"; + String USER_ID = "user:id:"; + + /** + * 激活码 + */ + String ACT_CODE = "act_code:"; /** * 数据 */ - String DATA_USER = "data::user:"; + String DATA_USER = "data:user:"; /** * 菜单 */ - String MENU_ID = "menu::id:"; - String MENU_USER = "menu::user:"; + String MENU_ID = "menu:id:"; + String MENU_USER = "menu:user:"; /** * 角色授权 */ - String ROLE_AUTH = "role::auth:"; + String ROLE_AUTH = "role:auth:"; /** * 角色信息 */ - String ROLE_ID = "role::id:"; + String ROLE_ID = "role:id:"; /** * 部门 */ - String DEPT_ID = "dept::id:"; + String DEPT_ID = "dept:id:"; /** * 岗位 */ - String JOB_ID = "job::id:"; + String JOB_ID = "job:id:"; /** * 数据字典 */ - String DICT_NAME = "dict::name:"; + String DICT_NAME = "dict:name:"; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java b/eladmin-system/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java new file mode 100644 index 00000000..9569bb17 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/config/RedisKeyExpirationListener.java @@ -0,0 +1,55 @@ +package cn.ysk.cashier.config; + +import cn.ysk.cashier.service.shop.TbShopInfoService; +import cn.ysk.cashier.system.service.UserService; +import cn.ysk.cashier.utils.CacheKey; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.PatternTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Slf4j +@Configuration +public class RedisKeyExpirationListener implements MessageListener { + + @Lazy + @Autowired + private TbShopInfoService shopInfoService; + + @Lazy + @Autowired + private UserService userServiceu; + + //redis key失效监听 + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + // 监听特定键的过期事件 + container.addMessageListener(this, new PatternTopic("__keyevent@0__:expired")); + return container; + } + + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) + public void onMessage(Message message, byte[] pattern) { + String expiredKey = new String(message.getBody()); + + // 检查过期的键是否以特定前缀开头 + if(expiredKey.startsWith(CacheKey.ACT_CODE)) { + String account = expiredKey.substring("act_code:".length()); + log.info("商户到期 账户名为:{}",account); + shopInfoService.update(account); + userServiceu.upEnableByusername(account); + } + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbShopInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbShopInfoRepository.java index d20c3f82..e23e8670 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbShopInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbShopInfoRepository.java @@ -1,35 +1,39 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package cn.ysk.cashier.repository.shop; import cn.ysk.cashier.pojo.shop.TbShopInfo; import org.apache.ibatis.annotations.Param; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; /** -* @website https://eladmin.vip -* @author lyf -* @date 2023-11-07 -**/ + * @author lyf + * @website https://eladmin.vip + * @date 2023-11-07 + **/ public interface TbShopInfoRepository extends JpaRepository, JpaSpecificationExecutor { @Query("select info from TbShopInfo info where info.account = :account") TbShopInfo findByAccount(@Param("account") String account); + @Modifying + @Query("update TbShopInfo info set info.status=0 where info.account = :account") + void updateByAcc(@Param("account") String account); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java index 901d73ac..6a42524e 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java @@ -207,6 +207,12 @@ public class TbShopInfoServiceImpl implements TbShopInfoService { tbShopInfoRepository.save(tbShopInfo); } + @Override + @Transactional(rollbackFor = Exception.class) + public void update(String account) { + tbShopInfoRepository.updateByAcc(account); + } + @Override public void deleteAll(Integer[] ids) { for (Integer id : ids) { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopInfoService.java index 3d6014b5..42fb066f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopInfoService.java @@ -69,6 +69,8 @@ public interface TbShopInfoService { */ void update(TbShopInfo resources); + void update(String account); + /** * 多选删除 * @param ids / diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/repository/UserRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/repository/UserRepository.java index 159daff8..5d5afe4b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/system/repository/UserRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/repository/UserRepository.java @@ -61,6 +61,10 @@ public interface UserRepository extends JpaRepository, JpaSpecificat @Query(value = "update sys_user set password = ?2 , pwd_reset_time = ?3 where username = ?1",nativeQuery = true) void updatePass(String username, String pass, Date lastPasswordResetTime); + @Modifying + @Query(value = "update sys_user set enabled = 0 where username = ?1",nativeQuery = true) + void upEnableByusername(String username); + /** * 修改邮箱 * @param username 用户名 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/UserService.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/UserService.java index 9c8d7548..e7e46af2 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/UserService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/UserService.java @@ -80,6 +80,8 @@ public interface UserService { */ void updatePass(String username, String encryptPassword); + void upEnableByusername(String username); + /** * 修改头像 * @param file 文件 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/UserServiceImpl.java index 3e3d150b..46b3cde6 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/system/service/impl/UserServiceImpl.java @@ -196,6 +196,13 @@ public class UserServiceImpl implements UserService { } } + @Override + @Transactional(rollbackFor = Exception.class) + public void upEnableByusername(String username) { + userRepository.upEnableByusername(username); + flushCache(username); + } + @Override @Transactional(rollbackFor = Exception.class) public void updatePass(String username, String pass) {