模仿微信步数定时刷新

首语:上一篇已经初步介绍了定时任务,这次贴上一个demo小例的代码,内容主要就是模仿微信步数的刷新,后端技术利用Quartz调度框架,前端采用vue
要求:
1.用户输入账号、密码登录。
2.登录成功,在个人中心页面,显示用户基本信息。
3.在任务触发时间(如每晚10:06),刷新页面,可以看到当日步行排行榜。
4.适当准备好一些数据,便于展示。


模仿微信步数定时刷新_第1张图片
项目目录png.png

用户类
@Entity
@Data
public class Sporter {
@Id
@GeneratedValue
private Integer id;
private String account;
private String avatar;
private String password;
private String bgpic;
/**
* 一对多关系,另一张表的外键
*/
@OneToMany(fetch = FetchType.EAGER , cascade = CascadeType.REMOVE)
@JoinColumn(name = "sporter_id")
private List walksList = new ArrayList<>();

public Sporter() {

}

public Sporter(String account, String avatar, String password, String bgpic) {
    this.account = account;
    this.avatar = avatar;
    this.password = password;
    this.bgpic = bgpic;
}

public Sporter(String account, String avatar, String password, String bgpic, List walksList) {
    this.account = account;
    this.avatar = avatar;
    this.password = password;
    this.bgpic = bgpic;
    this.walksList = walksList;
}

}
步数类
@Data
@Entity
public class Walks {
@Id
@GeneratedValue
private Integer id;

/**
 * 行走的步数
 */
private Integer walkCount;

/**
 * 创建的时间
 */
private Date createTime;

public Walks() {

}

public Walks(Integer walkCount, Date createTime) {
    this.walkCount = walkCount;
    this.createTime = createTime;
}

public Integer getWalkCount() {
    return walkCount;
}

public void setWalkCount(Integer walkCount) {
    this.walkCount = walkCount;
}

public Date getCreateTime() {
    return createTime;
}

public void setCreateTime(Date createTime) {
    this.createTime = createTime;
}

}
登陆dao
public interface LoginRepository extends JpaRepository {
Sporter findByAccountAndPassword(String account, String password);
Sporter findByAccount(String account);
}
步数dao
public interface WalksRepository extends JpaRepository {
ListfindAll();
}
登陆service
public interface LoginService {
Sporter findone(String account, String password);
Sporter getOne(String account);
/**
* 查找所有用户的信息,以及该用户下的步数信息
* @return
/
List getAll();
}
更新步数service
public interface WalksService {
/
*
* 更新步数表中的数据
*/
void updateWalks();
}
登陆service实现类
@Service
public class LoginServiceImpl implements LoginService {
@Resource
private LoginRepository loginRepository;
@Override
public Sporter findone(String account, String password) {
return loginRepository.findByAccountAndPassword(account,password);
}
@Override
public Sporter getOne(String account) {
return loginRepository.findByAccount(account);
}
@Override
public List getAll() {
return loginRepository.findAll();
}
}
更新步数service实现类
@Service
public class WalksServiceImpl implements WalksService{
@Resource
private WalksRepository walksRepository;
@Override
public void updateWalks() {
List list = walksRepository.findAll();
Random random = new Random();
for (int i=0;i Walks walks = list.get(i);
System.out.println(walks);
walks.setWalkCount(random.nextInt(20000)+20000);
walks.setCreateTime(new Date());
walksRepository.saveAndFlush(walks);
}
}
}
用户登陆的controller层
@RestController
@CrossOrigin
@RequestMapping(value = "/st")
public class LoginController {
@Resource
private LoginService loginService;
@Resource
private WalksService walksService;

@GetMapping("/login")
public Sporter getuser(String account, String password){
    return loginService.findone(account,password);
}
@GetMapping("/oneuser")
public Sporter getone(String account){
    return loginService.getOne(account);
}
@GetMapping("/all")
public Listgetall(){
    return loginService.getAll();
}

}
自定义job类
/**

  • 自定义的Job任务类
    */
    @Component
    public class Jobs {
    @Resource
    private WalksService walksService;

    @Scheduled(cron = "0 36 0 * * ? ")
    public void updateTodayWalks() throws Exception {
    walksService.updateWalks();
    }

}
/**

  • @author wn

  • quartz的配置类
    */
    @Configuration
    public class QuartzConfig {
    @Autowired
    private SpringJobFactory springJobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setJobFactory(springJobFactory);
    return schedulerFactoryBean;
    }

    @Bean
    public Scheduler scheduler() {
    return schedulerFactoryBean().getScheduler();
    }
    }
    /**

  • @author wn

  • 自定义的可配置的JobFactory
    */
    @Component
    public class SpringJobFactory extends AdaptableJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

/**
 * 创建一个Job实列
 * @param bundle
 * @return
 * @throws Exception
 */
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
    Object jobInstance = super.createJobInstance(bundle);
    capableBeanFactory.autowireBean(jobInstance);
    return jobInstance;
}

}
前端代码
主页


登陆页


效果图


模仿微信步数定时刷新_第2张图片
登陆.png
模仿微信步数定时刷新_第3张图片
定时前.png
模仿微信步数定时刷新_第4张图片
定时后.png

你可能感兴趣的:(模仿微信步数定时刷新)