| | |
| | | import org.apache.dubbo.config.annotation.Reference; |
| | | import org.apache.dubbo.config.annotation.Service; |
| | | 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 java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | @Service(version = "1.0") |
| | |
| | | @Resource |
| | | private LiJinExpendRecordService liJinExpendRecordService; |
| | | |
| | | |
| | | @Resource |
| | | private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager; |
| | | |
| | | @Resource |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Override |
| | | public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) { |
| | |
| | | // 执行创建淘礼金 |
| | | LiJinCreateParam params = getLiJinCreateBaseParam(); |
| | | |
| | | |
| | | //用户创建淘礼金为单线程操作 |
| | | String key = "createtblijin-" + uid; |
| | | if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) { |
| | | try { |
| | | TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params); |
| | | if (taoLiJinDTO == null) { |
| | | throw new LiJinException(1, "淘宝API推广红包创建失败"); |
| | | } |
| | | |
| | | //添加账号的 |
| | | return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO); |
| | | } finally { |
| | | redisTemplate.delete(key); |
| | | } |
| | | } else { |
| | | throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试"); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | private TaoLijinCreateResultDTO executeTaoLiJin(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException { |
| | | // 查询供应商账号信息 |
| | | List<LiJinProviderTaoKeAccount> 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, "没有可用的供应商账号"); |
| | | } |
| | |
| | | //创建礼金 |
| | | return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params)); |
| | | } catch (LiJinAccountException e) {// 账号问题 |
| | | //更新账号的错误信息 |
| | | 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); |
| | | } |
| | | update.setErrorMsg(e.getMsg()); |
| | | update.setUpdateTime(new Date()); |
| | | liJinProviderAccountService.updateByPrimaryKeySelective(update); |
| | | |
| | | // 通知相应供应商 TODO |
| | | executor.execute(new Runnable() { |
| | | @Override |