基于Springboot + vue +MySQL 家乡特色推荐系统 (含源码)

目录

📚 前言

📑摘要

📑系统流程

📚 系统架构设计

📚 数据库设计

   💬  用户注册实体图

   💬 文章分享实体图

📚 系统功能的具体实现

   💬 系统登录注册

系统登录

用户注册

  文章分享

 💬 管理员功能模块

 登录管理员

用户管理

文章分类管理

系统管理

 💬 用户功能模块

用户登录

文章分享管理

✒️ 源码实现

💖 源码获取

😁 联系方式


📚 前言

📑博客主页:@丘比特惩罚陆

💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:Java Springboot 毕设实战专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!

👏 希望大家能小手一动,帮忙点个赞!


📑摘要

    家乡特色推荐系统采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页,个人中心,用户管理,文章分类管理,文章分享管理,系统管理等内容进行管理,本系统具有良好的兼容性和适应性,为用户提供更多的家乡特色文章信息,也提供了良好的平台,从而提高系统的核心竞争力。


📑 系统的架构

    B/S的系统是通过能上网的电脑就可以使用,它最大的优点是不需要安装专门的软件,首先浏览器向服务器发出请求,然后服务器处理请求把信息再返回给浏览器。

📑系统流程

统用例图:

   

                                                            

                                                             流程图

添加信息流程:

                                                         添加信息流程图

📚 系统架构设计

体系架构

系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。家乡特色推荐系统的整个设计结构如下:


📚 数据库设计

   💬  用户注册实体图

   💬 文章分享实体图

📚 系统功能的具体实现

   💬 系统登录注册

系统登录

家乡特色推荐系统,在系统首页可以查看首页,文章分享,资讯信息,个人中心,后台管理等内容进行详细操作

用户注册

用户注册,在用户注册页面通过填写用户名,密码,确认密码,姓名,手机等信息完成用户注册

  文章分享

文章分享,在文章分享页面可以查看文章分类,简述,发布时间,用户名,姓名,点击次数等详细内容,并进行评论和收藏操作

 💬 管理员功能模块

    登录管理员

管理员登录,进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作

用户管理

用户管理,在用户管理页面可以对索引,用户名,姓名,头像,性别,手机,审核回复,审核状态,审核等信息进行详情,修改和删除等操作

文章分类管理

文章分类管理,在文章分类管理页面可以对索引,文章分类等内容进行详情,修改和删除等操作

系统管理

系统管理,在轮播图管理页面可以对索引,名称,值等内容进行详情,修改或删除等操作

 💬 用户功能模块

用户登录

用户登录进入系统,可以对首页,个人中心,文章分享管理,我的收藏管理等功能模块进行相应操作

文章分享管理

文章分享管理,在文章分享管理页面可以对索引,标题,图片,文章分类,简述,发布时间,用户名,姓名,审核回复,审核状态等信息进行详情,修改,查看评论和删除等操作

等等

✒️ 源码实现

/**
 * 文章分享
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-17 10:21:50
 */
@RestController
@RequestMapping("/wenzhangfenxiang")
public class WenzhangfenxiangController {
    @Autowired
    private WenzhangfenxiangService wenzhangfenxiangService;

    @Autowired
    private StoreupService storeupService;

    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WenzhangfenxiangEntity wenzhangfenxiang,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wenzhangfenxiang.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<WenzhangfenxiangEntity> ew = new EntityWrapper<WenzhangfenxiangEntity>();
		PageUtils page = wenzhangfenxiangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenzhangfenxiang), params), params));

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WenzhangfenxiangEntity wenzhangfenxiang){
        EntityWrapper< WenzhangfenxiangEntity> ew = new EntityWrapper< WenzhangfenxiangEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wenzhangfenxiang, "wenzhangfenxiang")); 
		WenzhangfenxiangView wenzhangfenxiangView =  wenzhangfenxiangService.selectView(ew);
		return R.ok("查询文章分享成功").put("data", wenzhangfenxiangView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WenzhangfenxiangEntity wenzhangfenxiang = wenzhangfenxiangService.selectById(id);
		wenzhangfenxiang.setClicknum(wenzhangfenxiang.getClicknum()+1);
		wenzhangfenxiang.setClicktime(new Date());
		wenzhangfenxiangService.updateById(wenzhangfenxiang);
        return R.ok().put("data", wenzhangfenxiang);
    }

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



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

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wenzhangfenxiangService.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<WenzhangfenxiangEntity> wrapper = new EntityWrapper<WenzhangfenxiangEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}

		int count = wenzhangfenxiangService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,WenzhangfenxiangEntity wenzhangfenxiang, HttpServletRequest request,String pre){
        EntityWrapper<WenzhangfenxiangEntity> ew = new EntityWrapper<WenzhangfenxiangEntity>();
        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 = wenzhangfenxiangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenzhangfenxiang), params), params));
        return R.ok().put("data", page);
    }







}

💖 源码获取

点赞、收藏、关注!!!

非无偿源码!获取源码请添加up主!!

😁 联系方式

文章最底下有微信联系方式!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丘比特惩罚陆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值