团队作业4——项目冲刺-5
信息项 |
内容 |
课程名称 |
广工计院计科34班软工 |
作业要求位置 |
作业要求 |
作业目标 |
在七天敏捷冲刺中,完成工大严选开发,记录每日进展和问题,更新燃尽图、签入代码,并发布集合日志总结成果 |
GitHub链接 |
GitHub |
一、团队简介
姓名 |
学号 |
罗振烘(组长) |
3122004748 |
庄崇立 |
3122004633 |
李响 |
3121002802 |
何昌洲 |
3122004737 |
二、会议总结
会议信息
- 日期:2024年11月15日
- 时长:15分钟
- 会议形式:在线会议
- 主持人:罗振烘(组长)
会议照片
昨天完成的工作
任务 |
内容 |
商品推荐功能开发 |
完成商品推荐模块的增删查改接口,实现了商品推荐的基本管理功能。 |
接口设计与优化 |
设计RESTful接口,并通过Swagger 注解生成API文档,方便团队测试和调用。 |
分类功能接口调试 |
进行前后端接口调试,确保商品推荐信息可以正常获取、添加、修改和删除。 |
code review |
对代码规范进行了细致检查,统一了字段命名,完善了注释,提升代码一致性和可维护性。 |
需求文档更新 |
补充了推荐模块的需求细节,基于实际开发中遇到的问题完善了相关文档。 |
今天完成的工作
任务 |
内容 |
商品详情功能 |
完善了热门推荐功能,新增、修改、删除都调试顺畅。 |
数据库加速 |
加了索引,查询速度快多了。 |
前端UI改进 |
优化了页面布局,用户体验更好。 |
集成测试完成 |
测试了主要功能,修复了一些小问题。 |
工作中遇到的困难
团队在协作中遇到一些挑战,比如前后端接口对接时的数据格式不一致导致调试时间增加,数据库在数据量增多后出现了性能瓶颈,需要进行复杂的索引优化。需求变动也让部分功能返工,前端在UI布局和设计细节上需要多次沟通以确保一致。此外,多人代码合并时也出现冲突,需要谨慎处理才能保证代码的顺利集成。
会议内容
- 目标:确保团队成员同步项目进展,解决昨天遇到的问题。
任务分配
四、燃尽图
五、代码签入记录
code review编码规范文档
六、项目程序/模块的最新(运行)截图
核心代码
package com.example.goods.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.goods.pojo.Goods;
import com.example.goods.pojo.GoodsBrand;
import com.example.goods.pojo.GoodsParticulars;
import com.example.goods.pojo.GoodsParticularsVo;
import com.example.goods.service.GoodsBrandService;
import com.example.goods.service.GoodsParticularsService;
import com.example.goods.service.GoodsService;
import com.example.smartcommon.util.R;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping(value = "/goods/")
@Tag(name = "显示商品") // Swagger文档的标签,用于显示商品模块
public class GoodsController {
@Autowired
private GoodsService goodsService; // 注入商品服务类
@Autowired
private GoodsParticularsService goodsParticularsService; // 注入商品详情服务类
@Autowired
private GoodsBrandService goodsBrandService; // 注入商品品牌服务类
@Operation(summary = "获得所有的商品") // Swagger文档的操作描述
@GetMapping(value = "/getAllGoods")
public R getAllGoods() {
List<Goods> goods = goodsService.list(); // 查询所有商品数据
return R.ok("查询所有商品成功").data("goodsList", goods); // 返回查询结果
}
@Operation(summary = "猜你喜欢商品带分页") // Swagger文档的操作描述
@GetMapping(value = "/guessLikeGoods")
public R guessLikeGoods(@RequestParam(name = "page", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize) {
// 分页功能进行查询
Page<Goods> goodsPage = new Page<>(page, pageSize);
// 条件构造器
QueryWrapper<Goods> queryWrapper = new QueryWrapper<>();
// 随机排序
queryWrapper.orderByDesc("rand()");
// 查询数据
goodsService.page(goodsPage, queryWrapper);
// 每页的数据集合
List<Goods> goodsList = goodsPage.getRecords();
// 总的记录数
Long counts = goodsPage.getTotal();
// 每页条数
pageSize = goodsPage.getSize();
// 总页数
Long pages = goodsPage.getPages();
// 当前页数
page = goodsPage.getCurrent();
// 将分页信息存储到Map中
Map<String, Object> map = new HashMap<>();
map.put("counts", counts);
map.put("pageSize", pageSize);
map.put("pages", pages);
map.put("page", page);
map.put("goodsList", goodsList);
return R.ok("猜你喜欢商品带分页成功").data(map); // 返回分页查询结果
}
@Operation(summary = "增加商品") // Swagger文档的操作描述
@PostMapping(value = "/addGoods")
public R addGoods(@RequestBody Goods goods) {
boolean flag = goodsService.save(goods); // 保存商品数据
if (flag) {
return R.ok("增加商品成功");
} else {
return R.error("增加商品失败");
}
}
@Operation(summary = "删除商品数据") // Swagger文档的操作描述
@DeleteMapping(value = "/deleteGoods/{id}")
public R deleteGoods(@PathVariable("id") Integer goodsId) {
boolean flag = goodsService.removeById(goodsId); // 根据ID删除商品
if (flag) {
return R.ok("删除商品成功");
} else {
return R.error("删除商品失败");
}
}
@Operation(summary = "按照商品编号查询数据") // Swagger文档的操作描述
@GetMapping(value = "/getGoodsById/{id}")
public R getGoodsById(@PathVariable("id") Integer goodsId) {
Goods goods = goodsService.getById(goodsId); // 根据商品ID查询商品
return R.ok("按照商品编号查询数据成功").data("goods", goods); // 返回查询结果
}
@Operation(summary = "按照商品详情编号联表查询数据") // Swagger文档的操作描述
@GetMapping(value = "/getGoodsById")
public R getGoodsByIds(@RequestParam("goodsId") Integer goodsId) {
List<GoodsParticularsVo> goodsParticularsVoList = new ArrayList<>();
// 查询商品详情
GoodsParticulars goodsParticulars = goodsParticularsService.getById(goodsId);
// 查询商品信息
Goods goods = goodsService.getById(goodsId);
// 查询商品品牌信息
GoodsBrand goodsBrand = goodsBrandService.getById(goodsParticulars.getBrandId());
// 将商品详情属性复制到商品详情视图对象中
GoodsParticularsVo goodsParticularsVo = new GoodsParticularsVo();
BeanUtils.copyProperties(goodsParticularsVo, goodsParticulars);
goodsParticularsVo.setGoodsId(goods.getGoodsId());
goodsParticularsVo.setGoodsName(goods.getGoodsName());
goodsParticularsVo.setGoodsDesc(goods.getGoodsDesc());
goodsParticularsVo.setGoodsPrice(goods.getGoodsPrice());
goodsParticularsVo.setGoodsBrand(goodsBrand);
goodsParticularsVoList.add(goodsParticularsVo);
return R.ok("按照商品详情编号查询数据成功").data("goods", goodsParticularsVoList); // 返回联表查询结果
}
@Operation(summary = "修改商品数据") // Swagger文档的操作描述
@PutMapping(value = "/updateGoods")
public R updateGoods(@RequestBody Goods goods) {
boolean flag = goodsService.updateById(goods); // 更新商品数据
if (flag) {
return R.ok("修改商品成功");
} else {
return R.error("修改商品失败");
}
}
}
最新模块截图
七、每日每人总结
姓名 |
总结 |
罗振烘 |
遇到的技术难题让我快速成长,收获满满 |
庄崇立 |
看到项目进度,很有成就感 |
李响 |
开发商城项目让我深刻理解了沟通的重要性 |
何昌洲 |
在团队协作中学会了高效沟通,提升了效率 |