From a1584a6d727194a159efbc4bcd22d1bf3268032c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 6 Jan 2023 13:37:41 +0800 Subject: [PATCH] 1 --- business/model/dao/dao_order.go | 1 - business/model/dao/thing_map.go | 18 ++++++-- business/model/sync_map.go | 6 +++ .../purchase/tiktok_store/store_sku2_utils.go | 45 +++++++++++++++++-- 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 9dc8b1f94..b31e44f3c 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1037,7 +1037,6 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat if len(vendorIDs) > 0 { sqlWhere += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" sqlParams = append(sqlParams, vendorIDs) - //globals.SugarLogger.Debugf("sqlParams vendorIDs================%d", vendorIDs) } } if userID != "" { diff --git a/business/model/dao/thing_map.go b/business/model/dao/thing_map.go index 3c9ec2ca5..cf99464ea 100644 --- a/business/model/dao/thing_map.go +++ b/business/model/dao/thing_map.go @@ -45,8 +45,21 @@ func CreateThingMap(thingId int64, vendorThingID, appOrgCode, err string, thingT return CreateEntity(GetDB(), thingMap) } -func UpdateThingMap(thingMap *model.ThingMap) error { - _, err := UpdateEntity(GetDB(), thingMap, "ID") +func UpdateThingMap(db *DaoDB, syncStatus int8, vendorThingId string, thingId int, vendorId int, vendorOrgCode string) error { + sql := ` + UPDATE thing_map t1 + SET t1.sync_status = ?,t1.vendor_thing_id = ? + WHERE t1.deleted_at = ? AND t1.thing_id = ? AND t1.vendor_id = ? AND t1.vendor_org_code = ? +` + sqlParams := []interface{}{ + syncStatus, + vendorThingId, + utils.DefaultTimeValue, + thingId, + vendorId, + vendorOrgCode, + } + _, err := ExecuteSQL(db, sql, sqlParams...) return err } @@ -65,7 +78,6 @@ func GetThingToTiktokMapList(db *DaoDB, vendorId int, thingId int64, vendorOrgCo } err = GetRows(db, &cats, sql, sqlParams...) - return cats, err } diff --git a/business/model/sync_map.go b/business/model/sync_map.go index c8c5ef010..fe5539c86 100644 --- a/business/model/sync_map.go +++ b/business/model/sync_map.go @@ -9,6 +9,12 @@ const ( ThingTypeOrder = 6 // 同步订单 ) +const ( + ThingTypeSyncSuccess = 0 // 主商品创建成功 + ThingTypeSyncFail = 2 // 主商品创建失败 + ThingTypeSyncing = 3 // 主商品创建中 +) + type ThingMap struct { ModelIDCULD diff --git a/business/partner/purchase/tiktok_store/store_sku2_utils.go b/business/partner/purchase/tiktok_store/store_sku2_utils.go index e72fb869b..1569a28e7 100644 --- a/business/partner/purchase/tiktok_store/store_sku2_utils.go +++ b/business/partner/purchase/tiktok_store/store_sku2_utils.go @@ -28,6 +28,7 @@ import ( "git.rosy.net.cn/jx-callback/globals" "math/rand" "strings" + "time" "unicode" ) @@ -147,7 +148,10 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI } if len(localThing) == 0 { - //if mainProductId == 0 { + if err := dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(time.Now().Unix()), storeDetail.VendorOrgCode, "本地不存在,线上也不存在", model.ThingTypeSku, model.ThingTypeSyncing); err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType) + continue + } param, failedList2 := makeMainProductSku(db, api, storeSku, storeDetail, storeID, vendorStoreID, syncType) if len(failedList2) != 0 { failedList = append(failedList, failedList2...) @@ -155,10 +159,15 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI } tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品 if err != nil { + dao.UpdateThingMap(db, model.ThingTypeSyncFail, utils.Int64ToStr(time.Now().Unix()), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode) + failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType) + continue + } + + if err := dao.UpdateThingMap(db, model.ThingTypeSyncSuccess, utils.Int64ToStr(tiktokResult.ProductId), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode); err != nil { failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType) continue } - dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "本地不存在,线上也不存在", model.ThingTypeSku, 0) var attrId []string for _, v := range tiktokResult.Sku { attrId = append(attrId, utils.Int64ToStr(v.SkuId)) @@ -171,7 +180,37 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品 failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("只创建了主商品,没创建子商品"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType) - } else { + } else if localThing[0].SyncStatus == model.ThingTypeSyncFail { // 同步失败在重新创建 + param, failedList2 := makeMainProductSku(db, api, storeSku, storeDetail, storeID, vendorStoreID, syncType) + if len(failedList2) != 0 { + failedList = append(failedList, failedList2...) + continue + } + tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品 + if err != nil { + dao.UpdateThingMap(db, model.ThingTypeSyncFail, utils.Int64ToStr(time.Now().Unix()), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode) + failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType) + continue + } + + if err := dao.UpdateThingMap(db, model.ThingTypeSyncSuccess, utils.Int64ToStr(tiktokResult.ProductId), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode); err != nil { + failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType) + continue + } + var attrId []string + for _, v := range tiktokResult.Sku { + attrId = append(attrId, utils.Int64ToStr(v.SkuId)) + } + mainProductId = tiktokResult.ProductId + storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID) + storeSku.SkuSyncStatus = model.SyncFlagNewMask // 只创建主品,子品都没做 + storeSku.VendorMainId = utils.Int64ToStr(tiktokResult.ProductId) + storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID + storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品 + failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("只创建了主商品,没创建子商品"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType) + } else if localThing[0].SyncStatus == model.ThingTypeSyncing { + continue + } else if localThing[0].SyncStatus == model.ThingTypeSyncSuccess { // 主商品存在,直接同步子商品 childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID)) if err != nil && strings.Contains(err.Error(), "2010004") { // 2010004:主商品非在线审核通过状态,不允许绑定子商品