学做网站论坛坑人吗/宣传推广的形式有哪些

学做网站论坛坑人吗,宣传推广的形式有哪些,银川做网站多少钱,重庆网站建站系统营业额统计 service层 在需要处理空值、与数据库交互或使用集合时,Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…

营业额统计

service层 

  • 在需要处理空值、与数据库交互或使用集合时,Integer 、Double是更好的选择。
// 导入string工具类  
import org.apache.commons.lang.StringUtils;  @Service // 标记该类为Spring的服务组件  
@Slf4j // 引入日志功能  
public class ReportServiceImpl implements ReportService {  @Override  public TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end) {  // 该方法用于获取从begin到end之间的时间区间  List<LocalDate> datelist = new ArrayList<>(); // 创建一个列表以存储日期  datelist.add(begin); // 将开始日期添加到日期列表中  // 循环直到开始日期等于结束日期  while (!begin.equals(end)) {  // 注意,最后一天end也存到集合里了 // 自动增加一天直到符合的日期  begin = begin.plusDays(1); // 将开始日期增加一天  datelist.add(begin); // 将新的开始日期添加到日期列表中  }  // 存储每个日期的营业额  List<Double> turnoverList = new ArrayList<>(); // 创建一个列表以存储营业额  for (LocalDate date : datelist) { // 遍历每个日期,将LocalDate 转为LocalDateTime LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN); // 获取当天的最小时间(00:00)   LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX); // 获取当天的最大时间(23:59:59.999999999)  // 创建一个Map以存储查询条件  Map<String, Object> map = new HashMap<>();  map.put("begin", beginTime); // 将开始时间放入Map中  map.put("end", endTime); // 将结束时间放入Map中  map.put("status", Orders.COMPLETED); // 将订单状态放入Map中  // 调用数据访问层的方法,获取指定时间段内的营业额  Double turnover = orderMapper.sumByMap(map); // 获取营业额  turnover = turnover == null ? 0.0 : turnover; // 处理nullturnoverList.add(turnover); // 将营业额添加到营业额列表中  }  // 构建并返回TurnoverReportVO对象  return TurnoverReportVO  .builder() // 创建构建器  .dateList(StringUtils.join(datelist, ",")) // 将日期列表转换为以逗号分隔的字符串  .turnoverList(StringUtils.join(turnoverList, ",")) // 将营业额列表转换为以逗号分隔的字符串  .build(); // 构建对象并返回  }  
}

mapper层 

<select id="sumByMap" resultType="java.lang.Double">select sum(amount) from orders<where><if test="begin != null">and order_time &gt; #{begin}</if><if test="end != null">and order_time &lt; #{end}</if><if test="status != null">and status = #{status}</if></where></select>

用户统计

controller层

@GetMapping("/userStatistics")@ApiOperation("用户统计")public Result<UserReportVO> userStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {log.info("用户数据统计:{},{}", begin, end);return Result.success(reportService.getUserStatistics(begin, end));}

service层

@Override
public UserReportVO getUserStatistics(LocalDate begin, LocalDate end) {// 收集begin和end之间的每天的日期// 创建一个列表来存储日期List<LocalDate> dateList = new ArrayList<>();// 将开始日期添加到列表中dateList.add(begin);// 使用循环将开始日期逐天增加,直到等于结束日期while (!begin.equals(end)) {// 将开始日期增加一天begin = begin.plusDays(1);// 将增加后的日期添加到列表中dateList.add(begin);}// 保存每天的新用户数// 创建一个列表来存储每天的新用户数List<Integer> newUserList = new ArrayList<>();// 保存每天的总用户数// 创建一个列表来存储每天的总用户数List<Integer> totalUserList = new ArrayList<>();// 遍历日期列表for (LocalDate date : dateList) {// 获取当前日期的开始时间(00:00:00)LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);// 获取当前日期的结束时间(23:59:59)LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);// 创建一个Map来存储查询条件Map map = new HashMap();// 将结束时间作为查询条件添加到Map中map.put("end", endTime);// 查询当前日期的总用户数Integer totalUser = userMapper.countByMap(map);// 将开始时间也作为查询条件添加到Map中map.put("begin", beginTime);// 查询当前日期的新用户数Integer newUser = userMapper.countByMap(map);// 将查询到的总用户数添加到列表中totalUserList.add(totalUser);// 将查询到的新用户数添加到列表中newUserList.add(newUser);}// 返回结果  // 使用UserReportVO的构建器创建一个UserReportVO对象return UserReportVO.builder()// 将日期列表转换为逗号分隔的字符串,并设置到UserReportVO对象中.dateList(StringUtils.join(dateList,","))// 将总用户数列表转换为逗号分隔的字符串,并设置到UserReportVO对象中.totalUserList(StringUtils.join(totalUserList,","))// 将新用户数列表转换为逗号分隔的字符串,并设置到UserReportVO对象中.newUserList(StringUtils.join(newUserList,","))// 构建并返回UserReportVO对象.build();
}

Mapper层(动态sql实现,可以使得service层调用同一个方法)

<select id="countByMap" resultType="java.lang.Integer">select count(id) from user<where><if test="begin != null">and create_time &gt; #{begin}</if><if test="end != null">and create_time &lt; #{end}</if></where></select>

 销量排名统计top10

service层

@Overridepublic SalesTop10ReportVO getSalesTop10Statistics(LocalDate begin, LocalDate end) {// 将LocalDate转换为LocalDateTime,分别设置为当天的开始和结束时间LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);// 调用orderMapper.getSalesTop10方法获取销量排名前10的商品信息List<GoodsSalesDTO> salesTop10 = orderMapper.getSalesTop10(beginTime, endTime);// 使用流操作获取所有商品的名称,并收集到列表中List<String> names = salesTop10.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());// 将商品名称列表转换为逗号分隔的字符串String nameList = StringUtils.join(names, ","); // 注意:separator参数应为",",而不是separator:","// 使用流操作获取所有商品的销量,并收集到列表中List<Integer> numbers = salesTop10.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());// 将销量列表转换为逗号分隔的字符串String numberList = StringUtils.join(numbers, ","); // 同上,应为","// 使用构建器模式封装返回结果return SalesTop10ReportVO.builder().nameList(nameList) // 设置商品名称列表.numberList(numberList) // 设置销量列表.build(); // 构建并返回SalesTop10ReportVO对象}

 mapper层(关于获取top10排名的sql)

<select id="getSalesTop10" resultType="com.sky.dto.GoodsSalesDTO">select od.name, sum(od.number) numberfrom order_detail od, orders owhere od.order_id = o.id and o.status = 5<if test="begin != null">and o.order_time &gt; #{begin}</if><if test="end != null">and o.order_time &lt; #{end}</if>group by od.nameorder by number desclimit 0, 10</select>

ApachePOI 

介绍

Apache POI 是一个处理 Microsoft Office 各种文件格式的开源项目。简单来说,我们可以使用 POI 在 Java 程序中对 Microsoft Office 各种文件进行读写操作。

一般情况下,POI 都是用于操作 Excel 文件。

坐标导入

<dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</artifactId>  <version>3.16</version>  
</dependency>  
<dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi-ooxml</artifactId>  <version>3.16</version>  
</dependency>

案例引入:读取文件和写入文件

实现步骤:

  1. 设计Excel模板文件(不要手动编程去实现)
  2. 查询近30天的运营数据
  3. 将查询到的运营数据写入模板文件
  4. 通过输出来将Excel文件下载到客户端浏览器

代码开发:

    @GetMapping("/export")@ApiOperation("导出运营数据结果")// 传入HttpServletResponse ,是负责设置响应携带的文件public void export(HttpServletResponse response){reportService.exportBusinessData(response);}
/**  * 导出运营数据报表  * @param response HTTP响应对象,用于输出Excel文件  */  
public void exportBusinessData(HttpServletResponse response) {  // 1. 查询数据库,获取营业数据---查询最近30天的运营数据  LocalDate dateBegin = LocalDate.now().minusDays(30); // 获取30天前的日期  LocalDate dateEnd = LocalDate.now().minusDays(1); // 获取昨天的日期  // 查询概览数据  BusinessDataVO businessDataVO = workspaceService.getBusinessData(  LocalDateTime.of(dateBegin, LocalTime.MIN),   LocalDateTime.of(dateEnd, LocalTime.MAX)  );  // 2. 通过POI将数据写入到Excel文件中  InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx"); // 加载Excel模板  // 加载资源文件,并以输入流的形式返回try {  // 基于模板文件创建一个新的Excel文件  XSSFWorkbook excel = new XSSFWorkbook(in);  // 获取表格文件的Sheet页  XSSFSheet sheet = excel.getSheet("Sheet1");  // 填充数据--时间  sheet.getRow(1).getCell(1).setCellValue("时间:" + dateBegin + "至" + dateEnd); // 设置时间范围  // 获得第4行  XSSFRow row = sheet.getRow(3);  row.getCell(2).setCellValue(businessDataVO.getTurnover()); // 填充营业额  row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate()); // 填充订单完成率  row.getCell(6).setCellValue(businessDataVO.getNewUsers()); // 填充新增用户数  // 获得第5行  row = sheet.getRow(4);  row.getCell(2).setCellValue(businessDataVO.getValidOrderCount()); // 填充有效订单数  row.getCell(4).setCellValue(businessDataVO.getUnitPrice()); // 填充单价  // 填充明细数据  for (int i = 0; i < 30; i++) { // 遍历最近30天  LocalDate date = dateBegin.plusDays(i); // 获取当前遍历的日期  // 查询某一天的营业数据  BusinessDataVO businessData = workspaceService.getBusinessData(  LocalDateTime.of(date, LocalTime.MIN),   LocalDateTime.of(date, LocalTime.MAX)  );  // 获得某一行  row = sheet.getRow(7 + i); // 从第8行开始填充数据  row.getCell(1).setCellValue(date.toString()); // 填充日期  row.getCell(2).setCellValue(businessData.getTurnover()); // 填充营业额  row.getCell(3).setCellValue(businessData.getValidOrderCount()); // 填充有效订单数  row.getCell(4).setCellValue(businessData.getOrderCompletionRate()); // 填充订单完成率  row.getCell(5).setCellValue(businessData.getUnitPrice()); // 填充单价  row.getCell(6).setCellValue(businessData.getNewUsers()); // 填充新增用户数  }  // 3. 通过输出流将Excel文件通过响应发送给浏览器端ServletOutputStream out = response.getOutputStream(); // 获取输出流  excel.write(out); // 将Excel内容写入输出流  // 关闭资源  out.close(); // 关闭输出流  excel.close(); // 关闭Excel文件  } catch (IOException e) {  e.printStackTrace(); // 捕获并打印异常  }  
}

效果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种&#xff1a; 1.一次性订阅&#xff1a;用户订阅一次就可以推送一次&#xff0c;如果需要多次提醒需要多次订阅。 2.长期订阅&#xff1a;只有公共服务领域&#xff0c;如政务、医疗、交通、金融和教育等。‌在用户订阅后&#xff0c;在很长一段时间内…

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目&#xff1a;24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;帮你把链表细节学清楚&#xff01; | LeetCode&#xff1a;24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 dummy-…

pycharm-pyspark 环境安装

1、环境准备&#xff1a;java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

Vue3初学之Element-plus

用于快速的上手开发&#xff0c;以做项目为导向&#xff0c;所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的&#xff0c;还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…

实用操作系统学习笔记

第1章 操作系统概述 操作系统基本概念 【基础知识】 操作系统&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的…

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker&#xff0c;注册到nameserver上是自己的pod ip&#xff0c;导致本机连接到的broker的pod ip&#xff0c;这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…

【2024年华为OD机试】 (A卷,100分)- 总最快检测效率(Java JS PythonC/C++)

一、问题描述 题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为 N 人/小时。由于外界变化&#xff0c;采样员的效率会以 M 人/小时为粒度发生变化&#xff0c;M 为采样效率浮动粒度&#xf…

离线录制激光雷达数据进行建图

目前有一个2D激光雷达&#xff0c;自己控制小车运行一段时间&#xff0c;离线获取到激光雷达数据后运行如下代码进行离线建图。 roslaunch cartographer_ros demo_revo_lds.launch bag_filename:/home/firefly/AutoCar/data/rplidar_s2/2025-01-08-02-08-33.bag实际效果如下 d…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

QT跨平台应用程序开发框架(1)—— 环境搭建

目录 一&#xff0c;关于QT 二&#xff0c;关于应用程序框架 三&#xff0c;环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四&#xff0c;Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一&#xff0c;关于QT 互联网…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料 1. 源由 在《Open FPV VTX开源之硬件规格及组成》章节中&#xff0c;已经基本介绍了产品…

基于高斯混合模型的数据分析及其延伸应用(具体代码分析)

一、代码分析 &#xff08;一&#xff09;清除工作区和命令行窗口 clear; clc;clear;&#xff1a;该命令用于清除 MATLAB 工作区中的所有变量&#xff0c;确保代码运行环境的清洁&#xff0c;避免之前遗留的变量对当前代码运行产生干扰。例如&#xff0c;如果之前运行的代码中…

PostgreSQL技术内幕22:vacuum full 和 vacuum

文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介 在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式&#xff0c;一种是将旧数据放到回滚段&#xff0c;一种是直接生成一条新数据&#xff08;对于删除是不删除…

【面试】程序员 简历

一、简历整体结构 完整简历包含基本信息、教育背景、求职意向、工作经历、职业技能、项目经历、个人优势和个人荣誉八个部分。编写时&#xff0c;前几部分在保证真实的基础上可适当美化&#xff1b;个人优势和荣誉描述要突出难点亮点且避免夸张&#xff0c;可写入如马拉松参赛、…

WebGIS在应急灾害中对村庄、风景区、机场的影响范围应用-以日喀则市定日县地震为例

目录 前言 一、关于影响范围 1、震中距离5公里 2、震中20公里范围 3、20到80公里范围 二、空间查询知识 1、相关数据介绍 2、空间数据查询 三、前后端数据查询以及web可视化实现 1、后台API实现 2、WebGIS前端实现 四、Web成果展示 1、空间位置分析 2、包含风景区…

【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用

目录 步骤 一、搭建基本同步框架 二、添加委托 三、添加蓝图互动框架 四、修改为异步框架 完整代码 通过一个游戏初始化流程的示例来介绍“ControlFlows”的基本使用。 步骤 一、搭建基本同步框架 1. 勾选“ControlFlows”插件 2. 新建一个空白C类&#xff0c;这里…