基于java+ssm+vue的在线云音乐系统的设计与实现

项目介绍

随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统。

本文首先分析了基于JSP的在线云音乐系统需求,并从系统开发环境、系统目标、设计流程、功能设计等方面对系统进行了系统的设计。基于JSP的音乐播放器应用程序是用java语言设计。客户端主要实现在线云音乐系统,根据需要选择最喜爱的音乐,并推荐歌曲、收藏喜欢的歌曲,查看歌曲信息等主要功能模块,实现在线云音乐系统的系统功能。通过对系统功能的测试,测试结果表明该系统界面友好,功能齐全,具有很高的使用价值,具有巨大的潜在用户群和广阔的应用前景。
在这里插入图片描述

开发环境

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

系统截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部分代码

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.GequxinxiEntity;
import com.entity.view.GequxinxiView;

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


/**
 * 歌曲信息
 * 后端接口
 */
@RestController
@RequestMapping("/gequxinxi")
public class GequxinxiController {
    @Autowired
    private GequxinxiService gequxinxiService;



    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,GequxinxiEntity gequxinxi,
		HttpServletRequest request){

        EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
    	PageUtils page = gequxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gequxinxi), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }

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

	/**
     * 列表
     */
    @RequestMapping("sts")
    public R list( GequxinxiEntity gequxinxi){
       	EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( gequxinxi, "gequxinxi"));
        return R.ok().put("data", gequxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(GequxinxiEntity gequxinxi){
        EntityWrapper< GequxinxiEntity> ew = new EntityWrapper< GequxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( gequxinxi, "gequxinxi"));
		GequxinxiView gequxinxiView =  gequxinxiService.selectView(ew);
		return R.ok("查询歌曲信息成功").put("data", gequxinxiView);
    }

    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        GequxinxiEntity gequxinxi = gequxinxiService.selectById(id);
		gequxinxi.setClicknum(gequxinxi.getClicknum()+1);
		gequxinxi.setClicktime(new Date());
		gequxinxiService.updateById(gequxinxi);
        return R.ok().put("data", gequxinxi);
    }

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



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

    /**
     * 后端保存
     */
    @RequestMapping("ve")
    public R save(@RequestBody GequxinxiEntity gequxinxi, HttpServletRequest request){
    	gequxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gequxinxi);

        gequxinxiService.insert(gequxinxi);
        return R.ok();
    }

    /**
     * 前端保存
     */
	@IgnoreAuth
    @RequestMapping("/add")
    public R add(@RequestBody GequxinxiEntity gequxinxi, HttpServletRequest request){
    	gequxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gequxinxi);

        gequxinxiService.insert(gequxinxi);
        return R.ok();
    }

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


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


		int count = gequxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}


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


}

目录
第一章 绪论 5
1.1 研究背景 5
1.2 系统研究现状 5
1.3 系统实现的功能 6
1.4 系统实现的特点 6
1.5 本文的组织结构 6
第二章开发技术与环境配置 7
2.1 Java语言简介 7
2.2 Vue技术 8
2.3 MySQL环境配置 8
2.4 IDEA环境配置 9
2.5 Mysql数据库介绍 9
2.6 B/S架构 9
第三章系统分析与设计 11
3.1 可行性分析 11
3.1.1 技术可行性 11
3.1.2 操作可行性 11
3.1.3经济可行性 11
3.2 需求分析 12
3.3 总体设计 12
3.4 数据库设计与实现 13
3.4.1 数据库概念结构设计 13
3.4.2 数据库具体设计 14
第四章 系统功能的具体实现 22
4.1 系统功能模块 22
4.2 管理员功能模块 25
第五章 系统测试 29
总结 30
参考文献 31
致谢 32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_3306428634

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

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

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

打赏作者

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

抵扣说明:

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

余额充值