crm汇客客户统计

接口文档:
接口名:/report/contractStatistics/contractStatistics/{beginCreateTime}/{endCreateTime}

请求方式:GET

参数列表:

	传入参数:

		beginCreateTime开始时间,endTime结束时间
返回值:
{
    "xAxis":[
        "2021-02-02",
        "2022-02-01"
    ],
    "series":[
        {
            "name":"新增客户数",
            "data":[
                0,
                0
            ]
        },
        {
            "name":"客户总数",
            "data":[
                0,
                111
            ]
        }
    ]
}
一定要认真分析接口文档!
/**
     * 客户统计折线
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    //前端无法响应endtime,应修改为endCreateTime LineChartVO
    @GetMapping("/contractStatistics/{beginCreateTime}/{endCreateTime}")
    public LineChartVO contractStatistics(@PathVariable String beginCreateTime, @PathVariable String endCreateTime) {
        LineChartVO lineChartVO = reportService.contractStatistics(beginCreateTime, endCreateTime);
        return lineChartVO;
    }

/**
     * 客户统计时间列表
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    @Override
    public LineChartVO contractStatistics(String beginCreateTime, String endCreateTime) {
        //获取Vo对象
        LineChartVO lineChartVo = new LineChartVO();
        try {
            //调用findDates方法获得总共的天数
            List<String> allTimeList = findDates(beginCreateTime, endCreateTime);
            //将天数给X轴
            lineChartVo.setxAxis(allTimeList);

            List<LineSeriesVO> series = new ArrayList<>();
            //查询出每一天的人数
            List<Map<String, Object>> statistics = contractMapper.contractStatistics(beginCreateTime, endCreateTime);
//            两条折线(新增,总数)
//            新(集合接)
            LineSeriesVO lineSeries1 = new LineSeriesVO();
            lineSeries1.setName("新增客户数");
//            总(集合接)
            LineSeriesVO lineSeries2 = new LineSeriesVO();
            lineSeries2.setName("客户总数");

            //获取用户数
            int sum = 0;

            for (String s : allTimeList) {
                 //与数据库比对,取出第一个
                //filter()方法根据条件进行过滤,再调用 findFirst() 方法获取满足条件的第一个元素。
                //get(date)与s比较是否相等,只有满足条件的元素将被保留。
                //调用Stream流进行过滤,获取到statistics中的键为date的值(statistic全是有新增人数的日期),和allTimeList中的日期比较,找到第一个相同的。
                Optional optional = statistics.stream().filter(d -> d.get("date").equals(s)).findFirst();

                //optional.isPresent() 是 Optional 类中的一个方法,用于检查 Optional 对象中是否存在非null的值。
                if (optional.isPresent()) {
                     //不为空则相加
                    //获取到optionl中的值。将其转换为map类型
                    Map<String, Object> cuurentData = (Map<String, Object>) optional.get();
                    //添加到lineseries的date中。
                    lineSeries1.getData().add(cuurentData.get("num"));
                    //Integer.parseInt() 是 Java 中用于将字符串转换为整数类型的方法。
                    //current是一个map对象,用get获取到键为num的值
                    //通过 currentData.get("num") 可以获取到这个值,并通过 toString() 将其转换为字符串类型。
                    //接着,使用 Integer.parseInt() 将字符串转换为整数类型
                    sum += Integer.parseInt(cuurentData.get("num").toString());
                } else {
//                    为0新增数就为0
                    lineSeries1.getData().add(0);
                }
                lineSeries2.getData().add(sum);
            }
            series.add(lineSeries1);
            series.add(lineSeries2);
            lineChartVo.setSeries(series);
        } catch (ParseException e) {
            // e.printStackTrace();
        }
        return lineChartVo;
    }

    <select id="contractStatistics" resultType="java.util.Map">
        SELECT count(*) num,DATE_FORMAT(create_time,'%Y-%m-%d') date from tb_contract
        <where>
            <if test="beginCreateTime != null and beginCreateTime != ''"><!-- 开始创建时间 -->
                and date_format(create_time,'%y-%m-%d') &gt;= date_format(#{beginCreateTime},'%y-%m-%d')
            </if>
            <if test="endCreateTime != null and endCreateTime != ''">
                and date_format(create_time,'%y-%m-%d') &lt;= date_format(#{endCreateTime},'%y-%m-%d')
            </if>
        </where>
        group by date;
    </select>

你可能感兴趣的:(java,spring,boot)