From 848107bd2c7ab50c29e9e4ef7c1bedab99ed2768 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Mon, 14 Nov 2022 09:31:23 +0800 Subject: [PATCH 1/2] 1 --- business/jxstore/cms/store.go | 91 +++++++++++++++++-- business/model/store.go | 2 +- business/partner/partner.go | 1 - .../partner/purchase/tiktok_store/store.go | 36 +++++--- controllers/cms_sku.go | 9 ++ 5 files changed, 117 insertions(+), 22 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 0268902ef..5cf03a55d 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1523,7 +1523,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend } if vendorID == model.VendorIDDD { //抖店绑定店铺时 检查并补充创建 globals.SugarLogger.Debugf("vendorID ==============%d", vendorID) - if err2 := tiktok_store.CreateAndBindAllV2(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix), userName); err2 != nil { + if err2 := tiktok_store.CreateOrUpdateAll(vendorOrgCode, int64(storeMap.StoreID), utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.DeliveryFeeDeductionFee), utils.Str2Int64(storeMap.YbStorePrefix)); err2 != nil { errList.AddErr(err2) } } @@ -5898,9 +5898,89 @@ func UpdateStorePoiStatus(ctx *jxcontext.Context) error { //抖音定时任务 //func UpdateStoreRelInformation(ctx *jxcontext.Context) error { // var ( -// db = dao.GetDB() +// storeIDs []string +// temp map[int64]string +// db = dao.GetDB() +// errList = errlist.New() +// tempIDs map[string][]string +// FreightTemplate = &model.FreightTemplate{} // ) -//storeList,_:=dao.GetStoreList(db,[]int{model.VendorIDDD},nil,[]int{model.store}) +// vendorOrgCodes, _ := dao.GetVendorOrgCode(db, model.VendorIDDD, "", "platform") +// for _, v := range vendorOrgCodes { +// if temp, err = tiktok_store.GetAllVendorStoreMap(ctx, v.VendorOrgCode); err != nil { +// return nil, err +// } +// //tempIDs[v.VendorOrgCode] = temp +// } +// +// if handler, ok := partner.GetPurchasePlatformFromVendorID(model.VendorIDDD).(partner.IStoreHandler); ok { +// rootTask := tasksch.NewParallelTask("UpdateStoreRelInformation 根据平台门店ID同步本地相关信息", tasksch.NewParallelConfig().SetParallelCount(1), ctx, +// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +// vendorOrgCodes, _ := dao.GetVendorOrgCode(db, model.VendorIDDD, "", "platform") +// for _, v := range vendorOrgCodes { +// if temp, err = tiktok_store.GetAllVendorStoreMap(ctx, v.VendorOrgCode); err != nil { +// return nil, err +// } +// //tempIDs[v.VendorOrgCode] = temp +// } +// +// subTask := tasksch.NewSeqTask("UpdateStoreRelInformation 根据平台门店ID同步本地相关信息", ctx, +// func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { +// switch step { +// case 0: +// for i, j := range tempIDs { +// for _, v := range j { +// //(1)仓库以及电子围栏 +// if bindWarehouse, err := tiktok_store.GetWarehouseByStore(i, utils.Str2Int64(v)); err != nil { +// errList.AddErr(fmt.Errorf("同步任务: 获取门店(%s)绑定的仓库以及电子围栏失败:%v", v, err)) +// } else if len(bindWarehouse[utils.Str2Int64(i)][0].OutFenceIds) > 0 { +// tempStr := "" +// for k, v := range bindWarehouse[utils.Str2Int64(i)][0].OutFenceIds { +// tempStr += v +// if k != len(bindWarehouse[utils.Str2Int64(i)][0].OutFenceIds) { +// tempStr += "," +// } +// } +// FreightTemplate.FenceID = tempStr +// FreightTemplate.WarehouseID = bindWarehouse[utils.Str2Int64(i)][0].WarehouseId +// } +// //(2)运费模板 +// if bindFreightIDs, err := tiktok_store.GetStoreFreight(i, utils.Str2Int64(v)); err != nil { +// globals.SugarLogger.Debugf("同步任务: 获取门店(%s) 绑定运费模板出错:%v", v, err) +// errList.AddErr(fmt.Errorf("同步任务: 获取门店(%s) 绑定运费模板出错:%v", v, err)) +// } else { +// FreightTemplate.TemplateID = bindFreightIDs +// } +// //(3)限售模板 +// if bindTradeLimitID, err := tiktok_store.GetStoreSaleLimit(i, utils.Str2Int64(v)); err != nil { +// globals.SugarLogger.Debugf("同步任务: 获取门店(%s) 限售模板出错:%v", v, err) +// errList.AddErr(fmt.Errorf("同步任务: 获取门店(%s) 限售模板出错:%v", v, err)) +// } else { +// FreightTemplate.TradeLimitID = bindTradeLimitID +// } +// } +// } +// +// if _, err := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "WarehouseID", "FenceID", "TradeLimitID "); err != nil { +// if err1 := dao.CreateEntity(db, FreightTemplate); err != nil { +// errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err1)) +// } else { +// errList.AddErr(fmt.Errorf("同步进数据库错误信息:%v", err)) +// } +// } +// dao.WrapAddIDCULDEntity(FreightTemplate, "同步任务操作") +// } +// return nil, err +// }, 4) +// return retVal, err +// }, storeIDs) +// } +// +// //task := tasksch.NewSeqTask(fmt.Sprintf("平台:抖店小时达 UpdateStoreRelInformation"), ctx, +// // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +// // +// // }, 3) +// //tasksch.ManageTask(task).Run() // return nil //} @@ -5949,8 +6029,3 @@ func GetVendorOrgCode(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendorID i } return storeMap, dao.GetEntitiesByKV(db, &storeMap, cond, false) } - -//批量绑定抖店平台门店 -func BatchBindVendorStore(ctx *jxcontext.Context) { - -} diff --git a/business/model/store.go b/business/model/store.go index 02135d975..9c3d1189b 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -1023,7 +1023,7 @@ type FreightTemplate struct { VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"` //抖店平台门店ID TemplateID int64 `orm:"column(template_id)" json:"templateID"` //运费模板ID 1对1 WarehouseID int64 `orm:"column(warehouse_id)" json:"warehouseID"` //创建门店时绑定的仓库id 1对1(仓库和电子围栏1对n) - FenceID string `orm:"column(fence_id)" json:"fenceID"` //电子围栏id 1对1 + FenceID string `orm:"column(fence_id)" json:"fenceID"` //电子围栏id 多个以逗号连接 TradeLimitID int64 `orm:"column(trade_limit_id)" json:"tradeLimitID"` //限售模板id 1对1(默认会创建) } diff --git a/business/partner/partner.go b/business/partner/partner.go index 98a6fee64..68b42a6d1 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -146,7 +146,6 @@ type IPurchasePlatformHandler interface { // 只与平台相关 GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) - //////// // Store ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (store *dao.StoreDetail, err error) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) diff --git a/business/partner/purchase/tiktok_store/store.go b/business/partner/purchase/tiktok_store/store.go index 4cf3e78dd..a0d37a87f 100644 --- a/business/partner/purchase/tiktok_store/store.go +++ b/business/partner/purchase/tiktok_store/store.go @@ -13,6 +13,7 @@ import ( shop_bindStoreSaleLimit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreSaleLimit/request" shop_editStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_editStore/request" shop_getStoreDetail_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreDetail/request" + shop_getStoreList_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreList/request" shop_storeSuspend_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_storeSuspend/request" shop_unsuspendStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_unsuspendStore/request" trade_UpdateTradeLimitTemplate_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/trade_UpdateTradeLimitTemplate/request" @@ -143,7 +144,7 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri errList.AddErr(dao.CreateEntity(db, storeMap)) } vendorStoreIDs = utils.Int64ToStr(resp.ResultList[0].Store.StoreId) - if err := CreateAndBindAllV2(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId, int64(storeDetail.DeliveryFeeDeductionFee), utils.Str2Int64(storeDetail.YbStorePrefix), userName); err != nil { + if err := CreateOrUpdateAll(storeDetail.VendorOrgCode, int64(storeDetail.Store.ID), resp.ResultList[0].Store.StoreId, int64(storeDetail.DeliveryFeeDeductionFee), utils.Str2Int64(storeDetail.YbStorePrefix)); err != nil { errList.AddErr(err) } } @@ -151,7 +152,6 @@ func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri return vendorStoreIDs, errors.New(fmt.Sprintf("创建抖店平台店铺相关错误信息:%v", endErr)) } -// todo 暂时不删除 func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFeeDeductionFee, minPrice int64) error { var ( errList = errlist.New() @@ -161,13 +161,13 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee //1.平台获取门店运费模板 bindFreightIDs, err := GetStoreFreight(vendorOrgCode, vendorStoreID) if err != nil { - globals.SugarLogger.Debug("获取门店(%d) 绑定运费模板出错:%v", vendorStoreID, err) + globals.SugarLogger.Debugf("获取门店(%d) 绑定运费模板出错:%v", vendorStoreID, err) errList.AddErr(fmt.Errorf("获取门店(%d) 绑定运费模板出错:%v", vendorStoreID, err)) } if bindFreightIDs == 0 { //(1)未查询到绑定信息,不算错误 //创建 if freightTemplateID, err := CreateFreightTemplate(int(storeID)); err != nil || freightTemplateID == 0 || utils.IsNil(freightTemplateID) { - globals.SugarLogger.Debug("京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err) + globals.SugarLogger.Debugf("京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err) errList.AddErr(fmt.Errorf("京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v", storeID, vendorStoreID, freightTemplateID, err)) } else { //绑定 if err = ShopBindStoreFreight(vendorOrgCode, vendorStoreID, freightTemplateID); err != nil { @@ -915,16 +915,15 @@ func (P *PurchaseHandler) EnableAutoAcceptOrder(ctx *jxcontext.Context, vendorOr // 获取店铺所有平台ID func (P *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrgCode string) (vendorStoreIDs []string, err error) { //param := &shop_getStoreList_request.ShopGetStoreListParam{ - // Page: 0, - // PageSize: 10, + // Page: "0", + // PageSize: "20", //} - //storeList, err := api.DouDianApi.GetStoreList(param) - //if err != nil { - // return nil, err + //if stores, err := getAPI(vendorOrgCode, 0, "").GetStoreList(param); err != nil || stores.Total == 0 { + // return nil, errors.New(fmt.Sprintf("暂时无门店数据返回,请重试:%v", err)) //} - //if len(storeList.StoreDetailList) > 0 { - // vendorStoreIDs = make([]string, len(storeList.StoreDetailList)) - // for k, v := range storeList.StoreDetailList { + //else if len(stores.StoreDetailList) > 0 { + // vendorStoreIDs = make([]string, len(stores.StoreDetailList)) + // for k, v := range stores.StoreDetailList { // vendorStoreIDs[k] = utils.Int64ToStr(v.Store.StoreId) // } //} @@ -932,6 +931,19 @@ func (P *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrg return nil, err } +//获取京西 抖店门店映射关系 +func GetAllVendorStoreMap(ctx *jxcontext.Context, vendorOrgCode string) (map[int64]string, error) { + param := &shop_getStoreList_request.ShopGetStoreListParam{ + Page: "0", + PageSize: "20", + } + if stores, err := getAPI(vendorOrgCode, 0, "").GetStoreList(param); err != nil || len(stores) == 0 { + return nil, errors.New(fmt.Sprintf("暂时无门店数据返回,请重试:%v", err)) + } else { + return stores, err + } +} + func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { a := getAPI(vendorOrgCode, storeID, vendorStoreID) if lineStatus == model.StoreStatusOpened { diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 93f09a7f8..2901ba3cc 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -222,6 +222,15 @@ func (c *SkuController) UpdateSkuName() { }) } +// @Title 仅修改商品图片 +// @Description 仅在本地数据库修改商品图片 +// @Param token header string true "认证token" +// @Param skuID formData int true "需要修改的商品名ID,payload中的相应数据会被忽略" +// @Param payload formData string true "json数据,SkuName对象() 只使用图片字段" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateSkuImgs [put] + // @Title 删除商品名 // @Description 此前商品名下的所有商品也会被级连删除 // @Param token header string true "认证token" From 91f07e2904e9d1bd35eb62b0ba6322495d4f5c76 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Mon, 14 Nov 2022 14:49:53 +0800 Subject: [PATCH 2/2] 1 --- business/jxstore/cms/sku.go | 19 +++++++++++++++++++ controllers/cms_sku.go | 17 +++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index a5e525c99..25ea25fe0 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1186,6 +1186,25 @@ func SetStoreSkuSyncStatus2(db *dao.DaoDB, storeIDs []int, vendorIDs, skuIDs []i return num, nil } +func UpdateSkuImg(ctx *jxcontext.Context, skuID int, payload map[string]interface{}) (string, error) { + var ( + db = dao.GetDB() + ) + globals.SugarLogger.Debugf("UpdateSkuImg pre test data: %s\n", payload) + if skuID == 0 { + return "skuID必传", nil + } else if payload["img"] == "" { + return "img必传", nil + } + if _, err := dao.ExecuteSQL(db, ` + UPDATE sku_name s + SET s.img = ?,s.img2 = ?,s.img3 = ?,s.img4 = ?,s.img5 = ?,s.desc_img = ? + WHERE s.id = ? `, payload["img"], payload["img2"], payload["img3"], payload["img4"], payload["img5"], payload["descImg"], skuID); err != nil { + return "数据库操作失败", err + } + return "", nil +} + func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int64, err error) { db := dao.GetDB() txDB, _ := dao.Begin(db) diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 2901ba3cc..b45fa87b5 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -224,12 +224,21 @@ func (c *SkuController) UpdateSkuName() { // @Title 仅修改商品图片 // @Description 仅在本地数据库修改商品图片 -// @Param token header string true "认证token" -// @Param skuID formData int true "需要修改的商品名ID,payload中的相应数据会被忽略" -// @Param payload formData string true "json数据,SkuName对象() 只使用图片字段" +// @Param token header string true "认证token"` +// @Param skuID formData int true "商品名ID" +// @Param payload formData string true "商品图片" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /UpdateSkuImgs [put] +// @router /UpdateSkuImg [put] +func (c *SkuController) UpdateSkuImg() { + c.callUpdateSkuImg(func(params *tSkuUpdateSkuImgParams) (retVal interface{}, errCode string, err error) { + payload := make(map[string]interface{}) + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil { + retVal, err = cms.UpdateSkuImg(params.Ctx, params.SkuID, payload) + } + return retVal, "", nil + }) +} // @Title 删除商品名 // @Description 此前商品名下的所有商品也会被级连删除