OrderRouter.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package router
  2. import (
  3. "demo/data/dao"
  4. "demo/data/dao/manage"
  5. "demo/data/domain"
  6. "demo/data/domain/vo"
  7. "demo/share"
  8. "fmt"
  9. "github.com/gin-gonic/gin"
  10. "github.com/spf13/cast"
  11. "time"
  12. )
  13. func OrderRouter(engine *gin.RouterGroup) {
  14. order := engine.Group("/order")
  15. {
  16. //根据用户登录id获取用户登录信息
  17. //order.POST("/submit", GetOrderData)
  18. PushRouter(order, "POST", "/submit", CreateOrder)
  19. PushRouter(order, "POST", "/list", GetOrderList)
  20. }
  21. }
  22. // CreateOrder GetOrderData 创建订单
  23. func CreateOrder(c *gin.Context) {
  24. id := GetUserIdByToken(c)
  25. if id == 0 {
  26. return
  27. }
  28. data := share.GetJsonAnyParam(c)
  29. skuId, _ := data("skuId")
  30. count, _ := data("count")
  31. couponUserId, _ := data("couponUserId")
  32. contactInformation, _ := data("contactInformation")
  33. sku, err := dao.SelectSkuBySkuId(cast.ToInt(skuId))
  34. fmt.Println(sku)
  35. if err != nil {
  36. c.JSON(200, CreateResultError(1000, "商品规格不存在"))
  37. return
  38. }
  39. //查询库存数量
  40. if sku.InventoryNumber < cast.ToInt64(count) {
  41. c.JSON(200, CreateResultError(1000, "库存不足"))
  42. return
  43. }
  44. tp := sku.Price * float64(cast.ToInt(count))
  45. //判断是否可以使用优惠券
  46. belong, s, err := dao.GetSkuBelong(cast.ToInt64(skuId), cast.ToInt64(couponUserId), tp)
  47. if !belong {
  48. if s == "" {
  49. c.JSON(200, CreateResultError(500, "查询错误"))
  50. return
  51. } else {
  52. c.JSON(200, CreateResultError(500, s))
  53. return
  54. }
  55. }
  56. order := &domain.GoodsOrder{}
  57. order.SkuId = cast.ToInt64(skuId)
  58. order.Count = cast.ToInt64(count)
  59. order.CouponUserId = cast.ToInt64(couponUserId)
  60. order.ContactInformation = cast.ToString(contactInformation)
  61. order.OrderName = fmt.Sprint(sku.SkuName, "【x", count, "】")
  62. order.Price = sku.Price
  63. order.TotalPrice = sku.Price * float64(cast.ToInt(count))
  64. order.CreateBy = id
  65. order.CreateTime = time.Now()
  66. order, err = dao.CreateOrder(order)
  67. if err != nil {
  68. c.JSON(200, CreateResultError(1000, "创建订单失败"))
  69. return
  70. }
  71. c.JSON(200, CreateResultData(*order))
  72. }
  73. // PayBuyTest 支付回调模拟
  74. func PayBuyTest(c *gin.Context) {
  75. id := GetUserIdByToken(c)
  76. if id == 0 {
  77. return
  78. }
  79. data := share.GetJsonAnyParam(c)
  80. orderId, _ := data("orderId")
  81. dao.OrderPaySuccess(cast.ToInt64(orderId), id)
  82. }
  83. // GetOrderList 获取订单列表
  84. func GetOrderList(c *gin.Context) {
  85. id := GetUserIdByToken(c)
  86. if id == 0 {
  87. return
  88. }
  89. orders, err := dao.GetOrderByUserId(id)
  90. var ids = make([]int64, 0)
  91. for _, order := range orders {
  92. ids = append(ids, order.CouponUserId)
  93. }
  94. skus, err := manage.GetGoodsSkuListInId(ids)
  95. if err != nil {
  96. c.JSON(200, CreateResultError(1000, "查询失败"))
  97. }
  98. var vos = make([]vo.OrderVo, 0)
  99. for _, order := range orders {
  100. var vo vo.OrderVo
  101. vo.Order = order
  102. for _, sku := range skus {
  103. if order.CouponUserId == sku.Id {
  104. vo.Sku = sku
  105. break
  106. }
  107. }
  108. vos = append(vos, vo)
  109. }
  110. c.JSON(200, CreateResultData(map[string]interface{}{
  111. "vos": vos,
  112. "len": len(vos),
  113. }))
  114. }