admin
2022-04-26 36681e15e12aaa9135f69260472de65303cdcba3
app/src/main/java/com/yeshi/makemoney/app/service/impl/goldcorn/GoldCornMakeServiceImpl.java
@@ -24,6 +24,7 @@
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;
@@ -32,6 +33,7 @@
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * @author hxh
@@ -49,7 +51,7 @@
    private GoldCornGetRecordService goldCornGetRecordService;
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    private RedisTemplate<String, Object> redisTemplate;
    @Resource
    private GoldCornGetPriceService goldCornGetPriceService;
@@ -121,7 +123,7 @@
    @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, "参数不完整");
        }
@@ -131,20 +133,11 @@
        }
        //判断是否超出了次数限制
        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);
@@ -174,6 +167,7 @@
            }
            //是否有上级
            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();
@@ -189,22 +183,22 @@
                        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) {
@@ -256,8 +250,13 @@
        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;
    }
@@ -282,5 +281,73 @@
        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);
    }
}