周订单量趋势

2023-11-16

    /**
     * 周订单量趋势
     */
    @PreAuthorize("hasAuthority('admin:statistics:home:chart:order:week')")
    @ApiOperation(value = "周订单量趋势")
    @RequestMapping(value = "/chart/order/week", method = RequestMethod.GET)
    public CommonResult<Map<String, Object>> chartOrderInWeek() {
        return CommonResult.success(homeService.chartOrderInWeek());
    }

service

    /**
     * 周订单量趋势
     * @author Mr.Zhang
     * @since 2020-05-16
     * @return Map<String, Object>
     */
    @Override
    public Map<String, Object> chartOrderInWeek() {
        return returnOrderDate(Constants.SEARCH_DATE_WEEK,
                 Constants.SEARCH_DATE_PRE_WEEK, Constants.NUM_TEN);


    }

  private Map<String, Object> returnOrderDate(String dateLimit, String preDateLimit, int leftTime) {
        Map<String, Object> map = new HashMap<>();

        //查询本周周订单量
        List<StoreOrder> list = storeOrderService.getOrderGroupByDate(dateLimit, leftTime);

        map.put("quality",
                dataFormat(getOrderCountGroupByDate(list), dateLimit)
        );
        map.put("price",
                dataFormat(getOrderPriceGroupByDate(list), dateLimit)
        );

        //查询上周周订单量
        List<StoreOrder> preList = storeOrderService.getOrderGroupByDate(preDateLimit, leftTime);

        map.put("preQuality",
                dataFormat(getOrderCountGroupByDate(preList), preDateLimit)
        );
        map.put("prePrice",
                dataFormat(getOrderPriceGroupByDate(preList), preDateLimit)
        );

        return map;
    }

dao

/**
 * 查询数据库中按照时间范围分组的订单数据,并统计每组订单的支付总金额、订单数量和订单ID。
 * @param date 时间范围字符串,格式由调用方指定
 * @param lefTime 截取创建时间长度
 * @return 包含统计数据的 StoreOrder 对象列表
 */
public List<StoreOrder> getOrderGroupByDate(String date, int lefTime) {
    // 创建一个 QueryWrapper 对象,用于构建查询条件和操作
    QueryWrapper<StoreOrder> queryWrapper = new QueryWrapper<>();
    
    // 选择需要查询的字段,并计算支付总金额、截取创建时间和订单数量
    queryWrapper.select("sum(pay_price) as pay_price", "left(create_time, "+lefTime+") as orderId", "count(id) as id");
    
    // 如果传入的时间范围不为空
    if (StringUtils.isNotBlank(date)) {
        // 获取时间范围的起始时间和结束时间
        dateLimitUtilVo dateLimit = DateUtil.getDateLimit(date);
        // 添加查询条件,限制订单创建时间在指定范围内
        queryWrapper.between("create_time", dateLimit.getStartTime(), dateLimit.getEndTime());
    }
    
    // 设置分组条件和排序条件,将查询结果按照 orderId 进行分组并升序排序
    queryWrapper.groupBy("orderId").orderByAsc("orderId");
    
    // 执行查询操作,返回包含统计数据的 StoreOrder 对象列表
    return dao.selectList(queryWrapper);
}

问题

1.假如leftTime为10,是什么意思

如果 leftTime 的值为 10,那么在代码中的这个上下文中,它的含义是指需要截取订单创建时间的前 10 个字符。这个截取操作通常用于在查询结果中按照时间段进行分组,以便统计和展示数据。

具体来说,这里的 queryWrapper.select("left(create_time, "+lefTime+") as orderId") 代码片段中,将会从订单的创建时间字段(create_time)中截取前 10 个字符作为一个新的字段(orderId),这个新字段将在查询结果中用于分组操作。

例如,假设订单创建时间的格式为 "YYYY-MM-DD HH:MM:SS",而 leftTime 为 10,那么截取后的 orderId 字段就会包含日期和小时部分("YYYY-MM-DD HH"),这样可以将订单按照日期和小时进行分组,以便统计一段时间内的订单数据。

2.我想截取的 orderId 字段包含YYYY-MM-DD HH:MM应该将leftTime 设为多少

如果你想截取的 orderId 字段包含到分钟级别(YYYY-MM-DD HH:MM),那么 leftTime 应该设置为 16,因为分钟部分的长度是 5 个字符,再加上日期和小时部分的长度(10 个字符),总共是 15 个字符,再加上一个用来截取的字符(分隔符 -),总共是 16 个字符。

所以,将 leftTime 设置为 16,可以确保截取的 orderId 字段包含到分钟级别的时间信息。

 

3.为啥使用Map<String, Object>返回呢

使用 Map<String, Object> 返回是为了灵活地组织和传递多个不同类型的数据,这在一些情况下可以更方便地处理和展示复杂的数据结构。在这段代码中,使用 Map<String, Object> 返回可以将不同类型的统计数据以可读性高的方式整合在一起。

具体地说,Map 是一种键值对的数据结构,可以用来存储多个数据项,其中每个数据项由一个键(String 类型)和对应的值(Object 类型)组成。在这段代码中,returnOrderDate() 方法需要返回多个统计数据,如订单数量、订单金额等,而这些数据具有不同的数据类型(整数、小数等),所以使用 Map<String, Object> 可以方便地将这些数据存储在一个集合中。

例如,在这段代码中,通过以下方式存储数据:

map.put("quality", dataFormat(getOrderCountGroupByDate(list), dateLimit));
map.put("price", dataFormat(getOrderPriceGroupByDate(list), dateLimit));
// ... 其他统计数据

这样做的好处是,你可以使用具有描述性的键来访问和使用这些数据,同时在代码中维护和处理这些数据也更加灵活和可读。不同于创建一个新的 Java 对象来存储这些数据,使用 Map 可以在不创建新的类的情况下进行数据组织和传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

周订单量趋势 的相关文章

随机推荐

  • 单相逆变器第四课、F28027最小系统绘画

    今天我们说的是F28027最小系统的绘画 其实我暂时还没有规划后面要用到什么引脚 所以我很任性的把所有GPIO引脚都接出去了 呵呵 先给大家上一个整体的图 看着图片是不是比较小 呵呵 没办法 截图最大的了 我晚点会把原理图和PCB上传到下载
  • VMware15中安装Linux详细教程

    VMware15中安装Linux详细教程 一 搭建VMware环境 1 打开链接 https www vmware com cn html 选择适合自己电脑系统的版本进行下载 2 下载完成后点击文件进行安装 安装界面如图 注 1 安装目录尽
  • 信息安全产品认证

    文章目录 一 引言 二 网络关键设备和网络安全专用产品安全认证证书 2 1 背景 2 2 产品目录 2 3 认证依据标准 2 4 认证机构 2 5 商密产品检测认证目录 与 网络关键设备和网络安全专用产品目录 的关系 三 中国国家信息安全产
  • 20个常见的Java错误以及规避方法

    原文 50 Common Java Errors and How to Avoid Them Part 1 作者 Angela Stringfellow 翻译 雁惊寒 译者注 本文介绍了20个常见的Java编译器错误 每种错误都包含了代码片
  • MKP勒索病毒:了解最新变种mkp,以及如何保护您的数据

    导言 在数字化时代 mkp 勒索病毒成为了网络安全领域的一大威胁 它采用高级加密技术 将您的数据文件锁定 要求支付赎金以解锁 本文将详细介绍 mkp 勒索病毒的工作原理 如何恢复被它加密的数据文件 以及如何采取预防措施来降低受攻击的风险 如
  • lambdaQuery用法

    lambdaQuery用法 LambdaQueryWrapper
  • pandas DataFrame行或列的删除方法

    pandas DataFrame的增删查改总结系列文章 pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pandas DataFrame的修改方法 此文我
  • uniapp之微信小程序开发教程及如何合理使用WebSocket(实时监听)+workman聊天系统+linux系统配置阿里云端口

    添加链接描述 添加链接描述 thinphp6 1 workerman文档 添加链接描述 https www kancloud cn manual thinkphp6 0 1147857 workerman手册 https www worke
  • 软件的最低测试方法

    前言 1 1 引言 对于大部分软件系统 如何测试及有效的测试 是一个很头痛的问题 在软件工程上 测试是软件工程中极其重要的一部分 但在具体的实际情况上 无论是时间 人手及资源的调配等原因 使国内大部分软件公司没有进行过理论上的完整的测试 本
  • JAVA变量与数据类型

    人生不如意之事十有八九 在最好的年纪要努力充实自己 莫等空悲切白了少年头 而是要及时当勉励 岁月不待人 一 java变量 变量概述 1 内存中存储的一个存储区域 2 该存储区域内的数据在同一类型范围内不断变化 3 变量是程序中最基本的存储单
  • 老虎证券美股策略——将动量策略日频调仓改成月频

    最近策略频繁回撤 跑不赢标普500指数 所以对策略简单修改 以待后效 新加入的代码 def get if trade day infile open countday dat r incontent infile read infile c
  • Linux系统中负载较高问题排查思路与解决方法

    Load 就是对计算机干活多少的度量 Load Average 就是一段时间 1分钟 5分钟 15分钟 内平均Load linux服务器出现高负载的情况下 一般都有一些具体的症状 比如cpu 内存等被耗尽 磁盘IO或者网络等出现问题 下面通
  • CentOS7下安装LNMP以及phpMyAdmin

    两种安装 第一种 下载 可以到官网找 版本 https www phpmyadmin net downloads cd 到你要下载的位置 wget https files phpmyadmin net phpMyAdmin 4 4 12 p
  • Maven中pom文件内scope标签中import、parent 、dependencies、dependencyManagement详解

    首先介绍parent 如果父项目中有这些依赖
  • linux-sed命令

    目录 1 linux shell sed获取某一段字符串 2 linux shell shell脚本中 sed n取出某一行赋给一个变量 3 linux shell sed查询某一行 1 linux shell sed获取某一段字符串 如果
  • 网络层(四)

    网络层 我们说过 网络层主要讲的就是ip编址和路由选择算法 更准确的说 应该是网际IP协议 网际IP协议主要说明了各个主机和服务器的ip编址规则 了解IP编址前 我们需要知道IP数据报 IP数据报在网络层中传输 我们看一下IP数据报的结构
  • STM32F103ZET6【标准库函数开发】------PB3,PB4当做普通IO口,重定义

    一 如题 我在设计原理图的时候将PB3和PB4当做了普通IO口 结果按照一般配置的方法操作后 PB3 PB4并没有输出自己想要的信号 配置如下 void MOTOR GPIO Init void 初始化 GPIO InitTypeDef G
  • 人社练兵比武怎样挣积分 python 源码在线答题源码

    可以自动答题积分 不明白如何用的可以联系我 下面2个函数是学练习的 需要用的库为selenium time re pickle 题库需要收集 def dan 单选或多选 j browser find element by xpath id
  • java绘制(可视化)树结构图

    以JPanel组件为画板 继承JPanel类并重写paint Graphics g 函数 在函数中使用画笔g绘制树结构图 实例代码 3个java源文件 Main java DrawNode java DrawTree java 1 Main
  • 周订单量趋势

    周订单量趋势 PreAuthorize hasAuthority admin statistics home chart order week ApiOperation value 周订单量趋势 RequestMapping value c