123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. package marketing
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "spaceofcheng/services/models"
  6. "spaceofcheng/services/models/card"
  7. "spaceofcheng/services/models/coupon"
  8. "spaceofcheng/services/models/marketing"
  9. "spaceofcheng/services/models/model"
  10. "spaceofcheng/services/models/system"
  11. "spaceofcheng/services/service"
  12. "spaceofcheng/services/service/events"
  13. "spaceofcheng/services/utils"
  14. "strings"
  15. "github.com/astaxie/beego"
  16. )
  17. // MarketingServ 系统处理
  18. type MarketingServ struct {
  19. ctx *utils.Context
  20. dao *marketing.MarketingDAO
  21. wdao *marketing.WorkDAO
  22. userdao *system.UserDAO
  23. couponDAO *coupon.CouponDAO
  24. cardDAO *card.CardDAO
  25. }
  26. // NewMarketingServ 初始化
  27. func NewMarketingServ(ctx *utils.Context) *MarketingServ {
  28. return &MarketingServ{
  29. ctx: ctx,
  30. dao: marketing.NewMarketingDAO(ctx),
  31. wdao: marketing.NewWorkDAO(ctx),
  32. userdao: system.NewUserDAO(ctx),
  33. couponDAO: coupon.NewCouponDAO(ctx),
  34. cardDAO: card.NewCardDAO(ctx),
  35. }
  36. }
  37. // GetMarketingList 获取活动列表
  38. func (s *MarketingServ) GetMarketingList(caseids string, page int, pageSize int) (map[string]interface{}, error) {
  39. if pageSize == 0 {
  40. pageSize = service.PAGENUM
  41. }
  42. if page == 0 {
  43. page = 1
  44. }
  45. list, err := s.dao.GetMarketingList(caseids, page, pageSize)
  46. if err != nil {
  47. beego.Error(err)
  48. return nil, err
  49. }
  50. total, err := s.dao.GetMarketingCount(caseids)
  51. return map[string]interface{}{
  52. "list": list,
  53. "pagesize": pageSize,
  54. "pagenum": total,
  55. "page": page,
  56. }, err
  57. }
  58. // SaveMarketing 保存 营销活动
  59. /**
  60. * resource_desc 活动描述
  61. */
  62. func (s *MarketingServ) SaveMarketing(activity model.SysActivity, activeType, resourceDesc string) (*model.SysActivity, *model.SysActivityAction, error) {
  63. res := make(map[string]interface{})
  64. if err := json.Unmarshal([]byte(strings.Replace(resourceDesc, "\n", "\\n", -1)), &res); err != nil {
  65. utils.LogError("校验活动数据失败: " + err.Error())
  66. return nil, nil, errors.New("校验活动数据失败")
  67. }
  68. // 校验券信息
  69. if activeType == events.ActGiveCoupon {
  70. couponID := res["giftValue"].(string)
  71. // amountStr := res["giftNum"].(string)
  72. // amount, _ := strconv.Atoi(amountStr)
  73. if couponID == "" {
  74. return nil, nil, errors.New("未指定赠送券内容")
  75. }
  76. // if amount == 1 {
  77. // return nil, nil, errors.New("赠送数量暂时只支持 1 张")
  78. // }
  79. // coupon, err := s.couponDAO.GetCouponByID(couponID)
  80. // if err != nil {
  81. // utils.LogError("校验优惠券失败: " + err.Error())
  82. // return nil, nil, errors.New("校验优惠券失败")
  83. // }
  84. // if coupon.TotalCount < amount {
  85. // return nil, nil, errors.New("赠送数量不能大于卡券总数的数量")
  86. // }
  87. }
  88. if activeType == events.ActGiveCard {
  89. cardID := res["giftValue"].(string)
  90. if cardID == "" {
  91. return nil, nil, errors.New("未指定赠送卡内容")
  92. }
  93. }
  94. var newInfo *model.SysActivity
  95. var newWoke *model.SysActivityAction
  96. // user := s.ctx.Get("user").(model.SysUser)
  97. // caseinfo, err := s.userdao.GetUserBelongCase(user.UserId)
  98. // if err != nil {
  99. // return nil, nil, err
  100. // }
  101. // activity.CaseId = caseinfo.CaseId
  102. // 存储 营销活动
  103. var err error
  104. newInfo, err = s.dao.AddMarketing(activity)
  105. if err != nil {
  106. return nil, nil, err
  107. }
  108. woke := model.SysActivityAction{}
  109. woke.ActivityId = newInfo.ActivityId
  110. woke.ActiveType = activeType
  111. woke.ResourceDesc = resourceDesc
  112. woke.ResourceType = "占位符"
  113. woke.ResourceId = res["giftValue"].(string)
  114. // 存储 活动动作
  115. newWoke, err = s.wdao.AddWork(woke)
  116. if err != nil {
  117. return nil, nil, err
  118. }
  119. // 重启事件
  120. events.ListenAllEvent(newInfo.OrgId, newInfo.CaseId)
  121. return newInfo, newWoke, err
  122. }
  123. // GetMarketingById 根据ID查询数据
  124. func (s *MarketingServ) GetMarketingById(activityId string) (*model.SysActivity, error) {
  125. if activityId == "" {
  126. return nil, utils.LogError("不存在营销信息!")
  127. }
  128. info, err := s.dao.GetMarketingById(activityId)
  129. if err != nil {
  130. return nil, err
  131. }
  132. if info == nil {
  133. return nil, utils.LogError("不存在营销信息!")
  134. }
  135. if info.Status == models.STATUS_DEL {
  136. return nil, utils.LogError("营销信息已被删除!")
  137. }
  138. return info, err
  139. }
  140. // DelMarketing 删除 根据ID删除数据
  141. func (s *MarketingServ) DelMarketing(activityId string) error {
  142. if activityId == "" {
  143. return utils.LogError("没有对应的营销活动")
  144. }
  145. info, err := s.dao.GetMarketingById(activityId)
  146. if err != nil {
  147. return err
  148. }
  149. // 判断状态是否被删除
  150. if info.Status == models.STATUS_DEL {
  151. return utils.LogError("营销状态异常")
  152. }
  153. err = s.dao.DelMarketing(activityId, models.STATUS_DEL)
  154. return err
  155. }
  156. // SetMarketingNormal 根据ID 修改状态为 正常
  157. func (s *MarketingServ) SetMarketingNormal(activityId string) error {
  158. if activityId == "" {
  159. return utils.LogError("没有对应的营销活动")
  160. }
  161. info, err := s.dao.GetMarketingById(activityId)
  162. if err != nil {
  163. return err
  164. }
  165. // 判断状态是否已经是正常
  166. if info.Status == models.STATUS_NORMAL {
  167. return utils.LogError("营销状态异常")
  168. }
  169. err = s.dao.DelMarketing(activityId, models.STATUS_NORMAL)
  170. if err == nil {
  171. // 重启事件
  172. events.ListenAllEvent(info.OrgId, info.CaseId)
  173. }
  174. return err
  175. }
  176. // SetMarketingDisable 根据ID 修改状态为 停用
  177. func (s *MarketingServ) SetMarketingDisable(activityId string) error {
  178. if activityId == "" {
  179. return utils.LogError("没有对应的营销活动")
  180. }
  181. info, err := s.dao.GetMarketingById(activityId)
  182. if err != nil {
  183. return err
  184. }
  185. // 判断状态是否已经是停用
  186. if info.Status == models.STATUS_READY {
  187. return utils.LogError("营销状态异常")
  188. }
  189. err = s.dao.DelMarketing(activityId, models.STATUS_READY)
  190. return err
  191. }
  192. // UpdateMarketing 修改 营销活动
  193. func (s *MarketingServ) UpdateMarketing(activity model.SysActivity) error {
  194. if activity.ActivityId == "" {
  195. return utils.LogError("没有对应的营销活动")
  196. }
  197. err := s.dao.UpdateMarketing(activity)
  198. return err
  199. }
  200. func (s *MarketingServ) GetUserCases(caseId string) ([]model.SysCase, error) {
  201. cases, err := s.dao.GetUserCases(caseId)
  202. if err != nil {
  203. utils.LogError("获取用户案场失败: " + err.Error())
  204. return nil, errors.New("获取用户案场失败")
  205. }
  206. return cases, nil
  207. }