Alpha冲刺 - Day 3

Alpha冲刺 - Day 3

团队名称: 书海拾贝队
冲刺日期: 2025年11月26日
冲刺阶段: Alpha阶段 Day 3/7


一、站立式会议

1.1 会议信息

  • 会议时间: 2025年11月26日 14:00-14:10
  • 会议地点: 图书馆三楼讨论区
  • 会议时长: 10分钟
  • 参会人员: 杨浩、戴宏翔、莫圣韬、赖顺炜、陈东楷、刘霆浩
  • 会议主持: 杨浩
  • 会议记录: 陈东楷

1.2 会议照片

fddab57ceab09ba01633f48527ae577b


二、团队成员工作情况

2.1 杨浩(组长 - 前端开发)

昨天已完成的工作:

  • 书籍发布前端页面开发
  • 与后端进行用户模块接口联调
  • 修复前端表单验证问题

今天计划完成的工作:

  • 书籍列表前端页面开发
  • 书籍搜索前端组件开发
  • 优化书籍发布页面用户体验

工作中遇到的困难:

  • 书籍列表的分页组件与Vuetify的Table组件集成有些问题
  • 解决中:查阅官方文档,尝试使用v-data-table组件

2.2 戴宏翔(PM - 后端开发)

昨天已完成的工作:

  • 与前端进行接口联调测试
  • 购物车后端接口开发
  • 优化用户模块代码

今天计划完成的工作:

  • 个人信息后端接口开发
  • 收货地址后端接口开发
  • 进行代码重构和优化

工作中遇到的困难:

  • 购物车数据结构设计需要优化,考虑使用Redis缓存
  • 已解决:决定先用MySQL实现,后续再优化为Redis

2.3 莫圣韬(测试工程师)

昨天已完成的工作:

  • 完成用户模块单元测试用例
  • 对用户注册登录接口进行测试
  • 编写书籍模块测试用例

今天计划完成的工作:

  • 对书籍发布接口进行测试
  • 对书籍列表和搜索接口进行测试
  • 编写测试报告

工作中遇到的困难:

  • 发现书籍发布接口在ISBN不存在时返回的错误信息不够友好
  • 已反馈:已提交Bug #029,开发人员正在修复

2.4 赖顺炜(后端+DBA)

昨天已完成的工作:

  • 书籍列表后端接口开发
  • 书籍详情后端接口开发
  • 数据库索引优化

今天计划完成的工作:

  • 书籍搜索后端接口开发
  • 订单创建后端接口开发
  • 数据库查询性能优化

工作中遇到的困难:

  • 书籍搜索需要支持模糊查询,担心性能问题
  • 解决方案:使用MySQL全文索引,并限制搜索结果数量

2.5 陈东楷(需求+文档)

昨天已完成的工作:

  • 更新接口文档(新增书籍模块接口)
  • 编写开发日志
  • 协助测试人员编写测试报告

今天计划完成的工作:

  • 更新用户手册(新增书籍模块)
  • 整理Bug列表和优先级
  • 编写Alpha冲刺Day3博客

工作中遇到的困难:

  • 暂无

2.6 刘霆浩(全栈+运维)

昨天已完成的工作:

  • 书籍详情前端页面开发
  • 优化图片上传组件
  • 协助解决跨域问题

今天计划完成的工作:

  • 购物车前端页面开发
  • 集成书籍列表和详情页面
  • 服务器性能监控

工作中遇到的困难:

  • 购物车页面的商品数量修改和删除逻辑比较复杂
  • 解决中:参考电商网站的购物车设计,优化交互流程

三、项目燃尽图

3.1 Day 3 燃尽图

image

图例:
红线 理想剩余工时
蓝线 实际剩余工时

3.2 燃尽图数据

日期 理想剩余工时 实际剩余工时 完成工时
Day 1 138h 138h 0h
Day 2 118h 115h 23h
Day 3 98h 98h 17h
Day 4 78h - -
Day 5 58h - -
Day 6 38h - -
Day 7 0h - -

四、代码/文档签入记录

4.1 今日签入统计

成员 签入次数 代码行数 文件数 主要内容
杨浩 1 +312 2 书籍发布页面完成
戴宏翔 1 +385 3 购物车接口
莫圣韬 1 +268 3 测试用例
赖顺炜 1 +295 3 书籍列表和详情接口
陈东楷 1 +312 4 文档更新
刘霆浩 1 +356 3 书籍详情页面

4.2 Git提交记录

1000141553

4.3 Issue关联


image

image

image

image

Issue链接: https://github.com/Bookmatescope/ReuseBook/issues


五、Code Review

5.1 Review记录

Review 1: 书籍发布模块

  • Reviewer: 刘霆浩
  • Reviewee: 杨浩、赖顺炜

Review内容:

  • ✅ 代码规范:符合团队编码规范
  • ✅ 功能完整:ISBN查询、手动录入、图片上传都实现
  • ✅ 用户体验:交互流畅,提示清晰
  • ✅ 异常处理:API失败有降级方案
  • ⚠️ 建议:ISBN查询结果可以缓存,减少API调用

改进措施:

  • 实现ISBN查询结果缓存(Redis)
  • 添加查询历史记录

代码示例:

// ISBN查询组件
async queryISBN(isbn) {
  try {
    // 先查缓存
    let bookInfo = await this.getFromCache(isbn);
    if (!bookInfo) {
      // 缓存未命中,调用API
      bookInfo = await this.$api.queryISBN(isbn);
      // 存入缓存
      await this.saveToCache(isbn, bookInfo);
    }
    this.fillBookInfo(bookInfo);
  } catch (error) {
    this.$message.error('ISBN查询失败,请手动填写');
  }
}

Review 2: 购物车模块

  • Reviewer: 赖顺炜
  • Reviewee: 戴宏翔

Review内容:

  • ✅ 代码规范:符合编码规范
  • ✅ 接口设计:RESTful风格,参数清晰
  • ✅ 数据验证:参数校验完整
  • ⚠️ 建议:购物车数据可以考虑用Redis存储
  • ⚠️ 建议:添加购物车商品库存检查

改进措施:

  • 后续版本迁移到Redis
  • 添加库存检查逻辑

代码示例:

// 添加商品到购物车
@PostMapping("/cart")
public Result addToCart(@RequestBody CartItem item) {
    // 参数验证
    if (item.getBookId() == null || item.getQuantity() <= 0) {
        return Result.error("参数错误");
    }
    
    // 检查商品是否存在
    Book book = bookService.getById(item.getBookId());
    if (book == null) {
        return Result.error("商品不存在");
    }
    
    // 检查库存
    if (book.getStock() < item.getQuantity()) {
        return Result.error("库存不足");
    }
    
    // 添加到购物车
    cartService.addItem(item);
    return Result.success("添加成功");
}

Review 3: 书籍列表模块

  • Reviewer: 戴宏翔
  • Reviewee: 杨浩、赖顺炜

Review内容:

  • ✅ 代码规范:符合编码规范
  • ✅ 分页功能:分页逻辑正确
  • ✅ 性能优化:使用了索引,查询效率高
  • ✅ 前端展示:列表布局美观
  • ⚠️ 建议:可以添加书籍排序功能(价格、时间)

改进措施:

  • 添加排序参数
  • 前端增加排序选择器

代码示例:

// 书籍列表查询(支持排序)
@GetMapping("/books")
public Result getBookList(
    @RequestParam(defaultValue = "1") Integer page,
    @RequestParam(defaultValue = "20") Integer size,
    @RequestParam(required = false) String sortBy,
    @RequestParam(required = false) String order
) {
    // 构建排序条件
    String orderBy = "create_time DESC"; // 默认按时间降序
    if ("price".equals(sortBy)) {
        orderBy = "price " + ("ASC".equals(order) ? "ASC" : "DESC");
    }
    
    // 分页查询
    PageInfo<Book> pageInfo = bookService.getList(page, size, orderBy);
    return Result.success(pageInfo);
}

六、项目运行截图/代码

6.1 书籍发布页面

image

功能说明:

  • ISBN输入框,支持自动查询
  • 书籍信息自动填充
  • 图片上传(最多5张)
  • 价格和新旧程度选择
  • 书籍描述输入

测试结果: ✅ 功能正常

代码片段:

<template>
  <v-container>
    <v-card>
      <v-card-title>发布书籍</v-card-title>
      <v-card-text>
        <!-- ISBN输入 -->
        <v-text-field
          v-model="isbn"
          label="ISBN号"
          @blur="queryISBN"
          :loading="isbnLoading"
        />
        
        <!-- 书籍信息 -->
        <v-text-field v-model="bookInfo.title" label="书名" required />
        <v-text-field v-model="bookInfo.author" label="作者" />
        
        <!-- 图片上传 -->
        <image-upload v-model="bookInfo.images" :max="5" />
        
        <!-- 价格和新旧程度 -->
        <v-text-field v-model="bookInfo.price" label="价格" type="number" />
        <v-select v-model="bookInfo.condition" :items="conditions" label="新旧程度" />
        
        <!-- 描述 -->
        <v-textarea v-model="bookInfo.description" label="描述" />
      </v-card-text>
      
      <v-card-actions>
        <v-btn color="primary" @click="submit">发布</v-btn>
      </v-card-actions>
    </v-card>
  </v-container>
</template>

6.2 书籍列表页面

功能说明:

  • 书籍卡片展示(封面、书名、价格、新旧程度)
  • 分页功能
  • 加载状态提示
  • 点击跳转详情页

测试结果: ✅ 功能正常

代码片段:

<template>
  <v-container>
    <v-row>
      <v-col v-for="book in books" :key="book.bookId" cols="12" sm="6" md="4" lg="3">
        <v-card @click="goToDetail(book.bookId)">
          <v-img :src="book.coverImage" height="200" />
          <v-card-title>{{ book.title }}</v-card-title>
          <v-card-subtitle>
            <span class="price">¥{{ book.price }}</span>
            <v-chip small>{{ book.conditionText }}</v-chip>
          </v-card-subtitle>
        </v-card>
      </v-col>
    </v-row>
    
    <!-- 分页 -->
    <v-pagination
      v-model="page"
      :length="totalPages"
      @input="loadBooks"
    />
  </v-container>
</template>

<script>
export default {
  data() {
    return {
      books: [],
      page: 1,
      totalPages: 0
    }
  },
  methods: {
    async loadBooks() {
      const res = await this.$api.getBookList(this.page, 20);
      this.books = res.data.list;
      this.totalPages = res.data.pages;
    }
  },
  mounted() {
    this.loadBooks();
  }
}
</script>

6.3 书籍详情页面

功能说明:

  • 书籍图片轮播
  • 书籍详细信息(书名、作者、价格、新旧程度、描述)
  • 卖家信息
  • 加入购物车按钮
  • 立即购买按钮

测试结果: ✅ 功能正常

代码片段:

<template>
  <v-container>
    <v-row>
      <!-- 左侧:图片轮播 -->
      <v-col cols="12" md="6">
        <v-carousel height="400">
          <v-carousel-item
            v-for="(image, i) in book.images"
            :key="i"
            :src="image"
          />
        </v-carousel>
      </v-col>
      
      <!-- 右侧:书籍信息 -->
      <v-col cols="12" md="6">
        <h1>{{ book.title }}</h1>
        <p class="author">作者:{{ book.author }}</p>
        <p class="price">¥{{ book.price }}</p>
        <v-chip>{{ book.conditionText }}</v-chip>
        
        <v-divider class="my-4" />
        
        <p>{{ book.description }}</p>
        
        <v-divider class="my-4" />
        
        <!-- 卖家信息 -->
        <div class="seller-info">
          <v-avatar><v-img :src="book.seller.avatar" /></v-avatar>
          <span>{{ book.seller.username }}</span>
        </div>
        
        <!-- 操作按钮 -->
        <v-btn color="primary" @click="addToCart">加入购物车</v-btn>
        <v-btn color="success" @click="buyNow">立即购买</v-btn>
      </v-col>
    </v-row>
  </v-container>
</template>

6.4 接口测试(Postman)

书籍列表接口测试:

GET http://localhost:8081/api/books?page=1&size=20

Response:
{
  "code": 200,
  "message": "success",
  "data": {
    "list": [
      {
        "bookId": 1,
        "title": "高等数学(上册)",
        "author": "同济大学数学系",
        "price": 35.00,
        "originalPrice": 58.00,
        "condition": 3,
        "conditionText": "八成新",
        "coverImage": "https://oss.example.com/book1.jpg",
        "sellerId": 2,
        "sellerName": "戴宏翔"
      },
      // ... 更多书籍
    ],
    "total": 156,
    "page": 1,
    "size": 20,
    "pages": 8
  }
}

测试结果: ✅ 接口正常


书籍详情接口测试:

GET http://localhost:8081/api/books/1

Response:
{
  "code": 200,
  "message": "success",
  "data": {
    "bookId": 1,
    "isbn": "9787040396621",
    "title": "高等数学(上册)",
    "author": "同济大学数学系",
    "publisher": "高等教育出版社",
    "price": 35.00,
    "originalPrice": 58.00,
    "condition": 3,
    "conditionText": "八成新",
    "description": "教材使用一学期,有少量笔记,不影响阅读",
    "images": [
      "https://oss.example.com/book1-1.jpg",
      "https://oss.example.com/book1-2.jpg"
    ],
    "stock": 1,
    "sales": 0,
    "seller": {
      "userId": 2,
      "username": "戴宏翔",
      "avatar": "https://oss.example.com/avatar2.jpg"
    },
    "createTime": "2025-11-20 10:30:25"
  }
}

测试结果: ✅ 接口正常


购物车添加接口测试:

POST http://localhost:8081/api/cart

Request:
{
  "bookId": 1,
  "quantity": 1
}

Response:
{
  "code": 200,
  "message": "添加成功",
  "data": {
    "cartId": 1,
    "userId": 1,
    "bookId": 1,
    "quantity": 1,
    "createTime": "2025-11-20 14:25:30"
  }
}

测试结果: ✅ 接口正常


6.5 数据库数据

书籍表数据:

mysql> SELECT book_id, title, author, price, condition, status FROM book LIMIT 5;
+---------+------------------------+----------------------+-------+-----------+--------+
| book_id | title                  | author               | price | condition | status |
+---------+------------------------+----------------------+-------+-----------+--------+
|       1 | 高等数学(上册)        | 同济大学数学系        | 35.00 |         3 |      1 |
|       2 | 线性代数               | 同济大学数学系        | 28.00 |         2 |      1 |
|       3 | 大学物理               | 张三峰               | 42.00 |         3 |      1 |
|       4 | C程序设计              | 谭浩强               | 25.00 |         4 |      1 |
|       5 | 数据结构               | 严蔚敏               | 38.00 |         2 |      1 |
+---------+------------------------+----------------------+-------+-----------+--------+
5 rows in set (0.00 sec)

购物车表数据:

mysql> SELECT * FROM cart;
+---------+---------+---------+----------+---------------------+
| cart_id | user_id | book_id | quantity | create_time         |
+---------+---------+---------+----------+---------------------+
|       1 |       1 |       1 |        1 | 2025-11-20 14:25:30 |
|       2 |       1 |       3 |        1 | 2025-11-20 14:30:15 |
+---------+---------+---------+----------+---------------------+
2 rows in set (0.00 sec)

测试结果: ✅ 数据正常存储


七、每日个人总结

7.1 杨浩

今天完成了书籍发布页面和书籍列表页面的开发,进度很顺利。书籍发布页面集成了ISBN查询功能,用户体验很好。书籍列表页面使用了卡片布局,视觉效果不错。

在开发过程中遇到了分页组件的问题,最终选择了手动控制分页逻辑,虽然代码多了一些,但更灵活。明天开始书籍搜索功能的开发,这是一个重要功能。

今日收获:

  • 掌握了Vuetify分页组件的使用
  • 学会了如何优化图片加载性能
  • 前端布局设计能力提升

明日目标:

  • 完成书籍搜索前端组件
  • 开始订单创建页面开发
  • 优化已完成页面的用户体验

7.2 戴宏翔

今天完成了购物车接口的开发,实现了购物车的增删改查功能。在数据结构设计上纠结了一会儿,最终决定先用MySQL实现,后续再优化。

购物车模块的代码质量不错,通过了Code Review。明天开始个人信息和收货地址模块的开发,这两个模块相对简单。

今日收获:

  • 学会了如何权衡技术方案
  • 购物车业务逻辑理解更深入
  • 代码设计能力提升

明日目标:

  • 完成个人信息后端接口
  • 完成收货地址后端接口
  • 优化购物车接口性能

7.3 莫圣韬

今天完成了用户模块和书籍模块的测试用例编写,并对相关接口进行了测试。在测试过程中发现了一个Bug:ISBN不存在时的错误提示不够友好,已经反馈给开发人员。

测试工作让我对业务逻辑有了更全面的理解。明天继续对书籍搜索和购物车模块进行测试。

今日收获:

  • 测试用例编写能力提升
  • 学会了如何发现和反馈Bug
  • 对业务逻辑理解更深入

明日目标:

  • 对书籍搜索接口进行测试
  • 对购物车接口进行测试
  • 编写测试报告

7.4 赖顺炜

今天完成了书籍列表和详情接口的开发,并优化了数据库查询性能。在实现搜索功能时,研究了MySQL的全文索引,配置了ngram解析器支持中文搜索。

ISBN查询的API适配器也完成了,统一了不同API的返回格式。明天继续书籍搜索接口和订单创建接口的开发。

今日收获:

  • 掌握了MySQL全文索引的使用
  • 学会了如何设计API适配器
  • 数据库优化经验增加

明日目标:

  • 完成书籍搜索后端接口
  • 完成订单创建后端接口
  • 数据库性能测试

7.5 陈东楷

今天主要工作是更新文档和整理Bug列表。接口文档的更新需要与开发人员密切沟通,确保文档的准确性和及时性。

通过整理Bug列表,我对项目的质量有了更清晰的认识。明天继续完善用户手册,并编写今天的冲刺博客。

今日收获:

  • 文档管理能力提升
  • 学会了如何整理和分类Bug
  • 项目管理意识增强

明日目标:

  • 更新用户手册
  • 整理测试报告
  • 编写冲刺博客

7.6 刘霆浩

今天完成了书籍详情页面的开发,实现了图片轮播、书籍信息展示、卖家信息展示等功能。在优化图片加载性能时,实现了懒加载和预加载。

明天开始购物车页面的开发,这是一个比较复杂的页面,需要实现商品列表、数量修改、删除、结算等功能。

今日收获:

  • 掌握了图片懒加载的实现方法
  • 学会了如何优化页面性能
  • 前端组件设计能力提升

明日目标:

  • 完成购物车前端页面
  • 集成购物车接口
  • 优化页面交互体验

书海拾贝队 - Alpha冲刺 Day 3 完成

posted @ 2025-12-03 21:03  elysia。。。  阅读(1)  评论(0)    收藏  举报