li.shaoyi 3 år sedan
förälder
incheckning
f247b1740e

+ 2 - 0
src/services/go/ermcp/report/interface.ts

@@ -70,6 +70,8 @@ export interface Ermcp3ExpourseReport {
     totalspotqty: number;//现货头寸总量
     unitid: number;//单位id
     updatetime: string;//更新时间
+    needqty: number;//应套总量 = 应套保量 + 应套利量
+    diffneedqty: number;//应套变动量 = 应套保量 - 期初应套保量 + 应套利量 - 期初应套利量
 }
 
 /**

+ 13 - 1
src/services/go/ermcp/spot-contract/index.ts

@@ -5,7 +5,9 @@ import {
     Ermcp3ContractReq,
     Ermcp3ContractRsp,
     ErmcpOPLogModel,
-    QueryChangeLogReq
+    QueryChangeLogReq,
+    QueryErmcp3ContractMiddleGoodsCfgReq,
+    QueryErmcp3ContractMiddleGoodsCfgRsp
 } from '@/services/go/ermcp/spot-contract/interface';
 import { getUserAccountType } from "@/services/bus/user";
 
@@ -37,3 +39,13 @@ export function QueryChangeLog(req: QueryChangeLogReq): Promise<ErmcpOPLogModel[
     });
 }
 
+/**
+ * 查询现货合同期现配置信息
+ * @param req 
+ * @returns 
+ */
+export function queryErmcp3ContractMiddleGoodsCfg(req: QueryErmcp3ContractMiddleGoodsCfgReq): Promise<QueryErmcp3ContractMiddleGoodsCfgRsp[]> {
+    return commonSearch_go('/Ermcp3/QueryErmcp3ContractMiddleGoodsCfg', req).catch((err) => {
+        throw new Error(`查询现货合同期现配置信息: ${err}`);
+    });
+}

+ 21 - 0
src/services/go/ermcp/spot-contract/interface.ts

@@ -103,3 +103,24 @@ export interface ErmcpOPLogModel {
     relatedid: string;//现货合同ID\套保计划
     updatetime: string;//更新时间
 }
+
+/**
+ * 查询现货合同期现配置信息 请求
+ */
+export interface QueryErmcp3ContractMiddleGoodsCfgReq {
+    spotcontractid: string
+}
+
+/**
+ * 查询现货合同期现配置信息 返回
+ */
+export interface QueryErmcp3ContractMiddleGoodsCfgRsp {
+    agreeunit?: number;//合约乘数
+    convertratio?: number;//期货品种系数
+    covertqty: number;//折算手数 =【待点价量 / (合约乘数*期货品种系数) 】
+    middlegoodsid?: number;//套保品种ID
+    middlegoodspricedqty3: string;//已定价量(套保品种应套保量) = MiddleGoodsPricedQty2 * 套保比率
+    pendingpricedqty: string;//待点价量
+    relatedmiddlegoodsqty: string;//已关联量(套保品种-期货)
+    spotcontractid?: string;//现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
+}

+ 4 - 0
src/services/go/wrtrade/interface.ts

@@ -20,12 +20,16 @@ export interface QueryOrderQuoteReq {
  * 查询大厅行情列表返回
  */
 export interface WrOrderQuote {
+    bannerpicurl: string;//Banner图
     buyprice: number;//买价
     buypricemove: number;//买升贴水(基差)
     buyqty: number;//买量
     deliverygoodscode: string;//品种代码
     deliverygoodsid: number;//品种id
     deliverygoodsname: string;//品种名称
+    enumdicname: string;//单位名称
+    pictureurls: string;//详情图片(逗号分隔)
+    thumurls: string;//缩略图片(1:1)(逗号分隔)
     goodscode: string;//商品合约(浮动价列表才有)
     goodsid: number;//商品id(浮动价列表才有)
     sellprice: number;//卖价

+ 1 - 1
src/services/proto/futures/interface.ts

@@ -6,7 +6,7 @@ export interface ChannelOrderReq {
     ClientOrderTime: string; // string 客户端委托时间
     ClientType: number; // uint32 终端类型
     LoginID: number; // uint64 登陆账号
-    AccountID: number; // uint64 交易账号
+    AccountID: number | undefined; // uint64 交易账号
     GoodsID: number | undefined; // uint32 商品ID
     MarketID: number; // uint32 市场ID
     ValidType: number; // int32 有效类型 - 1当日有效

+ 7 - 0
src/views/business/exposure/list/futures/setup.ts

@@ -9,8 +9,15 @@ import { FilterColumn } from '@/common/components/filter/interface';
 function getColumns() {
     const columns: ColumnType[] = [
         {
+            title: '交易用户',
+            key: 'accountid',
+            width: 200,
+            customRender: ({ record }: { record: ErmcpHedgePosition }) => `${record.accountid}/${record.hedgeaccountcode}`,
+        },
+        {
             title: '期货合约/代码',
             key: 'goodsid',
+            width: 160,
             customRender: ({ record }: { record: ErmcpHedgePosition }) => `${record.goodsname}/${record.goodscode}`,
         },
         {

+ 4 - 0
src/views/business/exposure/list/realTime/index.vue

@@ -24,6 +24,10 @@
   </mtp-table-scroll>
   <!-- 明细 -->
   <mtp-table-detail :columns="columnsDetail" :data-source="detailTableList" :tabs="tabList" v-model:visible="visible" @change="changeTab">
+    <!-- 交易用户 -->
+    <template #accountid="{record}">
+      <span>{{record.accountid + '/' + record.hedgeaccountcode}}</span>
+    </template>
     <template #convertfactor="{record}">
       <span>{{record.convertratio}}</span>
     </template>

+ 45 - 6
src/views/market/futures/compoments/futures-trade/index.vue

@@ -5,15 +5,26 @@
       <div class="futures_trade__left">
         <div class="futures_trade__form">
           <a-form class="inlineForm" ref="formRef" :model="formData" :rules="rules">
-            <a-form-item label="合同编号" v-if="isSpotContract">
+            <a-form-item label="合同编号" style="margin-bottom:10px" v-if="isSpotContract">
               <span class="white">{{ selectedRow.contractno }}</span>
             </a-form-item>
-            <a-form-item label="计划编号" v-if="isHedgePlan">
+            <a-form-item label="计划编号" style="margin-bottom:10px" v-if="isHedgePlan">
               <span class="white">{{ selectedRow.hedgeplanno }}</span>
             </a-form-item>
-            <a-form-item label="账号">
+            <template v-if="isSpotContract">
+              <a-form-item label="已定价量" style="margin-bottom:10px">
+                <span class="white">{{ Number(contractMiddleGoodsCfg.middlegoodspricedqty3).toFixed(2) }}</span>
+              </a-form-item>
+              <a-form-item label="已关联量" style="margin-bottom:10px">
+                <span class="white">{{ contractMiddleGoodsCfg.relatedmiddlegoodsqty }}</span>
+              </a-form-item>
+              <a-form-item label="待点价量" style="margin-bottom:10px">
+                <span class="white">{{ Math.trunc(contractMiddleGoodsCfg.pendingpricedqty) }}({{ Math.trunc(contractMiddleGoodsCfg.covertqty) }}手)</span>
+              </a-form-item>
+            </template>
+            <a-form-item label="账号" name="AccountID">
               <a-select class="inlineFormSelect" placeholder="请选择账号" v-model:value="formData.AccountID" @change="tradeAccountChange">
-                <a-select-option v-for="item in futuresAccountList" :value="item.accountid" :key="item.accountid">{{item.accountid}}/{{ item.accountname }}</a-select-option>
+                <a-select-option v-for="item in accountList" :value="item.accountid" :key="item.accountid">{{item.accountid}}/{{ item.accountname }}</a-select-option>
               </a-select>
             </a-form-item>
             <a-form-item label="合约" name="GoodsID">
@@ -93,6 +104,8 @@ import { ErmcpRealExposureModel } from '@/services/go/ermcp/exposure/interface';
 import { queryExposureGoods } from '@/services/go/ermcp/exposure'
 import { Ermcp3HedgePlan } from '@/services/go/ermcp/plan/interface';
 import { GetDeliveryGoodsDetail } from "@/services/go/ermcp/goodsInfo";
+import { queryErmcp3ContractMiddleGoodsCfg } from '@/services/go/ermcp/spot-contract'
+import { QueryErmcp3ContractMiddleGoodsCfgRsp } from '@/services/go/ermcp/spot-contract/interface';
 
 export default defineComponent({
   emits: ['cancel', 'update'],
@@ -106,11 +119,18 @@ export default defineComponent({
   },
   setup(props, context) {
     const { visible, cancel } = _closeModal(context);
-    const { goodsid, spotcontractid, hedgeplanid, deliverygoodsid, goodsgroupid, MiddleGoodsID } = props.selectedRow;
+    const { accountid, goodsid, spotcontractid, hedgeplanid, deliverygoodsid, goodsgroupid, MiddleGoodsID } = props.selectedRow;
     const { rules, formData } = handleForm();
     const formRef = ref();
     const loading = ref<boolean>(false);
 
+    // 现货合同期现配置信息
+    const contractMiddleGoodsCfg = ref<QueryErmcp3ContractMiddleGoodsCfgRsp>({
+      middlegoodspricedqty3: '0',
+      relatedmiddlegoodsqty: '0',
+      pendingpricedqty: '0',
+      covertqty: 0
+    });
     // 合约列表
     const goodsList = ref(getGoodsQuoteList());
     // 当前选中的商品合约
@@ -125,6 +145,10 @@ export default defineComponent({
     // 现货合同
     if (isSpotContract) {
       goodsList.value = goodsList.value.filter((e) => e.goodsgroupid === goodsgroupid);
+
+      queryErmcp3ContractMiddleGoodsCfg({ spotcontractid }).then((res) => {
+        contractMiddleGoodsCfg.value = res[0];
+      })
     }
 
     // 实时敞口
@@ -193,6 +217,20 @@ export default defineComponent({
       formData.OrderQty = enableqty;
     };
 
+    // 账号列表
+    const accountList = computed(() => {
+      if (isSpotContract) {
+        const tmpList = futuresAccountList.value.filter((e) => e.accountid === accountid);
+        if (tmpList.length) {
+          formData.AccountID = tmpList[0].accountid;
+        } else {
+          formData.AccountID = undefined;
+        }
+        return tmpList;
+      }
+      return futuresAccountList.value;
+    })
+
     // 持仓列表
     const positionList = computed(() => {
       if (selectedGoods.value) {
@@ -412,8 +450,9 @@ export default defineComponent({
       cancel,
       loading,
       visible,
-      futuresAccountList,
+      accountList,
       positionList,
+      contractMiddleGoodsCfg,
       rules,
       formRef,
       formData,

+ 1 - 0
src/views/market/futures/compoments/futures-trade/setup.ts

@@ -91,6 +91,7 @@ export function handleForm() {
     }
 
     const rules = {
+        AccountID: [{ required: true, type: 'number', message: '请选择账号' }],
         GoodsID: [{ required: true, type: 'number', message: '请选择合约' }],
         OrderPrice: [{ required: true, trigger: 'blur', type: 'number', validator: verifyOrderPrice, }],
         OrderQty: [{ required: true, trigger: 'blur', type: 'number', message: '请输入交易数量' }],