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

mac2024-02-22  79

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

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

实现

数据库

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

后台逻辑代码

在类上开启定时器 @EnableScheduling

设置设置定时方法

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

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

循环逻辑方法 public void setIntegral() { //获取自己设置的数据库积分表(积分表自定义,) List<Demo> 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 + "", "赠送积分"); } } } }

实现完成。

最新回复(0)