From da5b3386849e41a39a442ac4ec48049868ce8d0b Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 26 五月 2021 11:17:52 +0800 Subject: [PATCH] 礼金创建优化 --- service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java | 106 ++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 80 insertions(+), 26 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 fa5fc7c..e0d2e75 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 @@ -3,10 +3,11 @@ import com.ks.lijin.exception.*; import com.ks.lijin.mapper.LiJinExpendRecordMapper; import com.ks.lijin.pojo.DO.LiJinExpendRecord; -import com.ks.lijin.pojo.DO.LiJinProviderAccount; +import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount; import com.ks.lijin.pojo.DO.LiJinProviderNotice; 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.pojo.DTO.taobao.TaoKeAppInfo; import com.ks.lijin.pojo.DTO.taobao.TaoLiJinDTO; import com.ks.lijin.pojo.Enums.NoticeTypeEnum; @@ -14,6 +15,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.util.Constant; import com.ks.lijin.utils.taobao.TaoBaoUtil; import com.ks.lijin.utils.taobao.TaoKeApiUtil; @@ -26,18 +28,19 @@ 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 javax.annotation.Resource; import java.math.BigDecimal; -import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; @Service(version = "1.0") @@ -67,6 +70,11 @@ @Resource private LiJinExpendRecordService liJinExpendRecordService; + @Resource + private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager; + + @Resource + private RedisTemplate redisTemplate; @Override public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) { @@ -93,7 +101,7 @@ //璁$畻杩斿埄姣斾緥 BigDecimal rebateRate = potence.getRebatePercent(); BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods); - BigDecimal fanliMoney = couponPrice.multiply(rebateRate).divide(new BigDecimal(100), 2, RoundingMode.FLOOR); + BigDecimal fanliMoney = TaoBaoUtil.getGoodsHongBaoMoney(goods, rebateRate, false); moneyInfo.setFanliAmount(fanliMoney); moneyInfo.setFirstOrderAmount(null); list.add(moneyInfo); @@ -259,25 +267,53 @@ BigDecimal lijinAmount = getTBLijinAmount(goods, vipRank); // 鎵ц鍒涘缓娣樼ぜ閲� - LiJinCreateParam params = getLiJinCreateParam(); + LiJinCreateParam params = getLiJinCreateBaseParam(); - - TaoLiJinDTO taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); - if (taoLiJinDTO == null) { - throw new LiJinException(1, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触"); + //鐢ㄦ埛鍒涘缓娣樼ぜ閲戜负鍗曠嚎绋嬫搷浣� + 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, "鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�"); } + } + + /** + * 娣诲姞鍒涘缓璁板綍 + * + * @param uid + * @param goodsId + * @param lijinAmount + * @param title + * @param num + * @param taoLiJinDTO + */ + private LiJinExpendRecord addCreateSuccessRecord(String uid, Long goodsId, BigDecimal lijinAmount, String title, int num, TaoLijinCreateResultDTO taoLiJinDTO) { + Date now = new Date(); // 淇濆瓨璁板綍 LiJinExpendRecord record = new LiJinExpendRecord(); record.setUid(uid); record.setGoodsId(goodsId + ""); - record.setTitle(params.getTitle()); - record.setNum(params.getNum()); + record.setTitle(title); + record.setNum(num); record.setMoney(lijinAmount); - record.setRightsId(taoLiJinDTO.getRightsId()); - record.setSendUrl(taoLiJinDTO.getSendUrl()); + record.setAccountId(taoLiJinDTO.getAccount().getId()); + record.setRightsId(taoLiJinDTO.getTaoLiJin().getRightsId()); + record.setSendUrl(taoLiJinDTO.getTaoLiJin().getSendUrl()); record.setCreateTime(new Date()); liJinExpendRecordMapper.insertSelective(record); + //娣诲姞 + liJinProviderTaoKeAccountManager.createLijinSuccess(taoLiJinDTO.getAccount().getId(), goodsId, lijinAmount.multiply(new BigDecimal(num)), now); return record; } @@ -285,7 +321,6 @@ /** * 璋冪敤璐﹀彿浠ュ強娣樺疂API * - * @param uid * @param goodsId * @param lijinAmount * @param params @@ -293,24 +328,39 @@ * @throws LiJinGoodsException * @throws LiJinException */ - private TaoLiJinDTO executeTaoLiJinAPI(String uid, Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException { + private TaoLijinCreateResultDTO executeTaoLiJin(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinGoodsException, LiJinException { // 鏌ヨ渚涘簲鍟嗚处鍙蜂俊鎭� - List<LiJinProviderAccount> 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, "渚涘簲鍟嗚处鍙蜂笉瀛樺湪"); + throw new LiJinException(1, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿"); } - TaoLiJinDTO taoLiJinDTO = null; // 閬嶅巻璐﹀彿 鐢ㄥ彲浣跨敤璐﹀彿 - for (LiJinProviderAccount account : listAccount) { + for (LiJinProviderTaoKeAccount account : listAccount) { params.setAppkey(account.getAppKey()); params.setAppsecret(account.getAppSecret()); + params.setPid(account.getPid()); try { - taoLiJinDTO = executeTaoLiJinAPI(uid, goodsId, lijinAmount, params); - if (taoLiJinDTO != null) { - break; + //鍒涘缓绀奸噾 + 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); } - } catch (LiJinException e) { + update.setErrorMsg(e.getMsg()); + update.setUpdateTime(new Date()); + liJinProviderAccountService.updateByPrimaryKeySelective(update); + // 閫氱煡鐩稿簲渚涘簲鍟� TODO executor.execute(new Runnable() { @Override @@ -318,25 +368,29 @@ LiJinProviderNotice notice = new LiJinProviderNotice(); notice.setRead(false); notice.setProviderId(account.getProviderId()); - if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) { + if (e.getCode() == LiJinAccountException.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) { + } else if (e.getCode() == LiJinAccountException.CODE_TLJ_UN_PAID) { // 鏈垱寤鸿处鎴� } } }); } } + throw new LiJinException(1, "娌℃湁鍙敤鐨勪緵搴斿晢璐﹀彿"); + } - // 鍒涘缓娣樼ぜ閲戠孩鍖� + + private TaoLiJinDTO executeTaoLiJinAPI(Long goodsId, BigDecimal lijinAmount, LiJinCreateParam params) throws LiJinException, LiJinGoodsException, LiJinAccountException { 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())); } + /** * 鑾峰彇鍟嗗搧鍙垱寤虹殑绀奸噾閲戦 @@ -375,7 +429,7 @@ * * @return */ - private LiJinCreateParam getLiJinCreateParam() { + private LiJinCreateParam getLiJinCreateBaseParam() { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -- Gitblit v1.8.0