尚品汇-H5移动端整合系统(五十五)

目录:

(1)运行前端页面

(2)启动前端页面

(3)添加搜索分类接口

(4)购物车模块修改

(5)登录模块

(6)订单模块

(7)支付系统

(8)查看我的订单

(1)运行前端页面

将页面放入nginx中 配置nginx.conf 

server {listen       8989;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   h5;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}     }

前面用的8086,这里新添加一个server 

重要! 访问首页 之后  点击我的 设置 修改 base路径 改为当前网关地址 http://localhost

(2)启动前端页面

ServerGatewayApplication :80/

ServiceProductApplication [devtools] :8206/

ServiceListApplication [devtools] :8203/

ServiceItemApplication [devtools] :8202/

查看首页,

商品检索:

在Nacos网关配置中添加配置

- id: service-list

          uri: lb://service-list

          predicates:

            - Path=/*/list/** # 路径匹配

商品详情

需要项目启动,启动成功后就行获取数据列表

其次需要修改配置:

(3)添加搜索分类接口

 这个分类接口不同需要修改:

service-product

代码跟原来写的一样,只是路经不同,新建一个conttroller

/*** date:2022/6/21 10:34* 描述:**/
@RestController
@RequestMapping("/api/product/")
public class IndexApiController {@Autowiredprivate ManageService manageService;@GetMapping("getBaseCategoryList")public Result getBaseCategoryList(){//  调用服务层方法List<JSONObject> list = manageService.getBaseCategoryList();return Result.ok(list);}
}

 

 

(4)购物车模块修改

 

 实现选择清空状态保存:

购物车控制器:


@GetMapping("/allCheckCart/{isChecked}")
public Result allCheckCart(@PathVariable Integer isChecked,HttpServletRequest request){//  获取用户IdString userId = AuthContextHolder.getUserId(request);//  判断用户Id 为空if (StringUtils.isEmpty(userId)){userId = AuthContextHolder.getUserTempId(request);}//  调用方法this.cartService.allCheckCart(userId,isChecked);//  默认返回return Result.ok();
}

接口: 


/*** 选中购物车列表* @param userId* @param isChecked*/
void allCheckCart(String userId, Integer isChecked);

实现类: 


@Override
public void allCheckCart(String userId, Integer isChecked) {//  获取到购物车keyString cartKey = this.getCartKey(userId);List<CartInfo> cartInfoList = this.redisTemplate.opsForHash().values(cartKey);//  声明一个Map 集合HashMap<String, Object> hashMap = new HashMap<>();//  循环遍历for (CartInfo cartInfo : cartInfoList) {cartInfo.setIsChecked(isChecked);hashMap.put(cartInfo.getSkuId().toString(),cartInfo);}//  将数据存储到购物车中this.redisTemplate.opsForHash().putAll(cartKey,hashMap);
}

选中后,再刷新页面也可以选中: 

清空: /api/cart/clearCart

@GetMapping("clearCart")
public Result clearCart(HttpServletRequest request){// 如何获取userIdString userId = AuthContextHolder.getUserId(request);if (StringUtils.isEmpty(userId)) {// 获取临时用户IduserId = AuthContextHolder.getUserTempId(request);}cartService.clearCart(userId);return Result.ok();
}
/*** 清空购物车* @param userId*/
void clearCart(String userId);

@Override
public void clearCart(String userId) {//  获取购物车keyString cartKey = getCartKey(userId);//  删除数据redisTemplate.delete(cartKey);
}

点击清空: 

清空后刷新页面就没了 

(5)登录模块

点击结算,判断是否登录,进行跳转登录页面 

登录模块信息发生变化:

将原来的接收对象UserInfo 改为LoginVo

@Data
@ApiModel(description="登录对象")
public class LoginVo {@ApiModelProperty(value = "手机号")private String phone;@ApiModelProperty(value = "密码")private String password;@ApiModelProperty(value = "IP")private String ip;
}

 这里可以改登录的接口实体类,先进行演示,但是已改就不能通用了,我们可以吧这个接口改成通用的接口,或者重新写一个登录的接口

@PostMapping("login")
public Result login(@RequestBody LoginVo loginVo, HttpServletRequest request){控制器内容不变
}

接口: 

UserInfo login(LoginVo loginVo);

实现类: 


@Override
public UserInfo login(LoginVo loginVo) {//  select * from user_info where login_name = ? and passwd = ?QueryWrapper<UserInfo> userInfoQueryWrapper = new QueryWrapper<>();//  adminuserInfoQueryWrapper.eq("login_name",loginVo.getPhone());//  111111 ---> 加密之后的数据。 对其进行了md5加密String passwd = loginVo.getPassword();String newPassword = DigestUtils.md5DigestAsHex(passwd.getBytes());//  96e79218965eb72c92a549dd5a330112userInfoQueryWrapper.eq("passwd",newPassword);UserInfo info = userInfoMapper.selectOne(userInfoQueryWrapper);//  判断if (info!=null){return info;}return null;
}

 

登录成功跳转到订单页面: 

(6)订单模块

点击去结算:

 

收货地址列表

控制器:http://localhost/api/user/userAddress/auth/findUserAddressList

//  http://localhost/api/user/userAddress/auth/findUserAddressList
@GetMapping("userAddress/auth/findUserAddressList")
public Result findUserAddressList(HttpServletRequest request){String userId = AuthContextHolder.getUserId(request);return Result.ok(userAddressService.findUserAddressListByUserId(userId));
}

 

 (7)支付系统

这里我们现为了演示,先修改部分代码,到时候需要提供两个接口 

生成二维码:要替换掉原来的对象AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
bizContent.put("product_code", "QUICK_WAP_WAY");

 

(8)查看我的订单

添加一个状态查询参数: 

@GetMapping("/auth/{page}/{limit}")public Result getOrderPage(@PathVariable Long page,@PathVariable Long limit,HttpServletRequest request){//  获取到用户IdString userId = AuthContextHolder.getUserId(request);String orderStatus = request.getParameter("orderStatus");//  声明一个 page 对象Page<OrderInfo> orderInfoPage = new Page<>(page, limit);//  调用服务层方法查询数据:第二个参数?IPage<OrderInfo> infoIPage = this.orderService.getOrderPage(orderInfoPage,userId,orderStatus);//  返回数据return Result.ok(infoIPage);}

    @Overridepublic IPage<OrderInfo> getOrderPage(Page<OrderInfo> orderInfoPage, String userId, String orderStatus) {IPage<OrderInfo> infoIPage = orderInfoMapper.selectUserOrderPage(orderInfoPage,userId,orderStatus);//  获取到订单状态:中文infoIPage.getRecords().stream().forEach(orderInfo -> {orderInfo.setOrderStatusName(OrderStatus.getStatusNameByStatus(orderInfo.getOrderStatus()));});//  返回数据。return infoIPage;}

IPage<OrderInfo> selectUserOrderPage(Page<OrderInfo> orderInfoPage, @Param("userId") String userId, @Param("orderStatus")String orderStatus);

<select id="selectUserOrderPage" resultMap="OrderInfoMap">SELECToi.id,oi.consignee,oi.consignee_tel,oi.total_amount,oi.order_status,oi.user_id,oi.payment_way,oi.delivery_address,oi.order_comment,oi.out_trade_no,oi.trade_body,oi.create_time,oi.expire_time,oi.process_status,od.id detail_id,od.order_id,od.sku_id,od.sku_name,od.img_url,od.order_price,od.sku_num,od.create_timeFROMorder_info oiINNER JOIN order_detail od ON od.order_id = oi.id<where>AND user_id = #{userId}AND oi.order_status NOT IN ('CLOSED', 'SPLIT')<if test="orderStatus != null and orderStatus != ''">and oi.order_status = #{orderStatus}</if></where>ORDER BYoi.id DESC
</select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器 描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中&#xff0c;并例化。 优先编码器Ⅰ的代码如下&#xff1a; module…

[python]从零开始的PySide安装配置教程

一、PySide是什么&#xff1f; PySide 是 Qt for Python 项目的一部分&#xff0c;它提供了与 PyQt 类似的功能&#xff0c;使开发者能够使用 Python 编程语言来构建基于 Qt 的图形用户界面 (GUI) 应用程序。PySide 是由 Qt 公司官方维护的&#xff0c;而 PyQt 则是由第三方开发…

【Pyside】pycharm2024配置conda虚拟环境

知识拓展 Pycharm 是一个由 JetBrains 开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它主要用于 Python 编程语言的开发。Pycharm 提供了代码编辑、调试、版本控制、测试等多种功能&#xff0c;以提高 Python 开发者的效率。 Pycharm 与 Python 的关系 Pycharm 是…

【JavaEE】——多线程(join阻塞,计算,引用,状态)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;join等待线程结束 1&#xff1a;知识回顾 2&#xff1a;join的功能就是“阻塞等待” …

java之斗地主部分功能的实现

今天我们要实现斗地主中发牌和洗牌这两个功能&#xff0c;该如何去实现呢&#xff1f; 1.创建牌类&#xff1a;52张牌每一张牌包含两个属性:牌的大小和牌的花色。 故我们优先创建一个牌的类(Card)&#xff1a;包含大小和花色。 public class Card { //单张牌的大小及类型/…

无人机+自组网:中继通信增强技术详解

无人机与自组网技术的结合&#xff0c;特别是通过中继通信增强技术&#xff0c;为无人机在复杂环境中的通信提供了稳定、高效、可靠的解决方案。以下是对该技术的详细解析&#xff1a; 一、无人机自组网技术概述 无人机自组网技术是一种利用无人机作为节点&#xff0c;通过无…

proteus仿真学习(1)

一&#xff0c;创建工程 一般选择默认模式&#xff0c;不配置pcb文件 可以选用芯片型号也可以不选 不选则从零开始布局&#xff0c;没有初始最小系统。选用则有初始最小系统以及基础的main函数 本次学习使用从零开始&#xff0c;不配置固件 二&#xff0c;上手软件 1.在元件…

6--SpringBootWeb案例(详解)

目录 环境搭建 部门管理 查询部门 接口文档 代码 删除部门 接口文档 代码 新增部门 接口文档 代码 已有前端&#xff0c;根据接口文档完成后端功能的开发 成品如下&#xff1a; 环境搭建 1. 准备数据库表 (dept 、 emp) -- 部门管理 create table dept( id int un…

如何有效检测住宅IP真伪?

在当今的互联网时代&#xff0c;住宅IP&#xff08;即家庭用户通过宽带服务提供商获得的IP地址&#xff09;在跨境电商、广告投放、网络安全等多个领域扮演着重要角色。然而&#xff0c;随着网络环境的复杂化和欺诈行为的增多&#xff0c;如何有效检测和辨别住宅IP的真伪成为了…

Spring:统一结果私有属性造成的前端无法访问异常报错问题

用户未填写任何评价 1.问题复现 &#xff08;1&#xff09;看一段代码 controller&#xff1a; import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…

Centos中关闭swap分区,关闭内存交换

概述&#xff1a; Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时&#xff0c;用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大&#xff0c;一般虚拟化是不允许开启交换空间的&#xff0c;如果不关闭Swap&…

【Linux课程学习】make/Makefile:Linux项目自动化构建工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f349;一.make/Makefile的理解&#xff1a; …

关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)

博客的风格是&#xff1a;答案一定不能在问题的后面&#xff0c;要自己想、自己背&#xff1b;回答都是最精简、最精简、最精简&#xff0c;可能就几个字&#xff0c;你要自己自信的展开。 面试官01&#xff1a;什么是模数转换/ADC&#xff1f;说说模数转换的流程&#xff1f; …

基于SpringBoot+Vue+MySQL的手机销售管理系统

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着智能手机的普及和市场竞争的日益激烈&#xff0c;手机销售行业面临着前所未有的挑战与机遇。传统的手工记录和简单的电子表格管理方式已难以满足现代手机销售业务的需求&#xff0c;销售数据的混乱和管理效率低…

技术成神之路:设计模式(十四)享元模式

介绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构性设计模式&#xff0c;旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态&#xff08;可以共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xf…

C语言-文件操作-一些我想到的、见到的奇怪的问题

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C语言】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C语言-文件操作-一些我想到的、见到的奇怪的问题 前言1.在不关闭文件的情况下&#xff0c;连续多次调用 fopen() 打开同一个文件&#xff0c;会发生什么&#xff1f;1.1过…

Cursor火出圈,未来程序员还有出路吗?

大家好&#xff0c;我是凡人。 今天我表弟家邻居的阿姨&#xff0c;托他问问我目前程序员还有前景吗&#xff0c;希望我根据十几年的经验给出点建议&#xff0c;看看程序员这条路未来能不能走。 一下子不知道该怎么回复他了&#xff0c;如果是三年前问我&#xff0c;肯定毫不…

【React】React18.2.0核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!

环境介绍 每人搭建的环境不一样&#xff0c;情况不一样&#xff0c;但是原因都是下面几种&#xff1a; wvp配置不当网络端口未放开网络不通 我搭建的环境&#xff1a; WVP服务&#xff1a;windows下&#xff0c;用idea运行的源码 ZLM服务&#xff1a;虚拟机里 问题描述 1.…