springboot自带定时器 实现按次数返积分

springboot的自带的定时器的调度使用

在日常开发中,我们有时会遇到这样一种情况,根据一定的额度、规定的次数,进行返送积分,接下来,我就来做一个列子。

需求就是按次数按送积分。

实现

数据库

  • 设置次数字段
  • 设置关联(id,或者编号什么的,能在一张表中作区分)
  • 设置总积分数

后台逻辑代码

  • 在类上开启定时器 @EnableScheduling

  • 设置设置定时方法

 /**
     * @Scheduled(cron = "0 05 10 ? * *   0/5 * * * * ?")
     * 每天固定 10:05:00 执行程序
     */
    @Scheduled(cron = "0 05 10 ? * *")
    public void cornTest() {
        setIntegral();
    }

在方法上加注解 @Scheduled() 取值有多种 ,默认第一种, cron表达式,百度会有在线表达式编写、转换等。

springboot自带定时器 实现按次数返积分_第1张图片

  • 循环逻辑方法
public void setIntegral() {
        //获取自己设置的数据库积分表(积分表自定义,)
        List demos = demoDao.getDemoAllList();
        //遍历所有的数据
        for (Demo demo : demos) {
            //获取积分的次数
            Integer integralNumber = demo.getIntegralNumber();
            //判断 当次数不等于null 并且次数大于0时,才可进行次数计算
            if (integralNumber != null && integralNumber > 0) {
                //获取区分的用户id(这里我用用户id做区分)
                Integer userId = demo.getIntegralId();
                //判断用户id是否为空
                if (userId != null) {
                    //次数递减
                    integralNumber--;
                    //更新支付记录(次数扣减之后要向数据库中更新当前的次数)
                    demo.updatePayNumber(integralNumber, demo.getId());
                    //添加积分
                    Double integral = userById.getuIntegral();
                    //返送 每天分发积分
                    //参数设置
                    DecimalFormat decimalFormat = new DecimalFormat("0.00");
                    //格式化参数
                    String ratio = decimalFormat.format((double) demo.getMoney() / 50);
                    //转换成Double
                    Double v = Double.valueOf(ratio);
                    //为用户更新积分
                    userDao.updateIntegral(userId, BigDecimal.valueOf(v + integral));
                    //添加积分记录
                    Date currDate = new Date();
                    integralLogsDao.addRecord(userId, currDate, v + "", "赠送积分");
                }
            }
        }
    }

实现完成。

你可能感兴趣的:(Java)