写在前面
本篇文章是微信小程序开发入门的第二十九篇,定时生成库存警报记录
我们在上篇文章已经创建了“qua-alarm”库存警报集合,创建了“qua-alarm”云函数,并且给这个云函数配置了定时触发器,本篇文章我们开始编写生成库存警报的代码
生成库存警报记录
我们在cloudfunctions\qua-alarm\index.js文件中编写生成库存警报记录的代码,代码如下:
云函数被调用时,使用Promise.all同时执行两个promise(第一个promise是获取开启库存警报的水果的记录,第二个promise是获取所有已有的库存警报记录),执行成功后,循环水果列表,每个水果记录的字段中只要 quantity - saleNum - rotNum < quaAlarmNum,就说明库存不够了,quantity表示原有库存,saleNum表示被购买的数量,rotNum表示被处理掉的数量,quantity - saleNum - rotNum就表示现有库存,quaAlarmNum是库存下限
对于会触发警报的水果,我们再跟已有的库存警报记录做一个匹配,如果已有的库存警报记录中已经有这个水果的库存警报,就对这条已有的库存警报记录进行编辑,如果没有,则新增这个水果的库存警报记录
对于不会触发警报的水果,我们也要跟已有的库存警报记录做一个匹配,如果存在,则要把这条库存警报记录的isClose修改为true,表示这条警报已经关闭,同时记录警报关闭时间:closeTime
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境
const db = cloud.database();
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
Promise.all([
db.collection('fruit').where({
isQuaAlarm: 1
}).get(),
db.collection('qua-alarm').get()
]).then(([res1, res2]) => {
let addDatas = []
for (let i = 0, len = res1.data.length; i < len; i++) {
let item = res1.data[i]
const {
quaAlarmNum,
quantity,
saleNum,
rotNum
} = item
let rest = quantity - saleNum - rotNum
let find = res2.data.find(el => el.fruit._id === item._id)
if (rest < quaAlarmNum) {
if (find) {
db.collection('qua-alarm').where({
_id: find._id
})
.update({
data: {
fruit: item,
alarmQua: rest,
quaAlarmNum: item.quaAlarmNum,
alarmDay: _.inc(1),
},
});
} else {
addDatas.push({
fruit: item, // 水果信息
alarmQua: rest, // 警报数值
createTime: db.serverDate(), // 警报触发时间
quaAlarmNum: item.quaAlarmNum, // 库存下限
alarmDay: 1, // 警报持续天数
isClose: false
})
}
} else {
if (find) {
db.collection('qua-alarm').where({
_id: find._id
})
.update({
data: {
isClose: true,
closeTime: db.serverDate()
},
});
}
}
}
if (addDatas.length > 0) {
db.collection('qua-alarm').add({
// data 字段表示需新增的 JSON 数据
data: addDatas
}).then(res => {
return {
success: true,
msg: '生成成功!'
};
}).catch(err => {
return {
success: false,
msg: '生成失败!'
};
});
}
}).catch(err => {
return {
success: false,
msg: '生成失败!'
};
})
}
写在最后
以上就是定时生成库存警报记录的全部代码