- PreCreateAct
This commit is contained in:
@@ -47,6 +47,25 @@ type ActVendorInfo struct {
|
||||
VendorList []*ActMapPureInfo
|
||||
}
|
||||
|
||||
type tPreCreateActVendorInfo struct {
|
||||
VendorID int
|
||||
|
||||
VendorPrice int64 `orm:"" json:"vendorPrice"` // 单品级活动用,创建活动时商品的原始平台价
|
||||
ActualActPrice int64 `orm:"" json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
|
||||
}
|
||||
|
||||
type tPreCreateActStoreSku struct {
|
||||
model.ActStoreSku
|
||||
VendorInfoList []*tPreCreateActVendorInfo `json:"vendorInfoList"`
|
||||
}
|
||||
|
||||
type tPreCreateActInfo struct {
|
||||
model.Act
|
||||
|
||||
ValidVendorIDs []int
|
||||
ActStoreSku []*tPreCreateActStoreSku `json:"actStoreSku"`
|
||||
}
|
||||
|
||||
func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Act, vendorIDs []int, actStoreSku []*ActStoreSkuParam) (validVendorIDs []int, actStoreSkuList []*model.ActStoreSku, actStoreSkuMapList []*model.ActStoreSkuMap, err error) {
|
||||
wholeValidVendorMap := make(map[int]int)
|
||||
if len(actStoreSku) > 0 {
|
||||
@@ -84,7 +103,8 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
|
||||
SkuID: v.SkuID,
|
||||
VendorID: vendorID,
|
||||
|
||||
SyncStatus: model.SyncFlagNewMask,
|
||||
SyncStatus: model.SyncFlagNewMask,
|
||||
VendorPrice: int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, int(storeDetail.PricePercentage), 0)),
|
||||
}
|
||||
if v.ActPrice != 0 {
|
||||
actSkuMap.ActualActPrice = v.ActPrice
|
||||
@@ -93,8 +113,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
|
||||
if v.PricePercentage != 0 {
|
||||
percentage = v.PricePercentage
|
||||
}
|
||||
percentage = percentage * int(storeDetail.PricePercentage) / 100
|
||||
actSkuMap.ActualActPrice = int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, percentage, 0))
|
||||
actSkuMap.ActualActPrice = int64(jxutils.CaculateSkuVendorPrice(int(actSkuMap.VendorPrice), percentage, 0))
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(actSkuMap, ctx.GetUserName())
|
||||
actStoreSkuMapList = append(actStoreSkuMapList, actSkuMap)
|
||||
@@ -245,10 +264,53 @@ func checkActValidation(act *model.Act, vendorIDs []int) (err error) {
|
||||
return fmt.Errorf("%s", strings.Join(strList, ",\n"))
|
||||
}
|
||||
|
||||
func setActDefault(act *model.Act) {
|
||||
if act.LimitCount == 0 {
|
||||
act.LimitCount = 1 // 缺省限购一份,如果确定不限,明确给一个很大的值
|
||||
}
|
||||
act.Status = model.ActStatusCreated
|
||||
}
|
||||
|
||||
func PreCreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam) (preCreateActInfo *tPreCreateActInfo, err error) {
|
||||
if err = checkActValidation(act, vendorIDs); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
setActDefault(act)
|
||||
|
||||
db := dao.GetDB()
|
||||
validVendorIDs, actStoreSkuList, actStoreSkuMapList, err := ActStoreSkuParam2Model(ctx, db, act, vendorIDs, actStoreSku)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
preCreateActInfo = &tPreCreateActInfo{
|
||||
ValidVendorIDs: validVendorIDs,
|
||||
}
|
||||
storeSkuMap := make(map[int64]*tPreCreateActStoreSku)
|
||||
for _, v := range actStoreSkuList {
|
||||
tmp := &tPreCreateActStoreSku{
|
||||
ActStoreSku: *v,
|
||||
}
|
||||
storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = tmp
|
||||
preCreateActInfo.ActStoreSku = append(preCreateActInfo.ActStoreSku, tmp)
|
||||
}
|
||||
|
||||
for _, v := range actStoreSkuMapList {
|
||||
index := jxutils.Combine2Int(v.StoreID, v.SkuID)
|
||||
storeSkuMap[index].VendorInfoList = append(storeSkuMap[index].VendorInfoList, &tPreCreateActVendorInfo{
|
||||
VendorID: v.VendorID,
|
||||
VendorPrice: v.VendorPrice,
|
||||
ActualActPrice: v.ActualActPrice,
|
||||
})
|
||||
}
|
||||
return preCreateActInfo, nil
|
||||
}
|
||||
|
||||
func CreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam, isAsync bool) (hint string, err error) {
|
||||
if err = checkActValidation(act, vendorIDs); err != nil {
|
||||
return "", err
|
||||
}
|
||||
setActDefault(act)
|
||||
|
||||
db := dao.GetDB()
|
||||
dao.Begin(db)
|
||||
@@ -258,10 +320,6 @@ func CreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRules
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if act.LimitCount == 0 {
|
||||
act.LimitCount = 1 // 缺省限购一份,如果确定不限,明确给一个很大的值
|
||||
}
|
||||
act.Status = model.ActStatusCreated
|
||||
dao.WrapAddIDCULDEntity(act, ctx.GetUserName())
|
||||
err = dao.CreateEntity(db, act)
|
||||
if err != nil {
|
||||
|
||||
@@ -138,6 +138,7 @@ type ActStoreSkuMap struct {
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
VendorPrice int64 `json:"vendorPrice"` // 创建活动时的平台价格
|
||||
ActualActPrice int64 `orm:"" json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
|
||||
}
|
||||
|
||||
|
||||
@@ -272,3 +272,18 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) OnActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onActMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.BillID, model.VendorIDJD))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) onActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
return retVal
|
||||
}
|
||||
|
||||
func getActFromJD(promotionID int64) (act *model.Act, actStoreSkuList []*model.ActStoreSku) {
|
||||
return act, actStoreSkuList
|
||||
}
|
||||
|
||||
@@ -14,6 +14,54 @@ type ActController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// @Title 预创建活动
|
||||
// @Description 预创建活动
|
||||
// @Param token header string true "认证token"
|
||||
// @Param name formData string true "活动名,必须唯一(所以名子上最好带上日期)"
|
||||
// @Param type formData int true "活动类型,3:直降,4:秒杀(美团当前不支持秒杀)"
|
||||
// @Param vendorIDs formData string true "厂商ID,当前只支持,京东:0,京西(用于记录活动信息):99"
|
||||
// @Param beginAt formData string true "开始日期"
|
||||
// @Param endAt formData string true "结束日期"
|
||||
// @Param pricePercentage formData int true "活动价格比例"
|
||||
// @Param advertising formData string true "广告语"
|
||||
// @Param actStoreSkuList formData string true "活动门店商品信息"
|
||||
// @Param limitDaily formData int false "是否按日0-不限,>0限购单数(秒杀需填)"
|
||||
// @Param limitUser formData int false "是否用户限购0-不限,1-限购"
|
||||
// @Param limitCount formData int false "限购件数 0-不限,如账号限购、设备限购有一个为1,则限购件数必须大于0的整数"
|
||||
// @Param remark formData string false "备注"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /PreCreateAct [post]
|
||||
func (c *ActController) PreCreateAct() {
|
||||
c.callPreCreateAct(func(params *tActPreCreateActParams) (retVal interface{}, errCode string, err error) {
|
||||
var (
|
||||
vendorIDs []int
|
||||
actStoreSkuList []*act.ActStoreSkuParam
|
||||
)
|
||||
timeList, err := jxutils.BatchStr2Time(params.BeginAt, params.EndAt)
|
||||
if err == nil {
|
||||
if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDs, params.ActStoreSkuList, &actStoreSkuList); err == nil {
|
||||
actObj := &model.Act{
|
||||
Name: params.Name,
|
||||
Type: params.Type,
|
||||
LimitUser: params.LimitUser,
|
||||
LimitDaily: params.LimitDaily,
|
||||
LimitCount: params.LimitCount,
|
||||
// Source:,
|
||||
CreateType: model.ActCreateTypeAPI,
|
||||
PricePercentage: params.PricePercentage,
|
||||
BeginAt: timeList[0],
|
||||
EndAt: timeList[1],
|
||||
Advertising: params.Advertising,
|
||||
Remark: params.Remark,
|
||||
}
|
||||
retVal, err = act.PreCreateAct(params.Ctx, actObj, vendorIDs, nil, actStoreSkuList)
|
||||
}
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 创建活动
|
||||
// @Description 创建活动
|
||||
// @Param token header string true "认证token"
|
||||
|
||||
@@ -43,6 +43,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"],
|
||||
beego.ControllerComments{
|
||||
Method: "PreCreateAct",
|
||||
Router: `/PreCreateAct`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"],
|
||||
beego.ControllerComments{
|
||||
Method: "QueryActs",
|
||||
|
||||
Reference in New Issue
Block a user