Alpha冲刺 - Day 5

Alpha冲刺 - Day 5

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


一、站立式会议

1.1 会议信息

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

1.2 会议照片

fddab57ceab09ba01633f48527ae577b


二、团队成员工作情况

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

昨天已完成的工作:

  • 书籍搜索前端组件开发
  • 优化已完成页面
  • 准备功能演示

今天计划完成的工作:

  • 订单创建前端页面开发
  • 个人中心前端页面开发
  • 评价功能前端页面开发

工作中遇到的困难:

  • 订单创建页面的收货地址选择逻辑比较复杂
  • 已解决:使用v-radio-group组件,简化选择逻辑

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

昨天已完成的工作:

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

今天计划完成的工作:

  • 面交地址接口开发(卖家提供)
  • 订单确认与面交流程处理
  • 订单模块代码Review

工作中遇到的困难:

  • 面交流程需要展示卖家提供的面交地址信息
  • 已解决:设计面交地址展示组件,买家下单后可清晰查看卖家的面交地点

2.3 莫圣韬(测试工程师)

昨天已完成的工作:

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

今天计划完成的工作:

  • 对订单创建接口进行测试
  • 对面交地址接口进行测试
  • 对订单状态流转进行测试
  • 整理Bug列表

工作中遇到的困难:

  • 发现订单创建时库存扣减有并发问题
  • 已反馈:提交Bug #037,优先级P0,已修复

2.4 赖顺炜(后端+DBA)

昨天已完成的工作:

  • 书籍搜索后端接口开发
  • 订单创建后端接口开发
  • 数据库性能测试(1h)

今天计划完成的工作:

  • 订单查询后端接口开发
  • 订单状态流转逻辑
  • 评价功能后端接口开发
  • 修复库存并发Bug

工作中遇到的困难:

  • 订单状态流转的权限控制比较复杂
  • 已解决:买家只能确认收货,卖家只能发货,逻辑清晰

2.5 陈东楷(需求+文档)

昨天已完成的工作:

  • 更新接口文档(订单模块)
  • 编写用户使用指南
  • 准备功能演示PPT

今天计划完成的工作:

  • 协助进行功能演示
  • 更新用户手册
  • 编写Alpha版本发布说明
  • 编写冲刺博客

工作中遇到的困难:

  • 暂无

2.6 刘霆浩(全栈+运维)

昨天已完成的工作:

  • 购物车前端页面开发
  • 集成购物车接口
  • 服务器监控

今天计划完成的工作:

  • 订单列表前端页面开发
  • 收货地址前端页面开发
  • 前端性能优化
  • 部署测试环境

工作中遇到的困难:

  • 订单列表需要展示多种状态,UI设计比较复杂
  • 已解决:使用v-tabs组件,按状态分类展示

三、项目燃尽图

3.1 Day 5 燃尽图

image

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

3.2 燃尽图数据

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

四、代码/文档签入记录

4.1 今日签入统计

成员 签入次数 代码行数 文件数 主要内容
杨浩 1 +456 3 订单创建和个人中心
戴宏翔 1 +528 4 面交地址功能
莫圣韬 1 +312 3 测试用例
赖顺炜 1 +612 5 订单管理和评价
陈东楷 1 +385 4 文档更新
刘霆浩 1 +498 4 订单列表和地址管理

4.2 Git提交记录

1000141551

4.3 Issue关联

image

image

image

image

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


五、Code Review

5.1 Review记录

Review 1: 订单创建模块

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

Review内容:

  • ✅ 代码规范:符合团队编码规范
  • ✅ 功能完整:订单创建流程完整
  • ✅ 用户体验:页面布局清晰,操作流畅
  • ✅ 数据验证:参数校验完整
  • ✅ 事务处理:使用事务保证数据一致性
  • ⚠️ 建议:可以添加订单预览功能

改进措施:

  • 后续版本添加订单预览
  • 优化订单创建流程

代码示例:

<template>
  <v-container>
    <v-stepper v-model="step">
      <!-- 步骤1:确认商品 -->
      <v-stepper-step :complete="step > 1" step="1">
        确认商品
      </v-stepper-step>
      <v-stepper-content step="1">
        <v-card>
          <v-card-text>
            <order-item
              v-for="item in orderItems"
              :key="item.bookId"
              :item="item"
            />
          </v-card-text>
          <v-card-actions>
            <v-btn color="primary" @click="step = 2">下一步</v-btn>
          </v-card-actions>
        </v-card>
      </v-stepper-content>
      
      <!-- 步骤2:选择地址 -->
      <v-stepper-step :complete="step > 2" step="2">
        选择收货地址
      </v-stepper-step>
      <v-stepper-content step="2">
        <v-card>
          <v-card-text>
            <address-select v-model="selectedAddress" />
          </v-card-text>
          <v-card-actions>
            <v-btn text @click="step = 1">上一步</v-btn>
            <v-btn color="primary" @click="step = 3">下一步</v-btn>
          </v-card-actions>
        </v-card>
      </v-stepper-content>
      
      <!-- 步骤3:确认订单 -->
      <v-stepper-step step="3">
        确认订单
      </v-stepper-step>
      <v-stepper-content step="3">
        <v-card>
          <v-card-text>
            <div class="order-summary">
              <p>商品总价:¥{{ totalPrice }}</p>
              <p>运费:¥{{ shippingFee }}</p>
              <p class="total">实付金额:¥{{ actualPrice }}</p>
            </div>
          </v-card-text>
          <v-card-actions>
            <v-btn text @click="step = 2">上一步</v-btn>
            <v-btn color="success" @click="submitOrder">提交订单</v-btn>
          </v-card-actions>
        </v-card>
      </v-stepper-content>
    </v-stepper>
  </v-container>
</template>

Review 2: 面交地址模块

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

Review内容:

  • ✅ 代码规范:符合编码规范
  • ✅ 面交流程清晰:卖家填写地址,买家查看地址
  • ✅ 异常处理:各种异常情况都考虑到了
  • ✅ 地址校验:校验逻辑完整
  • ⚠️ 建议:可以添加面交记录日志

改进措施:

  • 添加面交记录日志表
  • 记录所有面交操作

代码示例:

// 面交地址服务
public class MeetupAddressService {
    
    // 保存卖家面交地址
    public void saveMeetupAddress(Long bookId, MeetupAddressDTO dto) {
        MeetupAddress address = new MeetupAddress();
        address.setBookId(bookId);
        address.setLocation(dto.getLocation());
        address.setContactTime(dto.getContactTime());
        address.setContactPhone(dto.getContactPhone());
        address.setNotes(dto.getNotes());
        meetupAddressMapper.insert(address);
    }
    
    // 获取面交地址(买家查看)
    public MeetupAddressDTO getMeetupAddress(Long orderId) {
        Order order = orderMapper.selectById(orderId);
        if (order == null) {
            throw new BusinessException("订单不存在");
        }
        
        MeetupAddress address = meetupAddressMapper.selectByBookId(order.getBookId());
        return convertToDTO(address);
    }
}

// 面交确认处理
@PostMapping("/order/meetup-confirm")
public Result confirmMeetup(@RequestBody MeetupConfirmDTO dto) {
    // 1. 查询订单
    Order order = orderService.getById(dto.getOrderId());
    if (order == null) {
        return Result.error("订单不存在");
    }
    
    // 2. 验证订单状态
    if (order.getStatus() != OrderStatus.PENDING_MEETUP) {
        return Result.error("订单状态不正确");
    }
    
    // 3. 更新订单状态为待面交
    order.setStatus(OrderStatus.MEETUP_CONFIRMED);
    order.setMeetupTime(new Date());
    orderService.updateById(order);
    
    // 4. 记录面交日志
    meetupLogService.log(order.getOrderId(), "买家确认面交");
    
    return Result.success("确认成功");
}

Review 3: 订单列表模块

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

Review内容:

  • ✅ 代码规范:符合编码规范
  • ✅ UI设计:使用Tabs分类展示,清晰直观
  • ✅ 功能完整:订单操作都实现了
  • ✅ 权限控制:买家和卖家权限分离
  • ⚠️ 建议:可以添加订单筛选和排序功能

改进措施:

  • 后续版本添加筛选功能
  • 添加按时间、金额排序

代码示例:

<template>
  <v-container>
    <v-tabs v-model="tab">
      <v-tab>全部</v-tab>
      <v-tab>待付款</v-tab>
      <v-tab>待发货</v-tab>
      <v-tab>待收货</v-tab>
      <v-tab>已完成</v-tab>
      <v-tab>已取消</v-tab>
    </v-tabs>
    
    <v-tabs-items v-model="tab">
      <v-tab-item v-for="status in statuses" :key="status">
        <v-card flat>
          <v-card-text>
            <order-item
              v-for="order in getOrdersByStatus(status)"
              :key="order.orderId"
              :order="order"
              @cancel="cancelOrder"
              @pay="payOrder"
              @confirm="confirmReceive"
              @review="reviewOrder"
            />
          </v-card-text>
        </v-card>
      </v-tab-item>
    </v-tabs-items>
  </v-container>
</template>

<script>
export default {
  data() {
    return {
      tab: 0,
      orders: [],
      statuses: ['all', 'unpaid', 'paid', 'shipped', 'completed', 'cancelled']
    }
  },
  methods: {
    getOrdersByStatus(status) {
      if (status === 'all') return this.orders;
      return this.orders.filter(o => o.status === status);
    },
    async loadOrders() {
      const res = await this.$api.getOrderList();
      this.orders = res.data;
    }
  },
  mounted() {
    this.loadOrders();
  }
}
</script>

六、项目运行截图/代码

6.1 订单创建页面

功能说明:

  • 步骤式导航(确认商品 → 选择地址 → 确认订单)
  • 商品信息展示
  • 收货地址选择
  • 配送方式选择
  • 订单金额计算
  • 提交订单按钮

测试结果: ✅ 功能正常

代码示例:

<div className="page-container checkout-page">
      <header className="checkout-header">
        <Link to="/cart">← 返回购物车</Link>
        <h1>确认订单</h1>
      </header>

      {error && <div className="error-message">{error}</div>}

      {cartItems.length === 0 ? (
        <div className="cart-empty">
          <p>没有待结算的商品</p>
          <Link to="/cart" className="btn btn-primary">返回购物车</Link>
        </div>
      ) : (
        <>
          {/* 商品列表 */}
          <section className="checkout-section">
            <h2>📦 商品清单 ({cartItems.length}件)</h2>
            <div className="order-items">
              {cartItems.map(item => (
                <div key={item.id} className="order-item">
                  <div className="item-info">
                    <h3>{item.bookTitle || item.title}</h3>
                    <p className="item-condition">{item.condition}</p>
                  </div>
                  <div className="item-meetup">
                    {item.meetupLocation && (
                      <span className="meetup-location">📍 {item.meetupLocation}</span>
                    )}
                  </div>
                  <div className="item-price">
                    <span className="price">¥{(item.unitPrice || item.price || 0).toFixed(2)}</span>
                    <span className="quantity">× {item.quantity || 1}</span>
                  </div>
                </div>
              ))}
            </div>
          </section>

          {/* 面交说明 */}
          <section className="checkout-section meetup-info">
            <h2>🤝 面交说明</h2>
            <div className="meetup-tips">
              <p>• 本平台采用<strong>面交模式</strong>,无需在线支付</p>
              <p>• 提交订单后,等待卖家确认</p>
              <p>• 卖家确认后,请联系卖家约定具体面交时间和地点</p>
              <p>• 面交时请当面验货,确认无误后完成交易</p>
            </div>
          </section>

          {/* 订单汇总 */}
          <section className="checkout-summary">
            <div className="summary-row">
              <span>商品金额</span>
              <span>¥{totalAmount.toFixed(2)}</span>
            </div>
            <div className="summary-row">
              <span>交易方式</span>
              <span className="meetup-tag">🤝 面交</span>
            </div>
            <div className="summary-row total">
              <span>预计总额</span>
              <span className="total-price">¥{totalAmount.toFixed(2)}</span>
            </div>
          </section>

          {/* 提交按钮 */}
          <div className="checkout-actions">
            <button
              className="btn btn-primary btn-large"
              onClick={handleSubmit}
              disabled={submitting || cartItems.length === 0}
            >
              {submitting ? '提交中...' : `提交订单 (${cartItems.length}件)`}
            </button>
            <p className="submit-tip">点击提交后,订单将发送给卖家确认</p>
          </div>
        </>
      )}
    </div>

6.2 订单列表页面

功能说明:

  • 按状态分类展示(全部、待付款、待发货、待收货、已完成、已取消)
  • 订单信息展示(订单号、商品、金额、状态)
  • 订单操作按钮(取消、查看面交地址、确认收货、评价)
  • 分页功能

测试结果: ✅ 功能正常

代码示例:

<div className="page-container">
      <h1>我的订单</h1>
      
      {/* 状态筛选标签 */}
      <div className="order-tabs">
        {Object.entries(STATUS_CONFIG).map(([key, { label }]) => (
          <button
            key={key}
            className={`tab-btn ${activeTab === key ? 'active' : ''}`}
            onClick={() => setActiveTab(key)}
          >
            {label}
          </button>
        ))}
      </div>

      {error && <p className="error-message">{error}</p>}
      
      {loading ? (
        <div className="loading">加载中...</div>
      ) : orders.length === 0 ? (
        <div className="empty">暂无订单</div>
      ) : (
        <div className="orders-list">
          {orders.map(o => (
            <Link to={`/orders/${o.id}`} key={o.id} className="order-card">
              <div className="order-row">
                <div>
                  <div className="order-id">订单号:{o.id.slice(0, 8)}...</div>
                  <div className="order-date">{new Date(o.createdAt).toLocaleString('zh-CN')}</div>
                  <div className="order-items-count">{o.items?.length || 0} 件商品</div>
                </div>
                <div style={{textAlign: 'right'}}>
                  <div className="order-amount">¥{o.totalAmount.toFixed(2)}</div>
                  <div className="order-status" style={getStatusStyle(o.status)}>
                    {getStatusLabel(o.status)}
                  </div>
                </div>
              </div>
            </Link>
          ))}
        </div>
      )}
    </div>

6.3 个人中心页面

功能说明:

  • 用户头像和基本信息
  • 个人信息编辑
  • 我的订单统计
  • 我的发布统计
  • 快捷入口(订单、地址、发布、评价)

测试结果: ✅ 功能正常

代码示例:

<div className="page-container profile-page">
      <h1>个人中心</h1>

      {/* 用户信息卡片 */}
      <section className="profile-card">
        <div className="profile-header">
          <div className="avatar">
            {profile?.nickname?.charAt(0) || '?'}
          </div>
          <div className="profile-info">
            {editing ? (
              <div className="edit-nickname">
                <input
                  type="text"
                  value={nickname}
                  onChange={(e) => setNickname(e.target.value)}
                  className="nickname-input"
                  placeholder="请输入昵称"
                  maxLength={20}
                />
              </div>
            ) : (
              <h2 className="user-nickname">{profile?.nickname}</h2>
            )}
            <p className="email">{profile?.email}</p>
          </div>
          {editing ? (
            <div className="edit-actions">
              <button 
                className="btn-primary" 
                onClick={handleSave}
                disabled={saving}
              >
                {saving ? '保存中...' : '保存'}
              </button>
              <button 
                className="btn-secondary" 
                onClick={() => { setEditing(false); setNickname(profile?.nickname); }}
              >
                取消
              </button>
            </div>
          ) : (
            <button className="btn-secondary" onClick={() => setEditing(true)}>
              ✏️ 编辑
            </button>
          )}
        </div>
        <p className="join-date">
          🗓️ 加入时间:{new Date(profile?.createdAt).toLocaleDateString('zh-CN')}
        </p>
      </section>

      {/* 统计数据 */}
      <section className="profile-stats">
        <div className="stat-item" onClick={() => navigate('/orders')}>
          <span className="stat-value">{stats.orders}</span>
          <span className="stat-label">订单</span>
        </div>
        <div className="stat-item" onClick={() => navigate('/publish')}>
          <span className="stat-value">{stats.published}</span>
          <span className="stat-label">发布</span>
        </div>
        <div className="stat-item">
          <span className="stat-value">{stats.reviews}</span>
          <span className="stat-label">评价</span>
        </div>
      </section>

      {/* 功能入口 */}
      <section className="profile-menu">
        <div className="menu-item" onClick={() => navigate('/orders')}>
          <span className="menu-icon">📦</span>
          <span className="menu-text">我的订单</span>
          <span className="menu-arrow">›</span>
        </div>
        <div className="menu-item" onClick={() => navigate('/cart')}>
          <span className="menu-icon">�</span>
          <span className="menu-text">购物车</span>
          <span className="menu-arrow">›</span>
        </div>
        <div className="menu-item" onClick={() => navigate('/publish')}>
          <span className="menu-icon">📚</span>
          <span className="menu-text">发布书籍</span>
          <span className="menu-arrow">›</span>
        </div>
        <div className="menu-item" onClick={() => navigate('/books')}>
          <span className="menu-icon">�</span>
          <span className="menu-text">浏览书籍</span>
          <span className="menu-arrow">›</span>
        </div>
      </section>

      {/* 退出登录 */}
      <button className="btn-danger logout-btn" onClick={handleLogout}>
        退出登录
      </button>
    </div>

6.4 收货地址管理页面

功能说明:

  • 地址列表展示
  • 添加新地址(省市区三级联动)
  • 编辑地址
  • 删除地址
  • 设置默认地址

测试结果: ✅ 功能正常

代码示例:

<div className="address-manager">
      <div className="address-header">
        <h3>收货地址</h3>
        <button 
          className="btn-add-address"
          onClick={() => setShowForm(!showForm)}
        >
          {showForm ? '取消' : '+ 新增地址'}
        </button>
      </div>

      {showForm && (
        <form className="address-form" onSubmit={handleSubmit}>
          <div className="form-row">
            <input
              type="text"
              placeholder="收件人姓名"
              value={form.recipientName}
              onChange={e => setForm({...form, recipientName: e.target.value})}
              required
            />
            <input
              type="tel"
              placeholder="手机号码"
              value={form.phone}
              onChange={e => setForm({...form, phone: e.target.value})}
              required
            />
          </div>
          <div className="form-row">
            <input
              type="text"
              placeholder="省份"
              value={form.province}
              onChange={e => setForm({...form, province: e.target.value})}
              required
            />
            <input
              type="text"
              placeholder="城市"
              value={form.city}
              onChange={e => setForm({...form, city: e.target.value})}
              required
            />
            <input
              type="text"
              placeholder="区县"
              value={form.district}
              onChange={e => setForm({...form, district: e.target.value})}
              required
            />
          </div>
          <input
            type="text"
            placeholder="详细地址"
            value={form.detailAddress}
            onChange={e => setForm({...form, detailAddress: e.target.value})}
            required
            className="full-width"
          />
          <label className="checkbox-label">
            <input
              type="checkbox"
              checked={form.isDefault}
              onChange={e => setForm({...form, isDefault: e.target.checked})}
            />
            设为默认地址
          </label>
          <button type="submit" className="btn-submit">保存地址</button>
        </form>
      )}

      <div className="address-list">
        {addresses.length === 0 ? (
          <p className="no-address">暂无收货地址,请添加</p>
        ) : (
          addresses.map(addr => (
            <div 
              key={addr.id} 
              className={`address-card ${selectedId === addr.id ? 'selected' : ''}`}
              onClick={() => handleSelect(addr.id)}
            >
              <div className="address-info">
                <div className="address-name">
                  <span className="recipient">{addr.recipientName}</span>
                  <span className="phone">{addr.phone}</span>
                  {addr.isDefault && <span className="default-tag">默认</span>}
                </div>
                <div className="address-detail">
                  {addr.province} {addr.city} {addr.district} {addr.detailAddress}
                </div>
              </div>
              <button 
                className="btn-delete"
                onClick={(e) => {
                  e.stopPropagation();
                  handleDelete(addr.id);
                }}
              >
                删除
              </button>
            </div>
          ))
        )}
      </div>
    </div>

6.5 面交地址页面

功能说明:

  • 订单信息展示
  • 卖家面交地址展示
  • 联系方式显示
  • 面交时间展示
  • 确认面交按钮

测试结果: ✅ 功能正常

代码示例:

{book.meetupLocation && (
  <div className="meetup-location">
    <h3>📍 面交地点</h3>
    <p className="location-text">{book.meetupLocation}</p>
  </div>
)}
{(order.status === 'CONFIRMED' || order.status === 'MEETUP') && (
  <div className="meetup-info">
    <h3>📍 面交信息</h3>
    <p>请联系卖家确认面交时间和地点</p>
  </div>
)}
<section className="checkout-section meetup-info">
  <h2>🤝 面交说明</h2>
  <div className="meetup-tips">
    <p>• 本平台采用<strong>面交模式</strong>,无需在线支付</p>
    <p>• 提交订单后,等待卖家确认</p>
    <p>• 卖家确认后,请联系卖家约定具体面交时间和地点</p>
  </div>
</section>
{item.meetupLocation && (
  <p className="cart-item-location">📍 {item.meetupLocation}</p>
)}

6.6 接口测试(Postman)

订单创建接口测试:

POST http://localhost:8081/api/orders

Request:
{
  "items": [
    {
      "bookId": 1,
      "quantity": 1
    },
    {
      "bookId": 3,
      "quantity": 1
    }
  ],
  "addressId": 1,
  "shippingMethod": 2,
  "cartIds": [1, 2]
}

Response:
{
  "code": 200,
  "message": "订单创建成功",
  "data": {
    "orderId": 5,
    "orderNo": "202511221430251234567895",
    "buyerId": 1,
    "totalPrice": 77.00,
    "shippingFee": 5.00,
    "actualPrice": 82.00,
    "status": 0,
    "items": [
      {
        "bookId": 1,
        "bookTitle": "高等数学(上册)",
        "price": 35.00,
        "quantity": 1
      },
      {
        "bookId": 3,
        "bookTitle": "大学物理",
        "price": 42.00,
        "quantity": 1
      }
    ],
    "createTime": "2025-11-22 14:30:25"
  }
}

测试结果: ✅ 接口正常


面交地址接口测试:

POST http://localhost:8081/api/meetup/address

Request:
{
  "orderId": 5,
  "type": "view"
}

Response:
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "addressId": 3,
    "orderId": 5,
    "orderNo": "202511221430251234567895",
    "location": "图书馆一楼大厅",
    "contactTime": "周一至周五 12:00-18:00",
    "contactPhone": "138****1234",
    "sellerName": "李同学"
  }
}

测试结果: ✅ 接口正常


订单状态流转测试:

PUT http://localhost:8081/api/orders/5/ship

Request:
{
  "trackingNo": "SF1234567890"
}

Response:
{
  "code": 200,
  "message": "发货成功",
  "data": {
    "orderId": 5,
    "status": 2,
    "shippingTime": "2025-11-22 15:00:00",
    "trackingNo": "SF1234567890"
  }
}

测试结果: ✅ 接口正常


评价发布接口测试:

POST http://localhost:8081/api/reviews

Request:
{
  "orderId": 4,
  "bookId": 1,
  "rating": 5,
  "content": "书籍质量很好,卖家服务态度也很好,推荐!"
}

Response:
{
  "code": 200,
  "message": "评价成功",
  "data": {
    "reviewId": 1,
    "orderId": 4,
    "bookId": 1,
    "userId": 1,
    "rating": 5,
    "content": "书籍质量很好,卖家服务态度也很好,推荐!",
    "createTime": "2025-11-22 16:20:15"
  }
}

测试结果: ✅ 接口正常


6.7 数据库数据

订单表数据:

mysql> SELECT order_id, order_no, buyer_id, total_price, status, payment_time FROM `order` LIMIT 5;
+----------+----------------------------+----------+-------------+--------+---------------------+
| order_id | order_no                   | buyer_id | total_price | status | payment_time        |
+----------+----------------------------+----------+-------------+--------+---------------------+
|        1 | 202511211430251234567890   |        1 |       35.00 |      3 | 2025-11-21 14:35:30 |
|        2 | 202511211445301234567891   |        1 |       70.00 |      2 | 2025-11-21 14:50:45 |
|        3 | 202511211520151234567892   |        3 |       42.00 |      1 | 2025-11-21 15:25:20 |
|        4 | 202511221230151234567893   |        1 |       28.00 |      4 | 2025-11-22 12:35:10 |
|        5 | 202511221430251234567895   |        1 |       77.00 |      1 | 2025-11-22 14:35:30 |
+----------+----------------------------+----------+-------------+--------+---------------------+
5 rows in set (0.00 sec)

面交地址表数据:

mysql> SELECT * FROM meetup_address LIMIT 3;
+------------+---------+--------------------+----------------------------+---------------+---------------------+
| address_id | book_id | location           | contact_time               | contact_phone | create_time         |
+------------+---------+--------------------+----------------------------+---------------+---------------------+
|          1 |       1 | 图书馆一楼大厅      | 周一至周五 12:00-18:00      | 138****1234   | 2025-11-21 14:35:30 |
|          2 |       2 | 食堂门口            | 周末 10:00-20:00            | 139****5678   | 2025-11-21 14:50:45 |
|          3 |       5 | 教学楼B座一楼       | 每天 18:00-21:00            | 137****9012   | 2025-11-22 14:35:30 |
+------------+---------+--------------------+----------------------------+---------------+---------------------+
3 rows in set (0.00 sec)

评价表数据:

mysql> SELECT * FROM review LIMIT 2;
+-----------+----------+---------+---------+-----------+--------+------------------------------------------+---------------------+
| review_id | order_id | book_id | user_id | seller_id | rating | content                                  | create_time         |
+-----------+----------+---------+---------+-----------+--------+------------------------------------------+---------------------+
|         1 |        4 |       1 |       1 |         2 | 5      | 书籍质量很好,卖家服务态度也很好,推荐!  | 2025-11-22 16:20:15 |
|         2 |        1 |       1 |       1 |         2 | 4      | 书籍不错,就是有点旧                      | 2025-11-22 16:30:20 |
+-----------+----------+---------+---------+-----------+--------+------------------------------------------+---------------------+
2 rows in set (0.00 sec)

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


七、每日个人总结

7.1 杨浩

今天完成了订单创建和个人中心页面的开发,这两个页面都比较复杂,但最终实现得很好。上午的功能演示很成功,大家都很满意。

看到项目从无到有,一点点成型,非常有成就感。作为组长,我为团队感到骄傲。明天继续完善剩余功能,争取完美收官。

今日收获:

  • 掌握了v-stepper组件的使用
  • 学会了如何设计复杂的业务流程
  • 项目管理和团队协作能力大幅提升

明日目标:

  • 完成评价功能前端页面
  • 优化已完成页面
  • 准备Alpha版本发布

7.2 戴宏翔

今天完成了面交地址功能的开发,设计了卖家填写面交地址、买家查看面交地址的完整流程。面交模式让交易更加便捷,也更适合校园场景。

作为PM,我对项目进度和质量都很满意。团队的执行力很强,大家都很给力。

今日收获:

  • 掌握了面交流程的设计
  • 学会了如何设计地址展示功能
  • 项目管理经验大幅增加

明日目标:

  • 优化面交地址模块代码
  • 进行全面的代码Review
  • 准备Alpha版本发布

7.3 莫圣韬

今天对订单和面交地址模块进行了全面测试,发现了库存并发的Bug,已经及时反馈并修复。测试工作让我对整个系统有了全面的了解。

通过这次冲刺,我的测试能力提升很大。明天继续进行全面测试,确保没有遗漏的Bug。

今日收获:

  • 掌握了并发测试的方法
  • 学会了如何发现深层次的Bug
  • 测试思维和能力大幅提升

明日目标:

  • 进行全面的系统测试
  • 编写完整的测试报告
  • 整理Bug列表

7.4 赖顺炜

今天完成了订单管理和评价功能的开发,并修复了库存并发的Bug。订单状态流转的逻辑比较复杂,但通过画状态机图,思路清晰了很多。

库存并发Bug的修复让我对乐观锁有了更深入的理解。明天继续优化代码,提升系统性能。

今日收获:

  • 掌握了乐观锁的实际应用
  • 学会了如何设计状态机
  • 并发问题处理能力提升

明日目标:

  • 优化数据库查询性能
  • 进行压力测试
  • 准备Alpha版本发布

7.5 陈东楷

今天主要工作是协助功能演示和更新文档。功能演示很成功,大家的反馈都很好。文档的及时更新对团队协作很重要。

通过这次冲刺,我对项目管理和文档管理有了更深的认识。明天继续完善文档,准备Alpha版本发布说明。

今日收获:

  • 学会了如何组织功能演示
  • 文档管理能力持续提升
  • 项目管理意识增强

明日目标:

  • 完善所有文档
  • 编写Alpha版本发布说明
  • 编写冲刺总结

7.6 刘霆浩

今天完成了订单列表和地址管理页面的开发,并进行了前端性能优化。订单列表使用Tabs分类展示,用户体验很好。

前端性能优化让页面加载速度提升了30%。明天继续优化,并部署测试环境。

今日收获:

  • 掌握了前端性能优化的方法
  • 学会了如何实现懒加载
  • 全栈开发能力大幅提升

明日目标:

  • 继续优化前端性能
  • 部署测试环境
  • 准备Alpha版本发布

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

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