• 【开源】基于Vue和SpringBoot的微信小程序的音乐平台


    在这里插入图片描述

    项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。



    一、摘要

    1.1 项目介绍

    基于微信小程序+JAVA+Vue+SpringBoot+MySQL的音乐平台,包含了音乐档案模块、音乐收藏模块、音乐订单模块,支持PC后台和微信小程序用户端使用,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,基于微信小程序的音乐平台基于角色的访问控制,给音乐管理员、音乐用户角色使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

    1.2 项目录屏

    源码下载


    二、功能模块

    随着当今世界网络和计算机的飞速发展以及智能手机的普及,人们的生活从过去的必须使用计算机进行工作、娱乐、信息获取转变为通过使用更加便利的移动设备去代替。小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。在微信作为不可或缺的工具当下,微信小程序作为内置于微信内的功能平台,能够给绝大多数人带来对于他们自己而言更简易方便的使用感受及体验。

    同时,在如今的时代背景下,音乐对于大多数人来说亦是不可或缺的元素。从商场、超市、餐厅等等舒缓的背景音乐包括现在可以说是如日中天的抖音也是结合了音乐与短视频,由此可见音乐的覆盖面,将音乐与微信小程序相结合,相信是一种有可能性的研究内容。

    1. 前台功能可含包用户登录注册、搜索、播放按钮、收藏列表等。
    2. 后台功能用户管理、音乐上传、付费管理等。
    3. 网站前台要求导航清晰、图文并茂、风格统一,后台要求功能完善、操作便捷。
    4. 系统代码规范、运行稳定、安全性高,无明显BUG。

    三、系统展示

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


    四、核心代码

    4.1 查询单首音乐

    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
    @ApiOperation(value = "查询单首音乐")
    public Result<Music> get(@RequestParam String id){
        User currUser = securityUtil.getCurrUser();
        Music music = iMusicService.getById(id);
        if(music == null) {
            return ResultUtil.error("音乐不存在");
        }
        // 收藏
        QueryWrapper<MusicCollect> mc = new QueryWrapper<>();
        mc.eq("music_id",music.getId());
        mc.eq("user_id",currUser.getId());
        music.setCollectFlag(iMusicCollectService.count(mc));
        // 下单
        QueryWrapper<MusicOrder> mo = new QueryWrapper<>();
        mo.eq("music_id",music.getId());
        mo.eq("user_id",currUser.getId());
        music.setOrderFlag(iMusicOrderService.count(mo));
        return new ResultUtil<Music>().setData(music);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.2 新增音乐

    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    @ApiOperation(value = "新增音乐")
    public Result<Music> insert(Music music){
        iMusicService.saveOrUpdate(music);
        return new ResultUtil<Music>().setData(music);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.3 新增音乐订单

    @RequestMapping(value = "/addOne", method = RequestMethod.GET)
    @ApiOperation(value = "新增单条音乐订单")
    public Result<MusicOrder> addOne(@RequestParam String id){
        Music music = iMusicService.getById(id);
        if(music == null) {
            return ResultUtil.error("音乐不存在");
        }
        User currUser = securityUtil.getCurrUser();
        QueryWrapper<MusicOrder> moQw = new QueryWrapper<>();
        moQw.eq("music_id",music.getId());
        moQw.eq("user_id",currUser.getId());
        if(iMusicOrderService.count(moQw) < 1L) {
            MusicOrder mo = new MusicOrder();
            mo.setMusicId(music.getId());
            mo.setTitle(music.getTitle());
            mo.setOwner(music.getOwner());
            mo.setFileUrl(music.getFileUrl());
            mo.setPrice(music.getPrice());
            mo.setStatus("未付款");
            mo.setUserId(currUser.getId());
            mo.setUserName(currUser.getNickname());
            iMusicOrderService.saveOrUpdate(mo);
        }
        return ResultUtil.success();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    4.4 查询音乐订单

    @RequestMapping(value = "/getByPage", method = RequestMethod.GET)
    @ApiOperation(value = "查询音乐订单")
    public Result<IPage<MusicOrder>> getByPage(@ModelAttribute MusicOrder musicOrder ,@ModelAttribute PageVo page){
        QueryWrapper<MusicOrder> qw = new QueryWrapper<>();
        User currUser = securityUtil.getCurrUser();
        QueryWrapper<User> userQw = new QueryWrapper<>();
        userQw.eq("id",currUser.getId());
        userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 AND role_id = '1536606659751841799'");
        if(iUserService.count(userQw) < 1L) {
            qw.eq("user_id",currUser.getId());
        }
        if(!ZwzNullUtils.isNull(musicOrder.getTitle())) {
            qw.like("title",musicOrder.getTitle());
        }
        if(!ZwzNullUtils.isNull(musicOrder.getUserName())) {
            qw.like("user_name",musicOrder.getUserName());
        }
        IPage<MusicOrder> data = iMusicOrderService.page(PageUtil.initMpPage(page),qw);
        return new ResultUtil<IPage<MusicOrder>>().setData(data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.5 新增音乐收藏

    @RequestMapping(value = "/addOne", method = RequestMethod.GET)
    @ApiOperation(value = "新增单条音乐收藏")
    public Result<Object> addOne(@RequestParam String id){
        Music music = iMusicService.getById(id);
        if(music == null) {
            return ResultUtil.error("音乐不存在");
        }
        User currUser = securityUtil.getCurrUser();
        QueryWrapper<MusicCollect> mcQw = new QueryWrapper<>();
        mcQw.eq("music_id",music.getId());
        mcQw.eq("user_id",currUser.getId());
        if(iMusicCollectService.count(mcQw) < 1L) {
            MusicCollect mc = new MusicCollect();
            mc.setMusicId(music.getId());
            mc.setTitle(music.getTitle());
            mc.setOwner(music.getOwner());
            mc.setFileUrl(music.getFileUrl());
            mc.setUserId(currUser.getId());
            mc.setUserName(currUser.getNickname());
            iMusicCollectService.saveOrUpdate(mc);
        }
        return ResultUtil.success();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    五、免责说明

    • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
    • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
    • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

    下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

    1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
    2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
    3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
    4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
  • 相关阅读:
    Revit中新建Revit填充图案及“问题视图”操作
    ABC310F Make 10 Again
    pcd和ply方式存储点云简单介绍,以及ply格式转换为pcd格式点云方法
    Python入门系列(八)日期时间、数学、json
    第十三届蓝桥杯嵌入式省赛程序设计详细题解
    HGH30CA、HGH30HA、HGH35CA、HGH35HA、HGH45HA等可以替换吗?
    北京国际学校ib成绩排名如何?
    南美阿根廷市场最全分析开发攻略,收藏一篇就够了
    第十章 异常
    有望引领下轮牛市的5大加密主题
  • 原文地址:https://blog.csdn.net/yangyin1998/article/details/134488044