Compare commits
No commits in common. "4dda7ac1fab41ae8f489224c9a38fb8cdf75b8bc" and "68e2a214029c7c76311435fda7e6530d4fb142f3" have entirely different histories.
4dda7ac1fa
...
68e2a21402
@ -1,56 +0,0 @@
|
|||||||
package storage
|
|
||||||
|
|
||||||
import (
|
|
||||||
v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/clause"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SellerArticleApi 管理供应商商品的接口
|
|
||||||
type SellerArticleApi interface {
|
|
||||||
Get(query GetProviderArticleQuery) (article v2.ProviderArticle, err error)
|
|
||||||
Upsert(article v2.SellerArticle) error
|
|
||||||
}
|
|
||||||
|
|
||||||
type sellerArticleApi struct {
|
|
||||||
db *gorm.DB
|
|
||||||
}
|
|
||||||
|
|
||||||
type GetSellerArticleQuery struct {
|
|
||||||
ID uint `query:"id"`
|
|
||||||
Brand string `query:"brand"`
|
|
||||||
Pid string `query:"pid"`
|
|
||||||
SellerId string `query:"sellerId"`
|
|
||||||
SkuId string `query:"skuId"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GetSellerArticleQuery) Scope(db *gorm.DB) *gorm.DB {
|
|
||||||
if g.ID > 0 {
|
|
||||||
db = db.Where("id=?", g.ID)
|
|
||||||
}
|
|
||||||
if g.Brand != "" {
|
|
||||||
db = db.Where("brand=?", g.Brand)
|
|
||||||
}
|
|
||||||
if g.Pid != "" {
|
|
||||||
db = db.Where("pid=?", g.Pid)
|
|
||||||
}
|
|
||||||
if g.SellerId != "" {
|
|
||||||
db = db.Where("seller_id=?", g.SellerId)
|
|
||||||
}
|
|
||||||
if g.SkuId != "" {
|
|
||||||
db = db.Where("sku_id=?", g.SkuId)
|
|
||||||
}
|
|
||||||
return db
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerArticleApi) Get(query GetSellerArticleQuery) (article v2.SellerArticle, err error) {
|
|
||||||
err = p.db.Scopes(query.Scope).First(&article).Error
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerArticleApi) Upsert(article v2.SellerArticle) error {
|
|
||||||
return p.db.Clauses(clause.OnConflict{
|
|
||||||
Columns: []clause.Column{{Name: "seller_id"}, {Name: "sku_id"}},
|
|
||||||
DoUpdates: clause.AssignmentColumns([]string{"sell"}),
|
|
||||||
}).Create(&article).Error
|
|
||||||
}
|
|
@ -1,106 +1,63 @@
|
|||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2"
|
v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2"
|
||||||
"github.com/samber/lo"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SellerApi interface {
|
type SellerApi interface {
|
||||||
Get(id uint) (seller v2.Seller, err error)
|
|
||||||
List(query PageListQuery) (sellers []v2.Seller, total int64, err error)
|
|
||||||
Create(seller v2.Seller) error
|
|
||||||
Update(seller v2.Seller) error
|
|
||||||
Delete(id uint) (seller v2.Seller, err error)
|
|
||||||
AutoMigrate() error
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewSellerApi(db *gorm.DB) SellerApi {
|
|
||||||
return &sellerApi{db: db}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type sellerApi struct {
|
type sellerApi struct {
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
type ListSellerQuery struct {
|
// SellerArticleApi 管理供应商商品的接口
|
||||||
ID uint `query:"id"`
|
type SellerArticleApi interface {
|
||||||
SellerId string `query:"sellerId"`
|
Get(query GetProviderArticleQuery) (article v2.ProviderArticle, err error)
|
||||||
Keyword string `query:"keyword"`
|
Upsert(article v2.SellerArticle) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *ListSellerQuery) Scope(db *gorm.DB) *gorm.DB {
|
type sellerArticleApi struct {
|
||||||
|
db *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetSellerArticleQuery struct {
|
||||||
|
ID uint `query:"id"`
|
||||||
|
Brand string `query:"brand"`
|
||||||
|
Pid string `query:"pid"`
|
||||||
|
SellerId string `query:"sellerId"`
|
||||||
|
SkuId string `query:"skuId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GetSellerArticleQuery) Scope(db *gorm.DB) *gorm.DB {
|
||||||
if g.ID > 0 {
|
if g.ID > 0 {
|
||||||
db = db.Where("id=?", g.ID)
|
db = db.Where("id=?", g.ID)
|
||||||
}
|
}
|
||||||
if g.SellerId != "" {
|
if g.Brand != "" {
|
||||||
db = db.Where("seller_id = ?", g.SellerId)
|
db = db.Where("brand=?", g.Brand)
|
||||||
}
|
}
|
||||||
if g.Keyword != "" {
|
if g.Pid != "" {
|
||||||
db = db.Where("name LIKE ?", "%"+g.Keyword+"%")
|
db = db.Where("pid=?", g.Pid)
|
||||||
|
}
|
||||||
|
if g.SellerId != "" {
|
||||||
|
db = db.Where("seller_id=?", g.SellerId)
|
||||||
|
}
|
||||||
|
if g.SkuId != "" {
|
||||||
|
db = db.Where("sku_id=?", g.SkuId)
|
||||||
}
|
}
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *sellerApi) Get(id uint) (seller v2.Seller, err error) {
|
func (p *sellerArticleApi) Get(query GetSellerArticleQuery) (article v2.SellerArticle, err error) {
|
||||||
err = p.db.Where("id = ?", id).Preload("CalculateProcess").First(&seller).Error
|
err = p.db.Scopes(query.Scope).First(&article).Error
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *sellerApi) List(query PageListQuery) (sellers []v2.Seller, total int64, err error) {
|
func (p *sellerArticleApi) Upsert(article v2.SellerArticle) error {
|
||||||
err = p.db.Scopes(query.Scoper.Scope).Model(&v2.Seller{}).Count(&total).Error
|
return p.db.Clauses(clause.OnConflict{
|
||||||
if err != nil {
|
Columns: []clause.Column{{Name: "seller_id"}, {Name: "sku_id"}},
|
||||||
return
|
DoUpdates: clause.AssignmentColumns([]string{"sell"}),
|
||||||
}
|
}).Create(&article).Error
|
||||||
err = p.db.Scopes(query.Scope).Find(&sellers).Error
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerApi) Create(seller v2.Seller) error {
|
|
||||||
if seller.SellerId == "" {
|
|
||||||
return fmt.Errorf("标识为空")
|
|
||||||
}
|
|
||||||
if seller.Name == "" {
|
|
||||||
return fmt.Errorf("名称为空")
|
|
||||||
}
|
|
||||||
return p.db.Create(&seller).Error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerApi) Update(seller v2.Seller) error {
|
|
||||||
if seller.SellerId == "" {
|
|
||||||
return fmt.Errorf("标识为空")
|
|
||||||
}
|
|
||||||
|
|
||||||
return p.db.Transaction(func(tx *gorm.DB) error {
|
|
||||||
ids := lo.Map(lo.Filter(seller.CalculateProcess, func(item v2.CalculateProcess, index int) bool { return item.ID > 0 }), func(item v2.CalculateProcess, index int) string {
|
|
||||||
return strconv.Itoa(int(item.ID))
|
|
||||||
})
|
|
||||||
|
|
||||||
// 删除已经没有的CalculateProcess
|
|
||||||
if err := tx.Not(ids).Where("owner_id = ? AND kind = ?", seller.ID, "seller").Delete(&v2.CalculateProcess{}).Error; err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新方案的name和描述
|
|
||||||
return tx.Session(&gorm.Session{FullSaveAssociations: true}).Select("updated_at", "name", "config", "mark", "CalculateProcess").
|
|
||||||
Where("id = ?", seller.ID).Updates(&seller).Error
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerApi) Delete(id uint) (seller v2.Seller, err error) {
|
|
||||||
err = p.db.Transaction(func(tx *gorm.DB) error {
|
|
||||||
if err = tx.Where("owner_id = ? AND kind = ?", id, "seller").Delete(&v2.CalculateProcess{}).Error; err != nil {
|
|
||||||
|
|
||||||
}
|
|
||||||
return p.db.Clauses(clause.Returning{}).Where("id = ?", id).Delete(&seller).Error
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *sellerApi) AutoMigrate() error {
|
|
||||||
return p.db.AutoMigrate(&v2.Seller{}, &v2.CalculateProcess{})
|
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,6 @@ type Storage struct {
|
|||||||
articleApi ArticleApi
|
articleApi ArticleApi
|
||||||
providerApi ProviderApi
|
providerApi ProviderApi
|
||||||
providerArticleApi ProviderArticleApi
|
providerArticleApi ProviderArticleApi
|
||||||
sellerApi SellerApi
|
|
||||||
sellerArticleApi SellerArticleApi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStorage(db *gorm.DB) *Storage {
|
func NewStorage(db *gorm.DB) *Storage {
|
||||||
@ -16,7 +14,6 @@ func NewStorage(db *gorm.DB) *Storage {
|
|||||||
db: db,
|
db: db,
|
||||||
},
|
},
|
||||||
providerApi: NewProviderApi(db),
|
providerApi: NewProviderApi(db),
|
||||||
sellerApi: NewSellerApi(db),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +28,3 @@ func (s *Storage) Provider() ProviderApi {
|
|||||||
func (s *Storage) ProviderArticle() ProviderArticleApi {
|
func (s *Storage) ProviderArticle() ProviderArticleApi {
|
||||||
return s.providerArticleApi
|
return s.providerArticleApi
|
||||||
}
|
}
|
||||||
func (s *Storage) Seller() SellerApi {
|
|
||||||
return s.sellerApi
|
|
||||||
}
|
|
||||||
|
@ -22,7 +22,7 @@ type Seller struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SellerOption struct {
|
type SellerOption struct {
|
||||||
Ticker string `yaml:"ticker" json:"ticker"` //定时抓取
|
Interval time.Duration `yaml:"interval" json:"interval"` //抓取间隔
|
||||||
}
|
}
|
||||||
|
|
||||||
// SellerArticle 销售商商品信息
|
// SellerArticle 销售商商品信息
|
||||||
|
Loading…
x
Reference in New Issue
Block a user