feat:增加统计接口

This commit is contained in:
2025-06-24 23:34:32 +08:00
parent dbbc5e00b9
commit 78d24cf559
16 changed files with 181 additions and 163 deletions

11
pom.xml
View File

@@ -11,7 +11,7 @@
</parent>
<artifactId>food-hub-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.1</version>
<name>food-hub-service</name>
<description>food-hub-service</description>
@@ -38,4 +38,13 @@
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,23 @@
package com.cxx.food.config;
import com.cxx.food.constant.FileConstant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Value("${file.path}")
private String filePath;
@Value("${file.log-path}")
private String logFilePath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/" + FileConstant.FILE_URL_PREFIX + "/**")
.addResourceLocations("file:" + filePath);
}
}

View File

@@ -0,0 +1,7 @@
package com.cxx.food.constant;
public interface FileConstant {
String FILE_NAME_SPLIT = "_";
String FILE_URL_PREFIX = "files";
String FILE_LOG_PREFIX = "logs";
}

View File

@@ -39,12 +39,18 @@ public class FoodController {
return foodService.deleteFoodRecipe(id);
}
@Operation(summary = "查询美食菜谱")
@GetMapping("/recipe")
public List<FoodSummaryDto> queryFoodSummary(FoodQueryVo foodQueryVo) {
return foodService.queryFoodSummary(foodQueryVo);
}
@Operation(summary = "分页查询美食菜谱")
@GetMapping("/recipe/page")
public IPage<FoodSummaryDto> queryFoodSummary(@RequestParam("currentPage") Integer currentPage,
@RequestParam("pageSize") Integer pageSize,
FoodQueryVo foodQueryVo) {
return foodService.queryFoodSummary(currentPage, pageSize, foodQueryVo);
public IPage<FoodSummaryDto> queryFoodSummaryByPage(@RequestParam("currentPage") Integer currentPage,
@RequestParam("pageSize") Integer pageSize,
FoodQueryVo foodQueryVo) {
return foodService.queryFoodSummaryByPage(currentPage, pageSize, foodQueryVo);
}
@Operation(summary = "查询美食")
@@ -96,5 +102,23 @@ public class FoodController {
public FoodStatsDto queryFoodStats() {
return foodService.queryFoodStats();
}
@Operation(summary = "查询美食记录统计")
@GetMapping("/stats/record")
public List<StatsChartDto> queryFoodRecordStats() {
return foodService.queryFoodRecordStats();
}
@Operation(summary = "查询美食类别统计")
@GetMapping("/stats/category")
public List<StatsChartDto> queryFoodCategoryStats() {
return foodService.queryFoodCategoryStats();
}
@Operation(summary = "查询美食排行榜统计")
@GetMapping("/stats/rank")
public List<StatsChartDto> queryFoodRankStats() {
return foodService.queryFoodRankStats();
}
}

View File

@@ -12,8 +12,10 @@ import java.util.List;
public interface FoodDao {
FoodRecipeDto queryFoodRecipe(@Param("id") Long id);
IPage<FoodSummaryDto> queryFoodSummary(IPage<FoodSummaryDto> page,
@Param("query") FoodQueryVo foodQueryVo);
IPage<FoodSummaryDto> queryFoodSummaryByPage(IPage<FoodSummaryDto> page,
@Param("query") FoodQueryVo foodQueryVo);
List<FoodSummaryDto> queryFoodSummary(@Param("query") FoodQueryVo foodQueryVo);
List<FoodRecordDto> queryFoodRecordById(@Param("id") Long id);
@@ -22,6 +24,12 @@ public interface FoodDao {
FoodStatsDto queryFoodStats();
List<StatsChartDto> queryFoodRecordStats();
List<StatsChartDto> queryFoodCategoryStats();
List<StatsChartDto> queryFoodRankStats();
List<String> queryFoodCategory();
void insertFoodMaterial(@Param("foodId") Long foodId,

View File

@@ -23,6 +23,10 @@ public class FoodRecordDto {
@JsonView(ReadView.class)
private String category;
@Schema(description = "完成人")
@JsonView(ReadView.class)
private Long person;
@Schema(description = "完成时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date date;

View File

@@ -0,0 +1,11 @@
package com.cxx.food.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StatsChartDto {
private String name;
private Double value;
}

View File

@@ -15,6 +15,9 @@ public class FoodRecord extends AbstractIdEntity {
@TableField("food_id")
private Long foodId;
@TableField("person")
private Long person;
@TableField("date")
private Date date;

View File

@@ -2,10 +2,7 @@ package com.cxx.food.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cxx.food.dto.FoodRecipeDto;
import com.cxx.food.dto.FoodRecordDto;
import com.cxx.food.dto.FoodStatsDto;
import com.cxx.food.dto.FoodSummaryDto;
import com.cxx.food.dto.*;
import com.cxx.food.vo.FoodQueryVo;
import java.util.List;
@@ -25,7 +22,9 @@ public interface FoodService {
FoodRecipeDto queryFoodRecipe(Long id);
IPage<FoodSummaryDto> queryFoodSummary(Integer currentPage, Integer pageSize, FoodQueryVo foodQueryVo);
List<FoodSummaryDto> queryFoodSummary(FoodQueryVo foodQueryVo);
IPage<FoodSummaryDto> queryFoodSummaryByPage(Integer currentPage, Integer pageSize, FoodQueryVo foodQueryVo);
List<FoodRecordDto> queryFoodRecord(String startDate, String endDate);
@@ -34,4 +33,10 @@ public interface FoodService {
List<String> queryFoodCategory();
FoodStatsDto queryFoodStats();
List<StatsChartDto> queryFoodRecordStats();
List<StatsChartDto> queryFoodCategoryStats();
List<StatsChartDto> queryFoodRankStats();
}

View File

@@ -163,11 +163,16 @@ public class FoodServiceImpl implements FoodService {
}
@Override
public IPage<FoodSummaryDto> queryFoodSummary(Integer currentPage, Integer pageSize, FoodQueryVo foodQueryVo) {
public List<FoodSummaryDto> queryFoodSummary(FoodQueryVo foodQueryVo) {
return foodDao.queryFoodSummary(foodQueryVo);
}
@Override
public IPage<FoodSummaryDto> queryFoodSummaryByPage(Integer currentPage, Integer pageSize, FoodQueryVo foodQueryVo) {
// 这里只能先对主表进行分页 然后在查询子表信息
// 不能使用Left Join关联表查询因为这里是一对多数据关联查询会导致数据有重复
// 从而导致page计算错误会把重复的数据当成多条记录实际上只有1条记录
IPage<FoodSummaryDto> foodSummaryPage = foodDao.queryFoodSummary(new Page<>(currentPage, pageSize), foodQueryVo);
IPage<FoodSummaryDto> foodSummaryPage = foodDao.queryFoodSummaryByPage(new Page<>(currentPage, pageSize), foodQueryVo);
List<FoodSummaryDto> foodSummaryList = foodSummaryPage.getRecords();
for (FoodSummaryDto foodSummary : foodSummaryList) {
foodSummary.setRecordList(foodDao.queryFoodRecordById(foodSummary.getId()));
@@ -197,4 +202,19 @@ public class FoodServiceImpl implements FoodService {
public FoodStatsDto queryFoodStats() {
return foodDao.queryFoodStats();
}
@Override
public List<StatsChartDto> queryFoodRecordStats() {
return foodDao.queryFoodRecordStats();
}
@Override
public List<StatsChartDto> queryFoodCategoryStats() {
return foodDao.queryFoodCategoryStats();
}
@Override
public List<StatsChartDto> queryFoodRankStats() {
return foodDao.queryFoodRankStats();
}
}

View File

@@ -1,7 +1,7 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sweet_hut?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://127.0.0.1:3306/food_hub?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: cxx
password: 123456

View File

@@ -1,7 +1,7 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/sweet_hut?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://mysql:3306/food_hub?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: docker
password: 19940822Cxx

View File

@@ -1,7 +1,7 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sweet_hut?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
url: jdbc:mysql://127.0.0.1:3306/food_hub?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: cxx
password: 19940822Cxx@1213

View File

@@ -1,5 +1,5 @@
server:
port: 8090
port: 8100
spring:
application:

View File

@@ -1,142 +0,0 @@
-- MySQL dump 10.13 Distrib 8.0.26, for Win64 (x86_64)
--
-- Host: localhost Database: food_hub
-- ------------------------------------------------------
-- Server version 8.0.27
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `food_material`
--
DROP TABLE IF EXISTS `food_material`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `food_material` (
`id` bigint NOT NULL,
`food_id` bigint NOT NULL COMMENT '美食id',
`type` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型',
`name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
`amount` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分量',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='美食食材';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `food_material`
--
LOCK TABLES `food_material` WRITE;
/*!40000 ALTER TABLE `food_material` DISABLE KEYS */;
INSERT INTO `food_material` VALUES (632688264339525,614660173221957,'主料','胖头鱼','一个'),(632688264339526,614660173221957,'辅料','豆腐','一块'),(632688264339527,614660173221957,'调料','生姜','少许'),(632688264339528,614660173221957,'调料','料酒','少许'),(632701463908421,614665900060741,'主料','带鱼','2条'),(632702438854725,614668663291973,'主料','砺岈','100克'),(632703259131973,632703259000901,'主料','鲫鱼','1斤'),(636430940057669,632703747838021,'主料','土豆','1个'),(672333164245061,672333164216389,'主料','鸡蛋','1个'),(672333288312901,672333288300613,'主料','大虾','1斤'),(672333596311621,672333596299333,'主料','鲳鳊鱼','1条'),(672333773520965,672333773504581,'主料','大白菜','1颗');
/*!40000 ALTER TABLE `food_material` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `food_recipe`
--
DROP TABLE IF EXISTS `food_recipe`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `food_recipe` (
`id` bigint NOT NULL,
`name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '美食名称',
`category` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '美食菜系',
`recommend_rate` int DEFAULT NULL COMMENT '推荐指数',
`remark` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='美食记录';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `food_recipe`
--
LOCK TABLES `food_recipe` WRITE;
/*!40000 ALTER TABLE `food_recipe` DISABLE KEYS */;
INSERT INTO `food_recipe` VALUES (614660173221957,'鱼头汤','淮扬菜',5,'','2024-11-21 22:38:41',NULL,'2025-01-11 21:15:10',NULL),(614665900060741,'红烧带鱼','闽菜',5,'','2024-11-21 23:01:59',NULL,'2025-01-11 22:08:53',NULL),(614668663291973,'砺岈饼','其他',0,'','2024-11-21 23:13:14',NULL,'2025-01-11 22:12:51',NULL),(632703259000901,'红烧鲫鱼','其他',0,'','2025-01-11 22:16:11',NULL,'2025-01-11 22:16:11',NULL),(632703747838021,'青椒土豆丝','家常菜',0,'','2025-01-11 22:18:10',NULL,'2025-01-22 11:04:09',NULL),(672333164216389,'香煎荷包蛋','家常菜',4,'','2025-05-03 21:50:41','645808454946885','2025-05-03 21:50:41','645808454946885'),(672333288300613,'红烧大虾','家常菜',5,'','2025-05-03 21:51:11','645808454946885','2025-05-03 21:51:11','645808454946885'),(672333596299333,'红烧鲳鳊鱼','家常菜',4,'','2025-05-03 21:52:26','645808454946885','2025-05-03 21:52:26','645808454946885'),(672333773504581,'清炒大白菜','家常菜',4,'','2025-05-03 21:53:10','645808454946885','2025-05-03 21:53:10','645808454946885');
/*!40000 ALTER TABLE `food_recipe` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `food_record`
--
DROP TABLE IF EXISTS `food_record`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `food_record` (
`id` bigint NOT NULL,
`food_id` bigint NOT NULL COMMENT '美食id',
`date` date NOT NULL COMMENT '完成时间',
`image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '图片路径',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='美食成果';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `food_record`
--
LOCK TABLES `food_record` WRITE;
/*!40000 ALTER TABLE `food_record` DISABLE KEYS */;
INSERT INTO `food_record` VALUES (632688264441925,614660173221957,'2025-01-04','files/food/487f7b22f68312d2c1bbc93b1aea445b.jpg'),(632688264441926,614660173221957,'2024-11-13','files/food/afa87f8628b21f883c0df8e8fa191f54.jpg'),(632701463998533,614665900060741,'2025-01-05','files/food/59c704e85c1f7a92060cecbd01285ff3.jpg'),(632702438899781,614668663291973,'2025-01-04','files/food/08398ad34a09075dd1ba10ebd2776268.jpg'),(632703259230277,632703259000901,'2024-12-01','files/food/a5a8a1ccb111e2f0a91512efbfcdb04c.jpg'),(632703748022341,632703747838021,'2025-01-04','files/food/2b9fb91718567ffbce3345498f07a567.jpg'),(672332969476165,614660173221957,'2025-05-03','files/food/1bcaa7cff0162df2268147b18c1d8cdc.jpg'),(672334043287621,672333596299333,'2025-02-16','files/food/15ce1a86f4a2e6fb96c17bb307f36455.jpg'),(672334159204421,672333773504581,'2025-02-16','files/food/9e7c0cd1cbd0de61dce1c5c053e5ed62.jpg'),(672334513164357,672333288300613,'2025-04-06','files/food/a84730dc6f7f025205d984ebfdb222f2.jpg'),(672334634389573,672333164216389,'2025-04-06','files/food/afc9e6d770ae83e030362e6758373398.jpg');
/*!40000 ALTER TABLE `food_record` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `food_step`
--
DROP TABLE IF EXISTS `food_step`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `food_step` (
`id` bigint NOT NULL,
`food_id` bigint NOT NULL COMMENT '美食id',
`sort` int NOT NULL COMMENT '顺序',
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容',
`image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '图片地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='美食步骤';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `food_step`
--
LOCK TABLES `food_step` WRITE;
/*!40000 ALTER TABLE `food_step` DISABLE KEYS */;
INSERT INTO `food_step` VALUES (632688264384581,614660173221957,0,'先把鱼头剁开',''),(632688264384582,614660173221957,1,'洗鱼',''),(632688264384583,614660173221957,2,'倒水放砂锅里煮',''),(632688264384584,614660173221957,3,'放豆腐',''),(632688264384585,614660173221957,4,'放盐',''),(632701463953477,614665900060741,0,'清洗带鱼',''),(632702438879301,614668663291973,0,'清洗砺岈',''),(632703259185221,632703259000901,0,'清洗鲫鱼',''),(636430940074053,632703747838021,0,'清洗土豆切成丝','');
/*!40000 ALTER TABLE `food_step` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Dumping routines for database 'food_hub'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2025-06-24 20:01:31

View File

@@ -34,6 +34,7 @@
<resultMap id="foodRecordResultMap" type="com.cxx.food.dto.FoodRecordDto">
<id property="id" column="id"/>
<result property="person" column="person"/>
<result property="date" column="date"/>
<result property="imageUrl" column="imageUrl"/>
</resultMap>
@@ -45,8 +46,8 @@
<result property="recommendRate" column="recommendRate"/>
<collection property="recordList" ofType="com.cxx.food.dto.FoodRecordDto">
<id property="id" column="workId"/>
<result property="person" column="person"/>
<result property="date" column="recordDate"/>
<result property="person" column="recordPerson"/>
<result property="imageUrl" column="workImageUrl"/>
</collection>
</resultMap>
@@ -72,6 +73,7 @@
<select id="queryFoodRecordById" resultMap="foodRecordResultMap">
SELECT id AS id,
person AS person,
date AS date,
image_url AS imageUrl
FROM food_record
@@ -83,6 +85,7 @@
SELECT a.id AS id,
b.name AS name,
b.category AS category,
a.person AS person,
a.date AS date,
a.image_url AS imageUrl
FROM food_record AS a
@@ -102,7 +105,7 @@
WHERE a.id = #{id}
</select>
<select id="queryFoodSummary" resultMap="foodSummaryResultMap">
<select id="queryFoodSummaryByPage" resultMap="foodSummaryResultMap">
SELECT a.id AS id,
a.name AS name,
a.category AS category,
@@ -115,6 +118,23 @@
</where>
</select>
<select id="queryFoodSummary" resultMap="foodSummaryResultMap">
SELECT a.id AS id,
a.name AS name,
a.category AS category,
a.recommend_rate AS recommendRate,
b.person AS person,
b.date AS recordDate,
b.image_url AS workImageUrl
FROM food_recipe a
LEFT JOIN food_record b ON a.id = b.food_id
<where>
<if test="query.category != null and query.category != ''">
a.category = #{query.category}
</if>
</where>
</select>
<select id="queryFoodStats" resultType="com.cxx.food.dto.FoodStatsDto">
SELECT COUNT(DISTINCT a.name) AS recipeCount,
COUNT(DISTINCT a.category) AS categoryCount,
@@ -123,8 +143,34 @@
LEFT JOIN food_record b ON a.id = b.food_id
</select>
<select id="queryFoodRecordStats" resultType="com.cxx.food.dto.StatsChartDto">
SELECT DATE_FORMAT(date, '%Y-%m') AS name,
COUNT(id) AS value
FROM food_record
GROUP BY DATE_FORMAT(date, '%Y-%m')
ORDER BY name DESC;
</select>
<select id="queryFoodCategoryStats" resultType="com.cxx.food.dto.StatsChartDto">
SELECT category AS name,
COUNT(id) AS value
FROM food_recipe
GROUP BY category
ORDER BY value DESC;
</select>
<select id="queryFoodRankStats" resultType="com.cxx.food.dto.StatsChartDto">
SELECT a.name AS name,
COUNT(b.id) AS value
FROM food_recipe a
LEFT JOIN
food_record b ON a.id = b.food_id
GROUP BY a.id, a.name
ORDER BY value DESC;
</select>
<select id="queryFoodCategory" resultType="string">
SELECT DISTINCT a.category AS category
SELECT DISTINCT a.category AS category
FROM food_recipe a
</select>