购物车 -- 结算、提交订单接口开发

article/2025/8/20 11:20:46

在购物车列表中选择对应的商品之后,点击提交生成订单的过程

流程图:

 

接口实现:

收货地址列表接口:

此操作的数据库实现可以通过tkMapper通过方法完成

service接口:

package com.qfedu.fmmall.service;import com.qfedu.fmmall.vo.R;/*** @Description:* @Author : Jerry* @create : 2022-06-30 14:59*/
public interface UserAddrService {public R listAddrByUid(int userId);}

service实现类:

package com.qfedu.fmmall.service.impl;import com.qfedu.fmmall.dao.UserAddrMapper;
import com.qfedu.fmmall.entity.UserAddr;
import com.qfedu.fmmall.service.UserAddrService;
import com.qfedu.fmmall.vo.R;
import com.qfedu.fmmall.vo.ResStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import java.util.List;/*** @Description:* @Author : Jerry* @create : 2022-06-30 15:01*/
public class UserAddrServiceImpl implements UserAddrService {@Autowiredprivate UserAddrMapper userAddrMapper;@Transactional(propagation = Propagation.SUPPORTS)public R listAddrByUid(int userId) {Example example = new Example(UserAddrMapper.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("userId",userId);criteria.andEqualTo("status",1);List<UserAddr> userAddrs = userAddrMapper.selectByExample(example);R r = new R(ResStatus.OK, "success", userAddrs);return r;}
}

controller:

package com.qfedu.controller;import com.qfedu.fmmall.service.UserAddrService;
import com.qfedu.fmmall.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** @Description:* @Author : Jerry* @create : 2022-06-30 15:11*/
@RestController
@CrossOrigin
@RequestMapping("/userAddr")
public class UserAddrController {@Autowiredprivate UserAddrService userAddrService;@GetMapping("/login")public R listAddr(Integer userId, @RequestHeader("token") String token){R r = userAddrService.listAddrByUid(userId);return r;}}

购物车记录列表接口:

根据一个id的集合,查询购物车记录:

Mapper接口定义查询方法:

 映射配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.fmmall.dao.ShoppingCartMapper">
<resultMap id="ShoppingCartVOMap" type="com.qfedu.fmmall.entity.ShoppingCartVO"><result column="cart_id" jdbcType="INTEGER" property="cartId" /><result column="product_id" jdbcType="VARCHAR" property="productId" /><result column="sku_id" jdbcType="VARCHAR" property="skuId" /><result column="user_id" jdbcType="VARCHAR" property="userId" /><result column="cart_num" jdbcType="VARCHAR" property="cartNum" /><result column="cart_time" jdbcType="VARCHAR" property="cartTime" /><result column="product_price" jdbcType="DECIMAL" property="productPrice" /><result column="sku_props" jdbcType="VARCHAR" property="skuProps" /><result column="product_name" jdbcType="VARCHAR" property="productName" /><result column="url" jdbcType="VARCHAR" property="productImg" /><result column="original_price" jdbcType="VARCHAR" property="originalPrice" /><result column="sell_price" jdbcType="VARCHAR" property="sellPrice" /><result column="sku_name" jdbcType="VARCHAR" property="skuName" />
</resultMap>
<select id="selectShopCartByCids" resultMap="ShoppingCartVOMap">select c.cart_id,c.product_id,c.sku_id,c.user_id,c.cart_num,c.cart_time,c.product_price,c.sku_props,p.product_name, i.url,s.original_price,s.sell_price,s.sku_namefrom shopping_cart cINNER JOIN product pINNER JOIN product_img iINNER JOIN product_sku sON c.product_id = p.product_idand i.item_id = p.product_idand c.sku_id = s.sku_idwhere i.is_main = 1 and c.cart_id in<foreach collection="list" item="cid" separator="," open="(" close=")">#{cid}</foreach>
</select>
</mapper>

service接口:

 

service实现类:

使String变成集合

 

@Override
public R listShoppingCartsByCids(String cids) {String[] arr = cids.split(",");List<Integer> cardIds = new ArrayList<>();for(int i=0;i< arr.length;i++){cardIds.add(Integer.parseInt(arr[i]));}List<ShoppingCartVO> list = shoppingCartMapper.selectShopCartByCids(cardIds);R r = new R(ResStatus.OK, "success", list);return r;
}

controller:

@GetMapping("/listByCids")
public R listByCids(String cids, @RequestHeader("token")String token){R r = shoppingCartService.listShoppingCartsByCids(cids);//需用逗号隔开return r;
}

下一章订单提交及支付.............


http://chatgpt.dhexx.cn/article/FKhdRQoS.shtml

相关文章

订单操作-订单详情查询代码实现

订单详情 在order-list.jsp页面上对"详情"添加链接 <button type"button" class"btn bg-olive btn-xs" onclick"location.href${pageContext.request.contextPath}/orders/findById.do?id${orders.id}"> 详情</button>…

电商项目 - 用户订单确认及下订单操作

一、订单确认页功能流程图 1、进入登录确认页之前会&#xff0c;先进入登录拦截器 同样是使用ThreadLocal来存储用户的登录信息&#xff0c;从请求的request中获取登录信息 Component public class LoginUserInterceptor implements HandlerInterceptor {public static Threa…

解决支付订单,重复提交问题!

点击上方“朱小厮的博客”&#xff0c;选择“设为星标” 后台回复"书"&#xff0c;获取 后台回复“k8s”&#xff0c;可领取k8s资料 概述 如图是一个简化的下单流程&#xff0c;首先是提交订单&#xff0c;然后是支付。支付的话&#xff0c;一般是走支付网关&#xf…

SpringBoot解决用户重复提交订单(方式二:通过Redis实现)

文章目录 前言1、方案实践1.1、引入Redis依赖1.2、添加Redis环境配置1.3、编写获取请求唯一ID的接口&#xff0c;同时将唯一ID存入redis 1.4、编写服务验证逻辑&#xff0c;通过 aop 代理方式实现1.5、在相关的业务接口上&#xff0c;增加SubmitToken注解即可 2、小结 前言 在…

后端怎样防止重复提交订单?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 一般我们都是这样做的&#xff1a; 创建订单的时候&#xff0c;用订单信息计算一个哈希值&#xff0c;判断redis中是否有key&#xff0c;有则不允许重复提交&#xff0c;没有则生成一个新key&…

后端怎么防止重复提交订单

前言 接口幂等性问题&#xff0c;对于开发人员来说&#xff0c;是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法&#xff0c;绝大部分内容我在项目中实践过的&#xff0c;给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景&#xff1a; 有时…

bootstrap订单提交页面

下载地址 基于bootstrap实现的订单提交页面&#xff0c;常见的电商购物网站订单确认提交页面。 dd:

移动端-确认订单页面

项目准备 lib文件中存放外来的文件&#xff0c;就比如这个项目使用到字体图标&#xff0c;那存放的就是字体图标的文件&#xff0c;css 样式&#xff0c;images 重要的图片&#xff0c;uploads 页面随时更新的图片&#xff0c;其次就是html文件。 base.css *{margin: 0;pad…

confirm-order提交订单

目录 顶部导航条&#xff1a;复用head组件新增收货地址订单收货地址页面顶部导航条&#xff1a;复用head组件无地址地址列表新增地址 增加收货地址add_address顶部导航条&#xff1a;复用head组件地址信息表单其他组件 送达时间商店商品底部弹出消息&#xff1a;复用alertTip组…

订单。。。

一、库存扣减和订单表不一致 1、网络抖动—网速是好是坏&#xff0c;不稳定。最大延迟与最小延迟的时间差&#xff0c;如最大延迟是20毫秒&#xff0c;最小延迟为5毫秒&#xff0c;那么网络抖动就是15毫秒 2、库存数据不一致的原因&#xff1a; 1&#xff09;事务性的问题 – …

实现提交订单的功能

根据购物车中的商品名称和数量生成了结算信息&#xff0c;并可以填写收货人姓名、联系电话和收货地址&#xff0c;本任务将实现提交订单的功能。 一、创建订单页面order.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"…

美多商城项目:结算订单与提交订单

一、结算订单 1. 结算订单逻辑分析 结算订单是从Redis购物车中查询出被勾选的商品信息进行结算并展示。 2. 结算订单接口设计和定义 1.请求方式 选项方案请求方法GET请求地址/orders/settlement/ 3. 结算订单后端逻辑实现 class OrderSettlementView(LoginRequiredMixin, Vie…

电商系统-提交订单并发处理

在多个用户同时发起对一个商品的下单请求时&#xff0c;先查询商品库存&#xff0c;再修改商品库存&#xff0c;会出现资源竞争问题&#xff0c;导致库存的最终结果出现异常。 1、并发下单问题演示 每个不同的用户在程序上&#xff0c;我们可以理解成不同的线程&#xff0c;每…

Android Studio_Toast消息提醒

Android Studio_Toast消息提醒 1、Toast是Android系统提供的一种非常简洁的消息提醒方式&#xff0c;程序中可以使用它实现将短小的消息通知给用户&#xff0c;一点时间后自动消失&#xff0c;且不占用屏幕的任何空间。 2、Toast用法其实非常简单&#xff0c;通过静态方法make…

Vue 消息提示通知的几种方式汇总

Vue 消息提示通知组件&#xff08;Message /Notification&#xff09;是我们日常开发中经常使用的组件&#xff0c;它可用作与用户交互的反馈提示&#xff0c;信息提交成功、错误、操作警告等场景使用。原生JavaScript 提供了 alert、prompt、confirm 等方法 提示框1>Messag…

java信息提醒怎么实现_jsp怎么实现消息提醒

如果你是平台级别的系统,可以考虑消息队列的中间件,例如:阿里巴巴的rocketmq,用这个来做消息订阅与分发。 如果你只是简简单单的需要提示到web(jsp)页面,可以用js定时ajax访问后台,后台来确定是否有数据更新,无论这个数据是哪来的。 推荐课程:Java教程。 这里就使用在JSP页面…

RabbitMQ真延时队列实现消息提醒功能

RabbitMQ真延时队列实现消息提醒功能 一、需求场景 用户可以制定多个计划&#xff0c;同时可给该计划设置是否需要到点提醒&#xff0c;且中途可以取消提醒或修改提醒时间。 二、需要解决的问题 学习过rabbitmq的同学们都知道&#xff0c;通过TTL死信队列可以实现延时队列的…

企业微信 消息 html,企业微信怎么设置消息提醒

企业微信是一款非常不错的办公软件&#xff0c;用户加入企业群就能实时了解企业的动态。而且大家只需设置消息提醒&#xff0c;软件就会在第一时间通知你&#xff0c;不会让你错过任何重要的消息&#xff0c;下面小编为大家带来相关的设置教程。 方法/步骤分享&#xff1a; 1、…

vue websocket 新消息提醒

概述&#xff1a; 不是当前聊天&#xff0c;有其他消息来就通过2种方式接受到提醒。在连接的上下文中判断&#xff0c;符合条件的弹框&#xff0c;显示红点&#xff0c;此处调用了element弹框组件列表点击事件&#xff0c;红点消失列表显示&#xff0c;属性中包含小红点 前提…

html5载入提示音,html5新消息提示声音

【实例简介】 【实例截图】 【核心代码】HTML5手机声音提示 #chatBox{width:400px;border:1px solid #d3d3d3;margin:50px auto;} #chat {max-height:220px;overflow-y:auto;max-width:400px;} #chat > ul > li{padding:3px;clear:both;padding:4px;margin:10px 0px 5px …