总共是12张表,但是sp_category这块没有做,所以暂时用不到,activities对应的是前台部分的那些促销活动,channel对应的是购物首页右侧导航栏中的数据,goods_pic用来存储上传的商品图片的地址
select * from user where (username = ? or phone = ? or email = ? ) and roleId in (4,5)
bcrypt.compareSync(userinfo.password,result[0].password)
const tokenStr = jwt.sign({ username: result[0].nickName,id:result[0].id,avator:result[0].userPic }, config.jwtSecretKey, { expiresIn: '30h' })
exports.login = (req, res) => {
let userinfo = req.body
// 用户名是否存在验证
db.query("select * from user where username =? or phone = ? or email = ? and roleId <> 4 and roleId <> 5 and mg_state = 1",[userinfo.username,userinfo.username,userinfo.username],function(err,result){
if(err){
return res.cc(err)
}
if(result.length != 1) return res.cc('用户名不存在!','-1')
if(!bcrypt.compareSync(userinfo.password,result[0].password)){
return res.cc('密码错误,请重新输入','-1')
}
const tokenStr = jwt.sign({ username: result[0].nickName,id:result[0].id,avator:result[0].userPic }, config.jwtSecretKey, { expiresIn: '300h' })
res.cookie("token",tokenStr).send({
code: 200,
msg: '登录成功!',
// 为了方便客户端使用 Token,在服务器端直接拼接上 Bearer 的前缀
token: 'Bearer ' + tokenStr,
})
})
}
userinfo.password = bcrypt.hashSync(userinfo.password, 10)
exports.register = (req, res) => {
// 接收表单数据
const userinfo = req.body
userinfo['username'] = getRandomString(10);
userinfo['createTime'] = today
userinfo['is_delete'] = 0
userinfo['roleId'] = 4 // 注册用户默认为普通用户
userinfo['userPic']='user.png' // 设置默认头像
db.query('select * from user where username = ?',userinfo.username,function(err,result){
if(err){
return res.cc(err)
}
if(result.length > 0){
return res.cc("用户名已被占用,请更换其他用户名!",-1)
}
})
//对用户密码进行加密
userinfo.password = bcrypt.hashSync(userinfo.password, 10)
// 插入新用户
db.query("insert into user set ?",userinfo,function(err,result){
if(err){
return res.cc(err)
}
if(result.affectedRows != 1){
return res.cc("注册用户失败,请稍后重试!")
}
return res.cc("新增用户成功",200)
})
}
随机生成字符串函数
/**
* 随机生成字符串
* @param len 指定生成字符串长度
*/
function getRandomString(len){
let _charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789',
min = 0,
max = _charStr.length-1,
_str = ''; //定义随机字符串 变量
//判断是否指定长度,否则默认长度为15
len = len || 15;
//循环生成字符串
for(var i = 0, index; i < len; i++){
index = (function(randomIndexFunc, i){
return randomIndexFunc(min, max, i, randomIndexFunc);
})(function(min, max, i, _self){
let indexTemp = Math.floor(Math.random()*(max-min+1)+min),
numStart = _charStr.length - 10;
if(i==0&&indexTemp >=numStart){
indexTemp = _self(min, max, i, _self);
}
return indexTemp ;
}, i);
_str += _charStr[index];
}
return _str;
}
exports.getUserInfo = (req,res)=>{
// console.log(req);
return res.send({
code: 200,
msg: '请求成功!',
data: {
username: req.user.username, //这里的username就来自于jwt字符串的解析,
id:req.user.id,
avator:req.user.avator
}
})
}
getAllChannel:(req,res)=>{
db.query("select channelName,channel_id,channel_pid,channel_level,icon from channel where channel_level = 0;select channelName,channel_id,channel_pid ,channel_level from channel where channel_level != 0",function(err,result){
if(err) return res.cc(err)
// let data = lodash.keyBy(result, 'channel_pid')
// console.log(result);
let data = {}
for(let i = 0 ;i < result[0].length;i++){
if(result[0][i].channel_pid == 0){
data[result[0][i].channel_id]= {
category:result[0][i].channelName,
icon:result[0][i].icon,
channel_simple:[],
channem_detail:[]
}
}
else if(data.hasOwnProperty(result[0][i].channel_pid)){
data[result[0][i].channel_pid].channel_simple.push(result[0][i].channelName)
// temp[result[i].channel_pid].channel_simple = lodash.values(lodash.keyBy(result[i],'channelName'))
}
}
let temp = {}
for(let j = 0; j < result[1].length;j++){
if(result[1][j].channel_level == 1 && !temp.hasOwnProperty(result[1][j].channel_pid)){
temp[result[1][j].channel_id] = {
main:result[1][j].channelName,
pid:result[1][j].channel_pid,
goods:[]
}
}else if(temp.hasOwnProperty(result[1][j].channel_pid)){
temp[result[1][j].channel_pid].goods.push(result[1][j].channelName)
}
}
temp = lodash.values(temp)
temp.forEach(item => {
data[item.pid].channem_detail.push(item)
});
res.send({
code:200,
msg:"获取列表数据成功!",
data:lodash.values(data)
})
})
},
getGoodsList:(req,res)=>{
let page = req.body.page
let limit = req.body.limit
let start = parseInt((page - 1 )*limit)
let end = page*limit
db.query('select goods.id as goodId,goods.shopId, goods.goodName ,goods.keyWord,goods.price as priceNow,goods.priceAgo ,goods.saleCount,goods_pic.picName,shopId,shop.shopName from goods,goods_pic,shop where goods.shopId = shop.Id and goods_pic.id in( goods.fileId) limit ? ,? ',[start,end],function(err,result){
if(err) return res.cc(err)
res.send({
code:200,
msg:"获取商品列表成功!",
data:[...result]
})
})
},
getActivity:(req,res)=>{
db.query("select activityName as tagContent, activitySource as tagName , activityType as tagType from activities where startTime<= ? and endTime >= ?",[today,today],function(err,result){
if(err) return res.cc(err)
return res.send({
code:200,
msg:"获取活动列表成功",
data:[...result]
})
})
},
getUserCart:(req,res)=>{
let userId = req.body.id
db.query("select user_cart.shopId ,goods.id as id,(user_cart.count * goods.price) as sum,goods_pic.picName as imgSrc,user_cart.count as number ,shop.shopName,goods.goodName as title,goods.keyWord as type,goods.model,goods.price as nowPrice,goods.priceAgo as originalPrice from user_cart,shop,goods,goods_pic where userId = ? and shop.id = user_cart.shopId and goods.id in (user_cart.goodsId) and goods.fileId = goods_pic.id and user_cart.is_delete = 0 ",userId,function(err,result){
if(err) return res.cc(err)
let dataList = _.groupBy(result,'shopName')
let resultList=[]
for(item in dataList){
dataList[item].isChecked = false
let temp = {
'shopName':item,
'isChecked':false,
'id':dataList[item][0].shopId,
items:dataList[item]
}
resultList.push(temp)
}
res.send({
code:200,
msg:"获取购物车列表成功!",
data:resultList
})
})
},
addCartItem:(req,res)=>{
let goodId = req.body.goodId
let shopId = req.body.shopId
let userId = req.body.userId
db.query("select count from user_cart where userId =? and goodsId = ? and shopId =?",[userId,goodId,shopId],function(err,result){
if(err) return res.cc(err)
if(result.length == 0){
db.query("insert into user_cart(userId,goodsId,shopId,count) values (?,?,?,1)",[userId,goodId,shopId],function(err,result){
if(err) return res.cc(err)
return res.cc("添加购物车成功!",200)
})
}else{
let count = result[0].count
count+=1
db.query("update user_cart set count = ? where userId =? and goodsId = ? and shopId =?",[count,userId,goodId,shopId],function(err,result){
if(err) return res.cc(err)
return res.cc("添加购物车成功!",200)
})
}
})
}
// 创建订单
createOrder: (req, res) => {
let tableData = req.body.info
let userId = req.body.userId
let str = []
let updateStr = []
let orderNum = orderCode()
tableData.forEach(e => {
str.push(`('${orderNum}',${e.id},${userId},${e.shopId},${e.number},${e.sum},'${now}',${e.order_sumup})`)
updateStr.push(`(${userId},${e.shopId},${e.id})`)
});
str = str.join(",")
updateStr.join(',')
db.query(`insert into user_order(orderNum,goodId,userId,shopId,number,sum,createTime,order_sumup) values ${str}`, function (err, result) {
if (err) return res.cc(err)
db.query(`update user_cart set is_delete = 1 where (userId,shopId,goodsId) in (${updateStr}) `, function (err, result) {
if (err) res.cc(err)
updateGoodsSale()
return res.cc("创建订单成功!", 200)
})
})
},
随机生成订单单号函数
// 随机生成订单号:时间戳+6位随机数
function orderCode() {
var orderCode = '';
for (var i = 0; i < 6; i++) //6位随机数,用以加在时间戳后面。
{
orderCode += Math.floor(Math.random() * 10);
}
orderCode = new Date().getTime() + orderCode; //时间戳,用来生成订单号。
return orderCode;
}
更新商品销量的函数
// 更新商品总销量
function updateGoodsSale() {
db.query("select sum(number) as saleCount ,shopId,goodId from user_order group by goodId,shopId;", function (err, result) {
if (err) return res.cc(err)
let data = _.groupBy(result, function (n) {
return n.shopId + "," + n.goodId;
})
let str = `update goods set saleCount = case `
let obj = []
for (item in data) {
let temp = item.split(',')
str += `when shopId = ${temp[0]} and id = ${temp[1]} then ${data[item][0].saleCount} `
obj.push(`(${item})`)
}
str += `end where (shopId,id) in (${obj.join(",")})`
})
}
getUserOrderList: (req, res) => {
let userId = req.body.id
db.query("select a.id,a.shopId,a.orderNum,a.number,a.createTime,a.order_status,a.is_pay,a.is_deliver,a.order_sumup,b.goodName,b.priceAgo,b.model,b.price,c.shopName,d.picName from user_order a,goods b,shop c,goods_pic d where userId = ? and a.goodId = b.id and a.shopId = c.id and b.fileId = d.id and a.is_delete = 0 order by a.order_status,a.createTime desc", userId, function (err, result) {
if (err) return res.cc(err)
let data = []
let resByOrderNum = _.groupBy(result, 'orderNum')
for (item in resByOrderNum) {
let orderByShop = _.groupBy(resByOrderNum[item], 'shopName')
for (i2 in orderByShop) {
let temp = {
'id': resByOrderNum[item][0].id,
'orderNum': item,
'shopId': orderByShop[i2][0].shopId,
'is_pay': orderByShop[i2][0].is_pay,
'is_deliver': orderByShop[i2][0].is_deliver,
'createTime': resByOrderNum[item][0].createTime.split(" ")[0],
'shopName': i2,
'order_status': resByOrderNum[item][0].order_status,
'list': orderByShop[i2]
}
data.push(temp)
}
}
return res.send({
code: 200,
msg: '获取用户订单成功',
data: data
})
})
},
// 延长收货时间
delayTime: (req, res) => {
let id = req.body.id
db.query('select finishTime from user_order where id = ?', id, function (err, result) {
if (err) return res.cc(err)
let finishTime = delayTimes(result[0].finishTime, 15)
db.query('update user_order set finishTime = ? where id = ?', [finishTime, id], function (err, result) {
if (err) return res.cc(err.msg)
if (result.affectedRows !== 1) return res.cc("延长收货时间失败!")
return res.cc("延长收货时间成功!", 200)
})
})
},
计算延长时间函数
function delayTimes(data, delay) {
console.log(data);
data = new Date(data)
let year = data.getFullYear()
let month = data.getMonth() + 1
let day = data.getDate() + delay
//小月
if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
day -= 30
month += 1
}
}
//2月
else if (month == 2) {
if (isLeapYear(date.getFullYear())) {
if (day > 29) {
day -= 29
month + 1
} else {
day -= 28
month += 1
}
}
if (day > 28) {
day -= 28
month += 1
}
}
//大月
else {
if (day > 31) {
day -= 31
month += 1
}
}
return year + '-' + month + '-' + day
}
//JS判断闰年代码
function isLeapYear(Year) {
if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {
return (true);
} else {
return (false);
}
}
getUserLine: (req, res) => {
let str1 = `SELECT
IFNULL(SUM(CASE HOUR(createTime) WHEN 0 THEN 1 ELSE 0 END),0)as '0',
IFNULL(SUM(CASE HOUR(createTime) WHEN 1 THEN 1 ELSE 0 END),0)as '1',
IFNULL(SUM(CASE HOUR(createTime) WHEN 2 THEN 1 ELSE 0 END),0) AS '2',
IFNULL(SUM(CASE HOUR(createTime) WHEN 3 THEN 1 ELSE 0 END),0) AS '3',
IFNULL(SUM(CASE HOUR(createTime) WHEN 4 THEN 1 ELSE 0 END),0) AS '4',
IFNULL(SUM(CASE HOUR(createTime) WHEN 5 THEN 1 ELSE 0 END),0) AS '5',
IFNULL(SUM(CASE HOUR(createTime) WHEN 6 THEN 1 ELSE 0 END),0) AS '6',
IFNULL(SUM(CASE HOUR(createTime) WHEN 7 THEN 1 ELSE 0 END),0) AS '7',
IFNULL(SUM(CASE HOUR(createTime) WHEN 8 THEN 1 ELSE 0 END),0) AS '8',
IFNULL(SUM(CASE HOUR(createTime) WHEN 9 THEN 1 ELSE 0 END),0) AS '9',
IFNULL(SUM(CASE HOUR(createTime) WHEN 10 THEN 1 ELSE 0 END),0) AS '10',
IFNULL(SUM(CASE HOUR(createTime) WHEN 11 THEN 1 ELSE 0 END),0) AS '11',
IFNULL(SUM(CASE HOUR(createTime) WHEN 12 THEN 1 ELSE 0 END),0) AS '12',
IFNULL(SUM(CASE HOUR(createTime) WHEN 13 THEN 1 ELSE 0 END),0) AS '13',
IFNULL(SUM(CASE HOUR(createTime) WHEN 14 THEN 1 ELSE 0 END),0) AS '14',
IFNULL(SUM(CASE HOUR(createTime) WHEN 15 THEN 1 ELSE 0 END),0) AS '15',
IFNULL(SUM(CASE HOUR(createTime) WHEN 16 THEN 1 ELSE 0 END),0) AS '16',
IFNULL(SUM(CASE HOUR(createTime) WHEN 17 THEN 1 ELSE 0 END),0) AS '17',
IFNULL(SUM(CASE HOUR(createTime) WHEN 18 THEN 1 ELSE 0 END),0) AS '18',
IFNULL(SUM(CASE HOUR(createTime) WHEN 19 THEN 1 ELSE 0 END),0) AS '19',
IFNULL(SUM(CASE HOUR(createTime) WHEN 20 THEN 1 ELSE 0 END),0) AS '20',
IFNULL(SUM(CASE HOUR(createTime) WHEN 21 THEN 1 ELSE 0 END),0) AS '21',
IFNULL(SUM(CASE HOUR(createTime) WHEN 22 THEN 1 ELSE 0 END),0) AS '22',
IFNULL(SUM(CASE HOUR(createTime) WHEN 23 THEN 1 ELSE 0 END),0) AS '23'
FROM user
WHERE date(createTime) >= CURDATE() and date(createTime) <= CURDATE();
`
let str2 = `SELECT
IFNULL(SUM(CASE HOUR(createTime) WHEN 0 THEN 1 ELSE 0 END),0)as '0',
IFNULL(SUM(CASE HOUR(createTime) WHEN 1 THEN 1 ELSE 0 END),0)as '1',
IFNULL(SUM(CASE HOUR(createTime) WHEN 2 THEN 1 ELSE 0 END),0) AS '2',
IFNULL(SUM(CASE HOUR(createTime) WHEN 3 THEN 1 ELSE 0 END),0) AS '3',
IFNULL(SUM(CASE HOUR(createTime) WHEN 4 THEN 1 ELSE 0 END),0) AS '4',
IFNULL(SUM(CASE HOUR(createTime) WHEN 5 THEN 1 ELSE 0 END),0) AS '5',
IFNULL(SUM(CASE HOUR(createTime) WHEN 6 THEN 1 ELSE 0 END),0) AS '6',
IFNULL(SUM(CASE HOUR(createTime) WHEN 7 THEN 1 ELSE 0 END),0) AS '7',
IFNULL(SUM(CASE HOUR(createTime) WHEN 8 THEN 1 ELSE 0 END),0) AS '8',
IFNULL(SUM(CASE HOUR(createTime) WHEN 9 THEN 1 ELSE 0 END),0) AS '9',
IFNULL(SUM(CASE HOUR(createTime) WHEN 10 THEN 1 ELSE 0 END),0) AS '10',
IFNULL(SUM(CASE HOUR(createTime) WHEN 11 THEN 1 ELSE 0 END),0) AS '11',
IFNULL(SUM(CASE HOUR(createTime) WHEN 12 THEN 1 ELSE 0 END),0) AS '12',
IFNULL(SUM(CASE HOUR(createTime) WHEN 13 THEN 1 ELSE 0 END),0) AS '13',
IFNULL(SUM(CASE HOUR(createTime) WHEN 14 THEN 1 ELSE 0 END),0) AS '14',
IFNULL(SUM(CASE HOUR(createTime) WHEN 15 THEN 1 ELSE 0 END),0) AS '15',
IFNULL(SUM(CASE HOUR(createTime) WHEN 16 THEN 1 ELSE 0 END),0) AS '16',
IFNULL(SUM(CASE HOUR(createTime) WHEN 17 THEN 1 ELSE 0 END),0) AS '17',
IFNULL(SUM(CASE HOUR(createTime) WHEN 18 THEN 1 ELSE 0 END),0) AS '18',
IFNULL(SUM(CASE HOUR(createTime) WHEN 19 THEN 1 ELSE 0 END),0) AS '19',
IFNULL(SUM(CASE HOUR(createTime) WHEN 20 THEN 1 ELSE 0 END),0) AS '20',
IFNULL(SUM(CASE HOUR(createTime) WHEN 21 THEN 1 ELSE 0 END),0) AS '21',
IFNULL(SUM(CASE HOUR(createTime) WHEN 22 THEN 1 ELSE 0 END),0) AS '22',
IFNULL(SUM(CASE HOUR(createTime) WHEN 23 THEN 1 ELSE 0 END),0) AS '23'
FROM user
WHERE date(createTime) >= date_sub(CURDATE() , INTERVAL 1 DAY) AND date(createTime) < CURDATE()
`
db.query(str1, function (err, result) {
if (err) return res.cc(err)
let data = {
today: _.values(result[0]),
category: _.keys(result[0])
}
db.query(str2, function (err, result2) {
if (err) return res.cc(err)
data['yesterday'] = _.values(result2[0])
// conn.sendText(JSON.stringify({
// code: 200,
// msg: "获取数据成功!",
// data: data
// }))
return res.send({
code:200,
msg:"获取数据成功!",
data:data
})
})
})
}
// 获取商品列表
getGoods: (req, res) => {
const param = req.body
let end = param.limit
let start = (param.page - 1) * end
let sql = 'select goods.*,brand.brandName as brand,shop.shopName from goods,brand,shop where 1 =1 and goods.brand = brand.id and goods.shopId = shop.id'
let arr = []
if (param.goodName != "" && param.goodName != undefined) {
let goodName = '%' + param.goodName + '%';
sql += ' and goodName like ?'
arr.push(goodName)
}
if (param.brand != null && param.brand != "") {
sql += ' and brand = ?'
arr.push(param.brand)
}
sql += ' and is_delete = 0 order by createTime desc limit ?,? ;select count(*) as total from goods'
arr.push(start, parseInt(end))
db.query(sql, arr, function (err, result) {
if (err) return res.cc(err)
return res.send({
code: 200,
msg: '获取商品列表成功!',
count: result[1][0].total,
data: [...result[0]]
})
})
},
// 上传图片
uploadImg: (req, res) => {
var filePath = './' + req.files[0].path;
// 文件类型
var temp = req.files[0].originalname.split('.');
var fileType = temp[temp.length - 1];
var lastName = '.' + fileType;
// 构建图片名
var fileName = Date.now() + lastName;
// 图片重命名
fs.rename(filePath, './images/' + fileName, async (err) => {
if (err) {
return ''
} else {
var localFile = './images/' + fileName;
var key = fileName
let param = {
'pic_url': localFile,
'picName': key
}
let str = `insert into goods_pic set ?`
let str2 = `select id,picName from goods_pic order by id desc limit 1`
db.query(str, param, function (err, result) {
if (err) return res.cc(err)
if (result.affectedRows !== 1) return res.cc("上传图片失败")
db.query(str2, function (err, result) {
if (err) return res.cc(err)
return res.send({
code: 200,
msg: "上传图片成功",
data: {
id: result[0].id,
url: result[0].picName
}
})
})
})
}
});
}
getRoleByPage: (req, res) => {
let queryInfo = req.body
let sql = `select id,roleName,createTime,role_right, comment from role where is_delete = 0 `
let start = parseInt(queryInfo.num * (queryInfo.page - 1))
let end = queryInfo.page * queryInfo.num
if (queryInfo.query != '') {
sql += ` and roleName like '${queryInfo.query}'`
}
sql += ` limit ${start},${end} ; select count(*) as total from role;`
db.query(sql, function (err, roles) {
if (err) return res.cc(err)
db.query("select * from userright", function (err, rights) {
if (err) return res.cc(err)
for (idx in roles[0]) {
if(roles[0][idx].role_right!= null){
let role_rights = roles[0][idx].role_right.split(',')
roles[0][idx]['children'] =lodash.values(filterData(role_rights, lodash.keyBy(rights, 'id')))
}
}
return res.send({
code: 200,
msg: "获取角色列表成功!",
count: roles[1][0].total,
data: [...roles[0]]
})
})
})
},
数据处理函数
function filterData(role_rights, rights) {
var permissionsResult = {};
for (let i = 0; i < role_rights.length; i++) {
let rightId = role_rights[i]
if (rights[rightId].level == 1) {
let temp = {
'id': rights[rightId].id,
'rightName': rights[rightId].rightName,
'children': []
}
permissionsResult[rightId] = temp
}
else if(permissionsResult.hasOwnProperty(rights[rightId].pid)){
permissionsResult[rights[rightId].pid].children.push(rights[rightId])
}else{
let temp = {
'id': rights[rightId].pid,
'rightName': rights[ rights[rightId].pid].rightName,
'children': [{
'id': rights[rightId].id,
'rightName': rights[ rightId].rightName,
}]
}
permissionsResult[rightId] = temp
}
}
return permissionsResult
}