实战篇笔记 扫码点餐小程序云开发小程序端(八)


生成订单编号

实现思路:当前时间戳 + 10位整数随机数

// config\order.js
let Code = function () {
	var orderCode = 0
	for (var i = 0; i< 6; i++) {
		orderCode += Math.floor(Math.random() * 10)
	}
	orderCode = new Date().getTime() + orderCode
	return orderCode
}
export {Code}

调用订阅消息接口

以下使用说明摘自文档

步骤一:获取模板 ID

登录小程序 -> 功能 -> 订阅消息 -> 公共模板库 -> 搜索’商家确认订单通知’并选用 -> 复制模板ID

步骤二:获取下发权限

wx.requestSubscribeMessage({
  tmplIds: ['模板ID'],
  success (res) { }
})

步骤三:调用接口下发订阅消息

服务端调用,见 微信订阅消息

提交订单

订单数据库设计

[
	{
		table_number:桌号
		number_of_diners:用餐人数
		order_time:下单时间
		sett_amount:交易金额
		order_no:订单编号
		transac_status:结账状态=>未结账:'unsettled'|已结账:'success'
		order_receiving:接单状态=>未接单:'mis_orders'|已接单:'rec_order'
		menu:[
			{
				goods_list:[购物车里的菜单]
			}//第一次下单
			{
				goods_list:[购物车里的菜单]
			}//第二次下单
			{}n次
		]下单的菜品:第一次下单;{二次,三次,n次}=>加菜
	}
]

考虑需求

  1. 客户初次提交订单
  2. 客户加单

依据 transac_status 结账状态和 table_number 当前桌号判断。

向数据查询当前桌号并且未结账记录

  • 无记录则表示之前的订单已结,此单为初次点单,向数据库创建新纪录
  • 有记录则表示该桌号此单为加单,向数据库修改记录

代码实现

async sub_database () {
    let res = this.shopping_card.filter(item => item.total_price !== 0)
    let sett_amount = 0
    res.forEach(item => {sett_amount += item.total_price})
    let order = {
        table_number: '004',
        number_of_diners: 5,
        order_time: this.$Time().utcOffset(8).format('YYYY-MM-DD HH:mm:ss'),
        sett_amount,
        order_no: Code(),
        transac_status: 'unsettled',
        order_receiving: 'mis_orders',
        menu: [{backup_data: '备用字段', goods_list: res}]
    }
    let add_goods = {backup_data: '备用字段', goods_list: res}
    try {
        let query = await good_collect.where({table_number: '004', transac_status: 'unsettled'}).field({id: true, sett_amount: true}).get()
        if (query.data.length === 0) {
            await good_collect.add({data: order})
        } else {
            let total_amount = Number(query.data[0].sett_amount) + sett_amount
            await good_collect.doc(query.data[0]._id).update({
                data: {
                    sett_amount: total_amount,
                    order_receiving: 'mis_orders',
                    menu: _.unshift(add_goods)
                },
            })
        }
        res.forEach(async item => {
            await dishes_data.doc(item._id).update({data: {
                monthlysale: _.inc(item.quantity)
            }})
        })
        const time_data = this.$Time().utcOffset(8).format('YYYY-MM-DD HH:mm:ss')
        await new analysis().sameday(time_data, sett_amount)
    } catch (e) {
        console.log(e)
    }
}

文章作者: April-cl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 April-cl !
  目录