用的技术?
- 后端:Springboot,Mybatis
- 后端:Vue,AJAX(axios)
项目描述?
首页展示商家分类信息,进入商家分类后展示商家信息,点餐之前需要登录,点餐之后选择配送地址,结算后生成订单,返回首页
数据库几张表,表之间的关联关系?
- 用户表(user)
- 商家表(business)
- 食品表(food)
- 购物车表(cart)
- 订单表(orders)
- 订单明细表(orderdetailet)
- 配送地址表(deliveryaddress)
PO层
cart
//多对一:多个购物车中有同一个商家
private Business business = new Business();
//多对一:多个购物车中有有同一个食品
private Food food = new Food();
orderdetailet
//多对一:多个订单明细中有同一个食品
private Food food;
orders
//多对一:多个订单中有同一个商家
private Business business = new Business();
//一对多:一个订单中有多个订单明细
private List<Orderdetailet> list = new ArrayList<>();
有哪些业务?
核心业务:生成订单(事务)
@Override
@Transactional
public int createOrders(Orders orders) {
//1、查询当前用户购物车中当前商家的所有食品
Cart cart = new Cart();
cart.setUserId(orders.getUserId());
cart.setBusinessId(orders.getBusinessId());
List<Cart> cartList = cartMapper.listCart(cart);
//2、创建订单(返回生成的订单编号)
orders.setOrderDate(CommonUtil.getCurrentDate());
ordersMapper.createOrders(orders);
int orderId = orders.getOrderId();
//3、批量添加订单明细
List<OrderDetailet> list = new ArrayList<>();
for(Cart c : cartList) {
OrderDetailet od = new OrderDetailet();
od.setOrderId(orderId);
od.setFoodId(c.getFoodId());
od.setQuantity(c.getQuantity());
list.add(od);
}
orderDetailetMapper.saveOrderDetailetBatch(list);
//4、从购物车表中删除相关食品信息
cartMapper.removeCart(cart);
return orderId;
}
遇到哪些问题?
1.跨域问题:
AJAX传值是同源策略(ip,端口,协议都相同),需要配置前后端的服务器端口号
- 前端配置:后端核心配置文件resources文件夹下的application.properties中配置了后端服务器端口号server.port=8888
需要配置前端main.js中
//设置axios中的基础url部分(连的是后台地址)
axios.defaults.baseURL = 'http://localhost:8888/';
- 后端配置: WebMvcConfig.java配置文件中
@Configuration
public class WebMvcConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
/*
* addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。
* allowedMethods:允许的请求方式,如:POST、GET、PUT、DELETE等。
* allowedOrigins:允许访问的url,可以固定单条或者多条内容,如:"http://www.baidu.com"。
* allowedHeaders:允许的请求header,可以自定义设置任意请求头信息。
* maxAge:配置预检请求的有效时间
*/
registry.addMapping("/**")
.allowedOrigins("http://localhost:8081")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
.allowedHeaders("*")
.maxAge(36000);
}
};
}
}