添加抖音授权登录,国美测试接口,修改运单重复骑手,添加推送骑手信息

This commit is contained in:
邹宗楠
2022-05-13 16:05:19 +08:00
parent 977d11ed9c
commit a91f46207f
49 changed files with 3355 additions and 254 deletions

View File

@@ -0,0 +1,393 @@
package gomei
import (
"encoding/base64"
"fmt"
gomei "git.rosy.net.cn/baseapi/platformapi/gome_live_show"
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"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/business/partner"
"git.rosy.net.cn/jx-callback/business/partner/putils"
"git.rosy.net.cn/jx-callback/globals"
"regexp"
"strings"
"time"
)
// 删除不在使用商品(下架之后在删除) ok
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
if globals.EnableJdShopWrite && vendorStoreID == model.GoMeiShopMainVendorStoreID {
for _, v := range storeSkuList {
if v.IsDeletedBySku && storeID != 0 { // 如果门店id存在,则将该门店商品下架,所有门店该商品处于下架才可以删除!
_, err = getAPI(v.VendorOrgCode).OnOffLineGoodsOnStore(&gomei.ShelfGoodsForStoreReq{
StoreCode: vendorStoreID,
SkuCode: []string{v.VendorSkuID},
ShelveStatus: gomei.DownOnTheShelf,
})
}
if err == nil {
_, err = getAPI(v.VendorOrgCode).DeleteGoodsOnStore(v.VendorSkuID)
}
if err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorGoMei], "删除商品")...)
}
}
}
return failedList, err
}
// 获取门店商品列表
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
var (
pageNo = 1
pageSize = 50
)
result, err := getAPI(string(model.VendorGoMei)).QueryGoodsListById(&gomei.QueryGoodsListForStoreReq{
Page: gomei.Page{
PageNumber: pageNo,
PageSize: pageSize,
},
})
if err != nil {
return nil, err
}
for ; pageNo <= result.Data.Total/pageSize+1; pageNo++ {
result2, err := getAPI(string(model.VendorGoMei)).QueryGoodsListById(&gomei.QueryGoodsListForStoreReq{
Page: gomei.Page{
PageNumber: pageNo,
PageSize: pageSize,
},
})
if err != nil {
return nil, err
}
for _, v := range result2.Data.Records {
if skuName := vendorSku2Jx2(v); skuName != nil {
skuNameList = append(skuNameList, skuName)
}
}
}
return skuNameList, err
}
// 修改门店商品状态
func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo, status int) (failedList []*partner.StoreSkuInfoWithErr, err error) {
if globals.EnableJdShopWrite {
for _, v := range storeSkuList {
if vendorSkuID, err := getMainStoreVendorSkuID(model.GoMeiShopMainStoreID, v.SkuID); err == nil && vendorSkuID != "" {
storeSku := &gomei.ShelfGoodsForStoreReq{
StoreCode: vendorStoreID,
SkuCode: []string{vendorSkuID},
}
if status == 0 {
storeSku.ShelveStatus = gomei.PutOnTheShelf
} else {
storeSku.ShelveStatus = gomei.DownOnTheShelf
}
_, err = getAPI(v.VendorOrgCode).OnOffLineGoodsOnStore(storeSku)
}
}
if err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorGoMei], "修改商品库存")
}
}
return failedList, err
}
// 修改门店商品价格维护
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
if globals.EnableJdShopWrite {
for _, v := range storeSkuList {
if vendorSkuID, err := getMainStoreVendorSkuID(model.GoMeiShopMainStoreID, v.SkuID); err == nil && vendorSkuID != "" {
_, err = getAPI(v.VendorOrgCode).UpdateOnGoodsPriceForStore(&gomei.StoreGoodsPriceUpdateReq{
StoreCode: vendorStoreID,
SkuCode: vendorSkuID,
SalePrice: utils.Int64ToFloat64(v.VendorPrice),
})
}
if err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品价格")...)
}
}
}
return failedList, err
}
// 门店商品库存维护
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
if globals.EnableJdShopWrite {
for _, v := range storeSkuList {
if vendorSkuID, err := getMainStoreVendorSkuID(model.GoMeiShopMainStoreID, v.SkuID); err == nil && vendorSkuID != "" {
_, err = getAPI(v.VendorOrgCode).UpdateStockForStore(&gomei.StoreGoodsStockUpdateReq{
StoreCode: vendorStoreID,
ItemStocks: []*gomei.StoreSkuNum{
{SkuCode: vendorSkuID, StockNum: int64(v.Stock)},
},
})
}
}
if err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品库存")...)
}
}
return failedList, err
}
// 获取门店所有的分类
func (p *PurchaseHandler) GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*partner.BareCategoryInfo, err error) {
var (
pageNo = 1
pageSize = 50
)
result, err := getAPI(string(model.VendorGoMei)).QueryStoreCategoryList(&gomei.QueryStoreGoodsCategoryListReq{
Page: gomei.Page{
PageNumber: pageNo,
PageSize: pageSize,
},
StoreCode: vendorStoreID,
})
for ; pageNo <= result.Data.Total/pageSize+1; pageNo++ {
result2, err := getAPI(string(model.VendorGoMei)).QueryStoreCategoryList(&gomei.QueryStoreGoodsCategoryListReq{
Page: gomei.Page{
PageNumber: pageNo,
PageSize: pageSize,
},
StoreCode: vendorStoreID,
})
if err != nil {
return nil, err
}
for _, v := range result2.Data.Records {
var cat = &partner.BareCategoryInfo{
VendorCatID: v.CategoryCode,
Name: v.CategoryName,
}
cat.Level = 1
cats = append(cats, cat)
}
}
return cats, err
}
// 修改或者更新门店分类信息
func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
if globals.EnableJdShopWrite {
_, status, err2 := updateOrCreateCategories(storeCat, vendorStoreID, false)
err = err2
if status == -1 {
return fmt.Errorf("京东商城店内分类更新失败!")
}
}
return err
}
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
if globals.EnableJdShopWrite {
allCategoryList, status, err2 := updateOrCreateCategories(storeCat, vendorStoreID, true)
err = err2
if status == -1 {
return fmt.Errorf("国美商城店内分类创建失败!")
}
if err != nil {
return err
}
time.Sleep(time.Second * 2)
for _, v := range allCategoryList {
if v.CategoryName == storeCat.Name {
storeCat.VendorCatID = v.CategoryCode
break
}
}
if storeCat.VendorCatID == "" {
return fmt.Errorf("国美商城店内分类创建可能失败了storeID: %v", storeID)
}
}
return err
}
func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) {
if globals.EnableJdShopWrite {
_, err = getAPI(string(model.VendorGoMei)).DeleteStoreGoodsCategory(vendorStoreID, vendorCatID)
}
return err
}
func (p *PurchaseHandler) IsErrSkuExist(err error) (isExist bool) {
return false
}
func (p *PurchaseHandler) IsErrCategoryExist(err error) (isExist bool) {
return false
}
func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
return false
}
func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
return 1
}
func (p *PurchaseHandler) GetSensitiveWordRegexp() *regexp.Regexp {
return sensitiveWordRegexp
}
func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
if strings.Contains(err.Error(), deleteErr1) || (strings.Contains(err.Error(), deleteErr2) && strings.Contains(err.Error(), deleteErr3)) {
return true
}
return false
}
func GetAllStoreCategories(vendorOrgCode, vendorStoreId string) ([]*gomei.StoreGoodsCategoryListRecord, error) {
var (
pageNo = 1
pageSize = 50
)
result, err := getAPI(vendorOrgCode).QueryStoreCategoryList(&gomei.QueryStoreGoodsCategoryListReq{
Page: gomei.Page{
PageSize: pageSize,
PageNumber: pageNo,
},
StoreCode: vendorStoreId,
})
if err != nil {
return nil, err
}
createShopCategoryParams := make([]*gomei.StoreGoodsCategoryListRecord, 0, 0)
for ; pageNo <= result.Data.Total/pageSize+1; pageNo++ {
result2, err := getAPI(vendorOrgCode).QueryStoreCategoryList(&gomei.QueryStoreGoodsCategoryListReq{
Page: gomei.Page{
PageNumber: pageNo,
PageSize: pageSize,
},
StoreCode: vendorStoreId,
})
if err != nil {
return nil, err
}
for _, v := range result2.Data.Records {
createShopCategoryParams = append(createShopCategoryParams, &gomei.StoreGoodsCategoryListRecord{
CategoryCode: v.CategoryCode,
CategoryName: v.CategoryName,
Rank: v.Rank,
})
}
}
return createShopCategoryParams, nil
}
// 创建或者修改分类
func updateOrCreateCategories(storeCat *dao.SkuStoreCatInfo, vendorStoreId string, isCreate bool) (createShopCategoryParams []*gomei.StoreGoodsCategoryListRecord, status int64, err error) {
createShopCategoryParams, err = GetAllStoreCategories(storeCat.VendorOrgCode, vendorStoreId)
if err != nil {
return nil, -1, err
}
if isCreate { // 创建分类
_, err = getAPI(storeCat.VendorOrgCode).AddStoreCategory(&gomei.StoreAddGoodsCategory{
StoreCode: vendorStoreId,
CategoryName: storeCat.VendorCategoryName, // storeCat.StoreCatName
Rank: 0,
})
if err != nil {
return nil, -1, err
}
} else { // 修改分类,无法新增和修改排序,排序结构需要在国美系统上获取
// 查询当前分类
for _, v := range createShopCategoryParams {
if v.CategoryCode != storeCat.VendorCatID {
continue
}
_, err = getAPI(storeCat.VendorOrgCode).ModifyStoreGoodsCategory(&gomei.StoreModifyGoodsCategory{
StoreCode: vendorStoreId,
CategoryCode: storeCat.VendorCatID, // storeCat.StoreCatName
CategoryName: storeCat.VendorCategoryName, // storeCat.StoreCatName
Rank: v.Rank,
})
if err != nil {
return nil, -1, err
}
}
}
return
}
// 将平台商品信息转化为本地商品信息
func vendorSku2Jx2(result *gomei.QueryGoodsListForStoreRecordRes) (skuName *partner.SkuNameInfo) {
if result == nil {
globals.SugarLogger.Warnf("vendorSku2Jx, strange result:%s", utils.Format4Output(result, true))
return nil
}
skuName = &partner.SkuNameInfo{
Name: result.GoodsName,
SkuList: []*partner.SkuInfo{
&partner.SkuInfo{
StoreSkuInfo: partner.StoreSkuInfo{
VendorSkuID: result.SkuCode,
Stock: result.StockNum,
VendorPrice: jxutils.StandardPrice2Int(result.SalePrice),
},
},
},
}
if result.ShelveStatus == gomei.PutOnTheShelf {
skuName.Status = 1
} else {
skuName.Status = 0
}
return skuName
}
// 获取当前门店第三方商品id
func getMainStoreVendorSkuID(mainStoreID int, skuID int) (vendorSkuID string, err error) {
var (
db = dao.GetDB()
)
storeSkus, err := dao.GetStoresSkusInfo(db, []int{mainStoreID}, []int{skuID})
if len(storeSkus) > 0 {
vendorSkuID = storeSkus[0].GmID
}
return vendorSkuID, err
}
// 国美上传图片,转bese64字符串在上传,图片要求长宽和大小
func uploadImg(img, name, index, vendorOrgCode string) (imgURL string, err error) {
data, _, err := jxutils.DownloadFileByURL(img)
if err != nil {
return "", err
}
// 获取图片地址
uploadResult, err := getAPI(vendorOrgCode).UploadPicture(base64.StdEncoding.EncodeToString(data), 1, name+string(time.Now().Unix()))
if err != nil {
return "", err
}
return uploadResult.Data.Url, err
}
func filterSensitiveWord(name string) (result string) {
for _, v := range jdshopapi.SensitiveWordMap {
if strings.Contains(name, v) {
return strings.ReplaceAll(name, v, "")
}
}
return name
}