@@ -3,9 +3,6 @@ package tiktok_store
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"
freightTemplate_update_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_update/request"
shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request"
@@ -160,12 +157,7 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee
db * dao . DaoDB
)
//1.平台获取门店运费模板
bindFreightIDs , err := GetStoreFreight ( vendorOrgCode , vendorStoreID )
if err != nil {
globals . SugarLogger . Debugf ( "获取门店(%d) 绑定运费模板出错:%v" , vendorStoreID , err )
errList . AddErr ( fmt . Errorf ( "获取门店(%d) 绑定运费模板出错:%v" , vendorStoreID , err ) )
}
if bindFreightIDs == 0 { //( 1) 未查询到绑定信息, 不算错误
if bindFreightIDs , err := GetStoreFreight ( vendorOrgCode , vendorStoreID ) ; err != nil || bindFreightIDs == 0 { //( 1) 未查询到绑定信息, 不算错误
//创建
if freightTemplateID , err := CreateFreightTemplate ( int ( storeID ) ) ; err != nil || freightTemplateID == 0 || utils . IsNil ( freightTemplateID ) {
globals . SugarLogger . Debugf ( "京西菜市门店:%d 平台门店:%d 创建运费模板:%d 失败:%v" , storeID , vendorStoreID , freightTemplateID , err )
@@ -233,12 +225,7 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee
}
//3.平台获取限售模板
bindSaleLimitID , err := GetStoreSaleLimit ( vendorOrgCode , vendorStoreID )
if err != nil {
globals . SugarLogger . Debugf ( "获取门店(%d) 限售模板失败:%v" , vendorStoreID , err )
errList . AddErr ( fmt . Errorf ( "获取门店(%d) 限售模板失败:%v" , vendorStoreID , err ) )
}
if bindSaleLimitID == 0 || utils . IsNil ( bindSaleLimitID ) { //未绑定限售模板,目前默认创建起送价限售模板
if bindSaleLimitID , err := GetStoreSaleLimit ( vendorOrgCode , vendorStoreID ) ; err != nil || bindSaleLimitID == 0 || utils . IsNil ( bindSaleLimitID ) { //未绑定限售模板,目前默认创建起送价限售模板
if createSaleLimitID , err := CreateAndBindMinPriceTemplate ( vendorOrgCode , vendorStoreID , minPrice ) ; err != nil {
errList . AddErr ( fmt . Errorf ( "设置门店起送价限售模板失败:%v" , err ) )
} else {
@@ -451,8 +438,7 @@ func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
if storeInfo . SyncStatus & ( model . SyncFlagNewMask | model . SyncFlagStoreStatus ) != 0 {
errList . AddErr ( UpdateStoreStatus ( jxcontext . AdminCtx , storeInfo . VendorOrgCode , storeID , storeInfo . VendorStoreID , mergedStoreStatus ) )
}
err3 := apiObj . EditStore ( params )
if err3 != nil {
if err3 := apiObj . EditStore ( params ) ; err3 != nil {
errList . AddErr ( fmt . Errorf ( "修改门店(%d) 信息失败:%v" , utils . Str2Int64 ( storeInfo . VendorStoreID ) , err3 ) )
}
//电子围栏
@@ -547,20 +533,12 @@ func CreateFreightTemplate(storeCode int) (int64, error) {
Template : & freightTemplate_create_request . Template {
TemplateName : storeDetail . VendorStoreName + "(" + utils . Int2Str ( storeCode ) + ")_" ,
ProductProvince : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
CalculateType : 2 , //计价方式-1.按重量 2.按数量
TransferType : 1 ,
RuleType : 1 , //固定运费&卖家包邮
CalculateType : tiktok_api . CalculateTypeNum ,
TransferType : tiktok_api . TransferTypeExpress ,
RuleType : tiktok_api . RuleTypeFlatShipping ,
FixedAmount : 500 , //固定运费 单位:分
} ,
}
//直辖市特殊处理
flag := false
if storeDetail . CityName == tiktok_api . MunicipalityBeiJin || storeDetail . CityName == tiktok_api . MunicipalityShangHai || storeDetail . CityName == tiktok_api . MunicipalityTianJin || storeDetail . CityName == tiktok_api . MunicipalityChongQing {
flag = true
param . Template . ProductCity = int64 ( storeDetail . ProvinceCode )
} else {
param . Template . ProductCity = int64 ( storeDetail . CityCode )
}
if int64 ( storeDetail . DeliveryFeeDeductionSill ) != 0 {
param . Template . TemplateName += "满减包邮模板"
columns := [ ] freightTemplate_create_request . ColumnsItem {
@@ -570,53 +548,55 @@ func CreateFreightTemplate(storeCode int) (int64, error) {
OverAmount : int64 ( storeDetail . DeliveryFeeDeductionSill ) , //此字段在vendor_id=14时 存储满x包邮金额
} }
param . Columns = columns
if flag {
param . Columns [ 0 ] . ProvinceInfos = [ ] freightTemplate_create_request . ProvinceInfosItem {
{
Id : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_4 {
{
Id : int64 ( storeDetail . ProvinceCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_5 {
{
Id : int64 ( storeDetail . DistrictCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem {
{ Id : 0 } ,
} ,
} ,
} ,
} ,
} } ,
}
} else {
param . Columns [ 0 ] . ProvinceInfos = [ ] freightTemplate_create_request . ProvinceInfosItem {
{
Id : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_4 {
{
Id : int64 ( storeDetail . CityCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_5 {
{
Id : int64 ( storeDetail . DistrictCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem {
{ Id : 0 } ,
} ,
} ,
} ,
} ,
} } ,
}
}
} else {
param . Columns = nil
param . Template . TemplateName += "固定运费模板"
}
globals . SugarLogger . Debugf ( " param.Template.ProductCity==%d,param.Template.ProductProvince==%d" , param . Template . ProductCity , param . Template . ProductProvince )
resp , err := getAPI ( storeDetail . VendorOrgCode , storeCode , storeDetail . VendorStoreID ) . FreightTemplateCreate ( param )
if err ! = nil {
return 0 , err
//直辖市特殊处理
if HandleMunicipality ( storeDetail . CityName ) {
param . Template . ProductCity = int64 ( storeDetail . ProvinceCode )
param . Columns [ 0 ] . ProvinceInfos = [ ] freightTemplate_create_request . ProvinceInfosItem {
{
Id : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_4 {
{
Id : int64 ( storeDetail . ProvinceCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_5 {
{
Id : int64 ( storeDetail . DistrictCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem {
{ Id : 0 } ,
} ,
} ,
} ,
} ,
} } ,
}
} else {
param . Template . ProductCity = int64 ( storeDetail . CityCode )
param . Columns [ 0 ] . ProvinceInfos = [ ] freightTemplate_create_request . ProvinceInfosItem {
{
Id : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_4 {
{
Id : int64 ( storeDetail . CityCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem_5 {
{
Id : int64 ( storeDetail . DistrictCode ) ,
Children : [ ] freightTemplate_create_request . ChildrenItem {
{ Id : 0 } ,
} ,
} ,
} ,
} ,
} } ,
}
}
if resp , err := getAPI ( storeDetail . VendorOrgCode , storeCode , storeDetail . VendorStoreID ) . FreightTemplateCreate ( param ) ; err != nil {
return 0 , err
} else {
return resp . TemplateId , nil
}
return resp . TemplateId , nil
}
// /freightTemplate/update 修改运费模板
@@ -637,9 +617,9 @@ func UpdateFreightTemplate(storeCode int) error {
Id : bindTemplate ,
TemplateName : storeDetail . VendorStoreName + "(" + utils . Int2Str ( storeCode ) + ")_" ,
ProductProvince : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
CalculateType : 2 , //计价方式-1.按重量 2.按数量
TransferType : 1 ,
RuleType : 1 , //固定运费
CalculateType : tiktok_api . CalculateTypeNum ,
TransferType : tiktok_api . TransferTypeExpress ,
RuleType : tiktok_api . RuleTypeFlatShipping ,
FixedAmount : 500 , //固定运费 单位:分
} ,
}
@@ -670,119 +650,103 @@ func UpdateFreightTemplate(storeCode int) error {
return nil
}
// /freightTemplate/create 批量创建 满x包邮 运费模板
// func (P *PurchaseHandler) BatchCreateFreightTemplate(relInfo map[string]map[string]string, shipFee int64) error {
// var (
// errList = errlist.New( )
// flag = make(map[string]bool )
// )
// for i, j := range relInfo {
// for k, v := range j {
// if bindFreightID, err := getAPI(i, utils.Str2Int(k), v).GetStoreFreight(utils.Str2Int64(v)); err != nil || len(bindFreightID) == 0 {
// flag[v] = false
// }
// flag[v] = true
// }
// }
// storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDDD, "")
// if err != nil {
// return errors.New("获取门店信息失败,请重试")
// }
// //预处理(1)更新 (2)创建
// param := &freightTemplate_create_request.FreightTemplateCreateParam{
// Template: &freightTemplate_create_request.Template{
// TemplateName: storeDetail.VendorStoreName + "(" + utils.Int2Str(storeID) + ")_",
// ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[:2]) ,
// CalculateType: 2, //计价方式-1.按重量 2.按数量
// TransferType: 1,
// RuleType: 1, //固定运费&卖家包邮
// FixedAmount: 500, //固定运费 单位:分
// } ,
// }
// //直辖市特殊处理
// flag := false
// if storeDetail.CityName == tiktok_api.MunicipalityBeiJin || storeDetail.CityName == tiktok_api.MunicipalityShangHai || storeDetail.CityName == tiktok_api. MunicipalityTianJin || storeDetail. CityName == tiktok_api.MunicipalityChongQing {
// flag = true
// param.Template.ProductCity = int64(storeDetail.ProvinceCode)
// } else {
// param.Template.ProductCity = int64(storeDetail.CityCode)
// }
// if int64(storeDetail.DeliveryFeeDeductionSill) != 0 {
// param.Template.TemplateName += "满减包邮模板"
// columns := []freightTemplate_create_request.ColumnsItem {
// {
// IsOverFree: true, //是否包邮
// IsLimited: false,
// OverAmount: int64(storeDetail.DeliveryFeeDeductionSill), //此字段在vendor_id=14时 存储满x包邮金额
// }}
// param.Columns = columns
// if flag {
// param.Columns[0].ProvinceInfos = []freightTemplate_create_request.ProvinceInfosItem{
// {
// Id: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[:2]),
// Children: []freightTemplate_create_request.ChildrenItem_4{
// {
// Id: int64(storeDetail.ProvinceCode),
// Children: []freightTemplate_create_request.ChildrenItem_5{
// {
// Id: int64(storeDetail.DistrictCode),
// Children: []freightTemplate_create_request.ChildrenItem{
// {Id: 0},
// },
// },
// },
// },
// }},
// }
// } else {
// param.Columns[0].ProvinceInfos = []freightTemplate_create_request.ProvinceInfosItem{
// {
// Id: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[:2]),
// Children: []freightTemplate_create_request.ChildrenItem_4 {
// {
// Id: int64(storeDetail.CityCode),
// Children: []freightTemplate_create_request.ChildrenItem_5 {
// {
// Id: int64(storeDetail.DistrictCode),
// Children: []freightTemplate_create_request.ChildrenItem{
// {Id: 0} ,
// } ,
// } ,
// } ,
// } ,
// }} ,
// }
// }
// } else {
// param.Columns = nil
// param.Template.TemplateName += "固定运费模板"
// }
// globals.SugarLogger.Debugf(" param.Template.ProductCity==%d,param.Template.ProductProvince==%d", param.Template.ProductCity, param.Template.ProductProvince)
// resp, err := getAPI(storeDetail.VendorOrgCode, storeCode, storeDetail.VendorStoreID).FreightTemplateCreate(param)
// if err != nil {
// return 0, err
// }
// return resp.TemplateId, nil
//
// bindInfo := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{
// StoreId: vendorStoreID,
// FreightId: resp.TemplateId,
// }
// err = api.BindFreightTemplate(bindInfo)
// if err != nil {
// return err
// }
// //并写入数据库
// freightInfo := model.FreightTemplate{
// StoreID: int(storeID),
// VendorStoreID: utils.Int64ToStr(vendorStoreID),
// TemplateID: resp.TemplateId,
// }
// if err = dao.CreateEntity(db, freightInfo); err != nil {
// return err
// }
// return nil
//}
// /freightTemplate/create 批量创建绑定 满x包邮 运费模板
func CreateBindFreeShipTemplate ( storeID int , shipFee int64 ) error {
var (
db = dao . GetDB ( )
errList = errlist . New ( )
FreightTemplate = & model . FreightTemplate { }
)
if shipFee == 0 {
return errors . New ( "包邮金额必传,请检查" )
}
storeDetail , err := dao . GetStoreDetail ( dao . GetDB ( ) , storeID , model . VendorIDDD , "" )
if err != nil {
return errors . New ( "创建包邮运费模板,获取门店信息失败,请重试" )
}
param := & freightTemplate_create_request . FreightTemplateCreateParam {
Template : & freightTemplate_create_request . Template {
TemplateName : storeDetail . VendorStoreName + "(" + utils . Int2Str ( storeID ) + ")_的满" + utils . Int64ToStr ( shipFee ) + "包邮模板" ,
ProductProvince : utils . Str2Int64 ( utils . Int2Str ( storeDetail . ProvinceCode ) [ : 2 ] ) ,
CalculateType : tiktok_api . CalculateTypeNum ,
TransferType : tiktok_api . TransferTypeExpress ,
RuleType : tiktok_api . RuleTypeFlatShipping ,
FixedAmount : 500 , //固定运费 单位:分
} ,
Columns : [ ] freightTemplate_create_request . ColumnsItem {
{
IsOverFree : true ,
IsLimited : false ,
OverAmount : shipFee ,
} } ,
}
//直辖市特殊处理
if Handle Municipality( storeDetail. CityName) {
param . Template . ProductCity = int64 ( storeDetail . ProvinceCode )
} else {
param . Template . ProductCity = int64 ( storeDetail . CityCode )
}
if resp , err := getAPI ( storeDetail . VendorOrgCode , storeID , storeDetail . VendorStoreID ) . FreightTemplateCreate ( param ) ; err != nil {
return errors . New ( fmt . Sprintf ( "平台门店(%s) 京西门店(%d) 创建包邮模板失败:%v,根据提示处理" , storeDetail . VendorStoreID , storeID , err ) )
} else {
if err := ShopBindStoreFreight ( storeDetail . VendorOrgCode , utils . Str2Int64 ( storeDetail . VendorStoreID ) , resp . TemplateId ) ; err != nil {
return errors . New ( fmt . Sprintf ( "平台门店(%s) 京西门店(%d) 绑定包邮模板失败:%v,根据提示处理" , storeDetail . VendorStoreID , storeID , err ) )
} else {
if err := dao . CreateEntity ( db , FreightTemplate ) ; err != nil {
if _ , err1 := dao . UpdateEntity ( db , FreightTemplate , "TemplateID" ) ; err1 != nil {
errList . AddErr ( fmt . Errorf ( "包邮模板:更新操作,同步进数据库错误信息:%v" , err1 ) )
} else {
errList . AddErr ( fmt . Errorf ( "包邮模板:创建操作,同步进数据库错误信息:%v" , err ) )
}
}
}
}
if errList . GetErrListAsOne ( ) != nil {
return errList . GetErrListAsOne ( )
}
return nil
}
//更新 包邮运费模板
func UpdateFreeShipTemplate ( storeID int , shipFee int64 ) error {
if shipFee == 0 {
return errors . New ( "包邮金额必传,请检查" )
}
storeDetail , err := dao . GetStoreDetail ( dao . GetDB ( ) , storeID , model . VendorIDDD , "" )
if err != nil {
return errors . New ( "更新包邮运费模板,获取门店信息失败,请重试" )
}
a := getAPI ( storeDetail . VendorOrgCode , storeID , storeDetail . VendorStoreID )
//获取远程运费模板详情
if bindFreightID , err := a . GetStoreFreight ( utils . Str2Int64 ( storeDetail . VendorStoreID ) ) ; err != nil || len ( bindFreightID ) == 0 || utils . IsNil ( bindFreightID ) {
//return errors.New("门店未绑定运费模板,")
} else {
if freightDetail , err := a . GetStoreFreightDetail ( bindFreightID [ 0 ] ) ; err != nil {
param := & freightTemplate_update_request . FreightTemplateUpdateParam {
Template : & freightTemplate_update_request . Template {
Id : bindFreightID [ 0 ] ,
TemplateName : freightDetail . Template . TemplateName ,
ProductProvince : utils . Str2Int64 ( freightDetail . Template . ProductProvince ) ,
ProductCity : utils . Str2Int64 ( freightDetail . Template . ProductCity ) ,
CalculateType : tiktok_api . CalculateTypeNum ,
TransferType : tiktok_api . TransferTypeExpress ,
RuleType : tiktok_api . RuleTypeFlatShipping ,
FixedAmount : 500 ,
} ,
Columns : [ ] freightTemplate_update_request . ColumnsItem {
{
IsOverFree : true ,
IsLimited : false ,
OverAmount : shipFee ,
} } ,
}
if _ , err := a . FreightTemplateUpdate ( param ) ; err != nil {
return errors . New ( "更新包邮运费模板失败" )
}
}
}
return nil
}
// /shop/bindStoreFreight 门店绑定运费模版
//门店绑定运费模版,运费模版必须属于门店关联的抖店,且门店与运费模版是一对一关系
@@ -805,38 +769,6 @@ func GetStoreFreight(vendorOrgCode string, storeID int64) (int64, error) {
}
}
// /address/create 创建店铺地址库(新建即绑定)
func ( P * PurchaseHandler ) CreateAddress ( appOrgCode string , addressInfo address_create_request . AddressCreateParam ) ( addressID int64 , err error ) {
if resp , err := getAPI ( appOrgCode , 0 , utils . Int64ToStr ( addressInfo . StoreId ) ) . AddressCreate ( & address_create_request . AddressCreateParam {
Address : addressInfo . Address ,
StoreId : addressInfo . StoreId ,
} ) ; err != nil {
return 0 , err
} else {
return resp . AddressId , nil
}
}
// /address/list 获取售后地址列表接口
//分页获取商家地址列表
func ( P * PurchaseHandler ) GetAddressList ( appOrgCode string , 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
}
if listInfo , err := getAPI ( appOrgCode , 0 , utils . Int64ToStr ( info . StoreId ) ) . GetAddressList ( info ) ; err != nil {
return nil , err
} else {
return listInfo , nil
}
}
// /trade/createTradeLimitTemplate 创建限售模板 默认模板 暂时不使用
func CreateTradeLimitTemplate ( appOrgCode string , vendorStoreID int64 ) ( tradeLimitID int64 , err error ) {
param := & trade_createTradeLimitTemplate_request . TradeCreateTradeLimitTemplateParam {
@@ -861,7 +793,7 @@ func CreateTradeLimitTemplate(appOrgCode string, vendorStoreID int64) (tradeLimi
return resp . TradeLimitId , nil
}
//创建起送价的 运费 模板以及绑定
//创建起送价的 限售 模板以及绑定
func CreateAndBindMinPriceTemplate ( vendorOrgCode string , vendorStoreID , minimum int64 ) ( int64 , error ) {
resp , err := getAPI ( vendorOrgCode , 0 , "" ) . CreateTradeLimitTemplate ( & trade_createTradeLimitTemplate_request . TradeCreateTradeLimitTemplateParam {
StoreId : vendorStoreID ,
@@ -1104,17 +1036,23 @@ type RelInfo struct {
VendorStoreID string ` json:"vendorStoreID" `
}
func ToMap ( actual interface { } ) ( map [ string ] string , error ) {
func ToStringSlice ( actual interface { } ) ( [ ] string , error ) {
var res [ ] string
value := reflect . ValueOf ( actual )
globals . SugarLogger . Debugf ( "value.Kind()=========%s" , value . Kind ( ) )
if value . Kind ( ) != reflect . Map {
if value . Kind ( ) != reflect . Slice || value . Kind ( ) != reflect . Array {
return nil , errors . New ( "parse error" )
}
temp := actual . ( map [ string ] string )
globals . SugarLogger . Debugf ( "toMap temp===============%v" , temp )
for i := 0 ; i < value . Len ( ) ; i ++ {
res = append ( res , value . Index ( i ) . Interface ( ) . ( string ) )
}
return temp , nil
return res , nil
}
//直辖市判断
func HandleMunicipality ( cityName string ) bool {
if cityName == tiktok_api . MunicipalityBeiJin || cityName == tiktok_api . MunicipalityShangHai || cityName == tiktok_api . MunicipalityTianJin || cityName == tiktok_api . MunicipalityChongQing {
return true
}
return false
}