123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- package gymcard
-
- import (
- "errors"
- "spaceofcheng/services/models"
- "spaceofcheng/services/models/customer"
- "spaceofcheng/services/models/gymcard"
- "spaceofcheng/services/models/model"
- "spaceofcheng/services/service"
- "spaceofcheng/services/utils"
- "strings"
- "time"
- )
-
- // GymcardServ 系统处理
- type GymcardServ struct {
- ctx *utils.Context
- dao *gymcard.GymcardDAO
- cdao *customer.CustomerDAO
- }
-
- // NewGymcardServ 初始化
- func NewGymcardServ(ctx *utils.Context) *GymcardServ {
- return &GymcardServ{
- ctx: ctx,
- dao: gymcard.NewGymcardDAO(ctx),
- cdao: customer.NewCustomerDAO(ctx),
- }
- }
-
- // GetGymcardList 根据案场id获取健身卡列表
- func (s *GymcardServ) GetGymcardList(caseID string, pagenavi ...int) ([]gymcard.Gymcard, int64, error) {
- filters := []string{}
- if caseID != "" {
- if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
- return nil, 0, err
- }
-
- filters = []string{
- "case_id='" + caseID + "'",
- }
- } else {
- casesRaw := s.ctx.Get("cases")
- if casesRaw == nil {
- return nil, 0, errors.New("请设置过滤案场")
- }
-
- cases := casesRaw.([]model.SysUserCase)
- caseIDs := []string{}
- for _, cs := range cases {
- caseIDs = append(caseIDs, cs.CaseId)
- }
-
- filters = []string{
- "case_id in ('" + strings.Join(caseIDs, "','") + "')",
- }
- }
-
- limit := utils.GetPageNaviLimit(pagenavi...)
- res, total, err := s.dao.GetGymcard(filters, limit)
- if err != nil {
- utils.LogError("查询卡列表失败: " + err.Error())
- return nil, 0, errors.New("查询卡列表失败")
- }
-
- return res, total, nil
- }
-
- // GetCustomerGymBycustomerId 根据客户id获取客户所有健身卡列表
- func (s *GymcardServ) GetCustomerGymBycustomerId(page, pageSize int) (map[string]interface{}, error) {
- customer := s.ctx.Get("customer").(model.TaCustomer)
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- customerGym, err := s.dao.GetCustomerGymByCustomerId(customer.CustomerId, page, pageSize)
- if err != nil {
- utils.LogError("获取健身卡列表失败:" + err.Error())
- return nil, errors.New("获取健身卡列表失败")
- }
- total, err := s.dao.GetCustomerGymCountByCustomerId(customer.CustomerId)
- if err != nil {
- utils.LogError("获取健身卡列表失败:" + err.Error())
- return nil, errors.New("获取健身卡列表失败")
- }
- return map[string]interface{}{
- "list": customerGym,
- "pageSize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- // GetCustomerGymByPhone 根据用户手机号获取用户健身卡列表
- func (s *GymcardServ) GetCustomerGymByPhone(phone string) ([]gymcard.CustomerGym, error) {
- customerGym, err := s.dao.GetCustomerGymByPhone(phone)
- if err != nil {
- utils.LogError("获取健身卡列表失败:" + err.Error())
- return nil, errors.New("获取健身卡列表失败")
- }
- return customerGym, nil
- }
-
- // GetGymcardDetailById 根据id获取健身卡详情
- func (s *GymcardServ) GetGymcardDetailById(gymcardId string) (*gymcard.Gymcard, error) {
- gymcard, err := s.dao.GetGymcardById(gymcardId)
- if err != nil {
- utils.LogError("获取健身卡详情失败" + err.Error())
- return nil, errors.New("获取健身卡详情失败")
- }
- return gymcard, nil
- }
-
- // GetCustomerGymDetailById 根据id获取客户健身卡详情
- func (s *GymcardServ) GetCustomerGymDetailById(customerGymId string) (*gymcard.CustomerGym, error) {
- customerGym, err := s.dao.GetCustomerGymById(customerGymId)
- if err != nil {
- utils.LogError("获取健身卡详情失败" + err.Error())
- return nil, errors.New("获取健身卡详情失败")
- }
- return customerGym, err
- }
-
- // SaveGymcard 保存游泳健身卡
- func (s *GymcardServ) SaveGymcard(newGym gymcard.Gymcard) (*gymcard.Gymcard, error) {
- var cardGym = model.TaGymCard{}
- var err error
- if newGym.GymCardId == "" {
- cardGym, err = s.dao.AddGymcard(newGym.TaGymCard)
- if err != nil {
- utils.LogError("保存健身卡信息失败" + err.Error())
- return nil, errors.New("保存健身卡信息失败")
- }
- err = s.dao.AddGymcardImg(cardGym.GymCardId, newGym.CardImageUrl)
- if err != nil {
- utils.LogError("保存健身卡信息失败" + err.Error())
- return nil, errors.New("保存健身卡信息失败")
- }
- err = s.dao.AddGymcardShare(cardGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
- if err != nil {
- utils.LogError("保存健身卡信息失败" + err.Error())
- return nil, errors.New("保存健身卡信息失败")
- }
- if newGym.SendType == "channel" {
- err = s.dao.AddCardChannel(cardGym.GymCardId, newGym.ChannelId)
- }
- } else {
- err = s.dao.EditGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
- // if err != nil {
- // utils.LogError("保存健身卡信息失败" + err.Error())
- // return nil, errors.New("保存健身卡信息失败")
- // }
- err = s.dao.EditGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
- // if err != nil {
- // utils.LogError("保存健身卡信息失败" + err.Error())
- // return nil, errors.New("保存健身卡信息失败")
- // }
- }
- if err != nil {
- utils.LogError("保存健身卡信息失败" + err.Error())
- return nil, errors.New("保存健身卡信息失败")
- }
- return &newGym, nil
- }
-
- // SendGymCardToUser 给客户发卡
- func (s *GymcardServ) SendGymCardToUser(gymcardId, sysuserId string) (*model.TaCustomerGym, error) {
- var customerGym *model.TaCustomerGym
- customer := s.ctx.Get("customer").(model.TaCustomer)
- var sysuser *model.SysUser
- gymCard, err := s.dao.GetGymcardById(gymcardId)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return nil, errors.New("发送游泳健身卡给客户失败")
- }
- if gymCard.TotalCount-gymCard.SentCount < 1 {
- return nil, errors.New("健身卡剩余数量不足!")
- }
- sysuser, err = s.cdao.GetUserByID(sysuserId)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return nil, errors.New("发送游泳健身卡给客户失败")
- }
- gymCard.SentCount = gymCard.SentCount + 1
-
- customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customer.CustomerId, sysuserId, sysuser.RealName, models.RECEIVEING_TYPE_SALES)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return nil, errors.New("发送游泳健身卡给客户失败")
- }
-
- err = s.dao.EditGymcard(&gymCard.TaGymCard)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return nil, errors.New("发送游泳健身卡给客户失败")
- }
- return customerGym, nil
- }
-
- // // SendGymCardToUser 后台给客户发卡
- // func (s *GymcardServ) BackSendGymCardToUser(gymcardId, sysuserId, customerId string) (*model.TaCustomerGym, error) {
- // var customerGym *model.TaCustomerGym
- // var sysuser *model.SysUser
- // gymCard, err := s.dao.GetGymcardById(gymcardId)
- // if err != nil {
- // utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- // return nil, errors.New("发送游泳健身卡给客户失败")
- // }
- // if gymCard.TotalCount-gymCard.SentCount < 1 {
- // return nil, errors.New("健身卡剩余数量不足!")
- // }
- // sysuser, err = s.cdao.GetUserByID(sysuserId)
- // if err != nil {
- // utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- // return nil, errors.New("发送游泳健身卡给客户失败")
- // }
- // gymCard.SentCount = gymCard.SentCount + 1
- // customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customerId, sysuserId, sysuser.RealName,)
- // if err != nil {
- // utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- // return nil, errors.New("发送游泳健身卡给客户失败")
- // }
-
- // err = s.dao.EditGymcard(&gymCard.TaGymCard)
- // if err != nil {
- // utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- // return nil, errors.New("发送游泳健身卡给客户失败")
- // }
- // return customerGym, nil
- // }
-
- // UpdateCustomerGym 核销游泳健身卡
- func (s *GymcardServ) UpdateCustomerGym(customerGymId, caseid string) error {
- var gymCard *gymcard.Gymcard
- customerGym, err := s.dao.GetCustomerGymById(customerGymId)
- if err != nil {
- utils.LogError("核销游泳健身卡失败" + err.Error())
- return errors.New("核销游泳健身卡失败")
- }
- if caseid != customerGym.CaseId {
- utils.LogError("核销游泳健身卡失败")
- return errors.New("您的健身卡不在本案场")
- }
- gymCard, err = s.dao.GetGymcardById(customerGym.GymCardId)
- if err != nil {
- utils.LogError("核销游泳健身卡失败" + err.Error())
- return errors.New("核销游泳健身卡失败")
- }
- if gymCard.GymTypeId == "once" {
- customerGym.Status = models.STATUS_DEL
- customerGym.CardStatus = models.CARD_COUPON_USED
- gymCard.UsedCount = gymCard.UsedCount + 1
- } else {
- if customerGym.StartDate.IsZero() {
- now := time.Now()
- customerGym.StartDate = time.Now()
- switch gymCard.GymTypeId {
- case "month":
- end, _ := time.ParseDuration("720h")
- customerGym.EndDate = now.Add(end)
- case "quarter":
- end, _ := time.ParseDuration("2160h")
- customerGym.EndDate = now.Add(end)
- case "year":
- end, _ := time.ParseDuration("8760h")
- customerGym.EndDate = now.Add(end)
- }
- gymCard.UsedCount = gymCard.UsedCount + 1
- }
- }
- if customerGym.EndDate.After(time.Now()) {
- customerGym.Status = models.STATUS_DEL
- }
- err = s.dao.UpdateCustomerGym(customerGym.TaCustomerGym)
- if err != nil {
- utils.LogError("核销游泳健身卡失败" + err.Error())
- return errors.New("核销游泳健身卡失败")
- }
- err = s.dao.EditGymcard(&gymCard.TaGymCard)
- if err != nil {
- utils.LogError("核销游泳健身卡失败" + err.Error())
- return errors.New("核销游泳健身卡失败")
- }
- err = s.dao.AddGymcardUsage(customerGym.TaCustomerGym)
- return err
-
- }
- func (s *GymcardServ) deleteGymCard(gymcardId string) error {
- gymCard, err := s.dao.GetGymcardById(gymcardId)
- if err != nil {
- utils.LogError("删除健身卡失败" + err.Error())
- return errors.New("删除健身卡失败")
- }
- err = s.dao.DeleteGymcard(gymcardId)
- if err != nil {
- utils.LogError("删除健身卡失败" + err.Error())
- return errors.New("删除健身卡失败")
- }
- err = s.dao.DeleteCardImg(gymcardId)
- if err != nil {
- utils.LogError("删除健身卡失败" + err.Error())
- return errors.New("删除健身卡失败")
- }
- err = s.dao.DeleteCardShare(gymcardId)
- if err != nil {
- utils.LogError("删除健身卡失败" + err.Error())
- return errors.New("删除健身卡失败")
- }
- if gymCard.SendType == "channel" {
- err = s.dao.DeleteCardChannel(gymcardId)
- if err != nil {
- utils.LogError("删除健身卡失败" + err.Error())
- return errors.New("删除健身卡失败")
- }
- }
- return err
-
- }
-
- // GiveCardToCustomer 赠送健身卡
- func (s *GymcardServ) GiveCardToCustomer(gymcardId, uids string) error {
- gymCard, err := s.dao.GetGymcardById(gymcardId)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return errors.New("发送游泳健身卡给客户失败")
- }
- arrUID := strings.Split(uids, ",")
- if gymCard.TotalCount-gymCard.SentCount < len(arrUID) {
- return errors.New("健身卡剩余数量不足!")
- }
-
- for _, uid := range arrUID {
- _, err := s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, uid, "", "", models.RECEIVEING_TYPE_GIVE)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return errors.New("发送游泳健身卡给客户失败")
- }
- gymCard.SentCount = gymCard.SentCount + 1
- }
- err = s.dao.EditGymcard(&gymCard.TaGymCard)
- if err != nil {
- utils.LogError("发送游泳健身卡给客户失败" + err.Error())
- return errors.New("发送游泳健身卡给客户失败")
- }
- return nil
- }
|