jdk版本:1.8 及以上
ide工具:Eclipse或者 IDEA,微信小程序开发工具
数据库: mysql5.7 (必须5.7)
编程语言: Java
java框架:SSM
maven: 3.6.1
详细技术:HTML+CSS+JAVA+SSM+MYSQL+VUE+MAVEN+微信开发工具
三.功能设计
基于微信小程序的食堂线上订餐系统分为用户、商家以及管理员三种角色。本课题研究的微信食堂线上订餐小程序前后台分离,让商品订单,商家信息,商品信息等相关信息集中在后台让管理员管理,让用户在小程序端订餐,管理个人订单,该系统让信息管理变得高效,也让用户订餐,查看个人订单等信息变得越来越方便。
图3.1即为设计的管理员功能结构,管理员权限操作的功能包括对用户注册信息,对商家信息,商品信息,公告信息等进行管理。
图3.2即为设计的商家功能结构,商家权限操作的功能包括管理商品,管理并回复商品评价,管理商品订单,查看公告等。
图3.3即为设计的用户功能结构,用户权限操作的功能包括购买商品,查看商家资料,查看公告,查看商品评价,管理商品订单,进行账户充值等。
四.数据设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。本系统主要实体属性图如下所示:
五.部分效果展示
5.1用户微信端实现效果
下图即为编码实现的商品信息界面,用户在商品信息界面中购买商品,或点击加入购物车按钮把商品保存在购物车里面。
下图即为编码实现的订单确认界面,用户在订单确认界面中需要确认购买的商品以及收货的地址信息,在余额充足的情况下就可以成功支付订单。
下图 即为编码实现的我的商品订单界面,用户在我的商品订单界面中可以取餐,可以退款,可以评价订单。
下图 即为编码实现的商家信息界面,用户在商家信息界面中查看商家详细介绍,包括商家的星级,商家的营业执照等信息。
5.3后台管理端实现效果
商家模块
下图即为编码实现的商品管理界面,商家在商品管理界面中具备增加商品库存,减少商品库存,为商品进行下架,更改商品信息,添加商品等权限。
下图即为编码实现的商品评价管理界面,商家在商品评价管理界面中查看用户对订单商品的评价,商家需要回复评价信息。
下图即为编码实现的商品订单管理界面,商家在商品订单管理界面中除了对商品订单的详情信息进行查看之外,还可以对用户的订单商品进行出餐。
管理员模块
六、论文截图
七.部分功能代码
/\*\*
\* 权限(Token)验证
\*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN\_TOKEN\_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String servletPath = request.getServletPath();
if("/dictionary/page".equals(request.getServletPath()) || "/file/upload".equals(request.getServletPath()) || "/yonghu/register".equals(request.getServletPath()) ){//请求路径是字典表或者文件上传 直接放行
return true;
}
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN\_TOKEN\_KEY);
/\*\*
\* 不需要验证权限的方法直接放过
\*/
if(annotation!=null) {
return true;
}
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");