| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager; |
| | | |
| | | @Resource |
| | | private StringRedisTemplate redisTemplate; |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Resource |
| | | private LijinGoodsManager lijinGoodsManager; |
| | |
| | | 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) { |
| | |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品暂无法创建礼金"); |
| | | } |
| | | |
| | | |
| | | // 获取用户等级 |
| | | VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid); |
| | | if (vipRank == null) { |
| | |
| | | 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); |
| | | |
| | |
| | | |
| | | //用户创建淘礼金为单线程操作 |
| | | 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(); |
| | | } |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | if (listAccount == null || listAccount.size() == 0) { |
| | | throw new LiJinException(1, "没有可用的供应商账号"); |
| | | } |
| | | logger.info("获取供应商淘礼金账号成功"); |
| | | |
| | | // 遍历账号 用可使用账号 |
| | | for (LiJinProviderTaoKeAccount account : listAccount) { |
| | |
| | | //创建礼金 |
| | | return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params)); |
| | | } catch (LiJinAccountException e) {// 账号问题 |
| | | logger.info("获取供应商淘礼账号出错:{}", e.getMessage()); |
| | | //更新账号的错误信息 |
| | | LiJinProviderTaoKeAccount update = new LiJinProviderTaoKeAccount(); |
| | | update.setId(account.getId()); |