一。地址管理
1.前端改为
userAddress

2.
OrderController增加两个需要的元素

3.接口 服务也加上去
4.
在OrderServiceImpl实现层判断是否为新地址再进行保存
//先判断新老地址
if (orders.getUserAddress().equals("newAddress")){//存入数据库UserAddress userAddress = new UserAddress();userAddress.setAddress(address);userAddress.setRemark(remark);userAddress.setIsdefault(1);userAddress.setUserId(user.getId());QueryWrapper wrapper = new QueryWrapper();wrapper.eq("isdefault",1);UserAddress oldDefault = userAddressMapper.selectOne(wrapper);oldDefault.setIsdefault(0);userAddressMapper.updateById(oldDefault);userAddressMapper.insert(userAddress);orders.setUserAddress(address);
}
5.测试保存


二。订单详情的保存
1.OrderServiceImpl实现层增加订单详情保存
package com.redhat.mmall002.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.redhat.mmall002.entity.*;
import com.redhat.mmall002.mapper.CartMapper;
import com.redhat.mmall002.mapper.OrderDetailMapper;
import com.redhat.mmall002.mapper.OrderMapper;
import com.redhat.mmall002.mapper.UserAddressMapper;
import com.redhat.mmall002.service.OrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** <p>* 服务实现类* </p>** @author 红帽* @since 2021-11-24*/
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Orders> implements OrderService {@Autowiredprivate UserAddressMapper userAddressMapper;@Autowiredprivate CartMapper cartMapper;@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate OrderDetailMapper orderDetailMapper;@Overridepublic boolean save(Orders orders, User user, String address, String remark) {//先判断新老地址if (orders.getUserAddress().equals("newAddress")){//存入数据库UserAddress userAddress = new UserAddress();userAddress.setAddress(address);userAddress.setRemark(remark);userAddress.setIsdefault(1);userAddress.setUserId(user.getId());QueryWrapper wrapper = new QueryWrapper();wrapper.eq("isdefault",1);UserAddress oldDefault = userAddressMapper.selectOne(wrapper);oldDefault.setIsdefault(0);userAddressMapper.updateById(oldDefault);userAddressMapper.insert(userAddress);orders.setUserAddress(address);}orders.setUserId(user.getId());orders.setLoginName(user.getLoginName());//生成订单号码String seriaNumber = null;try{StringBuffer result = new StringBuffer();for (int i = 0;i<32;i++){result.append(Integer.toHexString(new Random().nextInt(16)));}seriaNumber =result.toString().toUpperCase();}catch (Exception e){e.printStackTrace();}orders.setSerialnumber(seriaNumber);orderMapper.insert(orders);//保存订单详情QueryWrapper wrapper = new QueryWrapper();wrapper.eq("user_id",user.getId());List<Cart> cartList =cartMapper.selectList(wrapper);List<OrderDetail> orderDetailList = new ArrayList<>();for (Cart cart : cartList){OrderDetail orderDetail = new OrderDetail();BeanUtils.copyProperties(cart,orderDetail);orderDetail.setId(null);orderDetail.setOrderId(orders.getId());orderDetailMapper.insert(orderDetail);}return true;}
}
打开页面测试提交

保存到数据库订单详情表
保存到订单表
三。前端页面的跳转与映射
1.设置跳转路径

测试流程点击提交后跳转页面

2.设置购物车判断当没有物品时候进行提示
【1】settlement1前端页面里面设置判断方法

【2】 settlement.js中实现方法
//判断购物车是否有商品
function settlement2() {var totalCost = $("#totalprice").text();if (totalCost=="¥0"){alert("购物车为空,不能结算!!!")return false;}window.location.href="/cart/settlement2"
}
【3】添加订单存储数据访问

【4】 settlement3前端映射

提交测试

四。用户信息管理
1.
UserController类里面编写对应页面跳转路径
@GetMapping("/userInfo")
public ModelAndView userInfo(HttpSession session){User user = (User) session.getAttribute("user");ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("userInfo");modelAndView.addObject("cartList",cartService.findAllCartVOByUserId(user.getId()));return modelAndView;
}
2.修改前端页面跳转路径

3.测试页面跳转

4.对用户前端进行正常显示
【1】前端页面的路径改写

【2】设置未登录访问用户信息的过滤器
【3】设置性别枚举
package com.redhat.mmall002.enums;import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;@Getter
public enum GenderEnum {WOMAN(0,"女"),MAN(1,"男");@EnumValueprivate Integer code;private String value;GenderEnum(Integer code, String value) {this.code = code;this.value = value;}
}
【4】配置枚举文件扫描

【5】最后测试正常显示















