2020-06-11 15:06:19 +08:00

383 lines
9.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//拓展Format函数以获取时间
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
//新建商品返回新商品id
var addProduct = async (event) => {
//add成功就返回id 失败就可以catch到
var res = await db.collection("sM_productInfo").add({
data: {
userName: event.userInfos.userName,
userAvatarUrl: event.userInfos.avatarUrl,
userId: event.userInfos._id,
adds: event.adds,
time: (new Date(new Date().getTime() + 1000 * 60 * 60 * 8)).Format("yyyy-MM-dd hh:mm:ss"), //+8时差
sorttime: Date.now() + 60 * 60 * 8, //+8h时差
title: event.title,
details: event.details,
price: event.price,
isfree: event.isfree,
tag: event.tag,
viewNum: 0,
photos: event.photos,
isSall: false,
wantUser: new Array()
}
}).then(res => {
//获取id
return {
errCode: 200,
errMsg: res._id,
};
}).catch(err => {
//报错,然后再处理
return {
errCode: 101,
errMsg: '创建新商品失败。',
err: err,
};
})
return res;
}
//把这个新商品id和名称push到用户信息里
var rewriteUserInfo = async (newId, event) => {
var res = await db.collection('sM_userInfo').doc(event.userInfos._id).update({
data: {
issue: db.command.push({
id: newId,
title: event.title,
details: event.details,
})
}
}).then(res => {
if (res.stats.updated === 0)
return {
errCode: 102,
errMsg: '新商品id注入用户信息里时用户id错误。',
userId: event.userInfos._id,
};
else
return {
errCode: 200,
errMsg: res,
};
}).catch(err => {
//报错
return {
errCode: 103,
errMsg: '新商品id注入到用户信息里失败。',
err: err,
};
})
return res;
}
//删除审核表里边的记录
var deleteOldOne = async (id) => {
var res = await db.collection('sM_examine').doc(id).remove().then(res => {
if (res.stats.removed === 0) return {
errCode: 104,
errMsg: '删除审核表旧记录失败。(旧表id错误)',
id: id
};
else return {
errCode: 200,
errMsg: 'ok',
};
}).catch(err => {
return {
errCode: 105,
errMsg: '删除审核表旧记录失败。',
err: err,
};
});
return res;
}
//用户点击发布,将信息推到审核表
var update = async (event) => {
var res = await db.collection('sM_examine').add({
data: {
userInfo: event.userInfos,
title: event.title,
details: event.details,
adds: event.adds,
tag: event.tag,
price: event.price,
isfree: event.isfree,
photos: event.photos,
time: (new Date(new Date().getTime() + 1000 * 60 * 60 * 8)).Format("yyyy-MM-dd hh:mm:ss"), //+8时差
needSend: event.needSend,
}
}).then(res => {
return {
errCode: 200,
errMsg: res._id,
};
}).catch(err => {
return {
errCode: 106,
errMsg: '上传到审核表失败',
err: err,
}
})
// 直接进行返回,不向用户发送信息
return res
//如果添加失败就直接返回
// if(res.errCode === 106) return res;
//发信息(预留错误码107发送失败)
// var sendRes = await cloud.callFunction({
// name: 'sM_sendMsg',
// data: {
// stats: 1,
// sendId: event.userInfos._openid,
// sendName: event.userInfos.userName,
// title: event.title,
// formId1: event.formId1,
// examineId: res.errMsg,
// }
// }).then(res => {
// return res.result
// }).catch(err => {
// return {
// errCode: 107,
// errMsg: '用户点击发布函数调用错误',
// err: err,
// }
// })
// return sendRes;
}
//审核通过
var pass = async (event) => {
//删除审核表里的旧记录
var delRes = await deleteOldOne(event.oldId);
if (delRes.errCode !== 200) return delRes;
//向商品表里边添加记录
var addRes = await addProduct(event);
if (addRes.errCode === 101) return addRes;
//将这个表添加到用户个人信息里
var reRes = await rewriteUserInfo(addRes.errMsg, event);
if (reRes.errCode !== 200) return reRes;
if (event.needSend) {
//发信息(预留错误码107)
var sendRes = await cloud.callFunction({
name: 'sM_sendMsg',
data: {
stats: 2,
sendId: event.userInfos._openid,
sendName: event.userInfos.userName,
result: "审核通过",
remarks: event.remarks + "\n注点击下方即可进入小程序",
}
}).then(res => {
return res.result;
}).catch(err => {
return {
errCode: 107,
errMsg: '审核通过信息发送函数调用错误',
err: err,
}
})
return sendRes;
}
return reRes
}
//审核失败
var fail = async (event) => {
//删除审核表旧纪录
var delRes = await deleteOldOne(event.oldId);
if (delRes.errCode !== 200) return delRes;
if (event.needSend) {
//发信息(预留错误码107)
var sendRes = await cloud.callFunction({
name: 'sM_sendMsg',
data: {
stats: 2,
sendId: event.userInfos._openid,
sendName: event.userInfos.userName,
result: "审核失败",
remarks: event.remarks + "\n注您的商品信息已被删除请重新发布。",
}
}).then(res => {
return res.result;
}).catch(err => {
return {
errCode: 107,
errMsg: '审核失败信息发送函数调用失败',
err: err
}
})
return sendRes;
}
return delRes
}
// 云函数入口函数
exports.main = async (event, context) => {
//判断状态码
if (event.stats == 1) var res = await update(event);
else if (event.stats == 2) var res = await pass(event);
else if (event.stats == 3) var res = await fail(event);
else return {
errCode: 108,
errMsg: '未提交或非法的stats值。'
};
return res;
}
/*
功能简介:
本页要完成审核和审核完成后的处理
卖家点击发布,信息将由此页进入审核区,
给调用sandMsg给双方同时发消息
管理员审核界面,
点击通过则传进来全部信息调用createproduct,备注写一个默认的,然后发信息
点击失败则传进来审核区的记录id在这里删除然后发信息
*/
/*
api说明
参数stats = 1 用户点击发布时
userInfos :数据库里边的用户完整信息
title商品名
details商品详细信息
adds地址
tag标签
price价格
isfree是否免费
photos照片地址数组
formId1
formId2:
stats = 2 管理员审核通过时
userInfos :同上
adds :同上
title商品名
details商品详细信息
tag标签
price价格
isfree是否免费
photos照片地址数组
oldId审核表里的数据的id要把这个记录删除
remarks: 管理员发的备注信息。(默认在后边加上“注:点击下方即可进入小程序”)
formId:
stats = 3 管理员审核不通过时
userInfos :同上
oldId审核表里的数据的id要把这个记录删除
remarks: 管理员发的备注信息。(默认在后边加上“注:您的商品信息已被删除,请重新发布。”)
formId:
备注stats = 1 的时候务必要给两个formId
关联审核之前之后都要再sendMsg里边发信息
注意需要获取oldId给发消息用不过得等前端写完页面之后。
作者RainSun
时间2019/04/29
更新:
参数:
stats = 1 用户点击发布时
userInfos :数据库里边的用户完整信息
title商品名
details商品详细信息
adds地址
tag标签
price价格
isfree是否免费
photos照片地址数组
needSend: 是否允许发送成功通知
时间2020/06/10
*/
/*
日志:
20190429今天开始补完错误信息的返回。
20190430
今天完成错误信息的返回,详情见下方错误报告。
代码格式整理完成。
20200610
因为小程序比赛回来改代码,因为模板消息改成了订阅消息,
所以取消上传成功的订阅消息,只保留审核完成的订阅消息,
如果用户不同意还可以不发送
*/
/*
错误报告:
err表示catch函数返回的错误msg就是问题描述
正常:
code:200
msg:正常的返回值或者'ok'
创建新商品失败:
code:101
msg:
err:
新商品id注入用户信息里时用户id错误
code:102
msg:
userId:
新商品id注入到用户信息里失败:
code:103
msg:
err:
删除审核表旧记录失败。(旧表id错误):
code:104
msg:
删除审核表旧记录失败:
code:105
msg:
err:
上传到审核表失败:
code:106
msg:
err:
信息发送失败:
code:107
msg:
err:
40037: template_id不正确
41028: form_id不正确或者过期
41029: form_id已被使用
41030: page不正确
45009: 接口调用超过限额目前默认每个帐号日调用限额为100万(PS:好希望我们的小程序能报这个错啊)
未提交或者非法的stats值:
code:108
msg:
*/