项目由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;
}
需要请扫码联系我:
