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() } storeMapList, err := v.GetStoreMapInfo(db, store.ID) if 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, nameID, skuID int, isForce bool, userName string) (err error) { if db == nil { db = dao.GetDB() } var skuList []*model.Sku cond := make(map[string]interface{}) if nameID != -1 { cond[model.FieldNameID] = nameID } if skuID != -1 { cond[model.FieldID] = skuID } if err = dao.GetEntities(db, &skuList, cond, true); err == nil { for _, sku := range skuList { if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) { updateFields := []string{model.FieldJdSyncStatus} if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除 err = GetPurchaseHandler(model.VendorIDJD).CreateSku(sku, userName) updateFields = append(updateFields, model.FieldJdID) } 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, updateFields...) } } } } return err } func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID int, skuIDs []int, isForce bool, userName string) (err error) { storeMapList, err := v.GetStoreMapInfo(db, storeID) var skuNamesInfo *StoreSkuNamesInfo if skuNamesInfo, err = GetStoreSkus(storeID, "", utils.Params2Map("skuID", skuIDs), 0, 10000); err == nil { if skuNamesInfo.TotalCount != len(skuNamesInfo.SkuNames) { panic("too many skus!") } for _, storeMap := range storeMapList { switch storeMap.VendorID { case model.VendorIDJD: err = v.SyncStoreSku2JD(db, skuNamesInfo.SkuNames, isForce, userName) } } } return err } func (v *VendorSync) SyncStoreSku2JD(db *dao.DaoDB, skuInfoList []*StoreSkuNameExt, isForce bool, userName string) (err error) { // for _, skuInfo := range skuInfoList { // } return err } func (v *VendorSync) GetStoreMapInfo(db *dao.DaoDB, storeID int) (storeMapList []*model.StoreMap, err error) { return storeMapList, dao.GetEntities(db, &storeMapList, utils.Params2Map(model.FieldStoreID, storeID), true) }