From 5f9704c02fc61da33ed4d3db0d1172976e461089 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 22 七月 2021 19:01:02 +0800 Subject: [PATCH] 推送服务完善 --- service-goldcorn/src/main/java/com/ks/goldcorn/service/remote/GoldCornTradeServiceImpl.java | 101 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 61 insertions(+), 40 deletions(-) diff --git a/service-goldcorn/src/main/java/com/ks/goldcorn/service/remote/GoldCornTradeServiceImpl.java b/service-goldcorn/src/main/java/com/ks/goldcorn/service/remote/GoldCornTradeServiceImpl.java index 5d3a3c4..6e745e4 100644 --- a/service-goldcorn/src/main/java/com/ks/goldcorn/service/remote/GoldCornTradeServiceImpl.java +++ b/service-goldcorn/src/main/java/com/ks/goldcorn/service/remote/GoldCornTradeServiceImpl.java @@ -12,11 +12,13 @@ import com.ks.goldcorn.pojo.DO.*; import com.ks.goldcorn.service.GoldCornBalanceManager; import com.ks.goldcorn.service.GoldCornRecordManager; +import com.ks.goldcorn.util.JedisUtil; import org.apache.dubbo.config.annotation.Service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; +import redis.clients.jedis.Jedis; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; @@ -49,6 +51,9 @@ @Resource private RedisManager redisManager; + + @Resource + private JedisUtil jedisUtil; /** * 楠岃瘉绯荤粺涓庣敤鎴� @@ -92,55 +97,71 @@ throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist"); } - String key = appCode + "-" + uid + "-" + sourceCode; - if (!redisTemplate.opsForValue().setIfAbsent(key, 1, 60 * 2, TimeUnit.SECONDS)) { - throw new GoldTradeException(GoldTradeException.CODE_FREQUENCY_LIMIT, "璇锋眰棰戠巼杩囬珮锛岃绋嶅悗鍐嶈瘯"); - } try { - int count = redisManager.getGoldCornAddRecordCount(appCode, uid, sourceCode); - if (count >= source.getMaxDayCount()) { - throw new GoldTradeException(GoldTradeException.CODE_COUNT_LIMIT, "娣诲姞娆℃暟瓒呴檺锛岃鏄庢棩鍐嶈瘯"); - } + jedisUtil.excute(new JedisUtil.JedisExcuter() { + @Override + public void execute(Jedis jedis) throws Exception { + if (jedis.setnx(key, "1") <= 0) { + throw new GoldTradeException(GoldTradeException.CODE_FREQUENCY_LIMIT, "璇锋眰棰戠巼杩囬珮锛岃绋嶅悗鍐嶈瘯"); + } + jedis.expire(key, 60 * 2); + try { + int count = redisManager.getGoldCornAddRecordCount(appCode, uid, sourceCode); + if (count >= source.getMaxDayCount()) { + throw new GoldTradeException(GoldTradeException.CODE_COUNT_LIMIT, "娣诲姞娆℃暟瓒呴檺锛岃鏄庢棩鍐嶈瘯"); + } - if (!redisManager.canAddCornWithTime(appCode, uid, sourceCode)) { - throw new GoldTradeException(GoldTradeException.CODE_FREQUENCY_LIMIT, "娣诲姞鏃堕棿闂撮殧杩囧皬"); - } - //鍔犺褰� - GoldCornRecord record = new GoldCornRecord(); - record.setAppId(appId); - record.setGoldCorn(goldCornCount == null ? source.getGoldCorn() : goldCornCount); - record.setSourceCode(source.getSourceCode()); - record.setType(GoldCornRecord.TYPE_GET); - record.setUid(uid); - if (title != null) { - record.setTitle(title); - } else { - record.setTitle(source.getSourceName()); - } - if (desc != null) { - record.setDesc(desc); - } else { - record.setDesc(source.getSourceDesc()); - } - try { - goldCornRecordManager.addRecord(record); - } catch (GoldRecordException e) { - throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "娣诲姞璁板綍澶辫触"); - } - //鍔犱綑棰� - goldCornBalanceManager.addMoney(appId, uid, record.getGoldCorn()); + if (!redisManager.canAddCornWithTime(appCode, uid, sourceCode)) { + throw new GoldTradeException(GoldTradeException.CODE_FREQUENCY_LIMIT, "娣诲姞鏃堕棿闂撮殧杩囧皬"); + } + //鍔犺褰� + GoldCornRecord record = new GoldCornRecord(); + record.setAppId(appId); + record.setGoldCorn(goldCornCount == null ? source.getGoldCorn() : goldCornCount); + record.setSourceCode(source.getSourceCode()); + record.setType(GoldCornRecord.TYPE_GET); + record.setUid(uid); + if (title != null) { + record.setTitle(title); + } else { + record.setTitle(source.getSourceName()); + } + if (desc != null) { + record.setDesc(desc); + } else { + record.setDesc(source.getSourceDesc()); + } + try { + goldCornRecordManager.addRecord(record); + } catch (GoldRecordException e) { + throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "娣诲姞璁板綍澶辫触"); + } + //鍔犱綑棰� + goldCornBalanceManager.addMoney(appId, uid, record.getGoldCorn()); - redisManager.addCornSuccess(appCode, uid, sourceCode, source.getMinTimeSpan()); - } catch (GoldUserException e) { - throw e; + redisManager.addCornSuccess(appCode, uid, sourceCode, source.getMinTimeSpan()); + } catch (GoldUserException e) { + throw e; + } catch (GoldTradeException e) { + throw e; + } catch (Exception e) { + + } finally { + jedis.del(key); + } + + } + }); } catch (GoldTradeException e) { + throw e; + } catch (GoldUserException e) { throw e; } catch (Exception e) { logger.error("娣诲姞閲戝竵鏈煡寮傚父锛歿}", e); - } finally { - redisTemplate.delete(key); } + + } @Transactional(rollbackFor = Exception.class) -- Gitblit v1.8.0