You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
store_node/cloudfunctions/getMyOrders/index.js

111 lines
2.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 云函数getMyOrders
const cloud = require('wx-server-sdk')
// 初始化cloud
cloud.init({
env: 'cloud1-5gqeisa06659849a' // 使用您的云环境ID
})
const db = cloud.database()
const _ = db.command
const $ = db.command.aggregate
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const openid = wxContext.OPENID
// 获取请求参数
const {
type = 'all', // 订单类型all, secondhand
status = 'all', // 订单状态all, waiting, processing, completed, cancelled
role = 'buyer', // 角色buyer(买家), publisher(卖家)
pageNum = 1,
pageSize = 10
} = event
// 构建查询条件
let query = {}
// 按角色筛选
if (role === 'buyer') {
query.buyerOpenid = openid
} else if (role === 'publisher') {
query.publisherOpenid = openid
}
// 按类型筛选
if (type !== 'all') {
query.type = type
}
// 按状态筛选
if (status !== 'all') {
query.status = status
}
try {
// 计算总数
const countResult = await db.collection('orders')
.where(query)
.count()
const total = countResult.total
// 查询订单数据
const orderResult = await db.collection('orders')
.where(query)
.orderBy('createTime', 'desc')
.skip((pageNum - 1) * pageSize)
.limit(pageSize)
.get()
// 获取关联的商品信息
const orders = orderResult.data
const ordersWithDetails = []
for (const order of orders) {
let detailCollection = ''
if (order.type === 'secondhand') {
detailCollection = 'secondhand_goods'
}
try {
// 获取关联信息
if (detailCollection) {
const detailResult = await db.collection(detailCollection)
.doc(order.itemId)
.field({
title: true,
description: true,
images: true,
price: true
})
.get()
ordersWithDetails.push({
...order,
itemDetail: detailResult.data || {}
})
} else {
ordersWithDetails.push(order)
}
} catch (error) {
// 如果获取详情失败,仍然返回订单基本信息
ordersWithDetails.push(order)
}
}
return {
success: true,
data: ordersWithDetails,
total,
pageNum,
pageSize,
hasMore: total > pageNum * pageSize
}
} catch (error) {
return {
success: false,
message: '获取订单失败',
error: error.message
}
}
}