lvzhiqiang 1 jaar geleden
bovenliggende
commit
2d32b5b9c3

+ 24 - 0
src/main/java/top/lvzhiqiang/controller/MusicInfoController.java

@@ -73,6 +73,30 @@ public class MusicInfoController {
         return musicInfoService.deleteMusics(musicId);
     }
 
+    @PostMapping("/musicUpdate")
+    public Object musicUpdate(String symbol, String remark, String score) {
+        if (StringUtils.isEmpty(symbol)) {
+            throw new ParameterException("symbol不能为空!");
+        }
+        if (StringUtils.isEmpty(remark) && StringUtils.isEmpty(score)) {
+            throw new ParameterException("remark和score不能同时为空!");
+        }
+
+        return R.ok().data(musicInfoService.musicUpdate(symbol, remark, score));
+    }
+
+    @GetMapping("/musicDetail/{symbol}/{operationType}")
+    public Object musicDetail(@PathVariable String symbol, @PathVariable String operationType) {
+        if (StringUtils.isEmpty(symbol)) {
+            throw new ParameterException("symbol不能为空!");
+        }
+        if (StringUtils.isEmpty(operationType)) {
+            throw new ParameterException("operationType不能为空!");
+        }
+
+        return R.ok().data(musicInfoService.musicDetail(symbol, operationType));
+    }
+
 
     public static void main(String[] args) {
         String s = "https://image.baidu.com/search/down?thumburl=https://baidu.com&url=https://tvax3.sinaimg.cn/large/006BNqYCly1ht929ixe8mj309s0dojsb.jpg";

+ 2 - 0
src/main/java/top/lvzhiqiang/entity/FileMusicCollection.java

@@ -77,4 +77,6 @@ public class FileMusicCollection implements Serializable {
 
     private String categoryName;
     private String categoryId;
+
+    private String score;
 }

+ 15 - 0
src/main/java/top/lvzhiqiang/mapper/MusicInfoMapper.java

@@ -41,4 +41,19 @@ public interface MusicInfoMapper {
 
     @Select("delete from file_music_collection where id = #{id}")
     void deleteFileMusicCollectionById(Long musicId);
+
+    @Update({"<script>" +
+            "update file_music_collection " +
+            "<set>" +
+            "<if test=\"score != null and score != ''\">" +
+            "  score = #{score}," +
+            "</if>" +
+            "<if test=\"remark != null and remark != ''\">" +
+            "   remark = #{remark}," +
+            "</if>" +
+            "modify_time=now()" +
+            "</set>" +
+            "where id = #{id}" +
+            "</script>"})
+    int updateMusicRemark(FileMusicCollection fileMusicCollection);
 }

+ 4 - 0
src/main/java/top/lvzhiqiang/service/MusicInfoService.java

@@ -22,4 +22,8 @@ public interface MusicInfoService {
     R insertOrUpdateImg(MultipartFile file, String remark, String categoryId, String id, String title, String singer, String issuingDate, String collectionDate, String qualityType);
 
     R deleteMusics(Long musicId);
+
+    Object musicUpdate(String symbol, String remark, String score);
+
+    Object musicDetail(String symbol, String operationType);
 }

+ 14 - 1
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -1629,11 +1629,24 @@ public class CoinServiceImpl implements CoinService {
 
         String ftpBasePath = InitRunner.dicCodeMap.get("ftp_music_basepath").getCodeValue();
         String ftpBaseUrl = InitRunner.dicCodeMap.get("ftp_baseurl").getCodeValue();
+        String[] scoreTitleArr = {"很差", "较差", "还行", "推荐", "力荐"};
         for (FileMusicCollection fileMusicCollection : fileMusicCollectionList) {
             String categoryName = Arrays.stream(fileMusicCollection.getCategoryId().split(",")).map(original -> fileMusicCategoryMap.getOrDefault(original, original)).collect(Collectors.joining(","));
             fileMusicCollection.setCategoryName(categoryName);
-            fileMusicCollection.setRemark("<span class=\"primary\" avid=\"" + fileMusicCollection.getId() + " \" >" + fileMusicCollection.getRemark() + " </span>");
+            String remark = StringUtils.isNotEmpty(fileMusicCollection.getRemark()) && fileMusicCollection.getRemark().length() > 20 ? (fileMusicCollection.getRemark().substring(0, 20) + "...") : fileMusicCollection.getRemark();
+            fileMusicCollection.setRemark("<span class=\"primary\" avid=\"" + fileMusicCollection.getId() + " \" >" + remark + " </span>");
             fileMusicCollection.setLowQualityUrl(ftpBaseUrl + ftpBasePath + fileMusicCollection.getLowQualityUrl());
+
+            // 优先级
+            Integer score = Integer.valueOf(fileMusicCollection.getScore());
+            score = score > 5 ? 5 : score;
+            StringBuffer scoreSB = new StringBuffer("<ul class=\"rating\">");
+            for (int i = 0; i < scoreTitleArr.length; i++) {
+                String style = (i + 1) <= score ? "fa-star" : "fa-star-o";
+                scoreSB.append("<li id=\"" +fileMusicCollection.getId() + "\" title=\"" + scoreTitleArr[i] + "\" val=\"" + (i + 1) + "\"><i class=\"fa " + style + "\"></i></li>");
+            }
+            scoreSB.append("</ul>");
+            fileMusicCollection.setScore(scoreSB.toString());
         }
     }
 

+ 30 - 1
src/main/java/top/lvzhiqiang/service/impl/MusicInfoServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import top.lvzhiqiang.config.InitRunner;
 import top.lvzhiqiang.dto.R;
+import top.lvzhiqiang.entity.CoinWatchlist;
 import top.lvzhiqiang.entity.FileImage;
 import top.lvzhiqiang.entity.FileMusicCollection;
 import top.lvzhiqiang.enumeration.ResultCodeEnum;
@@ -20,6 +21,7 @@ import top.lvzhiqiang.mapper.MusicInfoMapper;
 import top.lvzhiqiang.service.MusicInfoService;
 import top.lvzhiqiang.util.DateUtils;
 import top.lvzhiqiang.util.FtpUtil;
+import top.lvzhiqiang.util.MarkdownToHtmlUtils;
 import top.lvzhiqiang.util.StringUtils;
 
 import javax.annotation.Resource;
@@ -96,7 +98,7 @@ public class MusicInfoServiceImpl extends BaseServiceImpl<Object> implements Mus
                             }
                         }
 
-                        imageSize = BigDecimal.valueOf(file.getSize()).divide(new BigDecimal("1048576")).setScale(0, RoundingMode.UP).toPlainString().concat("MB");
+                        imageSize = BigDecimal.valueOf(file.getSize()).divide(new BigDecimal("1048576")).setScale(2, RoundingMode.UP).toPlainString().concat("MB");
                         fileMusicCollection.setSize(imageSize);
                         // 返回给前端图片访问路径
                         imageUrl = parentPath + "/" + newName;
@@ -224,6 +226,33 @@ public class MusicInfoServiceImpl extends BaseServiceImpl<Object> implements Mus
         }
     }
 
+    @Override
+    public Object musicUpdate(String symbol, String remark, String score) {
+        FileMusicCollection fileMusicCollection = new FileMusicCollection();
+
+        fileMusicCollection.setId(Long.valueOf(symbol));
+        fileMusicCollection.setRemark(remark);
+        fileMusicCollection.setScore(score);
+        int num = musicInfoMapper.updateMusicRemark(fileMusicCollection);
+        return num;
+    }
+
+    @Override
+    public Object musicDetail(String symbol, String operationType) {
+        FileMusicCollection fileMusicCollection = musicInfoMapper.findFileMusicCollectionById(Long.valueOf(symbol));
+        if (fileMusicCollection == null) {
+            throw new BusinessException(1, "symbol不存在!");
+        }
+
+        if ("detail".equals(operationType)) {
+            return MarkdownToHtmlUtils.markdownToHtmlExtensions(fileMusicCollection.getRemark());
+        } else if ("update".equals(operationType)) {
+            return fileMusicCollection.getRemark();
+        } else {
+            return "暂不支持该操作!";
+        }
+    }
+
     public static void main(String[] args) throws IOException {
         String srcUrl = "https://image.baidu.com/search/down?thumburl=https://baidu.com&url=https://tva1.sinaimg.cn/mw690/007Y7SRMly1gmays3w173j30ol16fh8x.jpg";
         Connection.Response response = Jsoup.connect(srcUrl).method(Connection.Method.GET).ignoreContentType(true).timeout(50 * 1000).execute();

+ 29 - 7
src/main/resources/static/coin.html

@@ -15,6 +15,8 @@
     <script type="text/javascript" src="js/login.js"></script>
     <script type="text/javascript" src="js/my-coin.js"></script>
     <script type="text/javascript" src="js/my-av.js"></script>
+    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet"/>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script>
 </head>
 <style type="text/css">
     .font {
@@ -25,7 +27,7 @@
         display: none;
     }
 
-    #watchlistpreview {
+    #watchlistpreview, #musicpreview {
         display: none;
         position: absolute;
         z-index: 999;
@@ -39,17 +41,17 @@
         height: 50%;
     }
 
-    .watchlistpreview-top {
+    .watchlistpreview-top, .musicpreview-top {
         height: 40px;
         line-height: 40px;
     }
 
-    .watchlistpreview-content {
+    .watchlistpreview-content, .musicpreview-content {
         overflow: auto;
         height: calc(100% - 40px);
     }
 
-    .watchlistpreview-top-close {
+    .watchlistpreview-top-close, .musicpreview-top-close {
         color: #ddd;
         height: 40px;
         font-size: 28px;
@@ -62,7 +64,7 @@
         cursor: pointer;
     }*/
 
-    .watchlistpreview-loading {
+    .watchlistpreview-loading, .musicpreview-loading {
         text-align: center;
         display: none;
         position: absolute;
@@ -146,6 +148,14 @@
         -moz-osx-font-smoothing: grayscale;
         font-size: 20px;
     }
+
+    .select2-container {
+        width: 200px !important; /* 设置宽度 */
+    }
+    /* 设置Select2容器的高度 */
+    .select2-container {
+        height: 15px !important; /* 设置你希望的高度 */
+    }
 </style>
 <script type="text/javascript">
     function show() {
@@ -344,7 +354,8 @@
             </select>
             <select id="apis-quiet-div-music-sortField" style="height: 24px;">
                 <option value="a.modify_time">更新时间</option>
-                <option value="a.issuing_date">发型日期</option>
+                <option value="a.score">优先级</option>
+                <option value="a.issuing_date">发行日期</option>
                 <option value="a.collection_date">收藏日期</option>
                 <option value="a.duration">时长</option>
                 <option value="a.size">大小</option>
@@ -487,9 +498,10 @@
                 <span>标题</span>
                 <input type="text" name="title" placeholder="ID为空时不可为空"/>
                 <span>分类</span>
-                <select id="apis-quiet-div-uploadMusics-categoryField" style="height: 24px;" name="categoryId">
+                <select id="apis-quiet-div-uploadMusics-categoryField" style="height: 24px;" name="categoryId" multiple="multiple">
                     <option value="">--</option>
                 </select>
+
                 <span>歌手</span>
                 <input type="text" name="singer" placeholder="可为空" style="width: 100px;"/>
                 <span>发行时间</span>
@@ -555,5 +567,15 @@
     </div>
     <div class="watchlistpreview-content"></div>
 </div>
+
+<div id="musicpreview">
+    <div class="musicpreview-loading"><img src='cover/loading.gif'></div>
+    <div class="musicpreview-top">
+        <div style="float: left;" class="musicpreview-top-title">详情</div>
+        <div style="float: right;" class="musicpreview-top-submit"><img src="cover/submit.svg"></div>
+        <div style="float: right;" class="musicpreview-top-close"><img src="cover/close.svg"></div>
+    </div>
+    <div class="musicpreview-content"></div>
+</div>
 </body>
 </html>

+ 137 - 3
src/main/resources/static/js/my-coin.js

@@ -177,6 +177,13 @@ function initOther4Select() {
                         });
                         $("#apis-quiet-div-uploadMusics-categoryField").append(uploadMusicCategoryStr);
                         $("#apis-quiet-div-music-categoryField").append(uploadMusicCategoryStr);
+
+                        $('#apis-quiet-div-uploadMusics-categoryField').select2({
+                            placeholder: '请选择', // 占位符
+                            allowClear: true, // 允许清除选择
+                            width: '200px',              // 在初始化时设置宽度
+                            height: '15px'
+                        });
                     }
                 });
 
@@ -439,8 +446,11 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
                         str += '</td>';
                     } else if (nameEn === 'music') {
                         str += '<td style="padding: 0px 10px 0px 10px;">';
-                        str += '<button class="apis-quiet-div-music-delete" operationType="delete" symbolName="' + dataDetail.id + '">删除</button>';
                         str += '<button class="apis-quiet-div-music-play" operationType="play" symbolName="' + dataDetail.lowQualityUrl + '">播放</button>';
+                        str += '<button class="apis-quiet-div-music-pause" operationType="pause" symbolName="' + dataDetail.lowQualityUrl + '">暂停</button>';
+                        str += '<button class="apis-quiet-div-music-detail" operationType="detail" symbolName="' + dataDetail.id + '">详情</button>';
+                        str += '<button class="apis-quiet-div-music-update" operationType="update" symbolName="' + dataDetail.id + '">编辑</button>';
+                        str += '<button class="apis-quiet-div-music-delete" operationType="delete" symbolName="' + dataDetail.id + '">删除</button>';
                         str += '</td>';
                     }
 
@@ -456,6 +466,9 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
                 } else if (nameEn === 'music') {
                     $(".apis-quiet-div-music-delete").unbind("click");
                     $(".apis-quiet-div-music-play").unbind("click");
+                    $(".apis-quiet-div-music-pause").unbind("click");
+                    $(".apis-quiet-div-music-detail").unbind("click");
+                    $(".apis-quiet-div-music-update").unbind("click");
                 }
 
                 $('#' + slideDiv).find(".contentTD").html(str);
@@ -630,6 +643,34 @@ function initContentEvent(nameEn) {
             });
         });
     } else if (nameEn === 'music') {
+        $("ul li").click(function () {
+            $.ajax({
+                url: "musicInfo/musicUpdate", //请求的url地址
+                dataType: "json", //返回格式为json
+                data: {
+                    "symbol": $(this).attr("id"),
+                    "score": $(this).attr("val")
+                }, //参数值
+                type: "post", //请求方式
+                async: false, //请求是否异步,默认为异步,这也是ajax重要特性
+                success: function (data) {
+                    //请求成功时处理
+                    if (data != null && $.trim(data) != "" && data.success) {
+                        $(".apis-quiet-div-button2").click();
+                    } else {
+                        console.log("musicUpdate-score success error," + data);
+                    }
+                },
+                beforeSend: function () {
+                },
+                complete: function () {
+                },
+                error: function (data) {
+                    //请求出错处理
+                    console.log("musicUpdate-score error," + data);
+                }
+            });
+        });
         $(".apis-quiet-div-music-delete").click(function () {
             var symbol = $(this).attr("symbolName");
             $.ajax({
@@ -658,8 +699,101 @@ function initContentEvent(nameEn) {
         });
         $(".apis-quiet-div-music-play").click(function () {
             var symbol = $(this).attr("symbolName");
-            $("#apis-quiet-content > audio > source").attr("src", symbol);
-            $("#apis-quiet-content > audio")[0].load();
+            var currentSrc = $("#apis-quiet-content > audio > source").attr("src");
+            if (currentSrc === symbol) {
+                $("#apis-quiet-content > audio")[0].play();
+            } else {
+                $("#apis-quiet-content > audio > source").attr("src", symbol);
+                $("#apis-quiet-content > audio")[0].load();
+                $("#apis-quiet-content > audio")[0].play();
+            }
+        });
+        $(".apis-quiet-div-music-pause").click(function () {
+            var symbol = $(this).attr("symbolName");
+            $("#apis-quiet-content > audio")[0].pause();
+        });
+        $(".apis-quiet-div-music-detail,.apis-quiet-div-music-update").click(function () {
+            if ($("#musicpreview").css("display") === 'none') {
+                $("#musicpreview").css("display", "block");
+            } else if ($("#musicpreview").css("display") === 'block') {
+                $("#musictpreview").css("display", "none");
+            }
+
+            $(".musicpreview-top-close").click(function () {
+                if ($("#musicpreview").css("display") === 'none') {
+                    $("#musicpreview").css("display", "block");
+                } else if ($("#musicpreview").css("display") === 'block') {
+                    $("#musicpreview").css("display", "none");
+                }
+                $(this).unbind("click");
+                $(".musicpreview-top-submit").unbind("click");
+            });
+            $(".musicpreview-top-submit").click(function () {
+                $.ajax({
+                    url: "musicInfo/musicUpdate", //请求的url地址
+                    dataType: "json", //返回格式为json
+                    data: {"symbol": $(".musicpreview-content").find(".musicpreview-symbol").val(), "remark": $(".musicpreview-content").find("textarea").val()}, //参数值
+                    type: "post", //请求方式
+                    async: false, //请求是否异步,默认为异步,这也是ajax重要特性
+                    success: function (data) {
+                        //请求成功时处理
+                        if (data != null && $.trim(data) != "" && data.success) {
+                            $(".musicpreview-top-close").click();
+                        } else {
+                            console.log("musicpreview-top-submit success error," + data);
+                        }
+                    },
+                    beforeSend: function () {
+                    },
+                    complete: function () {
+                    },
+                    error: function (data) {
+                        //请求出错处理
+                        console.log("musicpreview-top-submit error," + data);
+                    }
+                });
+            });
+
+            var operationType = $(this).attr("operationType");
+            if (operationType === 'detail') {
+                $(".musicpreview-top-submit").css("display", "none");
+            } else if (operationType === 'update') {
+                $(".musicpreview-top-submit").css("display", "block");
+            }
+
+            var symbol = $(this).attr("symbolName");
+            $.ajax({
+                url: "musicInfo/musicDetail/" + symbol + "/" + operationType, //请求的url地址
+                type: "get", //请求方式
+                async: true, //请求是否异步,默认为异步,这也是ajax重要特性
+                success: function (data) {
+                    //请求成功时处理
+                    if (data != null && $.trim(data) != "" && data.success) {
+                        data = data.data;
+
+                        if (operationType === 'detail') {
+                            $(".musicpreview-content").html(data);
+                        } else if (operationType === 'update') {
+                            var update4Text = '<textarea rows="4" cols="50" style="background: antiquewhite;width: 100%;height: 100%;">' + data + '</textarea>';
+                            update4Text += '<input type="hidden" class="musicpreview-symbol" value="' + symbol + '"/>';
+                            $(".musicpreview-content").html(update4Text);
+                        }
+                    } else {
+                        //alert(data.message);
+                    }
+                },
+                beforeSend: function () {
+                    $(".musicpreview-content").html("");
+                    $(".musicpreview-loading").css("display", "block");
+                },
+                complete: function () {
+                    $(".musicpreview-loading").css("display", "none");
+                },
+                error: function (data) {
+                    //请求出错处理
+                    alert('error:' + data);
+                }
+            });
         });
     }