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