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/createOrder/index.js

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
}
}
}