Răsfoiți Sursa

add:当前持有币种列表init v1

tujidelv 1 an în urmă
părinte
comite
a485d7d877

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

@@ -83,4 +83,6 @@ public class CoinApiConfig implements Serializable {
     private List<JSONObject> otherAttrList;
 
     private List<JSONObject> musicCategoryList;
+
+    private List<JSONObject> exchangeCategoryList;
 }

+ 100 - 0
src/main/java/top/lvzhiqiang/entity/CoinCurrencyHolding.java

@@ -0,0 +1,100 @@
+package top.lvzhiqiang.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * coin当前持有
+ *
+ * @author lvzhiqiang
+ * 2024/10/15 17:52
+ */
+@Data
+public class CoinCurrencyHolding implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 名称
+     */
+    private String symbol;
+
+    /**
+     * 入场价格
+     */
+    private String buyPrice;
+
+    /**
+     * 当前价格
+     */
+    private String currentPrice;
+
+    /**
+     * 涨跌幅比例
+     */
+    private BigDecimal changePercentage;
+
+    /**
+     * 入场数量
+     */
+    private String buyQuantity;
+
+    /**
+     * 当前数量
+     */
+    private String currentQuantity;
+
+    /**
+     * 入场总额
+     */
+    private BigDecimal buyAmount;
+
+    /**
+     * 当前总额
+     */
+    private BigDecimal currentAmount;
+
+    /**
+     * 所属平台
+     */
+    private String exchangeCategory;
+
+    /**
+     * coingecko id
+     */
+    private String coingeckoId;
+
+    /**
+     * 状态(1:正常,2:失效)
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 买入时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime buyTime;
+
+    /**
+     * 最后修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime modifyTime;
+
+    /**
+     * 删除标志(1:正常,2:已删除)
+     */
+    private Integer deleteFlag;
+}

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

@@ -83,4 +83,7 @@ public interface CoinApiConfigMapper {
 
     @Select("select id,category_name categoryName from file_music_collection_category where delete_flag = 1")
     List<JSONObject> findFileMusicCategoryList();
+
+    @Select("select id,category_name categoryName from coin_exchange_category where delete_flag = 1")
+    List<JSONObject> findFileCurrentHoldingCategoryList();
 }

+ 18 - 0
src/main/java/top/lvzhiqiang/mapper/CoinMapper.java

@@ -265,4 +265,22 @@ public interface CoinMapper {
             "</foreach>" +
             "</script>"})
     void insertOrUpdateBinanceOrderHistoryList(List<CoinBinanceOrderHistory> coinBinanceOrderHistoryList);
+
+    @Select({"<script>" +
+            "select cch.*,cec.category_name exchangeCategory from coin_currency_holding cch left join coin_exchange_category cec on cch.exchange_category_id=cec.id WHERE cch.delete_flag = 1" +
+            "<if test=\"keyword != null and keyword != ''\">" +
+            "   and cch.symbol like concat('%',#{keyword},'%')" +
+            "</if>" +
+            "<if test=\"symbol != null and symbol != ''\">" +
+            "   and cch.symbol = #{symbol}" +
+            "</if>" +
+            "<if test=\"categoryField != null and categoryField != ''\">" +
+            "   and cec.id = #{categoryField}" +
+            "</if>" +
+            " order by " +
+            "<foreach collection='sortField' item='sf' index=\"index\" separator=\",\">" +
+            "   ${sf} ${sort}" +
+            " </foreach>" +
+            "</script>"})
+    List<CoinCurrencyHolding> findCurrentHoldingList(Map<String, Object> params);
 }

+ 2 - 0
src/main/java/top/lvzhiqiang/service/impl/CoinApiConfigServiceImpl.java

@@ -63,6 +63,8 @@ public class CoinApiConfigServiceImpl implements CoinApiConfigService {
                 coinApiConfig.setOtherAttrList(coinApiConfigMapper.findFileImageCategoryList());
             } else if (coinApiConfig.getNameEn().equals("music")) {
                 coinApiConfig.setMusicCategoryList(coinApiConfigMapper.findFileMusicCategoryList());
+            } else if (coinApiConfig.getNameEn().equals("currentHolding")) {
+                coinApiConfig.setExchangeCategoryList(coinApiConfigMapper.findFileCurrentHoldingCategoryList());
             }
         }
 

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

@@ -862,7 +862,7 @@ public class CoinServiceImpl implements CoinService {
             Stream.iterate(0, n -> n + 1).limit((watchlistListCKO.size() + MAX_NUMBER - 1) / MAX_NUMBER)
                     .forEach(i -> {
                         try {
-                            Thread.sleep(2000L);
+                            Thread.sleep(5000L);
                         } catch (InterruptedException e) {
                             throw new RuntimeException(e);
                         }
@@ -874,7 +874,7 @@ public class CoinServiceImpl implements CoinService {
             Stream.iterate(0, n -> n + 1).limit((watchlistListCMC.size() + MAX_NUMBER - 1) / MAX_NUMBER)
                     .forEach(i -> {
                         try {
-                            Thread.sleep(2000L);
+                            Thread.sleep(5000L);
                         } catch (InterruptedException e) {
                             throw new RuntimeException(e);
                         }
@@ -1610,11 +1610,27 @@ public class CoinServiceImpl implements CoinService {
 
             renderMainSearch4Music(fileMusicCollectionList);
             return musicCollectionPageInfo;
+        } else if (params.getString("nameEn").equals("currentHolding")) {
+            PageHelper.startPage(params.getInteger("pageNo"), params.getInteger("pageSize"), true);
+
+            if (params.containsKey("sortField")) {
+                params.put("sortField", Arrays.asList(params.getString("sortField").split(",")));
+            }
+
+            List<CoinCurrencyHolding> currentHoldingList = coinMapper.findCurrentHoldingList(params.toJavaObject(Map.class));
+
+            PageInfo<CoinCurrencyHolding> currentHoldingPageInfo = new PageInfo<>(currentHoldingList);
+
+            renderMainSearch4CurrencyHolding(currentHoldingList);
+            return currentHoldingPageInfo;
         }
 
         return result;
     }
 
+    private void renderMainSearch4CurrencyHolding(List<CoinCurrencyHolding> currentHoldingList) {
+
+    }
 
 
     private void renderMainSearch4CmcMap(List<CoinCmcMap> cmcMapList) {

+ 21 - 0
src/main/resources/static/coin.html

@@ -377,6 +377,27 @@
                 <option value="asc">asc</option>
             </select>
         </div>
+
+        <div id="apis-quiet-div-currentHolding" style="display: none;">
+            <button class="apis-quiet-div-button3" slideDiv="apis-quiet-content" pageO="prev">上一页</button>
+            <button class="apis-quiet-div-button3" slideDiv="apis-quiet-content" pageO="next">下一页</button>
+            <input type="text" style="width: 100px;padding-top: 3px;" id="apis-quiet-div-currentHolding-pageNo" value="1">
+            <input type="text" style="width: 100px;padding-top: 3px;" id="apis-quiet-div-currentHolding-pageSize" disabled="disabled" value="20">
+            <input type="text" style="width: 100px;padding-top: 3px;" id="apis-quiet-div-currentHolding-pages" disabled="disabled" value="999999">
+            <input type="text" style="width: 100px;padding-top: 3px;" id="apis-quiet-div-currentHolding-keyword" placeholder="关键词">
+            <select id="apis-quiet-div-currentHolding-categoryField" style="height: 24px;">
+                <option value="">--</option>
+            </select>
+            <select id="apis-quiet-div-currentHolding-sortField" style="height: 24px;">
+                <option value="cch.buy_time">买入时间</option>
+                <option value="cch.current_amount">当前金额</option>
+            </select>
+            <select id="apis-quiet-div-currentHolding-sort" style="height: 24px;">
+                <option value="desc">desc</option>
+                <option value="asc">asc</option>
+            </select>
+        </div>
+
         <div id="apis-quiet-div-cmcmap" style="display: none;">
             <button class="apis-quiet-div-button3" slideDiv="apis-quiet-content" pageO="prev">上一页</button>
             <button class="apis-quiet-div-button3" slideDiv="apis-quiet-content" pageO="next">下一页</button>

+ 14 - 1
src/main/resources/static/js/my-coin.js

@@ -184,6 +184,12 @@ function initOther4Select() {
                             allowClear: true, // 允许清除选择
                             width: '160px'              // 在初始化时设置宽度
                         });
+                    } else if (obj.nameEn === 'currentHolding') {
+                        var exchangeCategoryStr = '';
+                        $.each(obj.exchangeCategoryList, function (index2, obj2) {
+                            exchangeCategoryStr += '<option value="' + obj2 + '">' + obj2 + '</option>';
+                        });
+                        $("#apis-quiet-div-currentHolding-categoryField").append(exchangeCategoryStr);
                     }
                 });
 
@@ -381,6 +387,13 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
         jsonData.sortField = $("#apis-quiet-div-music-sortField").val();
         jsonData.sort = $("#apis-quiet-div-music-sort").val();
         jsonData.categoryField = $("#apis-quiet-div-music-categoryField").val();
+    } else if (nameEn === 'currentHolding') {
+        jsonData.pageNo = $("#apis-quiet-div-currentHolding-pageNo").val();
+        jsonData.pageSize = $("#apis-quiet-div-currentHolding-pageSize").val();
+        jsonData.keyword = $("#apis-quiet-div-currentHolding-keyword").val();
+        jsonData.sortField = $("#apis-quiet-div-currentHolding-sortField").val();
+        jsonData.sort = $("#apis-quiet-div-currentHolding-sort").val();
+        jsonData.categoryField = $("#apis-quiet-div-currentHolding-categoryField").val();
     }
 
     $.ajax({
@@ -397,7 +410,7 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
                     return;
                 }
 
-                if (nameEn === 'orderHistoryProductType' || nameEn === 'traderList' || nameEn === 'watchlist' || nameEn === 'image' || nameEn === 'cmcmap' || nameEn === 'music') {
+                if (nameEn === 'orderHistoryProductType' || nameEn === 'traderList' || nameEn === 'watchlist' || nameEn === 'image' || nameEn === 'cmcmap' || nameEn === 'music'  || nameEn === 'currentHolding') {
                     $("#apis-quiet-div-" + nameEn).find("input[id$=pages]").val(data.data.pages);
                     $('#' + slideDiv).find("span.contentSPAN").html(data.data.total);
                     data = data.data.list;