项目介绍
随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统。
本文首先分析了基于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