- PreCreateAct

This commit is contained in:
gazebo
2019-07-08 11:27:20 +08:00
parent dfd5384235
commit 3ca22059f0
5 changed files with 138 additions and 7 deletions

View File

@@ -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 {

View File

@@ -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"` // 单品级活动用,创建活动时商品的活动价格
}

View File

@@ -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
}

View File

@@ -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"

View File

@@ -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",