From 780e980315a60f12a4f4324fb1321fc72033dd01 Mon Sep 17 00:00:00 2001
From: together <3372184547@qq.com>
Date: Wed, 18 Jun 2025 21:55:20 +0800
Subject: [PATCH 1/2] test
---
.../java/org/example/cgpro/CGproApplication.java | 13 +++++++++++++
src/main/resources/application.properties | 1 +
.../org/example/cgpro/CGproApplicationTests.java | 13 +++++++++++++
3 files changed, 27 insertions(+)
create mode 100644 src/main/java/org/example/cgpro/CGproApplication.java
create mode 100644 src/main/resources/application.properties
create mode 100644 src/test/java/org/example/cgpro/CGproApplicationTests.java
diff --git a/src/main/java/org/example/cgpro/CGproApplication.java b/src/main/java/org/example/cgpro/CGproApplication.java
new file mode 100644
index 0000000..4eed4ec
--- /dev/null
+++ b/src/main/java/org/example/cgpro/CGproApplication.java
@@ -0,0 +1,13 @@
+package org.example.cgpro;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CGproApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CGproApplication.class, args);
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..f7d6d74
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=CGpro
diff --git a/src/test/java/org/example/cgpro/CGproApplicationTests.java b/src/test/java/org/example/cgpro/CGproApplicationTests.java
new file mode 100644
index 0000000..7ceee7f
--- /dev/null
+++ b/src/test/java/org/example/cgpro/CGproApplicationTests.java
@@ -0,0 +1,13 @@
+package org.example.cgpro;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class CGproApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
From 38a5db721d28bbed3030900d0fef9776178a7bf9 Mon Sep 17 00:00:00 2001
From: together <3372184547@qq.com>
Date: Thu, 19 Jun 2025 18:04:24 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1=E4=B8=83=E5=A4=A9=E7=94=A8=E6=88=B7=E9=87=8F?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=AF=BC=E5=87=BA=E8=8F=9C=E5=93=81?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF=E4=B8=BAexcel=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 13 ++++
.../Controller/admin/AccountController.java | 23 ++++++
.../Controller/admin/DishController.java | 70 +++++++++++++++++++
.../javatest/Mapper/admin/AccountMapper.java | 6 ++
src/main/resources/application.properties | 1 -
5 files changed, 112 insertions(+), 1 deletion(-)
delete mode 100644 src/main/resources/application.properties
diff --git a/pom.xml b/pom.xml
index e94c26f..21a0290 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,6 +110,19 @@
org.springframework.boot
spring-boot-starter-webflux
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.3
+
+
+ org.apache.poi
+ poi
+ 5.2.3
+
diff --git a/src/main/java/com/example/javatest/Controller/admin/AccountController.java b/src/main/java/com/example/javatest/Controller/admin/AccountController.java
index 9178a92..d5797cc 100644
--- a/src/main/java/com/example/javatest/Controller/admin/AccountController.java
+++ b/src/main/java/com/example/javatest/Controller/admin/AccountController.java
@@ -1,16 +1,21 @@
package com.example.javatest.Controller.admin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.javatest.Entity.admin.Account;
import com.example.javatest.Mapper.admin.AccountMapper;
import com.example.javatest.common.Result;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.*;
@RestController
@RequestMapping("/admin/accounts")
@@ -179,4 +184,22 @@ public class AccountController {
Page resultPage = accountMapper.selectPage(page, queryWrapper);
return Result.success(resultPage);
}
+
+ @GetMapping("/statistics/cumulative-users-by-loop")
+ public Map getCumulativeUserCountByLoop() {
+ List dates = new ArrayList<>();
+ List userCounts = new ArrayList<>();
+ LocalDate today = LocalDate.now();
+ for (int i = 0; i < 7; i++) {
+ LocalDate queryDate = today.minusDays(i);
+ LocalDateTime endOfDay = queryDate.plusDays(1).atStartOfDay();
+ Long totalCount = accountMapper.countTotalUpTo(endOfDay);
+ dates.add(queryDate.toString());
+ userCounts.add(totalCount);
+ }
+ return Map.of(
+ "dates", dates,
+ "userCounts", userCounts
+ );
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/javatest/Controller/admin/DishController.java b/src/main/java/com/example/javatest/Controller/admin/DishController.java
index 2881f76..6efeb52 100644
--- a/src/main/java/com/example/javatest/Controller/admin/DishController.java
+++ b/src/main/java/com/example/javatest/Controller/admin/DishController.java
@@ -7,10 +7,19 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.javatest.Entity.admin.Dish;
import com.example.javatest.Mapper.admin.DishMapper;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import java.io.ByteArrayOutputStream;
import java.time.LocalDateTime;
import java.util.List;
@@ -120,4 +129,65 @@ public class DishController {
return dishMapper.selectList(new LambdaQueryWrapper()
.orderByDesc(Dish::getCreatedAt));
}
+
+ /**
+ * 导出当前分类的菜品数据到Excel
+ * @param category 分类名称
+ * @return Excel文件响应
+ */
+ @GetMapping("/export/{category}")
+ public ResponseEntity exportDishesToExcel(@PathVariable String category) {
+ // 查询当前分类的所有菜品
+ List dishes = dishMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(Dish::getCategory, category)
+ );
+
+ try (Workbook workbook = new XSSFWorkbook()) {
+ Sheet sheet = workbook.createSheet("菜品数据");
+
+ // 创建表头
+ String[] headers = {"菜品ID", "菜品名称", "分类", "价格", "库存", "状态", "描述", "累计销售", "标签"};
+ Row headerRow = sheet.createRow(0);
+ for (int i = 0; i < headers.length; i++) {
+ Cell cell = headerRow.createCell(i);
+ cell.setCellValue(headers[i]);
+ }
+
+ // 填充数据
+ int rowNum = 1;
+ for (Dish dish : dishes) {
+ Row row = sheet.createRow(rowNum++);
+ row.createCell(0).setCellValue(dish.getDishId());
+ row.createCell(1).setCellValue(dish.getDishName());
+ row.createCell(2).setCellValue(dish.getCategory());
+ row.createCell(3).setCellValue(dish.getPrice().doubleValue());
+ row.createCell(4).setCellValue(dish.getStock());
+ row.createCell(5).setCellValue(dish.getStatus());
+ row.createCell(6).setCellValue(dish.getDescription());
+ row.createCell(7).setCellValue(dish.getSales());
+ row.createCell(8).setCellValue(dish.getTag());
+ }
+
+ // 自动调整列宽
+ for (int i = 0; i < headers.length; i++) {
+ sheet.autoSizeColumn(i);
+ }
+
+ // 写入字节数组
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ workbook.write(outputStream);
+
+ // 设置响应头
+ HttpHeaders responseHeaders = new HttpHeaders();
+ responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+ responseHeaders.setContentDispositionFormData("attachment", "菜品数据_" + category + ".xlsx");
+
+ return ResponseEntity.ok()
+ .headers(responseHeaders)
+ .body(outputStream.toByteArray());
+ } catch (Exception e) {
+ throw new RuntimeException("导出Excel失败: " + e.getMessage());
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/javatest/Mapper/admin/AccountMapper.java b/src/main/java/com/example/javatest/Mapper/admin/AccountMapper.java
index c42229f..99598c7 100644
--- a/src/main/java/com/example/javatest/Mapper/admin/AccountMapper.java
+++ b/src/main/java/com/example/javatest/Mapper/admin/AccountMapper.java
@@ -3,7 +3,13 @@ package com.example.javatest.Mapper.admin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.javatest.Entity.admin.Account;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
@Mapper
public interface AccountMapper extends BaseMapper {
+ @Select("SELECT COUNT(account_id) FROM account WHERE is_deleted = 0 AND created_at < #{endOfDay}")
+ Long countTotalUpTo(@Param("endOfDay") LocalDateTime endOfDay);
}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
deleted file mode 100644
index f7d6d74..0000000
--- a/src/main/resources/application.properties
+++ /dev/null
@@ -1 +0,0 @@
-spring.application.name=CGpro