项目由maven管理依赖,mybatis(plue)与数据库交互,一共14张表,功能都经过测试无问题,需要可在最下方扫码联系我。(有文档,调试,讲解可加购)
商品推荐板块基于协同过滤算法,算法由用户收藏和用户购买两个基准点进行算法推荐。
本电商基本功能有:
用户管理
权限管理
商品管理(有富文本编辑器可以添加商品介绍)
商品分类管理
菜单管理
公告管理
日志管理
轮播图管理
订单管理(发货,用户收货,用户可退货,管理员审批退货)
评论管理(评论可贴图,管理员可回复评论,可做成商家回复评论)
项目截图:
部分表设计:
user用户表
列名 | 数据类型 | 主键 | 注释 | 允许空 |
id | bigint | 是 | 否 | |
username | varchar | 用户名 | 否 | |
password | varchar | 密码 | ||
nick_name | varchar | 昵称 | ||
| varchar | 邮箱 | ||
phone | varchar | 手机号 | ||
avatar | varchar | 头像 | ||
role | varchar | 角色 | ||
address | varchar | 地址 | ||
age | int | 年龄 | ||
account | decimal | 账户余额 |
role角色表
列名 | 数据类型 | 主键 | 注释 | 允许空 |
id | bigint | 是 | 否 | |
name | varchar | 名称 | ||
description | varchar | 描述 | ||
permission | varchar | 权限列表 |
permission权限表
列名 | 数据类型 | 主键 | 注释 | 允许空 |
id | bigint | 是 | 否 | |
name | varchar | 名称 | ||
description | varchar | 描述 | ||
path | varchar | 菜单路径 | ||
icon | varchar | 图标 |
order订单表
列名 | 数据类型 | 主键 | 注释 | 允许空 |
id | bigint | 是 | 否 | |
order_no | varchar | 订单编号 | ||
total_price | decimal | 总价 | ||
user_id | bigint | 下单人id | ||
link_user | varchar | 联系人 | ||
link_phone | varchar | 联系电话 | ||
link_address | varchar | 送货地址 | ||
state | varchar | 状态 | ||
create_time | varchar | 创建时间 |
部分代码设计:
import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.common.Result;
import com.example.entity.Cart;
import com.example.entity.User;
import com.example.service.CartService;
import com.example.service.UserService;
import org.json.JSONException;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/cart")
public class CartController {
@Resource
private CartService cartService;
@Resource
private HttpServletRequest request;
@Resource
private UserService userService;
public User getUser() {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
public Result<?> save(@RequestBody Cart cart) {
cart.setCreateTime(DateUtil.now());
// 加入购物车,相同的商品累加
Cart userCart = cartService.getOne(Wrappers.<Cart>lambdaQuery().eq(Cart::getGoodsId, cart.getGoodsId()).eq(Cart::getUserId, cart.getUserId()));
if (userCart != null) {
userCart.setCount(cart.getCount() + userCart.getCount());
cartService.updateById(userCart);
} else {
// 不同商品添加新的购物车记录
cartService.save(cart);
}
return Result.success();
}
@PutMapping
public Result<?> update(@RequestBody Cart cart) {
cartService.updateById(cart);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
cartService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
return Result.success(cartService.getById(id));
}
@GetMapping
public Result<?> findAll() throws JSONException {
List<Cart> carts = new ArrayList<>();
User user = getUser();
if (user != null) {
carts = cartService.list(Wrappers.<Cart>lambdaQuery().eq(Cart::getUserId, getUser().getId()));
}
return Result.success(cartService.findAll(carts));
}
@GetMapping("/page")
public Result<?> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<Cart> query = Wrappers.<Cart>lambdaQuery().orderByDesc(Cart::getId);
IPage<Cart> page = cartService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
}
购物车实体类:
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
@Data
@TableName("cart")
public class Cart extends Model<Cart> {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 商品id
*/
private Long goodsId;
/**
* 用户id
*/
private Long userId;
/**
* 商品数量
*/
private Integer count;
private String createTime;
@TableField(exist = false)
private Goods goods;
}
需要请扫码联系我: