基于JavaWeb+MySQL的快递驿站系统

本文详细介绍了社区快递e栈的背景、实践目的、技术要点、分工、时间分配、后台代码实现,包括管理员、快递、快递员和用户管理功能。此外,还涉及到了数据库设计、过滤器应用、实体类创建,以及微信端和前台的实现。文章通过实际项目展示了如何运用HTML5、CSS3、JavaScript、Jquery、Bootstrap等技术,实现了一个完整的JavaWeb后端项目,旨在锻炼动手能力和前后端交互技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景提出

2、实践目的

3、技术要点

4、技术分工

5、时间分配

6、编写后台代码

(1)管理员登录

(2)快递管理

(3)快递员管理

(4)用户管理

(5)数据库

(6)过滤器

(7)实体类

7、目录

8、微信端实现

9、过程梳理

10、前台实现

11、新知识引入——layer

12、新知识引入——内网穿透

13、发送短信及验证码

14、运行效果


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;
    }
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初尘屿风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值