- jd basic api(category, sku, store management) finished.

This commit is contained in:
gazebo
2018-08-30 15:22:26 +08:00
parent 7774fd0995
commit 29d358af5e
12 changed files with 485 additions and 86 deletions

48
business/model/dao/dao.go Normal file
View File

@@ -0,0 +1,48 @@
package dao
import (
"reflect"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals/gormdb"
"github.com/jinzhu/gorm"
)
func GetEntity(item interface{}, db *gorm.DB) error {
if db == nil {
db = gormdb.GetDB()
}
err := utils.CallFuncLogError(func() error {
return db.First(item).Error
}, reflect.TypeOf(item).Name())
return err
}
func GetSellCities(skuNameID int, vendorID int, db *gorm.DB) (cities []*model.Place, err error) {
if db == nil {
db = gormdb.GetDB()
}
sql := `
SELECT DISTINCT t3.*
FROM sku_name_place_bind t1
JOIN place t2 ON t1.place_code = t2.code
JOIN place t3 ON (t2.level = 2 AND t2.code = t3.code) OR (t2.level = 1 AND t2.code = t3.parent_code)
WHERE t1.sku_name_id = ?
`
if vendorID == model.VendorIDJD {
sql += "AND t3.jd_code <> 0\n"
}
rows, err := db.Raw(sql, skuNameID).Rows()
if err == nil {
defer rows.Close()
places := make([]*model.Place, 0)
for rows.Next() {
place := new(model.Place)
db.ScanRows(rows, place)
places = append(places, place)
}
return places, nil
}
return nil, err
}

View File

@@ -1,20 +0,0 @@
package dao
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals/gormdb"
"github.com/jinzhu/gorm"
)
func GetCategory(ID int, db *gorm.DB) (*model.SkuCategory, error) {
if db == nil {
db = gormdb.GetDB()
}
item := &model.SkuCategory{}
item.ID = ID
err := utils.CallFuncLogError(func() error {
return db.First(item).Error
}, "GetCategory")
return item, err
}

View File

@@ -1,20 +0,0 @@
package dao
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals/gormdb"
"github.com/jinzhu/gorm"
)
func GetStore(ID int, db *gorm.DB) (*model.Store, error) {
if db == nil {
db = gormdb.GetDB()
}
item := &model.Store{}
item.ID = ID
err := utils.CallFuncLogError(func() error {
return db.First(item).Error
}, "GetStore")
return item, err
}

View File

@@ -63,9 +63,9 @@ type SkuCategory struct {
Type int8 // 类别类型
Seq int
JdID int `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID
JdID int64 `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID
JdCategoryID int // 这个是指对应的京东商品类别
ElmID string `gorm:"type:varchar(48);index"`
ElmID int64 `gorm:"index"`
MtID string `gorm:"type:varchar(48);index"`
DidiID string `gorm:"type:varchar(48);index"`
}
@@ -84,6 +84,7 @@ type SkuName struct {
Name string `gorm:"type:varchar(255)"`
Comment string `gorm:"type:varchar(255)"`
BrandID int
CategoryID int // 标准类别
Status int
@@ -99,17 +100,16 @@ type Sku struct {
CategoryID int // 特殊类别,一般用于秒杀,特价之类的特殊类别
NameID int `gorm:"index:unique_index_name_Id_quality"` // todo 这个索引应该要求唯一
SpecQuality float32 `gorm:"index:unique_index_name_Id_quality"`
SpecUnit string `gorm:"type:varchar(8)"`
SpecUnit string `gorm:"type:varchar(8)"` // 质量或容量
Weight int // 重量/质量单位为克当相应的SkuName的SpecUnit为g或kg时必须等于SpecQuality
Weight int // 单位为克当相应的SkuName的SpecUnit为g或kg时必须等于SpecQuality
JdID string `gorm:"type:varchar(48)"`
JdID int64
}
type SkuNamePlaceBind struct {
ModelIDCUO
SkuNameID int `gorm:"unique_index:unique_sku_name_id_sku_place_id"`
PlaceID int `gorm:"unique_index:unique_sku_name_id_sku_place_id"`
PlaceCode int `gorm:"unique_index:unique_sku_name_id_sku_place_id"`
}
type StoreSkuBind struct {
@@ -119,5 +119,6 @@ type StoreSkuBind struct {
SubStoreID int
Price int // 单位为分不用int64的原因是这里不需要累加
Status int
ElmID string `gorm:"type:varchar(48)"`
ElmID int64
}

View File

@@ -11,19 +11,29 @@ const (
MainSubStoreAddress = "本店"
)
// 配送范围类型,此定义与京东到家相同,除非特殊说明,本系统中的坐标都是火星坐标
const (
DeliveryRangeTypePolygon = 2
DeliveryRangeTypeRadius = 3
)
type Store struct {
ModelIDCUO
Name string `gorm:"type:varchar(255);unique_index"`
CityCode int
DistrictCode int
Address string `gorm:"type:varchar(255)"`
OpenTime1 int // 930就表示9点半用两个的原因是为了支持中午休息1与2的时间段不能交叉为0表示没有
CloseTime1 int // 格式同上
OpenTime2 int // 格式同上
CloseTime2 int // 格式同上
Lng int // 乘了10的6次方
Lat int // 乘了10的6次方
Status int
Name string `gorm:"type:varchar(255);unique_index"`
CityCode int // todo ?
DistrictCode int // todo ?
Address string `gorm:"type:varchar(255)"`
Tel1 string `gorm:"type:varchar(32)"`
Tel2 string `gorm:"type:varchar(32)"`
OpenTime1 int16 // 930就表示9点半用两个的原因是为了支持中午休息1与2的时间段不能交叉为0表示没有
CloseTime1 int16 // 格式同上
OpenTime2 int16 // 格式同上
CloseTime2 int16 // 格式同上
Lng int // 乘了10的6次方
Lat int // 乘了10的6次方
DeliveryRangeType int8 // 参见相关常量定义
DeliveryRange string `gorm:"type:varchar(2048)"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon则为逗号分隔坐标分号分隔的坐标点坐标与Lng和Lat一样都是整数比如 121361504,31189308;121420555,31150238。否则为半径单位为米
Status int
}
type StoreSub struct {
@@ -32,7 +42,7 @@ type StoreSub struct {
Index int `gorm:"unique_index:unique_index1"` // 子店序号为0表示主店
Name string `gorm:"type:varchar(255)"`
Address string `gorm:"type:varchar(255)"`
Status int
Status int // 取值同Store.Status
Mobile1 string `gorm:"type:varchar(32)"`
Mobile2 string `gorm:"type:varchar(32)"`
Mobile3 string `gorm:"type:varchar(32)"`
@@ -43,7 +53,7 @@ type StoreMap struct {
StoreID int `gorm:"unique_index:storemap1"`
VendorID int `gorm:"unique_index:storemap1"`
VendorStoreID string `gorm:"type:varchar(48);unique_index"`
Status int
Status int // 取值同Store.Status
AutoPickup int8 // 是否自动拣货
DeliveryType int8 // 配送类型