From b47f8a03db79bb1f6356479cd8a5cf190d7d9694 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 23 六月 2021 11:10:36 +0800
Subject: [PATCH] 礼金功能完善

---
 service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java |  108 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 87 insertions(+), 21 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 e0d2e75..3291d57 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
@@ -16,6 +16,9 @@
 import com.ks.lijin.service.LiJinProviderNoticeService;
 import com.ks.lijin.service.LijinCreateService;
 import com.ks.lijin.service.manager.LiJinProviderTaoKeAccountManager;
+import com.ks.lijin.service.manager.LijinConfigManager;
+import com.ks.lijin.service.manager.LijinDangerGoodsManager;
+import com.ks.lijin.service.manager.LijinGoodsManager;
 import com.ks.lijin.util.Constant;
 import com.ks.lijin.utils.taobao.TaoBaoUtil;
 import com.ks.lijin.utils.taobao.TaoKeApiUtil;
@@ -58,13 +61,13 @@
     @Resource
     private LiJinProviderAccountService liJinProviderAccountService;
 
-    @Reference(version = "1.0")
+    @Reference(version = "1.0", check = false)
     private VipCenterService vipCenterService;
 
-    @Reference(version = "1.0")
+    @Reference(version = "1.0", check = false)
     private VipGradePotenceService vipGradePotenceService;
 
-    @Reference(version = "1.0")
+    @Reference(version = "1.0", check = false)
     private VipGradeService vipGradeService;
 
     @Resource
@@ -75,6 +78,15 @@
 
     @Resource
     private RedisTemplate redisTemplate;
+
+    @Resource
+    private LijinGoodsManager lijinGoodsManager;
+
+    @Resource
+    private LijinDangerGoodsManager lijinDangerGoodsManager;
+
+    @Resource
+    private LijinConfigManager lijinConfigManager;
 
     @Override
     public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) {
@@ -100,7 +112,6 @@
             }
             //璁$畻杩斿埄姣斾緥
             BigDecimal rebateRate = potence.getRebatePercent();
-            BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
             BigDecimal fanliMoney = TaoBaoUtil.getGoodsHongBaoMoney(goods, rebateRate, false);
             moneyInfo.setFanliAmount(fanliMoney);
             moneyInfo.setFirstOrderAmount(null);
@@ -113,6 +124,12 @@
 
     @Override
     public BigDecimal getTBLijinAmount(Long actionId, String uid) throws LiJinGoodsException, LiJinUserException, LiJinAmountException {
+
+        if (!lijinGoodsManager.todayCanCreate(actionId)) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "浠婃棩绀奸噾鍒涘缓娆℃暟宸茶揪涓婇檺");
+        }
+
+
         // 鑾峰彇鐢ㄦ埛绛夌骇
         VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid);
         if (vipRank == null) {
@@ -121,6 +138,10 @@
 
         // 1銆佸垽鏂晢鍝� 骞惰绠楅噾棰�
         BigDecimal money = getTBLijinAmount(actionId, vipRank);
+
+        if (!lijinGoodsManager.isLijinMoneyAvaiable(money)) {
+            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "绀奸噾鏈湪瑙勫畾鑼冨洿鍐�");
+        }
 
         // 2銆佸垽鏂敤鎴�
         boolean result = userCanCreateTBLijin(uid, money);
@@ -133,6 +154,10 @@
 
     @Override
     public BigDecimal getTBLijinAmount(Long actionId, VIPEnum vipRank) throws LiJinGoodsException, LiJinAmountException {
+        if (!lijinGoodsManager.todayCanCreate(actionId)) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "浠婃棩绀奸噾鍒涘缓娆℃暟宸茶揪涓婇檺");
+        }
+
         //鑾峰彇鍟嗗搧鍙垱寤虹殑娣樼ぜ閲戦潰棰濓紝鑻ヤ笉鑳藉垱寤洪渶瑕佹姏鍑虹浉鍏崇殑寮傚父锛�1.鍟嗗搧涓嶆敮鎸佺ぜ閲戝垱寤猴級
         BigDecimal money = null;
         // 1銆佸垽鏂晢鍝�
@@ -149,23 +174,24 @@
 
             //鍒稿悗浠� * 鍟嗗搧浣i噾姣斾緥 * 杩斿埄姣斾緥
             VipGradePotence potence = vipGradePotenceService.getPotenceByVipEnum(vipRank);
-            if (potence != null && potence.getRebatePercent() != null) {
-                money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getRebatePercent(), false);
+            if (potence != null && potence.getTaolijinPercent() != null) {
+                money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getTaolijinPercent(), false);
             }
         } catch (TaoBaoGoodsDownException e) {
             throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "鍟嗗搧涓嬬嚎");
         }
 
-        // 閲戦涓虹┖ 鎴栬�呭皬浜庨浂 鍒欐姏鍑哄紓甯�
-        if (money == null || money.compareTo(BigDecimal.valueOf(0)) <= 0) {
-            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "绀奸噾鍒涘缓鐨勯噾棰濊秴鍑鸿瀹氳寖鍥�");
+        if (!lijinGoodsManager.isLijinMoneyAvaiable(money)) {
+            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "绀奸噾鏈湪瑙勫畾鑼冨洿鍐�");
         }
+
 
         return money;
     }
 
+
     @Override
-    public boolean userCanCreateTBLijin(String uid) throws LiJinUserException {
+    public boolean userCanCreateTBLijin(String uid, Date registerDate) throws LiJinUserException {
         VipGradePotence potence = vipCenterService.getVipPotence(uid);
         if (potence == null) {
             return false;
@@ -185,7 +211,19 @@
 
         // 浣跨敤娆℃暟宸茬粡瓒呰繃鏈�澶ф鏁�
         int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid);
-        if (numMax.intValue() < numExpend) {
+        if (registerDate != null) {
+            //鍒ゆ柇鏂扮敤鎴�
+            String newerHour = lijinConfigManager.getConfigValue("newer-hour");
+            String dayPlusCount = lijinConfigManager.getConfigValue("newer-everyday-plus-lijin-count");
+            if (!StringUtil.isNullOrEmpty(newerHour) && !StringUtil.isNullOrEmpty(dayPlusCount)) {
+                //鏂扮敤鎴锋瘡鏃ラ檮鍔犳鏁�
+                if (System.currentTimeMillis() - registerDate.getTime() < 1000 * 60 * 60L * Integer.parseInt(dayPlusCount)) {
+                    numExpend += Integer.parseInt(dayPlusCount);
+                }
+            }
+        }
+
+        if (numMax.intValue() <= numExpend) {
             throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "鐢ㄦ埛鍒涘缓娣樼ぜ閲戠殑娆℃暟瓒呴檺");
         }
 
@@ -246,8 +284,27 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public LiJinExpendRecord createTBLijin(String uid, Long goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException {
+        return createTBLijin(uid, null, goodsId);
+    }
+
+    @Override
+    public LiJinExpendRecord createTBLijin(String uid, Date registerDate, Long auctionId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException {
+
+        //鐢ㄦ埛鏄惁鏈夊垱寤烘潈闄�
+        userCanCreateTBLijin(uid, registerDate);
+        //鍟嗗搧鏄惁鍦ㄥ嵄闄╁晢鍝佷腑
+        boolean dangerous = lijinDangerGoodsManager.isDangerous(auctionId + "", 1);
+        if (dangerous) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "璇ュ晢鍝佹殏鏃犳硶鍒涘缓绀奸噾");
+        }
+
+
         // 鑾峰彇鐢ㄦ埛绛夌骇
         VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid);
+        if (vipRank == null) {
+            vipRank = vipGradeService.getDefaultGrade().getIdentity();
+        }
+
         if (vipRank == null) {
             throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "鐢ㄦ埛鍒涘缓娣樼ぜ閲戠殑娆℃暟瓒呴檺");
         }
@@ -255,7 +312,7 @@
         //娣樼ぜ閲戝垱寤�
         TaoBaoGoodsBrief goods = null;
         try {
-            goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
+            goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
         } catch (TaoBaoGoodsDownException e) {
             throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "鍟嗗搧涓嬬嚎");
         }
@@ -272,13 +329,19 @@
         //鐢ㄦ埛鍒涘缓娣樼ぜ閲戜负鍗曠嚎绋嬫搷浣�
         String key = "createtblijin-" + uid;
         if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
+            Date now = new Date();
             try {
-                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params);
+                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(auctionId, lijinAmount, params);
                 if (taoLiJinDTO == null) {
                     throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
                 }
                 //娣诲姞璐﹀彿鐨�
-                return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
+                return addCreateSuccessRecord(uid, auctionId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
+            } catch (LiJinGoodsException e) {
+                if (e.getCode() == LiJinGoodsException.CODE_GOODS_CREATED_FULL) {
+                    lijinGoodsManager.createdFullToday(auctionId, now);
+                }
+                throw e;
             } finally {
                 redisTemplate.delete(key);
             }
@@ -328,7 +391,7 @@
      * @throws LiJinGoodsException
      * @throws LiJinException
      */
-    private TaoLijinCreateResultDTO executeTaoLiJin(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException {
+    private TaoLijinCreateResultDTO executeTaoLiJin(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException, LiJinAmountException {
         // 鏌ヨ渚涘簲鍟嗚处鍙蜂俊鎭�
         List<LiJinProviderTaoKeAccount> listAccount = liJinProviderAccountService.listValidByProviderId(Constant.PROVIDER_DEFAULT_ID, LiJinProviderTaoKeAccount.ERROR_CODE_NORMAL);
         if (listAccount == null || listAccount.size() == 0) {
@@ -385,7 +448,7 @@
     }
 
 
-    private TaoLiJinDTO executeTaoLiJinAPI(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinException, LiJinGoodsException, LiJinAccountException {
+    private TaoLiJinDTO executeTaoLiJinAPI(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinException, LiJinGoodsException, LiJinAccountException, LiJinAmountException {
         return TaoKeApiUtil.createTaoLiJin(goodsId, params.getTitle(), lijinAmount,
                 params.getNum(), params.getSendStartTime(), params.getSendEndTime(),
                 params.getUseStartTime(), params.getUseEndTime(), new TaoKeAppInfo(params.getAppkey(), params.getAppsecret(), params.getPid()));
@@ -403,6 +466,9 @@
      */
     private BigDecimal getTBLijinAmount(TaoBaoGoodsBrief goods, VIPEnum vipRank) throws
             LiJinGoodsException, LiJinAmountException {
+        if (!lijinGoodsManager.todayCanCreate(goods.getAuctionId())) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "浠婃棩绀奸噾鍒涘缓娆℃暟宸茶揪涓婇檺");
+        }
         //鑾峰彇鍟嗗搧鍙垱寤虹殑娣樼ぜ閲戦潰棰濓紝鑻ヤ笉鑳藉垱寤洪渶瑕佹姏鍑虹浉鍏崇殑寮傚父锛�1.鍟嗗搧涓嶆敮鎸佺ぜ閲戝垱寤猴級
         BigDecimal money = null;
 
@@ -413,14 +479,14 @@
 
         //鍒稿悗浠� * 鍟嗗搧浣i噾姣斾緥 * 杩斿埄姣斾緥
         VipGradePotence potence = vipGradePotenceService.getPotenceByVipEnum(vipRank);
-        if (potence != null && potence.getRebatePercent() != null) {
-            money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getRebatePercent(), false);
+        if (potence != null && potence.getTaolijinPercent() != null) {
+            money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getTaolijinPercent(), false);
         }
 
-        // 閲戦涓虹┖ 鎴栬�呭皬浜庨浂 鍒欐姏鍑哄紓甯�
-        if (money == null || money.compareTo(BigDecimal.valueOf(0)) <= 0) {
-            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "绀奸噾鍒涘缓鐨勯噾棰濊秴鍑鸿瀹氳寖鍥�");
+        if (!lijinGoodsManager.isLijinMoneyAvaiable(money)) {
+            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "绀奸噾鏈湪瑙勫畾鑼冨洿鍐�");
         }
+
         return money;
     }
 

--
Gitblit v1.8.0