lvzhiqiang 1 year ago
parent
commit
20b3933d37

+ 5 - 1
src/main/java/top/lvzhiqiang/controller/CoinController.java

@@ -130,7 +130,7 @@ public class CoinController {
      */
     @RequestMapping("/insertOrUpdateWatchlist")
     @ResponseBody
-    public R insertOrUpdateWatchlist(String symbol, String trackCategory, String issuingDate, Long cmcId, String coingeckoId, String coingeckoUrl, String feixiaohaoUrl, Integer filterFlag, String crudType) {
+    public R insertOrUpdateWatchlist(String symbol, String trackCategory, String trackCategory2, String issuingDate, Long cmcId, String coingeckoId, String coingeckoUrl, String feixiaohaoUrl, Integer filterFlag, String crudType) {
         if (StringUtils.isEmpty(crudType)) {
             throw new ParameterException("crudType为空!");
         }
@@ -148,6 +148,7 @@ public class CoinController {
             CoinWatchlist coinWatchlist = new CoinWatchlist();
             coinWatchlist.setSymbol(symbol.trim());
             coinWatchlist.setTrackCategory(trackCategory);
+            coinWatchlist.setTrackCategory2(trackCategory2);
             coinWatchlist.setIssuingDate(LocalDate.parse(issuingDate, DateUtils.dateFormatter));
             coinWatchlist.setCmcId(cmcId);
             coinWatchlist.setCoingeckoId(coingeckoId);
@@ -169,6 +170,9 @@ public class CoinController {
             if (StringUtils.isNotEmpty(trackCategory)) {
                 coinWatchlist.setTrackCategory(trackCategory);
             }
+            if (StringUtils.isNotEmpty(trackCategory2)) {
+                coinWatchlist.setTrackCategory2(trackCategory2);
+            }
             if (StringUtils.isNotEmpty(issuingDate)) {
                 coinWatchlist.setIssuingDate(LocalDate.parse(issuingDate, DateUtils.dateFormatter));
             }

+ 1 - 0
src/main/java/top/lvzhiqiang/entity/CoinApiConfig.java

@@ -80,6 +80,7 @@ public class CoinApiConfig implements Serializable {
     private Integer deleteFlag;
 
     private List<String> trackCategoryList;
+    private List<String> trackCategory2List;
     private List<JSONObject> otherAttrList;
 
     private List<JSONObject> musicCategoryList;

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

@@ -54,6 +54,8 @@ public class CoinWatchlist implements Serializable {
      */
     private String trackCategory;
     private String trackCategoryStyle;
+    private String trackCategory2;
+    private String trackCategory2Style;
 
     /**
      * 历史最高价格

+ 8 - 0
src/main/java/top/lvzhiqiang/mapper/CoinApiConfigMapper.java

@@ -74,6 +74,14 @@ public interface CoinApiConfigMapper {
             "GROUP BY M.trackCategory " +
             "ORDER BY COUNT(M.trackCategory) DESC")
     List<String> findTrackCategoryList();
+    @Select("SELECT M.trackCategory " +
+            "FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(cw.track_category2, ',', B.HELP_TOPIC_ID + 1), ',', - 1) AS trackCategory " +
+            "      FROM coin_watchlist cw " +
+            "               JOIN MYSQL.HELP_TOPIC B " +
+            "                    ON B.HELP_TOPIC_ID < (LENGTH(cw.track_category2) - LENGTH(REPLACE(cw.track_category2, ',', '')) + 1)) M " +
+            "GROUP BY M.trackCategory " +
+            "ORDER BY COUNT(M.trackCategory) DESC")
+    List<String> findTrackCategory2List();
 
     @Select("select style_name from coin_color_style where delete_flag = 1")
     List<String> findColorStyleList();

+ 6 - 3
src/main/java/top/lvzhiqiang/mapper/CoinMapper.java

@@ -120,6 +120,9 @@ public interface CoinMapper {
             "<if test=\"trackCategoryField != null and trackCategoryField != ''\">" +
             "   and cw.track_category like concat('%',#{trackCategoryField},'%')" +
             "</if>" +
+            "<if test=\"trackCategory2Field != null and trackCategory2Field != ''\">" +
+            "   and cw.track_category2 like concat('%',#{trackCategory2Field},'%')" +
+            "</if>" +
             "<if test=\"cexFilterField != null and cexFilterField != ''\">" +
             "   <choose>" +
             "       <when test=\" cexFilterName == 'cwo.cex_spot' \">" +
@@ -215,9 +218,9 @@ public interface CoinMapper {
     @MapKey("job_name")
     Map<String, JSONObject> findMonitorJobConfig();
 
-    @Insert("INSERT INTO coin_watchlist(cmc_id, symbol, track_category, issuing_date, coingecko_id, coingecko_url, cmc_url, feixiaohao_url, filter_flag, create_time, modify_time) " +
-            "VALUES (#{cmcId}, #{symbol}, #{trackCategory}, #{issuingDate}, #{coingeckoId}, #{coingeckoUrl}, #{cmcUrl}, #{feixiaohaoUrl}, #{filterFlag}, now(), now())" +
-            " ON DUPLICATE KEY UPDATE cmc_id=values(cmc_id),track_category=values(track_category),issuing_date=values(issuing_date),coingecko_id=values(coingecko_id)" +
+    @Insert("INSERT INTO coin_watchlist(cmc_id, symbol, track_category, track_category2, issuing_date, coingecko_id, coingecko_url, cmc_url, feixiaohao_url, filter_flag, create_time, modify_time) " +
+            "VALUES (#{cmcId}, #{symbol}, #{trackCategory}, #{trackCategory2}, #{issuingDate}, #{coingeckoId}, #{coingeckoUrl}, #{cmcUrl}, #{feixiaohaoUrl}, #{filterFlag}, now(), now())" +
+            " ON DUPLICATE KEY UPDATE cmc_id=values(cmc_id),track_category=values(track_category),track_category2=values(track_category2),issuing_date=values(issuing_date),coingecko_id=values(coingecko_id)" +
             ",coingecko_url=values(coingecko_url),cmc_url=values(cmc_url),feixiaohao_url=values(feixiaohao_url),filter_flag=values(filter_flag),modify_time=now()")
     int insertOrUpdateWatchlist(CoinWatchlist coinWatchlist);
 

+ 6 - 1
src/main/java/top/lvzhiqiang/service/impl/CoinApiConfigServiceImpl.java

@@ -4,9 +4,11 @@ import org.springframework.stereotype.Service;
 import top.lvzhiqiang.entity.CoinApiConfig;
 import top.lvzhiqiang.mapper.CoinApiConfigMapper;
 import top.lvzhiqiang.service.CoinApiConfigService;
+import top.lvzhiqiang.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * coin-API-配置ServiceImpl
@@ -58,7 +60,10 @@ public class CoinApiConfigServiceImpl implements CoinApiConfigService {
         List<CoinApiConfig> coinApiConfigList = coinApiConfigMapper.findByParams(nameCn, url, type, type2, status);
         for (CoinApiConfig coinApiConfig : coinApiConfigList) {
             if (coinApiConfig.getNameEn().equals("watchlist")) {
-                coinApiConfig.setTrackCategoryList(coinApiConfigMapper.findTrackCategoryList());
+                List<String> trackCategoryList = coinApiConfigMapper.findTrackCategoryList().stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+                List<String> trackCategory2List = coinApiConfigMapper.findTrackCategory2List().stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+                coinApiConfig.setTrackCategoryList(trackCategoryList);
+                coinApiConfig.setTrackCategory2List(trackCategory2List);
             } else if (coinApiConfig.getNameEn().equals("image")) {
                 coinApiConfig.setOtherAttrList(coinApiConfigMapper.findFileImageCategoryList());
             } else if (coinApiConfig.getNameEn().equals("music")) {

+ 32 - 2
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -1826,8 +1826,10 @@ public class CoinServiceImpl implements CoinService {
 
         List<String> popularTrackCategoryList = Arrays.asList("DePIN", "AI", "RWA", "大饼生态", "以太Layer-2", "Restaking再质押", "NFT|链游|元宇宙", "WEB3社交");
         // 赛道分类预处理
-        List<String> trackCategoryList = coinApiConfigMapper.findTrackCategoryList();
+        List<String> trackCategoryList = coinApiConfigMapper.findTrackCategoryList().stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        List<String> trackCategory2List = coinApiConfigMapper.findTrackCategory2List().stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
         Map<String, String> trackCategoryMap = new HashMap<>();
+        Map<String, String> trackCategory2Map = new HashMap<>();
         List<String> colorList = coinApiConfigMapper.findColorStyleList();
         int j = 0;
         for (int i = 0; i < trackCategoryList.size(); i++) {
@@ -1840,6 +1842,17 @@ public class CoinServiceImpl implements CoinService {
             trackCategoryMap.put(trackCategoryList.get(i), colorList.get(j) + popularTrackCategoryStyle);
             j++;
         }
+        j = 0;
+        for (int i = 0; i < trackCategory2List.size(); i++) {
+            if (j > colorList.size() - 1) {
+                j = 0;
+            }
+
+            String popularTrackCategoryStyle = popularTrackCategoryList.contains(trackCategory2List.get(i)) ? "font-weight:bold;" : "";
+
+            trackCategory2Map.put(trackCategory2List.get(i), colorList.get(j) + popularTrackCategoryStyle);
+            j++;
+        }
 
         String[] scoreTitleArr = {"很差", "较差", "还行", "推荐", "力荐"};
         String regex = "[+-]?\\d*\\.?\\d*[eE][+-]?\\d+";  // 科学计数法正则表达式
@@ -1874,7 +1887,7 @@ public class CoinServiceImpl implements CoinService {
             String trackCategoryLength = "";
             for (int i = 0; i < trackCategoryArr.length; i++) {
                 if (i == trackCategoryArr.length - 1) {
-                    if (trackCategoryArr.length > 3 && trackCategoryLength.length() > 20) {
+                    if (trackCategoryArr.length > 1 && trackCategoryLength.length() > 10) {
                         sb.append("<br>");
                     }
                     sb.append("<span class=\"selected-value\" style=\"" + trackCategoryMap.get(trackCategoryArr[i]) + " \" >" + trackCategoryArr[i] + " </span>");
@@ -1886,6 +1899,23 @@ public class CoinServiceImpl implements CoinService {
             coinWatchlist.setTrackCategoryStyle(" style=\"padding:0em 0.3em;\"");
             coinWatchlist.setTrackCategory(sb.toString());
 
+            String[] trackCategory2Arr = coinWatchlist.getTrackCategory2().split(",");
+            StringBuffer sb2 = new StringBuffer();
+            String trackCategory2Length = "";
+            for (int i = 0; i < trackCategory2Arr.length; i++) {
+                if (i == trackCategory2Arr.length - 1) {
+                    if (trackCategory2Arr.length > 1 && trackCategory2Length.length() > 20) {
+                        sb2.append("<br>");
+                    }
+                    sb2.append("<span class=\"selected-value\" style=\"" + trackCategory2Map.get(trackCategory2Arr[i]) + " \" >" + trackCategory2Arr[i] + " </span>");
+                } else {
+                    trackCategory2Length += trackCategory2Arr[i];
+                    sb2.append("<span class=\"selected-value\" style=\"margin-right:0.3em;" + trackCategory2Map.get(trackCategory2Arr[i]) + " \" >" + trackCategory2Arr[i] + " </span>");
+                }
+            }
+            coinWatchlist.setTrackCategory2Style(" style=\"padding:0em 0.3em;\"");
+            coinWatchlist.setTrackCategory2(sb2.toString());
+
             // 名称
             coinWatchlist.setSymbolStyle(" style=\"background-color:rgba(70,169,244,.72);font-weight: bold;\"");
             // 市场价格

+ 6 - 1
src/main/resources/static/coin.html

@@ -320,6 +320,9 @@
             <select id="apis-quiet-div-watchlist-trackCategoryField" style="height: 24px;">
                 <option value="">--</option>
             </select>
+            <select id="apis-quiet-div-watchlist-trackCategory2Field" style="height: 24px;">
+                <option value="">--</option>
+            </select>
             <select id="apis-quiet-div-watchlist-sortField" style="height: 24px;">
                 <option value="cw.price_change_percentage_24h">24H涨跌幅</option>
                 <option value="cw.score,cw.price_change_percentage_24h">优先级</option>
@@ -595,7 +598,9 @@
                 <span>名称</span>
                 <input type="text" name="symbol" placeholder="不可为空" style="width: 100px;"/>
                 <span>赛道分类</span>
-                <input type="text" name="trackCategory" placeholder="可为空"/>
+                <input type="text" name="trackCategory" placeholder="可为空" style="width: 100px;"/>
+                <span>赛道分类2</span>
+                <input type="text" name="trackCategory2" placeholder="可为空" style="width: 100px;"/>
                 <span>发行日期</span>
                 <input type="text" name="issuingDate" placeholder="可为空" style="width: 100px;"/>
                 <span>cmcId</span>

+ 7 - 0
src/main/resources/static/js/my-coin.js

@@ -163,6 +163,12 @@ function initOther4Select() {
                             watchlistTrackCategoryStr += '<option value="' + obj2 + '">' + obj2 + '</option>';
                         });
                         $("#apis-quiet-div-watchlist-trackCategoryField").append(watchlistTrackCategoryStr);
+
+                        var watchlistTrackCategory2Str = '';
+                        $.each(obj.trackCategory2List, function (index2, obj2) {
+                            watchlistTrackCategory2Str += '<option value="' + obj2 + '">' + obj2 + '</option>';
+                        });
+                        $("#apis-quiet-div-watchlist-trackCategory2Field").append(watchlistTrackCategory2Str);
                     } else if (obj.nameEn === 'image') {
                         var uploadImageCategoryStr = '';
                         $.each(obj.otherAttrList, function (index2, obj2) {
@@ -385,6 +391,7 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
         jsonData.sort = $("#apis-quiet-div-watchlist-sort").val();
         jsonData.filterField = $("#apis-quiet-div-watchlist-filterField").val();
         jsonData.trackCategoryField = $("#apis-quiet-div-watchlist-trackCategoryField").val();
+        jsonData.trackCategory2Field = $("#apis-quiet-div-watchlist-trackCategory2Field").val();
         jsonData.cexFilterField = $("#apis-quiet-div-watchlist-cexFilterField").val();
     } else if (nameEn === 'image') {
         jsonData.pageNo = $("#apis-quiet-div-image-pageNo").val();