Files
baseapi/platformapi/mtwmapi/act.go

309 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package mtwmapi
import (
"strings"
"git.rosy.net.cn/baseapi/utils"
)
const (
ActTypeStoreFullDiscount = 0
ActTypeSkuFullDiscount = 1
)
const (
// 指定商品满减活动状态
SkuFullDiscountStatusExpired = 0 // 过期
SkuFullDiscountStatusValid = 1 // 生效
SkuFullDiscountStatusNew = 2 // 待生效
// 全店满减活动状态
StoreFullDiscountStatusNew = 0 // 待生效
StoreFullDiscountStatusValid = 1 // 生效
StoreFullDiscountStatusExpired = 2 // 过期
ShippingFeeStatusNotStart = "NOT_START" // 待生效
ShippingFeeStatusInProgress = "IN_PROGRESS" // 已生效
ShippingFeeStatusExpired = "EXPIRED" // 已过期
ShippingFeeStatusApprove = "APPROVE" // 待审批
ShippingFeeStatusFreeze = "FREEZE" // 冻结中
RetailDiscountStatusExpired = 0 // 已过期
RetailDiscountStatusValid = 1 // 已生效
RetailDiscountStatusNew = 2 // 待生效
UserTypeAll = 0 // 不限
UserTypeNewCommer = 1 // 门店新客
SettingTypeAsDiscount = 0 // 按折扣系数开展活动
SettingTypeAsPrice = 0 // 按折扣价格开展活动s
)
type FullDiscountActInfo struct {
ActIDs string `json:"act_ids"`
ActName string `json:"act_name"`
StartTime int64 `json:"start_time"` // 活动开始时间,单s位秒
EndTime int64 `json:"end_time"` // 活动结束时间,单位秒
ActType int `json:"act_type"`
Status int `json:"-"`
}
type FullDiscountActDetail struct {
OriginalPrice float64 `json:"origin_price"` // 满
ActPrice float64 `json:"act_price"` // 减
}
type FullDiscountSku struct {
AppFoodCode string `json:"app_food_code"`
DayLimit int `json:"day_limit"`
Name string `json:"-"` // 设置操作时无用
}
type FullDiscountActData struct {
ActInfo *FullDiscountActInfo `json:"act_info"`
ActRemark string `json:"act_remark"`
AppPoiCode string `json:"app_poi_code"`
ActDetails []*FullDiscountActDetail `json:"act_details"`
}
type FullDiscountFoodsInfo struct {
ActInfo *FullDiscountActInfo `json:"act_info"`
ActRemark string `json:"act_remark"`
AppPoiCode string `json:"app_poi_code"`
AppFoods []*FullDiscountSku `json:"app_foods"`
}
type ShippingFeeActDetail struct {
LimitPrice float64 `json:"limit_price"`
DiscountPrice float64 `json:"discount_price"`
PoiCharge float64 `json:"-"`
MtCharge float64 `json:"-"`
}
type ShippingFeeActData struct {
StartTime int64 `json:"start_time"` // 活动开始时间,单s位秒
EndTime int64 `json:"end_time"` // 活动结束时间,单位秒
WeeksTime string `json:"weeks_time,omitempty"`
Period string `json:"period,omitempty"`
ActDetail []*ShippingFeeActDetail `json:"act_detail"`
MaxPrice float64 `json:"max_price,omitempty"`
AppPoiCode string `json:"-"`
ActID string `json:"-"`
ActStatus string `json:"-"`
}
type RetailActData struct {
AppFoodCode string `json:"app_food_code"`
UserType int `json:"user_type"`
StartTime int64 `json:"start_time"` // 活动开始时间,单s位秒
EndTime int64 `json:"end_time"` // 活动结束时间,单位秒
OrderLimit int `json:"order_limit"`
DayLimit int `json:"day_limit"`
WeeksTime string `json:"weeks_time"`
Period string `json:"period"`
SettingType int `json:"setting_type"`
ActPrice float64 `json:"act_price"` // 折扣价格(单位元)必须为大于0的数字且不能超过2位小数。
DiscountCoefficient float64 `json:"discount_coefficient"` // 折扣系数必须大于0小于9.8最多支持两位小数。如输入3即为3折
Sequence int `json:"sequence,omitempty"`
ItemID int64 `json:"item_id,omitempty"` // 活动ID为什么这里又是int64
// 以下参数只有查询时用到
OriginalPrice float64 `json:"-"` // 商品原价,单位元
Stock int `json:"-"` // 当日剩余活动商品数量。只有当发起查询时间处于活动生效时段内时(start_time、end_time、period、weeks_time均需满足),该字段才代表实际剩余活动商品数量,否则显示的是创建活动时规定的当日活动库存
Status int `json:"-"` // 活动状态0:已过期1:已生效2:待生效。
Name string `json:"-"`
}
type RetailActDataLimit struct {
ItemID int64 `json:"item_id"` // 活动ID为什么这里又是int64
DayLimit int `json:"day_limit,omitempty"` // 当日活动库存,只能为正整数或-1-1表示无限库存
OrderLimit int `json:"order_limit,omitempty"` // 每单可购买的折扣商品数量
}
func (a *API) FullDiscountBatchSave(poiCode string, actInfo *FullDiscountActInfo, actList []*FullDiscountActDetail, actSkuList []*FullDiscountSku) (actID int64, err error) {
params := map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_info": string(utils.MustMarshal(actInfo)),
"act_details": string(utils.MustMarshal(actList)),
}
if actInfo.ActType == ActTypeSkuFullDiscount {
params["app_foods"] = string(utils.MustMarshal(actSkuList))
}
result, err := a.AccessAPI2("act/full/discount/batchsave", false, params, resultKeyMsg)
if err == nil {
return utils.MustInterface2Int64(result.([]interface{})[0].(map[string]interface{})["act_id"]), nil
}
return 0, err
}
func (a *API) FullDiscountList(poiCode string, actType int) (actInfoList []*FullDiscountActData, err error) {
result, err := a.AccessAPI("act/full/discount/list", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_type": actType,
})
if err == nil && result != nil {
err = utils.Map2StructByJson(result, &actInfoList, false)
}
return actInfoList, err
}
func (a *API) FullDiscountDelete(poiCode string, actIDList []string, actType int) (err error) {
_, err = a.AccessAPI("act/full/discount/delete", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_ids": strings.Join(actIDList, ","),
"act_type": actType,
})
return err
}
func (a *API) FullDiscountFoodsBatchSave(poiCode, actID string, appFoodList []*FullDiscountSku) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/batchsave", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_foods": string(utils.MustMarshal(appFoodList)),
})
return err
}
func (a *API) FullDiscountFoodsList(poiCode, actID string) (actFoodsInfo *FullDiscountFoodsInfo, err error) {
limit := 200
for {
var result interface{}
offset := 0
result, err = a.AccessAPI("act/full/discount/foods/list", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"limit": limit,
"offset": offset,
})
if err == nil && result != nil {
tmpActFoodsInfo := &FullDiscountFoodsInfo{}
if err = utils.Map2StructByJson(result, tmpActFoodsInfo, false); err != nil {
return nil, err
}
if actFoodsInfo == nil {
actFoodsInfo = tmpActFoodsInfo
} else {
actFoodsInfo.AppFoods = append(actFoodsInfo.AppFoods, tmpActFoodsInfo.AppFoods...)
}
offset++
break
} else {
break
}
}
return nil, err
}
// 批量删除活动商品至指定商品满减活动
// appFoodCodeList 删除商品数量上限为100如果删除门店多个活动商品用英文逗号隔开
func (a *API) FullDiscountFoodsDelete(poiCode, actID string, appFoodCodeList []string) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/delete", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_food_codes": strings.Join(appFoodCodeList, ","),
})
return err
}
// 批量修改指定商品满减活动中商品的当日活动库存
func (a *API) FullDiscountFoodsDayLimit(poiCode, actID string, appFoodList []*FullDiscountSku) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/daylimit", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_foods": string(utils.MustMarshal(appFoodList)),
})
return err
}
// 阶梯满减配送费活动一个门店只可能有一个活动所以不涉及actID的概念
// 批量创建阶梯满减配送费活动
func (a *API) FulllDiscountShippingFeeBatchSave(poiCode string, actData []*ShippingFeeActData) (err error) {
_, err = a.AccessAPI("act/full/discount/shippingfee/batchsave", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_data": string(utils.MustMarshal(actData)),
})
return err
}
// 查询阶梯满减配送费活动
func (a *API) FulllDiscountShippingFeeList(poiCode string) (actList []*ShippingFeeActData, err error) {
result, err := a.AccessAPI("act/full/discount/shippingfee/list", true, map[string]interface{}{
KeyAppPoiCode: poiCode,
})
if err == nil {
err = utils.Map2StructByJson(result, &actList, false)
}
return actList, err
}
// 批量创建或更新零售折扣商品
func (a *API) RetailDiscountBatchSave(poiCode string, actData []*RetailActData) (actID int64, err error) {
result, err := a.AccessAPI2("act/retail/discount/batchsave", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_data": string(utils.MustMarshal(actData)),
}, resultKeyMsg)
if err == nil {
return utils.MustInterface2Int64(result.([]interface{})[0].(map[string]interface{})["act_id"]), nil
}
return 0, err
}
// 查询门店零售折扣商品
func (a *API) RetailDiscountList(poiCode string) (actList []*RetailActData, err error) {
limit := 200
offset := 0
for {
result, err := a.AccessAPI("act/retail/discount/list", true, map[string]interface{}{
KeyAppPoiCode: poiCode,
"limit": limit,
"offset": offset,
})
if err == nil {
var tmpActList []*RetailActData
if err = utils.Map2StructByJson(result, &tmpActList, false); err != nil {
return nil, err
}
actList = append(actList, tmpActList...)
if len(tmpActList) < limit {
break
}
offset++
} else {
return nil, err
}
}
return actList, err
}
// 批量删除零售折扣商品
func (a *API) RetailDiscountDelete(poiCode string, actIDList []string) (err error) {
_, err = a.AccessAPI("act/retail/discount/batchdelete", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"item_ids": strings.Join(actIDList, ","),
})
return err
}
// 批量修改零售折扣商品当日活动库存
func (a *API) RetailDiscountBatchStock(poiCode, actDataList []*RetailActDataLimit) (err error) {
_, err = a.AccessAPI("act/retail/discount/batchstock", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_data": string(utils.MustMarshal(actDataList)),
})
return err
}
// 批量修改零售折扣商品每单限购数量
func (a *API) RetailDiscountBatchLimit(poiCode, actDataList []*RetailActDataLimit) (err error) {
_, err = a.AccessAPI("act/retail/discount/batchlimit", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_data": string(utils.MustMarshal(actDataList)),
})
return err
}