基于java+springboot+vue的社区团购系统

项目介绍

本课题是根据用户的需要以及网络的优势建立的一个社区团购系统,来满足用户团购的需求。

本社区团购系统应用Java技术,MYSQL数据库存储数据,基于Spring Boot框架开发。在网站的整个开发过程中,首先对系统进行了需求分析,设计出系统的主要功能模块,其次对网站进行总体规划和详细设计,最后对基于Spring Boot的社区团购系统进行了系统测试,包括测试概述,测试方法,测试方案等,并对测试结果进行了分析和总结,进而得出系统的不足及需要改进的地方,为以后的系统维护和扩展提供了方便。

本系统布局合理、色彩搭配和谐、框架结构设计清晰,具有操作简单,界面清晰,管理方便,功能完善等优势,有很高的使用价值。

在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5.1 用户功能模块的实现
5.1.1用户注册界面
没有账号的用户可进入注册界面进行注册操作,用户注册界面的运行效果如图5-1所示.
在这里插入图片描述

图5-1 用户注册界面

5.1.2用户登录界面
用户要想实现商品购买等操作,必须进行登录操作,在登录界面输入正确的用户名和密码,选择登录类型,点击登录按钮进行登录,用户登录界面如图5-2所示。
在这里插入图片描述

图5-2用户登录界面

5.1.3系统主界面
用户在系统前台可查看系统信息,包括首页、商品信息、团购信息等,系统主界面的运行效果如图5-3所示.
在这里插入图片描述

图5-3系统主界面

5.1.4商品详情界面
用户可选择商品查看商品详情信息,登录后可进行收藏、加入购物车和购买操作,商品详情界面如图5-4所示。
在这里插入图片描述

图5-4 商品详情界面

5.1.5购物车界面
用户在购物车界面可查看购物车商品信息,并可进行修改数量、删除商品以及购买等操作,购物车界面展示如图5-5所示。
在这里插入图片描述

图5-5 购物车界面

5.1.6我的订单界面
用户在我的订单界面可查看个人订单信息,我的订单界面如图5-6所示。
在这里插入图片描述

图5-6 我的订单界面

5.1.7团购详情界面
用户可选择团购查看详情信息,登录后可进行加入购物车、购买或者收藏等,团购详情界面如图5-7所示。
在这里插入图片描述

图5-7 团购详情界面

5.2 管理员功能模块的实现
5.2.1管理员登录界面
管理员要想进入系统后台对系统进行管理,首要进入登录界面,需通过正确的账号、密码进行登录操作,管理员登录界面如图5-8所示 。
在这里插入图片描述

图5-8 管理员登录界面

5.2.2用户管理界面
管理员可查看、添加、修改、删除用户信息,用户管理界面展示如图5-9所示 。
在这里插入图片描述

图5-9 用户管理界面

5.2.3商品信息管理界面
管理员可增删改查商品信息,商品信息管理界面展示如图5-10所示,添加商品信息界面展示如图5-11所示 。
在这里插入图片描述

图5-10 商品信息管理界面
在这里插入图片描述

图5-11 添加商品信息界面

5.2.4团购信息管理界面
管理员可添加、修改和删除团购信息,团购信息管理界面展示如图5-11所示 。
在这里插入图片描述

图5-12 团购信息管理界面

5.2.5订单管理界面
管理员可查看所有订单信息,对未发货订单可进行发货操作,订单管理界面如图5-13所示。
在这里插入图片描述

图5-13 订单管理界面

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.ShangpinxinxiEntity;
import com.entity.view.ShangpinxinxiView;

import com.service.ShangpinxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 商品信息
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/shangpinxinxi")
public class ShangpinxinxiController {
    @Autowired
    private ShangpinxinxiService shangpinxinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi,
		HttpServletRequest request){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( ShangpinxinxiEntity shangpinxinxi){
       	EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); 
        return R.ok().put("data", shangpinxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ShangpinxinxiEntity shangpinxinxi){
        EntityWrapper< ShangpinxinxiEntity> ew = new EntityWrapper< ShangpinxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); 
		ShangpinxinxiView shangpinxinxiView =  shangpinxinxiService.selectView(ew);
		return R.ok("查询商品信息成功").put("data", shangpinxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
		shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);
		shangpinxinxi.setClicktime(new Date());
		shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
		shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);
		shangpinxinxi.setClicktime(new Date());
		shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }
    


    /**
     * 赞或踩
     */
    @RequestMapping("/thumbsup/{id}")
    public R vote(@PathVariable("id") String id,String type){
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
        if(type.equals("1")) {
        	shangpinxinxi.setThumbsupnum(shangpinxinxi.getThumbsupnum()+1);
        } else {
        	shangpinxinxi.setCrazilynum(shangpinxinxi.getCrazilynum()+1);
        }
        shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok("投票成功");
    }

    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
    	shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
    	shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.updateById(shangpinxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        shangpinxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<ShangpinxinxiEntity> wrapper = new EntityWrapper<ShangpinxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = shangpinxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request,String pre){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        params.put("order", "desc");
		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }


}

论文参考

在这里插入图片描述

目 录
摘 要 I
Abstract II
目 录 III
第1章 绪论 1
1.1 课题背景 1
1.2 设计原则 1
1.3 研究内容 2
第2章 关键技术简介 3
2.1 Java技术 3
2.2 B/S结构 3
2.3 MYSQL数据库 4
2.2 Spring Boot框架 4
第3章 系统分析 5
3.1 可行性分析 5
3.1.1 技术可行性 5
3.1.2 经济可行性 5
3.1.3 操作可行性 5
3.1.4 时间可行性 5
3.2 系统功能分析 6
3.3 系统性能分析 7
3.4 系统流程分析 7
3.4.1注册流程 7
3.4.2登录流程 8
3.4.3购买流程 9
第4章 系统设计 10
4.1 系统结构设计 10
4.2系统顺序图 10
4.2.1登录模块顺序图 10
4.2.2添加信息模块顺序图 11
4.3 数据库设计 12
4.3.1 数据库E-R图设计 12
4.3.2数据库表设计 14
第5章 系统的实现 18
5.1 用户功能模块的实现 18
5.1.1用户注册界面 18
5.1.2用户登录界面 18
5.1.3系统主界面 19
5.1.4商品详情界面 20
5.1.5购物车界面 20
5.1.6我的订单界面 21
5.1.7团购详情界面 21
5.2 管理员功能模块的实现 22
5.2.1管理员登录界面 22
5.2.2用户管理界面 23
5.2.3商品信息管理界面 24
5.2.4团购信息管理界面 25
5.2.5订单管理界面 26
第6章 系统测试 27
6.1 程序测试 27
6.2 测试方案计划 27
6.3 测试方法 28
6.4 测试分析 28
第7章 总结 29
参考文献 30
致 谢 31

最新2010-11-20日发上来的,开源团购源码 ,团购网站源码,是商业版的,有安装说明,功能是目前团购网站程序最齐全 的,官方网站 www.cmstuan.com 开源团购后台功能相关说明与升级历史 1、用户界面:支持前台无刷新选择新界面; 2、系统扩展:完美整合UCenter插件,可与其他系统同步注册登录、统一头像; 3、系统扩展:集成GoogleMap,可后台设置、标记商家所在区域; 4、邮件验证:支持验证Email真实性后才可以登录等(后台系统定义中设置); 5、邮件通知:支持团购成功时自动Email通知等; 6、邮件通知:支持用户Email订阅、登录取消订阅等; 7、推广营销:支持用户前台获取推荐连接,并邀请好友购买、返现; 8、支付接口:默认集成支付宝和财付通接口;可后台设置,或添加银行转账信息等; 9、团购流程:支持生成唯一订单号(方便沟通)、可切换不同的支付方式; 10、自动开通:满足团购要求时,系统自动开通相关订单、生成优惠券和随机密码; 11、帐户充值:可分批对账户进行充值再开通订单,方便对支付有限额的用户; 12、财务明细:全程记录资金的动作,即使直接开通订单,系统也会自动先充值再扣款; 13、放心消费:用户可在前台我的团购中看到每一笔资金信息和相关的备注; 14、消费保障:优惠券的消费需要密码,密码仅用户自己可见; 15、安全消费:即使知道了优惠券和密码,也只有对应的商家才可以消费; 16、合作商家:可前台登陆、查看自己的产品、优化券,并Email提醒用户消费; 17、产品消费:商家登陆后,输入优惠券和对应密码才可以消费(将优惠券变成已消费); 18、在线沟通:前台可在线提问、意见反馈和商务合作; 19、网站优化:可设置开启伪静态,Apache下系统支持自动创建伪静态规则; 20、网站优化:后台可开启Gzip压缩输出内容,加快页面打开速度; 21、网站安全:后台可设置过滤关键词内容,防止用户留言中包括违法内容; 22、IP管理 :可禁止指定IP的用户访问网站或者后台; 23、友情链接:支持后台添加文字或者图片友情链接; 24、关于我们:管理员可后台设置关于我们、联系我们、加入我们等信息; 25、互动管理:管理员后台可以回答问题,答复后的问题会在前台显示; 26、城市管理:可任意添加或修改城市、开启或关闭前台显示,可做地图标记; 27、商家管理:可列表查看商家旗下的产品数量、成功订单数和营业总额; 28、商家管理:可通过关键词查找商家,或直接查看某城市下的所有商家; 29、产品管理:添加产品时,支持选择城市自动选择其下商家,减少管理员操作; 30、产品管理:可列表查看团购产品的时间、价格、购买数、团购状态等; 31、产品管理:可一键查看成功团购产品的相关购买人、数量、时间和订单号; 32、订单管理:可列表查看每一订单的价格、购买数量、时间、购买人、支付状态等; 33、订单管理:对未支付的订单,可一键操作对该用户进行Email催款; 34、订单管理:对银行转账的订单,管理员可后台填写相关信息后,手工开通; 35、订单管理:可通过用户名、订单号、支付状态等查询订单; 36、订单管理:团购没达到指定人数,管理员可确认团购失败,并退款给用户; 37、团购券管理:可列表查看优惠券拥有人、到期时间,并发送Email到期提醒; 38、团购券管理:可通过团购券号、到期时间、使用状态等查看团购券; 39、返利管理:可列表查看购买人、时间、登陆IP、所购产品、其邀请人和登陆IP等 ; 40、返利管理:支持后台逐一管理满足返利的订单,并给用户返利到账户; 41、邮件订阅:可设置使用PHP的mail函数还是smtp发送邮件; 42、邮件订阅:可自由添加邮件通知内容,并选择邮件的发送区域; 43、邮件订阅:邮件均保存在发送队列中由计划任务控制发送,避免造成服务器堵塞; 44、计划任务:可添加计划任务,并自由设置计划任务的执行时间; 45、站长工具:可开启蜘蛛网页爬行统计,有效掌控搜索引擎对网站的友好性; 46、站长工具:可查看本站的Alexa排名、搜索引擎收录、网站近日收录、交换友情链接; 47、站长工具:可分卷备份数据库、在线打包下载、数据库优化、在线恢复等; 48、用户权限:可任意组合设置用户角色,设置不同权限的管理级别,方便多用户管理; 49、用户管理:可列表查看用户的角色、账号余额和总消费金额等; 50、用户管理:可编辑用户的信息,并查看指定用户的完整消费记录。 2010年9月7日00:01发布 1、增加Google地图功能 2010年9月13日发布 1、修改部分小BUG 2010年10月31日正式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_3306428634

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值