From 61229e527688452c3dc67a219c6017e034ec7dd6 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 29 五月 2021 14:28:28 +0800 Subject: [PATCH] 礼金创建优化 --- service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java | 102 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 80 insertions(+), 22 deletions(-) diff --git a/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java b/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java index dd90b7a..6ca1517 100644 --- a/service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java +++ b/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; @@ -28,6 +29,7 @@ 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; @@ -39,6 +41,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; @Service(version = "1.0") @@ -68,9 +71,14 @@ @Resource private LiJinExpendRecordService liJinExpendRecordService; - @Resource private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager; + + @Resource + private RedisTemplate redisTemplate; + + @Resource + private LijinGoodsManager lijinGoodsManager; @Override public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) { @@ -96,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); @@ -109,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) { @@ -117,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); @@ -129,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銆佸垽鏂晢鍝� @@ -145,17 +166,17 @@ //鍒稿悗浠� * 鍟嗗搧浣i噾姣斾緥 * 杩斿埄姣斾緥 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; } @@ -242,6 +263,9 @@ @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) { @@ -265,14 +289,28 @@ // 鎵ц鍒涘缓娣樼ぜ閲� LiJinCreateParam params = getLiJinCreateBaseParam(); - - TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(goodsId, lijinAmount, params); - if (taoLiJinDTO == null) { - throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触"); + //鐢ㄦ埛鍒涘缓娣樼ぜ閲戜负鍗曠嚎绋嬫搷浣� + 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) { + throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触"); + } + //娣诲姞璐﹀彿鐨� + 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); + } + } else { + throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�"); } - - //娣诲姞璐﹀彿鐨� - return addCreateSuccessRecord(uid, goodsId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO); } @@ -316,9 +354,9 @@ * @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.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, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿"); } @@ -332,6 +370,23 @@ //鍒涘缓绀奸噾 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 @@ -356,7 +411,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())); @@ -374,6 +429,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; @@ -384,14 +442,14 @@ //鍒稿悗浠� * 鍟嗗搧浣i噾姣斾緥 * 杩斿埄姣斾緥 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; } -- Gitblit v1.8.0