文章目录
一、项目演示
项目演示地址: 视频地址
二、项目介绍
项目描述:这是一个基于SpringBoot+uniApp框架 开发的宠物领养微信小程序系统。首先,这是一个前后端分离 的项目,前端分为用户端 和管理端 ,用户端 使用微信小程序(uniApp开发) ,管理端 使用Web页面(Vue开发)。然后这项目代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个宠物领养微信小程序系统该有的所有功能。
项目功能:此项目分为两个 角色:普通用户 和管理员 。普通用户 有登录注册、浏览宠物信息、浏览论坛帖子信息、管理自己发布的宠物信息、管理个人基本信息、管理自己发布的论坛帖子信息、评论帖子、收藏宠物、拍下宠物、管理自己的订单信息等等功能。管理员有管理所有用户信息、管理所有轮播图信息、管理所有首页板块信息、管理所有宠物分类信息、管理所有宠物信息、管理所有订单信息、管理所有论坛帖子信息、管理所有评论信息、查看收益数据图表等等功能。
应用技术:SpringBoot + uniApp + Vue3 + MySQL + MyBatis + Redis + ElementUI-Plus + uni-ui + Vite + TypeScript
运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node16.20.2(项目压缩包中自带)+ 微信开发者工具(项目压缩包中自带)+ Visual Studio Code(项目压缩包中自带)
三、运行截图
四、主要代码
1.保存宠物信息代码
java
/**
* 保存宠物信息
* @param petDTO
* @return
*/
@Override
public ResponseDTO<Boolean> savePet(PetDTO petDTO) {
// 进行统一表单验证
CodeMsg validate = ValidateEntityUtil.validate(petDTO);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validate);
}
Pet pet = CopyUtil.copy(petDTO, Pet.class);
if(CommonUtil.isEmpty(pet.getId())) {
// 添加操作
pet.setId(UuidUtil.getShortUuid());
pet.setCreateTime(new Date());
pet.setState(PetStateEnum.WAIT.getCode());
batchInsertPicture(petDTO.getPhotoList(), pet.getId());
if(petMapper.insertSelective(pet) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.PET_ADD_ERROR);
}
} else {
// 修改操作
pet.setState(Optional.ofNullable(pet.getState()).orElse(PetStateEnum.WAIT.getCode()));
PictureExample pictureExample = new PictureExample();
pictureExample.createCriteria().andRefIdEqualTo(pet.getId());
pictureMapper.deleteByExample(pictureExample);
batchInsertPicture(petDTO.getPhotoList(), pet.getId());
if(petMapper.updateByPrimaryKeySelective(pet) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.PET_EDIT_ERROR);
}
}
return ResponseDTO.successByMsg(true, "保存成功!");
}
2.提交订单信息代码
java
/**
* 提交订单信息
* @param orderDTO
* @return
*/
@Override
public ResponseDTO<Boolean> submitOrder(OrderDTO orderDTO) {
// 进行统一表单验证
CodeMsg validate = ValidateEntityUtil.validate(orderDTO);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validate);
}
Order order = CopyUtil.copy(orderDTO, Order.class);
Pet pet = petMapper.selectByPrimaryKey(order.getPetId());
if(pet.getUserId().equals(order.getUserId())) {
return ResponseDTO.errorByMsg(CodeMsg.ORDER_REPEAT_ERROR);
}
if(!PetStateEnum.SUCCESS.getCode().equals(pet.getState())) {
return ResponseDTO.errorByMsg(CodeMsg.ORDER_PET_STATE_ERROR);
}
Category category = categoryMapper.selectByPrimaryKey(pet.getCategoryId());
order.setCategoryName(Optional.ofNullable(category.getName()).orElse(""));
Plate plate = plateMapper.selectByPrimaryKey(pet.getPlateId());
order.setPlateName(Optional.ofNullable(plate.getName()).orElse(""));
order.setId(UuidUtil.getShortUuid());
order.setTotalPrice(pet.getPrice());
order.setPetName(pet.getName());
order.setPetInfo(pet.getInfo());
PictureExample pictureExample = new PictureExample();
pictureExample.createCriteria().andTypeEqualTo(PictureTypeEnum.PET.getCode()).andRefIdEqualTo(pet.getId());
pictureExample.setOrderByClause("sort asc");
List<Picture> pictureList = pictureMapper.selectByExample(pictureExample);
if(pictureList.size() > 0) {
order.setPetPhoto(pictureList.get(0).getPhoto());
}
order.setSellerId(pet.getUserId());
order.setCreateTime(new Date());
if(orderMapper.insertSelective(order) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.ORDER_ADD_ERROR);
}
pet.setState(PetStateEnum.SELL.getCode());
petMapper.updateByPrimaryKeySelective(pet);
return ResponseDTO.successByMsg(true, "下单成功!");
}
3.查询评论信息代码
java
/**
* 查询评论信息
* @param commentDTO
* @return
*/
@Override
public ResponseDTO<List<CommentDTO>> getCommentList(CommentDTO commentDTO) {
CommentExample commentExample = new CommentExample();
CommentExample.Criteria criteria = commentExample.createCriteria();
int total = 0;
if(!CommonUtil.isEmpty(commentDTO.getPostId())) {
criteria.andPostIdEqualTo(commentDTO.getPostId());
total = commentMapper.countByExample(commentExample);
}
// 先查所有父级评论
criteria.andParentIdEqualTo("");
commentExample.setOrderByClause("create_time desc");
List<Comment> commentList = commentMapper.selectByExample(commentExample);
List<CommentDTO> commentDTOList = CopyUtil.copyList(commentList, CommentDTO.class);
for(CommentDTO comment : commentDTOList) {
User user = userMapper.selectByPrimaryKey(comment.getUserId());
comment.setUserDTO(CopyUtil.copy(user, UserDTO.class));
// 查询子评论
CommentExample childCommentExample = new CommentExample();
childCommentExample.createCriteria().andParentIdEqualTo(comment.getId());
childCommentExample.setOrderByClause("create_time desc");
List<Comment> childCommentList = commentMapper.selectByExample(childCommentExample);
// 查询子评论
List<CommentDTO> childCommentDTOList = CopyUtil.copyList(childCommentList, CommentDTO.class);
for(CommentDTO childComment : childCommentDTOList) {
childComment.setUserDTO(CopyUtil.copy(userMapper.selectByPrimaryKey(childComment.getUserId()), UserDTO.class));
childComment.setReplyUserDTO(CopyUtil.copy(userMapper.selectByPrimaryKey(childComment.getReplyId()), UserDTO.class));
}
comment.setChildCommentDTOList(childCommentDTOList);
}
return ResponseDTO.successByMsg(commentDTOList, String.valueOf(total));
}