From da5b3386849e41a39a442ac4ec48049868ce8d0b Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 26 五月 2021 11:17:52 +0800
Subject: [PATCH] 礼金创建优化

---
 service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java |   47 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 38 insertions(+), 9 deletions(-)

diff --git a/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java b/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
index dd90b7a..e0d2e75 100644
--- a/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
+++ b/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -28,6 +28,7 @@
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.annotation.Service;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.MoneyBigDecimalUtil;
 import org.yeshi.utils.StringUtil;
@@ -39,6 +40,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 
 @Service(version = "1.0")
@@ -68,9 +70,11 @@
     @Resource
     private LiJinExpendRecordService liJinExpendRecordService;
 
-
     @Resource
     private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager;
+
+    @Resource
+    private RedisTemplate redisTemplate;
 
     @Override
     public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) {
@@ -265,14 +269,22 @@
         // 鎵ц鍒涘缓娣樼ぜ閲�
         LiJinCreateParam params = getLiJinCreateBaseParam();
 
-
-        TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params);
-        if (taoLiJinDTO == null) {
-            throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+        //鐢ㄦ埛鍒涘缓娣樼ぜ閲戜负鍗曠嚎绋嬫搷浣�
+        String key = "createtblijin-" + uid;
+        if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
+            try {
+                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params);
+                if (taoLiJinDTO == null) {
+                    throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+                }
+                //娣诲姞璐﹀彿鐨�
+                return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
+            } finally {
+                redisTemplate.delete(key);
+            }
+        } else {
+            throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�");
         }
-
-        //娣诲姞璐﹀彿鐨�
-        return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
     }
 
 
@@ -318,7 +330,7 @@
      */
     private TaoLijinCreateResultDTO executeTaoLiJin(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException {
         // 鏌ヨ渚涘簲鍟嗚处鍙蜂俊鎭�
-        List<LiJinProviderTaoKeAccount> listAccount = liJinProviderAccountService.listByProviderId(Constant.PROVIDER_DEFAULT_ID);
+        List<LiJinProviderTaoKeAccount> listAccount = liJinProviderAccountService.listValidByProviderId(Constant.PROVIDER_DEFAULT_ID, LiJinProviderTaoKeAccount.ERROR_CODE_NORMAL);
         if (listAccount == null || listAccount.size() == 0) {
             throw new LiJinException(1, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿");
         }
@@ -332,6 +344,23 @@
                 //鍒涘缓绀奸噾
                 return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params));
             } catch (LiJinAccountException e) {// 璐﹀彿闂
+                //鏇存柊璐﹀彿鐨勯敊璇俊鎭�
+                LiJinProviderTaoKeAccount update = new LiJinProviderTaoKeAccount();
+                update.setId(account.getId());
+                if (e.getCode() == LiJinAccountException.CODE_TLJ_NO_MONEY) {
+                    //璧勯噾涓嶈冻
+                    update.setErrorCode(LiJinProviderTaoKeAccount.ERROR_CODE_MONEY_NOT_ENOUGH);
+                } else if (e.getCode() == LiJinAccountException.CODE_TLJ_NO_GOODS) {
+                    //鍟嗗搧鏁伴噺涓嶈冻
+                    update.setErrorCode(LiJinProviderTaoKeAccount.ERROR_CODE_GOODS_NOT_ENOUGH);
+                } else {
+                    //璐﹀彿寮傚父
+                    update.setErrorCode(LiJinProviderTaoKeAccount.ERROR_CODE_OTHER);
+                }
+                update.setErrorMsg(e.getMsg());
+                update.setUpdateTime(new Date());
+                liJinProviderAccountService.updateByPrimaryKeySelective(update);
+
                 // 閫氱煡鐩稿簲渚涘簲鍟�  TODO
                 executor.execute(new Runnable() {
                     @Override

--
Gitblit v1.8.0