diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index ebaef5b20..fd43e485d 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -1,72 +1,9 @@ package cms import ( - "reflect" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/gormdb" - "github.com/qor/admin" - "github.com/qor/qor" - "github.com/qor/qor/resource" + "errors" ) var ( - curAdmin *admin.Admin + ErrHaveNotImplementedYet = errors.New("还没有实现") ) - -func Init() { - gormdb.Init() - curAdmin = admin.New(&admin.AdminConfig{ - DB: gormdb.GetDB(), - SiteName: "京西管理系统v0.0.1", - }) - storeRes := curAdmin.AddResource(&model.Store{}) - lngMeta := storeRes.GetMeta("Lng") - lngMeta.Type = "float" - lngMeta.SetSetter(func(record interface{}, metaValue *resource.MetaValue, context *qor.Context) { - store := record.(*model.Store) - store.Lng = int(utils.Str2Float64((metaValue.Value.([]string))[0]) * 1000000) - globals.SugarLogger.Debugf("metaValue:%v", reflect.TypeOf(metaValue.Value)) - }) - lngMeta.SetValuer(func(record interface{}, context *qor.Context) (result interface{}) { - store := record.(*model.Store) - result = float64(store.Lng) / 1000000 - return result - }) - curAdmin.AddResource(&model.StoreSub{}) - - curAdmin.AddResource(&model.Sku{}) - curAdmin.AddResource(&model.SkuName{}) -} - -func GetAdmin() *admin.Admin { - return curAdmin -} - -// func SaveMapSlice2DB(db *gorm.DB, data []map[string]interface{}, tableName string, keyMaps map[string]string) { -// if len(data) == 0 { -// return -// } - -// sql := "INSERT INTO " + tableName + "(" -// for k := range data[0] { -// realK, ok := keyMaps[k] -// if !ok { -// realK = k -// } -// sql += realK + "," -// } -// sql = sql[:len(sql)-1] + ") " - -// for _, dataRow := range data { -// for k, v := range dataRow { -// realK, ok := keyMaps[k] -// if !ok { -// realK = k -// } -// sql += "(" -// } -// } -// } diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go new file mode 100644 index 000000000..bbea7da17 --- /dev/null +++ b/business/jxstore/cms/sku.go @@ -0,0 +1,19 @@ +package cms + +import ( + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals/gormdb" +) + +func GetVendorCategories(vendorID int) ([]*model.SkuVendorCategory, error) { + db := gormdb.GetDB() + cats := []*model.SkuVendorCategory{} + return cats, db.Where("vendor_id = ?", vendorID).Find(&cats).Error +} + +func GetSkuMetaInfo() (*model.SkuMetaInfo, error) { + return &model.SkuMetaInfo{ + Units: model.UnitNames, + SpecUnits: model.SpecUnitNames, + }, nil +} diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go new file mode 100644 index 000000000..37e272c38 --- /dev/null +++ b/business/jxstore/cms/store.go @@ -0,0 +1,22 @@ +package cms + +import ( + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals/gormdb" +) + +func GetCities(parentCode int, vendorID int, includeDisabled bool) ([]*model.Place, error) { + db := gormdb.GetDB() + places := []*model.Place{} + sql := "enabled = 1 " + if includeDisabled { + sql = "1 = 1 " + } + if vendorID >= 0 { + if vendorID == model.VendorIDJD { + return places, db.Where(sql + "AND jd_code <> 0 AND level >= 2").Find(&places).Error + } + return nil, ErrHaveNotImplementedYet + } + return places, db.Where(sql+"AND parent_code = ?", parentCode).Find(&places).Error +} diff --git a/business/jxstore/qorcms/qorcms.go b/business/jxstore/qorcms/qorcms.go new file mode 100644 index 000000000..c09fb117b --- /dev/null +++ b/business/jxstore/qorcms/qorcms.go @@ -0,0 +1,72 @@ +package qorcms + +import ( + "reflect" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/gormdb" + "github.com/qor/admin" + "github.com/qor/qor" + "github.com/qor/qor/resource" +) + +var ( + curAdmin *admin.Admin +) + +func Init() { + gormdb.Init() + curAdmin = admin.New(&admin.AdminConfig{ + DB: gormdb.GetDB(), + SiteName: "京西管理系统v0.0.1", + }) + storeRes := curAdmin.AddResource(&model.Store{}) + lngMeta := storeRes.GetMeta("Lng") + lngMeta.Type = "float" + lngMeta.SetSetter(func(record interface{}, metaValue *resource.MetaValue, context *qor.Context) { + store := record.(*model.Store) + store.Lng = int(utils.Str2Float64((metaValue.Value.([]string))[0]) * 1000000) + globals.SugarLogger.Debugf("metaValue:%v", reflect.TypeOf(metaValue.Value)) + }) + lngMeta.SetValuer(func(record interface{}, context *qor.Context) (result interface{}) { + store := record.(*model.Store) + result = float64(store.Lng) / 1000000 + return result + }) + curAdmin.AddResource(&model.StoreSub{}) + + curAdmin.AddResource(&model.Sku{}) + curAdmin.AddResource(&model.SkuName{}) +} + +func GetAdmin() *admin.Admin { + return curAdmin +} + +// func SaveMapSlice2DB(db *gorm.DB, data []map[string]interface{}, tableName string, keyMaps map[string]string) { +// if len(data) == 0 { +// return +// } + +// sql := "INSERT INTO " + tableName + "(" +// for k := range data[0] { +// realK, ok := keyMaps[k] +// if !ok { +// realK = k +// } +// sql += realK + "," +// } +// sql = sql[:len(sql)-1] + ") " + +// for _, dataRow := range data { +// for k, v := range dataRow { +// realK, ok := keyMaps[k] +// if !ok { +// realK = k +// } +// sql += "(" +// } +// } +// } diff --git a/business/jxstore/skuman/skuman.go b/business/jxstore/skuman/skuman.go index b3786c138..86161e2a5 100644 --- a/business/jxstore/skuman/skuman.go +++ b/business/jxstore/skuman/skuman.go @@ -1,19 +1 @@ package skuman - -import ( - "git.rosy.net.cn/jx-callback/business/model" -) - -const ( - defJdCategoryID = 20462 -) - -type Sku struct { - *model.Sku -} - -func New(sku *model.Sku) *Sku { - return &Sku{ - Sku: sku, - } -} diff --git a/business/model/api.go b/business/model/api.go index cc9a8fee7..a360d3b9a 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -17,3 +17,8 @@ type GoodsOrderCountInfo struct { Status int `json:"status"` Count int `json:"count"` } + +type SkuMetaInfo struct { + Units []string `json:"units"` + SpecUnits []string `json:"specUnits"` +} diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index ae91610a7..a722ec78f 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -1,14 +1,52 @@ package dao import ( + "fmt" "reflect" - "git.rosy.net.cn/jx-callback/business/model" "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 GetRows(db *gorm.DB, inPtr interface{}, sql string, values ...interface{}) (err error) { + if db == nil { + db = gormdb.GetDB() + } + topTypeInfo := reflect.TypeOf(inPtr) + if topTypeInfo.Kind() != reflect.Ptr { + panic("SelectEntities inPtr should be slice ptr (*[]Type)") + } + typeInfo := topTypeInfo.Elem() + if typeInfo.Kind() != reflect.Slice { + fmt.Printf("type:%s", typeInfo.String()) + panic("SelectEntities inPtr should be slice ptr (*[]Type)") + } + elmType := typeInfo.Elem() + + valueInfo := reflect.ValueOf(inPtr) + rows, err := db.Raw(sql, values...).Rows() + if err == nil { + defer rows.Close() + for rows.Next() { + var value reflect.Value + if elmType.Kind() == reflect.Ptr { + value = reflect.New(elmType.Elem()) + } else { + value = reflect.New(elmType) + } + db.ScanRows(rows, value.Interface()) + if elmType.Kind() != reflect.Ptr { + value = value.Elem() + } + valueInfo.Elem().Set(reflect.Append(valueInfo.Elem(), value)) + } + return nil + } + return err +} + func GetEntity(item interface{}, db *gorm.DB) error { if db == nil { db = gormdb.GetDB() @@ -20,9 +58,7 @@ func GetEntity(item interface{}, db *gorm.DB) error { } func GetSellCities(skuNameID int, vendorID int, db *gorm.DB) (cities []*model.Place, err error) { - if db == nil { - db = gormdb.GetDB() - } + cities = []*model.Place{} sql := ` SELECT DISTINCT t3.* FROM sku_name_place_bind t1 @@ -33,16 +69,5 @@ func GetSellCities(skuNameID int, vendorID int, db *gorm.DB) (cities []*model.Pl 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 + return cities, GetRows(nil, &cities, sql, skuNameID) } diff --git a/business/model/dao/dao_test.go b/business/model/dao/dao_test.go new file mode 100644 index 000000000..7368e868f --- /dev/null +++ b/business/model/dao/dao_test.go @@ -0,0 +1,36 @@ +package dao + +import ( + "testing" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/api" + "git.rosy.net.cn/jx-callback/globals/beegodb" + "git.rosy.net.cn/jx-callback/globals/gormdb" + "github.com/astaxie/beego" +) + +func init() { + beego.InitBeegoBeforeTest("/Users/xujianhua/go/src/git.rosy.net.cn/jx-callback/conf/app.conf") + // beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test + + globals.Init() + beegodb.Init() + gormdb.Init() + api.Init() +} + +func TestSelectEntities(t *testing.T) { + places := []*model.Place{} + GetRows(nil, &places, ` + 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 = ? + `, 40) + + globals.SugarLogger.Debug(utils.Format4Output(places, false)) +} diff --git a/business/model/model.go b/business/model/model.go index 801d5a656..d488b44cd 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -3,22 +3,22 @@ package model import "time" type ModelO struct { - ID int `gorm:"primary_key"` - CreatedAt time.Time - UpdatedAt time.Time + ID int `gorm:"primary_key" json:"id"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` DeletedAt *time.Time `sql:"index"` - LastOperator string `gorm:"type:varchar(32)"` // 最后操作员 + LastOperator string `gorm:"type:varchar(32)" json:"lastOperator"` // 最后操作员 } type ModelIDCU struct { - ID int `gorm:"primary_key"` - CreatedAt time.Time - UpdatedAt time.Time + ID int `gorm:"primary_key" json:"id"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` } type ModelIDCUO struct { - ID int `gorm:"primary_key"` - CreatedAt time.Time - UpdatedAt time.Time - LastOperator string `gorm:"type:varchar(32)"` // 最后操作员 + ID int `gorm:"primary_key" json:"id"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + LastOperator string `gorm:"type:varchar(32)" json:"lastOperator"` // 最后操作员 } diff --git a/business/model/place.go b/business/model/place.go index f5ef018e3..40fc878bb 100644 --- a/business/model/place.go +++ b/business/model/place.go @@ -10,15 +10,15 @@ const ( ) type Place struct { - ID int - Code int `gorm:"unique_index"` // 国家标准代码 - Name string `gorm:"type:varchar(16);index"` // 如果是直辖市,省的概念不加“市”来区别 - ParentCode int // 上级代码 - PostCode string `gorm:"type:varchar(8);index"` - Level int8 // 城市级别,参见相关常量定义 - TelCode string `gorm:"type:varchar(8);index"` - JdCode int `gorm:"index"` // 对应的京东代码 - Enabled int8 // 是否启用 - MtpsPrice int // 分为单位 - UpdatedAt time.Time + ID int `json:"-"` + Code int `gorm:"unique_index" json:"code"` // 国家标准代码 + Name string `gorm:"type:varchar(16);index" json:"name"` // 如果是直辖市,省的概念不加“市”来区别 + ParentCode int `json:"parentCode"` // 上级代码 + PostCode string `gorm:"type:varchar(8);index" json:"postCode"` + Level int8 `json:"level"` // 城市级别,参见相关常量定义 + TelCode string `gorm:"type:varchar(8);index" json:"telCode"` + JdCode int `gorm:"index" json:"jdCode"` // 对应的京东代码 + Enabled int8 `json:"enabled"` // 是否启用 + MtpsPrice int `json:"mtpsPrice"` // 分为单位 + UpdatedAt time.Time `json:"updatedAt"` } diff --git a/business/model/product.go b/business/model/sku.go similarity index 61% rename from business/model/product.go rename to business/model/sku.go index 129aed414..9f7636140 100644 --- a/business/model/product.go +++ b/business/model/sku.go @@ -47,14 +47,18 @@ var ( } ) -// 这个指的是京东自已的商品分类,与商家自己的商品分类是两回事 -type SkuJdCategory struct { +// 这个指的是厂商(比如京东到家,饿百)自已的商品分类,与商家自己的商品分类是两回事 +type SkuVendorCategory struct { ModelIDCUO - Name string `gorm:"type:varchar(255);index"` - Level int - ParentID int + VendorCategoryID string `gorm:"type:varchar(48);unique_index:unique_index_id_vendor_id" json:"vendorCategoryID"` + VendorID int `gorm:"unique_index:unique_index_id_vendor_id" json:"vendorID"` + Name string `gorm:"type:varchar(255);index" json:"name"` + IsLeaf int8 `json:"isLeaf"` + Level int `json:"level"` + ParentID string `gorm:"type:varchar(255);index" json:"parentID"` // 父ID,引用的是VendorCategoryID而不是ID } +// 基础数据,除了商家商品类别外,基本都以京东到家为准 type SkuCategory struct { ModelIDCUO Name string `gorm:"type:varchar(255);unique_index"` @@ -63,19 +67,17 @@ type SkuCategory struct { Type int8 // 类别类型 Seq int - JdID int64 `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID - JdCategoryID int // 这个是指对应的京东商品类别 - ElmID int64 `gorm:"index"` - MtID string `gorm:"type:varchar(48);index"` - DidiID string `gorm:"type:varchar(48);index"` -} + JdID int64 `gorm:"index"` // 这个是指商家自己的商品类别在京东平台上的ID + JdCategoryID int // 这个是指对应的京东商品类别 -type StoreSkuCategoryMap struct { - ModelIDCUO - StoreID int - SkuCategoryID int + // ElmID int64 `gorm:"index"` // 饿了么是单店模式,不需要 + ElmCategoryID int64 // 这个是指对应的饿了么商品类别 - ElmID string `gorm:"type:varchar(48)"` + // EbaiID int64 `gorm:"index"` // 饿百是单店模式,不需要 + EbaiCategoryID int64 // 这个是指对应的饿百商品类别 + + // MtID string `gorm:"type:varchar(48);index"` + // DidiID string `gorm:"type:varchar(48);index"` } type SkuName struct { @@ -84,7 +86,7 @@ type SkuName struct { Name string `gorm:"type:varchar(255)"` Comment string `gorm:"type:varchar(255)"` - BrandID int + BrandID int `gorm:"default:0"` // 此属性暂时没有使用 CategoryID int // 标准类别 Status int @@ -112,6 +114,16 @@ type SkuNamePlaceBind struct { PlaceCode int `gorm:"unique_index:unique_sku_name_id_sku_place_id"` } +// 以下为门店相关数据 +type StoreSkuCategoryMap struct { + ModelIDCUO + StoreID int + SkuCategoryID int + + ElmID int64 `gorm:"index"` + EbaiID int64 `gorm:"index"` +} + type StoreSkuBind struct { ModelIDCUO StoreID int `gorm:"unique_index:unique_store_id_sku_id"` @@ -120,5 +132,6 @@ type StoreSkuBind struct { Price int // 单位为分,不用int64的原因是这里不需要累加 Status int - ElmID int64 + ElmID int64 `gorm:"index"` + EbaiID int64 `gorm:"index"` } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go new file mode 100644 index 000000000..828b4fe79 --- /dev/null +++ b/controllers/cms_sku.go @@ -0,0 +1,37 @@ +package controllers + +import ( + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "github.com/astaxie/beego" +) + +type SkuController struct { + beego.Controller +} + +// @Title 得到厂商商品类别 +// @Description 得到厂商商品类别(区别于商家SKU类别) +// @Param token header string true "认证toke" +// @Param vendorID query int true "厂商ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetVendorCategories [get] +func (c *SkuController) GetVendorCategories() { + c.callGetVendorCategories(func(params *tSkuGetVendorCategoriesParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.GetVendorCategories(params.VendorID) + return retVal, "", err + }) +} + +// @Title 得到商品相关的一些基础信息 +// @Description 得到商品相关的一些基础信息,包括unit列表,specUnit列表 +// @Param token header string true "认证toke" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetSkuMetaInfo [get] +func (c *SkuController) GetSkuMetaInfo() { + c.callGetSkuMetaInfo(func(params *tSkuGetSkuMetaInfoParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.GetSkuMetaInfo() + return retVal, "", err + }) +} diff --git a/controllers/cms_store.go b/controllers/cms_store.go new file mode 100644 index 000000000..9a5f153a6 --- /dev/null +++ b/controllers/cms_store.go @@ -0,0 +1,34 @@ +package controllers + +import ( + "errors" + + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "github.com/astaxie/beego" +) + +type StoreController struct { + beego.Controller +} + +// @Title 得到地点(省,城市,区)信息 +// @Description parentCode与vendorID必传入一个,vendorID的意思是得到所有与这个厂商相关的城市列表 +// @Param token header string true "认证toke" +// @Param parentCode query int false "上级地点code。地点级别:省为1,市为2,区为3,缺省为市" +// @Param vendorID query int false "得到所有与这个厂商相关的省与城市列表" +// @Param includeDisabled query bool false "是否包括禁用的城市" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetCities [get] +func (c *StoreController) GetCities() { + c.callGetCities(func(params *tStoreGetCitiesParams) (retVal interface{}, errCode string, err error) { + if c.GetString("vendorID") == "" { + params.VendorID = -1 // -1表示没有指定,因为0表示京东到家 + } + if params.VendorID == -1 && params.ParentCode == 0 { + return nil, "", errors.New("parentCode与vendorID至少要指定一个") + } + retVal, err = cms.GetCities(params.ParentCode, params.VendorID, params.IncludeDisabled) + return retVal, "", err + }) +} diff --git a/controllers/param_parser.go b/controllers/param_parser.go index 4109f3807..c77ac120c 100644 --- a/controllers/param_parser.go +++ b/controllers/param_parser.go @@ -12,38 +12,41 @@ import ( ) const ( - StrRequiredParamIsEmpty = "参数[%s]为空或数值不合法!" + strRequiredParamIsEmpty = "参数[%s]为空或数值不合法!" ) -type tOrderSelfDeliveredParams struct { +type tStoreGetCitiesParams struct { Token string - VendorOrderID string + ParentCode int VendorID int + IncludeDisabled bool } -// func (c *OrderController) SelfDelivered() { -// c.callSelfDelivered(func(params *tOrderSelfDeliveredParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// func (c *StoreController) GetCities() { +// c.callGetCities(func(params *tStoreGetCitiesParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err // }) // } -func (c *OrderController) callSelfDelivered(handler func(params *tOrderSelfDeliveredParams) (interface{}, string, error)) { +func (c *StoreController) callGetCities(handler func(params *tStoreGetCitiesParams) (interface{}, string, error)) { var err error - params := &tOrderSelfDeliveredParams{} + params := &tStoreGetCitiesParams{} errParams := []string{} params.Token = c.Ctx.Input.Header("token") - params.VendorOrderID = c.GetString("vendorOrderID") + if params.ParentCode, err = c.GetInt("parentCode", 0); err != nil { + errParams = append(errParams, "parentCode") + } if params.VendorID, err = c.GetInt("vendorID", 0); err != nil { errParams = append(errParams, "vendorID") } + if params.IncludeDisabled, err = c.GetBool("includeDisabled", false); err != nil { + errParams = append(errParams, "includeDisabled") + } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } - if params.VendorOrderID == "" { - errParams = append(errParams, "vendorOrderID") - } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -68,20 +71,20 @@ func (c *OrderController) callSelfDelivered(handler func(params *tOrderSelfDeliv c.ServeJSON() } -type tOrderGetOrderSkuInfoParams struct { +type tOrderCreateWaybillOnProvidersParams struct { Token string VendorOrderID string VendorID int } -// func (c *OrderController) GetOrderSkuInfo() { -// c.callGetOrderSkuInfo(func(params *tOrderGetOrderSkuInfoParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// func (c *OrderController) CreateWaybillOnProviders() { +// c.callCreateWaybillOnProviders(func(params *tOrderCreateWaybillOnProvidersParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err // }) // } -func (c *OrderController) callGetOrderSkuInfo(handler func(params *tOrderGetOrderSkuInfoParams) (interface{}, string, error)) { +func (c *OrderController) callCreateWaybillOnProviders(handler func(params *tOrderCreateWaybillOnProvidersParams) (interface{}, string, error)) { var err error - params := &tOrderGetOrderSkuInfoParams{} + params := &tOrderCreateWaybillOnProvidersParams{} errParams := []string{} params.Token = c.Ctx.Input.Header("token") params.VendorOrderID = c.GetString("vendorOrderID") @@ -90,13 +93,66 @@ func (c *OrderController) callGetOrderSkuInfo(handler func(params *tOrderGetOrde errParams = append(errParams, "vendorID") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.VendorOrderID == "" { errParams = append(errParams, "vendorOrderID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) + } + + errCode := "-1" + if err == nil { + result, errCode2, err2 := handler(params) + if err = err2; err == nil { + resultMarshal, _ := json.Marshal(result) + c.Data["json"] = &CallResult{ + Code: "0", + Data: string(resultMarshal), + } + } else if errCode2 != "0" && errCode2 != "" { + errCode = errCode2 + } + } + if err != nil { + c.Data["json"] = &CallResult{ + Code: errCode, + Desc: err.Error(), + } + } + c.ServeJSON() +} + +type tOrderSelfDeliveredParams struct { + Token string + VendorOrderID string + VendorID int +} + +// func (c *OrderController) SelfDelivered() { +// c.callSelfDelivered(func(params *tOrderSelfDeliveredParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err +// }) +// } +func (c *OrderController) callSelfDelivered(handler func(params *tOrderSelfDeliveredParams) (interface{}, string, error)) { + var err error + params := &tOrderSelfDeliveredParams{} + errParams := []string{} + params.Token = c.Ctx.Input.Header("token") + params.VendorOrderID = c.GetString("vendorOrderID") + + if params.VendorID, err = c.GetInt("vendorID", 0); err != nil { + errParams = append(errParams, "vendorID") + } + if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 + err = errors.New("Something wrong!") + } + if params.VendorOrderID == "" { + errParams = append(errParams, "vendorOrderID") + } + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -133,7 +189,7 @@ type tOrderGetStoreOrderInfoParams struct { // func (c *OrderController) GetStoreOrderInfo() { // c.callGetStoreOrderInfo(func(params *tOrderGetStoreOrderInfoParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// return retVal, "", err // }) // } func (c *OrderController) callGetStoreOrderInfo(handler func(params *tOrderGetStoreOrderInfoParams) (interface{}, string, error)) { @@ -159,13 +215,66 @@ func (c *OrderController) callGetStoreOrderInfo(handler func(params *tOrderGetSt errParams = append(errParams, "pageSize") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.StoreID == "" { errParams = append(errParams, "storeID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) + } + + errCode := "-1" + if err == nil { + result, errCode2, err2 := handler(params) + if err = err2; err == nil { + resultMarshal, _ := json.Marshal(result) + c.Data["json"] = &CallResult{ + Code: "0", + Data: string(resultMarshal), + } + } else if errCode2 != "0" && errCode2 != "" { + errCode = errCode2 + } + } + if err != nil { + c.Data["json"] = &CallResult{ + Code: errCode, + Desc: err.Error(), + } + } + c.ServeJSON() +} + +type tOrderGetOrderSkuInfoParams struct { + Token string + VendorOrderID string + VendorID int +} + +// func (c *OrderController) GetOrderSkuInfo() { +// c.callGetOrderSkuInfo(func(params *tOrderGetOrderSkuInfoParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err +// }) +// } +func (c *OrderController) callGetOrderSkuInfo(handler func(params *tOrderGetOrderSkuInfoParams) (interface{}, string, error)) { + var err error + params := &tOrderGetOrderSkuInfoParams{} + errParams := []string{} + params.Token = c.Ctx.Input.Header("token") + params.VendorOrderID = c.GetString("vendorOrderID") + + if params.VendorID, err = c.GetInt("vendorID", 0); err != nil { + errParams = append(errParams, "vendorID") + } + if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 + err = errors.New("Something wrong!") + } + if params.VendorOrderID == "" { + errParams = append(errParams, "vendorOrderID") + } + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -199,7 +308,7 @@ type tOrderGetOrderInfoParams struct { // func (c *OrderController) GetOrderInfo() { // c.callGetOrderInfo(func(params *tOrderGetOrderInfoParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// return retVal, "", err // }) // } func (c *OrderController) callGetOrderInfo(handler func(params *tOrderGetOrderInfoParams) (interface{}, string, error)) { @@ -216,13 +325,13 @@ func (c *OrderController) callGetOrderInfo(handler func(params *tOrderGetOrderIn errParams = append(errParams, "refresh") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.VendorOrderID == "" { errParams = append(errParams, "vendorOrderID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -247,35 +356,30 @@ func (c *OrderController) callGetOrderInfo(handler func(params *tOrderGetOrderIn c.ServeJSON() } -type tOrderSelfDeliveringParams struct { +type tSkuGetVendorCategoriesParams struct { Token string - VendorOrderID string VendorID int } -// func (c *OrderController) SelfDelivering() { -// c.callSelfDelivering(func(params *tOrderSelfDeliveringParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// func (c *SkuController) GetVendorCategories() { +// c.callGetVendorCategories(func(params *tSkuGetVendorCategoriesParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err // }) // } -func (c *OrderController) callSelfDelivering(handler func(params *tOrderSelfDeliveringParams) (interface{}, string, error)) { +func (c *SkuController) callGetVendorCategories(handler func(params *tSkuGetVendorCategoriesParams) (interface{}, string, error)) { var err error - params := &tOrderSelfDeliveringParams{} + params := &tSkuGetVendorCategoriesParams{} errParams := []string{} params.Token = c.Ctx.Input.Header("token") - params.VendorOrderID = c.GetString("vendorOrderID") if params.VendorID, err = c.GetInt("vendorID", 0); err != nil { errParams = append(errParams, "vendorID") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } - if params.VendorOrderID == "" { - errParams = append(errParams, "vendorOrderID") - } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -308,7 +412,7 @@ type tOrderFinishedPickupParams struct { // func (c *OrderController) FinishedPickup() { // c.callFinishedPickup(func(params *tOrderFinishedPickupParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// return retVal, "", err // }) // } func (c *OrderController) callFinishedPickup(handler func(params *tOrderFinishedPickupParams) (interface{}, string, error)) { @@ -322,13 +426,13 @@ func (c *OrderController) callFinishedPickup(handler func(params *tOrderFinished errParams = append(errParams, "vendorID") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.VendorOrderID == "" { errParams = append(errParams, "vendorOrderID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -353,20 +457,20 @@ func (c *OrderController) callFinishedPickup(handler func(params *tOrderFinished c.ServeJSON() } -type tOrderCreateWaybillOnProvidersParams struct { +type tOrderSelfDeliveringParams struct { Token string VendorOrderID string VendorID int } -// func (c *OrderController) CreateWaybillOnProviders() { -// c.callCreateWaybillOnProviders(func(params *tOrderCreateWaybillOnProvidersParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// func (c *OrderController) SelfDelivering() { +// c.callSelfDelivering(func(params *tOrderSelfDeliveringParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err // }) // } -func (c *OrderController) callCreateWaybillOnProviders(handler func(params *tOrderCreateWaybillOnProvidersParams) (interface{}, string, error)) { +func (c *OrderController) callSelfDelivering(handler func(params *tOrderSelfDeliveringParams) (interface{}, string, error)) { var err error - params := &tOrderCreateWaybillOnProvidersParams{} + params := &tOrderSelfDeliveringParams{} errParams := []string{} params.Token = c.Ctx.Input.Header("token") params.VendorOrderID = c.GetString("vendorOrderID") @@ -375,13 +479,13 @@ func (c *OrderController) callCreateWaybillOnProviders(handler func(params *tOrd errParams = append(errParams, "vendorID") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.VendorOrderID == "" { errParams = append(errParams, "vendorOrderID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -414,7 +518,7 @@ type tOrderGetStoreOrderCountInfoParams struct { // func (c *OrderController) GetStoreOrderCountInfo() { // c.callGetStoreOrderCountInfo(func(params *tOrderGetStoreOrderCountInfoParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// return retVal, "", err // }) // } func (c *OrderController) callGetStoreOrderCountInfo(handler func(params *tOrderGetStoreOrderCountInfoParams) (interface{}, string, error)) { @@ -428,13 +532,13 @@ func (c *OrderController) callGetStoreOrderCountInfo(handler func(params *tOrder errParams = append(errParams, "lastHours") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.StoreID == "" { errParams = append(errParams, "storeID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" @@ -467,7 +571,7 @@ type tOrderGetOrderWaybillInfoParams struct { // func (c *OrderController) GetOrderWaybillInfo() { // c.callGetOrderWaybillInfo(func(params *tOrderGetOrderWaybillInfoParams) (retVal interface{}, errCode string, err error) { -// return retVal, "", err +// return retVal, "", err // }) // } func (c *OrderController) callGetOrderWaybillInfo(handler func(params *tOrderGetOrderWaybillInfoParams) (interface{}, string, error)) { @@ -481,13 +585,57 @@ func (c *OrderController) callGetOrderWaybillInfo(handler func(params *tOrderGet errParams = append(errParams, "vendorID") } if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 - err = errors.New("something wrong!") + err = errors.New("Something wrong!") } if params.VendorOrderID == "" { errParams = append(errParams, "vendorOrderID") } - if err == nil && len(errParams) > 0 { - err = fmt.Errorf(StrRequiredParamIsEmpty, strings.Join(errParams, ",")) + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) + } + + errCode := "-1" + if err == nil { + result, errCode2, err2 := handler(params) + if err = err2; err == nil { + resultMarshal, _ := json.Marshal(result) + c.Data["json"] = &CallResult{ + Code: "0", + Data: string(resultMarshal), + } + } else if errCode2 != "0" && errCode2 != "" { + errCode = errCode2 + } + } + if err != nil { + c.Data["json"] = &CallResult{ + Code: errCode, + Desc: err.Error(), + } + } + c.ServeJSON() +} + +type tSkuGetSkuMetaInfoParams struct { + Token string +} + +// func (c *SkuController) GetSkuMetaInfo() { +// c.callGetSkuMetaInfo(func(params *tSkuGetSkuMetaInfoParams) (retVal interface{}, errCode string, err error) { +// return retVal, "", err +// }) +// } +func (c *SkuController) callGetSkuMetaInfo(handler func(params *tSkuGetSkuMetaInfoParams) (interface{}, string, error)) { + var err error + params := &tSkuGetSkuMetaInfoParams{} + errParams := []string{} + params.Token = c.Ctx.Input.Header("token") + + if params.Token == "" { // 对于token缺失,报一个模糊的错误信息 + err = errors.New("Something wrong!") + } + if len(errParams) > 0 { + err = fmt.Errorf(strRequiredParamIsEmpty, strings.Join(errParams, ",")) } errCode := "-1" diff --git a/cpauto.sh b/gen_param_parser.sh similarity index 76% rename from cpauto.sh rename to gen_param_parser.sh index e4e6d576d..7e973a568 100755 --- a/cpauto.sh +++ b/gen_param_parser.sh @@ -1 +1,2 @@ +bee generate docs cp swagger/param_parser.go.txt controllers/param_parser.go diff --git a/globals/gormdb/gormdb.go b/globals/gormdb/gormdb.go index 03e96fd98..21e49f6a3 100644 --- a/globals/gormdb/gormdb.go +++ b/globals/gormdb/gormdb.go @@ -31,10 +31,10 @@ func AutoMigrate() { // db.DropTableIfExists(&model.Place{}) // db.DropTableIfExists(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}) - // db.DropTableIfExists(&model.SkuCategory{}, &model.SkuJdCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) + // db.DropTableIfExists(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}, &model.SkuCategory{}) db.AutoMigrate(&model.Place{}) db.AutoMigrate(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}) - db.AutoMigrate(&model.SkuJdCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) + db.AutoMigrate(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&model.SkuCategory{}) } diff --git a/main.go b/main.go index 51a70d28a..a12934e9c 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,7 @@ import ( "os" "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" - "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxstore/qorcms" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "git.rosy.net.cn/jx-callback/globals/beegodb" @@ -87,9 +87,9 @@ func main() { orderman.LoadPendingOrders() } if beego.AppConfig.DefaultBool("enableStore", false) { - cms.Init() + qorcms.Init() mux := http.NewServeMux() - curAdmin := cms.GetAdmin() + curAdmin := qorcms.GetAdmin() curAdmin.MountTo("/admin", mux) beego.Handler("/admin/*", mux) } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index aced310ca..6cae713ac 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -79,4 +79,28 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "GetSkuMetaInfo", + Router: `/GetSkuMetaInfo`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Params: nil}) + + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "GetVendorCategories", + Router: `/GetVendorCategories`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Params: nil}) + + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"], + beego.ControllerComments{ + Method: "GetCities", + Router: `/GetCities`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Params: nil}) + } diff --git a/routers/router.go b/routers/router.go index ec0c4455b..06882740a 100644 --- a/routers/router.go +++ b/routers/router.go @@ -21,6 +21,16 @@ func init() { &controllers.OrderController{}, ), ), + beego.NSNamespace("/sku", + beego.NSInclude( + &controllers.SkuController{}, + ), + ), + beego.NSNamespace("/store", + beego.NSInclude( + &controllers.StoreController{}, + ), + ), ) beego.AddNamespace(ns)