Sfoglia il codice sorgente

commit 提交代码

yu jie 4 anni fa
parent
commit
bf1b536045

+ 121 - 0
src/views/market/spot_trade/components/buy-sell-market/setup.ts

@@ -2,6 +2,7 @@ import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { TableKey } from '@/common/methods/table/interface';
 import { getTableColumns, getTableEvent, queryTableList } from "@/common/setup/table";
 import { ref } from 'vue';
+import {WrMarketTradeConfig} from "@/services/go/wrtrade/interface";
 
 
 export function handleBuyAndSellList<T>(menuType: EnumRouterName, isDetail: boolean, tableName: keyof TableKey) {
@@ -81,4 +82,124 @@ export function handleChildComponentMethod() {
         childRef.value?.queryTableAction();
     }
     return { childRef, loadChildComponentData }
+}
+
+export enum WrTradePriceEnum {
+    OnePriceDeListBuy,   // 一口价 摘牌买入
+    OnePriceDeListSale,  // 一口价 摘牌卖出
+    FloatPriceDeListBuy, // 浮动价 摘牌买入
+    FloatPriceDeListSale,// 浮动价 摘牌卖出
+}
+
+/**
+ * 我负责计算摘牌页面需要显示的值
+ * 这里分四种情况
+ * 若履约保证金为0,则不显示括号内容
+ * type 1: 一口价 摘牌买入 摘牌最大数量 = min 挂牌数量,可用资金/(买方履约保证金比例*挂牌价格)                                                                            摘牌金额=挂牌价格*摘牌数量
+ * type 2: 一口价 摘牌卖出 摘牌最大数量 = min(现货库存可用数量,挂牌数量),现货库存数量为所选仓单数量 && 履约保证金=卖方履约保证金比例*摘牌金额,履约保证金为0则括号内容不显示       摘牌金额=挂牌价格*摘牌数量
+ * type 3: 浮动价 摘牌买入 摘牌最大数量 = min {可用资金/(买方履约保证金比例*估算总价),挂牌数量} && 履约保证金=履约保证金比例*估算总额,履约保证金为0则括号内容不显示 && 估算总额=估算总价*摘牌数量 && 估算总价=挂牌基差+期货合约价 && 期货合约取价顺序:现价->实时结算价->昨结算价
+ * type 4:浮动价 摘牌卖出 摘牌最大数量 = min(现货库存可用数量,挂牌数量),现货库存数量为所选仓单数量 && 履约保证金=履约保证金比例*估算总额
+ *
+ * type 1:  in => 输入 {
+ *     挂牌价格, 可用资金, 摘牌数量,  市场交易参数配置, 挂牌数量
+ * } out => {
+ *     履约保证金, 摘牌金额, 摘牌最大数量
+ * }
+ *
+ * type 2: in => 输入 {
+ *     挂牌价格, 仓单数量, 摘牌数量,  市场交易参数配置, 挂牌数量
+ * } out => {
+ *     履约保证金, 摘牌金额, 摘牌最大数量
+ * }
+ *
+ * type 3: in => 输入 {
+ *     期货合约价 + 基差, 可用资金,  摘牌数量,  市场交易参数配置, 挂牌数量
+ * } out => {
+ *     履约保证金, 估算总额, 摘牌最大数量
+ * }
+ *
+ * type 4: in => 输入 {
+ *     期货合约价 + 基差, 仓单数量, 摘牌数量, 市场交易参数配置, 挂牌数量
+ * } out => {
+ *     履约保证金, 估算总额, 摘牌最大数量
+ * }
+ */
+export function ListedViewModel(enumType : WrTradePriceEnum){
+
+    let marginPrice: number = 0  // 履约保证金
+    let amount: number = 0 // 摘牌金额 或 估算总额
+    let maxNum: number = 0 // 摘牌最大数量
+
+    // 负责把输入的数据 转换成 ui需要显示的数据
+    function getCalculate(param: WrParam) {
+        switch (enumType) {
+            case WrTradePriceEnum.FloatPriceDeListBuy: //  浮动价 摘牌买入
+            case WrTradePriceEnum.OnePriceDeListBuy:   //  一口价 摘牌买入
+                if (param.availableFunds === undefined) { // 这里防止异常
+                    maxNum = 0
+                } else {
+                    // 摘牌最大数量 = min 挂牌数量,可用资金/(买方履约保证金比例*挂牌价格)
+                    if (param.config.buymarginalgorithm === 1) {  //  买方保证金模式 1: 比率 2: 固定
+                        maxNum = Math.min(param.listedNum, param.availableFunds as number / param.config.buymarginvalue * param.orderPrice)
+                    } else {
+                        maxNum = Math.min(param.listedNum, param.availableFunds as number / (param.config.buymarginvalue + param.orderPrice))
+                    }
+                }
+                // 摘牌金额 = 挂牌价格 * 摘牌数量
+                amount = param.orderPrice * param.deListNum
+                // 履约保证金=卖方履约保证金比例*摘牌金额,履约保证金为0则括号内容不显示
+                if (param.config.sellmarginalgorithm === 1) { //卖方保证金方式 - 1:比率 2:固定
+                    marginPrice = param.config.sellmarginvalue * amount
+                } else {
+                    marginPrice = param.config.sellmarginvalue + amount
+                }
+                break
+            case WrTradePriceEnum.FloatPriceDeListSale: // 浮动价 摘牌卖出
+            case WrTradePriceEnum.OnePriceDeListSale:  // 一口价  摘牌卖出
+                if (param.warehouseNum === undefined) { // 这里防止异常
+                    maxNum = 0
+                }else{
+                    // 摘牌最大数量 = min(现货库存可用数量,挂牌数量),现货库存数量为所选仓单数量
+                    maxNum = Math.min(param.listedNum, param.warehouseNum as number)
+                }
+                // 摘牌金额 = 挂牌价格 * 摘牌数量
+                amount = param.orderPrice * param.deListNum
+                // 履约保证金=卖方履约保证金比例*摘牌金额,履约保证金为0则括号内容不显示
+                if (param.config.sellmarginalgorithm === 1) { //卖方保证金方式 - 1:比率 2:固定
+                    marginPrice = param.config.sellmarginvalue * amount
+                } else {
+                    marginPrice = param.config.sellmarginvalue + amount
+                }
+                break
+        }
+    }
+
+    const uiParam: UiParam = {
+        marginPrice: marginPrice,
+        amount: amount,
+        maxNum: maxNum
+    }
+
+    return {getCalculate , uiParam}
+}
+
+/**
+ * 需要传入的数据集合
+ */
+export interface WrParam {
+    orderPrice : number  // 挂牌价格 (浮动价是期货合约价 + 基差)  也传这个
+    availableFunds?: number //可用资金(当前账号的可用)
+    warehouseNum?: number  // 仓单数量(如果当前是用自己仓单卖商品给其他人 则需要传自己仓单商品的总数)
+    deListNum: number     // 摘牌数量 (当前选择数量)
+    listedNum: number     // 挂牌数量  (当前单据的挂牌数量)
+    config: WrMarketTradeConfig // 市场交易参数配置 (请求配置返回)
+}
+
+/**
+ *  需要给ui的数据集合
+ */
+export interface UiParam {
+    marginPrice: number  // 履约保证金
+    amount: number       // 摘牌金额 或 估算总额
+    maxNum: number       // 摘牌最大数量
 }