第三篇:订单流转与管理——新增订单

目录

  • 1. 实现订单创建流程
    • 1.1 需求分析
    • 1.2 数据模型:订单模型 (`jz_orders`)
    • 1.3 后端逻辑:创建订单云函数 API
    • 1.4 前端实现:搭建订单创建页面
    • 1.5 测试与调试
  • 总结

在用户找到并选定了需要的服务后,接下来的关键步骤就是创建订单。订单是用户需求的服务在平台中的具体体现,贯穿了服务从预订到完成的整个生命周期。本篇我们将详细讲解订单相关的核心功能实现。

1. 实现订单创建流程

用户在浏览服务详情后,如果决定预订,就需要填写相关的订单信息,比如服务时间、地点、详细需求等,然后提交订单。这个过程涉及到前端表单的填写、数据的收集,以及后端 API 的处理和订单记录的创建。

1.1 需求分析

根据需求,订单创建流程应包含以下步骤和要素:

  • 用户从服务详情页发起预订。
  • 用户需要选择服务的具体时间。
  • 用户需要指定服务地点(从已有的地址中选择,或新增地址)。
  • 用户可以添加订单备注和上传相关的图片/视频(如故障照片)。
  • 系统需要根据选择的服务计算或展示预估价格。
  • 用户确认所有信息后,提交订单。
  • 系统在后端创建订单记录,并设置初始状态。

1.2 数据模型:订单模型 (jz_orders)

订单是平台的核心数据之一。我们需要一个独立的数据模型来存储订单的所有相关信息。

订单模型 (jz_orders):

  • userId (关联关系类型):关联到 jz_users 模型 (多对一关系),谁创建的订单。
  • serviceId (关联关系类型):关联到 jz_services 模型 (多对一关系),预订的是哪个服务。
  • addressId (关联关系类型):关联到 jz_addresses 模型 (多对一关系),服务地点是哪个地址。
  • status (枚举类型):订单当前状态(如“待付款”、“待接单”、“已接单”、“服务中”、“待评价”、“已完成”、“已取消”、“已退款”等)。
  • serviceDateTime (日期时间类型):用户期望的服务时间。
  • description (字符串/文本类型):用户的详细需求或备注。
  • images (文件类型/数组):用户上传的图片或视频文件 ID/URL 列表。
  • contactName (字符串类型):服务联系人姓名(可从地址带入)。
  • contactPhone (电话类型 或 字符串类型):服务联系人手机号(可从地址带入)。
  • totalAmount (数字类型):订单总金额(预估或最终金额)。
  • paymentStatus (枚举类型):支付状态(如“待支付”、“已支付”、“退款中”、“已退款”)。
  • assignedProviderId (关联关系类型):关联到 jz_users 模型 (多对一关系),指派给哪个服务商(初始为空)。
  • adminNotes (文本类型):管理员备注。
  • _createTime (日期时间类型):订单创建时间(平台自动添加)。
  • _updateTime (日期时间类型):订单最后更新时间(平台自动添加)。
  • … (其他可能需要的字段,如取消原因、完成时间、评价 ID 等)

在这里插入图片描述

权限设置:jz_orders 模型设置权限。用户可以读写属于自己的订单;管理员可以读写所有订单;服务商可以读取指派给自己的订单并更新其状态(细化的权限控制将在后续章节实现)。

在这里插入图片描述

1.3 后端逻辑:创建订单云函数 API

我们需要一个云函数 API 来接收前端提交的订单数据,进行必要的处理,并在数据库中创建新的订单记录。

步骤 1:创建 API
在云函数管理模块,新建一个“订单管理”分组,并在该分组下添加一个新的 API 方法,命名为 createOrder

在这里插入图片描述

步骤 2:添加入参
createOrder API 的入参将包含前端订单表单收集的所有数据。这会是一个参数对象,包含 serviceId, serviceDateTime, addressId, description, images (文件 URL 数组), contactName, contactPhone 等字段。

在这里插入图片描述

步骤 3:编写自定义代码
编写云函数代码,实现订单数据的接收、验证和创建。

const ErrorCode = {
    SUCCESS: 0,
    PARAM_ERROR: 1001,
    NOT_FOUND: 1002, // 服务或地址未找到
    SYSTEM_ERROR: 1003,
    // ... 其他错误码
};

// 创建订单
module.exports = async function (params, context) {
    const { serviceId, userId,serviceDateTime, addressId, description, images, contactName, contactPhone, totalAmount} = params;
    

    // 1. 参数验证 (简化示例,实际需要更严格)
    if (!userId || !serviceId || !serviceDateTime || !addressId || !contactName || !contactPhone) {
        return { code: ErrorCode.PARAM_ERROR, message: '必填参数缺失' };
    }
    

    try {
        // 3. 创建订单记录
        const result = await context.callModel({
            name: "jz_orders", // 操作订单模型
            methodName: "wedaCreateV2", // 使用创建方法
            params: {
                data: {
                    userId: { _id: userId }, // 关联用户
                    serviceId: { _id: serviceId }, // 关联服务
                    addressId: { _id: addressId }, // 关联地址
                    serviceDateTime: serviceDateTime, // 存储为日期时间类型
                    description: description || '', // 如果没有描述则存空字符串
                    images: images || [], // 如果没有图片则存空数组
                    contactName: contactName,
                    contactPhone: contactPhone,
                    totalAmount: totalAmount, // 初始金额
                    status: '1', // 初始状态:待付款 (假设1代表待付款)
                    paymentStatus: '1', // 初始支付状态:待支付 (假设1代表待支付)
                    // assignedProviderId 初始为空
                }
            }
        });

        const orderId = result.id; // 获取新创建订单的 ID

        // 4. 返回创建成功的订单信息
        return {
            code: ErrorCode.SUCCESS,
            data: {
                orderId: orderId,
                totalAmount: totalAmount,
                status: '1' // 返回当前状态
            }
        };

    } catch (error) {
        console.error("createOrder error:", error);
        return {
            code: ErrorCode.SYSTEM_ERROR,
            message: `系统错误: ${error.message}`
        };
    }
};

(代码说明:)

  • 云函数接收订单相关的参数。
  • context.trigger.user 中获取当前用户 ID,确保订单是为当前用户创建的。
  • 进行了基础的参数验证。
  • 重要: 在创建订单时,将用户 ID, 服务 ID, 地址 ID 作为关联关系字段存储。
  • 设置订单的初始 statuspaymentStatus。这里假设 ‘1’ 代表“待付款”和“待支付”,您需要根据您的枚举值定义进行调整。
  • 将服务时间 serviceDateTime 转换为日期时间对象存储。
  • images 字段存储用户上传的图片文件 ID 或 URL 数组。
  • 返回新创建的订单 ID 和一些初始信息。

步骤 4:运行测试与配置出参
在平台提供的 API 测试界面,输入测试参数(模拟从前端获取的数据),运行测试,检查返回结果和数据库中是否新增了订单记录。然后配置出参自动映射。
在这里插入图片描述
在这里插入图片描述

1.4 前端实现:搭建订单创建页面

点击创建页面的图标,创建新增预约页面
在这里插入图片描述
添加表单容器,选择订单表
在这里插入图片描述
选择页面组件,创建URL参数,添加serviceId、userId、totalAmount
在这里插入图片描述
选中用户标识,设置选中值,选择URL参数中的userId
在这里插入图片描述
选择服务项目标识,设置选中值,选择URL参数中的serviceId
在这里插入图片描述
选中订单总金额,设置输入值,选择URL参数中的totalAmount
在这里插入图片描述
选中表单容器,配置事件,修改默认的表单调用数据源方法,改为我们的自定义代码中的创建订单方法
在这里插入图片描述
然后回到我们的服务详情页,给立即预约的按钮添加页面跳转,跳转到我们的新增预约页面,并且传入对应的参数
在这里插入图片描述

1.5 测试与调试

  • 在小程序预览中,从服务详情页点击预订,检查是否正确跳转到订单创建页并带上服务信息。
  • 测试填写订单信息,包括选择时间、选择/修改地址、填写备注、上传图片。
  • 检查预估价格是否正确显示(如果前端有这部分逻辑)。
  • 点击“提交订单”,观察是否成功调用后端 API。
  • 检查平台数据库中是否新增了订单记录,订单字段是否正确,特别是用户、服务、地址的关联是否正确,初始状态和金额是否符合预期。
  • 测试必填项为空时的前端/后端校验。
  • 使用平台调试工具,查看 API 调用日志、云函数日志,排查问题。

总结

本章我们实现了平台最核心的功能之一:订单创建。我们设计了存储订单关键信息的 jz_orders 数据模型,开发了处理订单创建逻辑的 createOrder 云函数 API,并在用户小程序端搭建了订单信息填写页面,通过数据绑定和事件调用将前端用户操作与后端服务连接起来。用户现在可以将他们的服务需求转化为平台中的订单记录了。

成功创建订单后,用户最关心的就是订单的状态和后续进展。下一章,我们将实现订单列表与详情的展示功能,让用户、服务商和管理员都能查看订单信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低代码布道师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值