| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- package dao
- import (
- "demo/configs"
- "demo/data/domain"
- "demo/data/domain/vo"
- "fmt"
- )
- // 排序
- func GetGoodsTagList(goodsTag domain.GoodsTag, goodsTags string) (vo.BaseListVo, error) {
- var arr []domain.GoodsTag
- Count, err := configs.Engine.Table("goods_tag").
- Where("find_in_set(goods_tag.id,?)", goodsTags).FindAndCount(&arr, &goodsTag)
- var vo vo.BaseListVo
- if err != nil {
- return vo, err
- }
- if err != nil {
- return vo, err
- }
- vo.List = make([]any, len(arr))
- for i, v := range arr {
- vo.List[i] = v
- }
- vo.Total = int(Count)
- return vo, nil
- }
- // SelectGoodsDetailById 获取相同的商品详情
- func SelectGoodsDetailById(skuId int64) (vo.DetailVo, error) {
- detailVo := vo.DetailVo{}
- var caId int64 = -1
- //================查询sku========================
- var sku domain.GoodsSku
- //查询 sku
- rows, err := configs.Engine.Table("goods_sku").
- Where("goods_id = (select a.goods_id as goods_id from goods_sku as a where a.id = ? )", skuId).
- Desc("create_time").Rows(&sku)
- if err != nil {
- println("查询sku失败", err)
- return vo.DetailVo{}, err
- }
- var skus []domain.GoodsSku
- var commodityAreaIds = make([]int64, 0)
- commodityAreaIdsString := ""
- A:
- for rows.Next() {
- rows.Scan(&sku)
- skus = append(skus, sku)
- if sku.Id == skuId {
- caId = sku.CommodityAreaId
- }
- //去重
- for i := range commodityAreaIds {
- if sku.CommodityAreaId == commodityAreaIds[i] {
- continue A
- }
- }
- commodityAreaIds = append(commodityAreaIds, sku.CommodityAreaId)
- commodityAreaIdsString = fmt.Sprint(commodityAreaIdsString, ",", sku.CommodityAreaId)
- }
- if len(skus) == 0 {
- return detailVo, nil
- }
- if len(commodityAreaIdsString) > 1 {
- commodityAreaIdsString = commodityAreaIdsString[1:]
- }
- fmt.Println("=============================>", commodityAreaIdsString)
- //================查询goods========================
- var goods domain.Goods
- _, err = configs.Engine.Table("goods").Where("id = ?", sku.GoodsId).Get(&goods)
- if err != nil {
- println("查询goods失败", err)
- return vo.DetailVo{}, err
- }
- //=================查询goods_tag========================
- var goodsTag domain.GoodsTag
- rows, err = configs.Engine.Table("goods_tag").
- Where(" FIND_IN_SET(goods_tag.id,?)", goods.TagIds).
- Rows(&goodsTag)
- if err != nil {
- println("查询goods_tag失败", err)
- return vo.DetailVo{}, err
- }
- var goodsTags []domain.GoodsTag
- for rows.Next() {
- rows.Scan(&goodsTag)
- goodsTags = append(goodsTags, goodsTag)
- }
- //=================查询goods_type========================
- var goodsType domain.GoodsType
- _, err = configs.Engine.Table("goods_type").Where("id = ?", goods.TypeId).Get(&goodsType)
- if err != nil {
- println("查询goods_type失败", err)
- return vo.DetailVo{}, err
- }
- //=================查询goods_CommodityArea========================
- var goodsCommodityArea domain.GoodsCommodityArea
- rows, err = configs.Engine.Table("goods_commodity_area").
- Where(" FIND_IN_SET(goods_commodity_area.id,?)", commodityAreaIdsString).
- Rows(&goodsCommodityArea)
- if err != nil {
- println("查询goods_CommodityArea失败", err)
- return vo.DetailVo{}, err
- }
- var goodsCommodityAreas []domain.GoodsCommodityArea
- var introductionIds = make([]int64, 0)
- var introductionIdString = ""
- B:
- for rows.Next() {
- rows.Scan(&goodsCommodityArea)
- goodsCommodityAreas = append(goodsCommodityAreas, goodsCommodityArea)
- for i := range introductionIds {
- if goodsCommodityArea.DetailIntroductionId == introductionIds[i] {
- continue B
- }
- }
- introductionIds = append(introductionIds, goodsCommodityArea.DetailIntroductionId)
- introductionIdString = fmt.Sprint(introductionIdString, ",", goodsCommodityArea.DetailIntroductionId)
- }
- if len(introductionIdString) > 1 {
- introductionIdString = introductionIdString[1:]
- }
- fmt.Println("=============================>", introductionIdString)
- //=================查询goods_introduction========================
- var goodsIntroduction domain.GoodsIntroduction
- rows, err = configs.Engine.Table("goods_introduction").
- Where("FIND_IN_SET(id,?)", introductionIdString).
- Rows(&goodsIntroduction)
- if err != nil {
- println("查询goods_introduction失败", err)
- return vo.DetailVo{}, err
- }
- var goodsIntroductions []domain.GoodsIntroduction
- for rows.Next() {
- rows.Scan(&goodsIntroduction)
- goodsIntroductions = append(goodsIntroductions, goodsIntroduction)
- }
- detailVo.DetailGoodsVo = vo.DetailGoodsVo{
- Tags: goodsTags,
- GoodsId: goods.Id,
- Name: goods.GoodsName,
- SalesVolume: goods.SalesVolume,
- Type: goodsType,
- }
- detailVo.DetailSkuVo = vo.DetailSkuVo{
- SkuList: skus,
- NowSkuId: skuId,
- }
- detailVo.DetailCommodityAreaVo = vo.DetailCommodityAreaVo{
- CommodityAreaList: goodsCommodityAreas,
- NowCommodityAreaId: caId,
- }
- //=================相关推荐========================
- //复制sku 8个数据
- if len(skus) >= 8 {
- detailVo.RecommendedGoods = skus[0:8]
- } else {
- detailVo.RecommendedGoods = skus
- }
- detailVo.Introduction = goodsIntroductions
- return detailVo, nil
- }
- func SelectSkuInfoBySkuId(skuId int64) (vo.DetailInfoVo, error) {
- //根据skuid 获取GoodsId
- var sku domain.GoodsSku
- var infoVo vo.DetailInfoVo
- _, err := configs.Engine.Table("goods_sku").Where("id = ?", skuId).OrderBy("sort").Get(&sku)
- if err != nil || sku.GoodsId == 0 {
- return infoVo, err
- }
- var goods domain.Goods
- _, err = configs.Engine.Table("goods").Where("id = ?", sku.GoodsId).Get(&goods)
- //查询属性
- var areas = make([]domain.GoodsCommodityArea, 0)
- err = configs.Engine.Table("goods_commodity_area").
- Where("goods_id = ?", goods.Id).Find(&areas)
- if err != nil {
- return infoVo, err
- }
- //查询文章下的所有
- var intrs = make([]domain.GoodsIntroduction, 0)
- {
- sign := false
- if goods.IntroductionId != 0 {
- err = configs.Engine.Table("goods_introduction").
- Where("id = ?", goods.IntroductionId).Find(&intrs)
- if err != nil {
- sign = true
- }
- }
- if sign || len(intrs) == 0 {
- err = configs.Engine.Table("goods_introduction").
- Where("goods_id = ?", goods.Id).Find(&intrs)
- }
- }
- var skus = make([]domain.GoodsSku, 0)
- err = configs.Engine.Table("goods_sku").Where("goods_id = ?", goods.Id).OrderBy("sort").Find(&skus)
- infoVo.Sku = sku
- infoVo.Goods = goods
- infoVo.Introductions = intrs
- infoVo.Skus = skus
- infoVo.Areas = areas
- if len(skus) > 8 {
- infoVo.RecommendedGoods = skus[0:8]
- } else {
- infoVo.RecommendedGoods = skus
- }
- return infoVo, nil
- }
- // 搜索==================
- func GetSkuByKey2(key string, pageNum, pageSize int) ([]domain.GoodsSku, int64, error) {
- if pageNum == 0 {
- pageNum = 1
- }
- if pageSize == 0 {
- pageSize = 12
- }
- var sqlKey = "%" + key + "%"
- arr := make([]domain.GoodsSku, 0)
- if key == "" {
- count, err := configs.Engine.Table("goods_sku").Desc("id").
- Limit(pageSize, (pageNum-1)*pageSize).FindAndCount(&arr)
- if err != nil {
- return nil, 0, err
- }
- return arr, count, nil
- }
- count, err := configs.Engine.Table("goods_sku s").Cols("s.id", "s.seo_title", "s.seo_keywords", "s.seo_description", "s.sku_image", "s.sku_name", "s.sort", "s.price", "s.historical_prices", "s.inventory_number", "s.commodity_area_id", "s.goods_id", "s.create_by", "s.create_time").
- Join("left", "goods g", "s.goods_id = g.id").
- Join("left", "(SELECT gt.tag as tag,g.id AS goods_id FROM goods g JOIN goods_tag gt ON FIND_IN_SET(gt.id, g.tag_ids)) AS t ", " g.id = t.goods_id").Desc("s.id").
- Where("t.tag LIKE ? OR g.goods_name LIKE ? OR s.sku_name LIKE ?", sqlKey, sqlKey, sqlKey).
- GroupBy("s.id").Limit(pageSize, (pageNum-1)*pageSize).FindAndCount(&arr)
- if err != nil {
- fmt.Println("sql语句错误", err)
- return nil, 0, err
- }
- return arr, count, nil
- }
- func GetSkuByKey(key string, pageNum, pageSize int) ([]domain.GoodsSku, int64, error) {
- var sqlKey = "%" + key + "%"
- var sku domain.GoodsSku
- var arr []domain.GoodsSku
- //查询tag
- var tag domain.GoodsTag
- var goods domain.Goods
- var inTags = make([]int64, 0)
- //获取标签
- targetRow, err := configs.Engine.Cols("id").Where("name like ?", sqlKey).Or("tag like ?", sqlKey).
- //去重
- Distinct("id").Rows(&tag)
- for targetRow.Next() {
- targetRow.Scan(&tag)
- inTags = append(inTags, tag.Id)
- }
- //商品内名称查询
- sess := configs.Engine.Cols("id").Distinct("id").Where("goods_name like ?", sqlKey)
- for i := range inTags {
- sess.Or("FIND_IN_SET(?,tag_ids)", inTags[i])
- }
- goodsRow, err := sess.Rows(&goods)
- if err != nil {
- return arr, 0, err
- }
- var goodsInTags = make([]int64, 0)
- for goodsRow.Next() {
- goodsRow.Scan(&goods)
- goodsInTags = append(goodsInTags, goods.Id)
- }
- //最终sku查询
- sess = configs.Engine.Where("sku_name like ?", sqlKey)
- for i := range goodsInTags {
- sess.Or("goods_id = ?", goodsInTags[i])
- }
- skuRow, err := sess.Desc("id").Limit(pageSize, (pageNum-1)*pageSize).Rows(&sku)
- if err != nil {
- return arr, 0, err
- }
- var skus = make([]any, 0)
- for skuRow.Next() {
- skuRow.Scan(&sku)
- skus = append(skus, sku)
- }
- cs := configs.Engine.Where("sku_name like ?", sqlKey)
- for i := range goodsInTags {
- cs.Or("goods_id = ?", goodsInTags[i])
- }
- count, err := cs.Distinct("id").Count("id")
- return arr, count, nil
- }
- func GetGoodsSkuList(goodsSku domain.GoodsSku, pageNum, pageSize int) ([]domain.GoodsSku, int64, error) {
- var arr []domain.GoodsSku
- Count, err := configs.Engine.Table("goods_sku").Limit(pageSize, (pageNum-1)*pageSize).FindAndCount(&arr, &goodsSku)
- if err != nil {
- return arr, 0, err
- }
- if err != nil {
- return arr, 0, err
- }
- return arr, Count, nil
- }
|