Background of the project
Food is the first priority for the people, and the catering industry has always been an industry closely related to people's daily lives. The traditional ordering by phone or in-store consumption can no longer meet the needs of market development. With the rapid rise of the Internet, the Internet has increasingly become the best channel for providing information and is gradually moving into the traditional circulation field. The traditional catering industry is also facing huge challenges. At this time, it is very timely to launch takeout ordering.
Compared with the traditional way of ordering takeout by phone and ordering in the store, ordering takeout has its own unique advantages - intuitive, highly interactive, low cost, convenient and fast . Customers can learn about the latest products in a timely manner and provide timely feedback on merchants' services; they can also place orders at any time when merchants are open, and freely decide the delivery time, which is also a better service for consumers. For merchants, it can also be more convenient to retain valuable customers, tap potential customers, etc. Online takeout ordering provides rich information with pictures, texts and timely updates, which to a certain extent gives customers more choices and freedoms. At present, the main forms of online takeout ordering include merchants entering the network and creating their own stores. This paper mainly discusses how to use JAVA language to develop a takeout ordering system
. This system will be developed in strict accordance with the software The process carries out work at each stage, using B/S architecture and object-oriented programming ideas for project development. In the introduction, the author will discuss the current background of the takeout ordering system and the purpose of system development. Subsequent chapters will strictly follow the software development process to analyze and design the system at each stage.
The main users of the takeout ordering system are divided into administrators and users. The functions implemented include administrators: homepage, personal center, user management, restaurant information management, dish classification management, dish information management, Order evaluation management, system management, order management, user: homepage, personal center, order evaluation management, my collection management, order management, front desk homepage; homepage, restaurant information, dish information, announcement information, personal center, backend management, shopping Car, customer service and other functions. Since the functional module design of this website is relatively comprehensive, the entire information management process of the takeaway ordering system can be realized.
The use of this system can realize the informatization of the management of the takeout ordering system, which can facilitate the administrator to conduct more convenient and faster management, and can improve the work efficiency of the management personnel.
feature design
Function module diagram
Administrator module: The core user in the system is the administrator. After the administrator logs in, he manages the backend system through the administrator function. The main functions include: home page, personal center, user management, restaurant information management, dish classification management, dish information management, order evaluation management, system management, order management and other functions.
User: Home page, personal center, order evaluation management, my collection management, order management and other functions
Front desk home page: home page, restaurant information, dish information, announcements Information, personal center, background management, shopping cart, customer service and other functions
The login module mainly meets the permissions of administrators and users to log in
Users without accounts can enter Registration interface for registration operation
Structure diagram of this takeaway ordering system
Function screenshot
Front page function module
Takeaway ordering system, you can view the homepage, restaurant information, dish information, announcement information, personal center, backend management, shopping cart, customer service and other content on the front page
Login, user To register, you can fill in the user name, password, name, mobile phone and other information to register on the user registration page
Personal information: Users can enter personal information to enter the user name, password, name, gender, avatar, mobile phone , balance, etc., you can check the balance recharge to add, delete, details and other operations
For dish information, on the dish information page, you can check the dish name, dish category, pictures, materials, portions, restaurant name, Contact number, price, dish introduction and other information for immediate reservation and rating
Announcement information, check the announcement information page by viewing the announcement content, etc.
Administrator function module
Administrator login, log in by filling in the user name, password, and role entered during registration
Administrator login into the takeout ordering system can view the homepage, personal center, user management, Restaurant information management, dish classification management, dish information management, order evaluation management, system management, order management and other information
Personal center, the administrator operates the personal center and fills in the original password, new password, and confirmation Password and add, delete, modify and view
User management: Administrators can enter the system to edit user names, passwords, names, genders, avatars, mobile phones, etc. Operation
Restaurant information management. In the restaurant information management page, you can fill in the restaurant name, restaurant type, delivery time, delivery service, contact number, restaurant address and other information, and you can also update existing restaurants as needed. Information management to modify or delete operations
Dishes information management, on the menu information management page you can view the name of the dish, category of the dish, pictures, materials, portions, restaurant name, contact number, price, dishes Introduction and other content, and perform detailed operations such as adding, modifying or deleting existing dish information management as needed
System management: Administrators view carousel images/announcement information and customer service management through the system management page You can upload pictures, publish announcements, reply, etc. to add, delete, modify and view, and perform order management on the entire system. You can view the order number, product name, and product pictures on the order management page. , purchase quantity, price/points, discount price, total price/total points, total discount price, payment type, status, address, etc., and perform detailed operations such as adding, modifying or deleting existing order management as needed
User function module
User login, log in by filling in user name, password, and role
Order evaluation management, on the order evaluation management page, by filling in the order number, product name, dish category, rating, Review date, user name, mobile phone, review content and other content to view, add, delete
Order management, on the order management page you can view the order number, product name, product pictures, purchase quantity, price/ Points, discount price, total price/total points, total discount price, payment type, status, address, etc., and perform detailed operations such as details and deletion of existing order management as needed
Collection management :On the collection management page, you can view the collection ID, table name, collection name, collection pictures, etc., and perform operations such as details, deletion or viewing
Related code
Database configuration
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
port: 8080
servlet:
context-path: /springbootr1tjf
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
username: root
password: 123456
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
# username: sa
# password: 123456
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
resources:
static-locations: classpath:static/,file:static/
#mybatis
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.entity
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 1
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 2
#驼峰下划线转换
db-column-underline: true
#刷新mapper 调试神器
refresh-mapper: true
#逻辑删除配置
logic-delete-value: -1
logic-not-delete-value: 0
#自定义SQL注入器
sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
jdbc-type-for-null: 'null'
Controller
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
Business layer (Service)
package com.service;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;
/**
* 系统用户
*/
public interface UserService extends IService<UserEntity> {
PageUtils queryPage(Map<String, Object> params);
List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);
}
Data access layer (Dao)
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;
/**
* 用户
*/
public interface UserDao extends BaseMapper<UserEntity> {
List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);
List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);
}