重user表tottalt


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

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

// 批量查询goods表中的记录
async function queryGoodsByIds(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 以便快速查找 goods 数据
  const goodsMap = {}
  result.data.forEach(item => {
    goodsMap[item._id] = item
  })
  return goodsMap
}

// 云函数入口函数
exports.main = async (event, context) => {
  const pageSize = 100 // 每次查询的条数
  let pageIndex = 0
  let processedCount = 0 // 累加处理的订单数
  let failedOrders = [] // 保存更新失败的订单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 表中的记录
    const goodsMap = await queryGoodsByIds(goodsIds)

    // 4. 遍历每条订单数据并处理
    for (let order of orders) {
      const snapshotId = order.snapshot._id
      const goodsItem = goodsMap[snapshotId]

      if (goodsItem) {
        const tokennumber = goodsItem.tokennumber || 0
        const totalToken = tokennumber * order.quantity // 计算 totalToken

        console.log(`订单 ${order._id}: 查到的 tokennumber = ${tokennumber},quantity = ${order.quantity},totalToken = ${totalToken}`)

        // 5. 更新当前订单的 totalToken 字段和 snapshot 字段
        try {
          await db.collection('goodorders').doc(order._id).update({
            data: {
              totalToken: totalToken, // 更新 totalToken 为 tokennumber * quantity
              snapshot: goodsItem // 更新 snapshot 字段为最新的 goods 数据
            }
          })
          processedCount++ // 成功处理后计数
          console.log(`订单 ${order._id}: 成功更新 totalToken 和 snapshot 字段`)
        } catch (error) {
          console.error(`订单 ${order._id}: 更新 totalToken 和 snapshot 字段失败`, error)
          failedOrders.push(order._id) // 记录失败的订单ID
        }
      } else {
        console.warn(`订单 ${order._id}: 未找到对应的 goods 记录,跳过`)
      }
    }

    // 分页处理
    pageIndex++
  }

  console.log(`已完成的订单处理结束,总共成功处理了 ${processedCount} 条订单`)
  console.log(`更新 totalToken 和 snapshot 字段失败的订单有 ${failedOrders.length} 条`)

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

【重user表tottalt隶属于分类: 大猫概念 JavaScript

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

该内容的链接是:

目录