客户订单历史查询功能实现 核心功能需求 1.多条件查询:支持按客户名称、订单号、日期范围、水果品类等条件筛选 2.历史数据追溯:完整记录订单状态变更历史(创建、支付、发货、完成等) 3.数据可视化:提供订单趋势分析图表(如月度销售趋势、品类占比等) 4.导出功能:支持将查询结果
客户订单历史查询功能实现
核心功能需求
1. 多条件查询:支持按客户名称、订单号、日期范围、水果品类等条件筛选
2. 历史数据追溯:完整记录订单状态变更历史(创建、支付、发货、完成等)
3. 数据可视化:提供订单趋势分析图表(如月度销售趋势、品类占比等)
4. 导出功能:支持将查询结果导出为Excel/PDF格式
技术实现方案
数据库设计建议
```sql
-- 订单主表
CREATE TABLE orders (
order_id VARCHAR(32) PRIMARY KEY,
customer_id VARCHAR(32) NOT NULL,
order_date DATETIME NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status TINYINT NOT NULL COMMENT 1-待支付 2-已支付 3-已发货 4-已完成 5-已取消,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- 订单明细表
CREATE TABLE order_items (
item_id VARCHAR(32) PRIMARY KEY,
order_id VARCHAR(32) NOT NULL,
product_id VARCHAR(32) NOT NULL,
quantity INT NOT NULL,
unit_price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
-- 订单状态变更历史表
CREATE TABLE order_history (
history_id VARCHAR(32) PRIMARY KEY,
order_id VARCHAR(32) NOT NULL,
old_status TINYINT,
new_status TINYINT NOT NULL,
change_time DATETIME NOT NULL,
operator VARCHAR(50),
remark VARCHAR(255),
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
```
后端API示例(Java Spring Boot)
```java
@RestController
@RequestMapping("/api/orders")
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("/history")
public ResponseEntity
> getOrderHistory(
@RequestParam(required = false) String customerName,
@RequestParam(required = false) String orderId,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
Page historyPage = orderService.queryOrderHistory(
customerName, orderId, startDate, endDate, page, size);
return ResponseEntity.ok(historyPage);
}
@GetMapping("/history/export")
public void exportOrderHistory(
@RequestParam(required = false) String customerName,
@RequestParam(required = false) String orderId,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
HttpServletResponse response) throws IOException {
List historyList = orderService.exportOrderHistory(
customerName, orderId, startDate, endDate);
// 使用Apache POI或EasyExcel生成Excel文件
// 设置响应头并写入文件流
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=order_history.xlsx");
// 实际导出逻辑...
}
}
```
前端实现(Vue.js示例)
```javascript
v-model="queryForm.dateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
查询
导出
查看详情
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryForm.page"
:page-sizes="[10, 20, 50, 100]"
:page-size="queryForm.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
<script>
export default {
data() {
return {
queryForm: {
customerName: ,
orderId: ,
dateRange: [],
startDate: ,
endDate: ,
page: 1,
size: 10
},
tableData: [],
total: 0
}
},
methods: {
handleQuery() {
if (this.queryForm.dateRange && this.queryForm.dateRange.length === 2) {
this.queryForm.startDate = this.$moment(this.queryForm.dateRange[0]).format(YYYY-MM-DD);
this.queryForm.endDate = this.$moment(this.queryForm.dateRange[1]).format(YYYY-MM-DD);
}
this.$api.getOrderHistory(this.queryForm).then(response => {
this.tableData = response.data.content;
this.total = response.data.totalElements;
});
},
handleExport() {
// 调用导出API
window.open(this.$api.getExportUrl(this.queryForm));
},
// 其他分页方法...
}
}
```
万象源码部署指南
部署前准备
1. 环境要求:
- Java JDK 8+
- MySQL 5.7+ 或 MariaDB 10.3+
- Redis (可选,用于缓存)
- Nginx (用于生产环境部署)
2. 源码获取:
- 从官方渠道获取万象水果批发系统源码
- 确保包含完整的后端代码、前端代码和数据库脚本
部署步骤
1. 数据库初始化
```sql
-- 创建数据库
CREATE DATABASE fruit_wholesale DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 执行初始化脚本(通常包含在源码的sql目录下)
SOURCE /path/to/source/sql/init.sql;
```
2. 后端服务部署
1. 修改配置文件:
- 编辑`application.yml`或`application.properties`文件
- 配置数据库连接、Redis连接(如果使用)、服务器端口等
2. 构建项目:
```bash
使用Maven构建
mvn clean package
或使用Gradle(如果项目使用Gradle)
gradle build
```
3. 启动服务:
```bash
直接运行
java -jar target/fruit-wholesale.jar
或使用Spring Boot Maven插件
mvn spring-boot:run
```
3. 前端部署
1. 安装依赖:
```bash
npm install
```
2. 构建生产环境代码:
```bash
npm run build
```
3. 配置Nginx(示例配置):
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
root /path/to/frontend/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
4. 初始化数据(可选)
- 运行提供的初始化脚本导入基础数据
- 或通过系统管理界面手动添加初始数据
常见问题解决
1. 数据库连接失败:
- 检查数据库服务是否运行
- 验证用户名密码是否正确
- 检查防火墙设置是否允许连接
2. 前端资源加载失败:
- 确保Nginx配置正确指向前端构建目录
- 检查前端构建是否成功完成
3. 跨域问题:
- 在后端配置CORS(开发环境)
- 或确保Nginx正确代理API请求
4. 性能优化建议:
- 对订单历史表添加适当的索引
- 考虑对历史数据做分表或归档处理
- 使用缓存减少数据库查询压力
维护与升级建议
1. 定期备份:
- 设置数据库自动备份策略
- 备份源码和配置文件
2. 监控与日志:
- 实现应用性能监控(APM)
- 配置集中式日志管理
3. 版本控制:
- 使用Git等版本控制系统管理源码
- 创建部署标签便于回滚
4. 安全更新:
- 定期检查并更新依赖库
- 关注安全漏洞公告并及时修复
通过以上方案,您可以实现一个功能完善的水果批发系统客户订单历史查询功能,并顺利完成万象源码的部署工作。