本系统具备二手车发布、求购发布、论坛管理、违规举报等功能。
根据二手车交易平台的背景意义,结合系统设计分析,最后通过功能测试,完成二手车交易平台的部署。本文将分别阐述以上各个流程的详细说明。
关键词 二手车交易;SpringBoot;MySQL;微信小程序
基于微信小程序的二手车交易设计与实现
1.绪论
1.1 研究背景
在互联网飞速发展下,如今互联网相关技术得到完善,现在这个时代是互联网应用全面发展的时代,相比于其他应用,微信小程序的数据库是在服务器上的,这极大地减少了软件存储的工作量,不需要下载应用软件,只需要在微信上就可以使用。与传统的 Web应用不同,微信应用软件不支持外链,因为它是内置在微信上的,所以不能提供任何的外链服务。但这个“缺陷”,在微信庞大的用户群和成熟的手机生态圈中,却是起到了极大的作用。简化的微信应用软件,为开发人员减少了工作压力,同时也为用户提供了方便。根据微信的数据,2018年为230万个,2019年已增至300万个;2020年数量为380万个,截止2021年上半年数量为430万个[1]。从以上数据可见人们对微信小程序的依赖度越来越高。对于微信小程序开发人员,微信小程序的开发要求相对其他语言较低、难度也不及App。
1.2 国内外研究动态
我国二手市场的交易方式经过了从跳蚤市场的线下二手交易、二手交易信息门户网站、二手交易专用网站到手机二手交易 APP四个阶段。现在的二手市场,大部分都是本地的跳蚤市场,比如即将毕业的广大群众,就会在这里摆摊,开设跳蚤市场和旧货市场。在2014年以后,伴随着手机端互联网的流量的突然迸发和手机逐渐取代了电脑的成为主流互联网设备,交易更加便利快捷的手机二手交易电子商务系统相继建立。比如阿里巴巴的“闲鱼” APP,现在已经成为了主流 APP,58同城也有了转转 APP[2]。根据数据显示,在现在拥有二手电商项目的八十多家的公司中,有超过六成的公司都在运营移动客户端。总的来说,国内二手电商平台的二手车覆盖面较广,以标准化程度较高的耐用品为主,另一方面,中国的二手市场潜力很大,如果市场能充分释放,未来的市场将会是一个很好的发展空间。
国外二手交易平台经过长期发展,已经初具规模并进入蓬勃发展时期。美国最大的在线经销商eBay在过去几年的整体交易份额中,二手车交易份额一直占有相对较高的比例,著名的二手时尚交易平台Thredup、The RealReal、Poshmark三大巨头目前已分别获得1.3亿、1.73亿和1.53亿美元[3]综合国外二手车交易市场发展来看,由于其在线二手平台经营时间长、产业成熟度高,网络二手市场交易已经初具规模并逐渐开始成熟运营,有很多地方值得国内学习和借鉴。
1.3 主要研究内容及意义
近年来,网购已成为广大群众的主要购物方式之一,但由于盲目消费或产品更换等原因,导致的二手车越来越多。特别是在大学里,毕业生们每年都要扔掉许多废弃的东西。比如书、服装、电子产品等等。所以,每年毕业的时候,很多学生都会摆摊卖这些没用的东西。即使能在一定程度上达到二手车再次利用的目的,也会造成人群混乱,社会管理麻烦等问题。同时,现在疫情期间也有起伏,线下大范围聚集也不是推荐的方式。不但,给社会管理带来诸多不便,而且影响社会形象,也在一定程度上阻碍了防疫工作的开展。针对以上问题,着手设计并进行开发一个二手车交易平台。用户在成功登录后,用户能在系统上架自己的闲置二手车,同时也可以在系统中找到自己心仪的二手车,方便学生的也可以解决社会的管理问题[4]。
演示视频:
基于springboot二手车交易微信小程序源码和论文
package com.njh.shop.controller;
import com.njh.shop.entity.*;
import com.njh.shop.page.AjaxResult;
import com.njh.shop.page.ReturnData;
import com.njh.shop.service.*;
import com.njh.shop.util.StringUtil;
import com.njh.shop.entity.*;
import com.njh.shop.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.*;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private CommodityService commodityService;
@Autowired
private CommodityImgService commodityImgService;
@Autowired
private SeekService seekService;
@Autowired
private CollectService collectService;
@Autowired
private MessageService messageService;
@Autowired
private TopicService topicService;
@Autowired
private TopicImgService topicImgService;
@Autowired
private AttentionService attentionService;
/**
* 跳转到用户列表页面
*/
@RequestMapping("/toUser")
public String toUser(){
return "user/userList";
}
/**
* 跳转到消息发送页面
*/
@RequestMapping("/toSendMsg")
public ModelAndView toSendMsg(@RequestParam("userId") Integer userId){
ModelAndView mav = new ModelAndView();
mav.addObject("userId",userId);
mav.setViewName("user/sendMsg");
return mav;
}
/**
* 返回用户列表
*/
@PostMapping("/userList")
@ResponseBody
public Map<String,Object> userList(User user, @RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "limit", required = false) Integer pageSize){
// 如果昵称不为空,赋值为 模糊查询的格式
if(StringUtil.isNotEmpty(user.getNickName())){
user.setNickName("%" + user.getNickName() + "%");
}
Map<String,Object> result = new HashMap<>();
List<User> userList = userService.findByParam(user,page,pageSize);
Long count = userService.getCount(user);
result.put("data",userList);
result.put("count",count);
result.put("code",0);
return result;
}
/**
* 发送消息给用户
*/
@PostMapping("/sendMsg")
@ResponseBody
public AjaxResult sendMsg(Message message, @RequestParam("userId")Integer userId){
AjaxResult result = null;
User user = new User();
user.setId(userId);
message.setUser(user);
message.setState(0);
message.setCreateTime(new Date());
System.out.println("消息:" + message);
int count = messageService.publishMsg(message);
if(count > 0){
result = new AjaxResult(true,"消息发送成功!");
} else{
result = new AjaxResult(false,"发送失败!");
}
return result;
}
/**
* 禁用该用户发布二手车的功能
* 恢复该用户发布二手车的功能
*/
@PostMapping("/updateHaveUserInfo")
@ResponseBody
public AjaxResult disableUser(@RequestParam("openid")String openid,@RequestParam("haveUserInfo") String haveUserInfo){
AjaxResult result = null;
User user = new User();
user.setOpenid(openid);
user.setHaveUserInfo(haveUserInfo);
int count = userService.updateUser(user);
if(count > 0){
result = new AjaxResult(true,"操作成功");
} else{
result = new AjaxResult(false,"操作失败");
}
return result;
}
/**
* 小程序端登录
* 用户登录
*/
@PostMapping("/login/{code}")
@ResponseBody
public ReturnData login(@PathVariable("code") String code){
return userService.loginByCode(code);
}
/**
* 登录用户信息完善,但是这里还是没有 QQ号 和 WeCaht
* @return
*/
@PostMapping("/updateOne")
@ResponseBody
public ReturnData updateOne(@RequestParam("openid") String openid,@RequestParam("nickName") String nickName,
@RequestParam("avatarUrl") String avatarUrl,@RequestParam("gender")Integer gender){
User user = new User();
user.setOpenid(openid);
// 登录用户名,做表情包替换处理
if(nickName != null){
user.setNickName(StringUtil.filterEmoji(nickName));
}
user.setAvatarUrl(avatarUrl);
user.setGender((byte) gender.intValue());
user.setUpdateTime(new Date());
// 用户信息初步完善
user.setHaveUserInfo("1");
System.out.println("用户信息=============" + user);
ReturnData returnData = null;
int count = userService.updateUser(user);
if(count > 0){
user = userService.findByOpenid(openid);
returnData = new ReturnData(true,"用户信息已经初步完善!",User.HAVE_USER_INFO,user);
} else{
user.setHaveUserInfo("0");
returnData = new ReturnData(false,"用户信息更新失败!",User.NOT_USER_INFO,user);
}
return returnData;
}
/**
* 登录用户信息完善,用户添加 QQ号 和 WeCaht
* @return
*/
@PostMapping("/updateComplete")
@ResponseBody
public ReturnData updateComplete(@RequestParam("openid") String openid,
@RequestParam("qqNum") String qqNum,@RequestParam("wechatNum") String wechatNum){
ReturnData returnData = null;
if(StringUtil.isEmpty(openid)){
return new ReturnData(false,"用户信息更新失败!");
}
User user = new User();
user.setOpenid(openid);
user.setQqNum(qqNum);
user.setWechatNum(wechatNum);
user.setHaveUserInfo(User.ALL_USER_INFO);
user.setUpdateTime(new Date());
int count = userService.updateUser(user);
if(count > 0){
user = userService.findByOpenid(openid);
returnData = new ReturnData(true,"用户信息已完善!",User.ALL_USER_INFO,user);
} else{
returnData = new ReturnData(false,"用户信息更新失败!");
}
return returnData;
}
/**
* 返回给小程序端的数据
*/
/**
* 获取用户信息
*/
@PostMapping("/getHaveUserInfo")
@ResponseBody
public ReturnData getHaveUserInfo(@RequestParam("openid") String openid){
ReturnData returnData = null;
User user = userService.findByOpenid(openid);
if(user != null){
returnData = new ReturnData(true,"用户信息已完善!",user.getHaveUserInfo(),user);
} else{
returnData = new ReturnData(false,"用户信息获取失败!");
}
return returnData;
}
/**
* 用户发布的二手车列表
*/
@GetMapping("/getCommodityList/{userId}")
@ResponseBody
public List<Commodity> getCommodityList(@PathVariable("userId") Integer userId){
List<Commodity> commodityList = commodityService.findByUserId(userId);
return commodityList;
}
/**
* 小程序中查看一个用户发布的二手车(售出中的)
*/
@GetMapping("/getUserPublish/{userId}")
@ResponseBody
public List<Commodity> getUserPublish(@PathVariable("userId") Integer userId){
Commodity commodity = new Commodity();
User user = new User();
user.setId(userId);
commodity.setUser(user);
// 售出中的二手车
commodity.setState(1);
List<Commodity> commodityList = commodityService.getUserPublish(commodity);
return commodityList;
}
/**
* 更新二手车状态
*/
@PostMapping("/updateCommodityState")
@ResponseBody
public AjaxResult updateCommodityState(@RequestParam("id")Integer id,@RequestParam("state") Integer state){
AjaxResult result = null;
System.out.println("二手车状态、id"+ state + "/" + id);
int count = commodityService.updateCommodityState(state,id);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 删除二手车记录
* 二手车状态改为 4
*/
@PostMapping("/delCommodity/{id}")
@ResponseBody
public AjaxResult delCommodity(@PathVariable("id")Integer id){
AjaxResult result = null;
int count = commodityService.updateCommodityState(4,id);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 用户发布的求购列表
*/
@GetMapping("/getSeekList/{userId}")
@ResponseBody
public List<Seek> getSeekList(@PathVariable("userId")Integer userId){
List<Seek> seekList = seekService.findByUserId(userId);
return seekList;
}
/**
* 删除求购信息
* 将求购信息状态改为 0
*/
@GetMapping("/deleteSeek/{id}")
@ResponseBody
public AjaxResult deleteSeek(@PathVariable("id")Integer id){
AjaxResult result = null;
// 更新求购信息,主要修改求购信息状态
Seek seek = new Seek();
seek.setId(id);
seek.setState(0);
int count = seekService.updateSeekState(id);
if(count > 0){
result = new AjaxResult(true,"求购信息已删除!");
} else{
result = new AjaxResult(false,"删除失败!");
}
return result;
}
/**
* 用户的收藏列表
*/
@GetMapping("/getCollectList/{userId}")
@ResponseBody
public List<Collect> getCollectList(@PathVariable("userId")Integer userId){
List<Collect> collectList = collectService.findByUserId(userId);
System.out.println("=====collectList====");
System.out.println(collectList);
return collectList;
}
/**
* 获取用户与二手车间是否有收藏关系
*/
@GetMapping("/startCollectState")
@ResponseBody
public AjaxResult startCollectState(@RequestParam("userId")Integer userId,@RequestParam("commodityId")Integer commodityId){
AjaxResult result = null;
Commodity commodity = new Commodity();
commodity.setId(commodityId);
User user = new User();
user.setId(userId);
Collect collect = new Collect();
collect.setCommodity(commodity);
collect.setUser(user);
collect.setCreateTime(new Date());
Collect count = collectService.findCollect(collect);
if(count != null){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 添加收藏信息
*/
@PostMapping("/addCollect")
@ResponseBody
public AjaxResult addCollect(@RequestParam("userId")Integer userId,@RequestParam("commodityId")Integer commodityId){
AjaxResult result = null;
Commodity commodity = new Commodity();
commodity.setId(commodityId);
User user = new User();
user.setId(userId);
Collect collect = new Collect();
collect.setCommodity(commodity);
collect.setUser(user);
collect.setCreateTime(new Date());
int count = collectService.addCollect(collect);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 删除用户收藏
*/
@GetMapping("/deleteCollect/{id}")
@ResponseBody
public AjaxResult deleteCollect(@PathVariable("id")Integer id){
AjaxResult result = null;
int count = collectService.deleteCollect(id);
if(count > 0){
result = new AjaxResult(true,"删除成功!");
} else{
result = new AjaxResult(false,"删除失败!");
}
return result;
}
/**
* 取消收藏,在二手车详情中,取消收藏
*/
@PostMapping("/cancelCollect")
@ResponseBody
public AjaxResult cancelCollect(@RequestParam("userId")Integer userId,@RequestParam("commodityId")Integer commodityId){
AjaxResult result = null;
Commodity commodity = new Commodity();
commodity.setId(commodityId);
User user = new User();
user.setId(userId);
Collect collect = new Collect();
collect.setCommodity(commodity);
collect.setUser(user);
collect.setCreateTime(new Date());
int count = collectService.cancelCollect(collect);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 用户的消息列表
*/
@GetMapping("/getMessageList/{userId}")
@ResponseBody
public List<Message> getMessageList(@PathVariable("userId")Integer userId){
List<Message> messageList = messageService.findByUserId(userId);
System.out.println("======消息列表");
System.out.println(messageList);
return messageList;
}
/**
* 修改消息阅读状态(0,未读;1,已读;2,删除状态)
*/
@PostMapping("/updateMessageState")
@ResponseBody
public AjaxResult updateMessageState(@RequestParam("id")Integer id,@RequestParam("state") Integer state){
AjaxResult result = null;
Message message = new Message();
message.setId(id);
message.setState(state);
System.out.println("消息的状态、id"+ state + "/" + id);
int count = messageService.updateMsgState(message);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 获取用户的消息数
*/
@GetMapping("/getMsgCount/{userId}")
@ResponseBody
public Long getMsgCount(@PathVariable("userId")Integer userId){
Long count = messageService.getCountByUserId(userId);
System.out.println("该用户消息数为:" + count);
return count;
}
/**
* 论坛模块
*/
/**
* 用户发布的帖子列表
*/
@GetMapping("/getTopicList/{userId}")
@ResponseBody
public List<Topic> getTopicList(@PathVariable("userId") Integer userId){
List<Topic> topicList = topicService.findByUserId(userId);
return topicList;
}
/**
* 用户的话题关注列表
*/
@GetMapping("/getAttentionList/{userId}")
@ResponseBody
public List<Attention> getAttentionList(@PathVariable("userId")Integer userId){
List<Attention> attentionList = attentionService.findByUserId(userId);
System.out.println("=====attentionList====");
System.out.println(attentionList);
return attentionList;
}
/**
* 获取用户与帖子间是否有关注关系
*/
@GetMapping("/startAttentionState")
@ResponseBody
public AjaxResult startAttentionState(@RequestParam("userId")Integer userId,@RequestParam("topicId")Integer topicId){
AjaxResult result = null;
Topic topic = new Topic();
topic.setId(topicId);
User user = new User();
user.setId(userId);
Attention attention = new Attention();
attention.setTopic(topic);
attention.setUser(user);
attention.setCreateTime(new Date());
Attention count = attentionService.findAttention(attention);
if(count != null){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 添加关注信息
*/
@PostMapping("/addAttention")
@ResponseBody
public AjaxResult addAttention(@RequestParam("userId")Integer userId,@RequestParam("topicId")Integer topicId){
AjaxResult result = null;
Topic topic = new Topic();
topic.setId(topicId);
User user = new User();
user.setId(userId);
Attention attention = new Attention();
attention.setTopic(topic);
attention.setUser(user);
attention.setCreateTime(new Date());
int count = attentionService.addAttention(attention);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 删除用户关注
*/
@GetMapping("/deleteAttention/{id}")
@ResponseBody
public AjaxResult deleteAttention(@PathVariable("id")Integer id){
AjaxResult result = null;
int count = attentionService.deleteAttention(id);
if(count > 0){
result = new AjaxResult(true,"已取消关注!");
} else{
result = new AjaxResult(false,"取消失败!");
}
return result;
}
/**
* 取消关注,在帖子详情中,取消关注
*/
@PostMapping("/cancelAttention")
@ResponseBody
public AjaxResult cancelAttention(@RequestParam("userId")Integer userId,@RequestParam("topicId")Integer topicId){
AjaxResult result = null;
Topic topic = new Topic();
topic.setId(topicId);
User user = new User();
user.setId(userId);
Attention attention = new Attention();
attention.setTopic(topic);
attention.setUser(user);
attention.setCreateTime(new Date());
int count = attentionService.cancelAttention(attention);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
/**
* 删除帖子
* 帖子状态改为 0
*/
@PostMapping("/delTopic/{id}")
@ResponseBody
public AjaxResult delTopic(@PathVariable("id")Integer id){
AjaxResult result = null;
Topic topic = new Topic();
topic.setId(id);
topic.setState(0);
int count = topicService.updateTopicState(topic);
if(count > 0){
result = new AjaxResult(true);
} else{
result = new AjaxResult(false);
}
return result;
}
}