Browse Source

优化推送消息

li.shaoyi 3 years ago
parent
commit
e72ab74ecc

+ 69 - 0
public/proto/mtp.proto

@@ -47,6 +47,20 @@ message CommonNtf {
 	optional MessageHead Header = 1; // 消息头
 		optional NotifyHead NtfHeader = 2; // NotifyHead 公共通知消息(生成后包含MessageHead,引用上面消息即可)
 }
+// 平仓单平仓明细
+message ArrayCloseInfo {
+	optional uint64 ClosedOrderID = 1; // 被平持仓单ID
+	optional uint64 ClosedQty = 2; // 被平仓数量
+	optional double ClosePL = 3; // 平仓盈亏
+	optional double RlsUsedMargin = 4; // 释放的占用保证金
+	optional double TradeCharge = 5; // 平仓手续费
+	optional double WareHouseCharge = 6; // 仓单服务费
+	optional double TradeAmount = 7; // 成交金额
+	optional string OpenTime = 8; // 开仓时间(对冲接口用)
+	optional double OpenPrice = 9; // 开仓价格(对冲接口用)
+	optional uint64 MatchAccountID = 10; // 对手方资金账号代码
+	optional double RealClosePL = 11; // 实际盈亏
+}
 // 用户登录请求
 message LoginReq {
 	optional MessageHead Header = 1;
@@ -555,6 +569,37 @@ message HoldsChangedNtf {
 		optional double TradePrice = 9; // double 成交金额
 		optional double HolderPrice = 10; // double 持仓金额
 }
+
+// 委托单成交通知
+message OrderDealedNtf {
+	optional MessageHead Header = 1; // 消息头
+			optional NotifyHead NtfHeader = 2; // NotifyHead 公共消息头
+			optional uint64 OrderID = 3; // uint64 一级生成的订单号
+			optional string ClientSerialNo = 4; // string 客户端流水号
+			optional uint32 GoodsID = 5; // uint32 原始委托商品代码
+			optional uint64 TradeQty = 6; // uint64 成交数量
+			optional double Amount = 7; // double 成交金额
+			optional uint64 ActiveQty = 8; // uint64 激活数量,即剩余数量
+			optional uint32 OrderStatus = 9; // uint32 单据状态
+			optional uint64 TradeID = 10; // uint64 成交ID
+			optional uint64 AccountID = 11; // uint64 资金账号代码
+			optional double TradePrice = 12; // double 成交价格
+			optional uint32 BuyOrSell = 13; // uint32 买卖方向
+			optional uint64 OrderQty = 14; // uint64 委托数量
+			optional uint32 OrderType = 15; // uint32 订单类型
+			optional string TradeTime = 16; // string 成交时间
+			repeated ArrayCloseInfo CloseInfos = 17; // ArrayCloseInfo 平仓信息
+			optional uint32 SpecialAccount = 18; // uint32 特别会员账号
+			optional double TradeCharge = 19; // double 成交手续费
+			optional double WareHouseCharge = 20; // double 仓单服务费
+			optional double UsedMargin = 21; // double 占用保证金
+			optional uint32 OperatorID = 22; // uint32 操作员账号ID
+			optional uint32 MemberID = 23; // uint32 会员账号,会员系统平仓使用
+			optional uint64 MatchAccountID = 24; // uint64 对手方资金账号代码
+			optional uint32 BuildType = 25; // uint32 下单类型
+			optional uint32 CloseType = 26; // uint32 平仓类型
+}
+
 // 委托单撤单通知
 message OrderCanceledNtf {
 	optional MessageHead Header = 1; // 消息头
@@ -2104,4 +2149,28 @@ message AccountFundInfoRsp {
 	optional double AvailableMargin = 6; // double 可用保证金,查询位掩码: 1
 	optional double AvailableOutMoney = 7; // double 可出资金,查询位掩码: 2
 	optional int32 IsCleanAccount = 8; // int32 是否是干净账户,查询位掩码: 4
+}
+
+// 仓单贸易成交通知
+message WRTradeDealedNtf {
+	optional MessageHead Header = 1; // 消息头
+		optional NotifyHead NtfHeader = 2; // NotifyHead 公共消息头
+		optional uint64 ListingOrderID = 3; // uint64 挂牌委托单号
+		optional uint64 DelistingOrderID = 4; // uint64 摘牌委托单号
+		optional uint64 TradeQty = 5; // uint64 挂牌成交数量
+		optional uint64 ActiveQty = 6; // uint64 挂牌剩余数量
+		optional uint64 RealTradeQty = 7; // uint64 摘牌实际成交数量
+		optional uint64 TradeID = 8; // uint64 成交单ID
+		optional uint64 BuyAccountID = 9; // uint64 买资金账号
+		optional uint64 SellAccountID = 10; // uint64 卖资金账号
+		optional double TradePrice = 11; // double 成交价
+		optional string TradeTime = 12; // string 成交时间
+		optional uint64 WRFactorTypeID = 13; // uint64 仓单要素ID
+		optional uint32 WRTransferUserID = 14; // uint32 仓单受让账户
+		optional double FreezeFirstAmount = 15; // double 冻结首付金额
+		optional double UnFreezeFirstAmount = 16; // double 解冻首付金额
+		optional double RealTradeAmount = 17; // double 实际成交金额
+		optional double PerformanceAmount = 18; // double 履约金额
+		optional uint64 PerformancePlanID = 19; // uint64 履约计划ID
+		optional int64 PerformanceTemplateID = 20; // int64 履约计划模板ID
 }

+ 1 - 1
src/assets/styles/mixin.less

@@ -1101,7 +1101,7 @@
 .input-enumdicname-absolute {
     position   : absolute;
     top        : -8px;
-    right      : -78px;
+    right      : -64px;
     color      : @m-grey41;
     margin-left: 5px;
     font-size  : 14px;

+ 2 - 0
src/services/funcode/index.ts

@@ -66,6 +66,8 @@ export const funCode: Code = {
 
     // 交易通知
     OrderCanceledNtf: 131084, // 委托单撤单通知
+    OrderDealedNtf: 131081, // 委托单成交通知
+    WRTradeDealedNtf: 131110, // 仓单贸易成交通知
     CustOfflineNtf: 131074, // 客户离线通知
     PosChangedNtf: 131075, // 头寸变化通知
     MoneyChangedNtf: 131076, // 资金变化通知

+ 25 - 3
src/services/index.ts

@@ -8,6 +8,8 @@ import { Package40, Package50 } from '@/utils/websocket/package';
 import eventBus from '../utils/eventBus';
 import DataCenter from './dataCenter/index';
 import { noticeParseRsp } from './socket/protobuf/buildReq';
+import { debounce } from '@/utils/time'
+
 /** 行情和交易长链 */
 interface LongLink {
     /** 行情长链 */
@@ -157,6 +159,8 @@ export default new (class LifeCycleCtr {
     tradingRelevant(socket: MTP2WebSocket<Package50>) {
         // eslint-disable-next-line @typescript-eslint/no-this-alias
         const _this = this
+        const timeout = 2000; // 延迟推送消息,防止短时间内重复请求
+
         // 推送信息
         socket.onReceivePush = (_self, msg) => {
             switch (msg.funCode) {
@@ -170,15 +174,33 @@ export default new (class LifeCycleCtr {
                     break;
                 case funCode.PosChangedNtf:
                     //接收到头寸变化通知!
-                    eventBus.$emit('posChangedNtf', noticeParseRsp(msg, 'PosChangedNtf'));
+                    debounce(() => {
+                        eventBus.$emit('posChangedNtf', noticeParseRsp(msg, 'PosChangedNtf'));
+                    }, timeout, 'posChangedNtf')
                     break;
                 case funCode.MoneyChangedNtf:
                     // 接收到资金变化通知
-                    eventBus.$emit('moneyChangedNtf', noticeParseRsp(msg, 'MoneyChangedNtf'));
+                    debounce(() => {
+                        eventBus.$emit('moneyChangedNtf', noticeParseRsp(msg, 'MoneyChangedNtf'));
+                    }, timeout, 'moneyChangedNtf')
                     break;
                 case funCode.OrderCanceledNtf:
                     // 接收到委托单撤单通知
-                    eventBus.$emit('orderCanceledNtf', noticeParseRsp(msg, 'OrderCanceledNtf'));
+                    debounce(() => {
+                        eventBus.$emit('orderCanceledNtf', noticeParseRsp(msg, 'OrderCanceledNtf'));
+                    }, timeout, 'orderCanceledNtf')
+                    break;
+                case funCode.OrderDealedNtf:
+                    // 接收到委托单成交通知
+                    debounce(() => {
+                        eventBus.$emit('orderDealedNtf', noticeParseRsp(msg, 'OrderDealedNtf'));
+                    }, timeout, 'orderDealedNtf')
+                    break;
+                case funCode.WRTradeDealedNtf:
+                    // 接收到仓单贸易成交通知
+                    debounce(() => {
+                        eventBus.$emit('wrTradeDealedNtf', noticeParseRsp(msg, 'WRTradeDealedNtf'));
+                    }, timeout, 'wrTradeDealedNtf')
                     break;
                 default:
                     msg.funCode !== 0 && console.warn({ msg: '接收到通知:' + msg.funCode });

+ 3 - 1
src/services/proto/warehousetrade/index.ts

@@ -7,6 +7,7 @@ import {
 import { protoMiddleware } from "@/services/socket/protobuf/buildReq";
 import { IMessageHead } from "@/services/socket/protobuf/proto";
 import { HeadEnum } from "@/services/socket/protobuf/protoHeader";
+import { getInTaAccount } from '@/services/bus/account';
 
 
 /**
@@ -16,7 +17,8 @@ import { HeadEnum } from "@/services/socket/protobuf/protoHeader";
 export const hdWROrder = (param: HdWROrderReq): Promise<any> => {
     if (param.MarketID) {
         const header: IMessageHead = {
-            MarketID: param.MarketID
+            MarketID: param.MarketID,
+            AccountID: getInTaAccount(),
         }
         return protoMiddleware<HdWROrderReq>(param, 'HdWROrderReq', 'HdWROrderRsp', header)
     } else {

+ 3 - 1
src/utils/eventBus/index.ts

@@ -25,9 +25,11 @@ enum EventKey {
     posChangedNtf,  //接收到头寸变化通知
     moneyChangedNtf,  //接收到资金变化通知
     bargain,  // 议价单
+    orderDealedNtf,  //接收到委托单成交通知
     orderCanceledNtf,  //接收到委托单撤单通知
     quoteReceiveNtf,  // 接收实时行情推送
-    quoteReconnectSucess // 行情链路重连成功通知
+    quoteReconnectSucess, // 行情链路重连成功通知
+    wrTradeDealedNtf, // 接收到仓单贸易成交通知
 }
 
 /**

+ 1 - 1
src/views/market/spot_trade/components/buy-sell-market/components/delisting/index.vue

@@ -199,7 +199,7 @@ export default defineComponent({
           RelatedWRTradeOrderID: props.selectedRow.wrtradeorderid, // uint64 关联委托单号(摘牌委托关联挂牌委托单ID)
           WRTransferUserID: props.selectedRow.userid, // uint32 仓单受让用户
           OrderQty: res.num as number, // uint64 委托数量
-          OrderSrc: 0, // uint32 委托来源
+          OrderSrc: 1, // uint32 委托来源
           ClientSerialNo: uuidv4(), // string 客户端流水号
           ClientOrderTime: moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), // string 客户端委托时间
           ClientType: 4, // uint32 终端类型

+ 18 - 11
src/views/market/spot_trade/components/post_buying/index.vue

@@ -115,12 +115,10 @@ import Drawer from '@/common/components/drawer/index.vue';
 import { PlusOutlined, MinusOutlined } from '@ant-design/icons-vue';
 import { hdWROrder } from '@/services/proto/warehousetrade';
 import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
-import { DGFactoryItems, WRGoodsInfo } from '@/services/proto/warehousetrade/interface';
+import { WRGoodsInfo } from '@/services/proto/warehousetrade/interface';
 import { getAccountTypeList, getUserId } from '@/services/bus/account';
 import { v4 as uuidv4 } from 'uuid';
 import moment, { Moment } from 'moment';
-import { getMarketRunByTradeMode } from '@/services/bus/market';
-import { WrOrderQuote } from '@/services/go/wrtrade/interface';
 import { handleForm, handleNumAndPrice } from './setup';
 import { validateAction } from '@/common/setup/form';
 import { FormParam, TempWrOrderQuoteDetail } from './interface';
@@ -131,7 +129,7 @@ import { getCanUseMoney } from '@/services/bus/account';
 import { message } from 'ant-design-vue';
 import Permance from '@/common/components/permanceTemp/choosePermancePlanTmp.vue';
 import { QueryPermancePlanTmpRsp } from '@/services/go/wrtrade/interface';
-import { getMarketByTradeMode } from '@/services/bus/market';
+import APP from '@/services';
 
 export default defineComponent({
   emits: ['cancel', 'update'],
@@ -171,12 +169,20 @@ export default defineComponent({
     }
     formState.DeliveryMonth = props.selectedRow.deliverymonth ? moment(new Date(props.selectedRow.deliverymonth)) : props.time;
 
-    // 17=仓单贸易市场
-    const market = getMarketByTradeMode(17);
-    if (market) {
-      formState.marketid = market.marketid;
-    } else {
-      message.error('市场信息异常,请稍后重试');
+    switch (props.enumName) {
+      // 仓单贸易
+      case 'warehouse_receipt_trade_price': {
+        formState.marketid = 17201;
+        break;
+      }
+      // 仓单预售
+      case 'warehouse_pre_sale_price': {
+        formState.marketid = 17202;
+        break;
+      }
+      default: {
+        message.error('市场信息异常,请稍后重试');
+      }
     }
 
     const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.enumName, props.selectedRow);
@@ -208,7 +214,7 @@ export default defineComponent({
     }
 
     function submit() {
-      const marketInfo = getMarketRunByTradeMode(17);
+      const marketInfo = APP.get('marketRun').find(({ marketid }: { marketid: number }) => marketid === formState.marketid)
       if (marketInfo) {
         validateAction<FormParam>(formRef, formState).then((res) => {
           // 现在增加一种挂牌求购的情况
@@ -222,6 +228,7 @@ export default defineComponent({
             WeightRatio: 1, // double 商品重量系数
           };
           const param = {
+            OrderSrc: 1, // 1=客户端
             AccountID: res.accountid, // 默认内部资金账号第一个
             ClientSerialNo: uuidv4(), // 客户端流水号
             // OperateSrc: 2,

+ 12 - 0
src/views/order/spot_warran/components/spot_warrant_deal/index.vue

@@ -24,6 +24,7 @@
 </template>
 
 <script lang="ts">
+import { onBeforeUnmount } from 'vue'
 import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { enumOrderComponents } from '@/common/constants/enumOrderComponents';
 import { queryTableList, BtnList, defineAsyncComponent, defineComponent } from '@/common/export/commonTable';
@@ -35,6 +36,7 @@ import { ComposeOrderTableParam } from '@/common/setup/table/interface';
 import { expandIcon } from '@/common/setup/table/clolumn';
 import { getWrOrderTypeName } from '@/common/constants/enumsName';
 import { TableKey } from '@/common/methods/table/interface';
+import bus from '@/utils/eventBus';
 
 export default defineComponent({
   name: enumOrderComponents.spot_warrant_deal,
@@ -79,6 +81,16 @@ export default defineComponent({
       }
       return result;
     }
+
+    // 接收到资金变化通知
+    const stopNotify = bus.$on('moneyChangedNtf', () => {
+      queryTableAction();
+    });
+
+    onBeforeUnmount(() => {
+      stopNotify();
+    })
+
     return {
       ...handleComposeOrderTable<WrSpecialMatchOrder>(param),
       loading,

+ 1 - 1
src/views/order/spot_warran/components/spot_warrant_pending_order/index.vue

@@ -65,7 +65,7 @@ export default defineComponent({
       };
       queryTable(queryWrOrderDetail, param);
     };
-    const stopNotify = Bus.$on('blocsTrade', () => {
+    const stopNotify = Bus.$on(['moneyChangedNtf', 'blocsTrade'], () => {
       queryTableAction();
     });
 

+ 1 - 0
src/views/order/spot_warran/components/spot_warrant_spot_details/components/listing/index.vue

@@ -326,6 +326,7 @@ export default defineComponent({
 
           // 仓单贸易挂牌  (仓单贸易 = HasWr = 1)
           const param = {
+            OrderSrc: 1, // 1=客户端
             AccountID: getInTaAccount(), // 默认内部资金账号第一个
             ClientSerialNo: v4(), // 客户端流水号
             // OperateSrc: 2,

+ 13 - 0
src/views/order/spot_warran/components/spot_warrant_spot_details/index.vue

@@ -14,6 +14,7 @@
 </template>
 
 <script lang="ts">
+import { onBeforeUnmount } from 'vue'
 import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { enumOrderComponents } from '@/common/constants/enumOrderComponents';
 import { BtnList, defineAsyncComponent, defineComponent, ModalEnum, queryTableList } from '@/common/export/commonTable';
@@ -23,6 +24,8 @@ import { handleComposeOrderTable } from '@/common/setup/table/compose';
 import { ComposeOrderTableParam } from '@/common/setup/table/interface';
 import { queryHoldLB } from '@/services/go/wrtrade';
 import { WrHoldLB } from '@/services/go/wrtrade/interface';
+import bus from '@/utils/eventBus';
+
 export default defineComponent({
   name: enumOrderComponents.spot_warrant_spot_details,
   components: {
@@ -44,6 +47,16 @@ export default defineComponent({
       tableName: 'table_pcweb_spot_trade_bottom_spot_warrant_spot_detail',
       recordList: getRecordItemTab(),
     };
+
+    // 接收到资金变化通知
+    const stopNotify = bus.$on('moneyChangedNtf', () => {
+      queryTableAction();
+    });
+
+    onBeforeUnmount(() => {
+      stopNotify();
+    })
+
     return {
       ...handleComposeOrderTable<WrHoldLB>(param),
       loading,

+ 11 - 31
src/views/order/spot_warran/index.vue

@@ -8,52 +8,32 @@
 </template>
 
 <script lang="ts">
-import { defineAsyncComponent, defineComponent, nextTick, onBeforeUnmount } from 'vue';
+import { defineAsyncComponent, defineComponent } from 'vue';
 import { enumOrderComponents } from '@/common/constants/enumOrderComponents';
 import thirdMenu from '@/common/components/thirdMenu/index.vue';
 import { handleOrderDetailList } from '@/common/setup/order/orderData';
-import Bus from '@/utils/eventBus/index';
 
 export default defineComponent({
   name: enumOrderComponents.spot_warrant,
   components: {
     thirdMenu,
-    [enumOrderComponents.spot_warrant_deal]: defineAsyncComponent(() => import('./components/spot_warrant_deal/index.vue')),
-    [enumOrderComponents.spot_warrant_designated_deal]: defineAsyncComponent(() => import('./components/spot_warrant_designated_deal/index.vue')),
-    [enumOrderComponents.spot_warrant_in_and_out_warehouse]: defineAsyncComponent(() => import('./components/spot_warrant_in_and_out_warehouse/index.vue')),
-    [enumOrderComponents.spot_warrant_inventory_summary]: defineAsyncComponent(() => import('./components/spot_warrant_inventory_summary/index.vue')),
-    [enumOrderComponents.spot_warrant_pending_order]: defineAsyncComponent(() => import('./components/spot_warrant_pending_order/index.vue')),
-    [enumOrderComponents.spot_warrant_spot_summary]: defineAsyncComponent(() => import('./components/spot_warrant_spot_summary/index.vue')),
+    [enumOrderComponents.spot_warrant_deal]: defineAsyncComponent(() => import('./components/spot_warrant_deal/index.vue')), // 成交
+    [enumOrderComponents.spot_warrant_designated_deal]: defineAsyncComponent(() => import('./components/spot_warrant_designated_deal/index.vue')), // 指定成交
+    [enumOrderComponents.spot_warrant_in_and_out_warehouse]: defineAsyncComponent(() => import('./components/spot_warrant_in_and_out_warehouse/index.vue')), // 提货
+    [enumOrderComponents.spot_warrant_inventory_summary]: defineAsyncComponent(() => import('./components/spot_warrant_inventory_summary/index.vue')), // 库存汇总
+    [enumOrderComponents.spot_warrant_pending_order]: defineAsyncComponent(() => import('./components/spot_warrant_pending_order/index.vue')), // 挂单
+    [enumOrderComponents.spot_warrant_spot_summary]: defineAsyncComponent(() => import('./components/spot_warrant_spot_summary/index.vue')), // 现货汇总
     [enumOrderComponents.spot_warrant_spot_details]: defineAsyncComponent(() => import('./components/spot_warrant_spot_details/index.vue')), // 现货明细
-    [enumOrderComponents.spot_warrant_bargain]: defineAsyncComponent(() => import('./components/spot_warrant_bargain/index.vue')),
+    [enumOrderComponents.spot_warrant_bargain]: defineAsyncComponent(() => import('./components/spot_warrant_bargain/index.vue')), // 议价
   },
   setup() {
     const { componentId, tabList, changeTab } = handleOrderDetailList(enumOrderComponents.spot_warrant);
 
-    // 组件重新加载
-    function componentReload() {
-      const code = componentId.value;
-      componentId.value = undefined;
-      nextTick(() => {
-        componentId.value = code;
-      });
-    }
-
-    // 资金变化,重新加载数据
-    const stopNotify = Bus.$on('moneyChangedNtf', () => {
-      // 重新加载组件
-      componentReload();
-    });
-
-    onBeforeUnmount(() => {
-      stopNotify();
-    })
-
     return {
       componentId,
       tabList,
       changeTab,
-    };
-  },
-});
+    }
+  }
+})
 </script>

+ 1 - 1
src/views/order/swap_the_order/components/swap_commodity_contract_commission/index.vue

@@ -73,7 +73,7 @@ export default defineComponent({
       }
     }
     // 挂牌
-    const stopNotify = Bus.$on('spotTrade', () => {
+    const stopNotify = Bus.$on(['posChangedNtf', 'spotTrade'], () => {
       queryTableAction();
     });
 

+ 1 - 1
src/views/order/swap_the_order/components/swap_commodity_contract_make_deal/index.vue

@@ -78,7 +78,7 @@ export default defineComponent({
       }
       return result;
     }
-    const stopNotify = Bus.$on('spotTrade', () => {
+    const stopNotify = Bus.$on(['posChangedNtf', 'spotTrade'], () => {
       queryTableAction();
     });
 

+ 1 - 1
src/views/order/swap_the_order/components/swap_commodity_contract_summary/index.vue

@@ -131,7 +131,7 @@ export default defineComponent({
       closeComponent(value)
     }
 
-    const stopNotify = Bus.$on('spotTrade', () => {
+    const stopNotify = Bus.$on(['posChangedNtf', 'spotTrade'], () => {
       queryTableAction()
     });
 

+ 1 - 19
src/views/order/swap_the_order/index.vue

@@ -15,7 +15,7 @@
 </template>
 
 <script lang="ts">
-import { defineAsyncComponent, defineComponent, ref, nextTick, onBeforeUnmount } from 'vue';
+import { defineAsyncComponent, defineComponent, ref } from 'vue';
 import { enumOrderComponents } from '@/common/constants/enumOrderComponents';
 import thirdMenu from '@/common/components/thirdMenu/index.vue';
 import { handleOrderDetailList } from '@/common/setup/order/orderData';
@@ -42,24 +42,6 @@ export default defineComponent({
       Bus.$emit('bargain', value);
     }
 
-    // 组件重载
-    function componentReload() {
-      const tmpComponent = state.componentId.value;
-      state.componentId.value = undefined;
-      nextTick(() => {
-        state.componentId.value = tmpComponent;
-      })
-    }
-
-    // 头寸变化,重新加载数据
-    const stopNotify = Bus.$on('posChangedNtf', () => {
-      componentReload();
-    })
-
-    onBeforeUnmount(() => {
-      stopNotify();
-    })
-
     return {
       ...state,
       changeBargain,