index.ts 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. import { reactive, ref, shallowRef, computed } from 'vue'
  2. import { v4 } from 'uuid'
  3. import { ClientType, EBuildType, EDelistingType, EListingSelectType, EOperateType, EOrderDirection, EOrderOperateType, EPriceMode, ETradeMode, EValidType, OrderSrc } from '@/constants/client'
  4. import { useLoginStore, useAccountStore, useUserStore } from '@/stores'
  5. import {
  6. spotPresaleDestingOrder,
  7. spotPresaleTransferCancel,
  8. spotPresaleTransferDesting,
  9. spotPresaleTransferListing,
  10. spotPresalePlayment,
  11. wrListingCancelOrder,
  12. spotPresaleDeliveryConfirm,
  13. wrOutApply,
  14. spotPresaleBreachOfContractApply,
  15. hdWROrder,
  16. hdWRDealOrder,
  17. thjProfitDrawApply,
  18. spotPresalePointPrice,
  19. cancelOrder,
  20. holderClose,
  21. order
  22. } from '@/services/api/trade'
  23. import { formatDate } from "@/filters";
  24. import Long from 'long'
  25. import { BuyOrSell } from '@/constants/order'
  26. const loginStore = useLoginStore()
  27. const accountStore = useAccountStore()
  28. const userStore = useUserStore()
  29. // 采购摘牌
  30. export function usePurchaseOrderDesting() {
  31. const loading = shallowRef(false)
  32. const formData = ref<Partial<Proto.SpotPresaleDestingOrderReq>>({
  33. UserID: loginStore.userId, // 用户ID,必填
  34. AccountID: accountStore.accountId, // 资金账号,必填
  35. ClientType: ClientType.Web, // 终端类型
  36. UpdatorID: loginStore.loginId, // 操作人,必填
  37. })
  38. const formSubmit = async () => {
  39. try {
  40. loading.value = true
  41. return await spotPresaleDestingOrder({
  42. data: {
  43. ...formData.value,
  44. Qty: Number(formData.value.Qty),
  45. ClientSerialNo: v4() // 客户端流水号
  46. }
  47. })
  48. } finally {
  49. loading.value = false
  50. }
  51. }
  52. return {
  53. loading,
  54. formData,
  55. formSubmit,
  56. }
  57. }
  58. // 铁合金现货预售交收确认
  59. export function useSpotPresaleDeliveryConfirm() {
  60. const loading = shallowRef(false)
  61. const confirmSubmit = async (id: string) => {
  62. try {
  63. loading.value = true
  64. return await spotPresaleDeliveryConfirm({
  65. data: {
  66. UserID: loginStore.userId,
  67. Remark: '',
  68. WRTradeDetailID: Long.fromString(id),
  69. ClientSerialNo: v4(),
  70. ClientType: ClientType.Web // 终端类型
  71. }
  72. })
  73. } finally {
  74. loading.value = false
  75. }
  76. }
  77. return {
  78. loading,
  79. confirmSubmit
  80. }
  81. }
  82. // 铁合金现货预售违约申请
  83. export function useSpotPresaleBreachOfContractApply() {
  84. const loading = shallowRef(false)
  85. const applySubmit = async (id: string) => {
  86. try {
  87. loading.value = true
  88. return await spotPresaleBreachOfContractApply({
  89. data: {
  90. UserID: loginStore.userId,
  91. WRTradeDetailID: Long.fromString(id),
  92. ClientSerialNo: v4(),
  93. ClientType: ClientType.Web // 终端类型
  94. }
  95. })
  96. } finally {
  97. loading.value = false
  98. }
  99. }
  100. return {
  101. loading,
  102. applySubmit,
  103. }
  104. }
  105. // 铁合金现货预售付款处理接口
  106. export function useSpotPresalePlayment() {
  107. const loading = shallowRef(false)
  108. const formData = reactive<Partial<Proto.SpotPresalePlaymentReq>>({
  109. UserID: loginStore.userId, // 用户ID,必填
  110. ClientType: ClientType.Web, // 终端类型
  111. ClientSerialNo: v4(), // 客户端流水号
  112. })
  113. const playmentSubmit = async (id: string) => {
  114. try {
  115. loading.value = true
  116. return await spotPresalePlayment({
  117. data: {
  118. ...formData,
  119. WRTradeDetailID: Long.fromString(id),
  120. }
  121. })
  122. } finally {
  123. loading.value = false
  124. }
  125. }
  126. return {
  127. loading,
  128. playmentSubmit
  129. }
  130. }
  131. // 铁合金现货预售转让挂牌接口
  132. export function useSpotPresaleTransferListing() {
  133. const loading = shallowRef(false)
  134. const formData = reactive<Partial<Proto.SpotPresaleTransferListingReq>>({
  135. UserID: loginStore.userId, // 用户ID,必填
  136. ClientType: ClientType.Web, // 终端类型
  137. ClientSerialNo: v4(), // 客户端流水号
  138. })
  139. const listingSubmit = async (id: string) => {
  140. try {
  141. loading.value = true
  142. /// 转让价格不能为0
  143. if (!formData.TransferPrice) {
  144. return Promise.reject('转让价格不能为0')
  145. }
  146. return await spotPresaleTransferListing({
  147. data: {
  148. ...formData,
  149. WRTradeDetailID: Long.fromString(id),
  150. }
  151. })
  152. } finally {
  153. loading.value = false
  154. }
  155. }
  156. return {
  157. loading,
  158. formData,
  159. listingSubmit
  160. }
  161. }
  162. // 铁合金现货预售转让撤销接口请求
  163. export function useSpotPresaleTransferCancel() {
  164. const loading = shallowRef(false)
  165. const transferCancelSubmit = async (wrtradedetailid?: string) => {
  166. try {
  167. loading.value = true
  168. return await spotPresaleTransferCancel({
  169. data: {
  170. UserID: loginStore.userId,
  171. WRTradeDetailID: Long.fromString(wrtradedetailid ?? '0'),
  172. ClientSerialNo: v4(),
  173. ClientType: ClientType.Web // 终端类型
  174. }
  175. })
  176. } finally {
  177. loading.value = false
  178. }
  179. }
  180. return {
  181. loading,
  182. transferCancelSubmit
  183. }
  184. }
  185. // 铁合金现货预售转让摘牌接口请求
  186. export function useSpotPresaleTransferDesting() {
  187. const loading = shallowRef(false)
  188. const formData = reactive<Proto.SpotPresaleTransferDestingReq>({
  189. UserID: loginStore.userId,
  190. AccountID: accountStore.accountId,
  191. TransferID: Long.fromNumber(0),
  192. ClientType: ClientType.Web // 终端类型
  193. })
  194. const destingSubmit = async () => {
  195. try {
  196. loading.value = true
  197. return await spotPresaleTransferDesting({
  198. data: {
  199. ...formData,
  200. ClientSerialNo: v4(), // 客户端流水号
  201. }
  202. })
  203. } finally {
  204. loading.value = false
  205. }
  206. }
  207. return {
  208. loading,
  209. formData,
  210. destingSubmit
  211. }
  212. }
  213. // 挂牌撤单请求接口
  214. export function useWrListingCancelOrder() {
  215. const loading = shallowRef(false)
  216. const cancelSubmit = async (id: string, buyorsell: number) => {
  217. try {
  218. loading.value = true
  219. return await wrListingCancelOrder({
  220. data: {
  221. UserID: loginStore.userId,
  222. AccountID: accountStore.accountId,
  223. OperatorID: loginStore.loginId,
  224. OrderSrc: OrderSrc.ORDERSRC_CLIENT,
  225. OldWRTradeOrderID: Long.fromString(id),
  226. ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
  227. ClientSerialNo: v4(),
  228. ClientType: ClientType.Web,
  229. BuyOrSell: buyorsell,
  230. }
  231. })
  232. } finally {
  233. loading.value = false
  234. }
  235. }
  236. return {
  237. loading,
  238. cancelSubmit
  239. }
  240. }
  241. // 仓单明细提货请求接口
  242. export function useWrOutInApply(holdlb: Model.HoldLBRsp) {
  243. const loading = shallowRef(false)
  244. const orderQty = shallowRef(0.0)
  245. const formData = reactive<Partial<Proto.WROutApplyReq>>({
  246. AppointmentRemark: '',
  247. UserID: loginStore.userId, // 用户ID,必填
  248. AccountID: accountStore.accountId, // 申请人账户ID
  249. CreatorID: loginStore.loginId, // 创建人ID
  250. WRStandardID: holdlb.wrstandardid,
  251. WarehouseID: holdlb.warehouseid,
  252. AppointmentModel: 1,
  253. ClientSerialID: new Date().getTime(), // 客户端流水号
  254. AppointmentDate: formatDate(new Date().toISOString(), 'YYYY-MM-DD'),
  255. })
  256. const applySubmit = async () => {
  257. try {
  258. loading.value = true
  259. return await wrOutApply({
  260. data: {
  261. ...formData,
  262. WROutInDetails: [{
  263. LadingBillID: holdlb.ladingbillid,
  264. SubNum: holdlb.subnum,
  265. Qty: orderQty.value,
  266. OutQty: orderQty.value,
  267. }]
  268. }
  269. })
  270. } finally {
  271. loading.value = false
  272. }
  273. }
  274. return {
  275. loading,
  276. formData,
  277. applySubmit,
  278. orderQty,
  279. }
  280. }
  281. // 仓单明细挂牌请求接口
  282. export function useHdWROrder() {
  283. const loading = shallowRef(false)
  284. const formData = reactive<Proto.HdWROrderReq>({
  285. IsSpecified: 0,
  286. PriceFactor: 1.0,
  287. FirstRatio: 0.0,
  288. CanBargain: 0,
  289. CanPart: 1,
  290. UserID: loginStore.userId,
  291. AccountID: accountStore.accountId,
  292. OperatorID: loginStore.loginId,
  293. ClientType: ClientType.Web,
  294. BuyOrSell: BuyOrSell.Sell,
  295. WRPriceType: 1,
  296. MarginFlag: 0,
  297. TimevalidType: 4,
  298. HasWr: 1,
  299. PerformanceTemplateID: -1,
  300. })
  301. const amount = computed(() => {
  302. const { OrderQty = 0, FixedPrice = 0 } = formData
  303. return (OrderQty * FixedPrice).toFixed(2)
  304. })
  305. const listingSubmit = async () => {
  306. try {
  307. loading.value = true
  308. const date = new Date().toISOString()
  309. return await hdWROrder({
  310. data: {
  311. ...formData,
  312. TradeDate: formatDate(date, 'YYYYMMDD'),
  313. ClientSerialNo: v4(),
  314. ClientOrderTime: formatDate(date),
  315. }
  316. })
  317. } finally {
  318. loading.value = false
  319. }
  320. }
  321. return {
  322. loading,
  323. formData,
  324. listingSubmit,
  325. amount
  326. }
  327. }
  328. // 仓单摘牌
  329. export function useHdWRDealOrder() {
  330. const loading = shallowRef(false)
  331. const formData = reactive<Proto.HdWRDealOrderReq>({
  332. UserID: loginStore.userId, // 用户ID
  333. AccountID: accountStore.accountId, // 资金账号
  334. RelatedWRTradeOrderID: '0', // 关联委托单号(摘牌委托关联挂牌委托单ID)
  335. WRTransferUserID: loginStore.userId, // 仓单受让用户
  336. OrderQty: 0, // 委托数量
  337. OrderSrc: OrderSrc.ORDERSRC_CLIENT, // 委托来源
  338. ClientSerialNo: '', // 客户端流水号
  339. ClientOrderTime: '', // 客户端委托时间
  340. ClientType: ClientType.Web, // 终端类型
  341. OperatorID: loginStore.loginId, // 操作员账号ID
  342. TradeDate: '', // 交易日
  343. HasWr: 1, // 是否有仓单-0:没有仓单1:有仓单
  344. IsFinancing: 0, // 是否融资购买(买摘牌时有效)-0:否1:是
  345. })
  346. const formSubmit = async () => {
  347. try {
  348. loading.value = true
  349. const date = new Date().toISOString()
  350. return await hdWRDealOrder({
  351. data: {
  352. ...formData,
  353. TradeDate: formatDate(date, 'YYYYMMDD'),
  354. ClientSerialNo: v4(),
  355. ClientOrderTime: formatDate(date),
  356. }
  357. })
  358. } finally {
  359. loading.value = false
  360. }
  361. }
  362. return {
  363. loading,
  364. formData,
  365. formSubmit,
  366. }
  367. }
  368. // 铁合金收益支取申请接口
  369. export function useTHJProfitDrawApplyReq() {
  370. const loading = shallowRef(false)
  371. const formData = reactive<Proto.THJProfitDrawApplyReq>({
  372. UserID: loginStore.userId, // 用户ID
  373. ApplySrc: ClientType.Web,
  374. ApplyerID: loginStore.loginId,
  375. ClientType: ClientType.Web
  376. })
  377. const onSubmit = async (drawMonth: string, amount: number) => {
  378. try {
  379. loading.value = true
  380. return await thjProfitDrawApply({
  381. data: {
  382. ...formData,
  383. DrawMonth: formatDate(drawMonth, 'YYYYMM'),
  384. DrawAmount: amount,
  385. ClientSerialNo: v4(),
  386. }
  387. })
  388. } finally {
  389. loading.value = false
  390. }
  391. }
  392. return {
  393. loading,
  394. formData,
  395. onSubmit,
  396. }
  397. }
  398. // 铁合金预售点价
  399. export function useSpotPresalePointPrice(WRTradeDetailID = '0') {
  400. const loading = shallowRef(false)
  401. const formData = reactive<Proto.SpotPresalePointPriceReq>({
  402. UserID: loginStore.userId, // 用户ID,必填
  403. WRTradeDetailID: Long.fromString(WRTradeDetailID), // 预售成交明细ID
  404. ClientType: ClientType.Web, // 终端类型
  405. ClientSerialNo: '' // 客户端流水号
  406. })
  407. const formSubmit = async () => {
  408. try {
  409. loading.value = true
  410. return await spotPresalePointPrice({
  411. data: {
  412. ...formData,
  413. ClientSerialNo: v4(),
  414. }
  415. })
  416. } finally {
  417. loading.value = false
  418. }
  419. }
  420. return {
  421. loading,
  422. formData,
  423. formSubmit,
  424. }
  425. }
  426. // 撤单请求接口
  427. export function useCancelOrder() {
  428. const loading = shallowRef(false)
  429. const cancelSubmit = async (orderid: string, marketid: number) => {
  430. /// 参数信息
  431. const params = {
  432. OperatorID: loginStore.loginId,
  433. OrderSrc: OrderSrc.ORDERSRC_CLIENT,
  434. AccountID: accountStore.accountId,
  435. ClientSerialNo: v4(),
  436. ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
  437. ClientType: ClientType.Web,
  438. OperateType: EOperateType.OPERATETYPE_ORDERCANCEL,
  439. }
  440. try {
  441. loading.value = true
  442. return await cancelOrder({
  443. data: {
  444. ...params,
  445. OldOrderId: orderid
  446. }
  447. }, marketid)
  448. } finally {
  449. loading.value = false
  450. }
  451. }
  452. return {
  453. loading,
  454. cancelSubmit
  455. }
  456. }
  457. // 按单平仓
  458. export function useHolderClose() {
  459. const loading = shallowRef(false)
  460. /// 参数信息
  461. const params = {
  462. ClientSerialNo: v4(),
  463. ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
  464. ClientType: ClientType.Web,
  465. LoginID: loginStore.loginId,
  466. AccountID: accountStore.accountId,
  467. OrderSrc: OrderSrc.ORDERSRC_CLIENT,
  468. OperatorID: loginStore.loginId,
  469. }
  470. const holderCloseSubmit = async (tradeid: string, goodsid: number, buyOrSell: number, marketid: number) => {
  471. try {
  472. loading.value = true
  473. return await holderClose({
  474. data: {
  475. TradeID: tradeid,
  476. GoodsID: goodsid,
  477. BuyOrSell: buyOrSell,
  478. MarketID: marketid,
  479. ...params
  480. }
  481. })
  482. } finally {
  483. loading.value = false
  484. }
  485. }
  486. return {
  487. loading,
  488. holderCloseSubmit
  489. }
  490. }
  491. // 掉期商品摘牌请求
  492. export function useDelisting() {
  493. const loading = shallowRef(false)
  494. const onSubmit = async (goodsid: number, marketid: number, buyOrSell: EOrderDirection, orderid: string, priceMode: EPriceMode, orderPrice: number, maxSub: number, orderQty: number) => {
  495. try {
  496. loading.value = true
  497. return await order({
  498. data: {
  499. ClientSerialNo: v4(),
  500. ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
  501. ClientType: ClientType.Web,
  502. LoginID: loginStore.loginId,
  503. AccountID: accountStore.accountId,
  504. GoodsID: goodsid,
  505. MarketID: marketid,
  506. ValidType: EValidType.VALIDTYPE_DR,
  507. OperateType: EOrderOperateType.ORDEROPERATETYPE_NORMAL,
  508. OrderSrc: OrderSrc.ORDERSRC_CLIENT,
  509. OperatorID: loginStore.loginId,
  510. ListingSelectType: EListingSelectType.LISTINGSELECTTYPE_DELISTING,
  511. DelistingType: EDelistingType.DELISTINGTYPE_SELECTED,
  512. BuyOrSell: buyOrSell === EOrderDirection.BUY ? EOrderDirection.SELL : EOrderDirection.BUY,
  513. BuildType: EBuildType.BUILDTYPE_OPEN,
  514. TimevalidType: 1,
  515. MarketMaxSub: 0.0,
  516. ServiceTime: '',
  517. ValidTime: '',
  518. OrderFlag: 1,
  519. RelatedID: orderid,
  520. PriceMode: priceMode,
  521. CurtQuotePrice: 0.0,
  522. OrderPrice: priceMode === EPriceMode.PRICEMODE_LIMIT ? orderPrice : maxSub,
  523. OrderQty: orderQty,
  524. }
  525. })
  526. } finally {
  527. loading.value = false
  528. }
  529. }
  530. return {
  531. loading,
  532. onSubmit
  533. }
  534. }
  535. // 掉期商品挂牌请求
  536. export function useListing() {
  537. const loading = shallowRef(false)
  538. const onSubmit = async (goodsid: number, buyOrSell: number, orderid: string, priceMode: EPriceMode, orderPrice: number, maxSub: number, orderQty: number) => {
  539. try {
  540. loading.value = true
  541. return await order({
  542. data: {
  543. ClientSerialNo: v4(),
  544. ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
  545. ClientType: ClientType.Web,
  546. LoginID: loginStore.loginId,
  547. AccountID: accountStore.accountId,
  548. GoodsID: goodsid,
  549. MarketID: userStore.getMarketId('TRADEMODE_TJMD'),
  550. ValidType: EValidType.VALIDTYPE_DR,
  551. OperateType: EOrderOperateType.ORDEROPERATETYPE_NORMAL,
  552. OrderSrc: OrderSrc.ORDERSRC_CLIENT,
  553. OperatorID: loginStore.loginId,
  554. ListingSelectType: EListingSelectType.LISTINGSELECTTYPE_LISTING,
  555. DelistingType: EDelistingType.DELISTINGTYPE_SELECTED,
  556. BuyOrSell: buyOrSell === 0 ? EOrderDirection.SELL : EOrderDirection.BUY,
  557. BuildType: EBuildType.BUILDTYPE_OPEN,
  558. TimevalidType: 1,
  559. MarketMaxSub: priceMode === EPriceMode.PRICEMODE_LIMIT ? 0.0 : maxSub,
  560. ServiceTime: '',
  561. ValidTime: '',
  562. OrderFlag: 1,
  563. RelatedID: orderid,
  564. PriceMode: priceMode,
  565. CurtQuotePrice: 0.0,
  566. OrderPrice: priceMode === EPriceMode.PRICEMODE_LIMIT ? orderPrice : 0.0,
  567. OrderQty: orderQty,
  568. }
  569. })
  570. } finally {
  571. loading.value = false
  572. }
  573. }
  574. return {
  575. loading,
  576. onSubmit
  577. }
  578. }