index.ts 16 KB

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