facade-lijin/src/main/java/com/ks/lijin/service/LijinCreateService.java
@@ -84,6 +84,15 @@ public LiJinExpendRecord createTBLijin(String uid, Long auctionId) throws LiJinException, LiJinGoodsException, LiJinUserException, LiJinAmountException; /** * 获取今日剩余次数 * * @param uid * @param registerDate * @return */ public int getTodayLeftCount(String uid, Date registerDate); /** * 淘礼金创建 facade-lijin/src/main/java/com/ks/lijin/utils/taobao/TaoKeApiUtil.java
@@ -81,8 +81,11 @@ throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足"); case "ASSET_ACCOUNT_BALANCE_NOT_ENOUGH": throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "账户预算不足"); case "FAIL_CHECK_MEMBER_DAILY_SEND_ITEM_ABOVE_LIMIT_ERROR": throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_GOODS, "今日商品创建数已超上限,请您明日再试"); case "FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR": throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "今日该商品淘礼金创建数已超上限,请您明日再试"); case "FAIL_CHECK_TLJ_MIN_FACE_ERROR": throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, msgInfo); default: service-lijin/src/main/java/com/ks/lijin/controller/TestController.java
New file @@ -0,0 +1,31 @@ package com.ks.lijin.controller; import com.ks.lijin.exception.LiJinException; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; @Controller @RequestMapping("test") public class TestController { @Resource private RedisTemplate redisTemplate; @ResponseBody @RequestMapping("redis") public String testRedis(String uid) throws Exception { String key = "createtblijin-" + uid; if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) { return "锁定成功"; } else { throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试"); } } } service-lijin/src/main/java/com/ks/lijin/service/manager/LijinGoodsManager.java
@@ -43,8 +43,12 @@ String day = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd"); String key = String.format("lijingoodslimit-%s-%s", day, auctionId); logger.info("key值为:" + key); Object object = redisTemplate.opsForValue().get(key); if (object == null) { try { Object object = redisTemplate.opsForValue().get(key); if (object == null) { return true; } } catch (Exception e) { return true; } return false; service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -33,6 +33,8 @@ import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; import org.apache.dubbo.config.annotation.Reference; import org.apache.dubbo.config.annotation.Service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.task.TaskExecutor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; @@ -51,6 +53,8 @@ @Service(version = "1.0") public class LijinCreateServiceImpl implements LijinCreateService { Logger logger = LoggerFactory.getLogger(LijinCreateService.class); @Resource(name = "taskExecutor") private TaskExecutor executor; @@ -195,6 +199,38 @@ return money; } @Override public int getTodayLeftCount(String uid, Date registerDate) { VipGradePotence potence = vipCenterService.getVipPotence(uid); if (potence == null) { return 0; } // 每日最大次数判断 Integer numMax = potence.getTaolijinMaxNumber(); if (numMax == null || numMax.intValue() <= 0) { return 0; } // 使用次数已经超过最大次数 int numExpend = liJinExpendRecordService.countTodayNumByExpend(uid); if (registerDate != null) { //判断新用户 String newerHour = lijinConfigManager.getConfigValue("newer-hour"); String dayPlusCount = lijinConfigManager.getConfigValue("newer-everyday-plus-lijin-count"); if (!StringUtil.isNullOrEmpty(newerHour) && !StringUtil.isNullOrEmpty(dayPlusCount)) { //新用户每日附加次数 if (System.currentTimeMillis() - registerDate.getTime() < 1000 * 60 * 60L * Integer.parseInt(dayPlusCount)) { numMax += Integer.parseInt(dayPlusCount); } } } if (numMax.intValue() > numExpend) { return numMax.intValue() - numExpend; } else { return 0; } } @Override public boolean userCanCreateTBLijin(String uid, Date registerDate) throws LiJinUserException { @@ -225,7 +261,7 @@ if (!StringUtil.isNullOrEmpty(newerHour) && !StringUtil.isNullOrEmpty(dayPlusCount)) { //新用户每日附加次数 if (System.currentTimeMillis() - registerDate.getTime() < 1000 * 60 * 60L * Integer.parseInt(dayPlusCount)) { numExpend += Integer.parseInt(dayPlusCount); numMax += Integer.parseInt(dayPlusCount); } } } @@ -364,11 +400,15 @@ 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, "服务器繁忙,请稍后再试"); } } @@ -402,7 +442,7 @@ liJinProviderTaoKeAccountManager.createLijinSuccess(taoLiJinDTO.getAccount().getId(), goodsId, lijinAmount.multiply(new BigDecimal(num)), now); //礼金余额扣除 try { lijinBalanceService.consumeLijin(uid, lijinAmount, "购物抵现", UserLijinRecord.Category.createGoodsLijin.name(), record.getId()+""); lijinBalanceService.consumeLijin(uid, lijinAmount, "购物抵现", UserLijinRecord.Category.createGoodsLijin.name(), record.getId() + ""); } catch (LijinBalanceException e) { e.printStackTrace(); } service-lijin/src/test/java/com/ks/LuckyTest.java
@@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; @SpringBootTest(classes = LiJinApplication.class) public class LuckyTest { @@ -31,10 +32,8 @@ @Test public void test() { String key = "lijinaccountmoney-20210526-1"; redisTemplate.opsForValue().increment(key, 123); Object obj = redisTemplate.opsForValue().get("lijinaccountmoney-20210526-1"); System.out.println(obj); String key = "createtblijin-tejia-6872490"; System.out.println(redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)); } @Test service-vip/src/main/java/com/ks/vip/service/remote/LijinBalanceServiceImpl.java
@@ -116,7 +116,7 @@ daoQuery.category = UserLijinRecord.Category.createGoodsLijin.name(); daoQuery.count = 100; daoQuery.maxCreateTime = new Date(); daoQuery.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(daoQuery.minCreateTime.getTime(), "yyyyMMdd"), "yyyyMMdd")); daoQuery.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(daoQuery.maxCreateTime.getTime(), "yyyyMMdd"), "yyyyMMdd")); List<UserLijinRecord> list = userLijinRecordDao.list(daoQuery); BigDecimal using = new BigDecimal(0); if (list != null) {