admin
2021-07-10 29918ba877731850d001fb2d1a3f3774698241c1
service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -1,10 +1,11 @@
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.LiJinProviderTaoKeAccount;
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;
@@ -15,10 +16,7 @@
import com.ks.lijin.service.LiJinProviderAccountService;
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.service.manager.*;
import com.ks.lijin.util.Constant;
import com.ks.lijin.utils.taobao.TaoBaoUtil;
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
@@ -37,10 +35,11 @@
import org.slf4j.LoggerFactory;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
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;
@@ -88,7 +87,7 @@
    private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager;
    @Resource
    private StringRedisTemplate redisTemplate;
    private RedisTemplate redisTemplate;
    @Resource
    private LijinGoodsManager lijinGoodsManager;
@@ -97,7 +96,13 @@
    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) {
@@ -350,7 +355,6 @@
            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品暂无法创建礼金");
        }
        // 获取用户等级
        VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid);
        if (vipRank == null) {
@@ -372,6 +376,11 @@
            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);
@@ -388,29 +397,38 @@
        //用户创建淘礼金为单线程操作
        String key = "createtblijin-" + uid;
        if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
            Date now = new Date();
            try {
                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(auctionId, lijinAmount, params);
                if (taoLiJinDTO == null) {
                    throw new LiJinException(1, "淘宝API推广红包创建失败");
        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);
                }
                //添加账号的
                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);
                }
                redisTemplate.delete(key);
                logger.info("淘礼金创建,删除锁定成功1 key:{}",key);
                throw e;
            } finally {
                redisTemplate.delete(key);
                logger.info("淘礼金创建,删除锁定成功2 key:{}",key);
            } else {
                logger.error("淘礼金创建,用户锁定失败 key:{}", key);
                throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试");
            }
        } else {
            logger.error("淘礼金创建,用户锁定失败 key:{}",key);
            throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试");
        } finally {
            jedis.close();
        }
    }
@@ -439,13 +457,18 @@
        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("执行淘礼金创建成功事件成功");
        //礼金余额扣除
        try {
            lijinBalanceService.consumeLijin(uid, lijinAmount, "购物抵现", UserLijinRecord.Category.createGoodsLijin.name(), record.getId() + "");
            logger.info("扣除账户余额成功");
        } catch (LijinBalanceException e) {
            e.printStackTrace();
            logger.info("扣除账户余额失败:{}", e.getMessage());
        }
        return record;
@@ -468,6 +491,7 @@
        if (listAccount == null || listAccount.size() == 0) {
            throw new LiJinException(1, "没有可用的供应商账号");
        }
        logger.info("获取供应商淘礼金账号成功");
        // 遍历账号 用可使用账号
        for (LiJinProviderTaoKeAccount account : listAccount) {
@@ -478,6 +502,7 @@
                //创建礼金
                return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params));
            } catch (LiJinAccountException e) {// 账号问题
                logger.info("获取供应商淘礼账号出错:{}", e.getMessage());
                //更新账号的错误信息
                LiJinProviderTaoKeAccount update = new LiJinProviderTaoKeAccount();
                update.setId(account.getId());