@@ -1,7 +1,13 @@
package mtwm
import (
"fmt"
"time"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability2770/domain"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
@@ -14,15 +20,15 @@ import (
"git.rosy.net.cn/jx-callback/globals/api"
)
func jxA ctType2Mtwm ( actType int ) int {
func a ctType2Txd ( actType int ) * int64 {
if actType == model . ActSkuDirectDown {
actType = mtwmapi . RetailActTypeDirectDown
actType = tao_vegetable . DiscountTypeDeductMoney
} else if actType == model . ActSkuSecKill {
actType = mtwmapi . RetailActTypeSecKill
actType = tao_vegetable . DiscountTypeOnePrice
} else {
actType = 0
actType = tao_vegetable . DiscountTypeDiscounts
}
return actType
return utils . Int64ToPointer ( int64 ( actType) )
}
func actOrderRules2Mtwm ( actOrderRules [ ] * model . ActOrderRule ) ( actDetails [ ] * mtwmapi . FullDiscountActDetail ) {
@@ -35,37 +41,83 @@ func actOrderRules2Mtwm(actOrderRules []*model.ActOrderRule) (actDetails []*mtwm
return actDetails
}
func storeSku2ActData ( act * model . Act2 , actStoreSku [ ] * model . ActStoreSku2 , handler func ( int8 ) bool ) ( actData [ ] * mtwmapi . RetailDiscountActData ) {
orderLim it := 1
if act . LimitCount > 0 {
orderLim it = act . LimitCount
//创建活动详情
func act2TxdActivity ( act * model . Act2 ) ( activ ity * domain . AlibabaRetailMarketingItemdiscountActivityCreateItemDiscountActivityOperateRequest ) {
actName := act . GetRealActName ( )
activ ity = & domain . AlibabaRetailMarketingItemdiscountActivityCreateItemDiscountActivityOperateRequest {
ActivityName : & actName ,
CreatorId : & act . VendorActID ,
CreatorName : & act . LastOperator ,
Description : & act . Advertising ,
Terminals : & [ ] int32 { tao_vegetable . TerminalsAPP , tao_vegetable . TerminalsPOS } ,
//StoreIds: &[]string{act.Act.},
DiscountType : actType2Txd ( act . Type ) ,
StartTime : utils . Int64ToPointer ( act . BeginAt . UnixNano ( ) / int64 ( time . Millisecond ) ) ,
EndTime : utils . Int64ToPointer ( act . EndAt . UnixNano ( ) / int64 ( time . Millisecond ) ) ,
}
return activity
}
func storeSku2ActData ( act * model . Act2 , actStoreSku [ ] * model . ActStoreSku2 , handler func ( int8 ) bool ) ( actData * domain . AlibabaRetailMarketingItemdiscountActivitySkuAddItemDiscountActivityElementOperateRequest ) {
var (
limitCount = int64 ( 1 )
userLimitCount = int64 ( 1 )
fixPriceMoney = int64 ( 0 )
discountRate = int64 ( 0 )
decreaseMoney = int64 ( 0 )
limitDaily = int64 ( 0 )
)
if act . LimitCount > 0 {
limitCount = int64 ( act . LimitCount )
if act . LimitUser > 0 {
userLimitCount = int64 ( act . LimitCount )
}
} else if act . LimitDaily > 0 {
limitDaily = int64 ( act . LimitDaily )
}
for _ , v := range actStoreSku {
if handler == nil || handler ( v . SyncStatus ) {
dayLimit := - 1
stock := int64 ( 0 )
if v . Stock > 0 {
dayLimit = v . Stock
stock = int64 ( v . Stock )
}
actData = append ( actData , & mtwmapi . RetailDiscountActData {
AppFoodCode : utils . Int2Str ( v . SkuID ) ,
// UserType: 0,
StartTime : act . BeginAt . Unix ( ) ,
EndTime : act . EndAt . Unix ( ) ,
OrderLimit : orderLimit ,
DayLimit : dayLimit ,
// Period: "",
// WeeksTime: "",
SettingType : mtwmapi . SettingTypeAsPrice ,
ActPrice : jxutils . IntPrice2Standard ( v . ActualActPrice ) ,
// DiscountCoefficient: 0,
// Sequence: int(v.ActPrice), // 此字段不允许重复
// ItemID: utils.Str2Int64WithDefault(v.VendorActID, 0) ,
} )
sType := * actType2Txd ( v . Type )
switch sType {
case tao_vegetable . DiscountTypeDeductMoney :
decreaseMoney = v . VendorPrice - v . ActualActPrice
case tao_vegetable . DiscountTypeOnePrice :
fixPriceMoney = v . ActualActPrice
case tao_vegetable . DiscountTypeDiscounts :
discountRate = int64 ( v . PricePercentage * 10 )
}
actData = & domain . AlibabaRetailMarketingItemdiscountActivitySkuAddItemDiscountActivityElementOperateRequest {
SkuElements : & [ ] domain . AlibabaRetailMarketingItemdiscountActivitySkuAddSkuActivityElementDto { {
SkuCode : utils . String2Pointer ( utils . Int2Str ( v . SkuID ) ) ,
FixPriceMoney : & fixPriceMoney ,
DiscountRate : & discountRate ,
DecreaseMoney : & decreaseMoney ,
Limit : & domain . AlibabaRetailMarketingItemdiscountActivitySkuAddLimitDto {
TotalLimitCnt : & stock ,
DailyTotalLimitCnt : & limitDaily ,
UserTotalLimitCnt : & userLimitCount ,
UserDailyLimitCnt : & userLimitCount ,
OrderLimitCnt : & limitCount ,
} ,
} } ,
CreatorId : & v . VendorSkuID ,
CreatorName : & v . LastOperator ,
OutActId : utils . String2Pointer ( utils . Int2Str ( v . ActID ) ) ,
}
//actData = append(actData, temp)
}
}
return actData
}
//删除活动详情
func storeSku2ActData4Delete ( actStoreSku [ ] * model . ActStoreSku2 , handler func ( int8 ) bool ) ( actIDList [ ] string ) {
for _ , v := range actStoreSku {
if handler == nil || handler ( v . SyncStatus ) {
@@ -77,46 +129,86 @@ func storeSku2ActData4Delete(actStoreSku []*model.ActStoreSku2, handler func(int
return actIDList
}
//删除活动的商品详情
func actSku2Delete ( actIDs [ ] string ) ( map [ string ] domain . AlibabaRetailMarketingItemdiscountActivitySkuDeleteItemDiscountActivityElementOperateRequest , error ) {
var (
SkuElement [ ] domain . AlibabaRetailMarketingItemdiscountActivitySkuDeleteSkuActivityElementDto
deData = make ( map [ string ] domain . AlibabaRetailMarketingItemdiscountActivitySkuDeleteItemDiscountActivityElementOperateRequest , 0 )
)
for _ , v := range actIDs {
i := utils . Str2Int64 ( v )
if skus , err := api . TaoVegetableApi . ActivitySkuQuery ( i ) ; err == nil {
//查询商品
for _ , sku := range skus {
SkuElement = append ( SkuElement , domain . AlibabaRetailMarketingItemdiscountActivitySkuDeleteSkuActivityElementDto {
SkuCode : sku . SkuCode ,
} )
}
//查询活动详情
act , err := api . TaoVegetableApi . ActivityQuery ( i , "" )
if err != nil {
return nil , err
}
deData [ v ] = domain . AlibabaRetailMarketingItemdiscountActivitySkuDeleteItemDiscountActivityElementOperateRequest {
SkuElements : & SkuElement ,
ActId : & i ,
CreatorId : act . CreatorId ,
CreatorName : act . CreatorName ,
}
}
}
return deData , nil
}
func isCreateOrUpdate ( syncStatus int8 ) bool {
return model . IsSyncStatusNeedCreate ( syncStatus ) || model . IsSyncStatusNeedUpdate ( syncStatus )
}
func createOneShopAct ( act * model . Act2 , vendorStoreID string , actStoreSku [ ] * model . ActStoreSku2 ) ( failedList [ ] * partner . StoreSkuInfoWithErr , err error ) {
actData := storeSku2ActData ( act , actStoreSku , isCreateOrUpdate )
if len ( actData ) > 0 {
//1 活动详情
actData := act2TxdActivity ( act )
//2 活动商品详情
actSkuData := storeSku2ActData ( act , actStoreSku , isCreateOrUpdate )
if actData != nil && actSkuData != nil {
if globals . EnableMtwmStoreWrite {
actResult , faileInfoList , err2 := api . MtwmAPI . RetailDiscountBatchSave2 ( vendorStoreID , jxActType2Mtwm ( act . Type ) , actData )
err = err2
// 忽略错误, 都放在failedList里
// if err != nil {
// return nil, err
// }
//创建活动
actID , err1 : = api . TaoVegetableApi . ActivityCreate ( * actData )
if err1 != nil || actID == 0 {
failedList = append ( failedList , & partner . StoreSkuInfoWithErr {
VendoreID : model . VendorIDTaoVegetable ,
ErrMsg : fmt . Sprintf ( "%v" , err1 ) ,
StoreID : int ( utils . Str2Int64WithDefault ( vendorStoreID , 0 ) ) ,
} )
return failedList , err1
}
//活动增加商品
actSkuData . ActId = & actID
err3 , successSkuCode , failSkuCode := api . TaoVegetableApi . ActivitySkuCreate ( * actSkuData )
err = err3
actStoreSkuMap := make ( map [ int ] * model . ActStoreSku2 )
for _ , v := range actStoreSku {
actStoreSkuMap [ v . SkuID ] = v
}
for _ , v := range actResult {
if v2 := actStoreSkuMap [ int ( utils . Str2Int64WithDefault ( v . AppFoodCode , 0 ) ) ] ; v2 != nil {
v2 . VendorActID = utils . Int64ToStr ( v . ActID )
for _ , v := range successSkuCode . SkuID {
if v2 := actStoreSkuMap [ int ( utils . Str2Int64WithDefault ( v , 0 ) ) ] ; v2 != nil {
v2 . VendorActID = utils . Int64ToStr ( successSkuCode . ActID )
}
}
for _ , v := range faileInfoList {
i f v2 := actStoreSkuMap [ int ( utils . Str2Int64WithDefault ( v . AppFoodCode , 0 ) ) ] ; v2 != nil {
for _ , v := range failSkuCode {
if v2 := actStoreSkuMap [ int ( utils . Str2Int64WithDefault ( v , 0 ) ) ] ; v2 != nil {
failedList = append ( failedList , & partner . StoreSkuInfoWithErr {
StoreSkuInfo : & partner . StoreSkuInfo {
SkuID : v2 . SkuID ,
} ,
VendoreID : model . VendorIDMTWM ,
VendoreID : model . VendorIDTaoVegetable ,
StoreID : int ( utils . Str2Int64WithDefault ( vendorStoreID , 0 ) ) ,
ErrMsg : v . ErrorMsg ,
ErrMsg : fmt . Sprint ( err3 ) ,
} )
}
}
} else {
for _ , v := range actStoreSku {
v . VendorActID = utils . Int64ToStr ( jxutils . GenFakeID ( ) )
}
}
}
return failedList , err
@@ -125,24 +217,32 @@ func createOneShopAct(act *model.Act2, vendorStoreID string, actStoreSku []*mode
func cancelOneShopAct ( act * model . Act2 , vendorStoreID string , actStoreSku [ ] * model . ActStoreSku2 ) ( failedList [ ] * partner . StoreSkuInfoWithErr , err error ) {
if list := storeSku2ActData4Delete ( actStoreSku , nil /*model.IsSyncStatusNeedDelete*/ ) ; len ( list ) > 0 {
if globals . EnableMtwmStoreWrite {
failedList2 , err2 := api . MtwmAPI . RetailDiscountDelete2 ( vendorStoreID , jxActType2Mtwm ( act . Type ) , list )
actStoreSkuMap := make ( map [ string ] * model . ActStoreSku2 )
for _ , v := range actStoreSku {
actStoreSkuMap [ v . VendorActID ] = v
}
for _ , v := range failedList2 {
if ! mtwmapi . CanDeleteActErrMsgIgnore ( v . ErrorMsg ) {
//查找删除的活动商品
sku2Delete , err := actSku2Delete ( list )
if err != nil {
return nil , err
}
//删除活动以及商品
for k , v := range sku2Delete {
if err = api . TaoVegetableApi . ActivitySkuDelete ( v ) ; err == nil {
err = api . TaoVegetableApi . ActivityDelete ( * v . CreatorId , * v . CreatorName , utils . Str2Int64 ( k ) )
}
if err != nil {
failedList = append ( failedList , & partner . StoreSkuInfoWithErr {
StoreSkuInfo : & partner . StoreSkuInfo {
SkuID : actStoreSkuMap [ utils . Int64ToStr ( v . ActID ) ] . SkuID ,
SkuID : actStoreSkuMap [ k ] . SkuID ,
} ,
StoreID : int ( utils . Str2Int64WithDefault ( vendorStoreID , 0 ) ) ,
ErrMsg : v . ErrorMsg ,
VendoreID : model . VendorIDMTWM ,
ErrMsg : fmt . Sprint ( err ) ,
VendoreID : model . VendorIDTaoVegetable ,
} )
}
}
err = err2
err = nil // 强制不返回错误,使用部分错误
}
}
@@ -254,12 +354,12 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa
return err
}
func ( c * PurchaseHandler) GetActAmple( ctx * jxcontext. Context, vendorStoreID, vendorOrgCode string) ( ample int , err error ) {
for _ , v := range mtwmapi. ActTypeList {
//1表示进行中
if actList , err := getAPI( vendorOrgCode, 0 , vendorStoreID) . GetByAppPoiCodeAndType( vendorOrgCode, 1 , v ) ; err == nil {
ample += len ( actList )
}
}
return ample , err
}
// func (c * PurchaseHandler) GetActAmple(ctx * jxcontext. Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
// for _, v := range mtwmapi. ActTypeList {
// //1表示进行中
// if actList, err := getAPI( vendorOrgCode, 0, vendorStoreID). GetByAppPoiCodeAndType( vendorOrgCode, 1, v); err == nil {
// ample += len( actList)
// }
// }
// return ample, err
// }