GoodsDetailDao.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package dao
  2. import (
  3. "demo/configs"
  4. "demo/data/domain"
  5. "demo/data/domain/vo"
  6. "fmt"
  7. )
  8. // SelectGoodsDetailById 获取相同的商品详情
  9. func SelectGoodsDetailById(skuId int) (vo.DetailVo, error) {
  10. detailVo := vo.DetailVo{}
  11. //================查询sku========================
  12. var sku domain.GoodsSku
  13. //查询 sku
  14. rows, err := configs.Engine.Table("goods_sku").
  15. Where("goods_id = (select a.goods_id as goods_id from goods_sku as a where a.id = ? )", skuId).
  16. Desc("create_time").Rows(&sku)
  17. if err != nil {
  18. println("查询sku失败", err)
  19. return vo.DetailVo{}, err
  20. }
  21. var skus []domain.GoodsSku
  22. var commodityAreaIds = make([]int, 0)
  23. commodityAreaIdsString := ""
  24. A:
  25. for rows.Next() {
  26. rows.Scan(&sku)
  27. skus = append(skus, sku)
  28. //去重
  29. for i := range commodityAreaIds {
  30. if sku.CommodityAreaId == commodityAreaIds[i] {
  31. continue A
  32. }
  33. }
  34. commodityAreaIds = append(commodityAreaIds, sku.CommodityAreaId)
  35. commodityAreaIdsString = fmt.Sprint(commodityAreaIdsString, ",", sku.CommodityAreaId)
  36. }
  37. commodityAreaIdsString = commodityAreaIdsString[1:]
  38. fmt.Println("=============================>", commodityAreaIdsString)
  39. //================查询goods========================
  40. var goods domain.Goods
  41. _, err = configs.Engine.Table("goods").Where("id = ?", sku.GoodsId).Get(&goods)
  42. if err != nil {
  43. println("查询goods失败", err)
  44. return vo.DetailVo{}, err
  45. }
  46. //=================查询goods_tag========================
  47. var goodsTag domain.GoodsTag
  48. rows, err = configs.Engine.Table("goods_tag").
  49. Where(" FIND_IN_SET(goods_tag.id,?)", goods.TagIds).
  50. Rows(&goodsTag)
  51. if err != nil {
  52. println("查询goods_tag失败", err)
  53. return vo.DetailVo{}, err
  54. }
  55. var goodsTags []domain.GoodsTag
  56. for rows.Next() {
  57. rows.Scan(&goodsTag)
  58. goodsTags = append(goodsTags, goodsTag)
  59. }
  60. //=================查询goods_type========================
  61. var goodsType domain.GoodsType
  62. _, err = configs.Engine.Table("goods_type").Where("id = ?", goods.TypeId).Get(&goodsType)
  63. if err != nil {
  64. println("查询goods_type失败", err)
  65. return vo.DetailVo{}, err
  66. }
  67. //=================查询goods_CommodityArea========================
  68. var goodsCommodityArea domain.GoodsCommodityArea
  69. rows, err = configs.Engine.Table("goods_commodity_area").
  70. Where(" FIND_IN_SET(goods_commodity_area.id,?) and goods_id = ?", commodityAreaIdsString, goods.Id).
  71. Rows(&goodsCommodityArea)
  72. if err != nil {
  73. println("查询goods_CommodityArea失败", err)
  74. return vo.DetailVo{}, err
  75. }
  76. var goodsCommodityAreas []domain.GoodsCommodityArea
  77. var introductionIds = make([]int, 0)
  78. var introductionIdString = ""
  79. B:
  80. for rows.Next() {
  81. rows.Scan(&goodsCommodityArea)
  82. goodsCommodityAreas = append(goodsCommodityAreas, goodsCommodityArea)
  83. for i := range introductionIds {
  84. if goodsCommodityArea.DetailIntroductionId == introductionIds[i] {
  85. continue B
  86. }
  87. }
  88. introductionIds = append(introductionIds, goodsCommodityArea.DetailIntroductionId)
  89. introductionIdString = fmt.Sprint(introductionIdString, ",", goodsCommodityArea.DetailIntroductionId)
  90. }
  91. introductionIdString = introductionIdString[1:]
  92. fmt.Println("=============================>", introductionIdString)
  93. //=================查询goods_introduction========================
  94. var goodsIntroduction domain.GoodsIntroduction
  95. rows, err = configs.Engine.Table("goods_introduction").
  96. Where("FIND_IN_SET(id,?)", introductionIdString).
  97. Rows(&goodsIntroduction)
  98. if err != nil {
  99. println("查询goods_introduction失败", err)
  100. return vo.DetailVo{}, err
  101. }
  102. var goodsIntroductions []domain.GoodsIntroduction
  103. for rows.Next() {
  104. rows.Scan(&goodsIntroduction)
  105. goodsIntroductions = append(goodsIntroductions, goodsIntroduction)
  106. }
  107. detailVo.DetailGoodsVo = vo.DetailGoodsVo{
  108. Tags: goodsTags,
  109. GoodsId: goods.Id,
  110. Name: goods.GoodsName,
  111. SalesVolume: goods.SalesVolume,
  112. Type: goodsType,
  113. }
  114. detailVo.DetailSkuVo = vo.DetailSkuVo{
  115. SkuList: skus,
  116. NowSkuId: skuId,
  117. }
  118. detailVo.DetailCommodityAreaVo = vo.DetailCommodityAreaVo{
  119. CommodityAreaList: goodsCommodityAreas,
  120. NowCommodityAreaId: sku.CommodityAreaId,
  121. }
  122. //=================相关推荐========================
  123. //复制sku 8个数据
  124. if len(skus) >= 8 {
  125. detailVo.RecommendedGoods = skus[0:8]
  126. } else {
  127. detailVo.RecommendedGoods = skus
  128. }
  129. detailVo.Introduction = goodsIntroductions
  130. return detailVo, nil
  131. }