package events import ( "encoding/json" "errors" "spaceofcheng/services/models" "spaceofcheng/services/models/model" "spaceofcheng/services/service/coupon" "spaceofcheng/services/utils" "strings" "github.com/zjxpcyc/tinyevent" ) // giveCoupon 赠送卡券 // Event.Payload.customer = model.TaCustomer var giveCoupon = func(e tinyevent.Event) error { utils.LogInfo("开始券赠送操作...") ctx := NewContext() defer DestroyContext(ctx, false) if e.Payload == nil { utils.LogError("注册送券失败, 没有用户信息") return errors.New("注册送券失败, 没有用户信息") } cust := e.Payload.(model.TaCustomer) // caseID := cust.RecommendCase orgID := cust.OrgId utils.LogInfo("被赠送人: " + cust.CustomerId) // 不区分案场,随便送 // 2018年10月30日 yansen 按照产品要求 query := ` SELECT t.* FROM sys_activity_action t JOIN sys_activity s ON t.activity_id = s.activity_id WHERE t.active_type = 'giveCoupon' AND s.org_id = ? AND s.status = ? AND s.activity_type = ? ` var acts []model.SysActivityAction if err := models.DBEngine.SQL(query, orgID, models.STATUS_NORMAL, e.Name).Find(&acts); err != nil { utils.LogError("检查营销活动失败: " + err.Error()) return errors.New("检查营销活动失败") } fromUser := model.SysUser{ UserId: "SYSTEM", UserName: "system", } cpServ := coupon.NewCouponServ(ctx) for _, act := range acts { switch act.ActiveType { case ActGiveCoupon: res := make(map[string]interface{}) if err := json.Unmarshal([]byte(strings.Replace(act.ResourceDesc, "\n", "\\n", -1)), &res); err != nil { utils.LogError("解析优惠券赠送规则失败: " + err.Error()) continue } cpID, has := res["giftValue"] if !has { continue } cp, err := cpServ.GetCouponByID(cpID.(string)) if err != nil { utils.LogError("获取优惠券失败: " + err.Error()) continue } if err := cpServ.GiveCouponTo(&fromUser, &cust, cp, models.RECEIVEING_TYPE_EVENT); err != nil { utils.LogError("送券失败: " + err.Error()) continue } default: utils.LogError("暂不支持的赠送类型") } } return nil }