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