user-order.mt.schema.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import { z } from 'zod';
  2. // 用户创建订单DTO - 不包含userId字段,用户ID从认证信息中自动设置
  3. export const UserCreateOrderDto = z.object({
  4. orderNo: z.string().min(1, '订单号不能为空').max(50, '订单号最多50个字符').openapi({
  5. description: '订单号',
  6. example: 'ORD20240101123456'
  7. }),
  8. authCode: z.string().max(32, '付款码最多32个字符').nullable().optional().openapi({
  9. description: '付款码',
  10. example: '12345678901234567890123456789012'
  11. }),
  12. cardNo: z.string().max(32, '卡号最多32个字符').nullable().optional().openapi({
  13. description: '卡号',
  14. example: '6222********1234'
  15. }),
  16. sjtCardNo: z.string().max(32, '盛京通卡号最多32个字符').nullable().optional().openapi({
  17. description: '盛京通卡号',
  18. example: 'SJT1234567890'
  19. }),
  20. amount: z.coerce.number<number>().min(0, '订单金额不能小于0').max(999999.99, '订单金额不能超过999999.99').openapi({
  21. description: '订单金额',
  22. example: 99.99
  23. }),
  24. costAmount: z.coerce.number<number>().min(0, '成本金额不能小于0').max(999999.99, '成本金额不能超过999999.99').default(0).optional().openapi({
  25. description: '成本金额',
  26. example: 50.00
  27. }),
  28. freightAmount: z.coerce.number<number>().min(0, '运费不能小于0').max(999999.99, '运费不能超过999999.99').default(0).optional().openapi({
  29. description: '运费',
  30. example: 10.00
  31. }),
  32. discountAmount: z.coerce.number<number>().min(0, '优惠金额不能小于0').max(999999.99, '优惠金额不能超过999999.99').default(0).optional().openapi({
  33. description: '优惠金额',
  34. example: 5.00
  35. }),
  36. payAmount: z.coerce.number<number>().min(0, '实际支付金额不能小于0').max(999999.99, '实际支付金额不能超过999999.99').default(0).optional().openapi({
  37. description: '实际支付金额',
  38. example: 94.99
  39. }),
  40. deviceNo: z.string().max(255, '设备编号最多255个字符').nullable().optional().openapi({
  41. description: '设备编号',
  42. example: 'DEV001234'
  43. }),
  44. description: z.string().max(255, '订单描述最多255个字符').nullable().optional().openapi({
  45. description: '订单描述',
  46. example: '购买商品'
  47. }),
  48. goodsDetail: z.string().max(2000, '订单详情最多2000个字符').nullable().optional().openapi({
  49. description: '订单详情(json格式)',
  50. example: '[{"goodsId":1,"name":"商品1","price":99.99,"num":1}]'
  51. }),
  52. goodsTag: z.string().max(255, '订单优惠标记最多255个字符').nullable().optional().openapi({
  53. description: '订单优惠标记',
  54. example: '满100减5'
  55. }),
  56. address: z.string().max(255, '地址最多255个字符').nullable().optional().openapi({
  57. description: '地址',
  58. example: '北京市朝阳区xxx路xxx号'
  59. }),
  60. orderType: z.coerce.number().int().min(1, '订单类型最小为1').max(2, '订单类型最大为2').openapi({
  61. description: '订单类型 1实物订单 2虚拟订单',
  62. example: 1
  63. }),
  64. payType: z.coerce.number().int().min(0, '支付类型最小为0').max(2, '支付类型最大为2').openapi({
  65. description: '支付类型1积分2礼券',
  66. example: 1
  67. }),
  68. payState: z.coerce.number().int().min(0, '支付状态最小为0').max(5, '支付状态最大为5').openapi({
  69. description: '支付状态 0未支付1支付中2支付成功3已退款4支付失败5订单关闭',
  70. example: 0
  71. }),
  72. state: z.coerce.number().int().min(0, '订单状态最小为0').max(3, '订单状态最大为3').openapi({
  73. description: '订单状态 0未发货1已发货2收货成功3已退货',
  74. example: 0
  75. }),
  76. userPhone: z.string().max(50, '用户手机号最多50个字符').nullable().optional().openapi({
  77. description: '用户手机号',
  78. example: '13800138000'
  79. }),
  80. merchantId: z.coerce.number().int().positive('必须是正整数').openapi({
  81. description: '商户id',
  82. example: 1
  83. }),
  84. merchantNo: z.coerce.number().int().positive('必须是正整数').nullable().optional().openapi({
  85. description: '商户号',
  86. example: 1001
  87. }),
  88. supplierId: z.coerce.number().int().positive('必须是正整数').openapi({
  89. description: '供货商id',
  90. example: 1
  91. }),
  92. addressId: z.coerce.number().int().positive('必须是正整数').openapi({
  93. description: '地址id',
  94. example: 1
  95. }),
  96. receiverMobile: z.string().max(255, '收货人手机号最多255个字符').nullable().optional().openapi({
  97. description: '收货人手机号',
  98. example: '13800138000'
  99. }),
  100. recevierName: z.string().max(255, '收货人姓名最多255个字符').nullable().optional().openapi({
  101. description: '收货人姓名',
  102. example: '张三'
  103. }),
  104. recevierProvince: z.coerce.number().int().positive('必须是正整数').optional().openapi({
  105. description: '收货人所在省',
  106. example: 110000
  107. }),
  108. recevierCity: z.coerce.number().int().positive('必须是正整数').optional().openapi({
  109. description: '收货人所在市',
  110. example: 110100
  111. }),
  112. recevierDistrict: z.coerce.number().int().positive('必须是正整数').optional().openapi({
  113. description: '收货人所在区',
  114. example: 110105
  115. }),
  116. recevierTown: z.coerce.number().int().positive('必须是正整数').optional().openapi({
  117. description: '收货人所在街道',
  118. example: 110105001
  119. }),
  120. refundTime: z.coerce.date().nullable().optional().openapi({
  121. description: '退款时间',
  122. example: '2024-01-01T12:00:00Z'
  123. }),
  124. closeTime: z.coerce.date().nullable().optional().openapi({
  125. description: '订单关闭时间',
  126. example: '2024-01-01T12:00:00Z'
  127. }),
  128. remark: z.string().max(255, '管理员备注信息最多255个字符').nullable().optional().openapi({
  129. description: '管理员备注信息',
  130. example: '请尽快发货'
  131. })
  132. });
  133. // 用户更新订单DTO - 不包含userId字段
  134. export const UserUpdateOrderDto = UserCreateOrderDto.partial();