智慧社區(qū)電商后臺管理系統(tǒng)
作者主頁:
作者簡介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、掘金特邀作者、多年架構(gòu)師設(shè)計經(jīng)驗、騰訊課堂常駐講師
主要內(nèi)容:Java項目、畢業(yè)設(shè)計、簡歷模板、學(xué)習(xí)資料、面試題庫、技術(shù)互助
文末獲取源碼?
一,項目簡介
????? 在當(dāng)前社會上,許多的各種類型的電子商務(wù)類網(wǎng)站紛紛建立,可以很大程度上的解決人們信息資源的閉塞以及地域上的限制[1]。隨著時間的推移并伴隨著用戶的購買能力的提高和新型互聯(lián)網(wǎng)技術(shù)的應(yīng)用,網(wǎng)絡(luò)購物己經(jīng)十分普及,上至八十歲老人,下至五六歲小朋友,大都已經(jīng)學(xué)會了如何利用網(wǎng)絡(luò)購物,使用電子交易的機(jī)制。
????? 目前網(wǎng)絡(luò)購物的方式主要有兩種,一種是通過PC端的網(wǎng)站,如淘寶、京東的網(wǎng)頁版購物平臺;另一種是通過像手機(jī)APP和微信小程序商城等手機(jī)端平臺來進(jìn)行購物操作。但無論前端購物的形式如何,都需要一個強(qiáng)大的后臺數(shù)據(jù)管理系統(tǒng),以便于對相關(guān)的交易數(shù)據(jù)、商品數(shù)據(jù)、用戶數(shù)據(jù)等進(jìn)行相應(yīng)的管理。相反,如果有一套通用的智慧社區(qū)電商后臺管理系統(tǒng),那么我們在實現(xiàn)購物系統(tǒng)時,只需要開發(fā)相應(yīng)的前端展示和購物系統(tǒng),就可以有效的對接后臺管理數(shù)據(jù),具有十分普遍的可移植性和通用性,所以從這個層面來講,本系統(tǒng)的開發(fā)和研究是十分有價值和意義的。
????? 本系統(tǒng)主要是為了開發(fā)一套通用的電商后臺數(shù)據(jù)管理系統(tǒng),以便于將來為大多數(shù)電商平臺提供一個通用的交易數(shù)據(jù)管理和數(shù)據(jù)統(tǒng)計系統(tǒng)。通過本智慧社區(qū)電商后臺管理系統(tǒng),可以實現(xiàn)對用戶、商品、訂單進(jìn)行相應(yīng)的數(shù)據(jù)管理,并可以實現(xiàn)對用戶的不同角色授予不同的權(quán)限。同時可以統(tǒng)計相應(yīng)的交易數(shù)據(jù),為平臺的運營者提供決策的數(shù)據(jù)支撐。電商后臺數(shù)據(jù)管理系統(tǒng)具體功能如下:
(1)用戶管理:實現(xiàn)用戶數(shù)據(jù)查看、搜索、狀態(tài)設(shè)置、信息編輯、數(shù)據(jù)刪除等操作。
(2)權(quán)限管理:實現(xiàn)對身份角色、權(quán)限功能進(jìn)行設(shè)定,為不同的角色分配相關(guān)權(quán)限。
(3)商品管理:實現(xiàn)對前臺展示的商品信息的管理、商品分類的管理、商品具體參數(shù)的設(shè)定等。
(4)訂單管理:主要實現(xiàn)對前臺用戶實現(xiàn)的交易訂單數(shù)據(jù)進(jìn)行管理,并可以查看己付款、未付款狀態(tài)的用戶,同時對已經(jīng)付款的用戶設(shè)定發(fā)貨等功能。
(5) 報表統(tǒng)計:統(tǒng)計不同區(qū)域、不同時間相關(guān)商品的銷售額,并以圖形報表的形式展現(xiàn)出來,以便于根據(jù)市場銷售情況及時調(diào)整營銷策略。
二,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
開發(fā)技術(shù):前后端分離開發(fā)
后臺開發(fā):VUE+NODEJS
前端開發(fā):VUE
三,系統(tǒng)展示
3.1后臺功能模塊的展示
3.1.1用戶登錄功能
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)后臺用戶如果想要對商城的相關(guān)信息進(jìn)行管理操作,首先要登錄系統(tǒng),才可展開相關(guān)的操作。用戶登陸界面如下圖6-1所示。

圖3-1用戶登錄操作界面
3.1.2用戶管理功能
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)管理員用戶登陸系統(tǒng)后,可以進(jìn)入用戶管理菜單進(jìn)行相應(yīng)的用戶信息管理。用戶管理主要實現(xiàn)對用戶的添加、查詢、狀態(tài)設(shè)置、修改和刪除等操作。用戶管理操作界面如下圖3-2所示:

圖3-2后臺用戶管理功能界面圖
3.1.3產(chǎn)品分類管理功能
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)管理員用戶登陸系統(tǒng)后,可以進(jìn)入產(chǎn)品分類管理菜單進(jìn)行相應(yīng)的分類信息管理。分類操作界面如下圖6-3所示。

圖3-3產(chǎn)品分類管理功能UI界面
3.1.4 后臺商品管理操作UI
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)管理員用戶登陸系統(tǒng)后,可以進(jìn)入商品管理菜單進(jìn)行相應(yīng)的商品信息管理。其中主要包含商品的添加、修改、查詢、刪除操作等,添加商品時可以上傳商品的圖片進(jìn)行展示。商品信息管理操作界面如下圖3-4所示。

圖3-4后臺商品管理功能UI界面
3.1.5 后臺商品訂單管理操作UI
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)管理員用戶登陸系統(tǒng)后,可以進(jìn)入商品訂單管理菜單進(jìn)行相應(yīng)的商品訂單信息管理。電商后臺管理的商品信息管理操作界面如下圖3-5所示。

圖3-5后臺商品管理功能UI界面
3.1.6后臺商品銷量統(tǒng)計管理操作UI
??? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)管理員用戶登陸系統(tǒng)后,可以進(jìn)入銷量統(tǒng)計管理菜單進(jìn)行相應(yīng)的商品銷售情況進(jìn)行統(tǒng)計查看。主要以圖形報表方式進(jìn)行展示,其中主要以折線圖的形態(tài)進(jìn)行展示。電商后臺商品信息統(tǒng)計查看界面如下圖3-6所示。

圖3-6折線圖展示銷售統(tǒng)計功能UI界面
3.1.7后臺權(quán)限管理操作UI
??? 智慧社區(qū)電商后臺管理系統(tǒng)有著完備的用戶權(quán)限角色設(shè)計功能,可以根據(jù)不同的用戶分配不同的角色權(quán)限功能,下面展示一下部分權(quán)限列表,如圖3-7所示:

圖3-6權(quán)限管理功能UI界面
四,核心代碼展示
var path = require("path");
daoModule = require("./DAO");
databaseModule = require(path.join(process.cwd(),"modules/database"));/**
* 獲取參數(shù)列表數(shù)據(jù)
*
* @param ?{[type]} ? cat_id 分類ID
* @param ?{[type]} ? sel ? ?類型
* @param ?{Function} cb ? ? 回調(diào)函數(shù)
*/module.exports.list = function(cat_id,sel,cb) {
db = databaseModule.getDatabase();
sql = "SELECT * FROM sp_attribute WHERE cat_id = ? AND attr_sel = ? AND delete_time is NULL";
database.driver.execQuery(
sql
,[cat_id,sel],function(err,attributes){ if(err) return cb("查詢執(zhí)行出錯"); cb(null,attributes);
});
}
var path = require("path");// 獲取數(shù)據(jù)庫模型databaseModule = require(path.join(process.cwd(),"modules/database"));
var logger = require('../modules/logger').logger();/**
* 創(chuàng)建對象數(shù)據(jù)
*
* @param ?{[type]} ? modelName 模型名稱
* @param ?{[type]} ? obj ? ? ? 模型對象
* @param ?{Function} cb ? ? ? ?回調(diào)函數(shù)
*/module.exports.create = function(modelName,obj,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.create(obj,cb);
}/**
* 獲取所有數(shù)據(jù)
*
* @param ?{[type]} ? conditions 查詢條件
* 查詢條件統(tǒng)一規(guī)范
* conditions
{
"columns" : {
字段條件
"字段名" : "條件值"
},
"offset" : "偏移",
"omit" : ["字段"],
"only" : ["需要字段"],
"limit" : "",
"order" :[
"字段" , A | Z,
...
]
}
* @param ?{Function} cb ? ? ? ? 回調(diào)函數(shù)
*/module.exports.list = function(modelName,conditions,cb) { var db = databaseModule.getDatabase(); var model = db.models[modelName]; if(!model) return cb("模型不存在",null); if(conditions) { if(conditions["columns"]) {
model = model.find(conditions["columns"]);
} else {
model = model.find();
} if(conditions["offset"]) {
model = model.offset(parseInt(conditions["offset"]));
} if(conditions["limit"]) {
model = model.limit(parseInt(conditions["limit"]));
} if(conditions["only"]) {
model = model.only(conditions["only"]);
} if(conditions["omit"]) {
model = model.omit(conditions["omit"]);
} if(conditions["order"]) {
model = model.order(conditions["order"]);
}
} else {
model = model.find();
}
model.run(function(err,models) {
if(err) {
console.log(err); return cb("查詢失敗",null);
}
cb(null,models);
});
};module.exports.countByConditions = function(modelName,conditions,cb) { var db = databaseModule.getDatabase(); var model = db.models[modelName]; if(!model) return cb("模型不存在",null); var resultCB = function(err,count){ if(err) { return cb("查詢失敗",null);
}
cb(null,count);
} if(conditions) { if(conditions["columns"]) {
model = model.count(conditions["columns"],resultCB);
} else {
model = model.count(resultCB);
}
} else {
model = model.count(resultCB);
}
};/**
* 獲取一條數(shù)據(jù)
* @param ?{[type]} ? modelName ?模型名稱
* @param ?{[數(shù)組]} ? conditions ?條件集合
* @param ?{Function} cb ? ? ? ? 回調(diào)函數(shù)
*/module.exports.findOne = function(modelName,conditions,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName]; if(!Model) return cb("模型不存在",null); if(!conditions) return ?cb("條件為空",null);
Model.one(conditions,function(err,obj){
logger.debug(err); if(err) { return cb("查詢失敗",null);
} return cb(null,obj);
});
}/**
* 更新對象數(shù)據(jù)
*
* @param ?{[type]} ? modelName 模型名稱
* @param ?{[type]} ? id ? ? ? ?數(shù)據(jù)關(guān)鍵ID
* @param ?{[type]} ? updateObj 更新對象數(shù)據(jù)
* @param ?{Function} cb ? ? ? ?回調(diào)函數(shù)
*/module.exports.update = function(modelName,id,updateObj,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.get(id,function(err,obj){ if(err) return cb("更新失敗",null);
obj.save(updateObj,cb);
});
}/**
* 通過主鍵ID獲取對象
* @param ?{[type]} ? modelName 模型名稱
* @param ?{[type]} ? id ? ? ? ?主鍵ID
* @param ?{Function} cb ? ? ? ?回調(diào)函數(shù)
*/module.exports.show = function(modelName,id,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.get(id,function(err,obj){
cb(err,obj);
});
}/**
* 通過主鍵ID刪除對象
*
* @param ?{[type]} ? modelName 模型名稱
* @param ?{[type]} ? id ? ? ? ?主鍵ID
* @param ?{Function} cb ? ? ? ?回調(diào)函數(shù)
*/module.exports.destroy = function(modelName,id,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.get(id,function(err,obj){ if(err) return cb("無模型ID");
obj.remove(function(err) { if(err) return cb("刪除失敗"); return cb(null);
});
});
}/**
* 通過模型名稱獲取數(shù)據(jù)庫數(shù)量
*
* @param ?{[type]} ? modelName 模型名稱
* @param ?{Function} cb ? ? ? ?回調(diào)函數(shù)
*/module.exports.count = function(modelName,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.count(cb);
}/**
* 通過條件判斷數(shù)據(jù)是否存在
*
* @param ?{[type]} ? modelName ?模塊名
* @param ?{[type]} ? conditions 條件
* @param ?{Function} cb ? ? ? ? 回調(diào)函數(shù)
*/module.exports.exists = function(modelName,conditions,cb) { var db = databaseModule.getDatabase(); var Model = db.models[modelName];
Model.exists(conditions,function(err,isExists){ if(err) return cb("查詢失敗");
cb(null,isExists);
});
}module.exports.getModel = function(modelName) { var db = databaseModule.getDatabase(); return db.models[modelName];
}
var path = require("path");
daoModule = require("./DAO");
databaseModule = require(path.join(process.cwd(),"modules/database"));module.exports.clearGoodAttributes = function(goods_id,cb) {
db = databaseModule.getDatabase();
sql = "DELETE FROM sp_goods_attr WHERE goods_id = ?";
database.driver.execQuery(
sql
,[goods_id],function(err){ if(err) return cb("刪除出錯"); cb(null);
});
}module.exports.list = function(goods_id,cb) {
db = databaseModule.getDatabase();
sql = "SELECT good_attr.goods_id,good_attr.attr_id,good_attr.attr_value,good_attr.add_price,attr.attr_name,attr.attr_sel,attr.attr_write,attr.attr_vals FROM sp_goods_attr as good_attr LEFT JOIN sp_attribute as attr ON attr.attr_id = good_attr.attr_id WHERE good_attr.goods_id = ?";
database.driver.execQuery(
sql
,[goods_id],function(err,attrs){ if(err) return cb("刪除出錯"); cb(null,attrs);
});
}
var path = require("path");
daoModule = require("./DAO");
databaseModule = require(path.join(process.cwd(),"modules/database"));/**
* 創(chuàng)建管理員
*
* @param ?{[type]} ? obj 管理員信息
* @param ?{Function} cb ?回調(diào)函數(shù)
*/module.exports.create = function(obj,cb) {
daoModule.create("ManagerModel",obj,cb);
}/**
* 獲取管理員列表
*
* @param ?{[type]} ? conditions 查詢條件
* @param ?{Function} cb ? ? ? ? 回調(diào)函數(shù)
*/module.exports.list = function(conditions,cb) {
daoModule.list("ManagerModel",conditions,function(err,models) { if(err) return cb(err,null); cb(null,models);
});
}/**
* 通過查詢條件獲取管理員對象
*
* @param ?{[type]} ? conditions 條件
* @param ?{Function} cb ? ? ? ? 回調(diào)函數(shù)
*/module.exports.findOne = function(conditions,cb) {
daoModule.findOne("ManagerModel",conditions,cb);
}/**
* 通過關(guān)鍵詞查詢用戶
*
* @param ?{[type]} ? key ? ?關(guān)鍵詞
* @param ?{[type]} ? offset
* @param ?{[type]} ? limit ?
* @param ?{Function} cb ? ? 回調(diào)函數(shù)
*/module.exports.findByKey = function(key,offset,limit,cb) {
db = databaseModule.getDatabase();
sql = "SELECT * FROM sp_manager as mgr LEFT JOIN sp_role as role ON mgr.role_id = role.role_id"; if(key) {
sql += " WHERE mg_name LIKE ? LIMIT ?,?";
database.driver.execQuery(
sql
,["%" + key + "%",offset,limit],function(err,managers){ if(err) return cb("查詢執(zhí)行出錯"); cb(null,managers);
});
} else {
sql += " LIMIT ?,? ";
database.driver.execQuery(sql,[offset,limit],function(err,managers){ if(err) return cb("查詢執(zhí)行出錯"); cb(null,managers);
});
}
}/**
* 判斷是否存在管理員
*
* @param ?{[type]} ? username 用戶名
* @param ?{Function} cb ? ? ? 回調(diào)函數(shù)
*
*/module.exports.exists = function(username,cb) { var db = databaseModule.getDatabase(); var Model = db.models.ManagerModel; Model.exists({"mg_name":username},function(err,isExists){ if(err) return cb("查詢失敗"); cb(null,isExists);
});
}/**
* 模糊查詢用戶數(shù)量
*
* @param ?{[type]} ? key 關(guān)鍵詞
* @param ?{Function} cb ?回調(diào)函數(shù)
*/module.exports.countByKey = function(key,cb) {
db = databaseModule.getDatabase();
sql = "SELECT count(*) as count FROM sp_manager"; if(key) {
sql += " WHERE mg_name LIKE ?";
database.driver.execQuery(
sql
,["%" + key + "%"],function(err,result){ if(err) return cb("查詢執(zhí)行出錯"); cb(null,result[0]["count"]);
});
} else {
database.driver.execQuery(sql,function(err,result){ if(err) return cb("查詢執(zhí)行出錯"); cb(null,result[0]["count"]);
});
}
}/**
* 通過ID獲取管理員對象數(shù)據(jù)
*
* @param ?{[type]} ? id 管理員主鍵ID
* @param ?{Function} cb 回調(diào)函數(shù)
*/module.exports.show = function(id,cb) {
daoModule.show("ManagerModel",id,cb);
}/**
* 更新管理員信息
*
* @param ?{[type]} ? obj 管理員對象
* @param ?{Function} cb ?回調(diào)函數(shù)
*/module.exports.update = function(obj,cb) {
daoModule.update("ManagerModel",obj.mg_id,obj,cb);
}/**
* 刪除管理員對象數(shù)據(jù)
*
* @param ?{[type]} ? id 主鍵ID
* @param ?{Function} cb 回調(diào)函數(shù)
*/module.exports.destroy = function(id,cb) {
daoModule.destroy("ManagerModel",id,function(err){ if(err) return cb(err); return cb(null);
});
}/**
* 保存管理員信息
*
* @param ?{[type]} ? obj 管理員對象
* @param ?{Function} cb ?回調(diào)函數(shù)
*/module.exports.save = function(obj,cb) {
daoModule.show(obj.mg_id,function(err,oldObj){ if(err) {
daoModule.create("ManagerModel",obj,cb);
} else {
daoModule.update("ManagerModel",obj.mg_id,obj,cb);
}
})
}/**
* 獲取管理員數(shù)量
*
* @param ?{Function} cb 回調(diào)函數(shù)
*/module.exports.count = function(cb) { daoModule("ManagerModel",cb);
}
五,項目總結(jié)
? ? ?? 智慧社區(qū)智慧社區(qū)電商后臺管理系統(tǒng)的使用者可以包含多種用戶角色,在系統(tǒng)設(shè)定時,可以根據(jù)不同的角色用戶分配不同的權(quán)限操作,實現(xiàn)靈活的權(quán)限管理功能。系統(tǒng)用戶總的來說主要實現(xiàn)的功能如下:
(1)用戶管理:實現(xiàn)用戶數(shù)據(jù)查看、搜索、狀態(tài)設(shè)置、信息編輯、數(shù)據(jù)刪除等操作。
(2)權(quán)限管理:實現(xiàn)對身份角色、權(quán)限功能進(jìn)行設(shè)定,為不同的角色分配相關(guān)權(quán)限。
(3)商品管理:實現(xiàn)對前臺展示的商品信息的管理、商品分類的管理、商品具體參數(shù)的設(shè)定等。
(4)訂單管理:主要實現(xiàn)對前臺用戶實現(xiàn)的交易訂單數(shù)據(jù)進(jìn)行管理,并可以查看己付款、未付款狀態(tài)的用戶,同時對已經(jīng)付款的用戶設(shè)定發(fā)貨等功能。
(5) 報表統(tǒng)計:統(tǒng)計不同區(qū)域、不同時間相關(guān)商品的銷售額,并以圖形報表的形式展現(xiàn)出來,以便于根據(jù)市場銷售情況及時調(diào)整營銷策略。
(6) 通知管理:下轄兩個子模塊疫情通知和公告通知,疫情通知主要發(fā)布疫情相關(guān)的一些通知和新聞,公告通知主要發(fā)布一些平臺相關(guān)的一些通知信息。
