This commit is contained in:
richboo111
2022-09-30 17:09:56 +08:00
parent e7f1101b9c
commit 13b7bd1c62
10 changed files with 698 additions and 103 deletions

View File

@@ -14,12 +14,13 @@ const (
VendorIDMTWM = 1 VendorIDMTWM = 1
VendorIDELM = 2 VendorIDELM = 2
VendorIDEBAI = 3 VendorIDEBAI = 3
VendorIDYB = 4 //银豹
VendorIDJDShop = 5 //京东商城
VendorIDDouDian = 6 //抖店
VendorIDJX = 9 // 这是一个假的京西VendorID
VendorIDGD = 10 VendorIDGD = 10
VendorIDYB = 4 //银豹
VendorIDJDShop = 5 //京东商城
VendorIDWSC = 11 // 微盟微商城 VendorIDWSC = 11 // 微盟微商城
VendorIDPurchaseEnd = 11 VendorIDPurchaseEnd = 11
VendorIDJX = 9 // 这是一个假的京西VendorID
VendorGoMei = 12 // 国美 VendorGoMei = 12 // 国美
VendorIDTT = 13 // 抖音平台小程序 VendorIDTT = 13 // 抖音平台小程序

View File

@@ -304,10 +304,6 @@ var (
type Store struct { type Store struct {
ModelIDCULD ModelIDCULD
RowID int64 `json:"rowID"` //标识这条数据(抖店用)
//StoreCode string `json:"storeCode"` //门店编码(抖店用)
//OpenTime map[int64]string `json:"openTime"` //营业时间(抖店用)
OriginalName string `orm:"-" json:"originalName"` OriginalName string `orm:"-" json:"originalName"`
Name string `orm:"size(255)" json:"name"` Name string `orm:"size(255)" json:"name"`
CityCode int `orm:"default(0);null" json:"cityCode"` // todo ? CityCode int `orm:"default(0);null" json:"cityCode"` // todo ?
@@ -1001,3 +997,18 @@ func (*BrandCategoryMap) TableUnique() [][]string {
[]string{"BrandID", "CategoryID", "DeletedAt"}, []string{"BrandID", "CategoryID", "DeletedAt"},
} }
} }
// 抖店 创建运费模板映射关系
type FreightTemplate struct {
ModelIDCULD
StoreID int64 `orm:"column(store_id)" json:"storeID"` //京西本地门店ID
VendorStoreID int64 `orm:"column(vendor_store_id)" json:"vendorStoreID"` //抖店平台门店ID
TemplateID int64 `orm:"column(template_id)" json:"templateID"` //运费模板ID
TemplateDetail string `orm:"column(template_detail)" json:"templateDetail"` //json转化的模板信息
}
func (*FreightTemplate) TableUnique() [][]string {
return [][]string{
[]string{"StoreID", "TemplateID", "VendorStoreID"},
}
}

View File

@@ -1,6 +1,7 @@
package doudian package doudian
import ( import (
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "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/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
@@ -19,6 +20,25 @@ type PurchaseHandler struct {
putils.DefSingleStorePlatform putils.DefSingleStorePlatform
} }
func init() {
if api.DouDianApi != nil {
CurPurchaseHandler = New()
partner.RegisterPurchasePlatform(CurPurchaseHandler)
}
}
func New() (obj *PurchaseHandler) {
obj = new(PurchaseHandler)
obj.ISingleStoreStoreSkuHandler = obj
return obj
}
func bizStatusJX2DouDian(status int) (onLine int) {
if status == model.StoreStatusDisabled || status == model.StoreStatusClosed {
return tiktok_api.StoreStatusOffline
}
return tiktok_api.StoreStatusOnline
}
func (P *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) { func (P *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
@@ -184,49 +204,17 @@ func (P *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
panic("implement me") panic("implement me")
} }
func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (store *dao.StoreDetail, err error) {
//TODO implement me
panic("implement me")
}
func (P *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { func (P *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (P *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) {
//TODO implement me
panic("implement me")
}
func (P *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error) { func (P *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (P *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
//TODO implement me
panic("implement me")
}
func (P *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { func (P *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) {
//TODO implement me
panic("implement me")
}
func init() {
if api.DouDianApi != nil {
CurPurchaseHandler = New()
partner.RegisterPurchasePlatform(CurPurchaseHandler)
}
}
func New() (obj *PurchaseHandler) {
obj = new(PurchaseHandler)
obj.ISingleStoreStoreSkuHandler = obj
return obj
}

View File

@@ -1,59 +1,427 @@
package doudian package doudian
import ( import (
"errors"
"fmt"
address_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_create/request"
address_list_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_list/request"
address_list_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_list/response"
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request"
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
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_createTradeLimitTemplate_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/trade_createTradeLimitTemplate/request"
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/jxstore/event"
"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/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
) )
func splicingTimeToDoudian(openTime1, closeTime1, openTime2, closeTime2 int16) (timeList string) {
//700 1200 -> 7:00-12:00
timeStr := ""
if openTime1 != 0 && closeTime1 != 0 {
tOpenTime1 := utils.Int64ToStr(int64(openTime1))
len1 := len(tOpenTime1) - 2
s1 := tOpenTime1[:len1] + ":" + tOpenTime1[len1+1:]
tCloseTime1 := utils.Int64ToStr(int64(closeTime1))
len2 := len(tCloseTime1) - 2
s2 := tCloseTime1[:len2] + ":" + tCloseTime1[len2+1:]
timeStr += s1 + "-" + s2
if openTime2 != 0 && closeTime2 != 0 {
tOpenTime2 := utils.Int64ToStr(int64(openTime2))
len3 := len(tOpenTime2) - 2
s3 := tOpenTime2[:len3] + ":" + tOpenTime2[len3+1:]
tCloseTime2 := utils.Int64ToStr(int64(closeTime2))
len4 := len(tCloseTime2) - 2
s4 := tCloseTime2[:len4] + ":" + tCloseTime2[len4+1:]
timeStr += " " + s3 + "-" + s4
}
}
return timeStr
}
// shop/batchCreateStore 批量创建门店 // shop/batchCreateStore 批量创建门店
func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string, params map[string]interface{}, storeDetail *dao.StoreDetail) (vendorStoreID string, err error) { func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string, params map[string]interface{}, storeDetail *dao.StoreDetail) (vendorStoreID string, err error) {
////ShopBatchCreateStoreParam:=[]*shop_batchCreateStore_request.ShopBatchCreateStoreParam{} var (
//var ( storeIDs string
// storeIDs string lists []shop_batchCreateStore_request.StoreListItem
//) ShopBatchCreateStoreParam *shop_batchCreateStore_request.ShopBatchCreateStoreParam
////tempOpenTime := strings.Split(storeDetail.OpenTime, ",") )
////m := make(map[int64]string) timeStr := ""
////for _, i := range tempOpenTime { if storeDetail.OpenTime1 == 0 || storeDetail.CloseTime1 == 0 {
//// parts := strings.Split(i, ":") return "", fmt.Errorf("营业时间必填")
//// m[utils.Str2Int64(parts[0])] = parts[1] } else {
////} timeStr = splicingTimeToDoudian(storeDetail.OpenTime1, storeDetail.CloseTime1, storeDetail.OpenTime2, storeDetail.CloseTime2)
//lists := []shop_batchCreateStore_request.StoreListItem{} }
//list := shop_batchCreateStore_request.StoreListItem{ m := make(map[int64]string)
// RowId: storeDetail.RowID, for j := 1; j <= 7; j++ {
// Name: storeDetail.Name, m[int64(j)] = timeStr
// StoreCode: storeDetail.StoreCode, }
// Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lng)), list := shop_batchCreateStore_request.StoreListItem{
// Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lat)), RowId: 1,
// Province: storeDetail.ProvinceName, Name: storeDetail.Name,
// City: storeDetail.CityName, StoreCode: storeDetail.VendorStoreID,
// District: storeDetail.DistrictName, Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lng)),
// Address: storeDetail.Address, Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lat)),
// Contact: storeDetail.Tel1, Province: storeDetail.ProvinceName,
// OpenTime: &shop_batchCreateStore_request.OpenTime{ City: storeDetail.CityName,
// DayMap: storeDetail.OpenTime, District: storeDetail.DistrictName,
// }, Address: storeDetail.Address,
//} Contact: storeDetail.Tel1,
//lists = append(lists, list) OpenTime: &shop_batchCreateStore_request.OpenTime{
//ShopBatchCreateStoreParam := &shop_batchCreateStore_request.ShopBatchCreateStoreParam{ DayMap: m,
// StoreList: lists, },
//} }
//if resp, err := api.DouDianApi.BatchCreateStore(ShopBatchCreateStoreParam); err != nil { lists = append(lists, list)
// return "", err ShopBatchCreateStoreParam = &shop_batchCreateStore_request.ShopBatchCreateStoreParam{
//} else { StoreList: lists,
// for _, v := range resp.ResultList { }
// storeIDs += utils.Int64ToStr(v.Store.StoreId) if resp, err := api.DouDianApi.BatchCreateStore(ShopBatchCreateStoreParam); err != nil {
// } return "", err
// return storeIDs, nil } else {
//} for k, v := range resp.ResultList {
return "", nil if k != len(resp.ResultList) {
storeIDs += utils.Int64ToStr(v.Store.StoreId) + ","
}
storeIDs += utils.Int64ToStr(v.Store.StoreId)
}
return storeIDs, nil
}
} }
// shop/editStore 编辑门店信息 正向推送平台 // shop/editStore 编辑门店信息 正向推送平台
func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
globals.SugarLogger.Debugf("doudian Update storeID:%d, userName:%s", storeID, userName)
var (
storeInfo *dao.StoreDetail
name string
)
if db == nil { if db == nil {
db = dao.GetDB() db = dao.GetDB()
} }
//doudianApi:=getapi sqlStr := ` SELECT
t1.*,
//storeDetail:=dao.GetStoreDetail(db,storeID,) t2.status, t2.vendor_store_id, t2.vendor_org_code,
IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status, t2.vendor_store_name
FROM store t1
LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?)
WHERE t1.id = ?
ORDER BY t2.updated_at`
err = dao.GetRow(db, &storeInfo, sqlStr, model.VendorIDDouDian, utils.DefaultTimeValue, utils.Int2Str(storeID))
if err != nil {
return err
}
errList := errlist.New()
timeStr := ""
m := make(map[int64]string)
if storeInfo.OpenTime1 != 0 && storeInfo.CloseTime1 != 0 {
timeStr = splicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, storeInfo.OpenTime2, storeInfo.CloseTime2)
for j := 1; j <= 7; j++ {
m[int64(j)] = timeStr
}
}
vendorStoreID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{
StoreId: utils.Str2Int64(storeInfo.VendorStoreID),
}
if globals.EnableDouDianStoreWrite {
remoteStoreInfo, err2 := api.DouDianApi.GetStoreDetail(vendorStoreID)
if err2 != nil {
return err2
}
if remoteStoreInfo.StoreDetail.Store.StoreId == 0 {
return fmt.Errorf("ID:%d 的门店不存在,请先创建", utils.Str2Int64(storeInfo.VendorStoreID))
}
mergedStoreStatus := jxutils.MergeStoreStatus(storeInfo.Status, storeInfo.VendorStatus)
name = remoteStoreInfo.StoreDetail.Store.Name
if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 {
if storeInfo.VendorStoreName != "" {
name = storeInfo.VendorStoreName
}
}
store := fmt.Sprintf("门店id:%d,门店名称:%s,第三方门店状态:%d,本地修改前门店状态%d,本地门店修改后状态:%d,第三方平台Id(抖店):%s", storeID, remoteStoreInfo.StoreDetail.Store.Name, remoteStoreInfo.StoreDetail.Store.State, storeInfo.Status, mergedStoreStatus, storeInfo.VendorOrgCode)
event.AddOperateEvent(jxcontext.AdminCtx, jxcontext.AdminCtx.GetTrackInfo(), store, "", "", 10, "UpdateStore")
params := &shop_editStore_request.ShopEditStoreParam{
StoreId: remoteStoreInfo.StoreDetail.Store.StoreId, //平台id不可修改
Name: name,
StoreCode: utils.Int2Str(storeInfo.ID), //自用编码即很本地storeID
Latitude: utils.Int2Str(storeInfo.Lat),
Longitude: utils.Int2Str(storeInfo.Lng),
Province: storeInfo.ProvinceName,
City: storeInfo.CityName,
District: storeInfo.DistrictName,
Address: storeInfo.Address,
Contact: storeInfo.Tel1,
OpenTime: &shop_editStore_request.OpenTime{
DayMap: m,
},
}
//修改店铺状态
if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 {
errList.AddErr(P.UpdateStoreStatus(jxcontext.AdminCtx, storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID, mergedStoreStatus))
}
_, err3 := api.DouDianApi.EditStore(params)
if err3 != nil {
errList.AddErr(err3)
}
}
return err return err
} }
// shop/storeSuspend 门店暂停营业
// shop/unsuspendStore 门店恢复营业
func (p *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, status int) (err error) {
isOnline := bizStatusJX2DouDian(status)
if globals.EnableDouDianStoreWrite {
if isOnline != tiktok_api.StoreStatusOnline { //暂停营业状态
unsuspendStoreID := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
_, err = api.DouDianApi.UnsuspendStore(unsuspendStoreID)
} else { //恢复营业
suspendStoreID := &shop_storeSuspend_request.ShopStoreSuspendParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
getStoreID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
//平台上店铺状态
remoteStoreInfo, err2 := api.DouDianApi.GetStoreDetail(getStoreID)
if err2 != nil {
return err2
}
if remoteStoreInfo.StoreDetail.Store.SuspendType == tiktok_api.SuspendTypePlatformPenalty {
err = errors.New("门店因平台处罚暂停营业,不可主动修改营业状态")
} else {
_, err = api.DouDianApi.StoreSuspend(suspendStoreID)
}
}
}
return err
}
// /freightTemplate/create 创建运费模板
func (P *PurchaseHandler) CreateFreightTemplate(templateInfo freightTemplate_create_request.FreightTemplateCreateParam, storeID, vendorStoreID int64) error {
var (
db *dao.DaoDB
)
if templateInfo.Template.RuleType > 0 {
templateInfo.Template.CalculateType = tiktok_api.CalculateTypeNum
}
info := &freightTemplate_create_request.FreightTemplateCreateParam{
Template: templateInfo.Template,
Columns: templateInfo.Columns,
}
resp, err := api.DouDianApi.FreightTemplateCreate(info)
if err != nil {
return err
}
//创建成功后进行绑定
bindInfo := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{
StoreId: vendorStoreID,
FreightId: resp.TemplateId,
}
_, err1 := api.DouDianApi.BindFreightTemplate(bindInfo)
if err != nil {
return err1
}
//并写入数据库
freightInfo := model.FreightTemplate{
StoreID: storeID,
VendorStoreID: vendorStoreID,
TemplateID: resp.TemplateId,
}
if err = dao.CreateEntity(db, freightInfo); err != nil {
return err
}
return nil
}
// /shop/bindStoreFreight 门店绑定运费模版
//门店绑定运费模版,运费模版必须属于门店关联的抖店,且门店与运费模版是一对一关系
func (P *PurchaseHandler) ShopBindStoreFreight(storeID, freightID int64) error {
param := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{
StoreId: storeID,
FreightId: freightID,
}
_, err := api.DouDianApi.BindFreightTemplate(param)
if err != nil {
return err
}
return nil
}
// /address/create 创建店铺地址库(新建即绑定)
func (P *PurchaseHandler) CreateAddress(addressInfo address_create_request.AddressCreateParam) (addressID int64, err error) {
info := &address_create_request.AddressCreateParam{
Address: addressInfo.Address,
StoreId: addressInfo.StoreId,
}
resp, err := api.DouDianApi.AddressCreate(info)
if err != nil {
return 0, err
}
//添加进数据库page_shop
//获取门店信息
//storeID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{
// StoreId: addressInfo.StoreId,
//}
//storeInfo, err1 := api.DouDianApi.GetStoreDetail(storeID)
//if err1 != nil {
// return 0, err1
//}
//createAddress := &model.PageShop{ //此表暂存门店售后地址库
// Name: storeInfo.StoreDetail.Store.Name,
// VendorID: model.VendorIDDouDian,
// VendorStoreID: utils.Int64ToStr(storeInfo.StoreDetail.Store.StoreId), //抖店平台ID
// OrgCode: storeInfo.StoreDetail.Store.StoreCode, //暂时用来存放京西平台门店ID
// VendorStatus: utils.Int64ToStr(storeInfo.StoreDetail.Store.State),
// Status: 0,
// CityCode: utils.Str2Int(storeInfo.StoreDetail.Store.CityCode),
// DistrictCode: utils.Str2Int(storeInfo.StoreDetail.Store.DistrictCode),
// Address: storeInfo.StoreDetail.Store.Address,
// Lng: utils.Str2Float64(storeInfo.StoreDetail.Store.Longitude),
// Lat: utils.Str2Float64(storeInfo.StoreDetail.Store.Latitude),
// Tel1: storeInfo.StoreDetail.Store.Contact,
//}
//if err = dao.CreateEntity(dao.GetDB(), createAddress); err != nil {
// return 0, err
//}
return resp.AddressId, nil
}
// /address/list 获取售后地址列表接口
//分页获取商家地址列表
func (P *PurchaseHandler) GetAddressList(param *address_list_request.AddressListParam) (*address_list_response.AddressListData, error) {
//不传入ID则是获取所有门店售后地址列表
info := &address_list_request.AddressListParam{
PageSize: 10,
PageNo: 1,
OrderBy: param.OrderBy,
OrderField: param.OrderField,
}
if param.StoreId != 0 {
info.StoreId = param.StoreId
}
listInfo, err := api.DouDianApi.GetAddressList(info)
if err != nil {
return nil, err
}
return listInfo, nil
}
// /trade/createTradeLimitTemplate 创建限售模板
func (P *PurchaseHandler) CreateTradeLimitTemplate(template trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam) (tradeLimitID int64, err error) {
info := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{
StoreId: template.StoreId,
TradeLimitRuleRequestList: template.TradeLimitRuleRequestList,
}
resp, err := api.DouDianApi.CreateTradeLimitTemplate(info)
if err != nil {
return 0, err
}
return resp.TradeLimitId, nil
}
// /shop/bindStoreSaleLimit 门店绑定限售模板
func (P *PurchaseHandler) BindStoreSaleLimit(storeID, saleLimitTemplateID int64) error {
info := &shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{
StoreId: storeID,
SaleLimitId: saleLimitTemplateID,
}
if _, err := api.DouDianApi.BindStoreSaleLimit(info); err != nil {
return err
}
return nil
}
func (P *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, opTimeList []int16) (err error) {
t1 := opTimeList[0]
t2 := opTimeList[1]
t3 := opTimeList[2]
t4 := opTimeList[4]
timeStr := splicingTimeToDoudian(t1, t2, t3, t4)
m := make(map[int64]string)
for j := 1; j <= 7; j++ {
m[int64(j)] = timeStr
}
params := &shop_editStore_request.ShopEditStoreParam{
StoreId: utils.Str2Int64(vendorStoreID),
OpenTime: &shop_editStore_request.OpenTime{
DayMap: m,
},
}
if globals.EnableDouDianStoreWrite {
api.DouDianApi.EditStore(params)
}
return err
}
func (P *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) {
params := &shop_getStoreDetail_request.ShopGetStoreDetailParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
result, err := api.DouDianApi.GetStoreDetail(params)
if err != nil {
return 0, err
}
status := bizStatusJX2DouDian(int(result.StoreDetail.Store.State))
return status, nil
}
func (P *PurchaseHandler) EnableAutoAcceptOrder(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, isSetEnable bool) (err error) {
return err
}
// 获取店铺所有平台ID
func (P *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrgCode string) (vendorStoreIDs []string, err error) {
param := &shop_getStoreList_request.ShopGetStoreListParam{
Page: 0,
PageSize: 10,
}
storeList, err := api.DouDianApi.GetStoreList(param)
if err != nil {
return nil, err
}
if len(storeList.StoreDetailList) > 0 {
vendorStoreIDs = make([]string, len(storeList.StoreDetailList))
for k, v := range storeList.StoreDetailList {
vendorStoreIDs[k] = utils.Int64ToStr(v.Store.StoreId)
}
}
return vendorStoreIDs, err
}
func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) {
if lineStatus == model.StoreStatusOpened {
param := &shop_storeSuspend_request.ShopStoreSuspendParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
_, err = api.DouDianApi.StoreSuspend(param)
} else {
param := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{
StoreId: utils.Str2Int64(vendorStoreID),
}
_, err = api.DouDianApi.UnsuspendStore(param)
}
return err
}
func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (store *dao.StoreDetail, err error) {
return nil, err
}
func (P *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
return "", errors.New("抖店暂不支持此操作")
}

View File

@@ -1,5 +1,15 @@
package doudian package doudian
//
//import (
// freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
// shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request"
// "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
// "git.rosy.net.cn/baseapi/utils"
// "git.rosy.net.cn/jx-callback/business/model"
// "git.rosy.net.cn/jx-callback/business/model/dao"
// "testing"
//)
// //
//func TestCreateStore(t *testing.T) { //func TestCreateStore(t *testing.T) {
// accesstoken := `{"access_token":"90868a42-1287-4453-ba71-34c72f22e886","expires_in":555553,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接专用店","refresh_token":"4e8cf946-8df1-4489-be88-f96f2d4603a8","authority_id ":""}` // accesstoken := `{"access_token":"90868a42-1287-4453-ba71-34c72f22e886","expires_in":555553,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接专用店","refresh_token":"4e8cf946-8df1-4489-be88-f96f2d4603a8","authority_id ":""}`
@@ -7,22 +17,93 @@ package doudian
// request := shop_batchCreateStore_request.New() // request := shop_batchCreateStore_request.New()
// //storeList := make([]*shop_batchCreateStore_request.StoreListItem, 0) // //storeList := make([]*shop_batchCreateStore_request.StoreListItem, 0)
// storeInfo := model.Store{ // storeInfo := model.Store{
// RowID: int64(2), // Name: "京西菜市小时达测试店铺0926",
// Name: "京西菜市小时达测试店铺0921", // Lng: utils.Str2Int("128.443241"),
// StoreCode: "666667", // Lat: utils.Str2Int("31.133237"),
// Lng: utils.Str2Int("119.441741"), // Address: "金牛区一环路北二段10号",
// Lat: utils.Str2Int("32.133087"), // Tel1: "17358644830",
// Address: "金牛区二环路北一段10号", // OpenTime1: 700,
// Tel1: "17358644830", // CloseTime1: 1230,
// OpenTime: map[int64]string{1: "07:00-19:00", 2: "8:00-19:00"}, // OpenTime2: 1300,
// CloseTime2: 1800,
// //OpenTime: map[int64]string{1: "07:00-19:00", 2: "8:00-19:00"},
// } // }
// list := &dao.StoreDetail{} // list := &dao.StoreDetail{}
// list.Store = storeInfo // list.Store = storeInfo
// list.ProvinceName = "四川省" // list.ProvinceName = "四川省"
// list.CityName = "成都市" // list.CityName = "成都市"
// list.DistrictName = "金牛区" // list.DistrictName = "金牛区"
// list.VendorStoreID = "666667"
// _, err := CurPurchaseHandler.CreateStore2(nil, 0, "", nil, list) // _, err := CurPurchaseHandler.CreateStore2(nil, 0, "", nil, list)
// resp, err := request.Execute(tiktok_api.AccessToken) // resp, err := request.Execute(tiktok_api.AccessToken)
// t.Fatal("err===========", err) // t.Fatal("err===========", err)
// t.Fatalf("resp===========:%v", resp) // t.Fatalf("resp===========:%v", resp)
//} //}
//
//func TestUpdateStore(t *testing.T) {
// accesstoken := `{"access_token":"90868a42-1287-4453-ba71-34c72f22e886","expires_in":555553,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接专用店","refresh_token":"4e8cf946-8df1-4489-be88-f96f2d4603a8","authority_id ":""}`
// tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken)
// request := shop_batchCreateStore_request.New()
// err := CurPurchaseHandler.UpdateStore(nil, 666667, "")
// resp, err := request.Execute(tiktok_api.AccessToken)
// t.Fatal("err===========", err)
// t.Fatalf("resp===========:%v", resp)
//}
////
////func TestCreateFreightTemplate(t *testing.T) {
//// accesstoken := `{"access_token":"6c4d71b3-831c-4a96-8d2e-977e37afba5a","expires_in":462248,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接 专用店","refresh_token":"65aae144-4cc0-44d2-89ba-5d3062caca41","authority_ id":""}`
//// tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken)
//// t1 := freightTemplate_create_request.FreightTemplateCreateParam{
//// Columns: []freightTemplate_create_request.ColumnsItem{
//// {
//// AddWeight: 20,
//// MinSkuAmount: -1,
//// FirstWeight: 20,
//// ProvinceInfos: []freightTemplate_create_request.ProvinceInfosItem{
//// {
//// Id: 51,
//// Children: []freightTemplate_create_request.ChildrenItem_4{
//// {
//// Id: 510101,
//// Children: []freightTemplate_create_request.ChildrenItem_5{
//// {
//// Id: 510107,
//// Children: []freightTemplate_create_request.ChildrenItem{
//// {
//// Id: 610041,
//// },
//// },
//// },
//// },
//// },
//// },
//// },
//// },
//// },
//// },
//// Template: &freightTemplate_create_request.Template{
//// TemplateName: "运费模板创建测试0929",
//// ProductProvince: 51,
//// ProductCity: 510104,
//// CalculateType: 1,
//// TransferType: 1,
//// RuleType: 0,
//// },
//// }
//// //t2 := []freightTemplate_create_request.FreightTemplateCreateParam{}
//// //t2 = append(t2, t1)
//// freightID, err := CurPurchaseHandler.CreateFreightTemplate(t1)
//// //fmt.Println("freightID==", fmt.Sprintf("%v", freightID))
//// t.Fatal("err===========", err)
//// t.Fatalf("resp===========:%v", freightID)
////}
//
////func TestBindFreightTemplate(t *testing.T) {
//// accesstoken := `{"access_token":"6c4d71b3-831c-4a96-8d2e-977e37afba5a","expires_in":462248,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接 专用店","refresh_token":"65aae144-4cc0-44d2-89ba-5d3062caca41","authority_ id":""}`
//// tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken)
//// request := shop_bindStoreFreight_request.New()
//// param := shop_bindStoreFreight_request.ShopBindStoreFreightParam{
//// //StoreId: ,
//// //FreightId: ,
//// }
////}

View File

@@ -0,0 +1,143 @@
package doudian
import (
"fmt"
warehouse_bindFencesByStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindFencesByStore/request"
warehouse_bindStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindStore/request"
warehouse_createBatch_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createBatch/request"
warehouse_createFence_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createFence/request"
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/api"
"strings"
)
// /warehouse/createBatch 批量创建区域仓
func (P *PurchaseHandler) BatchCreateWarehouse(param warehouse_createBatch_request.WarehouseCreateBatchParam) error {
infos := []warehouse_createBatch_request.OutWarehouseListItem{}
for _, v := range param.OutWarehouseList {
info := warehouse_createBatch_request.OutWarehouseListItem{
OutWarehouseId: v.OutWarehouseId,
Name: v.Name,
Intro: v.Intro,
AddressDetail: v.AddressDetail,
WarehouseLocation: v.WarehouseLocation,
}
infos = append(infos, info)
}
req := &warehouse_createBatch_request.WarehouseCreateBatchParam{
OutWarehouseList: infos,
}
resp, err := api.DouDianApi.BatchCreateWarehouse(req)
if err != nil {
return err
}
if resp.Data["outWarehouseId"] == false {
return fmt.Errorf("outWarehouseId:%v 出错", resp.Data["outWarehouseId"])
}
return nil
}
// /warehouse/bindStore 仓库绑定门店
func (P *PurchaseHandler) BindStoreWarehouse(storeIDs []int64, outWarehouseID string) error {
param := &warehouse_bindStore_request.WarehouseBindStoreParam{
StoreIds: storeIDs,
OutWarehouseId: outWarehouseID,
}
if _, err := api.DouDianApi.StoreBindWarehouse(param); err != nil {
return err
}
return nil
}
type LocalStore struct {
Lng int `json:"-"` // 乘了10的6次方
Lat int `json:"-"` // 乘了10的6次方
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
DeliveryRange string `json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon则为逗号分隔坐标分号分隔的坐标点坐标与Lng和Lat一样都是整数比如 121361504,31189308;121420555,31150238。否则为半径单位为米
VendorStoreID string `json:"vendorStoreID"` // 平台上门店id
}
// /warehouse/createFence 以门店方式创建电子围栏
func (P *PurchaseHandler) CreateFenceByStore(storeID int) (fenceID string, err error) {
var (
db *dao.DaoDB
localStore *LocalStore
verticeses []warehouse_createFence_request.VerticesItem
)
sqlParam := []interface{}{
model.VendorIDDouDian,
}
sqlStr := ` SELECT t.lng,t.lat,t.delivery_range_type,t.delivery_range,s.vendor_store_id FROM store t
LEFT JOIN store_map s ON t.id = s.store_id
WHERE s.vendor_id= ? `
if storeID != 0 {
sqlStr += " AND t.id = ? "
sqlParam = append(sqlParam, storeID)
} else {
return "", fmt.Errorf("storeID必填")
}
if err = dao.GetRow(db, &localStore, sqlStr, sqlParam...); err == nil {
param := &warehouse_createFence_request.WarehouseCreateFenceParam{
FenceInfo: &warehouse_createFence_request.FenceInfo{
OutFenceId: "京西门店:" + utils.Int2Str(storeID) + " 的电子围栏",
Shape: int32(localStore.DeliveryRangeType),
},
}
if localStore.DeliveryRangeType == tiktok_api.ShapeCircular {
circular := &warehouse_createFence_request.Circular{
Center: &warehouse_createFence_request.Center{
Longitude: utils.Int2Float64(localStore.Lng),
Latitude: utils.Int2Float64(localStore.Lat),
},
Radius: utils.Str2Float64(localStore.DeliveryRange),
}
param.FenceInfo.Circular = circular
} else if localStore.DeliveryRangeType == tiktok_api.ShapePolygon {
tempStr := strings.Split(localStore.DeliveryRange, ";")
for v := len(tempStr) - 1; v >= 0; v-- {
s2 := strings.Split(tempStr[v], ",")
vertices := warehouse_createFence_request.VerticesItem{
Longitude: utils.Str2Float64(s2[0]),
Latitude: utils.Str2Float64(s2[1]),
}
verticeses = append(verticeses, vertices)
}
param.FenceInfo.Polygon.Vertices = verticeses
}
resp, err := api.DouDianApi.CreateFence(param)
if err != nil {
return "", err
} else {
return resp.FenceId, err
}
} else {
return "", err
}
}
//直接创建电子围栏方式
func (P *PurchaseHandler) CreateFenceDirectly(param warehouse_createFence_request.WarehouseCreateFenceParam) (fenceID string, err error) {
info := &warehouse_createFence_request.WarehouseCreateFenceParam{
FenceInfo: param.FenceInfo,
}
resp, err := api.DouDianApi.CreateFence(info)
if err != nil {
return "", err
}
return resp.FenceId, err
}
//门店直接绑定围栏
func (P *PurchaseHandler) BindFenceByStore(storeID int64, addOutFenceIDs []string) error {
param := &warehouse_bindFencesByStore_request.WarehouseBindFencesByStoreParam{
StoreId: storeID,
AddOutFenceIds: addOutFenceIDs,
}
if _, err := api.DouDianApi.BindFenceByStore(param); err != nil {
return err
}
return nil
}

View File

@@ -255,8 +255,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?) JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?)
LEFT JOIN brand t3 ON t3.id = t1.brand_id LEFT JOIN brand t3 ON t3.id = t1.brand_id
WHERE t1.id = ? WHERE t1.id = ?
ORDER BY t2.updated_at ORDER BY t2.updated_at`
`
if err = dao.GetRows(db, &stores, sql, model.VendorIDEBAI, utils.DefaultTimeValue, storeID); err == nil { if err = dao.GetRows(db, &stores, sql, model.VendorIDEBAI, utils.DefaultTimeValue, storeID); err == nil {
for _, store := range stores { for _, store := range stores {
if globals.EnableEbaiStoreWrite { if globals.EnableEbaiStoreWrite {
@@ -264,7 +263,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
if store.SyncStatus&model.SyncFlagDeletedMask == 0 { if store.SyncStatus&model.SyncFlagDeletedMask == 0 {
shopID = store.ID shopID = store.ID
} }
store2, err2 := p.ReadStore(jxcontext.AdminCtx, store.VendorOrgCode, store.VendorStoreID,"") store2, err2 := p.ReadStore(jxcontext.AdminCtx, store.VendorOrgCode, store.VendorStoreID, "")
// globals.SugarLogger.Debugf("ebai UpdateStore2 store2:%s, err2:%v", utils.Format4Output(store2, true), err2) // globals.SugarLogger.Debugf("ebai UpdateStore2 store2:%s, err2:%v", utils.Format4Output(store2, true), err2)
if err = err2; err == nil { if err = err2; err == nil {
if store2.ID == store.ID { if store2.ID == store.ID {

View File

@@ -61,7 +61,7 @@ type tEbaiStoreInfo struct {
DistrictID int `orm:"column(district_id)"` DistrictID int `orm:"column(district_id)"`
} }
func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID,vendorStoreName string) (retVal *dao.StoreDetail, err error) { func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (retVal *dao.StoreDetail, err error) {
result, err := getAPIWithoutToken(vendorOrgCode).PoiGet(vendorStoreID) result, err := getAPIWithoutToken(vendorOrgCode).PoiGet(vendorStoreID)
if err == nil { if err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(result, false)) // globals.SugarLogger.Debug(utils.Format4Output(result, false))
@@ -232,12 +232,13 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
db = dao.GetDB() db = dao.GetDB()
} }
mtapi := getAPI(getStoreVendorOrgCode(storeID), storeID, "") mtapi := getAPI(getStoreVendorOrgCode(storeID), storeID, "")
//获取本地store信息
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM, "") storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM, "")
if err != nil { if err != nil {
return err return err
} }
errList := errlist.New() errList := errlist.New()
//获取平台store信息
remoteStoreInfo, err := mtapi.PoiGet(storeDetail.VendorStoreID) remoteStoreInfo, err := mtapi.PoiGet(storeDetail.VendorStoreID)
if err != nil { if err != nil {
return err return err

View File

@@ -38,6 +38,7 @@ enableMtwmStoreWrite = false
enableWscStoreWrite = false enableWscStoreWrite = false
enableYbStoreWrite = false enableYbStoreWrite = false
enableJdShopWrite = false enableJdShopWrite = false
enableDouDianStoreWrite=false
jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY" jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"

View File

@@ -17,15 +17,16 @@ var (
AliKey string AliKey string
AliSecret string AliSecret string
EnableStoreWrite bool EnableStoreWrite bool
EnableJdStoreWrite bool EnableJdStoreWrite bool
EnableEbaiStoreWrite bool EnableEbaiStoreWrite bool
EnableElmStoreWrite bool EnableElmStoreWrite bool
EnableMtwmStoreWrite bool EnableMtwmStoreWrite bool
EnableWscStoreWrite bool EnableWscStoreWrite bool
EnablePendingChange bool EnablePendingChange bool
EnableYbStoreWrite bool EnableYbStoreWrite bool
EnableJdShopWrite bool //京东商城 EnableJdShopWrite bool //京东商城
EnableDouDianStoreWrite bool //抖音-抖店
QiniuBucket string QiniuBucket string
WeimobCallbackURL string WeimobCallbackURL string
@@ -113,6 +114,7 @@ func Init() {
// EnablePendingChange = web.AppConfig.DefaultBool("enablePendingChange", false) // EnablePendingChange = web.AppConfig.DefaultBool("enablePendingChange", false)
EnableYbStoreWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableYbStoreWrite", false) EnableYbStoreWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableYbStoreWrite", false)
EnableJdShopWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableJdShopWrite", false) EnableJdShopWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableJdShopWrite", false)
EnableDouDianStoreWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableDouDianStoreWrite", false)
QiniuBucket = web.AppConfig.DefaultString("qiniuBucket", "") QiniuBucket = web.AppConfig.DefaultString("qiniuBucket", "")