package services import ( "encoding/json" "fmt" "hongze/hongze_cygx/models/rai_serve" "hongze/hongze_cygx/utils" "time" ) //权益服务统计 // Redis对列消息中的结构体 type RaiServeBillRedis struct { Content string `comment:"服务内容说明"` UserId int `comment:"用户ID"` ComapnyId int `comment:"公司ID"` SourceId int `comment:"来源ID"` Source string `comment:"来源"` RegisterPlatform int `comment:"来源 1小程序,2:网页"` ViewTime time.Time `comment:"浏览时间"` } // 权益服务统计添加到Redis队列中 func CygxRaiServeBillRedisAdd(content, source string, userId, comapnyId, sourceId, registerPlatform int, viewTime time.Time) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId) go utils.SendAlarmMsg("权益服务统计添加到Redis队列中,写入Redis队列消息失败 CygxRaiServeBillRedisAdd:"+err.Error()+msg, 2) } }() log := &rai_serve.RaiServeBillRedis{Content: content, Source: source, UserId: userId, ComapnyId: comapnyId, SourceId: sourceId, RegisterPlatform: registerPlatform, ViewTime: viewTime} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_RAI_SERVE_BILL_KEY, log) if err != nil { fmt.Println("RaiServeBillRedis LPush Err:" + err.Error()) } } return } //func init() { // CygxRaiServeBillRedisAddReduce() //} // CygxRaiServeBillRedisAddReduce 处理权益服务统计 func CygxRaiServeBillRedisAddReduce() (err error) { for { //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` utils.Rc.Brpop(utils.CYGX_RAI_SERVE_BILL_KEY, func(b []byte) { var log rai_serve.RaiServeBillRedis if err := json.Unmarshal(b, &log); err != nil { fmt.Println("json unmarshal wrong!") go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+err.Error()+string(b), 2) } switch log.Source { case utils.CYGX_OBJ_YANXUANSPECIAL: //研选专栏阅读记录处理 go RaiServeBillRedisAddReduceByYanxuanspecial(log) fmt.Println("研选专栏阅读记录处理") break default: fmt.Println(string(b)) go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2) } }) } } // 处理权益服务统计->研选阅读记录 func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis) (err error) { source := log.Source userId := log.UserId sourceId := log.SourceId defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId), 2) } }() //activityId := log.ActivityId //userId := log.UserId // //activtyPayTotal := GetCygxOrderVirtualAssetdCountTotal(userId, activityId) // 单场付费活动不处理扣点明细 //if activtyPayTotal > 0 { // return //} // ////获取活动是否扣点以及扣点规则明细 //activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId) //if e != nil && e.Error() != utils.ErrNoRow() { // err = errors.New("GetCygxActivityPointsSetDetail" + e.Error()) // return //} //if activityPointsSetDetail == nil { // return //} //if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 { // return // 如果不是报名即扣点的这种形式,那么就不做任何处理 //} // //activityInfo, e := models.GetAddActivityInfoById(activityId) //if e != nil { // err = errors.New("GetAddActivityInfoById" + e.Error()) // return //} //user, e := models.GetWxUserItemByUserId(userId) //if e != nil { // err = errors.New("GetWxUserItemByUserId" + e.Error()) // return //} //companyId := user.CompanyId ////判断公司是不是满足扣点情况,如果是后台超管手动给试用客户报名,就写入一条点数初始化数据 //total, e := models.GetCygxActivityPointsCompanyCountByCompanyId(companyId) //if e != nil { // err = errors.New("GetCygxActivityPointsCompanyCountByCompanyId, Err: " + e.Error()) // return //} //var companyPointsNum float64 //if total == 0 { // companyPointsNum = 0 // itemPointsCompany := new(models.CygxActivityPointsCompany) // // itemPointsCompany.CompanyId = companyId // itemPointsCompany.CompanyName = user.CompanyName // itemPointsCompany.CreateTime = time.Now() // itemPointsCompany.ModifyTime = time.Now() // // e = models.AddCygxActivityPointsCompany(itemPointsCompany) // if e != nil { // err = errors.New("AddCygxActivityPointsCompany, Err: " + e.Error()) // return // } //} else { // // 获取用户所在公司剩余的点 // companyPointsNum, e = models.GetCompanyPoints(user.CompanyId) // if e != nil && e.Error() != utils.ErrNoRow() { // err = errors.New("GetCompanyPoints, Err: " + e.Error()) // return // } // //} // ////获取需要添加的流水信息 //var items []*models.CygxActivityPointsBill //item := new(models.CygxActivityPointsBill) //item.UserId = user.UserId //item.ActivityId = activityId //item.CreateTime = time.Now() //item.Mobile = user.Mobile //item.Email = user.Email //item.CompanyId = user.CompanyId //item.CompanyName = user.CompanyName //item.RealName = user.RealName //item.BillDetailed = -activityPointsSetDetail.UserPointsNum //item.RegisterPlatform = log.RegisterPlatform //item.AdminId = log.AdminId //item.Source = log.Source //item.ChartPermissionId = activityInfo.ChartPermissionId //item.DoType = 1 //item.Content = activityInfo.ActivityName + "--报名" //item.Points = companyPointsNum - activityPointsSetDetail.UserPointsNum //items = append(items, item) // ////更新对应机构的剩余点数 //var itemCompanys []*models.CygxActivityPointsCompany //itemCompany := new(models.CygxActivityPointsCompany) //itemCompany.CompanyId = user.CompanyId //itemCompany.Points = item.Points //itemCompany.ModifyTime = time.Now() //itemCompanys = append(itemCompanys, itemCompany) // //err = models.AddCygxActivityPointsBillMulti(items, itemCompanys) return }