From ac87ae023256ade5559c79fc66fba6a1c4b2e6b7 Mon Sep 17 00:00:00 2001 From: "zhenghaiyang@ele-cloud.com" Date: Tue, 5 Dec 2023 09:49:48 +0800 Subject: [PATCH] =?UTF-8?q?feature=201.=E6=9B=B4=E6=8D=A2redis=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- order-management-consumer/pom.xml | 2 - order-management-invoice/pom.xml | 7 +++- .../order/invoice/config/RedissonConfig.java | 40 +++++++++++++++++++ .../impl/OrderInvoiceInfoServiceImpl.java | 16 +++++--- 4 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 order-management-invoice/src/main/java/com/dxhy/order/invoice/config/RedissonConfig.java diff --git a/order-management-consumer/pom.xml b/order-management-consumer/pom.xml index d62ea91f..39f1ab77 100644 --- a/order-management-consumer/pom.xml +++ b/order-management-consumer/pom.xml @@ -16,8 +16,6 @@ - - diff --git a/order-management-invoice/pom.xml b/order-management-invoice/pom.xml index c86bd38b..388550ea 100644 --- a/order-management-invoice/pom.xml +++ b/order-management-invoice/pom.xml @@ -17,8 +17,11 @@ - - + + org.redisson + redisson-spring-boot-starter + 3.23.1 + diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/RedissonConfig.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/RedissonConfig.java new file mode 100644 index 00000000..d0252f2e --- /dev/null +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/RedissonConfig.java @@ -0,0 +1,40 @@ +//package com.dxhy.order.invoice.config; +// +//import org.apache.commons.lang3.StringUtils; +//import org.redisson.Redisson; +//import org.redisson.api.RedissonClient; +//import org.redisson.config.Config; +//import org.redisson.config.ReadMode; +//import org.redisson.config.SentinelServersConfig; +//import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +//import org.springframework.context.annotation.Bean; +// +//import javax.annotation.Resource; +//import java.util.List; +// +//public class RedissonConfig { +// +// @Resource +// private RedisProperties redisProperties; +// +// //哨兵模式配置 +// @Bean +// RedissonClient redissonSentinel() { +// Config config = new Config(); +// RedisProperties.Sentinel sentinel = redisProperties.getSentinel(); +// List newNodes = sentinel.getNodes(); +// newNodes.stream().forEach((index) -> newNodes.add( +// index.startsWith("redis://") ? index : "redis://" + index)); +// +// SentinelServersConfig serverConfig = config.useSentinelServers() +// .addSentinelAddress(newNodes.toArray(new String[0])) +// .setMasterName(sentinel.getMaster()) +// .setReadMode(ReadMode.SLAVE); +// +// if (StringUtils.isNotBlank(redisProperties.getPassword())) { +// serverConfig.setPassword(redisProperties.getPassword()); +// } +// return Redisson.create(config); +// } +// +//} diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java index c9b66c95..0e7db9cb 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java @@ -66,9 +66,10 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.xmlbeans.impl.jam.xml.TunnelledException; import org.joda.time.DateTime; import org.joda.time.Duration; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -1704,6 +1705,9 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { return redInvoiceRespPo; } + @Resource + private RedissonClient redisson; + @SneakyThrows @Override public R stageRedInvoiceData(RedInvoiceStageReqPo redInvoiceSaveReqPo){ @@ -1714,10 +1718,12 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { //组装发票报文 //金额、数量、税额跟跟换为负数,折扣行要与被折扣行合并 //校验重复提交数据覆盖问题 - boolean redRedisLock = redisService.setNx(redInvoiceSaveReqPo.getFpqqlsh(), key, RedisConstant.REDIS_EXPIRE_TIME_2HOUR); + RLock lock = redisson.getLock(redInvoiceSaveReqPo.getFpqqlsh()); +// boolean redRedisLock = redisService.setNx(redInvoiceSaveReqPo.getFpqqlsh(), key, RedisConstant.REDIS_EXPIRE_TIME_2HOUR); for (int i = 0; i < 3; i++) { try { - if(redRedisLock){ + if(!lock.isLocked()){ + lock.lock(); Map paramMap = redisService.pullAllHashMap(key); if(paramMap != null){ String value = redisService.pullHashMap(key, innerKey); @@ -1744,14 +1750,14 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { redisService.set(redSyjeKey,syfpje); hashMap.put(redItemList.get(0).getId(),syfpje); } - redisService.del(redInvoiceSaveReqPo.getFpqqlsh()); + lock.unlock(); return R.ok().put(OrderManagementConstant.DATA,hashMap); } else { Thread.sleep(2000); log.info("获取redis锁请等待,三次之后还是获取锁失败则返回。。。"); } } catch (InterruptedException e) { - redisService.del(redInvoiceSaveReqPo.getFpqqlsh()); + lock.unlock(); throw new RuntimeException(e); } }