This commit is contained in:
richboo111
2023-06-28 11:38:41 +08:00
parent d3d0ff2fe8
commit baf80e3e9b
4 changed files with 269 additions and 62 deletions

View File

@@ -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 jxActType2Mtwm(actType int) int {
func actType2Txd(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) {
orderLimit := 1
if act.LimitCount > 0 {
orderLimit = act.LimitCount
//创建活动详情
func act2TxdActivity(act *model.Act2) (activity *domain.AlibabaRetailMarketingItemdiscountActivityCreateItemDiscountActivityOperateRequest) {
actName := act.GetRealActName()
activity = &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 {
if 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
//}