| | |
| | | import com.yeshi.makemoney.app.utils.goldcorn.GoldCornUtil; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.yeshi.utils.TimeUtil; |
| | | import org.yeshi.utils.annotation.RequestSerializableByKey; |
| | | |
| | |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * @author hxh |
| | |
| | | private GoldCornGetRecordService goldCornGetRecordService; |
| | | |
| | | @Resource |
| | | private RedisTemplate<String, String> redisTemplate; |
| | | private RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | @Resource |
| | | private GoldCornGetPriceService goldCornGetPriceService; |
| | |
| | | |
| | | @RequestSerializableByKey(key = "'addgoldcorn-'+#uid+'-'+#type") |
| | | @Override |
| | | public GoldCornGetRecord addGoldCorn(Long uid, GoldCornGetType type, boolean isDouble, Date currentTime, Integer price) throws UserInfoException, GoldCornGetPriceException, GoldCornGetFrequencyConfigException, GoldCornMakeException { |
| | | public GoldCornGetRecord addGoldCorn(Long uid, GoldCornGetType type, boolean isDouble, Date currentTime, Integer price) throws UserInfoException, GoldCornGetFrequencyConfigException, GoldCornMakeException { |
| | | if (uid == null || type == null || currentTime == null) { |
| | | throw new GoldCornMakeException(GoldCornMakeException.CODE_PARAMS_NOT_ENOUGH, "参数不完整"); |
| | | } |
| | |
| | | } |
| | | //判断是否超出了次数限制 |
| | | frequencyVerify(user, type, currentTime); |
| | | //获取价格 |
| | | GoldCornGetPrice getPrice = goldCornGetPriceService.getPrice(user.getSystem(), type, currentTime); |
| | | if (price == null) { |
| | | throw new GoldCornGetPriceException(GoldCornGetPriceException.CODE_NOT_EXIST, "价格信息缺失"); |
| | | } |
| | | GoldCornGetPrice getPrice = goldCornGetPriceService.getPrice(user.getSystem(), GoldCornGetType.watchVideo, currentTime); |
| | | |
| | | //基础价格,外部传入的价格优先 |
| | | int baseCornNum = (price != null ? price : getPrice.getCornNum()); |
| | | |
| | | //是否加入团队 |
| | | Long bossUid = teamInviteRelationService.getBossUid(uid); |
| | | if (bossUid != null) { |
| | | baseCornNum = new BigDecimal(baseCornNum).multiply(new BigDecimal(1).add(getPrice.getTeamGainRate())).intValue(); |
| | | } |
| | | //单价由外面传入 |
| | | int baseCornNum = price; |
| | | |
| | | GoldCornGetRecord record = new GoldCornGetRecord(); |
| | | record.setCornNum(baseCornNum); |
| | |
| | | } |
| | | //是否有上级 |
| | | if (getPrice.getTeamDivide() != null && getPrice.getTeamDivide()) { |
| | | Long bossUid = teamInviteRelationService.getBossUid(user.getId()); |
| | | if (bossUid != null) { |
| | | BigDecimal rate = new BigDecimal(systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.teamFirstDivideRate)); |
| | | GoldCornGetRecord cRecord = new GoldCornGetRecord(); |
| | |
| | | goldCornGetRecordService.add(cRecord); |
| | | } |
| | | //是否有上上级 |
| | | bossUid = teamInviteRelationService.getBossUid(bossUid); |
| | | if (bossUid != null) { |
| | | rate = new BigDecimal(systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.teamSecondDivideRate)); |
| | | GoldCornGetRecord ccRecord = new GoldCornGetRecord(); |
| | | ccRecord.setDay(record.getDay()); |
| | | ccRecord.setType(type); |
| | | ccRecord.setUid(bossUid); |
| | | ccRecord.setFromId(record.getId()); |
| | | ccRecord.setFromUid(record.getUid()); |
| | | ccRecord.setCornNum(new BigDecimal(baseCornNum).multiply(rate).intValue()); |
| | | ccRecord.setLevel(GoldCornGetRecord.LEVEL_SECOND); |
| | | ccRecord.setCreateTime(currentTime); |
| | | if (ccRecord.getCornNum() > 0) { |
| | | goldCornGetRecordService.add(ccRecord); |
| | | } |
| | | } |
| | | // bossUid = teamInviteRelationService.getBossUid(bossUid); |
| | | // if (bossUid != null) { |
| | | // rate = new BigDecimal(systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.teamSecondDivideRate)); |
| | | // GoldCornGetRecord ccRecord = new GoldCornGetRecord(); |
| | | // ccRecord.setDay(record.getDay()); |
| | | // ccRecord.setType(type); |
| | | // ccRecord.setUid(bossUid); |
| | | // ccRecord.setFromId(record.getId()); |
| | | // ccRecord.setFromUid(record.getUid()); |
| | | // ccRecord.setCornNum(new BigDecimal(baseCornNum).multiply(rate).intValue()); |
| | | // ccRecord.setLevel(GoldCornGetRecord.LEVEL_SECOND); |
| | | // ccRecord.setCreateTime(currentTime); |
| | | // if (ccRecord.getCornNum() > 0) { |
| | | // goldCornGetRecordService.add(ccRecord); |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | } catch (GoldCornGetRecordException e) { |
| | |
| | | Date now = new Date(); |
| | | //查询今日是否已经签到 |
| | | boolean isSignIn = isSignIn(uid, now); |
| | | Date deadDate = now; |
| | | if (!isSignIn) { |
| | | deadDate = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now.getTime(), "yyyyMMdd"), "yyyyMMdd")); |
| | | } |
| | | |
| | | //今日未签到的,查询连续签到次数应该从前一天开始计算 |
| | | int continueDay = goldCornGetRecordService.getContinueDay(uid, GoldCornGetType.signIn, !isSignIn ? new Date(now.getTime() - 1000 * 60 * 60 * 24L) : now); |
| | | int continueDay = goldCornGetRecordService.getContinueDay(uid, GoldCornGetType.signIn, deadDate); |
| | | return continueDay; |
| | | } |
| | | |
| | |
| | | return addGoldCorn(uid, GoldCornGetType.signIn, false, new Date(), price); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Integer watchVideo(Long uid, boolean isDouble, Date time, int timeSeconds) throws GoldCornGetPriceException, UserInfoException, GoldCornMakeException, GoldCornGetFrequencyConfigException { |
| | | UserInfo user = userInfoService.get(uid); |
| | | if (user == null) { |
| | | throw new UserInfoException(UserInfoException.CODE_NOT_EXIST, "用户不存在"); |
| | | } |
| | | |
| | | Integer price = goldCornGetPriceService.getWatchVideoPrice(user, time, timeSeconds); |
| | | //价格为0时不加入记录 |
| | | if (price == 0) { |
| | | return 0; |
| | | } |
| | | |
| | | GoldCornGetRecord record = addGoldCorn(uid, GoldCornGetType.watchVideo, isDouble, time, price); |
| | | return record.getCornNum() * (isDouble ? 2 : 1); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Integer readNovel(Long uid, boolean isDouble, Date time, int timeSeconds) throws GoldCornGetPriceException, UserInfoException, GoldCornMakeException, GoldCornGetFrequencyConfigException { |
| | | |
| | | String readNovelCacheKey = "task-n-" + uid + "-" + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd"); |
| | | Integer readNovelNowSeconds = timeSeconds; |
| | | |
| | | Integer start = (Integer) redisTemplate.opsForValue().get(readNovelCacheKey); |
| | | if (start == null) { |
| | | start = 0; |
| | | } |
| | | |
| | | timeSeconds = timeSeconds - start; |
| | | |
| | | UserInfo user = userInfoService.get(uid); |
| | | if (user == null) { |
| | | throw new UserInfoException(UserInfoException.CODE_NOT_EXIST, "用户不存在"); |
| | | } |
| | | |
| | | Integer price = goldCornGetPriceService.getReadNovelPrice(user, time, timeSeconds); |
| | | //价格为0时不加入记录 |
| | | if (price == 0) { |
| | | return 0; |
| | | } |
| | | |
| | | GoldCornGetRecord record = addGoldCorn(uid, GoldCornGetType.readNovel, isDouble, time, price); |
| | | |
| | | //记录当天的实时阅读分钟数 |
| | | redisTemplate.opsForValue().set(readNovelCacheKey, readNovelNowSeconds, 60 * 60 * 24, TimeUnit.SECONDS); |
| | | return record.getCornNum() * (isDouble ? 2 : 1); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Integer scanNews(Long uid, boolean isDouble, Date time, int num) throws GoldCornGetPriceException, UserInfoException, GoldCornMakeException, GoldCornGetFrequencyConfigException { |
| | | UserInfo user = userInfoService.get(uid); |
| | | if (user == null) { |
| | | throw new UserInfoException(UserInfoException.CODE_NOT_EXIST, "用户不存在"); |
| | | } |
| | | |
| | | Integer price = goldCornGetPriceService.getScanNewsPrice(user, time, num); |
| | | //价格为0时不加入记录 |
| | | if (price == 0) { |
| | | return 0; |
| | | } |
| | | |
| | | GoldCornGetRecord record = addGoldCorn(uid, GoldCornGetType.scanNews, isDouble, time, price); |
| | | return record.getCornNum() * (isDouble ? 2 : 1); |
| | | } |
| | | |
| | | |
| | | } |