| | |
| | | import com.ks.lijin.service.LiJinProviderAccountService; |
| | | import com.ks.lijin.service.LiJinProviderNoticeService; |
| | | import com.ks.lijin.service.LijinCreateService; |
| | | import com.ks.lijin.util.Constant; |
| | | import com.ks.lijin.utils.taobao.TaoBaoUtil; |
| | | import com.ks.lijin.utils.taobao.TaoKeApiUtil; |
| | | import com.ks.vip.pojo.DO.VipGradePotence; |
| | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | |
| | | @Service(version = "1.0") |
| | |
| | | |
| | | |
| | | @Override |
| | | public BigDecimal getTBLijinAmount(Long actionId, VIPEnum vipRank) throws LiJinGoodsException,LiJinAmountException { |
| | | public BigDecimal getTBLijinAmount(Long actionId, VIPEnum vipRank) throws LiJinGoodsException, LiJinAmountException { |
| | | //获取商品可创建的淘礼金面额,若不能创建需要抛出相关的异常(1.商品不支持礼金创建) |
| | | BigDecimal money = null; |
| | | // 1、判断商品 |
| | | try{ |
| | | try { |
| | | TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(actionId); |
| | | if (goods == null) { |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "商品下线"); |
| | |
| | | |
| | | //券后价 * 商品佣金比例 * 返利比例 |
| | | VipGradePotence potence = vipGradePotenceService.getPotenceByVipEnum(vipRank); |
| | | if (potence != null && potence.getRebatePercent()!= null) { |
| | | money = TaoBaoUtil.getGoodsHongBaoMoney(goods,potence.getRebatePercent(),false); |
| | | if (potence != null && potence.getRebatePercent() != null) { |
| | | money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getRebatePercent(), false); |
| | | } |
| | | } catch (TaoBaoGoodsDownException e){ |
| | | } 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,"礼金创建的金额超出规定范围"); |
| | | throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "礼金创建的金额超出规定范围"); |
| | | } |
| | | |
| | | return money; |
| | |
| | | |
| | | // 每日最大次数判断 |
| | | Integer numMax = potence.getTaolijinMaxNumber(); |
| | | if(numMax == null || numMax.intValue() <= 0) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限"); |
| | | if (numMax == null || numMax.intValue() <= 0) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限"); |
| | | } |
| | | |
| | | // 每日最大金额判断 |
| | |
| | | |
| | | // 使用次数已经超过最大次数 |
| | | int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid); |
| | | if (numMax.intValue() < numExpend){ |
| | | if (numMax.intValue() < numExpend) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限"); |
| | | } |
| | | |
| | | // 统计已使用金额 |
| | | BigDecimal moneyExpend = liJinExpendRecordService.countTodayMoneyByExpend(uid); |
| | | if(moneyExpend != null) { |
| | | if (moneyExpend != null) { |
| | | moneyExpend = BigDecimal.valueOf(0); |
| | | } |
| | | // 消耗金额已经超过最大金额 |
| | |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | |
| | | |
| | | // 每日最大次数判断 |
| | | Integer numMax = potence.getTaolijinMaxNumber(); |
| | | if(numMax == null || numMax.intValue() <= 0) { |
| | | if (numMax == null || numMax.intValue() <= 0) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限"); |
| | | } |
| | | |
| | | // 每日最大金额判断 |
| | | BigDecimal moneyMax = potence.getTaolijinMaxMoney(); |
| | | if (moneyMax == null || moneyMax.compareTo(BigDecimal.valueOf(0)) <= 0 || moneyMax.compareTo(money) <= 0 ) { |
| | | if (moneyMax == null || moneyMax.compareTo(BigDecimal.valueOf(0)) <= 0 || moneyMax.compareTo(money) <= 0) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_MONEY_LIMIT, "用户创建淘礼金的金额超限"); |
| | | } |
| | | |
| | | // 使用次数已经超过最大次数 |
| | | int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid); |
| | | if (numMax.intValue() < numExpend){ |
| | | if (numMax.intValue() < numExpend) { |
| | | throw new LiJinUserException(LiJinUserException.CODE_USER_CREATE_NUM_LIMIT, "用户创建淘礼金的次数超限"); |
| | | } |
| | | |
| | | // 统计已使用金额 |
| | | BigDecimal moneyExpend = liJinExpendRecordService.countTodayMoneyByExpend(uid); |
| | | if(moneyExpend != null) { |
| | | if (moneyExpend != null) { |
| | | moneyExpend = BigDecimal.valueOf(0); |
| | | } |
| | | // 加上本次需要使用金额 |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public LiJinExpendRecord createTBLijin(String uid, Long goodsId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException { |
| | |
| | | |
| | | //淘礼金创建 |
| | | TaoBaoGoodsBrief goods = null; |
| | | try{ |
| | | try { |
| | | goods = TaoKeApiUtil.searchGoodsDetail(goodsId); |
| | | } catch (TaoBaoGoodsDownException e){ |
| | | } catch (TaoBaoGoodsDownException e) { |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "商品下线"); |
| | | } |
| | | if (goods == null) { |
| | |
| | | // 执行创建淘礼金 |
| | | LiJinCreateParam params = getLiJinCreateParam(); |
| | | |
| | | // TODO |
| | | // params.setAppkey(); |
| | | // params.setAppsecret(); |
| | | |
| | | |
| | | TaoLiJinDTO taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); |
| | | if (taoLiJinDTO == null) { |
| | | throw new LiJinException(1, "淘宝API推广红包创建失败"); |
| | | } |
| | | |
| | | |
| | | // 保存记录 |
| | | LiJinExpendRecord record = new LiJinExpendRecord(); |
| | |
| | | } |
| | | |
| | | |
| | | // 创建淘礼金 |
| | | private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException { |
| | | String appkey =params.getAppkey(); |
| | | String appsecret = params.getAppsecret(); |
| | | /** |
| | | * 调用账号以及淘宝API |
| | | * @param uid |
| | | * @param goodsId |
| | | * @param lijinAmount |
| | | * @param params |
| | | * @return |
| | | * @throws LiJinGoodsException |
| | | * @throws LiJinException |
| | | */ |
| | | private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException { |
| | | // 查询供应商账号信息 |
| | | List<LiJinProviderAccount> listAccount = liJinProviderAccountService.listByProviderId(Constant.PROVIDER_DEFAULT_ID); |
| | | if (listAccount == null || listAccount.size() == 0) { |
| | | throw new LiJinException(1, "供应商账号不存在"); |
| | | } |
| | | |
| | | TaoLiJinDTO taoLiJinDTO = null; |
| | | // 遍历账号 用可使用账号 |
| | | for (LiJinProviderAccount account : listAccount) { |
| | | params.setAppkey(account.getAppKey()); |
| | | params.setAppsecret(account.getAppSecret()); |
| | | try { |
| | | taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); |
| | | if (taoLiJinDTO != null) { |
| | | break; |
| | | } |
| | | } catch (LiJinException e) { |
| | | // 通知相应供应商 TODO |
| | | executor.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | LiJinProviderNotice notice = new LiJinProviderNotice(); |
| | | notice.setRead(false); |
| | | notice.setProviderId(account.getProviderId()); |
| | | if (e.getCode() == LiJinException.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) { |
| | | // 未创建账户 |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 创建淘礼金红包 |
| | | TaoLiJinDTO taoLiJinDTO = null; |
| | | try { |
| | | taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(goodsId, params.getTitle(), lijinAmount, |
| | | params.getNum(), params.getSendStartTime(), params.getSendEndTime(), |
| | | params.getUseStartTime(), params.getUseEndTime(), new TaoKeAppInfo(appkey, appsecret, params.getPid())); |
| | | } catch (LiJinException e) { |
| | | // 通知相应供应商 TODO |
| | | executor.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | LiJinProviderAccount account = liJinProviderAccountService.getByAppInfo(appkey, appsecret); |
| | | if (account == null) { |
| | | return; |
| | | } |
| | | LiJinProviderNotice notice = new LiJinProviderNotice(); |
| | | notice.setRead(false); |
| | | notice.setProviderId(account.getProviderId()); |
| | | |
| | | if (e.getCode() == LiJinException.CODE_TLJ_FORBIDDEN) { |
| | | // 该商品不支持创建淘礼金红包 |
| | | } else if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) { |
| | | // 官方玩法钱包余额不足 |
| | | notice.setTitle("玩法钱包余额不足"); |
| | | notice.setContent("账号:"+ appkey +"官方玩法钱包余额不足"); |
| | | notice.setType(NoticeTypeEnum.noMoney.name()); |
| | | liJinProviderNoticeService.save(notice); |
| | | } else if (e.getCode() == LiJinException.CODE_TLJ_UN_PAID) { |
| | | // 未创建账户 |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | return taoLiJinDTO; |
| | | 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())); |
| | | } |
| | | |
| | | |
| | | private BigDecimal getTBLijinAmount(TaoBaoGoodsBrief goods, VIPEnum vipRank) throws LiJinGoodsException,LiJinAmountException { |
| | | /** |
| | | * 获取商品可创建的礼金金额 |
| | | * @param goods 商品 |
| | | * @param vipRank 会员等级 |
| | | * @return |
| | | * @throws LiJinGoodsException |
| | | * @throws LiJinAmountException |
| | | */ |
| | | private BigDecimal getTBLijinAmount(TaoBaoGoodsBrief goods, VIPEnum vipRank) throws |
| | | LiJinGoodsException, LiJinAmountException { |
| | | //获取商品可创建的淘礼金面额,若不能创建需要抛出相关的异常(1.商品不支持礼金创建) |
| | | BigDecimal money = null; |
| | | |
| | |
| | | |
| | | //券后价 * 商品佣金比例 * 返利比例 |
| | | VipGradePotence potence = vipGradePotenceService.getPotenceByVipEnum(vipRank); |
| | | if (potence != null && potence.getRebatePercent()!= null) { |
| | | money = TaoBaoUtil.getGoodsHongBaoMoney(goods,potence.getRebatePercent(),false); |
| | | if (potence != null && potence.getRebatePercent() != null) { |
| | | money = TaoBaoUtil.getGoodsHongBaoMoney(goods, potence.getRebatePercent(), false); |
| | | } |
| | | |
| | | // 金额为空 或者小于零 则抛出异常 |
| | | if (money == null || money.compareTo(BigDecimal.valueOf(0)) <= 0) { |
| | | throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE,"礼金创建的金额超出规定范围"); |
| | | throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, "礼金创建的金额超出规定范围"); |
| | | } |
| | | return money; |
| | | } |
| | | |
| | | /** |
| | | * 创建淘礼金基本参数 |
| | | * |
| | | * @return |
| | | */ |
| | | private LiJinCreateParam getLiJinCreateParam() { |