- remove partner.GetFieldIDName and partner.GetFieldSyncStatusName (use dao.GetXXXField instead)

- mtwm.UpdateStore
- mtwm.SyncStoreCategory
This commit is contained in:
gazebo
2018-11-24 12:20:46 +08:00
parent 033f5670a9
commit fc96161c3b
23 changed files with 388 additions and 74 deletions

View File

@@ -443,7 +443,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
storeSkuBind := &model.StoreSkuBind{}
if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, storeSkuBind, nil, userName, map[string]interface{}{
model.FieldStoreID: storeID,
}, storeHandler.GetFieldSyncStatusName()); err != nil {
}, dao.GetSyncStatusStructField(model.VendorNames[vendorID])); err != nil {
return 0, err
}
dao.Commit(db)

View File

@@ -127,7 +127,7 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan
}
func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, multiStoresHandler partner.IMultipleStoresHandler, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) {
syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName()
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
task := tasksch.NewParallelTask("syncCategories", nil, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
cat := batchItemList[0].(*model.SkuCategory)
updateFields := []string{syncStatusFieldName}
@@ -136,7 +136,7 @@ func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.I
err = multiStoresHandler.DeleteCategory(db, cat, userName)
} else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增
err = multiStoresHandler.CreateCategory(db, cat, userName)
updateFields = append(updateFields, multiStoresHandler.GetFieldIDName())
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
} else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
err = multiStoresHandler.UpdateCategory(db, cat, userName)
}
@@ -186,7 +186,7 @@ func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
if err2 == nil {
cat := &model.SkuCategory{}
_, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(multiStoresHandler.GetFieldSyncStatusName(), 0), utils.Params2Map(model.FieldParentID, categoryID))
_, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]), 0), utils.Params2Map(model.FieldParentID, categoryID))
return nil, err2
}
return nil, err2
@@ -233,7 +233,7 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, userName:%s", nameID, skuID, userName)
return v.LoopMultiStoresVendors(ctx, db, "SyncSku", isAsync, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int))
syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName()
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
var skuList []*model.Sku
cond := make(map[string]interface{})
if nameID != -1 {
@@ -254,7 +254,7 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
err = multiStoresHandler.DeleteSku(db, sku, userName)
} else if syncStatus&model.SyncFlagNewMask != 0 { // 新增
err = multiStoresHandler.CreateSku(db, sku, userName)
updateFields = append(updateFields, multiStoresHandler.GetFieldIDName())
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
} else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改
err = multiStoresHandler.UpdateSku(db, sku, userName)
}

View File

@@ -19,12 +19,12 @@ const (
var (
VendorNames = map[int]string{
VendorIDJD: "JD",
VendorIDMTWM: "MT",
VendorIDELM: "ELEME",
VendorIDEBAI: "EBAI",
VendorIDJD: "Jd",
VendorIDMTWM: "Mtwm",
VendorIDELM: "Elm",
VendorIDEBAI: "Ebai",
VendorIDDada: "Dada",
VendorIDMTPS: "MTPS",
VendorIDMTPS: "Mtps",
}
VendorChineseNames = map[int]string{
VendorIDJD: "京东到家",

View File

@@ -2,6 +2,7 @@ package dao
import (
"reflect"
"strings"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -81,3 +82,51 @@ func GenQuestionMarks(count int) string {
}
return marks
}
func ConvertStructFieldPrefix(prefix string) string {
return prefix
}
func ConvertJsonFieldPrefix(prefix string) string {
return strings.ToLower(prefix)
}
func ConvertDBFieldPrefix(prefix string) string {
return strings.ToLower(prefix)
}
func GetVendorThingIDStructField(prefix string) string {
return ConvertStructFieldPrefix(prefix) + "ID"
}
func GetVendorThingIDJsonField(prefix string) string {
return ConvertJsonFieldPrefix(prefix) + "ID"
}
func GetVendorThingIDDBField(prefix string) string {
return ConvertDBFieldPrefix(prefix) + "_id"
}
func GetSyncStatusStructField(prefix string) string {
return ConvertStructFieldPrefix(prefix) + "SyncStatus"
}
func GetSyncStatusJsonField(prefix string) string {
return ConvertJsonFieldPrefix(prefix) + "SyncStatus"
}
func GetSyncStatusDBField(prefix string) string {
return ConvertDBFieldPrefix(prefix) + "_sync_status"
}
func GetCategoryIDStructField(prefix string) string {
return ConvertStructFieldPrefix(prefix) + "CategoryID"
}
func GetCategoryIDJsonField(prefix string) string {
return ConvertJsonFieldPrefix(prefix) + "CategoryID"
}
func GetCategoryIDDBField(prefix string) string {
return ConvertDBFieldPrefix(prefix) + "_category_id"
}

View File

@@ -0,0 +1,30 @@
package dao
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
type StoreDetail struct {
model.Store
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
VendorStatus int `json:"vendor_status"` // 取值同Store.Status
DeliveryFee int `json:"deliveryFee"`
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
model.Place // district info
}
func GetStoreDetail(db *DaoDB, storeID, vendorID int) (storeDetail *StoreDetail, err error) {
sql := `
SELECT t2.status vendor_status, t2.vendor_store_id, t2.sync_status, district.*, t1.*
FROM store t1
JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ?
LEFT JOIN place district ON t1.district_code = district.code
WHERE t1.id = ? AND t1.deleted_at = ?
`
storeDetail = &StoreDetail{}
if err = GetRow(db, storeDetail, sql, vendorID, utils.DefaultTimeValue, storeID, utils.DefaultTimeValue); err == nil {
return storeDetail, nil
}
return nil, err
}

View File

@@ -0,0 +1,87 @@
package dao
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
type SkuStoreCatInfo struct {
model.SkuCategory
CatID int `orm:"column(cat_id)"` // 这个主要用于判断是否有store_sku_category_map
VendorCatID string `orm:"column(vendor_cat_id)"`
CatSyncStatus int8
ParentCatName string
ParentCatID int `orm:"column(parent_cat_id)"` // 这个主要用于判断是否有父store_sku_category_map
ParentVendorCatID string `orm:"column(parent_vendor_cat_id)"`
ParentCatSyncStatus int8
}
type StoreCatSyncInfo struct {
CatName string
Seq int `json:"seq"`
model.StoreSkuCategoryMap
ParentCatName string
ParentCatID int `orm:"column(parent_cat_id)"` // 这个主要用于判断是否有父store_sku_category_map
ParentVendorCatID string `orm:"column(parent_vendor_cat_id)"`
ParentCatSyncStatus int8
}
func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) {
sql := `
SELECT DISTINCT t4.*, t5.category_id cat_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.category_id parent_cat_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id
JOIN sku_name t3 ON t2.name_id = t3.id
`
if level == 2 {
sql += `
JOIN sku_category t4 ON (t3.category_id = t4.id OR t2.category_id = t4.id)
`
} else {
sql += `
JOIN sku_category t4c ON (t3.category_id = t4c.id OR t2.category_id = t4c.id)
JOIN sku_category t4 ON t4.id = t4c.parent_id
`
}
sql += `
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id
LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5p.store_id = t1.store_id AND t5p.deleted_at = ?
WHERE t1.store_id = ?
`
sqlParams := []interface{}{
storeID,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
}
if len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql = fmt.Sprintf(sql, filedPrefix, filedPrefix, filedPrefix, filedPrefix)
if err = GetRows(db, &cats, sql, sqlParams...); err != nil {
return nil, err
}
return cats, err
}
func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*StoreCatSyncInfo, err error) {
filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql := fmt.Sprintf(`
SELECT t5.*, t4.name cat_name, t4.seq, t4p.name parent_cat_name, t5p.category_id parent_cat_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
FROM store_sku_category_map t5
JOIN sku_category t4 ON t5.category_id = t4.id
JOIN sku_category t4p ON t4.parent_id = t4p.id
JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5p.deleted_at = ?
WHERE t5.store_id = ? AND t5.level = ? AND t5.%s_sync_status <> 0
`, filedPrefix, filedPrefix, filedPrefix)
if err = GetRows(db, &cats, sql, utils.DefaultTimeValue, storeID, level); err != nil {
return nil, err
}
return cats, err
}

View File

@@ -134,6 +134,7 @@ type SkuCategory struct {
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"` // 这个是指对应的饿百商品类别
MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别
JdID int64 `orm:"column(jd_id);null" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`

View File

@@ -165,9 +165,10 @@ type StoreMap struct {
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
Status int `json:"status"` // 取值同Store.Status
PricePercentage int16 `orm:"default(100)" json:"pricePercentage"` // todo 厂商价格相对于本地价格的百分比,这个字段的修改会比较特殊,因为可能需要刷新厂商价格
AutoPickup int8 `orm:"default(1)" json:"autoPickup"` // 是否自动拣货
DeliveryType int8 `orm:"default(0)" json:"deliveryType"` // 配送类型
PricePercentage int16 `orm:"default(100)" json:"pricePercentage"` // todo 厂商价格相对于本地价格的百分比,这个字段的修改会比较特殊,因为可能需要刷新厂商价格
AutoPickup int8 `orm:"default(1)" json:"autoPickup"` // 是否自动拣货
DeliveryType int8 `orm:"default(0)" json:"deliveryType"` // 配送类型
DeliveryFee int `json:"deliveryFee"`
DeliveryCompetition int8 `orm:"default(1)" json:"deliveryCompetition"` // 是否支持配送竞争
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`

View File

@@ -16,11 +16,13 @@ type StoreSkuCategoryMap struct {
StoreID int `orm:"column(store_id)"`
CategoryID int `orm:"column(category_id)"`
ElmID int64 `orm:"column(elm_id);index"`
EbaiID int64 `orm:"column(ebai_id);index"`
ElmID int64 `orm:"column(elm_id);index"`
EbaiID int64 `orm:"column(ebai_id);index"`
MtwmID string `orm:"column(mtwm_id);size(16)"` // 美团外卖没有ID保存名字
ElmSyncStatus int8
EbaiSyncStatus int8
MtwmSyncStatus int8
}
func (*StoreSkuCategoryMap) TableUnique() [][]string {

View File

@@ -113,7 +113,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, policy func(del
billParams.ReceiverLng, billParams.ReceiverLat, _ = jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
addParams := map[string]interface{}{
"info": utils.FilterMb4(order.BuyerComment),
// "origin_mark": model.VendorNames[order.VendorID],
// "origin_mark": model.VendorChineseNames[order.VendorID],
"origin_mark_no": fmt.Sprintf("%d", order.OrderSeq),
"cargo_type": 13,
"cargo_weight": jxutils.IntWeight2Float(order.Weight),

View File

@@ -90,8 +90,6 @@ type IPurchasePlatformHandler interface {
RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error)
GetVendorID() int
GetFieldIDName() string
GetFieldSyncStatusName() string
}
// db *dao.DaoDB,

View File

@@ -34,14 +34,6 @@ type tEbaiStoreInfo struct {
DistrictID int `orm:"column(district_id)"`
}
func (p *PurchaseHandler) GetFieldIDName() string {
return model.FieldEbaiID
}
func (p *PurchaseHandler) GetFieldSyncStatusName() string {
return model.FieldEbaiSyncStatus
}
func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
var store tEbaiStoreInfo
sql := `

View File

@@ -9,14 +9,6 @@ import (
"git.rosy.net.cn/jx-callback/business/model/dao"
)
func (p *PurchaseHandler) GetFieldIDName() string {
return model.FieldElmID
}
func (p *PurchaseHandler) GetFieldSyncStatusName() string {
return model.FieldElmSyncStatus
}
func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) {
return nil, errors.New("饿了么还没实现")
}

View File

@@ -30,14 +30,6 @@ type tJdStoreInfo struct {
SyncStatus int
}
func (p *PurchaseHandler) GetFieldIDName() string {
return model.FieldJdID
}
func (p *PurchaseHandler) GetFieldSyncStatusName() string {
return model.FieldJdSyncStatus
}
func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) {
result, err := api.JdAPI.GetStoreInfoByStationNo(vendorStoreID)
if err == nil {

View File

@@ -9,6 +9,7 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals/api"
)
var (
@@ -28,6 +29,48 @@ func (c *PurchaseHandler) GetVendorID() int {
return model.VendorIDMTWM
}
func (p *PurchaseHandler) GetVendorCategories() (vendorCats []*model.SkuVendorCategory, err error) {
cats, err := api.MtwmAPI.RetailGetSpTagIds()
if err != nil {
return nil, err
}
vendorCatMapList := make([]map[string]*model.SkuVendorCategory, 3)
manID := 10000
for i := 0; i < 3; i++ {
vendorCatMapList[i] = make(map[string]*model.SkuVendorCategory)
for _, v := range cats {
if utils.MustInterface2Int64(v["level"]) == 3 {
namePathList := strings.Split(strings.Trim(utils.Interface2String(v["namePath"]), ","), ",")
if len(namePathList) != 3 {
panic(fmt.Sprintf("%s没有三级结构", v["namePath"]))
}
name := namePathList[i]
if _, ok := vendorCatMapList[i][name]; !ok {
cat := &model.SkuVendorCategory{
VendorID: model.VendorIDMTWM,
Name: utils.Interface2String(v["name"]),
Level: int(utils.MustInterface2Int64(v["level"])),
}
cat.LastOperator = "builder"
vendorCats = append(vendorCats, cat)
vendorCatMapList[i][name] = cat
if i == 2 {
cat.IsLeaf = int8(1)
cat.VendorCategoryID = utils.Int64ToStr(utils.MustInterface2Int64(v["id"]))
} else {
cat.VendorCategoryID = utils.Int2Str(manID) // 非叶子结点编码没有实际使用
manID++
}
if i > 0 {
cat.ParentID = vendorCatMapList[i-1][namePathList[i-1]].VendorCategoryID
}
}
}
}
}
return vendorCats, nil
}
func rangeMtwm2JX(areaStr string) string {
var area []interface{}
if err := utils.UnmarshalUseNumber([]byte(areaStr), &area); err == nil {

View File

@@ -1,6 +1,9 @@
package mtwm
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
_ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
@@ -16,3 +19,11 @@ func init() {
beegodb.Init()
api.Init()
}
func TestGetVendorCategories(t *testing.T) {
result, err := new(PurchaseHandler).GetVendorCategories()
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}

View File

@@ -30,18 +30,6 @@ type tEbaiStoreInfo struct {
DistrictID int `orm:"column(district_id)"`
}
func (p *PurchaseHandler) GetFieldIDName() string {
return model.FieldMtwmID
}
func (p *PurchaseHandler) GetFieldSyncStatusName() string {
return model.FieldMtwmSyncStatus
}
func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
return vendorStoreID, err
}
func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) {
result, err := api.MtwmAPI.PoiGet(vendorStoreID)
if err == nil {
@@ -93,28 +81,38 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error)
}
return nil, err
}
func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
return p.UpdateStore(db, storeID, userName)
}
func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
type StoreAndVendorInfo struct {
model.Store
model.StoreMap
}
var store StoreAndVendorInfo
sql := `
SELECT *
FROM store t1
JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ? OR t2.sync_status <> 0)
LEFT JOIN place city ON t1.city_code = city.code
LEFT JOIN place district ON t1.district_code = district.code
WHERE t1.id = ?
ORDER BY t2.updated_at
`
if db == nil {
db = dao.GetDB()
}
if err = dao.GetRow(db, &store, sql, model.VendorIDJD, utils.DefaultTimeValue, storeID); err == nil {
globals.SugarLogger.Debug(utils.Format4Output(store, false))
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM)
if err != nil {
return err
}
openTime := [][2]int16{[2]int16{storeDetail.OpenTime1, storeDetail.CloseTime1}}
if storeDetail.OpenTime2 > 0 {
openTime = append(openTime, [2]int16{storeDetail.OpenTime2, storeDetail.CloseTime2})
}
params := map[string]interface{}{
"name": storeDetail.Store.Name,
"address": storeDetail.Address,
"longitude": jxutils.IntCoordinate2Standard(storeDetail.Lng),
"latitude": jxutils.IntCoordinate2Standard(storeDetail.Lat),
"phone": storeDetail.Tel1,
"shipping_fee": jxutils.IntPrice2Standard(int64(storeDetail.DeliveryFee)),
"shipping_time": openTimeJX2Mtwm(openTime),
"third_tag_name": "蔬菜",
}
params["open_level"], params["is_online"] = bizStatusJX2Mtwm(jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus))
globals.SugarLogger.Debug(utils.Format4Output(params, false))
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite {
err = api.MtwmAPI.PoiSave(utils.Int2Str(storeDetail.Store.ID), params)
}
return nil
}
func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {

View File

@@ -0,0 +1,87 @@
package mtwm
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync bool) (hint string, err error) {
userName := ctx.GetUserName()
strStoreID := utils.Int2Str(storeID)
db := dao.GetDB()
rootTask := tasksch.NewSeqTask("mtwm SyncStoreCategory", userName, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
level := step + 1
catList, err := dao.GetStoreCategories(db, model.VendorIDMTWM, storeID, level)
task := tasksch.NewParallelTask("mtwm SyncStoreCategory2", nil, userName, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
updateFields := []string{dao.GetSyncStatusStructField(model.VendorNames[model.VendorIDMTWM])}
catInfo := batchItemList[0].(*dao.StoreCatSyncInfo)
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite {
if catInfo.MtwmSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
err = api.MtwmAPI.RetailCatDelete(strStoreID, catInfo.MtwmID)
} else if catInfo.MtwmSyncStatus&(model.SyncFlagNewMask|model.SyncFlagModifiedMask) != 0 { // 新增
catName := catInfo.CatName
subCatName := ""
originName := ""
if catInfo.MtwmSyncStatus&model.SyncFlagNewMask == 0 {
originName = catInfo.MtwmID
}
if level == 2 {
originName = catInfo.ParentCatName
catName = catInfo.ParentCatName
subCatName = catInfo.CatName
if catInfo.MtwmSyncStatus&model.SyncFlagNewMask == 0 {
originName = catInfo.MtwmID
catName = catInfo.CatName
subCatName = ""
}
}
if catName == "" {
panic("catName is empty")
}
if err := api.MtwmAPI.RetailCatUpdate(strStoreID, originName, catName, subCatName, catInfo.Seq); err == nil {
catInfo.MtwmID = catInfo.CatName
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[model.VendorIDMTWM]))
}
}
}
if err == nil {
db2 := dao.GetDB()
catInfo.MtwmSyncStatus = 0
_, err = dao.UpdateEntity(db2, &catInfo.StoreSkuCategoryMap, updateFields...)
}
return nil, err
}, catList)
rootTask.AddChild(task).Run()
_, err = task.GetResult(0)
return nil, err
}, 2)
tasksch.AddChild(parentTask, rootTask).Run()
if !isAsync {
_, err = rootTask.GetResult(0)
}
return rootTask.ID, err
}
func (p *PurchaseHandler) ReadStoreCategories(storeID int) (cats []*model.SkuCategory, err error) {
return nil, nil
}
func (p *PurchaseHandler) ReadStoreSku(storeID, skuID int) (skuNameExt *model.SkuNameExt, err error) {
return nil, nil
}
func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
return hint, err
}
func (p *PurchaseHandler) RefreshStoresAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool, storeIDs []int) (hint string, err error) {
return hint, err
}
func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) {
return hint, err
}

View File

@@ -0,0 +1,17 @@
package mtwm
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
)
func TestSyncStoreCategory(t *testing.T) {
store, err := new(PurchaseHandler).SyncStoreCategory(jxcontext.AdminCtx, nil, 100077, false)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(store, false))
}

View File

@@ -16,9 +16,8 @@ func TestReadStore(t *testing.T) {
}
func TestUpdateStore(t *testing.T) {
store, err := new(PurchaseHandler).UpdateStore("4351018")
err := new(PurchaseHandler).UpdateStore(nil, 100002, "test")
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(store, false))
}

View File

@@ -21,6 +21,8 @@ enableStore = true
enableStoreWrite = false
enableEbaiStoreWrite = false
enableElmStoreWrite = true
enableMtwmStoreWrite = false
orderUseNewTable = true
aliKey = "LTAI6xJUGaP6WdMQ"

View File

@@ -0,0 +1,10 @@
package controllers
import (
_ "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"github.com/astaxie/beego"
)
type MtwmController struct {
beego.Controller
}

View File

@@ -27,7 +27,9 @@ var (
EnableStoreWrite bool
EnableEbaiStoreWrite bool
EnableElmStoreWrite bool
OrderUseNewTable bool
EnableMtwmStoreWrite bool
OrderUseNewTable bool
QiniuBucket string
)
@@ -56,6 +58,7 @@ func Init() {
EnableStoreWrite = beego.AppConfig.DefaultBool("enableStoreWrite", false)
EnableEbaiStoreWrite = beego.AppConfig.DefaultBool("enableEbaiStoreWrite", false)
EnableElmStoreWrite = beego.AppConfig.DefaultBool("enableElmStoreWrite", false)
EnableMtwmStoreWrite = beego.AppConfig.DefaultBool("enableMtwmStoreWrite", false)
if EnableStore {
OrderUseNewTable = beego.AppConfig.DefaultBool("orderUseNewTable", false)