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

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.

// 云函数createOrder
const cloud = require('wx-server-sdk')
// 初始化cloud
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV // 使用动态环境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
}
}
}