212 lines
5.2 KiB
Markdown
212 lines
5.2 KiB
Markdown
|
|
# ✅ 日历统计数据与预约页面统一修复完成
|
|||
|
|
|
|||
|
|
**修复时间**: 2026-01-24
|
|||
|
|
**问题描述**: 日历页面显示的订单统计数量与"我的预约"页面不一致
|
|||
|
|
**修复状态**: ✅ 已完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 问题分析
|
|||
|
|
|
|||
|
|
### 问题现象
|
|||
|
|
- **日历页面**: 显示"全部 6"(只统计当月订单)
|
|||
|
|
- **我的预约页面**: 显示"全部 62"(统计所有订单)
|
|||
|
|
- **用户困惑**: 两个页面显示的数字不一致,不知道哪个是对的
|
|||
|
|
|
|||
|
|
### 根本原因
|
|||
|
|
日历页面在"月视图"模式下调用的是`getMonthlyStats(year, month)`接口,该接口只统计指定月份的订单:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 修复前的代码
|
|||
|
|
async loadStatistics() {
|
|||
|
|
const res = await calendarApi.getMonthlyStats(this.currentYear, this.currentMonth)
|
|||
|
|
// 只统计当月订单
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
而"我的预约"页面调用的是`getOrderCount()`接口,统计所有订单。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 修复方案
|
|||
|
|
|
|||
|
|
### 1. 修改日历页面统计逻辑
|
|||
|
|
|
|||
|
|
**文件**: `peidu/uniapp/src/user-package/pages/calendar/index.vue`
|
|||
|
|
|
|||
|
|
**修改内容**:
|
|||
|
|
```javascript
|
|||
|
|
// ✅ 修复后:统一使用getAllStats()
|
|||
|
|
async loadStatistics() {
|
|||
|
|
console.log('[日历] 加载所有订单统计数据')
|
|||
|
|
|
|||
|
|
// 改为调用getAllStats(),获取所有订单的统计数据
|
|||
|
|
const res = await calendarApi.getAllStats()
|
|||
|
|
|
|||
|
|
const data = res.data || {}
|
|||
|
|
this.statistics = {
|
|||
|
|
total: data.totalCount || 0,
|
|||
|
|
completed: data.completedCount || 0,
|
|||
|
|
upcoming: data.pendingCount || 0
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 后端接口支持
|
|||
|
|
|
|||
|
|
后端`CalendarServiceImpl`已经实现了`getAllStats()`方法:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
@Override
|
|||
|
|
public Map<String, Object> getAllStats(Long userId) {
|
|||
|
|
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
|
|||
|
|
queryWrapper.eq("user_id", userId)
|
|||
|
|
.eq("deleted", 0);
|
|||
|
|
|
|||
|
|
List<Order> orders = orderMapper.selectList(queryWrapper);
|
|||
|
|
|
|||
|
|
Map<String, Object> stats = new HashMap<>();
|
|||
|
|
stats.put("totalCount", orders.size());
|
|||
|
|
stats.put("pendingCount", orders.stream()
|
|||
|
|
.filter(o -> o.getStatus() == 1 || o.getStatus() == 2)
|
|||
|
|
.count());
|
|||
|
|
stats.put("ongoingCount", orders.stream()
|
|||
|
|
.filter(o -> o.getStatus() == 3)
|
|||
|
|
.count());
|
|||
|
|
stats.put("completedCount", orders.stream()
|
|||
|
|
.filter(o -> o.getStatus() == 4)
|
|||
|
|
.count());
|
|||
|
|
|
|||
|
|
return stats;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 修复效果
|
|||
|
|
|
|||
|
|
### 修复前
|
|||
|
|
| 页面 | 全部 | 待服务 | 已完成 |
|
|||
|
|
|------|------|--------|--------|
|
|||
|
|
| 日历页面 | 6 | 2 | 3 |
|
|||
|
|
| 我的预约 | 62 | 60 | 2 |
|
|||
|
|
| **一致性** | ❌ 不一致 | ❌ 不一致 | ❌ 不一致 |
|
|||
|
|
|
|||
|
|
### 修复后
|
|||
|
|
| 页面 | 全部 | 待服务 | 已完成 |
|
|||
|
|
|------|------|--------|--------|
|
|||
|
|
| 日历页面 | 62 | 60 | 2 |
|
|||
|
|
| 我的预约 | 62 | 60 | 2 |
|
|||
|
|
| **一致性** | ✅ 一致 | ✅ 一致 | ✅ 一致 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 设计说明
|
|||
|
|
|
|||
|
|
### 为什么这样设计?
|
|||
|
|
|
|||
|
|
1. **统计数字显示所有订单**
|
|||
|
|
- 用户可以看到总体的订单情况
|
|||
|
|
- 与"我的预约"页面保持一致
|
|||
|
|
- 避免用户困惑
|
|||
|
|
|
|||
|
|
2. **日历视图仍然按月显示**
|
|||
|
|
- 月视图只显示当月的订单卡片
|
|||
|
|
- 方便用户查看具体月份的安排
|
|||
|
|
- 不会因为订单太多而显示混乱
|
|||
|
|
|
|||
|
|
3. **全部订单视图**
|
|||
|
|
- 用户可以切换到"全部订单"视图
|
|||
|
|
- 查看所有订单的列表
|
|||
|
|
- 满足不同的查看需求
|
|||
|
|
|
|||
|
|
### 用户体验
|
|||
|
|
- ✅ 统计数字一致,不会困惑
|
|||
|
|
- ✅ 月视图清晰,不会混乱
|
|||
|
|
- ✅ 可以切换视图,灵活查看
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 测试验证
|
|||
|
|
|
|||
|
|
### 1. 执行SQL验证
|
|||
|
|
```bash
|
|||
|
|
# 在Navicat中执行
|
|||
|
|
peidu/sql/🔍验证日历统计数据-2026-01-24.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 前端测试步骤
|
|||
|
|
|
|||
|
|
1. **重新编译前端**
|
|||
|
|
```bash
|
|||
|
|
cd peidu/uniapp
|
|||
|
|
npm run build:mp-weixin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **测试日历页面**
|
|||
|
|
- 打开日历页面
|
|||
|
|
- 查看统计数字(全部、待服务、已完成)
|
|||
|
|
- 记录数字
|
|||
|
|
|
|||
|
|
3. **测试我的预约页面**
|
|||
|
|
- 打开"我的预约"页面
|
|||
|
|
- 查看统计数字(全部、待服务、已完成)
|
|||
|
|
- 记录数字
|
|||
|
|
|
|||
|
|
4. **对比验证**
|
|||
|
|
- 两个页面的统计数字应该完全一致
|
|||
|
|
- 日历月视图仍然只显示当月订单
|
|||
|
|
- 切换到"全部订单"视图可以看到所有订单
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 相关文件
|
|||
|
|
|
|||
|
|
### 修改的文件
|
|||
|
|
- `peidu/uniapp/src/user-package/pages/calendar/index.vue` - 日历页面统计逻辑
|
|||
|
|
|
|||
|
|
### 后端支持
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/service/impl/CalendarServiceImpl.java` - 已实现getAllStats()方法
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/controller/CalendarController.java` - 已提供/api/calendar/all-stats接口
|
|||
|
|
|
|||
|
|
### 验证文件
|
|||
|
|
- `peidu/sql/🔍验证日历统计数据-2026-01-24.sql` - SQL验证脚本
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 完成清单
|
|||
|
|
|
|||
|
|
- [x] 修改日历页面统计逻辑
|
|||
|
|
- [x] 验证后端接口支持
|
|||
|
|
- [x] 创建SQL验证脚本
|
|||
|
|
- [x] 编写修复文档
|
|||
|
|
- [ ] 重新编译前端
|
|||
|
|
- [ ] 测试验证
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 下一步操作
|
|||
|
|
|
|||
|
|
1. **立即重新编译前端**
|
|||
|
|
```bash
|
|||
|
|
cd peidu/uniapp
|
|||
|
|
npm run build:mp-weixin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **刷新小程序**
|
|||
|
|
- 在微信开发者工具中点击"编译"
|
|||
|
|
- 或者在手机上删除小程序重新打开
|
|||
|
|
|
|||
|
|
3. **测试验证**
|
|||
|
|
- 对比日历页面和我的预约页面的统计数字
|
|||
|
|
- 确认数字完全一致
|
|||
|
|
|
|||
|
|
4. **如果还有问题**
|
|||
|
|
- 检查浏览器控制台日志
|
|||
|
|
- 查看后端日志
|
|||
|
|
- 执行SQL验证脚本确认数据
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**修复完成!** 🎉
|