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.
108 lines
2.3 KiB
108 lines
2.3 KiB
// 云函数createOrder
|
|
const cloud = require('wx-server-sdk')
|
|
|
|
// 初始化cloud
|
|
cloud.init({
|
|
env: 'cloud1-5gqeisa06659849a' // 使用您的云环境ID
|
|
})
|
|
const db = cloud.database()
|
|
|
|
exports.main = async (event, context) => {
|
|
const wxContext = cloud.getWXContext()
|
|
const openid = wxContext.OPENID
|
|
|
|
// 获取请求参数
|
|
const {
|
|
type, // 'secondhand'
|
|
itemId,
|
|
note
|
|
} = event
|
|
|
|
if (!type || !itemId) {
|
|
return {
|
|
success: false,
|
|
message: '参数错误'
|
|
}
|
|
}
|
|
|
|
// 事务处理
|
|
const transaction = await db.startTransaction()
|
|
|
|
try {
|
|
let item, itemCollection, status
|
|
|
|
// 只支持二手商品
|
|
if (type === 'secondhand') {
|
|
itemCollection = 'secondhand_goods'
|
|
status = 'sold' // 二手商品状态变为已售出
|
|
} else {
|
|
return {
|
|
success: false,
|
|
message: '类型错误'
|
|
}
|
|
}
|
|
|
|
// 获取商品信息
|
|
const itemResult = await transaction.collection(itemCollection).doc(itemId).get()
|
|
item = itemResult.data
|
|
|
|
if (!item) {
|
|
await transaction.rollback()
|
|
return {
|
|
success: false,
|
|
message: '商品不存在'
|
|
}
|
|
}
|
|
|
|
// 检查状态是否可购买
|
|
if (item.status !== 'available') {
|
|
await transaction.rollback()
|
|
return {
|
|
success: false,
|
|
message: '该商品已售出'
|
|
}
|
|
}
|
|
|
|
// 更新商品状态
|
|
await transaction.collection(itemCollection).doc(itemId).update({
|
|
data: {
|
|
status,
|
|
updateTime: db.serverDate()
|
|
}
|
|
})
|
|
|
|
// 创建订单
|
|
const orderResult = await transaction.collection('orders').add({
|
|
data: {
|
|
type,
|
|
itemId,
|
|
title: item.title,
|
|
price: item.price,
|
|
publisherOpenid: item.openid, // 发布者openid
|
|
buyerOpenid: openid, // 购买者openid
|
|
note,
|
|
status: 'waiting', // 订单状态:待完成
|
|
createTime: db.serverDate(),
|
|
updateTime: db.serverDate()
|
|
}
|
|
})
|
|
|
|
// 提交事务
|
|
await transaction.commit()
|
|
|
|
return {
|
|
success: true,
|
|
orderId: orderResult._id,
|
|
message: '下单成功'
|
|
}
|
|
} catch (error) {
|
|
// 回滚事务
|
|
await transaction.rollback()
|
|
|
|
return {
|
|
success: false,
|
|
message: '下单失败',
|
|
error: error.message
|
|
}
|
|
}
|
|
}
|