第二节 业务梳理

亮子 2025-05-21 17:09:33 400 0 0 0

1、项目创建

项目创建步骤:
- 创建父项目
- 创建公共项目
- 创建认证微服务
- 创建网关微服务
- 创建电商微服务

image.png

2、登录功能

image.png

1)用户表、角色表、权限表符合数据库三范式,数据自拟
2)实现账号、密码登录功能
3)要求对账号、密码进行格式验证,包括非空验证,用户名长度不能小于8位,密码长度不小于6位,且密码必须包含字母和数字
4)未登录状态下用户不行进行任务操作
5)根据用户的权限信息动态展示左侧导航(树形结构)

3、树形菜单

image.png

    public R getUserMenuTree() {
        //--1 解析token,获取用户ID
        String token = request.getHeader("token");
        if(token == null) {
            return R.ERROR(500, "请先登录");
        }

        Claims body = Jwts.parser().setSigningKey("123456").parseClaimsJws(token).getBody();
        Integer userId = body.get("userId", Integer.class);

        //--2 获取菜单列表
        List<TbMenu> listAll = tbUserMapper.getUserMenuTree(userId);

        //--3 构建菜单树
//        List<Tree<String>> treeList = TreeUtil.build(listAll, "0", (menu, tree) -> {
//            tree.setId("" + menu.getMenuId());
//            tree.setName(menu.getMenuName());
//            tree.setParentId("" + menu.getMenuPid());
//            tree.putExtra("path", menu.getMenuPath());
//        });

        //-- 构建一级菜单
        ArrayList<TbMenu> root = new ArrayList<>();
        for (TbMenu tbMenu : listAll) {
            if(tbMenu.getMenuPid() == 0) {
                root.add(tbMenu);
            }
        }

        //-- 使用递归构建子菜单
        buildTree(root, listAll);
        return R.OK(root);
    }

4、品牌管理

image.png

image.png

1)号为必填项 排序只能是数字
2)状态在数据库里保存字段为数字
3)数据库设计时要考虑使用审计字段
4)根据品牌名称模糊查询
5)列表就可以修改品牌状态并将结果持久化到数据库
6)按照创建时间倒序排序

5、商品分类

1)、分类列表

image.png

2)、新增分类

image.png

1、按需创建品牌信息表、分类信息表、附件表、商品表等
2、使用ER图展示各类业务表之间的关联关系
3、支持以分页的形式展示所有的商品信息
4、商品列表中的需要展示商品图需多表联查获取
5、支持根据停商品名称、关键词、id等模糊查询
6、支持批量删除
7、商品列表的操作栏需要有‘商品’与‘商品附件’按钮
8、点击新增时,可以弹出新增商品的表单页
9、输入商品spu信息时,需对spu名称做重复、必填的校验
10、点击保存可保存商品信息到表里
11、点击‘商品附件’时,需要关联商品id
12、在商品附件表中需要检测定时下架的视频,附件需按照设置时间下架
13、在新增商品附件界面,可以新增、删除、修改png、jpg照片
14、点击保存,将商品附件保存到数据库
15、点击新商品时,所属分类、品牌自动回显,数据从数据库钟查询
16、自动追加出所有分类、品牌下拉列表
17、需对带*号的做必填校验
18、点击保存将数据保存到表里

6、商品管理

image.png

1.*号为必填项 排序只能是数字
2.商品名称不能含有特殊字符
3.类型在数据库里保存字段为数字枚举
4.数据库设计时要考虑使用审计字段
5.商品分类与品牌的数据来源于数据库
6.支持图片上传

7、订单维护

1)、列表展示
image.png

2)、订单基础信息

image.png

3)、商品信息
image.png

4)、订单记录

image.png

1、按需创建订单、商品、商品分类、品牌、标签、订单记录表等
2、使用ER图展示各类业务表之间的关联关系
3、支持以分页的形式展示所有的订单信息
4、订单列表中的需要展示商品图需多表联查获取
5、支持根据停商品名称、关键词、id等模糊查询、订单状态、订单类型精准匹配
6、支持批量删除
7、订单列表的操作栏需要有‘导出订单’按钮 导出信息为列表展示信息
8、点击新增时,可以弹出新增订单的表单页
9、需对带*号的做必填校验
10、选择商品,数据来源于数据库
11、自动追加出所商品下拉列表
12、选择完商品,新增订单基础信息、新增订单记录
13、新增订单记录的订单记录要按照订单记录的创建时间正序排序
14、保存时需要关联商品id与订单记录id
15、点击保存将数据保存到表里
16、订单列表页面根据订单的创建时间倒叙排序
17、订单编号使用雪花算法生成

8、审计字段

1)、实体类的基类

package com.muyu.common.core.web.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Entity基类
 *
 * @author muyu
 */
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 搜索值
     */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新者
     */
    private String updateBy;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 备注
     */
    private String remark;

    /**
     * 请求参数
     */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params;

    public Map<String, Object> getParams () {
        if (params == null) {
            params = new HashMap<>();
        }
        return params;
    }

    public void setParams (Map<String, Object> params) {
        this.params = params;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}

2)表设计

CREATE TABLE `project_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(90) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品名称',
  `introduction` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '商品描述',
  `mian_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '主类型',
  `parent_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '父类型',
  `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品类型',
  `image` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品图片',
  `carousel_images` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品轮播图',
  `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品状态',
  `rule_id` bigint DEFAULT NULL COMMENT '规格',
  `brand_id` bigint DEFAULT NULL COMMENT '品牌',
  `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '备注',
  `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='商品信息';

9、积分抽奖

业务描述:

  • 积分获取方式‌:用户通过购物、邀请好友、参与活动等方式获得积分。例如,在支付宝积分商城中,用户可以通过做任务(如签到、浏览页面)和购物来赚取积分‌1。

  • 积分使用场景‌:积分主要用于抵扣现金、兑换商品或服务。在电商平台中,积分可以用于购买商品或服务,或者兑换优惠券、礼品等‌。

  • 积分管理功能‌:系统需要具备积分余额查询、积分收支明细查询、积分任务发布等功能。用户可以查看自己的积分余额和积分的收支记录,同时平台可以发布各种赚取积分的任务‌。

  • 积分兑换机制‌:积分兑换商品或服务时,需要设置合理的兑换比例和规则。例如,用户可以使用一定数量的积分兑换特定商品或服务‌。

具体实现方式如下‌:

  • 积分获取规则‌:商家可以让出部分交易收益作为积分回馈给消费者。例如,商家可以让出3%至20%的交易收益,消费者根据消费金额获得相应比例的积分‌3。

  • 积分使用机制‌:平台可以设置积分商城,用户可以在商城中使用积分兑换商品或服务。积分兑换可以采用纯积分方式或积分加现金的方式‌。

  • 积分管理界面‌:平台需要提供用户友好的积分管理界面,包括积分余额查询、积分收支明细查询等。同时,平台管理员可以发布积分任务和调整积分规则‌。

  • 积分兑换流程‌:设置合理的兑换比例和规则,用户可以根据自己的积分数量选择兑换的商品或服务。兑换成功后,系统会扣除相应的积分‌。

(1)新增积分抽奖

image.png
image.png

(2)抽奖记录

image.png

业务需求:
1、按需创建积分抽奖相关的表信息
2、使用ER图展示各类业务表之间的关联关系
3、使用Xmind列举出来需要编写的接口
4、抽奖列表的各项信息展示正确
5、抽奖列表的有效状态展示正确,有效则表示可以参与抽奖,无效则表示无法进行
6、点击抽奖记录可以调转到抽奖的记录页面
7、抽奖记录列表分页和搜索功能无问题
8、添加抽奖记录的参与用户、中奖名单、中奖记录、活动状态需要按照原形页面创建字典、枚举
9、参与用户若为部分用户则需要选择用户等级、是否为付费会员、用户分组、用户标签来去确定是否可以添加(参加)
10、消耗积分只能为整数不可小于0
11、规则可以添加抽奖的物品,并且可以上传图片、中奖图片
12、编辑规则数量和规则概率
13、选择是否可以开启中奖名单
14、选择是否可以暂时(暂停)中奖记录
15、活动规则则为富文本的编辑器进行编辑活动的规则信息
16、点击保存和正常保存活动信息
17、正常查看积分抽奖的记录,并且可以看到积分抽奖的内容
18、抽奖时间记录为当前系统时间
19、积分抽奖页面的搜索和分页无问题
20、积分抽奖记录页面的用户搜索可以基于Uid和Uname进行查询

10、积分抽奖

image.png

业务需求:

1.用户抽奖的积分通过用户签到按钮可以进行签到
2.用户签到随机增加10-100积分
3.用户点击抽奖,扣除用户的积分
4.若用户抽奖积分为100每次抽奖为30则展示有3次抽奖机会
5.若用户积分不足则抽奖按钮为灰色
6.用户点击抽奖,需要进行抽奖,每个抽奖同时只能有一个用户进行参加,需要使用redisson分布式锁进行线程安全的考虑
7.抽奖若中奖则提示用户抽中了某物品
8.若抽奖没有抽中则提示用户没有中奖
9.若奖品抽完则则抽奖活动结束,用户进入页面则提示用户抽奖活动结束
10.用户中奖则使用mq异步记录抽奖记录
11.用户点击抽奖规则,这展示抽奖规则
12.若活动配置可以查看中奖名单和中奖奖品则可以暂时用户得到某个产品
13.若没有中奖名单和中奖奖品配置则隐藏中奖记录按钮

部署需求:

1.使用maven命令将项目打成jar包
2.使用Dockerfile打包成Docker镜像文件
3.在Linux服务器部署docker进行项目启动
4.通过浏览器能正常访问部署好的服务