image.png

02 支付之后流程.png
03 统计分析模块需求描述.png
04 生成数据前端整合.png

一、数据库设计

1、数据库

guli_statistics

2、数据表

guli_statistics.sql

二、创建微服务

1、在service模块下创建子模块

service_statistics
983740a8-30c0-4bbd-9113-e9c47c0d63bf.png

2、application.properties

resources目录下创建文件

  1. # 服务端口
  2. server.port=8008
  3. # 服务名
  4. spring.application.name=service-statistics
  5. # mysql数据库连接
  6. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  7. spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
  8. spring.datasource.username=root
  9. spring.datasource.password=root
  10. #返回json的全局时间格式
  11. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  12. spring.jackson.time-zone=GMT+8
  13. #配置mapper xml文件的路径
  14. mybatis-plus.mapper-locations=classpath:com/atguigu/staservice/mapper/xml/*.xml
  15. #mybatis日志
  16. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  17. # nacos服务地址
  18. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  19. #开启熔断机制
  20. feign.hystrix.enabled=true
  21. # 设置hystrix超时时间,默认1000ms
  22. hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000

3、MP代码生成器生成代码
9edddf22-244b-4c14-9c25-bb80ee1ca135.png

4、创建SpringBoot启动类

  1. @SpringBootApplication
  2. @MapperScan("com.atguigu.staservice.mapper")
  3. @ComponentScan("com.atguigu")
  4. @EnableDiscoveryClient
  5. @EnableFeignClients
  6. public class StaApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(StaApplication.class, args);
  9. }
  10. }

三、实现服务调用

1、在service_ucenter模块创建接口,统计某一天的注册人数

controller

  1. @GetMapping(value = "countregister/{day}")
  2. public R registerCount(
  3. @PathVariable String day){
  4. Integer count = memberService.countRegisterByDay(day);
  5. return R.ok().data("countRegister", count);
  6. }

service

  1. @Override
  2. public Integer countRegisterByDay(String day) {
  3. return baseMapper.selectRegisterCount(day);
  4. }

mapper

  1. <select id="selectRegisterCount" resultType="java.lang.Integer">
  2. SELECT COUNT(1)
  3. FROM ucenter_member
  4. WHERE DATE(gmt_create) = #{value}
  5. </select>

2、在service_statistics模块创建远程调用接口

创建client包和UcenterClient接口

  1. @Component
  2. @FeignClient("service-ucenter")
  3. public interface UcenterClient {
  4. @GetMapping(value = "/ucenterservice/member/countregister/{day}")
  5. public R registerCount(@PathVariable("day") String day);
  6. }

3、在service_statistics模块调用微服务

service

  1. @Service
  2. public class StatisticsDailyServiceImpl extends ServiceImpl<StatisticsDailyMapper, StatisticsDaily> implements StatisticsDailyService {
  3. @Autowired
  4. private UcenterClient ucenterClient;
  5. @Override
  6. public void createStatisticsByDay(String day) {
  7. //删除已存在的统计对象
  8. QueryWrapper<StatisticsDaily> dayQueryWrapper = new QueryWrapper<>();
  9. dayQueryWrapper.eq("date_calculated", day);
  10. baseMapper.delete(dayQueryWrapper);
  11. //获取统计信息
  12. Integer registerNum = (Integer) ucenterClient.registerCount(day).getData().get("countRegister");
  13. Integer loginNum = RandomUtils.nextInt(100, 200);//TODO
  14. Integer videoViewNum = RandomUtils.nextInt(100, 200);//TODO
  15. Integer courseNum = RandomUtils.nextInt(100, 200);//TODO
  16. //创建统计对象
  17. StatisticsDaily daily = new StatisticsDaily();
  18. daily.setRegisterNum(registerNum);
  19. daily.setLoginNum(loginNum);
  20. daily.setVideoViewNum(videoViewNum);
  21. daily.setCourseNum(courseNum);
  22. daily.setDateCalculated(day);
  23. baseMapper.insert(daily);
  24. }
  25. }

controller

  1. @PostMapping("{day}")
  2. public R createStatisticsByDate(@PathVariable String day) {
  3. dailyService.createStatisticsByDay(day);
  4. return R.ok();
  5. }

四、添加定时任务

05 定时任务.png

1、创建定时任务类,使用cron表达式

复制日期工具类

  1. @Component
  2. public class ScheduledTask {
  3. @Autowired
  4. private StatisticsDailyService dailyService;
  5. /**
  6. * 测试
  7. * 每天七点到二十三点每五秒执行一次
  8. */
  9. @Scheduled(cron = "0/5 * * * * ?")
  10. public void task1() {
  11. System.out.println("*********++++++++++++*****执行了");
  12. }
  13. /**
  14. * 每天凌晨1点执行定时
  15. */
  16. @Scheduled(cron = "0 0 1 * * ?")
  17. public void task2() {
  18. //获取上一天的日期
  19. String day = DateUtil.formatDate(DateUtil.addDays(new Date(), -1));
  20. dailyService.createStatisticsByDay(day);
  21. }
  22. }

2、在启动类上添加注解

bc8246ec-d993-43f6-a9dd-61f81b622c12.png**

3、在线生成cron表达式

http://cron.qqe2.com/