Handy_Cao 3 jaren geleden
bovenliggende
commit
d688f64a8c

+ 55 - 0
public/proto/thj.proto

@@ -794,4 +794,59 @@ message HdWRDealOrderRsp {
 	optional double FreezeAmount = 8; // 冻结货款
 	optional string OrderTime = 9; // 接收委托交易的时间
 	optional string ClientSerialNo = 10; // 客户端流水号
+}
+
+// 铁合金现货预售转让挂牌接口请求
+message SpotPresaleTransferListingReq {
+	optional MessageHead Header = 1;
+	optional uint32 UserID = 2; // 用户ID,必填
+	optional uint64 WRTradeDetailID = 3; // 采购成交单ID,必填
+	optional double TransferPrice = 4; // 转让价格,必填
+	optional uint32 ClientType = 5; // 终端类型
+	optional string ClientSerialNo = 6; // 客户端流水号
+}
+// 铁合金现货预售转让挂牌接口响应
+message SpotPresaleTransferListingRsp {
+	optional MessageHead Header = 1; // 消息头
+	optional int32 RetCode = 2; // 返回码
+	optional string RetDesc = 3; // 描述信息
+	optional uint32 UserID = 4; // 用户ID,必填
+	optional uint64 TransferID = 5; // 协议转让ID
+	optional uint64 WRTradeDetailID = 6; // 采购成交单ID
+	optional string ClientSerialNo = 7; // 客户端流水号
+}
+// 铁合金现货预售转让撤销接口请求
+message SpotPresaleTransferCancelReq {
+	optional MessageHead Header = 1;
+	optional uint32 UserID = 2; // 用户ID,必填
+	optional uint64 WRTradeDetailID = 3; // 采购成交单ID,必填
+	optional uint32 ClientType = 4; // 终端类型
+	optional string ClientSerialNo = 5; // 客户端流水号
+}
+// 铁合金现货预售转让撤销接口响应
+message SpotPresaleTransferCancelRsp {
+	optional MessageHead Header = 1; // 消息头
+	optional int32 RetCode = 2; // 返回码
+	optional string RetDesc = 3; // 描述信息
+	optional uint64 TransferID = 4; // 协议转让ID
+	optional uint64 WRTradeDetailID = 5; // 采购成交单ID
+	optional string ClientSerialNo = 6; // 客户端流水号
+}
+// 铁合金现货预售转让摘牌接口请求
+message SpotPresaleTransferDestingReq {
+	optional MessageHead Header = 1;
+	optional uint32 UserID = 2; // 用户ID,必填
+	optional uint64 AccountID = 3; // 摘牌资金账户ID,必填
+	optional uint64 TransferID = 4; // 协议转让ID
+	optional uint32 ClientType = 5; // 终端类型
+	optional string ClientSerialNo = 6; // 客户端流水号
+}
+// 铁合金现货预售转让摘牌接口响应
+message SpotPresaleTransferDestingRsp {
+	optional MessageHead Header = 1; // 消息头
+	optional int32 RetCode = 2; // 返回码
+	optional string RetDesc = 3; // 描述信息
+	optional uint32 UserID = 4; // 用户ID
+	optional uint64 TransferID = 5; // 协议转让ID
+	optional string ClientSerialNo = 6; // 客户端流水号
 }

+ 204 - 52
src/business/trade/index.ts

@@ -2,7 +2,7 @@ import { ref, shallowRef } from 'vue'
 import { v4 } from 'uuid'
 import { ClientType, OrderSrc } from '@/constants/client'
 import { useLoginStore } from '@/stores'
-import { spotPresaleDestingOrder, spotPresalePlayment, wrListingCancelOrder, spotPresaleDeliveryConfirm, spotPresaleBreachOfContractConfirm, spotPresaleBreachOfContractApply } from '@/services/api/trade'
+import { spotPresaleDestingOrder, spotPresaleTransferCancel, spotPresaleTransferDesting, spotPresaleTransferListing, spotPresalePlayment, wrListingCancelOrder, spotPresaleDeliveryConfirm, spotPresaleBreachOfContractConfirm, spotPresaleBreachOfContractApply } from '@/services/api/trade'
 import { formatDate } from "@/filters";
 import { useNavigation } from '@/hooks/navigation'
 import Long from 'long'
@@ -44,104 +44,256 @@ export function useSpotPresaleDeliveryConfirm() {
     const { getUserId } = useLoginStore()
     const loading = shallowRef(false)
 
-    const confirmSubmit = (id: number) => {
-        loading.value = true
-        return spotPresaleDeliveryConfirm({
-            data: {
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const confirmSubmit = () => {
+        const param = detail.value
+
+        if (param) {
+            loading.value = true
+            const data: Partial<Proto.SpotPresaleDeliveryConfirmReq>={
                 UserID: getUserId(),
                 Remark: '',
-                ClientType: ClientType.Web, // 终端类型
-                WRTradeDetailID: id,
-                ClientSerialNo: v4() // 客户端流水号
-            },
-            complete: () => {
-                loading.value = false
+                WRTradeDetailID: Long.fromNumber(param.wrtradedetailid),
+                ClientSerialNo: v4(), // 客户端流水号
+                ClientType: ClientType.Web // 终端类型
             }
-        })
+            return spotPresaleDeliveryConfirm({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        return Promise.reject('预售交收申请失败')
     }
 
     return {
         loading,
         confirmSubmit,
+        detail
     }
 }
 
-// 铁合金现货预售违约确认
-export function useSpotPresaleBreachOfContractConfirm() {
+// 铁合金现货预售违约申请
+export function useSpotPresaleBreachOfContractApply() {
     const loading = shallowRef(false)
+    const { getUserId } = useLoginStore()
 
-    const breachSubmit = (buyAmount: number, exchangeAmount: number, id: number ) => {
-        loading.value = true
-        return spotPresaleBreachOfContractConfirm({
-            data: {
-                HandleRemark: '',
-                WRTradeDetailID: id,
-                BuyAmount: buyAmount,
-                ExchangeAmount: exchangeAmount,
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const applySubmit = () => {
+        const param = detail.value
+
+        if (param) {
+            loading.value = true
+            const data: Partial<Proto.SpotPresaleBreachOfContractApplyReq>={
+                UserID: getUserId(),
+                WRTradeDetailID: Long.fromNumber(param.wrtradedetailid),
                 ClientSerialNo: v4(), // 客户端流水号
                 ClientType: ClientType.Web // 终端类型
-            },
-            complete: () => {
-                loading.value = false
             }
-        })
+            return spotPresaleBreachOfContractApply({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        return Promise.reject('违约申请失败')
     }
 
     return {
         loading,
-        breachSubmit,
+        applySubmit,
+        detail
     }
 }
 
-// 铁合金现货预售违约确认
-export function useSpotPresaleBreachOfContractApply() {
+// 铁合金现货预售付款处理接口
+export function useSpotPresalePlayment() {
     const loading = shallowRef(false)
     const { getUserId } = useLoginStore()
 
-    const applySubmit = (id: number ) => {
-        loading.value = true
-        return spotPresaleBreachOfContractApply({
-            data: {
+    const formData = ref<Partial<Proto.SpotPresalePlaymentReq>>({
+        UserID: getUserId(), // 用户ID,必填
+        ClientType: ClientType.Web, // 终端类型
+        ClientSerialNo: v4(), // 客户端流水号
+    })
+
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const playmentSubmit = () => {
+        const param = detail.value
+        
+        if (param) {
+            loading.value = true
+            const data: Partial<Proto.SpotPresaleTransferListingReq>={
+                ...formData,
+                WRTradeDetailID: Long.fromNumber(param.wrtradedetailid),
+            }
+            return spotPresalePlayment({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        return Promise.reject('付款失败')
+    }
+
+    return {
+        loading,
+        playmentSubmit,
+        detail
+    }
+}
+
+// 铁合金现货预售转让挂牌接口
+export function useSpotPresaleTransferListing() {
+    const loading = shallowRef(false)
+    const { getUserId } = useLoginStore()
+
+    const formData = ref<Partial<Proto.SpotPresaleTransferListingReq>>({
+        UserID: getUserId(), // 用户ID,必填
+        ClientType: ClientType.Web, // 终端类型
+        ClientSerialNo: v4(), // 客户端流水号
+    })
+
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const listingSubmit = () => {
+        const param = detail.value
+        if (param) {
+            loading.value = true
+            const data:Partial<Proto.SpotPresaleTransferListingReq>={
+                ...formData,
+                WRTradeDetailID: Long.fromNumber(param.wrtradedetailid),
+            }
+
+            return spotPresaleTransferListing({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        return Promise.reject('预售转让失败')
+    }
+
+    return {
+        loading,
+        formData,
+        listingSubmit,
+        detail
+    }
+}
+
+// 铁合金现货预售转让撤销接口请求
+export function useSpotPresaleTransferCancel() {
+    const loading = shallowRef(false)
+    const { getUserId } = useLoginStore()
+
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const transferCancelSubmit = () => {
+        const param = detail.value
+        if (param) {
+            loading.value = true
+            const data: Partial<Proto.SpotPresaleTransferCancelReq>={
                 UserID: getUserId(),
-                WRTradeDetailID: id,
+                WRTradeDetailID: Long.fromNumber(param.wrtradedetailid),
                 ClientSerialNo: v4(), // 客户端流水号
                 ClientType: ClientType.Web // 终端类型
-            },
-            complete: () => {
-                loading.value = false
             }
-        })
+
+            return spotPresaleTransferCancel({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        Promise.reject('转让撤销失败')
     }
 
     return {
         loading,
-        applySubmit,
+        transferCancelSubmit,
+        detail
     }
 }
 
-// 铁合金现货预售付款处理接口
-export function useSpotPresalePlayment() {
+// 铁合金现货预售转让摘牌接口请求
+export function useSpotPresaleTransferDesting() {
     const loading = shallowRef(false)
-    const { getUserId } = useLoginStore()
+    const { getUserId , getFirstAccountId} = useLoginStore()
 
-    const playmentSubmit = (id: number ) => {
-        loading.value = true
-        return spotPresalePlayment({
-            data: {
+    const { route } = useNavigation()
+    const item = route.params.item
+    const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+
+    if (item) {
+        detail.value = JSON.parse(item.toString())
+    }
+
+    const destingSubmit = () => {
+        const param = detail.value
+        if (param) {
+            loading.value = true
+            const data: Partial<Proto.SpotPresaleTransferDestingReq>={
                 UserID: getUserId(),
-                WRTradeDetailID: id,
+                AccountID: getFirstAccountId(),
+                TransferID: Long.fromNumber(param.wrtradedetailid),
                 ClientSerialNo: v4(), // 客户端流水号
                 ClientType: ClientType.Web // 终端类型
-            },
-            complete: () => {
-                loading.value = false
             }
-        })
+
+            return spotPresaleTransferDesting({
+                data,
+                complete: () => {
+                    loading.value = false
+                }
+            })
+        }
+        
+        return Promise.reject('预售转让失败')
     }
 
     return {
         loading,
-        playmentSubmit,
+        destingSubmit,
+        detail
     }
 }
 

+ 6 - 0
src/constants/funcode.ts

@@ -73,4 +73,10 @@ export enum FunCode {
     HdWROrderRsp = 1441808,                           /// 持仓单挂牌应答
     HdWRDealOrderReq = 1441809,                       /// 持仓单摘牌请求
     HdWRDealOrderRsp = 1441810,                       /// 持仓单摘牌应答
+    SpotPresaleTransferListingReq = 1441859,          /// 铁合金现货预售转让挂牌接口请求(0, 22, 67)
+	SpotPresaleTransferListingRsp = 1441860,          /// 铁合金现货预售转让挂牌接口响应(0, 22, 68)
+	SpotPresaleTransferCancelReq = 1441867,           /// 铁合金现货预售转让撤销接口请求(0, 22, 75)
+	SpotPresaleTransferCancelRsp = 1441868,           /// 铁合金现货预售转让撤销接口响应(0, 22, 76)
+	SpotPresaleTransferDestingReq = 1441869,          /// 铁合金现货预售转让摘牌接口请求(0, 22, 77)
+	SpotPresaleTransferDestingRsp = 1441870,          /// 铁合金现货预售转让摘牌接口响应(0, 22, 78)
 } 

+ 68 - 16
src/packages/mobile/views/mine/order/detail/purchasetrade/index.vue

@@ -5,7 +5,7 @@
         </template>
         <div v-if="detail" class="order-detail__container g-form__container">
             <CellGroup title="采购信息">
-                <Cell title="商品" :value="detail.wrstandardname" />
+                <Cell title="商品" :value="detail.warehousename" />
                 <Cell title="仓库" :value="detail.warehousename" />
                 <Cell title="预售价" :value="detail.tradeprice" />
                 <Cell title="数量" :value="detail.tradeqty" />
@@ -31,8 +31,8 @@
         </div>
         <template #footer>
             <div class="g-form__footer" v-if="detail">
-                <!-- <Button block round type="primary" v-if="detail.orderstatus === 1">合同转让</Button>
-                <Button block round type="primary" v-if="detail.orderstatus === 8">转让撤销</Button> -->
+                <Button block round type="primary" v-if="detail.orderstatus === 1" @click="showDialog">合同转让</Button>
+                <Button block round type="primary" v-if="detail.orderstatus === 8" @click="spotCancelSubmit">转让撤销</Button>
                 <Button block round type="primary" v-if="detail.orderstatus === 5"
                     @click="spotConfirmSubmit">确认交收</Button>
                 <Button block round type="primary" v-if="detail.orderstatus === 3" @click="spotApplySubmit">违约</Button>
@@ -40,6 +40,11 @@
                     @click="spotPlaymentSubmit">支付</Button>
             </div>
         </template>
+
+        <!-- 转让价格 -->
+        <van-dialog v-model:show="show" title="合同转让" show-cancel-button @confirm="spotListingSubmit" @cancel="cancelDialog">
+            <Field label="转让价格:" v-model="formData.TransferPrice" placeholder="请输入转让价格" type="digit"></Field>
+        </van-dialog>
     </app-view>
 </template>
 
@@ -47,21 +52,21 @@
 import { shallowRef } from 'vue'
 import { useNavigation } from '@/hooks/navigation'
 import { fullloading, dialog } from '@/utils/vant'
-import { CellGroup, Cell, Empty, Button, Toast } from 'vant'
+import { CellGroup, Cell, Empty, Button, Toast, Dialog, Field } from 'vant'
 import { formatDate, getUrl } from '@/filters'
-import { useSpotPresaleDeliveryConfirm, useSpotPresaleBreachOfContractApply, useSpotPresalePlayment } from "@/business/trade";
+import { useSpotPresaleDeliveryConfirm, useSpotPresaleBreachOfContractApply, useSpotPresaleTransferCancel, useSpotPresaleTransferListing, useSpotPresalePlayment } from "@/business/trade";
+
+const vanDialog=Dialog.Component
 
-const { route, router } = useNavigation()
-const item = route.params.item
-const detail = shallowRef<Model.THJPurchaseTradeDetailRsp>()
+const { router } = useNavigation()
+/// 是否显示dialog
+const show = shallowRef(true)
 
-const { confirmSubmit } = useSpotPresaleDeliveryConfirm()
+const { confirmSubmit, detail } = useSpotPresaleDeliveryConfirm()
 const { applySubmit } = useSpotPresaleBreachOfContractApply()
 const { playmentSubmit } = useSpotPresalePlayment()
-
-if (item) {
-    detail.value = JSON.parse(item.toString())
-}
+const { transferCancelSubmit } = useSpotPresaleTransferCancel()
+const { listingSubmit, formData } = useSpotPresaleTransferListing()
 
 // 打开pdf文件
 const openPDF = (file?: string) => {
@@ -76,7 +81,7 @@ const spotConfirmSubmit = () => {
         showCancelButton: true
     }).then(() => {
         fullloading((hideLoading) => {
-            confirmSubmit(detail.value?.wrtradedetailid ?? 0).then(() => {
+            confirmSubmit().then(() => {
                 hideLoading()
                 dialog('确认交收提交成功,请耐心等待审核。').then(() => {
                     router.back()
@@ -88,12 +93,13 @@ const spotConfirmSubmit = () => {
     })
 }
 
+/// 违约申请
 const spotApplySubmit = () => {
     dialog('确认要违约吗?', {
         showCancelButton: true
     }).then(() => {
         fullloading((hideLoading) => {
-            applySubmit(detail.value?.wrtradedetailid ?? 0).then(() => {
+            applySubmit().then(() => {
                 hideLoading()
                 dialog('违约提交成功,请耐心等待审核。').then(() => {
                     router.back()
@@ -105,12 +111,13 @@ const spotApplySubmit = () => {
     })
 }
 
+/// 支付申请
 const spotPlaymentSubmit = () => {
     dialog('确认要付款吗?', {
         showCancelButton: true
     }).then(() => {
         fullloading((hideLoading) => {
-            playmentSubmit(detail.value?.wrtradedetailid ?? 0).then(() => {
+            playmentSubmit().then(() => {
                 hideLoading()
                 dialog('付款提交成功,请耐心等待审核。').then(() => {
                     router.back()
@@ -121,6 +128,51 @@ const spotPlaymentSubmit = () => {
         })
     })
 }
+
+///合同转让申请
+const spotListingSubmit = () => {
+    dialog('确认要转让撤销吗?', {
+        showCancelButton: true
+    }).then(() => {
+        fullloading((hideLoading) => {
+            listingSubmit().then(() => {
+                hideLoading()
+                dialog('合同转让提交成功,请耐心等待审核。').then(() => {
+                    router.back()
+                })
+            }).catch((err) => {
+                Toast.fail(err)
+            })
+        })
+    })
+}
+
+/// 转让撤销申请
+const spotCancelSubmit = () => {
+    dialog('确认要转让撤销吗?', {
+        showCancelButton: true
+    }).then(() => {
+        fullloading((hideLoading) => {
+            transferCancelSubmit().then(() => {
+                hideLoading()
+                dialog('转让撤销提交成功,请耐心等待审核。').then(() => {
+                    router.back()
+                })
+            }).catch((err) => {
+                Toast.fail(err)
+            })
+        })
+    })
+}
+
+/// 是否显示Dialog
+const showDialog = () => {
+    show.value = !show.value
+}
+
+const cancelDialog = () => {
+    show.value = false
+}
 </script>
 
 <style lang="less">

+ 24 - 3
src/services/api/trade/index.ts

@@ -47,20 +47,41 @@ export function spotPresaleBreachOfContractConfirm(params: TradeParams<Proto.Spo
 /**
  * 仓单出库申请
  */
- export function wrOutApplyReq(params: TradeParams<Proto.WROutApplyReq, Proto.WROutApplyRsp>) {
+ export function wrOutApply(params: TradeParams<Proto.WROutApplyReq, Proto.WROutApplyRsp>) {
     return tradeServerRequest('WROutApplyReq', 'WROutApplyRsp', params);
 }
 
 /**
  * 持仓单挂牌请求
  */
- export function hdWROrderReq(params: TradeParams<Proto.HdWROrderReq, Proto.HdWROrderRsp>) {
+ export function hdWROrder(params: TradeParams<Proto.HdWROrderReq, Proto.HdWROrderRsp>) {
     return tradeServerRequest('HdWROrderReq', 'HdWROrderRsp', params);
 }
 
 /**
  * 持仓单摘牌请求
  */
- export function hdWRDealOrderReq(params: TradeParams<Proto.HdWRDealOrderReq, Proto.HdWRDealOrderRsp>) {
+ export function hdWRDealOrder(params: TradeParams<Proto.HdWRDealOrderReq, Proto.HdWRDealOrderRsp>) {
     return tradeServerRequest('HdWRDealOrderReq', 'HdWRDealOrderRsp', params);
+}
+
+/**
+ * 铁合金现货预售转让挂牌接口请求
+ */
+ export function spotPresaleTransferListing(params: TradeParams<Proto.SpotPresaleTransferListingReq, Proto.SpotPresaleTransferListingRsp>) {
+    return tradeServerRequest('SpotPresaleTransferListingReq', 'SpotPresaleTransferListingRsp', params);
+}
+
+/**
+ * 铁合金现货预售转让撤销接口请求
+ */
+ export function spotPresaleTransferCancel(params: TradeParams<Proto.SpotPresaleTransferCancelReq, Proto.SpotPresaleTransferCancelRsp>) {
+    return tradeServerRequest('SpotPresaleTransferCancelReq', 'SpotPresaleTransferCancelRsp', params);
+}
+
+/**
+ * 铁合金现货预售转让摘牌接口请求
+ */
+ export function spotPresaleTransferDesting(params: TradeParams<Proto.SpotPresaleTransferDestingReq, Proto.SpotPresaleTransferDestingRsp>) {
+    return tradeServerRequest('SpotPresaleTransferDestingReq', 'SpotPresaleTransferDestingRsp', params);
 }

+ 73 - 14
src/types/proto/trade.d.ts

@@ -1,5 +1,4 @@
 import { IMessageHead } from '@/services/socket/trade/protobuf/proto'
-import { number } from 'echarts';
 import Long from 'long'
 
 declare global {
@@ -34,11 +33,11 @@ declare global {
         /** 铁合金现货预售交收确认接口请求 */
         interface SpotPresaleDeliveryConfirmReq {
             Header?: IMessageHead;
-            UserID: number; // 用户ID,必填
-            WRTradeDetailID: number; // 采购成交单ID,必填
-            Remark: string; // 备注
-            ClientType: number; // 终端类型
-            ClientSerialNo: string; // 客户端流水号
+            UserID?: number; // 用户ID,必填
+            WRTradeDetailID?: Long; // 采购成交单ID,必填
+            Remark?: string; // 备注
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
         }
 
         /** 铁合金现货预售交收确认接口应答 */
@@ -75,10 +74,10 @@ declare global {
         // 铁合金现货预售违约申请接口请求
         interface SpotPresaleBreachOfContractApplyReq {
             Header?: IMessageHead;
-            UserID: number; // 用户ID,必填
-            WRTradeDetailID: number; // 采购成交单ID,必填
-            ClientType: number; // 终端类型
-            ClientSerialNo: string; // 客户端流水号
+            UserID?: number; // 用户ID,必填
+            WRTradeDetailID?: Long; // 采购成交单ID,必填
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
         }
 
         // 铁合金现货预售违约申请接口应答
@@ -94,10 +93,10 @@ declare global {
         // 铁合金现货预售付款处理接口请求
         interface SpotPresalePlaymentReq {
             Header?: IMessageHead;
-            UserID: number; // 用户ID,必填
-            WRTradeDetailID: number; // 采购成交单ID,必填
-            ClientType: number; // 终端类型
-            ClientSerialNo: string; // 客户端流水号
+            UserID?: number; // 用户ID,必填
+            WRTradeDetailID?: Long; // 采购成交单ID,必填
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
 }
         // 铁合金现货预售付款处理接口应答
         interface SpotPresalePlaymentRsp {
@@ -290,5 +289,65 @@ declare global {
             OrderTime: string; // 接收委托交易的时间
             ClientSerialNo: string; // 客户端流水号
         }
+
+        // 铁合金现货预售转让挂牌接口请求
+        interface SpotPresaleTransferListingReq {
+            Header?: IMessageHead; // 消息头
+            UserID?: number; // 用户ID,必填
+            WRTradeDetailID?: Long; // 采购成交单ID,必填
+            TransferPrice?: number; // 转让价格,必填
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
+        }
+
+        // 铁合金现货预售转让挂牌接口响应
+        interface SpotPresaleTransferListingRsp {
+            Header?: IMessageHead; // 消息头
+            RetCode: number; // 返回码
+            RetDesc: string; // 描述信息
+            UserID: number; // 用户ID,必填
+            TransferID: number; // 协议转让ID
+            WRTradeDetailID: number; // 采购成交单ID
+            ClientSerialNo: string; // 客户端流水号
+        }
+
+        // 铁合金现货预售转让撤销接口请求
+        interface SpotPresaleTransferCancelReq {
+            Header?: IMessageHead; // 消息头
+            UserID?: number; // 用户ID,必填
+            WRTradeDetailID?: Long; // 采购成交单ID,必填
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
+        }
+
+        // 铁合金现货预售转让撤销接口响应
+        interface SpotPresaleTransferCancelRsp {
+            Header?: IMessageHead; // 消息头
+            RetCode: number; // 返回码
+            RetDesc: string; // 描述信息
+            TransferID: number; // 协议转让ID
+            WRTradeDetailID: number; // 采购成交单ID
+            ClientSerialNo: string; // 客户端流水号
+        }
+
+        // 铁合金现货预售转让摘牌接口请求
+        interface SpotPresaleTransferDestingReq {
+            Header?: IMessageHead; // 消息头
+            UserID?: number; // 用户ID,必填
+            AccountID?: number; // 摘牌资金账户ID,必填
+            TransferID?: Long; // 协议转让ID
+            ClientType?: number; // 终端类型
+            ClientSerialNo?: string; // 客户端流水号
+        }
+
+        // 铁合金现货预售转让摘牌接口响应
+        interface SpotPresaleTransferDestingRsp {
+            Header?: IMessageHead; // 消息头
+            RetCode: number; // 返回码
+            RetDesc: string; // 描述信息
+            UserID: number; // 用户ID
+            TransferID: number; // 协议转让ID
+            ClientSerialNo: string; // 客户端流水号
+        }
     }
 }