- sku man.

This commit is contained in:
gazebo
2018-09-11 16:20:27 +08:00
parent 70bf5a522a
commit 7f4c125279
15 changed files with 280 additions and 124 deletions

View File

@@ -1,78 +1,14 @@
package cms
import (
"errors"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
)
type VendorSync struct {
}
var (
CurVendorSync VendorSync
)
var (
ErrHaveNotImplementedYet = errors.New("还没有实现")
ErrEntityNotExist = errors.New("找不到相应实体")
)
func GetPurchaseHandler(vendorID int) partner.IPurchasePlatformHandler {
return basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(vendorID)
}
func (v *VendorSync) SyncCategory(categoryID int, isForce bool, userName string) (err error) {
db := dao.GetDB()
cats := []*model.SkuCategory{}
cond := make(map[string]interface{})
if categoryID != 0 {
cond["ID"] = categoryID
}
err = dao.GetEntities(db, &cats, cond, true)
for _, cat := range cats {
if (cat.JdSyncStatus & model.SyncFlagNewMask) != 0 { // 新增
err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName)
} else if (cat.JdSyncStatus&model.SyncFlagModifiedMask) != 0 || isForce { // 修改
err = GetPurchaseHandler(model.VendorIDJD).UpdateCategory(cat, userName)
} else if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 {
err = GetPurchaseHandler(model.VendorIDJD).DeleteCategory(cat, userName)
}
if err == nil {
cat.JdSyncStatus = 0
_, err = dao.UpdateEntity(db, cat, model.FieldJdSyncStatus)
}
if err != nil {
break
}
}
return err
}
func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID int, store *model.Store, isForce bool, userName string) (err error) {
var (
storeMaps []*model.StoreMap
)
if db == nil {
db = dao.GetDB()
}
err = dao.GetEntities(db, &storeMaps, utils.Params2Map(model.FieldStoreID, store.ID), true)
if err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(store, false))
copiedStore := *store
for _, storeMap := range storeMaps {
if (vendorID == -1 || storeMap.VendorID == vendorID) && (isForce || storeMap.SyncStatus != 0) {
copiedStore.Status = mergeStoreStatus(store.Status, storeMap.Status)
if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil {
storeMap.SyncStatus = 0
dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
}
}
}
}
return err
}

View File

@@ -55,7 +55,7 @@ func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCate
cat.JdSyncStatus = model.SyncFlagNewMask
if err = dao.CreateEntity(nil, cat); err == nil {
outCat = cat
err = CurVendorSync.SyncCategory(cat.ID, false, userName)
err = CurVendorSync.SyncCategory(nil, cat.ID, false, userName)
}
return outCat, err
}
@@ -64,10 +64,12 @@ func UpdateCategory(categoryID int, payload map[string]interface{}, userName str
cat := &model.SkuCategory{}
cat.ID = categoryID
valid := dao.NormalMakeMapByStructObject(payload, cat, userName)
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
db := dao.GetDB()
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
err = CurVendorSync.SyncCategory(categoryID, false, userName)
if len(valid) > 0 {
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
db := dao.GetDB()
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
err = CurVendorSync.SyncCategory(db, categoryID, false, userName)
}
}
return num, err
}
@@ -107,7 +109,8 @@ func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, e
cat := &model.SkuCategory{}
cat.ID = categoryID
var countInfos []*struct{ Ct int }
if err = dao.GetRows(nil, &countInfos, `
db := dao.GetDB()
if err = dao.GetRows(db, &countInfos, `
SELECT COUNT(*) ct
FROM sku t1
WHERE t1.category_id = ?
@@ -127,8 +130,8 @@ func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, e
} else if countInfos[2].Ct != 0 {
return 0, errors.New("还有商品类别使用此类别,不能删除")
}
if num, err = dao.DeleteEntity(nil, cat, nil, userName, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask)); err == nil && num == 1 {
err = CurVendorSync.SyncCategory(cat.ID, false, userName)
if num, err = dao.DeleteEntity(db, cat, nil, userName, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask)); err == nil && num == 1 {
err = CurVendorSync.SyncCategory(db, cat.ID, false, userName)
}
}
return num, err
@@ -137,12 +140,12 @@ func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, e
func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *SkuNamesInfo, err error) {
sql := `
FROM sku_name t1
JOIN sku t2 ON t1.id = t2.name_id
WHERE`
LEFT JOIN sku t2 ON t1.id = t2.name_id AND t2.deleted_at = '1970-01-01 00:00:00'
WHERE t1.deleted_at = '1970-01-01 00:00:00'`
sqlParams := make([]interface{}, 0)
if keyword != "" {
keywordLike := "%" + keyword + "%"
sql += " (t1.name LIKE ? OR t1.prefix LIKE ? OR t1.comment LIKE ?"
sql += " AND (t1.name LIKE ? OR t1.prefix LIKE ? OR t1.comment LIKE ?"
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike)
if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil {
@@ -150,8 +153,6 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
sqlParams = append(sqlParams, keywordInt64, keywordInt64, keywordInt64)
}
sql += ")"
} else {
sql += " 1 = 1"
}
if params["id"] != nil {
@@ -252,8 +253,10 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
if err = dao.GetRow(db, countInfo, "SELECT FOUND_ROWS() ct"); err == nil {
skuNamesInfo.TotalCount = countInfo.Ct
for _, skuName := range skuNamesInfo.SkuNames {
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
break
if skuName.SkusStr != "" {
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
break
}
}
}
}
@@ -262,6 +265,9 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
}
func AddSkuName(skuNameExt *SkuNameExt, userName string) (outSkuNameExt *SkuNameExt, err error) {
if skuNameExt.CategoryID == 0 {
return nil, errors.New("CategoryID不能为空")
}
db := dao.GetDB()
dao.Begin(db)
dao.WrapAddIDCULDEntity(&skuNameExt.SkuName, userName)
@@ -271,6 +277,8 @@ func AddSkuName(skuNameExt *SkuNameExt, userName string) (outSkuNameExt *SkuName
}
for _, sku := range skuNameExt.Skus {
dao.WrapAddIDCULDEntity(sku, userName)
sku.NameID = skuNameExt.ID
sku.JdSyncStatus = model.SyncFlagNewMask
if err = dao.CreateEntity(db, sku); err != nil {
dao.Rollback(db)
return nil, err
@@ -285,9 +293,25 @@ func AddSkuName(skuNameExt *SkuNameExt, userName string) (outSkuNameExt *SkuName
return nil, ErrEntityNotExist
}
outSkuNameExt = tmpInfo.SkuNames[0]
err = CurVendorSync.SyncSku(db, &outSkuNameExt.SkuName, -1, false, userName)
return outSkuNameExt, err
}
func UpdateSkuName(skuNameID int, payload map[string]interface{}) (num int64, err error) {
func UpdateSkuName(nameID int, payload map[string]interface{}, userName string) (num int64, err error) {
skuName := &model.SkuName{}
skuName.ID = nameID
valid := dao.NormalMakeMapByStructObject(payload, skuName, userName)
if len(valid) > 0 {
db := dao.GetDB()
if num, err = dao.UpdateEntityByKV(db, skuName, valid, nil); err == nil && num == 1 {
sku := &model.Sku{}
_, err2 := dao.UpdateEntityByKV(db, sku, utils.Params2Map(model.FieldSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldNameID, skuName.ID))
if err = err2; err == nil {
if err = dao.GetEntity(db, skuName); err == nil {
err = CurVendorSync.SyncSku(db, skuName, -1, false, userName)
}
}
}
}
return num, err
}

View File

@@ -8,7 +8,6 @@ import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
)
type StoreExt struct {
@@ -201,13 +200,15 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) (
store := &model.Store{}
store.ID = storeID
valid := dao.NormalMakeMapByStructObject(payload, store, userName)
db := dao.GetDB()
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil {
dummy := &model.StoreMap{}
_, err2 := dao.UpdateEntityByKV(db, dummy, utils.Params2Map(model.FieldSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldStoreID, store.ID))
if err = err2; err == nil {
if err = dao.GetEntity(db, store); err == nil {
err = CurVendorSync.SyncStore(db, -1, store, false, userName)
if len(valid) > 0 {
db := dao.GetDB()
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil && num == 1 {
dummy := &model.StoreMap{}
_, err2 := dao.UpdateEntityByKV(db, dummy, utils.Params2Map(model.FieldSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldStoreID, store.ID))
if err = err2; err == nil {
if err = dao.GetEntity(db, store); err == nil {
err = CurVendorSync.SyncStore(db, -1, store, false, userName)
}
}
}
}
@@ -232,13 +233,15 @@ func GetStoreVendorMaps(db *dao.DaoDB, storeID int, vendorID int) (storeMaps []*
return storeMaps, dao.GetEntities(db, &storeMaps, cond, false)
}
func AddStoreVendorMap(db *dao.DaoDB, storeMap *model.StoreMap, userName string) (outStoreMap *model.StoreMap, err error) {
func AddStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, storeMap *model.StoreMap, userName string) (outStoreMap *model.StoreMap, err error) {
store, err := GetPurchaseHandler(storeMap.VendorID).ReadStore(storeMap.VendorStoreID)
if err == nil {
dao.WrapAddIDCULEntity(storeMap, userName)
storeMap.StoreID = storeID
storeMap.VendorID = vendorID
storeMap.DeliveryType = store.DeliveryType
storeMap.Status = store.Status
storeMap.SyncStatus = model.SyncFlagModifiedMask
storeMap.SyncStatus = model.SyncFlagModifiedMask // 新增绑定门店是修改的概念
if err = dao.CreateEntity(db, storeMap); err == nil {
outStoreMap = storeMap
err = CurVendorSync.SyncStore(db, storeMap.VendorID, store, true, userName)
@@ -265,16 +268,17 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri
if err == nil {
dummyStoreMap := &model.StoreMap{}
valid := dao.NormalMakeMapByStructObject(payload, dummyStoreMap, userName)
if valid["status"] != nil { // 对于store vendor map只有Status改变才需要同步到厂商
valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask
}
globals.SugarLogger.Debug(utils.Format4Output(valid, false))
if num, err = dao.UpdateEntityByKV(db, dummyStoreMap, valid, utils.Params2Map(model.FieldStoreID, storeID, model.FieldVendorID, vendorID)); err == nil {
if valid["status"] != nil {
store := &model.Store{}
store.ID = storeID
if err = dao.GetEntity(db, store); err == nil {
err = CurVendorSync.SyncStore(db, vendorID, store, true, userName)
if len(valid) > 0 {
if valid["status"] != nil { // 对于store vendor map只有Status改变才需要同步到厂商
valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask
}
if num, err = dao.UpdateEntityByKV(db, dummyStoreMap, valid, utils.Params2Map(model.FieldStoreID, storeID, model.FieldVendorID, vendorID)); err == nil {
if valid["status"] != nil {
store := &model.Store{}
store.ID = storeID
if err = dao.GetEntity(db, store); err == nil {
err = CurVendorSync.SyncStore(db, vendorID, store, false, userName)
}
}
}
}

View File

@@ -0,0 +1,92 @@
package cms
import (
"errors"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
)
type VendorSync struct {
}
var (
ErrHaveNotImplementedYet = errors.New("还没有实现")
ErrEntityNotExist = errors.New("找不到相应实体")
)
func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) {
if db == nil {
db = dao.GetDB()
}
var cats []*model.SkuCategory
cond := make(map[string]interface{})
if categoryID > 0 {
cond[model.FieldID] = categoryID
}
if err = dao.GetEntities(db, &cats, cond, true); err == nil {
for _, cat := range cats {
if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 { //删除
err = GetPurchaseHandler(model.VendorIDJD).DeleteCategory(cat, userName)
} else if (cat.JdSyncStatus&model.SyncFlagNewMask) != 0 || isForce { // 新增
err = GetPurchaseHandler(model.VendorIDJD).CreateCategory(cat, userName)
} else if (cat.JdSyncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
err = GetPurchaseHandler(model.VendorIDJD).UpdateCategory(cat, userName)
}
if err == nil {
cat.JdSyncStatus = 0
_, err = dao.UpdateEntity(db, cat, model.FieldJdSyncStatus)
}
if err != nil {
break
}
}
}
return err
}
func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID int, store *model.Store, isForce bool, userName string) (err error) {
if db == nil {
db = dao.GetDB()
}
var storeMapList []*model.StoreMap
if err = dao.GetEntities(db, &storeMapList, utils.Params2Map(model.FieldStoreID, store.ID), true); err == nil {
copiedStore := *store
for _, storeMap := range storeMapList {
if (vendorID == -1 || vendorID == storeMap.VendorID) && (isForce || storeMap.SyncStatus != 0) { // 对于门店,当前只有修改标记
copiedStore.Status = mergeStoreStatus(store.Status, storeMap.Status)
if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil {
storeMap.SyncStatus = 0
dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
}
}
}
}
return err
}
func (v *VendorSync) SyncSku(db *dao.DaoDB, skuName *model.SkuName, skuID int, isForce bool, userName string) (err error) {
if db == nil {
db = dao.GetDB()
}
var skuList []*model.Sku
if err = dao.GetEntities(db, &skuList, utils.Params2Map(model.FieldNameID, skuName.ID), true); err == nil {
for _, sku := range skuList {
if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) {
if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
err = GetPurchaseHandler(model.VendorIDJD).CreateSku(sku, userName)
} else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 新增
err = GetPurchaseHandler(model.VendorIDJD).DeleteSku(sku, userName)
} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
err = GetPurchaseHandler(model.VendorIDJD).UpdateSku(sku, userName)
}
if err == nil {
sku.JdSyncStatus = 0
dao.UpdateEntity(db, sku, model.FieldSyncStatus)
}
}
}
}
return err
}

View File

@@ -0,0 +1,35 @@
package cms
import (
"fmt"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
)
var (
unitNamesMap map[string]int
specUnitNamesMap map[string]int
)
func init() {
unitNamesMap = jxutils.MakeValidationMapFromSlice(model.UnitNames, 1)
specUnitNamesMap = jxutils.MakeValidationMapFromSlice(model.SpecUnitNames, 1)
}
func validateStringInMap(name string, value interface{}, flagMap map[string]int) (err error) {
if strValue, ok := value.(string); ok {
if flagMap[strValue] == 1 {
return nil
}
}
return fmt.Errorf("属性%s类型或取值不合法要求string", name)
}
func ValidateUnit(value interface{}) (err error) {
return validateStringInMap("Unit", value, unitNamesMap)
}
func ValidateSpecUnit(value interface{}) (err error) {
return validateStringInMap("SpecUnit", value, specUnitNamesMap)
}

View File

@@ -331,3 +331,11 @@ func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (vali
func GetObjFieldByName(obj interface{}, fieldName string) interface{} {
return reflect.Indirect(reflect.ValueOf(obj)).FieldByName(fieldName).Interface()
}
func MakeValidationMapFromSlice(validValues []string, flag int) map[string]int {
retVal := make(map[string]int)
for _, v := range validValues {
retVal[v] = flag
}
return retVal
}

View File

@@ -10,20 +10,23 @@ import (
)
func NormalFilterMapByStructObject(mapData map[string]interface{}, obj interface{}) (valid map[string]interface{}, invalid map[string]interface{}) {
return jxutils.FilterMapByStructObject(mapData, obj, []string{"id", "createdAt", "syncStatus", "lastOperator", "updatedAt", "finishedAt"})
// 这里必须用首字母小写因为是用于访问map是用于访问map是需要完全匹配的
return jxutils.FilterMapByStructObject(mapData, obj, []string{"id", "createdAt", "updatedAt", "finishedAt", "deletedAt", "syncStatus", "lastOperator"})
}
func NormalMakeMapByStructObject(mapData map[string]interface{}, obj interface{}, userName string) (retVal map[string]interface{}) {
retVal, _ = NormalFilterMapByStructObject(mapData, obj)
retVal["lastOperator"] = userName
retVal["updatedAt"] = time.Now()
if len(retVal) > 0 {
WrapUpdateULEntity(retVal, userName)
}
return retVal
}
func NormalMakeMapByFieldList(mapData map[string]interface{}, fields []string, userName string) (retVal map[string]interface{}) {
retVal, _ = jxutils.FilterMapByFieldList(mapData, fields)
retVal["lastOperator"] = userName
retVal["updatedAt"] = time.Now()
if len(retVal) > 0 {
WrapUpdateULEntity(retVal, userName)
}
return retVal
}

View File

@@ -17,6 +17,7 @@ const (
FieldVendorID = "VendorID"
FieldStoreID = "StoreID"
FieldVendorStoreID = "VendorStoreID"
FieldNameID = "NameID"
)
type ModelIDCUL struct {

View File

@@ -80,13 +80,12 @@ type SkuCategory struct {
Type int8 `json:"type"` // 类别类型,即是普通类别还是特殊用于做活动的类别
Seq int `json:"seq"`
JdID int64 `orm:"column(jd_id);index" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID
JdCategoryID int `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
JdCategoryID int `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别
EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
JdID int64 `orm:"column(jd_id);index" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
}
func (*SkuCategory) TableUnique() [][]string {
@@ -96,7 +95,7 @@ func (*SkuCategory) TableUnique() [][]string {
}
type SkuName struct {
ModelIDCUL
ModelIDCULD
Prefix string `orm:"size(255)" json:"prefix"`
Name string `orm:"size(255)" json:"name"`
@@ -120,7 +119,7 @@ type SkuName struct {
// }
type Sku struct {
ModelIDCUL
ModelIDCULD
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一
@@ -128,7 +127,8 @@ type Sku struct {
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
Weight int `json:"weight"` // 重量/质量单位为克当相应的SkuName的SpecUnit为g或kg时必须等于SpecQuality
JdID int64 `orm:"column(jd_id)" json:"jdID"`
JdID int64 `orm:"column(jd_id)" json:"jdID"`
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
}
func (*Sku) TableUnique() [][]string {

View File

@@ -71,10 +71,10 @@ type IPurchasePlatformHandler interface {
DeleteCategory(cat *model.SkuCategory, userName string) error
ReorderCategories(parentCat *model.SkuCategory, userName string) (err error)
CreateSku(sku *model.Sku) (err error)
CreateSku(sku *model.Sku, userName string) (err error)
ReadSku(vendorSkuID string) (skuName *model.SkuName, sellPlaces []*model.Place, sku *model.Sku, err error)
UpdateSku(sku *model.Sku) (err error)
DeleteSku(sku *model.Sku) (err error)
UpdateSku(sku *model.Sku, userName string) (err error)
DeleteSku(sku *model.Sku, userName string) (err error)
}
type IDeliveryPlatformHandler interface {

View File

@@ -26,7 +26,7 @@ func (p *PurchaseHandler) ReorderCategories(parentCat *model.SkuCategory, userNa
return nil
}
func (p *PurchaseHandler) CreateSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) CreateSku(sku *model.Sku, userName string) (err error) {
return nil
}
@@ -34,10 +34,10 @@ func (p *PurchaseHandler) ReadSku(vendorSkuID string) (skuName *model.SkuName, s
return nil, nil, nil, nil
}
func (p *PurchaseHandler) UpdateSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) UpdateSku(sku *model.Sku, userName string) (err error) {
return nil
}
func (p *PurchaseHandler) DeleteSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) DeleteSku(sku *model.Sku, userName string) (err error) {
return nil
}

View File

@@ -159,7 +159,7 @@ func (p *PurchaseHandler) cuSku(sku *model.Sku, handler func(skuExt *skuInfoExt,
return err
}
func (p *PurchaseHandler) CreateSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) CreateSku(sku *model.Sku, userName string) (err error) {
return p.cuSku(sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error) {
return api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, skuExt.Price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, 1, true, addParams)
})
@@ -214,7 +214,7 @@ func (p *PurchaseHandler) ReadSku(vendorSkuID string) (skuName *model.SkuName, s
return nil, nil, nil, err
}
func (p *PurchaseHandler) UpdateSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) UpdateSku(sku *model.Sku, userName string) (err error) {
return p.cuSku(sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error) {
params := utils.MergeMaps(addParams)
params["categoryId"] = skuExt.JdCategoryID
@@ -228,7 +228,7 @@ func (p *PurchaseHandler) UpdateSku(sku *model.Sku) (err error) {
})
}
func (p *PurchaseHandler) DeleteSku(sku *model.Sku) (err error) {
func (p *PurchaseHandler) DeleteSku(sku *model.Sku, userName string) (err error) {
if !globals.EnableStoreWrite {
return nil
}

View File

@@ -126,8 +126,8 @@ func (c *SkuController) DeleteCategory() {
})
}
// @Title 得到京西门店信息
// @Description 得到京西门店信息,如下条件之间是与的关系
// @Title 得到商品信息
// @Description 得到商品信息,如下条件之间是与的关系
// @Param token header string true "认证token"
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
// @Param id query int false "SkuName ID"
@@ -151,3 +151,38 @@ func (c *SkuController) GetSkuNames() {
return retVal, "", err
})
}
// @Title 新增商品信息
// @Description 新增商品信息
// @Param token header string true "认证token"
// @Param payload formData string true "json数据SkuNameExt对象()可传Skus"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddSkuName [post]
func (c *SkuController) AddSkuName() {
c.callAddSkuName(func(params *tSkuAddSkuNameParams) (retVal interface{}, errCode string, err error) {
skuName := &cms.SkuNameExt{}
if err = utils.UnmarshalUseNumber([]byte(params.Payload), skuName); err == nil {
retVal, err = cms.AddSkuName(skuName, GetUserNameFromToken(params.Token))
}
return retVal, "", err
})
}
// @Title 修改商品名信息
// @Description 修改商品名信息
// @Param token header string true "认证token"
// @Param nameID formData int true "需要修改的商品名IDpayload中的相应数据会被忽略"
// @Param payload formData string true "json数据SkuNameExt对象()Skus无效"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSkuName [put]
func (c *SkuController) UpdateSkuName() {
c.callUpdateSkuName(func(params *tSkuUpdateSkuNameParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateSkuName(params.NameID, payload, GetUserNameFromToken(params.Token))
}
return retVal, "", err
})
}

View File

@@ -198,6 +198,8 @@ func (c *StoreController) UpdateStoreVendorMap() {
// @Title 新增门店映射信息
// @Description 新增门店映射信息
// @Param token header string true "认证token"
// @Param storeID formData int true "门店IDpayload中的相应字段会被忽略"
// @Param vendorID formData int true "厂商IDpayload中的相应字段会被忽略"
// @Param payload formData string true "json数据storeMap对象({'vendorID':0,'vendorStoreID':'11732425','autoPickup':1,'deliveryCompetition':1, 'pricePercentage':100})"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
@@ -206,7 +208,7 @@ func (c *StoreController) AddStoreVendorMap() {
c.callAddStoreVendorMap(func(params *tStoreAddStoreVendorMapParams) (retVal interface{}, errCode string, err error) {
storeMap := &model.StoreMap{}
if err = utils.UnmarshalUseNumber([]byte(params.Payload), storeMap); err == nil {
retVal, err = cms.AddStoreVendorMap(nil, storeMap, GetUserNameFromToken(params.Token))
retVal, err = cms.AddStoreVendorMap(nil, params.StoreID, params.VendorID, storeMap, GetUserNameFromToken(params.Token))
}
return retVal, "", err
})

View File

@@ -135,6 +135,14 @@ 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: "AddSkuName",
Router: `/AddSkuName`,
AllowHTTPMethods: []string{"post"},
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: "DeleteCategory",
@@ -191,6 +199,14 @@ 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: "UpdateSkuName",
Router: `/UpdateSkuName`,
AllowHTTPMethods: []string{"put"},
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: "AddStoreVendorMap",