| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- /**
- * 订单管理API接口系统
- * 为后台管理系统提供订单查询、管理功能
- * 确保数据一致性和完整性
- */
- class OrderApiService {
- constructor() {
- this.listeners = []; // 订单数据变化监听器
- this.initOrderData();
- }
- // 初始化订单数据
- initOrderData() {
- const orders = this.getAllOrders();
- if (orders.length === 0) {
- // 初始化示例订单数据
- const sampleOrders = [
- {
- id: 'ORDER_1705123456789_001',
- orderNo: 'ORD20240115001',
- status: '待出发',
- statusCode: 1,
- activity: '北京到上海商务出行',
- schedule: {
- date: '2024-03-15',
- time: '09:00',
- fromLoc: '北京东直门地铁站A口',
- toLoc: '上海体育馆',
- model: '宇通大巴',
- type: 'bus',
- price: 88,
- duration: '约5小时',
- left: 12
- },
- passengers: [
- {
- name: '张三',
- idtype: '身份证',
- idcard: '110101199001011234',
- phone: '13800138001'
- }
- ],
- totalPrice: 88,
- createTime: '2024-01-15 10:30:00',
- updateTime: '2024-01-15 10:30:00',
- paymentTime: '2024-01-15 10:32:00',
- driver: {
- id: 'driver_001',
- name: '张师傅',
- phone: '13800138001',
- carNumber: '京A12345',
- carModel: '宇通大巴',
- location: {
- lng: 116.404,
- lat: 39.915,
- address: '北京市东城区东直门'
- }
- },
- contactInfo: {
- phone: '138****8001',
- email: 'user@example.com'
- },
- notes: '请准时到达上车点',
- tags: ['商务出行', '热门路线']
- },
- {
- id: 'ORDER_1705123456790_002',
- orderNo: 'ORD20240115002',
- status: '行程中',
- statusCode: 2,
- activity: '北京到天津短途游',
- schedule: {
- date: '2024-01-16',
- time: '14:00',
- fromLoc: '北京朝阳区',
- toLoc: '天津滨海新区',
- model: '奔驰V级商务车',
- type: 'business-charter',
- price: 1200,
- duration: '约1.5小时',
- left: 6
- },
- passengers: [
- {
- name: '李四',
- idtype: '身份证',
- idcard: '110101199002021234',
- phone: '13800138002'
- },
- {
- name: '王五',
- idtype: '身份证',
- idcard: '110101199003031234',
- phone: '13800138003'
- }
- ],
- totalPrice: 1200,
- createTime: '2024-01-15 14:20:00',
- updateTime: '2024-01-16 14:05:00',
- paymentTime: '2024-01-15 14:25:00',
- driver: {
- id: 'driver_002',
- name: '李师傅',
- phone: '13800138002',
- carNumber: '京B67890',
- carModel: '奔驰V级商务车',
- location: {
- lng: 121.473,
- lat: 31.230,
- address: '天津市滨海新区'
- }
- },
- contactInfo: {
- phone: '138****8002',
- email: 'user2@example.com'
- },
- notes: '包车服务,已确认上车',
- tags: ['包车', '商务']
- }
- ];
- this.saveOrders(sampleOrders);
- }
- }
- // 获取所有订单
- getAllOrders() {
- try {
- return wx.getStorageSync('orders') || [];
- } catch (error) {
- console.error('获取订单数据失败:', error);
- return [];
- }
- }
- // 保存订单数据
- saveOrders(orders) {
- try {
- wx.setStorageSync('orders', orders);
- this.notifyListeners(orders);
- return true;
- } catch (error) {
- console.error('保存订单数据失败:', error);
- return false;
- }
- }
- // 根据ID获取订单
- getOrderById(orderId) {
- const orders = this.getAllOrders();
- return orders.find(order => order.id === orderId);
- }
- // 根据订单号获取订单
- getOrderByOrderNo(orderNo) {
- const orders = this.getAllOrders();
- return orders.find(order => order.orderNo === orderNo);
- }
- // 创建新订单
- createOrder(orderData) {
- const orders = this.getAllOrders();
- const newOrder = {
- ...orderData,
- id: this.generateOrderId(),
- orderNo: this.generateOrderNo(),
- createTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
- updateTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
- status: '待出发',
- statusCode: 1
- };
-
- orders.push(newOrder);
- this.saveOrders(orders);
- return newOrder;
- }
- // 更新订单
- updateOrder(orderId, updateData) {
- const orders = this.getAllOrders();
- const orderIndex = orders.findIndex(order => order.id === orderId);
-
- if (orderIndex === -1) {
- throw new Error('订单不存在');
- }
- orders[orderIndex] = {
- ...orders[orderIndex],
- ...updateData,
- updateTime: new Date().toISOString().replace('T', ' ').substring(0, 19)
- };
- this.saveOrders(orders);
- return orders[orderIndex];
- }
- // 删除订单
- deleteOrder(orderId) {
- const orders = this.getAllOrders();
- const filteredOrders = orders.filter(order => order.id !== orderId);
-
- if (filteredOrders.length === orders.length) {
- throw new Error('订单不存在');
- }
- this.saveOrders(filteredOrders);
- return true;
- }
- // 订单查询功能
- searchOrders(searchParams) {
- const orders = this.getAllOrders();
- let filteredOrders = [...orders];
- // 按订单号查询
- if (searchParams.orderNo) {
- filteredOrders = filteredOrders.filter(order =>
- order.orderNo.toLowerCase().includes(searchParams.orderNo.toLowerCase())
- );
- }
- // 按日期查询
- if (searchParams.date) {
- filteredOrders = filteredOrders.filter(order =>
- order.schedule.date === searchParams.date
- );
- }
- // 按到达城市查询
- if (searchParams.toCity) {
- filteredOrders = filteredOrders.filter(order =>
- order.schedule.toLoc.includes(searchParams.toCity)
- );
- }
- // 按手机号查询
- if (searchParams.phone) {
- filteredOrders = filteredOrders.filter(order =>
- order.passengers.some(passenger =>
- passenger.phone.includes(searchParams.phone)
- ) ||
- order.contactInfo.phone.includes(searchParams.phone)
- );
- }
- // 按状态查询
- if (searchParams.status) {
- filteredOrders = filteredOrders.filter(order =>
- order.status === searchParams.status
- );
- }
- // 按创建时间范围查询
- if (searchParams.startDate && searchParams.endDate) {
- filteredOrders = filteredOrders.filter(order => {
- const orderDate = new Date(order.createTime);
- const startDate = new Date(searchParams.startDate);
- const endDate = new Date(searchParams.endDate);
- return orderDate >= startDate && orderDate <= endDate;
- });
- }
- // 排序
- const sortBy = searchParams.sortBy || 'createTime';
- const sortOrder = searchParams.sortOrder || 'desc';
-
- filteredOrders.sort((a, b) => {
- let aValue = a[sortBy];
- let bValue = b[sortBy];
-
- if (sortBy === 'createTime' || sortBy === 'updateTime') {
- aValue = new Date(aValue);
- bValue = new Date(bValue);
- }
-
- if (sortOrder === 'asc') {
- return aValue > bValue ? 1 : -1;
- } else {
- return aValue < bValue ? 1 : -1;
- }
- });
- return {
- orders: filteredOrders,
- total: filteredOrders.length,
- page: searchParams.page || 1,
- pageSize: searchParams.pageSize || 20
- };
- }
- // 获取订单统计信息
- getOrderStatistics() {
- const orders = this.getAllOrders();
-
- const stats = {
- total: orders.length,
- byStatus: {},
- byDate: {},
- revenue: 0,
- averageOrderValue: 0
- };
- orders.forEach(order => {
- // 按状态统计
- stats.byStatus[order.status] = (stats.byStatus[order.status] || 0) + 1;
-
- // 按日期统计
- const date = order.schedule.date;
- stats.byDate[date] = (stats.byDate[date] || 0) + 1;
-
- // 收入统计
- if (order.status !== '已取消') {
- stats.revenue += order.totalPrice;
- }
- });
- // 计算平均订单价值
- const paidOrders = orders.filter(order => order.status !== '已取消');
- stats.averageOrderValue = paidOrders.length > 0 ?
- (stats.revenue / paidOrders.length).toFixed(2) : 0;
- return stats;
- }
- // 批量更新订单状态
- batchUpdateOrderStatus(orderIds, status, statusCode) {
- const orders = this.getAllOrders();
- const updatedOrders = orders.map(order => {
- if (orderIds.includes(order.id)) {
- return {
- ...order,
- status,
- statusCode,
- updateTime: new Date().toISOString().replace('T', ' ').substring(0, 19)
- };
- }
- return order;
- });
- this.saveOrders(updatedOrders);
- return true;
- }
- // 导出订单数据
- exportOrders(searchParams = {}) {
- const result = this.searchOrders(searchParams);
- return {
- orders: result.orders,
- exportTime: new Date().toISOString(),
- total: result.total,
- searchParams
- };
- }
- // 生成订单ID
- generateOrderId() {
- const timestamp = Date.now();
- const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
- return `ORDER_${timestamp}_${random}`;
- }
- // 生成订单号
- generateOrderNo() {
- const now = new Date();
- const year = now.getFullYear();
- const month = (now.getMonth() + 1).toString().padStart(2, '0');
- const day = now.getDate().toString().padStart(2, '0');
- const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
- return `ORD${year}${month}${day}${random}`;
- }
- // 监听器管理
- addListener(callback) {
- this.listeners.push(callback);
- }
- removeListener(callback) {
- const index = this.listeners.indexOf(callback);
- if (index > -1) {
- this.listeners.splice(index, 1);
- }
- }
- notifyListeners(orders) {
- this.listeners.forEach(callback => {
- try {
- callback(orders);
- } catch (error) {
- console.error('订单数据监听器回调执行失败:', error);
- }
- });
- }
- // 同步订单数据(确保一致性)
- syncOrderData() {
- const orders = this.getAllOrders();
- this.notifyListeners(orders);
- return orders;
- }
- // 获取订单详情(包含完整信息)
- getOrderDetails(orderId) {
- const order = this.getOrderById(orderId);
- if (!order) {
- return null;
- }
- // 添加额外的详情信息
- return {
- ...order,
- timeline: this.getOrderTimeline(orderId),
- driverInfo: this.getDriverInfo(order.driver?.id),
- passengerCount: order.passengers.length,
- isCharter: order.schedule.type === 'business-charter'
- };
- }
- // 获取订单时间线
- getOrderTimeline(orderId) {
- const order = this.getOrderById(orderId);
- if (!order) return [];
- const timeline = [
- {
- time: order.createTime,
- event: '订单创建',
- description: '用户提交订单'
- },
- {
- time: order.paymentTime,
- event: '支付完成',
- description: '订单支付成功'
- }
- ];
- if (order.driver) {
- timeline.push({
- time: order.updateTime,
- event: '司机分配',
- description: `司机:${order.driver.name}`
- });
- }
- if (order.statusCode >= 2) {
- timeline.push({
- time: order.updateTime,
- event: '行程开始',
- description: '乘客已上车'
- });
- }
- if (order.statusCode >= 3) {
- timeline.push({
- time: order.updateTime,
- event: '行程完成',
- description: '已到达目的地'
- });
- }
- return timeline;
- }
- // 获取司机信息
- getDriverInfo(driverId) {
- if (!driverId) return null;
-
- // 这里可以集成司机API服务
- try {
- const driverApiService = require('./driver-api.js').default;
- return driverApiService.getDriverById(driverId);
- } catch (error) {
- console.error('获取司机信息失败:', error);
- return null;
- }
- }
- }
- // 创建单例实例
- const orderApiService = new OrderApiService();
- export default orderApiService;
|