feat 添加第二版数据结构

This commit is contained in:
timerzz 2024-08-03 14:12:44 +08:00
parent c498a70be1
commit 96b8215fa6
5 changed files with 208 additions and 0 deletions

View File

@ -0,0 +1,25 @@
package storage
import (
v2 "gitea.timerzz.com/kedaya_haitao/common/structs/v2"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type Storage struct {
}
type ArticleApi interface {
}
type articleApi struct {
db *gorm.DB
}
// Upsert 插入或者更新商品
func (a *articleApi) Upsert(article v2.Article) error {
return a.db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "pid"}, {Name: "brand"}},
DoUpdates: clause.AssignmentColumns([]string{"name", "english_name", "available", "updated_at", "cost_price", "sell_price", "rate", "remark"}),
}).Create(&article).Error
}

41
structs/v2/article.go Normal file
View File

@ -0,0 +1,41 @@
package v2
import (
"time"
"gorm.io/gorm"
)
// Article 商品
type Article struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt gorm.DeletedAt `gorm:"index"`
Name string `gorm:"index" json:"name"`
EnglishName string `gorm:"index" json:"englishName"`
// 货号
Pid string `gorm:"index:article_pid_brand,unique" json:"pid"`
// 品牌
Brand string `gorm:"index:article_pid_brand,unique" json:"brand"`
// 描述
Desc string `json:"desc"`
// 图片
Image string `json:"image"`
// 可以购买的
Available bool `json:"available"`
// 最低成本价(单位为分)
CostPrice int `json:"costPrice"`
// 供应商报价列表
Providers []ProviderArticle `json:"providers" gorm:"foreignKey:ArticleID"`
// 最低出售价 (单位为分)
SellPrice int `json:"sellPrice"`
// 销售商报价列表
Sellers []SellerArticle `json:"sellers" gorm:"foreignKey:ArticleID"`
// 利润率
Rate float64 `json:"rate" gorm:"index"` //利润率
//备注
Remark string `json:"remark"`
}

61
structs/v2/model_test.go Normal file
View File

@ -0,0 +1,61 @@
package v2
import (
"fmt"
"testing"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func TestModel(t *testing.T) {
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Shanghai", "192.168.31.55", "timerzz", "zhhg1997", "kedaya_dev", "5432")
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
err = db.AutoMigrate(&Article{}, &ProviderArticle{}, &ProviderPrice{}, &SellerArticle{}, &SellerPrice{})
if err != nil {
t.Fatal(err)
}
var article = Article{
Name: "test",
EnglishName: "test",
Pid: "1299999922",
Brand: "col",
Desc: "desc",
Image: "http://123",
Available: false,
CostPrice: 123,
Providers: []ProviderArticle{
{
Pid: "999",
Brand: "col",
Link: "http://123",
ProviderId: "coach",
SkuID: "sku999999",
Cost: ProviderPrice{
OriginalPrice: 000,
FinalPrice: 0000,
CalMark: "uuuuu",
},
HistoryPrice: []ProviderPrice{
{
OriginalPrice: 0000,
FinalPrice: 000,
CalMark: "uuuuu",
},
},
},
},
SellPrice: 321,
Sellers: []SellerArticle{},
Rate: 123,
Remark: "jjjjj",
}
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "pid"}, {Name: "brand"}},
DoUpdates: clause.AssignmentColumns([]string{"name", "english_name", "available", "updated_at"}),
}).Create(&article)
}

41
structs/v2/provider.go Normal file
View File

@ -0,0 +1,41 @@
package v2
import "time"
type ProviderId string
// ProviderArticle 供应商商品信息
type ProviderArticle struct {
ID uint `gorm:"primary_key" json:"-"`
CreatedAt time.Time `json:"createdAt"`
// 对应的商品ID
ArticleID uint
// 货号
Pid string `gorm:"index:provider_pid_brand,unique" json:"pid"`
// 品牌
Brand string `gorm:"index:provider_pid_brand,unique" json:"brand"`
// 供应商商品链接链接
Link string `json:"link"`
// 供应商id
ProviderId ProviderId `gorm:"index:providerId_sku,unique" json:"providerId"`
// 供应商的sku
SkuID string `gorm:"index:providerId_sku,unique" json:"skuID"`
// 当前成本价
Cost ProviderPrice `json:"cost" gorm:"type:json;serializer:json"`
// 历史成本价格
HistoryPrice []ProviderPrice `json:"historyPrice"`
}
// ProviderPrice 供应商成本价格
type ProviderPrice struct {
ID uint `gorm:"primary_key" json:"-"`
CreatedAt time.Time `json:"createdAt"`
ProviderArticleID uint `gorm:"index"`
// 供应商原始价格,美元、人名币、加元,单位为分
OriginalPrice int `json:"originalPrice"`
// 计算优惠后最终价格,人名币,单位为分
FinalPrice int `json:"finalPrice"` // 计算完优惠的最终的价格
CalMark string `json:"calMark"` //计算优惠的过程
}

40
structs/v2/seller.go Normal file
View File

@ -0,0 +1,40 @@
package v2
import "time"
type SellerId string
// SellerArticle 销售商商品信息
type SellerArticle struct {
ID uint `gorm:"primary_key" json:"-"`
CreatedAt time.Time `json:"createdAt"`
// 商品的ID
ArticleID uint
// 货号
Pid string `gorm:"index:seller_pid_brand,unique" json:"pid"`
// 品牌
Brand string `gorm:"index:seller_pid_brand,unique" json:"brand"`
// 销售商商品链接链接
Link string `json:"link"`
// 销售商id
SellerId SellerId `gorm:"index:sellerId_sku,unique" json:"sellerId"`
// 销售商的sku
SkuID string `gorm:"index:sellerId_sku,unique" json:"skuID"`
// 当前成本价
Sell SellerPrice `json:"sell" gorm:"type:json;serializer:json"`
// 历史出售价格
HistoryPrice []SellerPrice `json:"historyPrice"`
}
// SellerPrice 供应商成本价格
type SellerPrice struct {
ID uint `gorm:"primary_key" json:"-"`
CreatedAt time.Time `json:"createdAt"`
SellerArticleID uint `gorm:"index"`
// 出售最低价,单位为分
OriginalPrice int `json:"originalPrice"`
// 能拿到手的最终价格,单位为分
FinalPrice int `json:"finalPrice"`
//计算过程
CalMark string `json:"calMark"`
}