博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
一、 前言介绍:
校园点餐系统小程序采用B/S模式、采用JAVA语言、springboot框架、mysql数据库、小程序框架uniapp等开工具,促进了校园点餐系统小程序的业务发展。与传统线下点餐相比,校园点餐系统小程序不但节省了卖家的线下运营的成本和门店曝光等难题,对学生而言提供了足不出户送餐上门的服务,针对现代校园而言,出门用餐路程远,排队麻烦等问题,特开发校园点餐系统小程序。
实现校园点餐的计算机化也是顺应时代潮流的举措,现如今餐饮种类正逐渐增加,浩繁的餐饮信息令校园餐饮业迎来管理上的难题。餐饮行业进入高速发展的时代,餐饮业的管理工作变得越来越困难,在这一客观需要的推动下,建立、完善、发展在线校园点餐系统小程序,可以为校园餐饮业管理者带来极大的方便。
本系统即为方便餐饮店管理者和客户而制作的校园校园点餐系统小程序,结合了餐饮店和客户的需求,设计出的一个基于springboot框架、JAVA语言、MySQL数据库等技术的校园点餐系统小程序。
二 、功能设计:
本网站可以分为:注册用户使用的功能、卖家进行管理的功能、管理员进行管理的功能。
管理员管理功能:首页、网站管理(轮播图、公告信息)、人员管理(管理员、注册用户、卖家)、内容管理(美食资讯)、购物管理(餐品信息、分类列表、订单列表)、模块管理(我的好友、订单状态、营业分析、餐品推荐)、个人管理等功能。
用户使用功能:首页、关于我们、餐品信息、餐品推荐、购物车、美食资讯、我的(基本信息、收货地址、收藏、订单、购物车,我的好友、订单状态)等功能。
卖家管理功能:首页、购物管理(餐品信息、订单列表)、模块管理(订单状态、营业分析、餐品推荐)、个人管理等功能。
三、功能实现:
用户系统功能模块
校园点餐系统小程序,在系统注册页面填写用户信息用户名、密码、姓名、性别、邮箱、手机等内容进行注册操作,如图5-1所示。
在小程序首页页面可以用户功能首页、联系方式、购物车、美食资讯、我的等,如图5-2所示。
在我的页面可以查看基本信息、收货地址、收藏、订单、购物车,我的好友、订单状态等功能,如图5-3所示。
图5-3 我的界面图
在美食资讯详情界面,用户可以查看资讯详情,并可进行点赞、收藏、评论等操作,如图5-4所示。
图5-4 美食资讯详情界面图
用户点击产品详情可以查看菜品信息菜品名称、口味、价格、原材料、店铺名称、商品属性等内容,还可在该页面进行菜品收藏、加入购物车、立即购买等操作,如图5-5所示。
用户在餐品信息页面可以浏览餐品图片、餐品名称、价格等信息,并可以选中感兴趣的餐品加入购物车,如图5-6所示。
图5-6 餐品信息界面图
在订单详情页面中可以查看已付款、未付款订单、需付款、订单编号、下单时间等信息,如图5-7所示。
图5-7 订单详情界面图
管理员功能模块
在管理员登录页面添加登录信息用户名、密码、角色等进行登录,如图5-8所示。
在管理员功能页面中可以查看功能分为:首页、网站管理(轮播图、公告信息)、人员管理(管理员、注册用户、卖家)、内容管理(美食资讯)、购物管理(餐品信息、分类列表、订单列表)、模块管理(我的好友、订单状态、营业分析、餐品推荐)、个人管理等功能,并可进行相应操作,如图5-9所示。
图5-9 管理员功能界面图
在用户管理页面中可以查看昵称、用户名、商家编号、店铺名称、负责人、创建时间、更新时间等信息进行详情、添加、修改或删除等操作,如图5-10所示。
图5-10用户管理界面图
在美食资讯管理页面中可以对标题、封面图、文章分类、标签等信息进行添加、修改或删除等操作,如图5-11所示。
图5-11美食资讯管理界面图
在订单状态管理页面可以查看订单情号、商品名称、商品编号、用户编号、姓名、联系电话、收货地址、记录时间等内容,还可进行详情、修改、添加或删除等操作,如图5-12所示。
图5-12 订单状态管理界面图
卖家功能模块
在餐品推荐页面可以添加餐品名称、图片、类型、口味、原材料、商家编号、店铺名称、创建时间等内容,还可进行详情、修改、添加或删除等操作,如图5-13所示。
图5-13 餐品推荐界面图
在营业分析页面可以添加标题、商家编号、店铺名称、绒计时间、收入总额、备注、创建时间等内容,还可进行详情、修改、添加或删除等操作,如图5-14所示。
图5-14 营业分析界面图
四、库表设计:
一个好的系统它的后台数据库一定要考虑的全面,这和我们建造房子一个概念,房子不是随心所欲建起来的,一切都是在合理设计的基础是实现的,地基打牢固了房子才能建的更高。数据库如果设计的很合理,而且每个方面都能考虑到了那么这个系统才能不会出现大的问题。
学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还为系统提供了添加、删除、修改和检查等操作模块,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表。系统ER图如下图所示
五、关键代码:
/**
* 用户账户:用于保存用户登录信息(User)表控制层
*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController extends BaseController<User, UserService> {
/**
* 服务对象
*/
@Autowired
public UserController(UserService service) {
setService(service);
}
/**
* Token服务
*/
@Autowired
private AccessTokenService tokenService;
@Autowired
private UserGroupService userGroupService;
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
Query select = service.select(query, service.readConfig(request));
List list = select.getResultList();
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("state")
public Map<String, Object> state(HttpServletRequest request) {
JSONObject ret = new JSONObject();
// 获取状态
String token = request.getHeader("x-auth-token");
// 根据登录态获取用户ID
Integer userId = tokenGetUserId(token);
log.info("[返回userId] {}",userId);
if(userId == null || userId == 0){
return error(10000,"用户未登录!");
}
// 根据用户ID获取用户
Map<String,String> query = new HashMap<>();
query.put("user_id" ,String.valueOf(userId));
// 根据用户ID获取
Query select = service.select(query,service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));
user.put("token",token);
ret.put("obj",user);
return success(ret);
} else {
return error(10000,"用户未登录!");
}
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("quit")
public Map<String, Object> quit(HttpServletRequest request) {
String token = request.getHeader("x-auth-token");
JSONObject ret = new JSONObject();
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
try{
tokenService.delete(query,service.readConfig(request));
}catch (Exception e){
e.printStackTrace();
}
return success("退出登录成功!");
}
/**
* 获取登录用户ID
* @param token
* @return
*/
public Integer tokenGetUserId(String token) {
log.info("[获取的token] {}",token);
// 根据登录态获取用户ID
if(token == null || "".equals(token)){
return 0;
}
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
AccessToken byToken = tokenService.findOne(query);
if(byToken == null){
return 0;
}
return byToken.getUser_id();
}
/**
* 重写add
* @return
*/
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> map = service.readBody(request.getReader());
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
}
六、论文参考:
七、其他案例:
八、源码获取:
原文地址:https://blog.csdn.net/weixin_39709134/article/details/134302407
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_49473.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!