Files
WXProgram/miniprogram/services/orderService.ts
2025-10-16 21:32:16 +08:00

186 lines
5.2 KiB
TypeScript
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.

import { Order } from '../types';
import apiService from './apiService';
import { isMockMode } from './apiService';
class OrderService {
// 模拟订单数据
private mockOrders: Order[];
/**
* 构造函数,初始化模拟订单数据
*/
constructor() {
this.mockOrders = [
{
id: 1001,
startPoint: {
id: 1,
name: '瓦尔塔蓄电池昆明总店',
longitude: 102.705745,
latitude: 25.055281
},
endPoint: {
name: '昆明德众汽车销售服务有限公司',
longitude: 102.714686,
latitude: 25.047134
},
status: 'pending',
goodsType: '瓦尔塔AGM蓄电池',
goodsWeight: 50,
createTime: Date.now() - 3600000 // 1小时前创建
},
{
id: 1002,
startPoint: {
id: 2,
name: '瓦尔塔蓄电池盘龙区分店',
longitude: 102.728421,
latitude: 25.042498
},
endPoint: {
name: '云南中致远汽车销售有限公司',
longitude: 102.796212,
latitude: 24.936947
},
status: 'pending',
goodsType: '瓦尔塔EFB蓄电池',
goodsWeight: 120,
createTime: Date.now() - 7200000 // 2小时前创建
},
{
id: 1003,
startPoint: {
id: 3,
name: '瓦尔塔蓄电池西山区分店',
longitude: 102.689190,
latitude: 25.028234
},
endPoint: {
name: '昆明宝远汽车销售服务有限公司',
longitude: 102.756212,
latitude: 24.986947
},
status: 'pending',
goodsType: '瓦尔塔普通铅酸蓄电池',
goodsWeight: 80,
createTime: Date.now() - 10800000 // 3小时前创建
}
];
}
/**
* 获取所有待处理订单
*/
async getPendingOrders(): Promise<Order[]> {
if (isMockMode) {
return [...this.mockOrders];
}
return apiService.getPendingOrders();
}
/**
* 根据ID获取订单
*/
async getOrderById(id: number): Promise<Order | null> {
if (isMockMode) {
const order = this.mockOrders.find(o => o.id === id);
return order || null;
}
return apiService.getOrderById(id);
}
/**
* 指派订单给货运人员
* @param orderId 订单ID
* @param deliveryPersonId 货运人员ID
* @returns 指派结果包含success状态和可选消息
*/
async assignOrder(orderId: number, deliveryPersonId: number): Promise<{ success: boolean; message?: string }> {
if (isMockMode) {
// 模拟数据 - 查找订单并更新状态
const order = this.mockOrders.find(o => o.id === orderId);
if (order) {
order.status = 'assigned';
order.deliveryPersonId = deliveryPersonId;
console.log(`[MOCK] 订单 ${orderId} 已指派给货运人员 ${deliveryPersonId}`);
return { success: true, message: '指派成功' };
} else {
console.warn(`[MOCK] 订单 ${orderId} 不存在`);
return { success: false, message: '订单不存在' };
}
}
// 真实环境中调用API
try {
return await apiService.assignOrder(orderId, deliveryPersonId);
} catch (error) {
console.error('指派订单失败:', error);
return { success: false, message: error instanceof Error ? error.message : '指派失败' };
}
}
/**
* 更新订单状态
*/
async updateOrderStatus(orderId: number, status: Order['status']): Promise<{ success: boolean; message?: string }> {
if (isMockMode) {
const order = this.mockOrders.find(o => o.id === orderId);
if (order) {
order.status = status;
console.log(`[MOCK] 订单 ${orderId} 状态更新为 ${status}`);
return { success: true, message: '状态更新成功' };
}
return { success: false, message: '订单不存在' };
}
return apiService.updateOrderStatus(orderId, status).then(result => ({
success: result.success,
message: result.message || '状态更新成功'
}));
}
/**
* 创建新订单
*/
async createOrder(orderData: Omit<Order, 'id' | 'createTime'>): Promise<Order> {
if (isMockMode) {
const newOrder: Order = {
...orderData,
id: Math.max(...this.mockOrders.map(o => o.id), 1000) + 1,
createTime: Date.now()
};
this.mockOrders.push(newOrder);
return newOrder;
}
return apiService.createOrder(orderData);
}
/**
* 获取货运人员的订单列表
*/
async getDeliveryPersonOrders(deliveryPersonId: number): Promise<Order[]> {
if (isMockMode) {
// 模拟模式下返回部分订单
return this.mockOrders.slice(0, 2);
}
return apiService.getDeliveryPersonOrders(deliveryPersonId);
}
/**
* 删除订单
* @param orderId 订单ID
*/
async deleteOrder(orderId: number): Promise<void> {
if (isMockMode) {
// 在模拟数据中删除订单
const index = this.mockOrders.findIndex(o => o.id === orderId);
if (index !== -1) {
this.mockOrders.splice(index, 1);
console.log(`订单 ${orderId} 已删除`);
}
return;
}
return apiService.deleteOrder(orderId);
}
}
export default new OrderService();