第三篇 Scrum冲刺博客
第三篇 Scrum冲刺博客
目录
Part one 作业地址
这个作业属于哪个课程 | 软件工程 |
---|---|
作业要求 | 第三篇 Scrum冲刺博客 |
作业目标 | 团队集体协作完成项目开发,促进彼此间的交流 |
Part two 站立式会议
1.1 微信会议照片
注:由于大家的时间较为紧迫,这次开会采用线上微信开会,主要还是讨论个人的进度问题以及做任务时候遇到的困难,然后大家一起解决。
1.2成员工作情况
成员 | 昨天已完成的工作 | 今天计划完成的工作 | 工作中遇到的困难 |
---|---|---|---|
张天 | 做好接下来五天的计划 | 继续实现水平方向和竖直方向的商城管理器,设置组件内边距和外边距的工具类 | 对布局管理不熟悉,查阅了许多资料 |
黄炜恒 | 基本做好了模拟环境 | 设计一些上架入驻模式的规则,并尝试实现 | 有些规则难以在实际中实现 |
黄浩捷 | 明确模块,下载windowsbuilder | 进行简单的主界面的设置,添加图片 | 已较为熟悉windowsbuilder |
陈伟升 | 微信支付以及支付宝支付 | 设计支付模块 | 跳转较为困难,不符合设计要求 |
曾广宁 | 无 | 构思购物车的整体架构 | 一些具体细节如商品名等需要与其他同学进行协商 |
曾春华 | 明确自己的模块并查阅了相关资料 | 构思商品的整体架构 | 一些具体细节如商品名,以及商品模块等需要与其他同学进行协商 |
Part three 项目燃尽图
注:进度中一些比较耗费时间的任务已基本完成,接下来的任务主要是对模块当中的一些细节进行优化。
Part four 代码/文档签入记录
3.1 代码签入
说明:第二天git操作仍然遇到一些问题,但是操作明显进步了不少
3.2 Issue链接
成员 | Issue链接 |
---|---|
张天 | 实现一些工具组件类1 |
黄炜恒 | 商家入驻模块 |
黄浩捷 | 商城主界面 |
陈伟升 | 支付模块 |
曾广宁 | 商品的整体架构 |
曾春华 | 商品的整体架构 |
Part five 最新程序/模块
4.1 程序代码
package com.nanrailgun.user_service_provider.service.impl;//用户服务代码模块
import com.nanrailgun.config.common.MallException;
import com.nanrailgun.config.common.ServiceResultEnum;
import com.nanrailgun.config.utils.MyBeanUtil;
import com.nanrailgun.user_api.api.MallUserAddressService;
import com.nanrailgun.user_api.api.dto.MallUserAddressDTO;
import com.nanrailgun.user_api.entity.MallUserAddress;
import com.nanrailgun.user_service_provider.dao.MallUserAddressMapper;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service
public class MallUserAddressServiceImpl implements MallUserAddressService { //商城提供的服务代码模块
@Resource
MallUserAddressMapper mallUserAddressMapper;
@Override
public List<MallUserAddressDTO> getAddressList(Long userId) {
List<MallUserAddress> list = mallUserAddressMapper.selectAllAddress(userId);
return MyBeanUtil.copyList(list, MallUserAddressDTO.class);
}
@Override
public MallUserAddress getAddressByAddressId(Long addressId) {
MallUserAddress address = mallUserAddressMapper.selectByPrimaryKey(addressId);
if (address == null) {
MallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
return address;
}
@Override
public MallUserAddress getDefaultAddress(Long userId) {
return mallUserAddressMapper.selectDefaultAddress(userId);
}
@Override
@Transactional
public void saveAddress(MallUserAddress address) {
Date now = new Date();
if (address.getDefaultFlag() == 1) {
MallUserAddress oldAddress = mallUserAddressMapper.selectDefaultAddress(address.getUserId());
if (oldAddress != null) {
oldAddress.setDefaultFlag((byte) 0);
oldAddress.setUpdateTime(now);
if (mallUserAddressMapper.updateByPrimaryKey(oldAddress) < 1) {
MallException.fail(ServiceResultEnum.DB_ERROR.getResult());
}
}
}
if (mallUserAddressMapper.insert(address) < 1)
MallException.fail(ServiceResultEnum.DB_ERROR.getResult());
}
@Override
@Transactional
public void updateAddress(MallUserAddress address) {
Date now = new Date();
if (address.getDefaultFlag() == 1) {
MallUserAddress oldAddress = mallUserAddressMapper.selectDefaultAddress(address.getUserId());
if (oldAddress != null && !oldAddress.getAddressId().equals(address.getAddressId())) {
oldAddress.setDefaultFlag((byte) 0);
oldAddress.setUpdateTime(now);
if (mallUserAddressMapper.updateByPrimaryKey(oldAddress) < 1) {
MallException.fail(ServiceResultEnum.DB_ERROR.getResult());
}
}
}
address.setUpdateTime(now);
if (mallUserAddressMapper.updateByPrimaryKey(address) < 1)
MallException.fail(ServiceResultEnum.DB_ERROR.getResult());
}
@Override
public Boolean deleteAddress(Long addressId) {
return mallUserAddressMapper.deleteByPrimaryKey(addressId) > 0;
}
}
package com.nanrailgun.config.config; //用户登录界面模块
import com.nanrailgun.config.common.MallException;
import com.nanrailgun.config.common.ServiceResultEnum;
import com.nanrailgun.config.utils.Result;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.Objects;
@RestControllerAdvice
public class MallExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object bindException(MethodArgumentNotValidException e) {
Result result = new Result();
result.setResultCode(510);
BindingResult bindingResult = e.getBindingResult();
result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
return result;
}
@ExceptionHandler(Exception.class)
public Object handleException(Exception e) {
Result result = new Result();
result.setResultCode(500);
//区分是否为自定义异常
if (e instanceof MallException) {
result.setMessage(e.getMessage());
if (e.getMessage().equals(ServiceResultEnum.NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult())) {
result.setResultCode(416);
}
} else {
e.printStackTrace();
result.setMessage("未知异常,请联系管理员");
}
return result;
}
}
4.2 运行截图
用户显示商城的界面
用户支付界面
Part six 每人每日总结
成员 | 小结 |
---|---|
张天 | 时间是挤出来的,继续压榨时间出来开发 |
黄炜恒 | 需要多尝试,多探索 |
黄浩捷 | 用时4小时以上,由于初使用windowsbuilder,不太熟练,摸索式前进。 |
陈伟升 | 我实现了java的支付模块,一开始学习也耗费了许多的时间,太难了 |
曾广宁 | 需要多学习,不然真的跟不上团队的速度 |
曾春华 | 完整而具体的构思,还有与同学良好的沟通是一个比较好的开始 |