项目介绍
随着计算机技术的成熟,互联网的建立,如今,PC平台上有许多关于外卖方面的应用程序,但由于使用时间和地点上的限制,用户在使用上存在着种种不方便,而开发一款外卖商城平台微信小程序,能够有效地解决这个问题。
本外卖商城平台微信小程序是针对外卖方面而开发,采用微信开发者工具进行微信端开发,使用MYSQL数据库进行系统数据的储存,系统满足用户通过微信客户端进行查询商品、购买商品的需求。本小程序是以微信为入口的,整个系统不仅操作简单、便捷,而且节约用户的时间及资源成本等,仅需通过一部手机和微信号即可满足用户购买商品、配送上门的需求。
论文首先阐述了外卖商城平台微信小程序的开发背景,并对开发外卖商城平台微信小程序所采用的相关技术进行了详细的介绍,然后对此应用软件进行了需求分析、设计,最后对系统进行测试、维护,保证系统的正常运行。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
5.1微信端功能模块的实现
5.1.1注册登录界面
没有账号的用户和骑手均可进行注册操作,注册后可进行登录系统,用户注册登录界面展示如图5.1所示。
图5.1 用户注册登录界面
5.1.2首页界面
用户和骑手登录后均可进入首页查看首页信息,首页界面展示如图5.2所示。
图5.2首页界面
5.1.3商品信息界面
用户登录后可查看商品信息,并可根据条件快速查询所需商品,可选择商品进行查看详情操作,商品信息界面展示如图5.3所示。
图5.3 商品信息界面
5.1.4订单支付界面
用户对个人订单可选择进行支付操作,订单支付界面展示如图5.4所示。
图5.4 订单支付界面
5.1.5配送接单界面
骑手登录后可查看订单信息,并可选择进行配送接单,配送接单界面展示如图5.5所示。
图5.5 配送接单界面
5.1.6配送订单界面
用户可查看骑手接单信息,并可对其进行审核操作,配送订单界面展示如图5.6所示。
图5.6 配送订单界面
5.2服务端功能模块的实现
5.2.1服务端登录界面
管理员和商家要想进入对应角色后台进行管理操作,必须进行登录,服务端登录界面展示如图5.7所示。
图5.7 服务端登录界面
5.2.2用户管理界面
管理员登录后可查看所有用户信息,并可对其进行修改和删除操作,用户管理界面如图5.8所示。
图5.8 用户管理界面
5.2.3商家管理界面
管理员在商家管理界面可查看所有商家信息,对已有商家信息可进行编辑和删除操作,商家管理界面如图5.9所示。
图5.9 商家管理界面
5.2.4骑手管理界面
管理员可查看、修改和删除骑手信息,骑手管理界面展示如图5.10所示。
图5.10 骑手管理界面
5.2.5商品信息管理界面
商家可增删改查个人店铺商品信息,管理员可管理所有商品信息,商品信息管理界面展示如图5.11所示。
图5.11 商品信息管理界面
5.2.6订单信息管理界面
商家可管理个人店铺订单,管理员可管理所有订单,订单信息管理界面展示如图5.12所示。
图5.12 订单信息管理界面
5.2.7配送订单管理界面
商家可管理个人店铺配送订单信息,管理员可管理所有配送订单信息,配送订单管理界面展示如图5.13所示。
图5.13 配送订单管理界面
核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.QishouEntity;
import com.entity.view.QishouView;
import com.service.QishouService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 骑手
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/qishou")
public class QishouController {
@Autowired
private QishouService qishouService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
QishouEntity user = qishouService.selectOne(new EntityWrapper<QishouEntity>().eq("gonghao", username));
if(user==null || !user.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username,"qishou", "骑手" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody QishouEntity qishou){
//ValidatorUtils.validateEntity(qishou);
QishouEntity user = qishouService.selectOne(new EntityWrapper<QishouEntity>().eq("gonghao", qishou.getGonghao()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
qishou.setId(uId);
qishouService.insert(qishou);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
QishouEntity user = qishouService.selectById(id);
return R.ok().put("data", user);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
QishouEntity user = qishouService.selectOne(new EntityWrapper<QishouEntity>().eq("gonghao", username));
if(user==null) {
return R.error("账号不存在");
}
user.setMima("123456");
qishouService.updateById(user);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,QishouEntity qishou,
HttpServletRequest request){
EntityWrapper<QishouEntity> ew = new EntityWrapper<QishouEntity>();
PageUtils page = qishouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, qishou), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,QishouEntity qishou,
HttpServletRequest request){
EntityWrapper<QishouEntity> ew = new EntityWrapper<QishouEntity>();
PageUtils page = qishouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, qishou), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( QishouEntity qishou){
EntityWrapper<QishouEntity> ew = new EntityWrapper<QishouEntity>();
ew.allEq(MPUtil.allEQMapPre( qishou, "qishou"));
return R.ok().put("data", qishouService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(QishouEntity qishou){
EntityWrapper< QishouEntity> ew = new EntityWrapper< QishouEntity>();
ew.allEq(MPUtil.allEQMapPre( qishou, "qishou"));
QishouView qishouView = qishouService.selectView(ew);
return R.ok("查询骑手成功").put("data", qishouView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
QishouEntity qishou = qishouService.selectById(id);
return R.ok().put("data", qishou);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
QishouEntity qishou = qishouService.selectById(id);
return R.ok().put("data", qishou);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody QishouEntity qishou, HttpServletRequest request){
qishou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(qishou);
QishouEntity user = qishouService.selectOne(new EntityWrapper<QishouEntity>().eq("gonghao", qishou.getGonghao()));
if(user!=null) {
return R.error("用户已存在");
}
qishou.setId(new Date().getTime());
qishouService.insert(qishou);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody QishouEntity qishou, HttpServletRequest request){
qishou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(qishou);
QishouEntity user = qishouService.selectOne(new EntityWrapper<QishouEntity>().eq("gonghao", qishou.getGonghao()));
if(user!=null) {
return R.error("用户已存在");
}
qishou.setId(new Date().getTime());
qishouService.insert(qishou);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody QishouEntity qishou, HttpServletRequest request){
//ValidatorUtils.validateEntity(qishou);
qishouService.updateById(qishou);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
qishouService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<QishouEntity> wrapper = new EntityWrapper<QishouEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = qishouService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
摘 要 I
Abstract II
目 录 III
第1章 绪论 1
1.1研究背景 1
1.2设计原则 1
1.3论文组织结构 2
第2章 关键技术简介 3
2.1 微信小程序 3
2.2 微信开发者工具 3
2.3微信小程序API接口 3
2.4 WXML 、WXS、JS小程序编写语言 3
2.5 MYSQL数据库 4
第3章 系统分析 5
3.1 可行性分析 5
3.1.1技术可行性 5
3.1.2 经济可行性 5
3.1.3 操作可行性 5
3.1.4时间可行性 5
3.2 系统性能分析 6
3.3 系统功能分析 6
3.4 系统流程分析 9
3.4.1注册登录流程 9
3.4.2添加信息流程 10
3.5系统界面分析 10
第4章 系统设计 12
4.1系统结构设计 12
4.2系统顺序图设计 12
4.2.1登录模块顺序图 12
4.2.2添加信息模块顺序图 13
4.3系统数据库设计 13
4.3.1 数据库E-R图设计 13
4.3.2 数据库表设计 16
第5章 系统的实现 20
5.1微信端功能模块的实现 20
5.1.1注册登录界面 20
5.1.2首页界面 20
5.1.3商品信息界面 21
5.1.4订单支付界面 22
5.1.5配送接单界面 23
5.1.6配送订单界面 24
5.2服务端功能模块的实现 25
5.2.1服务端登录界面 25
5.2.2用户管理界面 26
5.2.3商家管理界面 26
5.2.4骑手管理界面 27
5.2.5商品信息管理界面 27
5.2.6订单信息管理界面 28
5.2.7配送订单管理界面 28
第6章 系统测试 29
6.1 软件测试 29
6.2 测试的重要性 29
6.3 测试方法 30
6.4测试分析 30
第7章 总结 31
致 谢 32
参考文献 33