生成订单编号
实现思路:当前时间戳 + 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次}=>加菜
}
]
考虑需求
- 客户初次提交订单
- 客户加单
依据 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)
}
}