个人技术分享

项目由maven管理依赖,mybatis(plue)与数据库交互,一共14张表,功能都经过测试无问题,需要可在最下方扫码联系我。(有文档,调试,讲解可加购)

商品推荐板块基于协同过滤算法,算法由用户收藏和用户购买两个基准点进行算法推荐。

本电商基本功能有:

用户管理

权限管理

商品管理(有富文本编辑器可以添加商品介绍)

商品分类管理

菜单管理

公告管理

日志管理

轮播图管理

订单管理(发货,用户收货,用户可退货,管理员审批退货)

评论管理(评论可贴图,管理员可回复评论,可做成商家回复评论)

项目截图:

部分表设计:

user用户表

列名

数据类型

主键

注释

允许空

id

bigint

是

否

username

varchar

用户名

否

password

varchar

密码

nick_name

varchar

昵称

email

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;

}

需要请扫码联系我: