123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- package goods
-
- import (
- "errors"
- "spaceofcheng/services/models"
- "spaceofcheng/services/models/model"
- "spaceofcheng/services/utils"
- "strconv"
- "strings"
- "time"
-
- "github.com/yl10/kit/guid"
-
- "github.com/go-xorm/xorm"
- )
-
- // GoodsDAO 当前数据库操作对象
- type GoodsDAO struct {
- ctx *utils.Context
- db *xorm.Session
- }
-
- // NewGoodsDAO New Inst
- func NewGoodsDAO(ctx *utils.Context) *GoodsDAO {
- return &GoodsDAO{
- ctx: ctx,
- db: ctx.DB,
- }
- }
-
- // GetGoodsListPageNavi 获取商品列表
- // 管理端接口
- func (m *GoodsDAO) GetGoodsListPageNavi(name, typeID, caseID string, limit []int) ([]GoodsWithSpec, int64, error) {
- sql := `
- SELECT *
- FROM
- ta_goods
- WHERE
- case_id in ('` + strings.Replace(caseID, ",", "','", -1) + `')
- `
-
- if name != "" {
- sql += `
- AND goods_name LIKE '%` + name + `%'
- `
- }
-
- if typeID != "" {
- sql += `
- AND type_id = '` + typeID + `'
- `
- }
-
- sql += `
- AND status > ` + strconv.Itoa(models.STATUS_DEL) + `
- ORDER BY
- create_date desc
- `
-
- // sql += ` limit ` + strconv.Itoa(limit[0]) + ` OFFSET ` + strconv.Itoa(limit[1])
-
- var goodsList []GoodsWithSpec
- cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&goodsList, sql, limit)
- if err != nil {
- return nil, 0, err
- }
- for inx, goods := range goodsList {
- specs, err := m.GetSpecWithPrice(goods.GoodsId)
- if err != nil {
- return nil, 0, err
- }
- goodsList[inx].Specs = specs
-
- imgs, err := m.GetGoodsImgByGoodsID(goods.GoodsId)
- if err != nil {
- return nil, 0, err
- }
- goodsList[inx].Images = imgs
- }
-
- return goodsList, cnt, nil
- }
-
- // GetGoodsListOfCase 获取案场商品列表
- // 微信端 暂时没涉及分页
- func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
- var goodsList []GoodsWithSpec
-
- sql := "select * from ta_goods where case_id = ? and status = ? order by type_id, create_date"
- if err := m.db.SQL(sql, caseID, models.STATUS_NORMAL).Find(&goodsList); err != nil {
- return nil, err
- }
-
- for inx, goods := range goodsList {
- imgs, err := m.GetGoodsImgByGoodsID(goods.GoodsId)
- if err != nil {
- return nil, err
- }
- goodsList[inx].Images = imgs
-
- specs, err := m.GetSpecWithPrice(goods.GoodsId)
- if err != nil {
- return nil, err
- }
-
- goodsList[inx].Specs = specs
- }
-
- return goodsList, nil
- }
-
- // GetSpecWithPrice 获取商品规格 含 金额
- func (m *GoodsDAO) GetSpecWithPrice(goodsID string) ([]SpecWithPrice, error) {
- sql := `SELECT t.*,s.goods_price FROM td_spec t
- JOIN ta_goods_spec s ON t.spec_id = s.spec_id
- WHERE t.status > ? AND s.goods_id = ?
- `
-
- var specs []SpecWithPrice
- err := m.db.SQL(sql, models.STATUS_DEL, goodsID).Find(&specs)
-
- return specs, err
- }
-
- // GetGoodsByID 依据ID 获取商品
- func (m *GoodsDAO) GetGoodsByID(id string) (*model.TaGoods, error) {
- goods := new(model.TaGoods)
- if _, err := m.db.Where("goods_id=?", id).Get(goods); err != nil {
- return nil, err
- }
-
- return goods, nil
- }
-
- // GetGoodsWithPriceByID 依据ID 获取商品
- func (m *GoodsDAO) GetGoodsWithPriceByID(id, spec, caseID string) (*GoodsWithPrice, error) {
- goods := new(GoodsWithPrice)
- query := `
- SELECT *
- FROM
- ta_goods t
- JOIN ta_goods_spec s ON t.goods_id = s.goods_id
- WHERE
- t.goods_id = ?
- AND t.case_id = ?
- AND s.spec_id = ?
- AND t.status = ?
- `
-
- if _, err := m.db.SQL(query, id, caseID, spec, models.STATUS_NORMAL).Get(goods); err != nil {
- return nil, err
- }
-
- return goods, nil
- }
-
- // GetGoodsWithSpecByID 依据ID 获取商品(含规格)
- func (m *GoodsDAO) GetGoodsWithSpecByID(id string) (*GoodsWithSpec, error) {
- goods := new(model.TaGoods)
- if _, err := m.db.Where("goods_id=?", id).Get(goods); err != nil {
- return nil, err
- }
-
- var specs []SpecWithPrice
- query := `
- SELECT
- t.*, s.goods_price
- FROM
- td_spec t
- JOIN ta_goods_spec s ON t.spec_id = s.spec_id
- WHERE
- s.goods_id = ?
- `
- if err := m.db.SQL(query, id).Find(&specs); err != nil {
- return nil, err
- }
-
- imgs, err := m.GetGoodsImgByGoodsID(id)
- if err != nil {
- return nil, err
- }
-
- return &GoodsWithSpec{
- TaGoods: *goods,
- Specs: specs,
- Images: imgs,
- }, nil
- }
-
- // SaveGoods 保存商品
- func (m *GoodsDAO) SaveGoods(goods *model.TaGoods, images []string, specs []SpecWithPrice) error {
- userRaw := m.ctx.Get("user")
- if userRaw == nil {
- return errors.New("登录异常, 请登出重试")
- }
- user := userRaw.(model.SysUser)
-
- goods.GoodsId = guid.NewGUIDString()
- goods.Status = models.STATUS_NORMAL
- goods.CreateDate = time.Now().Local()
- goods.CreateUser = user.UserId
- goods.OrgId = user.OrgId
-
- // 商品图片
- if images != nil && len(images) > 0 {
- goodsImages := make([]model.TaGoodsImg, 0)
-
- for _, img := range images {
- goodsImages = append(goodsImages, model.TaGoodsImg{
- ImgId: guid.NewGUIDString(),
- GoodsId: goods.GoodsId,
- ImgUrl: img,
- Status: models.STATUS_NORMAL,
- })
- }
-
- if _, err := m.db.Insert(&goodsImages); err != nil {
- return err
- }
- }
-
- // 规格
- if specs != nil && len(specs) > 0 {
- goodsSpecs := make([]model.TaGoodsSpec, 0)
-
- for _, spec := range specs {
- goodsSpecs = append(goodsSpecs, model.TaGoodsSpec{
- SpecId: spec.SpecId,
- GoodsId: goods.GoodsId,
- GoodsPrice: spec.GoodsPrice,
- })
- }
-
- if _, err := m.db.Insert(&goodsSpecs); err != nil {
- return err
- }
- }
-
- if _, err := m.db.Insert(goods); err != nil {
- return err
- }
-
- return nil
- }
-
- // UpdateGoods 更新商品
- func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, images []string, specs []SpecWithPrice) error {
- cols := []string{
- "goods_name",
- "type_id",
- "status",
- "price",
- "case_id",
- }
- // 先清除旧数据
- if _, err := m.db.Delete(&model.TaGoodsImg{GoodsId: goods.GoodsId}); err != nil {
- return err
- }
-
- // 商品图片
- if images != nil && len(images) > 0 {
- goodsImages := make([]model.TaGoodsImg, 0)
- for _, img := range images {
- goodsImages = append(goodsImages, model.TaGoodsImg{
- ImgId: guid.NewGUIDString(),
- GoodsId: goods.GoodsId,
- ImgUrl: img,
- Status: models.STATUS_NORMAL,
- })
- }
-
- if _, err := m.db.Insert(&goodsImages); err != nil {
- return err
- }
- }
- // 先清除旧数据
- if _, err := m.db.Delete(&model.TaGoodsSpec{GoodsId: goods.GoodsId}); err != nil {
- return err
- }
- // 规格
- if specs != nil && len(specs) > 0 {
- goodsSpecs := make([]model.TaGoodsSpec, 0)
- for _, spec := range specs {
- goodsSpecs = append(goodsSpecs, model.TaGoodsSpec{
- SpecId: spec.SpecId,
- GoodsId: goods.GoodsId,
- GoodsPrice: spec.GoodsPrice,
- })
- }
-
- if _, err := m.db.Insert(&goodsSpecs); err != nil {
- return err
- }
- }
-
- if _, err := m.db.Where("goods_id=?", goods.GoodsId).Cols(cols...).Update(goods); err != nil {
- return err
- }
-
- return nil
- }
-
- // DeleteGoods 删除商品
- func (m *GoodsDAO) DeleteGoods(id string) error {
- goods := new(model.TaGoods)
- goods.Status = models.STATUS_DEL
-
- if _, err := m.db.Where("goods_id=?", id).Cols("status").Update(goods); err != nil {
- return err
- }
-
- return nil
- }
-
- // GetGoodsImgByGoodsID 根据商品ID获取商品图片信息
- func (m *GoodsDAO) GetGoodsImgByGoodsID(goodsid string) ([]model.TaGoodsImg, error) {
- var goodsimg []model.TaGoodsImg
- err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
- return goodsimg, err
- }
-
- // GetGoodsBySpec 根据商品规格获取商品信息
- func (m *GoodsDAO) GetGoodsBySpec(specid string) ([]model.TaGoods, error) {
- var goods []model.TaGoods
- sql := `select a.* from ta_goods a inner join ta_goods_spec b on a.goods_id=b.goods_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and b.spec_id='` + specid + `'`
- err := m.db.Sql(sql).Find(&goods)
- return goods, err
- }
-
- // GetGoodsByType 根据商品类型获取商品信息
- func (m *GoodsDAO) GetGoodsByType(typeid string) ([]model.TaGoods, error) {
- var goods []model.TaGoods
- err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("type_id=?", typeid).Find(&goods)
- return goods, err
- }
|