Files
ylt_diy/AGENTS.md
user9994793890 ba91796dc1 feat: 实现订单日报系统
- 创建订单日报系统,支持每天8:01自动生成前一天(早8点到当天早8点)的日报
- 新建两个数据库表:t_daily_report_config(配置表)和 t_daily_report_history(历史表)
- 原表 t_equipment_charge_order 只读取不修改,严格遵守用户要求
- 支持按企业ID或用户ID拆分日报,用户ID会提示是企业用户还是普通用户
- 用户可自定义选择报表字段,所有字段使用中文显示
- 实现配置管理、日报生成、历史查看的完整功能
- 代码检查全部通过,静态检查无错误

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 9894087
2026-07-07 16:14:42 +08:00

157 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目上下文
这是一个订单日报系统,用于自动生成公交等企业的订单日报。
### 项目概述
- **功能**:每天早8:01自动生成前一天的订单日报(从前一天早8点到当天早8点)
- **数据库**:MySQL (haoslm2.xicp.net)
- **订单表**:t_equipment_charge_order(只读取,不修改)
- **拆分方式**:按企业ID或用户ID拆分日报
- **字段选择**:用户可自定义选择报表字段,使用中文显示
### 版本技术栈
- **Framework**: Next.js 16 (App Router)
- **Core**: React 19
- **Language**: TypeScript 5
- **UI 组件**: shadcn/ui (基于 Radix UI)
- **Styling**: Tailwind CSS 4
- **数据库**: MySQL (mysql2)
- **定时任务**: node-cron
- **Excel导出**: xlsx
## 目录结构
```
├── public/
│ └── reports/ # 生成的日报Excel文件
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── config/ # 配置管理API
│ │ │ ├── entities/ # 企业/用户列表API
│ │ │ ├── init-tables/ # 初始化数据库表API
│ │ │ ├── report/ # 日报生成API
│ │ │ └── test-db/ # 数据库连接测试API
│ │ └── page.tsx # 主页面
│ ├── components/ui/ # Shadcn UI 组件库
│ ├── hooks/ # 自定义 Hooks
│ ├── lib/
│ │ ├── db.ts # 数据库连接
│ │ ├── field-mapping.ts # 字段映射(英文->中文)
│ │ ├── init-tables.ts # 数据库表初始化
│ │ └── report-generator.ts # 日报生成核心逻辑
│ └── server.ts # 自定义服务端入口(含定时任务)
├── scripts/ # 构建与启动脚本
├── package.json
└── tsconfig.json
```
## 包管理规范
**仅允许使用 pnpm** 作为包管理器,**严禁使用 npm 或 yarn**。
常用命令:
- 安装依赖:`pnpm install`
- 添加依赖:`pnpm add <package>`
- 开发模式:`pnpm run dev`
- 构建:`pnpm run build`
- 生产运行:`pnpm run start`
## 开发规范
### 编码规范
- 默认按 TypeScript `strict` 心智写代码
- 禁止隐式 `any` 和 `as any`
- 函数参数、返回值、事件对象在使用前应有明确类型
- 清理未使用的变量和导入
### Hydration 问题防范
- 严禁在 JSX 渲染逻辑中直接使用 typeof window、Date.now()、Math.random()
- 必须使用 'use client' 并配合 useEffect + useState 确保动态内容仅在客户端挂载后渲染
## UI 设计与组件规范
- 模板预装核心组件库 `shadcn/ui`,位于 `src/components/ui/` 目录下
- Next.js 项目默认采用 shadcn/ui 组件、风格和规范
## 数据库表说明
### t_equipment_charge_order(原表,只读取不修改)
订单表,包含所有充电订单信息。主要字段:
- state: 订单状态(3 = 已完成)
- report_time: 订单上报时间(用于日报时间范围筛选)
- company_id: 企业ID
- user_id: 用户ID
- order_type: 订单类型(1=普通用户,3=企业用户)
### t_daily_report_config(新建表)
日报字段配置表:
- config_name: 配置名称
- split_type: 拆分方式(company_id 或 user_id)
- selected_fields: 用户选择的字段列表(JSON数组)
- is_active: 是否启用
### t_daily_report_history(新建表)
日报生成历史记录表:
- report_date: 报表日期
- split_type: 拆分方式
- split_value: 拆分值(企业ID或用户ID)
- total_orders: 订单总数
- total_amount: 总金额
- file_path: 生成的文件路径
- status: 状态(0=失败,1=成功)
## API 接口说明
### 配置管理
- GET /api/config - 获取所有配置
- POST /api/config - 创建新配置
- PUT /api/config/[id] - 更新配置
- DELETE /api/config/[id] - 禁用配置
### 企业/用户列表
- GET /api/entities?type=company - 获取企业列表
- GET /api/entities?type=user - 获取用户列表
### 日报生成
- POST /api/report/generate - 生成日报(可手动生成或批量生成)
### 日报历史
- GET /api/report/history - 获取历史记录(分页)
### 数据库测试
- GET /api/test-db - 测试数据库连接
- POST /api/init-tables - 初始化数据库表
## 定时任务
- 每天 8:01(北京时间)自动运行
- 为所有启用的配置自动生成日报
- 保存到历史记录表
- 生成的Excel文件保存在 public/reports/ 目录
## 测试与验证
执行代码检查:
```bash
pnpm run validate
```
这会运行:
- TypeScript 类型检查
- ESLint 代码检查
## 重要提示
1. **原表不修改**:t_equipment_charge_order 只读取,不修改结构和内容
2. **时间范围**:前一天早8点到当天早8点
3. **状态筛选**:只查询 state = 3(已完成订单)
4. **字段中文显示**:报表字段使用中文列名(基于 field-mapping.ts)
5. **用户类型提示**:按用户ID拆分时,提示用户类型(企业用户/普通用户)