zoukankan      html  css  js  c++  java
  • 在线教育项目-day16【统计分析模块后端】

    1.创建表statistics_daily

    结构如下

    2.SQL测试

    先打开ucenter——memeber表

    比如说我们想要2020年5月09号注册的数据,就根据这个需求来写一个sql

    我写了两种sql,一个用like,一个用Date函数(作用:提取日期或日期/时间表达式的日期部分)

    SELECT count(*) From ucenter_member uc where uc.gmt_create like "2020-05-09%";
    SELECT count(*) From ucenter_member uc where DATE(uc.gmt_create)="2020-05-09"

     效果:

     

     3.准备工作

    1. 创建新模块service-statistics

    2.使用代码生成器生成代码

    public class CodeGenerator {
        @Test
        public void run() {
    
            // 1、创建代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            // 2、全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            gc.setOutputDir("D:\idea\online_education\service\service-statistics" + "/src/main/java");
            gc.setAuthor("DM");
            gc.setOpen(false); //生成后是否打开资源管理器
            gc.setFileOverride(false); //重新生成时文件是否覆盖
            gc.setServiceName("%sService");    //去掉Service接口的首字母I
            gc.setIdType(IdType.ID_WORKER); //主键策略
            gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
            gc.setSwagger2(true);//开启Swagger2模式
    
            mpg.setGlobalConfig(gc);
    
            // 3、数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost:3306/onlineedu?serverTimezone=GMT%2B8");
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("123456");
            dsc.setDbType(DbType.MYSQL);
            mpg.setDataSource(dsc);
    
            // 4、包配置
            PackageConfig pc = new PackageConfig();
    
            pc.setParent("com.dm");
            pc.setModuleName("edustatistics"); //模块名
            pc.setController("controller");
            pc.setEntity("entity");
            pc.setService("service");
            pc.setMapper("mapper");
            mpg.setPackageInfo(pc);
    
            // 5、策略配置
            StrategyConfig strategy = new StrategyConfig();
            strategy.setInclude("statistics_daily");
            strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
            strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
    
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
            strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
    
            strategy.setRestControllerStyle(true); //restful api风格控制器
            strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
    
            mpg.setStrategy(strategy);
    
    
            // 6、执行
            mpg.execute();
        }
    }

    3.配置application.properties

    # 服务端口
    server.port=8006
    # 服务名
    spring.application.name=service-statistics
    
    # 环境设置:dev、test、prod
    spring.profiles.active=dev
    
    # mysql数据库连接
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    #Springboot2.0以上要加时区
    spring.datasource.url=jdbc:mysql://localhost:3306/onlineedu?serverTimezone=GMT%2B8
    spring.datasource.username=root
    spring.datasource.password=123456
    
    #返回json的全局时间格式
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone=GMT+8
    
    #配置mapper xml文件的路径
    mybatis-plus.mapper-locations=classpath:com/dm/educenter/mapper/xml/*.xml
    
    #mybatis日志
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    
    # nacos服务地址
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
    # 设置hystrix超时时间,默认1000ms
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000
    #请求处理的超时时间
    ribbon.ReadTimeout: 120000

    #请求连接的超时时间
    ribbon.ConnectTimeout: 30000
     

    4.创建启动类

    @SpringBootApplication
    @MapperScan("com.dm.edustatistics.mapper")
    @ComponentScan("com.dm")
    @EnableDiscoveryClient
    @EnableFeignClients
    public class StaApplication {
        public static void main(String[] args) {
            SpringApplication.run(StaApplication.class, args);
        }
    }

    5.修改实体类

     4.在Edu-Ucenter中书写方法

    因为我们需要Ucenter中的方法去查询注册记录

    1.controller

        @GetMapping(value = "registerCount/{day}")
        public R registerCount(@PathVariable String day){
            Integer count = memberService.countRegisterByDay(day);
            return R.OK().data("countRegister", count);
        }

    2.serviceImpl

        public Integer countRegisterByDay(String day) {
    
            return baseMapper.selectRegisterCount(day);
        }

    3.mapper

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.dm.educenter.mapper.UcenterMemberMapper">
        <select id="selectRegisterCount" resultType="java.lang.Integer">
            SELECT count(*)
            From ucenter_member uc
            where DATE(uc.gmt_create)=#{value}
        </select>
    </mapper>

    5、swagger测试

     

     6.远程调用

    1.创建UcenterClient

    注意以下三点

    @Component
    @FeignClient("service-ucenter")
    public interface UcenterClient {
        @GetMapping(value = "/educenter/ucenter-member/registerCount/{day}")
        public R registerCount(@PathVariable("day") String day);
    }

    2.controller

    @PostMapping("{day}")
        public R createStatisticsByDate(@PathVariable String day) {
            dailyService.createStatisticsByDay(day);
            return R.OK();
        }

    3.serviceImpl

    这里需要注意统计信息,你的登录数,视频播放数,新增课程数都是虚构的,我们就为数据好看些随机生成了一些数字

    @Override
        public void createStatisticsByDay(String day) {
            //删除已存在的统计对象
            QueryWrapper<StatisticsDaily> dayQueryWrapper = new QueryWrapper<>();
            dayQueryWrapper.eq("date_calculated", day);
            baseMapper.delete(dayQueryWrapper);
    //获取统计信息 Integer registerNum = (Integer) ucenterClient.registerCount(day).getData().get("countRegister"); Integer loginNum = RandomUtils.nextInt(100, 200);//TODO Integer videoViewNum = RandomUtils.nextInt(100, 200);//TODO Integer courseNum = RandomUtils.nextInt(100, 200);//TODO //创建统计对象 StatisticsDaily daily = new StatisticsDaily(); daily.setRegisterNum(registerNum); daily.setLoginNum(loginNum); daily.setVideoViewNum(videoViewNum); daily.setCourseNum(courseNum); daily.setDateCalculated(day); baseMapper.insert(daily); }

    7.nginx注册

    8. swagger测试调用是否成功

     

  • 相关阅读:
    AspNetCore网关集成Swagger访问使用IdentityServer保护的webapi项目
    在CentOS部署AspNetCore网站
    使用Docker发布Asp.Net Core程序到Linux
    Window环境下使用多个Git账号(github,gitee,gitlab,gogs等)
    在.netcore webapi项目中使用后台任务工具Hangfire
    WebApi 全局异常与局部异常
    eclipse中jsp页面Invalid location of tag 解决办法分析小结
    win7 64位机ODBC的数据源DSN添加和移除问题
    jsp页面has already been called for this response错误解决方法。
    解决java图形界面label中文乱码
  • 原文地址:https://www.cnblogs.com/dmzna/p/12884459.html
Copyright © 2011-2022 走看看