ShopDao.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package dao
  2. import (
  3. "demo/configs"
  4. "demo/data/dao/manage"
  5. "demo/data/domain"
  6. "demo/data/domain/vo"
  7. "fmt"
  8. "strconv"
  9. "strings"
  10. )
  11. func GetAdviceData() (vo.ShopAdviceVo, error) {
  12. var carousels []domain.ShopAdviceCarousel
  13. err := configs.Engine.Table("shop_advice_carousel").
  14. Where("state = 1 and show_type = 'carousel'").
  15. Asc("sort").
  16. Limit(10).Find(&carousels)
  17. if err != nil {
  18. return vo.ShopAdviceVo{}, err
  19. }
  20. sku := make([]vo.AdviceSku, 0)
  21. err = configs.Engine.Table("shop_advice_carousel").
  22. Where("state = 1 and show_type = 'package'").
  23. Join("INNER", "goods_sku", "shop_advice_carousel.to_id = goods_sku.id").
  24. Limit(6).Find(&sku)
  25. if err != nil {
  26. return vo.ShopAdviceVo{}, err
  27. }
  28. vo := vo.ShopAdviceVo{
  29. Carousels: carousels,
  30. PackageList: sku,
  31. }
  32. return vo, err
  33. }
  34. func GetTopicList() ([]vo.ShopHomeTopicVo, error) {
  35. var topics []domain.ShopTopic
  36. err := configs.Engine.Table("shop_topic").Asc("sort").Find(&topics)
  37. if err != nil {
  38. fmt.Println(err)
  39. return nil, nil
  40. }
  41. var vos = make([]vo.ShopHomeTopicVo, 0)
  42. for i := range topics {
  43. vo := vo.ShopHomeTopicVo{Topic: topics[i]}
  44. vos = append(vos, vo)
  45. skus := make([]domain.GoodsSku, 0)
  46. err := configs.Engine.Table("shop_topic_sku").Select("goods_sku.id,goods_sku.sku_image,goods_sku.sku_name,goods_sku.price,goods_sku.historical_prices,goods_sku.inventory_number,goods_sku.commodity_area_id,goods_sku.goods_id,goods_sku.create_by,goods_sku.create_time").
  47. Join("INNER", "goods_sku", "shop_topic_sku.sku_id = goods_sku.id").
  48. Where("shop_topic_sku.topic_id = ?", topics[i].Id).Find(&skus)
  49. if err != nil {
  50. fmt.Println(err)
  51. }
  52. vo.Skus = skus
  53. }
  54. for i := range vos {
  55. if len(vos[i].Skus) == 0 {
  56. //查询替换
  57. //vo, err := manage.GetGoodsSkuList(domain.GoodsSku{}, 1, 20)
  58. var skus []domain.GoodsSku
  59. err = configs.Engine.Select("goods_sku.id,goods_sku.sku_image,goods_sku.sku_name,goods_sku.price,goods_sku.historical_prices,goods_sku.inventory_number,goods_sku.commodity_area_id,goods_sku.goods_id,goods_sku.create_by,goods_sku.create_time").
  60. Table("goods_sku").Join("INNER", "goods", "goods_sku.goods_id = goods.id").
  61. Join("INNER", "goods_type", "goods.type_id = goods_type.id").Limit(20).
  62. Where("find_in_set(goods_type.id,?) ", vos[i].Topic.TypeIds).Find(&skus)
  63. if err != nil {
  64. fmt.Println(err)
  65. }
  66. vos[i].Skus = skus
  67. }
  68. }
  69. //处理vos防止skus数组为空
  70. var newVos = make([]vo.ShopHomeTopicVo, 0)
  71. for i := range vos {
  72. if len(vos[i].Skus) != 0 {
  73. newVos = append(newVos, vos[i])
  74. }
  75. }
  76. return newVos, nil
  77. }
  78. func GetTopicPageDataListById(topicId int64) (vo.TopicPageData, error) {
  79. topic := domain.ShopTopic{}
  80. var data vo.TopicPageData
  81. topicRes, err := configs.Engine.Table("shop_topic").Where("id = ?", topicId).Get(&topic)
  82. if err != nil {
  83. fmt.Println(err)
  84. return data, err
  85. }
  86. if !topicRes {
  87. return data, err
  88. }
  89. //获取商品类型
  90. typeIds := make([]int64, 0)
  91. split := strings.Split(topic.TypeIds, ",")
  92. for i := range split {
  93. parseInt, err := strconv.ParseInt(split[i], 10, 64)
  94. if err != nil {
  95. fmt.Println(err)
  96. return data, err
  97. }
  98. typeIds = append(typeIds, parseInt)
  99. }
  100. types, err := manage.GetGoodsTypeListInId(typeIds)
  101. if err != nil {
  102. fmt.Println(err)
  103. return data, err
  104. }
  105. typeData := make([]vo.TopicPageTypeData, 0)
  106. for i := range types {
  107. typeVo := vo.TopicPageTypeData{
  108. Type: types[i],
  109. }
  110. //根据typeId查询每个商品中的第一个sku
  111. skus := make([]domain.GoodsSku, 0)
  112. //获取商品
  113. goodsId := make([]int64, 0)
  114. err := configs.Engine.Select("id").Table("goods").Where("type_id = ?", types[i].Id).Find(&goodsId)
  115. if err != nil {
  116. fmt.Println(err)
  117. return data, err
  118. }
  119. for i := range goodsId {
  120. sku := domain.GoodsSku{}
  121. skuRes, err := configs.Engine.Table("goods_sku").Where("goods_id = ?", goodsId[i]).Get(&sku)
  122. if err != nil {
  123. fmt.Println(err)
  124. return data, err
  125. }
  126. if !skuRes {
  127. continue
  128. }
  129. skus = append(skus, sku)
  130. }
  131. typeVo.SkuList = skus
  132. typeData = append(typeData, typeVo)
  133. }
  134. data.Topic = topic
  135. data.Types = typeData
  136. return data, nil
  137. }