admin
2021-05-29 970e58a0ceb0bfcd52affad3f08c53d30c29ab8d
service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -16,6 +16,7 @@
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.LijinGoodsManager;
import com.ks.lijin.util.Constant;
import com.ks.lijin.utils.taobao.TaoBaoUtil;
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
@@ -76,6 +77,9 @@
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private LijinGoodsManager lijinGoodsManager;
    @Override
    public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) {
        VIPEnum vipRank = null;
@@ -100,7 +104,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 +116,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 +130,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 +146,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,17 +166,17 @@
            //券后价 * 商品佣金比例 * 返利比例
            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;
    }
@@ -185,7 +202,7 @@
        // 使用次数已经超过最大次数
        int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid);
        if (numMax.intValue() < numExpend) {
        if (numMax.intValue() <= numExpend) {
            throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限");
        }
@@ -246,8 +263,15 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public LiJinExpendRecord createTBLijin(String uid, Long goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException {
        userCanCreateTBLijin(uid);
        // 获取用户等级
        VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid);
        if (vipRank == null) {
            vipRank = vipGradeService.getDefaultGrade().getIdentity();
        }
        if (vipRank == null) {
            throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限");
        }
@@ -272,6 +296,7 @@
        //用户创建淘礼金为单线程操作
        String key = "createtblijin-" + uid;
        if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
            Date now = new Date();
            try {
                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params);
                if (taoLiJinDTO == null) {
@@ -279,6 +304,11 @@
                }
                //添加账号的
                return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
            } catch (LiJinGoodsException e) {
                if (e.getCode() == LiJinGoodsException.CODE_GOODS_CREATED_FULL) {
                    lijinGoodsManager.createdFullToday(goodsId, now);
                }
                throw e;
            } finally {
                redisTemplate.delete(key);
            }
@@ -328,7 +358,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 +415,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 +433,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 +446,14 @@
        //券后价 * 商品佣金比例 * 返利比例
        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;
    }