package marketing import ( "encoding/json" "errors" "spaceofcheng/services/models" "spaceofcheng/services/models/card" "spaceofcheng/services/models/coupon" "spaceofcheng/services/models/marketing" "spaceofcheng/services/models/model" "spaceofcheng/services/models/system" "spaceofcheng/services/service" "spaceofcheng/services/service/events" "spaceofcheng/services/utils" "strings" "github.com/astaxie/beego" ) // MarketingServ 系统处理 type MarketingServ struct { ctx *utils.Context dao *marketing.MarketingDAO wdao *marketing.WorkDAO userdao *system.UserDAO couponDAO *coupon.CouponDAO cardDAO *card.CardDAO } // NewMarketingServ 初始化 func NewMarketingServ(ctx *utils.Context) *MarketingServ { return &MarketingServ{ ctx: ctx, dao: marketing.NewMarketingDAO(ctx), wdao: marketing.NewWorkDAO(ctx), userdao: system.NewUserDAO(ctx), couponDAO: coupon.NewCouponDAO(ctx), cardDAO: card.NewCardDAO(ctx), } } // GetMarketingList 获取活动列表 func (s *MarketingServ) GetMarketingList(caseids string, page int, pageSize int) (map[string]interface{}, error) { if pageSize == 0 { pageSize = service.PAGENUM } if page == 0 { page = 1 } list, err := s.dao.GetMarketingList(caseids, page, pageSize) if err != nil { beego.Error(err) return nil, err } total, err := s.dao.GetMarketingCount(caseids) return map[string]interface{}{ "list": list, "pagesize": pageSize, "pagenum": total, "page": page, }, err } // SaveMarketing 保存 营销活动 /** * resource_desc 活动描述 */ func (s *MarketingServ) SaveMarketing(activity model.SysActivity, activeType, resourceDesc string) (*model.SysActivity, *model.SysActivityAction, error) { res := make(map[string]interface{}) if err := json.Unmarshal([]byte(strings.Replace(resourceDesc, "\n", "\\n", -1)), &res); err != nil { utils.LogError("校验活动数据失败: " + err.Error()) return nil, nil, errors.New("校验活动数据失败") } // 校验券信息 if activeType == events.ActGiveCoupon { couponID := res["giftValue"].(string) // amountStr := res["giftNum"].(string) // amount, _ := strconv.Atoi(amountStr) if couponID == "" { return nil, nil, errors.New("未指定赠送券内容") } // if amount == 1 { // return nil, nil, errors.New("赠送数量暂时只支持 1 张") // } // coupon, err := s.couponDAO.GetCouponByID(couponID) // if err != nil { // utils.LogError("校验优惠券失败: " + err.Error()) // return nil, nil, errors.New("校验优惠券失败") // } // if coupon.TotalCount < amount { // return nil, nil, errors.New("赠送数量不能大于卡券总数的数量") // } } if activeType == events.ActGiveCard { cardID := res["giftValue"].(string) if cardID == "" { return nil, nil, errors.New("未指定赠送卡内容") } } var newInfo *model.SysActivity var newWoke *model.SysActivityAction // user := s.ctx.Get("user").(model.SysUser) // caseinfo, err := s.userdao.GetUserBelongCase(user.UserId) // if err != nil { // return nil, nil, err // } // activity.CaseId = caseinfo.CaseId // 存储 营销活动 var err error newInfo, err = s.dao.AddMarketing(activity) if err != nil { return nil, nil, err } woke := model.SysActivityAction{} woke.ActivityId = newInfo.ActivityId woke.ActiveType = activeType woke.ResourceDesc = resourceDesc woke.ResourceType = "占位符" woke.ResourceId = res["giftValue"].(string) // 存储 活动动作 newWoke, err = s.wdao.AddWork(woke) if err != nil { return nil, nil, err } // 重启事件 events.ListenAllEvent(newInfo.OrgId, newInfo.CaseId) return newInfo, newWoke, err } // GetMarketingById 根据ID查询数据 func (s *MarketingServ) GetMarketingById(activityId string) (*model.SysActivity, error) { if activityId == "" { return nil, utils.LogError("不存在营销信息!") } info, err := s.dao.GetMarketingById(activityId) if err != nil { return nil, err } if info == nil { return nil, utils.LogError("不存在营销信息!") } if info.Status == models.STATUS_DEL { return nil, utils.LogError("营销信息已被删除!") } return info, err } // DelMarketing 删除 根据ID删除数据 func (s *MarketingServ) DelMarketing(activityId string) error { if activityId == "" { return utils.LogError("没有对应的营销活动") } info, err := s.dao.GetMarketingById(activityId) if err != nil { return err } // 判断状态是否被删除 if info.Status == models.STATUS_DEL { return utils.LogError("营销状态异常") } err = s.dao.DelMarketing(activityId, models.STATUS_DEL) return err } // SetMarketingNormal 根据ID 修改状态为 正常 func (s *MarketingServ) SetMarketingNormal(activityId string) error { if activityId == "" { return utils.LogError("没有对应的营销活动") } info, err := s.dao.GetMarketingById(activityId) if err != nil { return err } // 判断状态是否已经是正常 if info.Status == models.STATUS_NORMAL { return utils.LogError("营销状态异常") } err = s.dao.DelMarketing(activityId, models.STATUS_NORMAL) if err == nil { // 重启事件 events.ListenAllEvent(info.OrgId, info.CaseId) } return err } // SetMarketingDisable 根据ID 修改状态为 停用 func (s *MarketingServ) SetMarketingDisable(activityId string) error { if activityId == "" { return utils.LogError("没有对应的营销活动") } info, err := s.dao.GetMarketingById(activityId) if err != nil { return err } // 判断状态是否已经是停用 if info.Status == models.STATUS_READY { return utils.LogError("营销状态异常") } err = s.dao.DelMarketing(activityId, models.STATUS_READY) return err } // UpdateMarketing 修改 营销活动 func (s *MarketingServ) UpdateMarketing(activity model.SysActivity) error { if activity.ActivityId == "" { return utils.LogError("没有对应的营销活动") } err := s.dao.UpdateMarketing(activity) return err } func (s *MarketingServ) GetUserCases(caseId string) ([]model.SysCase, error) { cases, err := s.dao.GetUserCases(caseId) if err != nil { utils.LogError("获取用户案场失败: " + err.Error()) return nil, errors.New("获取用户案场失败") } return cases, nil }