1、背景提出
随着互联网和通信技术的高速发展,使电子商务迅速普及,网购成为人们购物的重要手段之一。据统计2019年双十一,11月11日~16日,受电商平台集中促销影响,业务量达全年高峰,6天内共处理邮(快)件23.09亿件。疫情期间配送快递成了一件难事。疫情防控已经趋于常态化,很多小区出台了新的治安管理条例,开始禁止快递人员进入。这给民众收发快件造成了极大的不便,因进不去小区,快递人员只能在小区门口周边摆摊设点,也影响了小区周边环境。
除了快递,外卖也一样面临相同的问题。除了小区,写字楼、校园也面临着相同的问题。正是基于对疫情期间配送最后一公里深刻的认识,我们探索出一条解决之道,那就是社区快递e栈(类似快递柜)。
2、实践目的
1、锻炼动手能力
2、融会贯通JavaWeb技术
3、体验项目开发流程
4、做出上线级别的微信端+JavaWeb后端项目
5、为框架阶段打下前后端交互的基础
3、技术要点
html5、css3、js、Jquery、bootstrap、layui、layer、ajax、mysql、tomcat、servlet、filter、listener、jsp、公有云服务器。
4、技术分工
后台必做功能:
1.管理员登录
2.管理员退出
3.快件增加
4.快件删除
5.快件修改
6.快件列表查看
7.用户增加
8.用户删除
9.用户删除
10.用户列表查看
11.快递员增加
12.快递员删除
13.快递员修改
14.快递员查询
选做:
1.控制台-显示快件区域区分图
2.控制台-显示用户人数
3.控制台-显示快递员人数
4.控制台-显示总快件数
5.控制台-显示等待取件数量
前台必做功能:
1.用户/快递员登录
2.用户/快递员注册
3.用户-我的取件列表(未取件/已取件)
4.用户-快件取件码展示
5.快递员-扫码取件
6.快递员-取件码取件
7.首页根据快递单号查询快递信息
选做:
1.快递员-录入快递
2.快递员历史查询
3.个人中心-昵称显示与修改
4.懒人排行榜
5.自动登录
6.修改密码
5、时间分配
3、12开始,……
3、18结束
6、编写后台代码
(1)管理员登录
Controller
@ResponseBody("/admin/login.do")
public String login(HttpServletRequest request, HttpServletResponse response){
//1. 接参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//2. 调用Service传参数,并获取结果
boolean result = AdminService.login(username, password);
//3. 根据结果,准备不同的返回数据
Message msg = null;
if(result){
msg = new Message(0,"登录成功");//{status:0,result:"登录成功"}
//登录时间 和 ip的更新
Date date = new Date();
String ip = request.getRemoteAddr();
AdminService.updateLoginTimeAndIP(username,date,ip);
request.getSession().setAttribute("adminUserName","username");
}else{
msg = new Message(-1,"登录失败");//{status:-1,result:"登录失败"}
}
//4. 将数据转换为JSON
String json = JSONUtil.toJSON(msg);
//5. 将JSON回复给ajax
return json;
}
Service
public static boolean login(String username,String password){
return dao.login(username,password);
}
}
(2)快递管理
快递的列表
- 分页查询的列表
@ResponseBody("/express/list.do")
public String list(HttpServletRequest request, HttpServletResponse response){
//1. 获取查询数据的起始索引值
int offset = Integer.parseInt(request.getParameter("offset"));
//2. 获取当前页要查询的数据量
int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
//3. 进行查询
List<Express> list = ExpressService.findAll(true, offset, pageNumber);
List<BootStrapTableExpress> list2 = new ArrayList<>();
for(Express e:list){
String inTime = DateFormatUtil.format(e.getInTime());
String outTime = e.getOutTime()==null?"未出库":DateFormatUtil.format(e.getOutTime());
String status = e.getStatus()==0?"待取件":"已取件";
String code = e.getCode()==null?"已取件":e.getCode();
BootStrapTableExpress e2 = new BootStrapTableExpress(e.getId(),e.getNumber(),e.getUsername(),e.getUserPhone(),e.getCompany(),code,inTime,outTime,status,e.getSysPhone());
list2.add(e2);
}
List<Map<String, Integer>> console = ExpressService.console();
Integer total = console.get(0).get("data1_size");
//4. 将集合封装为 bootstrap-table识别的格式
ResultData<BootStrapTableExpress> data = new ResultData<>();
data.setRows(list2);
data.setTotal(total);
String json = JSONUtil.toJSON(data);
return json;
}
新增快递
@ResponseBody("/express/insert.do")
public String insert(HttpServletRequest request, HttpServletResponse response){
String number = request.getParameter("number");
String company = request.getParameter("company");
String username = request.getParameter("username");
String userPhone = request.getParameter("userPhone");
//Express e = new Express(number,company,username,userPhone, UserUtil.getUserPhone(request.getSession()));
Express e = new Express(number,username,userPhone,company,UserUtil.getUserPhone(request.getSession()));
boolean flag = ExpressService.insert(e);
Message msg = new Message();
if(flag){
//录入成功
msg.setStatus(0);
msg.setResult("快递录入成功!");
}else{
//录入失败
msg.setStatus(-1);
msg.setResult("快递录入失败!");
}
String json = JSONUtil.toJSON(msg);
return json;
}
- 用户输入内容,后台接收参数,向数据库存储
删除快递
@ResponseBody("/express/delete.do")
public String delete(HttpServletRequest request,HttpServletResponse response){
int id = Integer.parseInt(request.getParameter("id"));
boolean flag = ExpressService.delete(id);
Message msg = new Message();
if(flag){
msg.setStatus(0);
msg.setResult("删除成功");
}else{
msg.setStatus(-1);
msg.setResult("删除失败");
}
String json = JSONUtil.toJSON(msg);
return json;
}
}
- 用户输入快递单号查询到快递信息
- 浏览快递信息的最后,可以点击删除按钮 ,删除快递
修改快递
@ResponseBody("/express/find.do")
public String find(HttpServletRequest request,HttpServletResponse response){
String number = request.getParameter("number");
Express e = ExpressService.findByNumber(number);
Message msg = new Message();
if(e == null){
msg.setStatus(-1);
msg.setResult("单号不存在");
}else{
msg.setStatus(0);
msg.setResult("查询成功");
msg.setData(e);
}
String json = JSONUtil.toJSON(msg);
return json;
}
/**
* 更新
* @param request
* @param response
* @return
*/
@ResponseBody("/express/update.do")
public String update(HttpServletRequest request,HttpServletResponse response){
int id = Integer.parseInt(request.getParameter("id"));
String number = request.getParameter("number");
String company = request.getParameter("company");
String username = request.getParameter("username");
String userPhone = request.getParameter("userPhone");
int status = Integer.parseInt(request.getParameter("status"));
Express newExpress = new Express();
newExpress.setNumber(number);
newExpress.setCompany(company);
newExpress.setUsername(username);
newExpress.setUserPhone(userPhone);
newExpress.setStatus(status);
boolean flag = ExpressService.update(id, newExpress);
Message msg = new Message();
if(flag){
msg.setStatus(0);
msg.setResult("修改成功");
}else{
msg.setStatus(-1);
msg.setResult("修改失败");
}
String json = JSONUtil.toJSON(msg);
return json;
}
- 用户输入快递单号查询到快递信息
- 浏览(可修改)快递信息的最后,可以点击确认按钮 ,确认修改快递
(3)快递员管理
快递员的列表
- 分页查询的列表
@ResponseBody("/courier/list.do")
public String list(HttpServletRequest request, HttpServletResponse response){
int offset = Integer.parseInt(request.getParameter("offset"));
// 获取当前页要查询的数据量
int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
List<Courier> list = CourierService.findAll(true, offset, pageNumber);
List<BootStrapTableCourier> list2 = new ArrayList<>();
for (Courier c : list){
String enrollTime = DateFormatUtil.format(c.getEnrollTime());
String loginTime = c.getLoginTime()==null?"未登录":DateFormatUtil.format(c.getLoginTime());
String sendNumber = null;
int courierSendNumber = c.getCourierSendNumber();
if (courierSendNumber <= 10000){
sendNumber = courierSendNumber + "";
}else{
sendNumber = courierSendNumber/10000 + "w+";
}
BootStrapTableCourier c2 = new BootStrapTableCourier(c.getId(),c.getCourierName(),c.getCourierPhone(),"******",c.getCourierPassword(),sendNumber,enrollTime,loginTime);
list2.add(c2);
}
List<Map<String, Integer>> console = CourierService.console();
Integer total = console.get(0).get("data_size");
ResultData<BootStrapTableCourier> data = new ResultData<>();
data.setRows(list2);
data.setTotal(total);
String json = JSONUtil.toJSON(data);
return json;
}
新增快递员
@ResponseBody("/courier/insert.do")
public String insert(HttpServletRequest request, HttpServletResponse response){
String courierName = request.getParameter("courierName");
String courierPhone = request.getParameter("courierPhone");
String courierIdNumber = request.getParameter("courierIdNumber");
String courierPassword = request.getParameter("courierPassword");
Courier c = new Courier(courierName,courierPhone,courierIdNumber,courierPassword);
boolean flag = CourierService.insert(c);
Message msg = new Message();
if (flag){
msg.setStatus(0);
msg.setResult("快递员录入成功");
}else {
msg.setStatus(-1);
msg.setResult("快递员录入失败");
}
String json = JSONUtil.toJSON(msg);
return json;
}