JavaWeb综合项目——快递e栈(微信前端部分)(二)

简介: JavaWeb综合项目——快递e栈(微信前端部分)(二)

4 ngrok内网穿透


42.png


ngrok官网

43.png


44.png


45.png


下载后启动服务器


46.png


输入隧道id:ae2d4bac22…

47.png


当访问http://wjwezhan.free.idcfengye.com时会跳转到本地。

为了防止free.idcfengye.com域名被别人恶意使用后被举报,重新编辑一下域名

48.png


此时再浏览器中输入 即可访问主页。


5 微信js扫码


5.1 微信JSSDK引入


5.1.1 前置需求


 申请个人微信公众号


5.1.2 引入并修改工具类


 在wx包下创建servlet包,并导入配置类。


package com.wangjiawei.wx.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wangjiawei.wx.util.SignatureUtil;
@WebServlet("/wxconf.do")
public class WXConfig extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
  PrintWriter pw = response.getWriter();
  String urlText = request.getParameter("xurl");
  try {
    String json = SignatureUtil.getConfig(urlText ).toJSON();
    pw.println(json);
  } catch (Exception e) {
    e.printStackTrace();
  }
  pw.close();
  }
  /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
  }
}


 在wx包下创建util包,并导入三个工具类,SignatureUtil.java,TicketUtil.java,TokenUtil.java


进行如下修改:


1.SignatureUtil类 88 行的appid 否则无法调用api

2.TokenUtil类的34行的appid

3.TokenUtil类的35行的secret


appid和密钥来自于:

 mp.weixin.qq.com --> 基本配置


5.1.3 添加js安全域名


 公众号设置 —> 功能设置 —> JS接口安全域名


 按照给出的提示设置上面定义过的wjwezhan.zaixianke.cn


5.1.4 添加白名单ip


 映射服务器地址:64.69.43.237

49.png


本机ip地址: 211.162.81.72

50.png


5.1.5 设置自动回复


 公众号设置自动回复后连接到http://wjwezhan.zaixianke.cn/login.html,登录后是用快递助手,点击扫码按钮即可跳出扫码界面。


6 取件


设计两种取件方式:

 第一种是扫描用户的二维码,展示出该用户所有的快递,再对每一个快递可以有取件的操作。

 第二种是快递员扫描某个快递的二维码,再将其显示后可以有一个取件的操作。


6.1 完善后台代码


 BaseExpressDao中添加根据手机号和快递状态查询的方法:


/**
 * 根据用户手机号和快递状态查询所有快递
 * @param userPhone 手机号
 * @param status    快递状态
 * @return 查询的快递信息,手机号不存在时返回null
 */
List<Express> findByUserPhoneAndStatus(String userPhone, int status);


在接口实现类中进行实现:


@Override
public List<Express> findByUserPhoneAndStatus(String userPhone, int status) {
    ArrayList<Express> data = new ArrayList<>();
    Connection conn = DruidUtil.getConnection();
    PreparedStatement state = null;
    ResultSet result = null;
    try {
        state = conn.prepareStatement(SQL_FIND_BY_USERPHONE_AND_STATUS);
        state.setString(1,userPhone);
        state.setInt(2,status);
        result = state.executeQuery();
        while (result.next()){
            int id = result.getInt("id");
            String number = result.getString("number");
            String username = result.getString("username");
            String company = result.getString("company");
            String code = result.getString("code");
            Timestamp inTime = result.getTimestamp("inTime");
            Timestamp outTime = result.getTimestamp("outTime");
            String sysPhone = result.getString("sysPhone");
            Express e = new Express(id, number, username, userPhone, company, code, inTime, outTime, status, sysPhone);
            data.add(e);
        }
    }catch (SQLException throwables){
        throwables.printStackTrace();
    }finally {
        DruidUtil.close(conn,state,result);
    }
    return data;
}


service中添加相应方法:


public static List<Express> findByUserPhoneAndStatus(String userPhone, int status) {
    return dao.findByUserPhoneAndStatus(userPhone, status);
}


6.2 微信端后台实现


6.2.1 快递展示操作


 wx包下ExpressController中添加查询快递的方法,如果用户扫描的是个人二维码,则展示其所有快递:


@ResponseBody("/wx/userExpressList.do")
public String expressList(HttpServletRequest request, HttpServletResponse response){
    String userPhone = request.getParameter("userPhone");
    List<Express> list = ExpressService.findByUserPhoneAndStatus(userPhone, 0);
    // 转变为更好显示的格式
    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);
    }
    Message msg = new Message();
    if (list.size() == 0){
        msg.setStatus(-1);
        msg.setResult("未查询到快递");
    }else {
        msg.setStatus(0);
        msg.setResult("查询成功");
        msg.setData(list2);
    }
    String json = JSONUtil.toJSON(msg);
    return json;
}


6.2.2 取件操作(更新status)


 QRCodeController中添加取件的操作:


@ResponseBody("/wx/updateStatus.do")
public String updateExpressStatus(HttpServletRequest request, HttpServletResponse response){
    String code = request.getParameter("code");
    boolean flag = ExpressService.updateStatus(code);
    Message msg = new Message();
    if (flag){
        msg.setStatus(0);
        msg.setResult("取件成功");
    }else {
        msg.setStatus(-1);
        msg.setResult("取件码不存在,请更新二维码");
    }
    String json = JSONUtil.toJSON(msg);
    return json;
}
QRCodeController中添加根据取件码输入框中的取件码查询快递的操作(应用于第二种取件方式):
@ResponseBody("/wx/findExpressByCode.do")
public String findExpressByCode(HttpServletRequest request, HttpServletResponse response){
    String code = request.getParameter("code");
    Express e = ExpressService.findByCode(code);
    BootStrapTableExpress e2 = null;
    if (e != null){
        String inTime = DateFormatUtil.format(e.getInTime());
        String status = "待取件";
        e2 = new BootStrapTableExpress(e.getId(),e.getNumber(),e.getUsername(),e.getUserPhone(),e.getCompany(),code,inTime,null,status,e.getSysPhone());
    }
    Message msg = new Message();
    if (e == null){
        msg.setStatus(-1);
        msg.setResult("取件码不存在");
    }else {
        msg.setStatus(0);
        msg.setResult("查询成功");
        msg.setData(e2);
    }
    String json = JSONUtil.toJSON(msg);
    return json;
}


相关文章
|
2月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
8月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
409 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
9月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
585 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
456 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
9月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
461 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
8月前
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
261 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
983 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
303 0
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
433 6

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    351
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    116
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    138
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    110
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    208
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    232
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    125
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    61
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    119
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    158