按已完成订单发放jzd


// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database()

// 批量查询goods表中的tokennumber
async function queryTokenNumbers(goodsIds) {
  console.log(`批量查询 goods 表中 ${goodsIds.length} 条记录`)
  const result = await db.collection('goods')
    .where({
      _id: db.command.in(goodsIds)
    })
    .get()
  console.log(`批量查询完成,查询到 ${result.data.length} 条结果`)

  // 构建一个 map 以便快速查找 tokennumber
  const tokenMap = {}
  result.data.forEach(item => {
    tokenMap[item._id] = item.tokennumber
  })
  return tokenMap
}

// 云函数入口函数
exports.main = async (event, context) => {
  const pageSize = 100 // 每次查询的条数
  let pageIndex = 0
  let processedCount = 0 // 累加处理的订单数
  let failedOrders = [] // 保存调用云函数 'token' 失败的订单ID
  let hasMore = true

  console.log("开始处理已完成的订单...")

  while (hasMore) {
    // 1. 查询goodorders数据库中state为‘已完成’的数据
    const ordersResult = await db.collection('goodorders')
      .where({ state: '已完成' })
      .skip(pageSize * pageIndex)
      .limit(pageSize)
      .get()

    const orders = ordersResult.data

    if (orders.length === 0) {
      console.log(`分页 ${pageIndex + 1}: 无更多数据,处理结束`)
      hasMore = false
      break
    }

    console.log(`分页 ${pageIndex + 1}: 查询到 ${orders.length} 条订单数据`)

    // 2. 提取所有订单中的 snapshot._id
    const goodsIds = orders.map(order => order.snapshot._id)

    // 3. 批量查询 goods 表中的 tokennumber
    const tokenMap = await queryTokenNumbers(goodsIds)

    // 4. 遍历每条订单数据并处理
    for (let order of orders) {
      const snapshotId = order.snapshot._id
      const tokennumber = tokenMap[snapshotId] || 0
      console.log(`订单 ${order._id}: tokennumber = ${tokennumber}`)

      // 判断 tokennumber 是否大于 0,如果大于 0 则调用云函数‘token’
      if (tokennumber > 0) {
        console.log(`订单 ${order._id}: tokennumber 大于 0,调用云函数 'token'`)

        let data = {
          openid: order._openid,
          time: order.createTime,
          number: tokennumber * order.quantity,
          mark: '购物赠送',
          module: 'shop',
          moduleId: order._id
        }
        console.log(`准备调用云函数 'token',传递的数据:`, data)

        try {
          await cloud.callFunction({
            name: 'token',
            data: data
          })
          processedCount++ // 成功处理后计数
          console.log(`订单 ${order._id}: 成功调用云函数 'token'`)
        } catch (error) {
          console.error(`订单 ${order._id}: 调用云函数 'token' 失败`, error)
          failedOrders.push(order._id) // 记录失败的订单ID
        }
      } else {
        console.log(`订单 ${order._id}: tokennumber 小于或等于 0,跳过`)
      }
    }

    // 分页处理
    pageIndex++
  }

  console.log(`已完成的订单处理结束,总共成功处理了 ${processedCount} 条订单`)
  console.log(`调用云函数 'token' 失败的订单有 ${failedOrders.length} 条`)

  return {
    processedCount,
    failedOrders // 返回调用失败的订单ID列表
  }
}
0

【按已完成订单发放jzd隶属于分类:

它起初由本站用户:刘欣Eden于2周前 创建。

该内容的链接是:

目录