index.ts 17 KB

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