|
|
package data
|
|
|
|
|
|
import (
|
|
|
"gorm.io/driver/mysql"
|
|
|
"gorm.io/gorm"
|
|
|
"gorm.io/gorm/clause"
|
|
|
"valuation/internal/biz"
|
|
|
"valuation/internal/conf"
|
|
|
|
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
|
"github.com/google/wire"
|
|
|
)
|
|
|
|
|
|
// ProviderSet is data providers.
|
|
|
var ProviderSet = wire.NewSet(NewData, NewGreeterRepo, NewPriceRuleInterface)
|
|
|
|
|
|
// Data .
|
|
|
type Data struct {
|
|
|
// TODO wrapped database client
|
|
|
// 操作MySQL的客户端
|
|
|
Mdb *gorm.DB
|
|
|
}
|
|
|
|
|
|
// NewData .
|
|
|
func NewData(c *conf.Data, logger log.Logger) (*Data, func(), error) {
|
|
|
data := &Data{}
|
|
|
// 初始Mdb
|
|
|
// 连接mysql,使用配置
|
|
|
dsn := c.Database.Source
|
|
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
|
if err != nil {
|
|
|
data.Mdb = nil
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
data.Mdb = db
|
|
|
// 三,开发阶段,自动迁移表。发布阶段,表结构稳定,不需要migrate.
|
|
|
migrateTable(db)
|
|
|
|
|
|
cleanup := func() {
|
|
|
log.NewHelper(logger).Info("closing the data resources")
|
|
|
}
|
|
|
return data, cleanup, nil
|
|
|
}
|
|
|
|
|
|
func migrateTable(db *gorm.DB) {
|
|
|
if err := db.AutoMigrate(&biz.PriceRule{}); err != nil {
|
|
|
log.Info("price_rule table migrate error, err:", err)
|
|
|
}
|
|
|
// 插入一些riceRule的测试数据
|
|
|
rules := []biz.PriceRule{
|
|
|
{
|
|
|
Model: gorm.Model{ID: 1},
|
|
|
PriceRuleWork: biz.PriceRuleWork{
|
|
|
CityID: 1,
|
|
|
StartFee: 300,
|
|
|
DistanceFee: 35,
|
|
|
DurationFee: 10, // 5m
|
|
|
StartAt: 7,
|
|
|
EndAt: 23,
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
Model: gorm.Model{ID: 2},
|
|
|
PriceRuleWork: biz.PriceRuleWork{
|
|
|
CityID: 1,
|
|
|
StartFee: 350,
|
|
|
DistanceFee: 35,
|
|
|
DurationFee: 10, // 5m
|
|
|
StartAt: 23,
|
|
|
EndAt: 24,
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
Model: gorm.Model{ID: 3},
|
|
|
PriceRuleWork: biz.PriceRuleWork{
|
|
|
CityID: 1,
|
|
|
StartFee: 400,
|
|
|
DistanceFee: 35,
|
|
|
DurationFee: 10, // 5m
|
|
|
StartAt: 0,
|
|
|
EndAt: 7,
|
|
|
},
|
|
|
},
|
|
|
}
|
|
|
db.Clauses(clause.OnConflict{UpdateAll: true}).Create(rules)
|
|
|
}
|