From c9db68e33f90231b064b8864fc69ccf7d25f5e0b Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期四, 25 八月 2022 17:55:40 +0800
Subject: [PATCH] 淘宝商品ID字符串化

---
 service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java |  312 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 264 insertions(+), 48 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 fa5fc7c..fe4ac19 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
@@ -1,12 +1,14 @@
 package com.ks.lijin.service.remote;
 
+
 import com.ks.lijin.exception.*;
 import com.ks.lijin.mapper.LiJinExpendRecordMapper;
 import com.ks.lijin.pojo.DO.LiJinExpendRecord;
-import com.ks.lijin.pojo.DO.LiJinProviderAccount;
 import com.ks.lijin.pojo.DO.LiJinProviderNotice;
+import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount;
 import com.ks.lijin.pojo.DTO.LiJinCreateParam;
 import com.ks.lijin.pojo.DTO.MoneyInfo;
+import com.ks.lijin.pojo.DTO.TaoLijinCreateResultDTO;
 import com.ks.lijin.pojo.DTO.taobao.TaoKeAppInfo;
 import com.ks.lijin.pojo.DTO.taobao.TaoLiJinDTO;
 import com.ks.lijin.pojo.Enums.NoticeTypeEnum;
@@ -14,34 +16,45 @@
 import com.ks.lijin.service.LiJinProviderAccountService;
 import com.ks.lijin.service.LiJinProviderNoticeService;
 import com.ks.lijin.service.LijinCreateService;
+import com.ks.lijin.service.manager.*;
 import com.ks.lijin.util.Constant;
 import com.ks.lijin.utils.taobao.TaoBaoUtil;
 import com.ks.lijin.utils.taobao.TaoKeApiUtil;
+import com.ks.vip.exception.LijinBalanceException;
+import com.ks.vip.pojo.DO.UserLijinRecord;
 import com.ks.vip.pojo.DO.VipGradePotence;
 import com.ks.vip.pojo.Enums.VIPEnum;
+import com.ks.vip.service.LijinBalanceService;
 import com.ks.vip.service.VipCenterService;
 import com.ks.vip.service.VipGradePotenceService;
 import com.ks.vip.service.VipGradeService;
 import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.annotation.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 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;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 
 @Service(version = "1.0")
 public class LijinCreateServiceImpl implements LijinCreateService {
+
+    Logger logger = LoggerFactory.getLogger(LijinCreateService.class);
 
     @Resource(name = "taskExecutor")
     private TaskExecutor executor;
@@ -55,18 +68,41 @@
     @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;
+
+    @Reference(version = "1.0", check = false)
+    private LijinBalanceService lijinBalanceService;
 
     @Resource
     private LiJinExpendRecordService liJinExpendRecordService;
 
+    @Resource
+    private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager;
+
+    @Resource
+    private RedisTemplate redisTemplate;
+
+    @Resource
+    private LijinGoodsManager lijinGoodsManager;
+
+    @Resource
+    private LijinDangerGoodsManager lijinDangerGoodsManager;
+
+    @Resource
+    private LijinDangerSellerManager lijinDangerSellerManager;
+
+    @Resource
+    private LijinConfigManager lijinConfigManager;
+
+    @Resource
+    private JedisPool jedisPool;
 
     @Override
     public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) {
@@ -92,8 +128,7 @@
             }
             //璁$畻杩斿埄姣斾緥
             BigDecimal rebateRate = potence.getRebatePercent();
-            BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
-            BigDecimal fanliMoney = couponPrice.multiply(rebateRate).divide(new BigDecimal(100), 2, RoundingMode.FLOOR);
+            BigDecimal fanliMoney = TaoBaoUtil.getGoodsHongBaoMoney(goods, rebateRate, false);
             moneyInfo.setFanliAmount(fanliMoney);
             moneyInfo.setFirstOrderAmount(null);
             list.add(moneyInfo);
@@ -104,7 +139,13 @@
     }
 
     @Override
-    public BigDecimal getTBLijinAmount(Long actionId, String uid) throws LiJinGoodsException, LiJinUserException, LiJinAmountException {
+    public BigDecimal getTBLijinAmount(String 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) {
@@ -113,6 +154,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);
@@ -124,7 +169,11 @@
 
 
     @Override
-    public BigDecimal getTBLijinAmount(Long actionId, VIPEnum vipRank) throws LiJinGoodsException, LiJinAmountException {
+    public BigDecimal getTBLijinAmount(String actionId, VIPEnum vipRank) throws LiJinGoodsException, LiJinAmountException {
+        if (!lijinGoodsManager.todayCanCreate(actionId)) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "浠婃棩绀奸噾鍒涘缓娆℃暟宸茶揪涓婇檺");
+        }
+
         //鑾峰彇鍟嗗搧鍙垱寤虹殑娣樼ぜ閲戦潰棰濓紝鑻ヤ笉鑳藉垱寤洪渶瑕佹姏鍑虹浉鍏崇殑寮傚父锛�1.鍟嗗搧涓嶆敮鎸佺ぜ閲戝垱寤猴級
         BigDecimal money = null;
         // 1銆佸垽鏂晢鍝�
@@ -141,27 +190,61 @@
 
             //鍒稿悗浠� * 鍟嗗搧浣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 int getTodayLeftCount(String uid, Date registerDate) {
+        VipGradePotence potence = vipCenterService.getVipPotence(uid);
+        if (potence == null) {
+            return 0;
+        }
+        // 姣忔棩鏈�澶ф鏁板垽鏂�
+        Integer numMax = potence.getTaolijinMaxNumber();
+        if (numMax == null || numMax.intValue() <= 0) {
+            return 0;
+        }
+        // 浣跨敤娆℃暟宸茬粡瓒呰繃鏈�澶ф鏁�
+        int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid);
+        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)) {
+                    numMax += Integer.parseInt(dayPlusCount);
+                }
+            }
+        }
+
+        if (numMax.intValue() > numExpend) {
+            return numMax.intValue() - numExpend;
+        } else {
+            return 0;
+        }
+    }
+
+
+    @Override
+    public boolean userCanCreateTBLijin(String uid, Date registerDate) throws LiJinUserException {
         VipGradePotence potence = vipCenterService.getVipPotence(uid);
         if (potence == null) {
             return false;
         }
+
 
         // 姣忔棩鏈�澶ф鏁板垽鏂�
         Integer numMax = potence.getTaolijinMaxNumber();
@@ -177,7 +260,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)) {
+                    numMax += Integer.parseInt(dayPlusCount);
+                }
+            }
+        }
+
+        if (numMax.intValue() <= numExpend) {
             throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "鐢ㄦ埛鍒涘缓娣樼ぜ閲戠殑娆℃暟瓒呴檺");
         }
 
@@ -200,6 +295,14 @@
         if (potence == null) {
             return false;
         }
+        //鏌ヨ绀奸噾浣欓
+        BigDecimal balance = lijinBalanceService.getBalance(uid);
+        if (balance != null) {
+            if (money.compareTo(balance) > 0) {
+                throw new LiJinUserException(LiJinUserException.CODE_USER_BALANCE_NOT_ENOUGH, "绀奸噾浣欓涓嶈冻");
+            }
+        }
+
 
         // 姣忔棩鏈�澶ф鏁板垽鏂�
         Integer numMax = potence.getTaolijinMaxNumber();
@@ -237,9 +340,27 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public LiJinExpendRecord createTBLijin(String uid, Long goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException {
+    public LiJinExpendRecord createTBLijin(String uid, String goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException {
+        return createTBLijin(uid, null, goodsId);
+    }
+
+    @Override
+    public LiJinExpendRecord createTBLijin(String uid, Date registerDate, String 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, "鐢ㄦ埛鍒涘缓娣樼ぜ閲戠殑娆℃暟瓒呴檺");
         }
@@ -247,7 +368,7 @@
         //娣樼ぜ閲戝垱寤�
         TaoBaoGoodsBrief goods = null;
         try {
-            goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
+            goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
         } catch (TaoBaoGoodsDownException e) {
             throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "鍟嗗搧涓嬬嚎");
         }
@@ -255,29 +376,101 @@
             throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "鍟嗗搧涓嬬嚎");
         }
 
+        dangerous = lijinDangerSellerManager.isDangerous(goods.getSellerId() + "", 1);
+        if (dangerous) {
+            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "璇ュ簵閾哄晢鍝佹殏鏃犳硶鍒涘缓绀奸噾");
+        }
+
         // 鍒涘缓鐨勬窐绀奸噾-閲戦
         BigDecimal lijinAmount = getTBLijinAmount(goods, vipRank);
 
-        // 鎵ц鍒涘缓娣樼ぜ閲�
-        LiJinCreateParam params = getLiJinCreateParam();
-
-
-        TaoLiJinDTO taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params);
-        if (taoLiJinDTO == null) {
-            throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+        //鏌ヨ绀奸噾浣欓
+        BigDecimal balance = lijinBalanceService.getBalance(uid);
+        if (balance != null && lijinAmount != null) {
+            if (lijinAmount.compareTo(balance) > 0) {
+                throw new LiJinUserException(LiJinUserException.CODE_USER_BALANCE_NOT_ENOUGH, "绀奸噾浣欓涓嶈冻");
+            }
         }
 
+        // 鎵ц鍒涘缓娣樼ぜ閲�
+        LiJinCreateParam params = getLiJinCreateBaseParam();
+
+        //鐢ㄦ埛鍒涘缓娣樼ぜ閲戜负鍗曠嚎绋嬫搷浣�
+        String key = "createtblijin-" + uid;
+
+        Jedis jedis = jedisPool.getResource();
+        try {
+            if (jedis.setnx(key, "1") > 0) {
+                jedis.expire(key, 120);
+                logger.error("娣樼ぜ閲戝垱寤猴紝鐢ㄦ埛閿佸畾鎴愬姛 key:{}", key);
+                Date now = new Date();
+                try {
+                    TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(auctionId, lijinAmount, params);
+                    if (taoLiJinDTO == null) {
+                        throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+                    }
+                    logger.info("娣樼ぜ閲戝垱寤烘垚鍔�");
+                    //娣诲姞璐﹀彿鐨�
+                    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);
+                    }
+                    jedis.del(key);
+                    logger.info("娣樼ぜ閲戝垱寤猴紝鍒犻櫎閿佸畾鎴愬姛1 key:{}", key);
+                    throw e;
+                } finally {
+                    jedis.del(key);
+                    logger.info("娣樼ぜ閲戝垱寤猴紝鍒犻櫎閿佸畾鎴愬姛2 key:{}", key);
+                }
+            } else {
+                logger.error("娣樼ぜ閲戝垱寤猴紝鐢ㄦ埛閿佸畾澶辫触 key:{}", key);
+                throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�");
+            }
+        } finally {
+            jedis.close();
+        }
+    }
+
+
+    /**
+     * 娣诲姞鍒涘缓璁板綍
+     *
+     * @param uid
+     * @param goodsId
+     * @param lijinAmount
+     * @param title
+     * @param num
+     * @param taoLiJinDTO
+     */
+    private LiJinExpendRecord addCreateSuccessRecord(String uid, String goodsId, BigDecimal lijinAmount, String title, int num, TaoLijinCreateResultDTO taoLiJinDTO) {
+        Date now = new Date();
         // 淇濆瓨璁板綍
         LiJinExpendRecord record = new LiJinExpendRecord();
         record.setUid(uid);
         record.setGoodsId(goodsId + "");
-        record.setTitle(params.getTitle());
-        record.setNum(params.getNum());
+        record.setTitle(title);
+        record.setNum(num);
         record.setMoney(lijinAmount);
-        record.setRightsId(taoLiJinDTO.getRightsId());
-        record.setSendUrl(taoLiJinDTO.getSendUrl());
+        record.setAccountId(taoLiJinDTO.getAccount().getId());
+        record.setRightsId(taoLiJinDTO.getTaoLiJin().getRightsId());
+        record.setSendUrl(taoLiJinDTO.getTaoLiJin().getSendUrl());
         record.setCreateTime(new Date());
         liJinExpendRecordMapper.insertSelective(record);
+        logger.info("娣诲姞鍒板垱寤鸿褰曟垚鍔�");
+
+        //娣诲姞
+        liJinProviderTaoKeAccountManager.createLijinSuccess(taoLiJinDTO.getAccount().getId(), goodsId, lijinAmount.multiply(new BigDecimal(num)), now);
+        logger.info("鎵ц娣樼ぜ閲戝垱寤烘垚鍔熶簨浠舵垚鍔�");
+        //绀奸噾浣欓鎵i櫎
+        try {
+            lijinBalanceService.consumeLijin(uid, lijinAmount, "璐墿鎶电幇", UserLijinRecord.Category.createGoodsLijin.name(), record.getId() + "");
+            logger.info("鎵i櫎璐︽埛浣欓鎴愬姛");
+        } catch (LijinBalanceException e) {
+            e.printStackTrace();
+            logger.info("鎵i櫎璐︽埛浣欓澶辫触锛歿}", e.getMessage());
+        }
+
         return record;
     }
 
@@ -285,7 +478,6 @@
     /**
      * 璋冪敤璐﹀彿浠ュ強娣樺疂API
      *
-     * @param uid
      * @param goodsId
      * @param lijinAmount
      * @param params
@@ -293,24 +485,41 @@
      * @throws LiJinGoodsException
      * @throws LiJinException
      */
-    private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException {
+    private TaoLijinCreateResultDTO executeTaoLiJin(String goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException, LiJinAmountException {
         // 鏌ヨ渚涘簲鍟嗚处鍙蜂俊鎭�
-        List<LiJinProviderAccount> 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, "渚涘簲鍟嗚处鍙蜂笉瀛樺湪");
+            throw new LiJinException(1, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿");
         }
+        logger.info("鑾峰彇渚涘簲鍟嗘窐绀奸噾璐﹀彿鎴愬姛");
 
-        TaoLiJinDTO taoLiJinDTO = null;
         // 閬嶅巻璐﹀彿 鐢ㄥ彲浣跨敤璐﹀彿
-        for (LiJinProviderAccount account : listAccount) {
+        for (LiJinProviderTaoKeAccount account : listAccount) {
             params.setAppkey(account.getAppKey());
             params.setAppsecret(account.getAppSecret());
+            params.setPid(account.getPid());
             try {
-                taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params);
-                if (taoLiJinDTO != null) {
-                    break;
+                //鍒涘缓绀奸噾
+                return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params));
+            } catch (LiJinAccountException e) {// 璐﹀彿闂
+                logger.info("鑾峰彇渚涘簲鍟嗘窐绀艰处鍙峰嚭閿欙細{}", e.getMessage());
+                //鏇存柊璐﹀彿鐨勯敊璇俊鎭�
+                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);
                 }
-            } catch (LiJinException e) {
+                update.setErrorMsg(e.getMsg());
+                update.setUpdateTime(new Date());
+                liJinProviderAccountService.updateByPrimaryKeySelective(update);
+
                 // 閫氱煡鐩稿簲渚涘簲鍟�  TODO
                 executor.execute(new Runnable() {
                     @Override
@@ -318,25 +527,29 @@
                         LiJinProviderNotice notice = new LiJinProviderNotice();
                         notice.setRead(false);
                         notice.setProviderId(account.getProviderId());
-                        if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) {
+                        if (e.getCode() == LiJinAccountException.CODE_TLJ_NO_MONEY) {
                             // 瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻
                             notice.setTitle("鐜╂硶閽卞寘浣欓涓嶈冻");
                             notice.setContent("璐﹀彿锛�" + account.getAccountName() + "瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻");
                             notice.setType(NoticeTypeEnum.noMoney.name());
                             liJinProviderNoticeService.save(notice);
-                        } else if (e.getCode() == LiJinException.CODE_TLJ_UN_PAID) {
+                        } else if (e.getCode() == LiJinAccountException.CODE_TLJ_UN_PAID) {
                             // 鏈垱寤鸿处鎴�
                         }
                     }
                 });
             }
         }
+        throw new LiJinException(1, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿");
+    }
 
-        // 鍒涘缓娣樼ぜ閲戠孩鍖�
+
+    private TaoLiJinDTO executeTaoLiJinAPI(String 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()));
     }
+
 
     /**
      * 鑾峰彇鍟嗗搧鍙垱寤虹殑绀奸噾閲戦
@@ -349,6 +562,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;
 
@@ -359,14 +575,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;
     }
 
@@ -375,7 +591,7 @@
      *
      * @return
      */
-    private LiJinCreateParam getLiJinCreateParam() {
+    private LiJinCreateParam getLiJinCreateBaseParam() {
         Date date = new Date();
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

--
Gitblit v1.8.0