当前位置: 首页 > news >正文

尚品汇-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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • How can I stream a response from LangChain‘s OpenAI using Flask API?
  • 面试经典150题——删除有序数组中的重复项
  • 某花顺爬虫逆向分析
  • 基于主从Reactor模型实现高并发服务器
  • 【后端】【nginx】nginx常用命令
  • 高校心理辅导系统:Spring Boot技术实现指南
  • 三十种编程语言庆祝【国庆节】!!!
  • flask的学习记录
  • Transformer模型-7- Decoder
  • 如何有效检测住宅IP真伪?
  • Lubuntu电源管理
  • 深度学习经典模型之BERT(上)
  • 深入解析仓颉语言中的变量操作与赋值技巧
  • 十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能
  • 【C++】C++入门概念(一)
  • ERLANG 网工修炼笔记 ---- UDP
  • HashMap ConcurrentHashMap
  • java中具有继承关系的类及其对象初始化顺序
  • Promise面试题,控制异步流程
  • Python语法速览与机器学习开发环境搭建
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • yii2中session跨域名的问题
  • 从重复到重用
  • 基于web的全景—— Pannellum小试
  • 前端设计模式
  • 携程小程序初体验
  • 学习笔记TF060:图像语音结合,看图说话
  • C# - 为值类型重定义相等性
  • Hibernate主键生成策略及选择
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • # Kafka_深入探秘者(2):kafka 生产者
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #laravel 通过手动安装依赖PHPExcel#
  • #pragma data_seg 共享数据区(转)
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)MFC+openGL单文档框架glFrame
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (一)基于IDEA的JAVA基础12
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .cn根服务器被攻击之后
  • .env.development、.env.production、.env.staging
  • .net core控制台应用程序初识
  • .NET delegate 委托 、 Event 事件