xingzai 1 anno fa
parent
commit
8d599b2f23

+ 2 - 0
controllers/activity.go

@@ -847,6 +847,7 @@ func (this *ActivityCoAntroller) SignupAdd() {
 				go services.ActivityUserRemind(user, activityInfo, 4)
 				resp.PopupMsg = "<b>报名成功,已加入您的活动日程</b><br/>想要及时获取活动信息变更通知,请关注【查研观向小助手】公众号"
 			}
+			go services.YanXuanActivityPointsBillSignupAdd(activityId, uid) // 用户报名添加到处理研选扣点
 		}
 	} else {
 		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
@@ -996,6 +997,7 @@ func (this *ActivityCoAntroller) SignupCancel() {
 		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
 		return
 	}
+	go services.YanXuanActivityPointsBillSignupCancel(activityId, uid) // 用户取消报名添加到处理研选扣点
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 77 - 0
models/activity_points_bill.go

@@ -0,0 +1,77 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// CygxActivityPointsBill 活动扣点流水表
+type CygxActivityPointsBill struct {
+	Id                int       `gorm:"column:id;primary_key;AUTO_INCREMENT" json:""`
+	UserId            int       `gorm:"column:user_id;NOT NULL" json:""`                     // 用户ID
+	ActivityId        int       `gorm:"column:activity_id;default:0;NOT NULL" json:""`       // 活动ID
+	CreateTime        time.Time `gorm:"column:create_time" json:""`                          // 创建时间
+	Mobile            string    `gorm:"column:mobile" json:""`                               // 手机号
+	Email             string    `gorm:"column:email" json:""`                                // 邮箱
+	CompanyId         int       `gorm:"column:company_id;default:0" json:""`                 // 公司ID
+	CompanyName       string    `gorm:"column:company_name" json:""`                         // 公司名称
+	RealName          string    `gorm:"column:real_name" json:""`                            // 用户实际名称
+	AdminId           int       `gorm:"column:admin_id;NOT NULL" json:""`                    // 管理员、销售ID
+	Source            int       `gorm:"column:source;default:1;NOT NULL" json:""`            // 来源,1客户端,2后台添加, 3开发人员手动添加、4定时任务
+	BillDetailed      float64   `gorm:"column:bill_detailed;default:0;NOT NULL" json:""`     // 流水明细,判断是进账还是出账
+	RegisterPlatform  int       `gorm:"column:register_platform;default:0;NOT NULL" json:""` // 来源 1小程序,2:网页
+	ChartPermissionId int       `gorm:"column:chart_permission_id;default:0" json:""`        // 表chart_permission中id
+	DoType            int       `gorm:"column:do_type;default:1;NOT NULL" json:""`           // 操作方式,1减少,2增加
+	Content           string    `gorm:"column:content" json:""`                              // 内容说明
+	Points            float64   `gorm:"column:points;default:0;NOT NULL" json:""`            // 公司剩余点数
+}
+
+// CompanyTryOutDayListResp 客户累计试用天数
+type CygxActivityPointsBillListResp struct {
+	List []*CygxActivityPointsBillResp
+}
+
+type CygxActivityPointsBillResp struct {
+	Id           int     `gorm:"column:id;primary_key;AUTO_INCREMENT"`
+	Content      string  `gorm:"column:content" `                                 // 内容说明
+	Points       float64 `gorm:"column:points;default:0;NOT NULL" `               // 公司剩余点数
+	CreateTime   string  `gorm:"column:create_time" `                             // 创建时间
+	CompanyId    int     `gorm:"column:company_id;default:0" `                    // 公司ID
+	CompanyName  string  `gorm:"column:company_name" `                            // 公司名称
+	RealName     string  `gorm:"column:real_name"`                                // 用户实际名称
+	BillDetailed float64 `gorm:"column:bill_detailed;default:0;NOT NULL" json:""` // 流水明细,判断是进账还是出账
+}
+
+// AddCygxActivityPointsBillMulti 批量添加
+func AddCygxActivityPointsBillMulti(items []*CygxActivityPointsBill, itemsUpdate []*CygxActivityPointsCompany) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	if len(items) > 0 {
+		//批量添加流水信息
+		_, err = o.InsertMulti(len(items), items)
+	}
+	//批量修改公司剩余点数
+	p, err := o.Raw("UPDATE cygx_activity_points_company SET points = ?, modify_time = ? WHERE company_id = ?").Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close() // 别忘记关闭 statement
+	}()
+	for _, v := range itemsUpdate {
+		_, err = p.Exec(v.Points, v.ModifyTime, v.CompanyId)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 13 - 3
models/activity_points_set.go

@@ -5,13 +5,23 @@ import (
 	"time"
 )
 
+type YanXuanActivityPointsRedis struct {
+	UserId           int       `description:"用户ID"`
+	ActivityId       int       `description:"资源ID"`
+	SourceType       int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
+	AdminId          int       `description:"管理员、销售ID"`
+	Source           int       `description:" 来源,1客户端,2后台添加, 3开发人员手动添加、4定时任务"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
+	CreateTime       time.Time `description:"创建时间"`
+}
+
 type CygxActivityPointsSet struct {
 	Id               int       `gorm:"column:id;primary_key;AUTO_INCREMENT" json:"id"`
 	ActivityId       int       `gorm:"column:activity_id;NOT NULL" json:"activity_id"`                         // 活动ID
 	PointsObject     int       `gorm:"column:points_object;default:1;NOT NULL" json:"points_object"`           // 扣点对象,1:参会人、2:办会人、3:办会人和参会人
 	CompanyId        int       `gorm:"column:company_id;default:0;NOT NULL" json:"company_id"`                 // 公司ID
-	CompanyName      string    `gorm:"column:company_name;NOT NULL" json:"company_name"`                       // 公司名称
-	UserPointsNum    string    `gorm:"column:user_points_num;default:0;NOT NULL" json:"user_points_num"`       // 参会人扣点数量
+	CompanyName      float64   `gorm:"column:company_name;NOT NULL" json:"company_name"`                       // 公司名称
+	UserPointsNum    float64   `gorm:"column:user_points_num;default:0;NOT NULL" json:"user_points_num"`       // 参会人扣点数量
 	PointsType       int       `gorm:"column:points_type;default:0;NOT NULL" json:"points_type"`               // 扣点形式,1:报名即扣点,2:到会即扣点
 	CompanyPointsNum string    `gorm:"column:company_points_num;default:0;NOT NULL" json:"company_points_num"` // 办会人扣点数量
 	CreateTime       time.Time `gorm:"column:create_time;NOT NULL" json:"create_time"`                         // 创建时间
@@ -37,7 +47,7 @@ type CygxActivityPointsSetConfigResp struct {
 }
 
 // 通过活动ID获取详情
-func GetCygxActivityPointsSetDetail(activityId int) (item *CygxActivityPointsSetRsq, err error) {
+func GetCygxActivityPointsSetDetail(activityId int) (item *CygxActivityPointsSet, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_activity_points_set  WHERE activity_id=? `
 	err = o.Raw(sql, activityId).QueryRow(&item)

+ 1 - 0
models/db.go

@@ -151,6 +151,7 @@ func init() {
 		new(CygxUserLabelActivity),
 		new(CygxUserLabelArticle),
 		new(CygxUserLabelActivitySpecial),
+		new(CygxActivityPointsBill),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 247 - 18
services/activity_points.go

@@ -1,10 +1,12 @@
 package services
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
+	"time"
 )
 
 //func init() {
@@ -12,38 +14,265 @@ import (
 //}
 
 // GetActivityPointsAll 获取所有带有扣点的活动
-func GetActivityPointsAll() (listxActivity []*models.CygxActivity, err error) {
+//func GetActivityPointsAll() (listxActivity []*models.CygxActivity, err error) {
+//	defer func() {
+//		if err != nil {
+//			fmt.Println(err)
+//			go utils.SendAlarmMsg("获取所有带有扣点的活动失败"+err.Error(), 2)
+//		}
+//	}()
+//	var condition string
+//	var pars []interface{}
+//	listxActivity = make([]*models.CygxActivity, 0)
+//	list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
+//	if e != nil && e.Error() != utils.ErrNoRow() {
+//		err = errors.New("GetCygxActivityPointsSetList,Err: " + e.Error())
+//		return
+//	}
+//	var activityIds []int
+//	for _, v := range list {
+//		activityIds = append(activityIds, v.ActivityId)
+//	}
+//	lenArr := len(activityIds)
+//	if lenArr == 0 {
+//		return
+//	}
+//	condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(lenArr) + `)`
+//	pars = append(pars, activityIds)
+//	listxActivity, e = models.GetCygxActivityList(condition, pars, 0, lenArr)
+//	if e != nil && e.Error() != utils.ErrNoRow() {
+//		err = errors.New("GetCygxActivityList,Err: " + e.Error())
+//		return
+//	}
+//	for _, v := range listxActivity {
+//		fmt.Println(v)
+//	}
+//	return
+//}
+
+// 用户报名添加到处理研选扣点
+func YanXuanActivityPointsBillSignupAdd(activityId, uid int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
+			go utils.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
+		}
+	}()
+	//SourceType int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
+	log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
+		if err != nil {
+			fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
+		}
+	}
+	return
+}
+
+// 用户取消报名添加到处理研选扣点
+func YanXuanActivityPointsBillSignupCancel(activityId, uid int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
+			go utils.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
+		}
+	}()
+	//SourceType int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
+	log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
+		if err != nil {
+			fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
+		}
+	}
+	return
+}
+
+// YanXuanActivityPointsBillReduce 处理研选活动扣点
+func YanXuanActivityPointsBillReduce() (err error) {
+	for {
+		//SourceType int       `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
+		utils.Rc.Brpop(utils.CYGX_YANXUAN_POINTS_KEY, func(b []byte) {
+			var log models.YanXuanActivityPointsRedis
+			if err := json.Unmarshal(b, &log); err != nil {
+				fmt.Println("json unmarshal wrong!")
+				go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+err.Error()+string(b), 2)
+			}
+			switch log.SourceType {
+			case 1:
+				go YanXuanActivityPointsBillSignupAddReduce(log)
+				fmt.Println("1:报名")
+				break
+			case 2:
+				go YanXuanActivityPointsBillSignupCancelReduce(log)
+				fmt.Println(" 2:取消报名")
+				break
+			case 3:
+				//go ActivityUserLabelLogReduce(log)
+				fmt.Println("3:活动编辑")
+				break
+			case 4:
+				//go CategoryFllowUserLabelLogReduce(log)
+				fmt.Println("4:活动发布,取消发布")
+				break
+			case 5:
+				//go ActivitySpecialUserLabelLogReduce(log)
+				fmt.Println("5:活动到会。")
+				break
+			default:
+				fmt.Println(string(b))
+				go utils.SendAlarmMsg("用户更新相关标签处理Redis队列消息失败:"+string(b), 2)
+			}
+		})
+	}
+}
+
+// 1:用户报名
+func YanXuanActivityPointsBillSignupAddReduce(log models.YanXuanActivityPointsRedis) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
-			go utils.SendAlarmMsg("获取所有带有扣点的活动失败"+err.Error(), 2)
+			go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
 		}
 	}()
-	var condition string
-	var pars []interface{}
-	listxActivity = make([]*models.CygxActivity, 0)
-	list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
+
+	activityId := log.ActivityId
+	userId := log.UserId
+
+	//获取活动是否扣点以及扣点规则明细
+	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
 	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityPointsSetList,Err: " + e.Error())
+		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
+		return
+	}
+	if activityPointsSetDetail == nil {
 		return
 	}
-	var activityIds []int
-	for _, v := range list {
-		activityIds = append(activityIds, v.ActivityId)
+	if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
+		return // 如果不是报名即扣点的这种形式,那么就不做任何处理
 	}
-	lenArr := len(activityIds)
-	if lenArr == 0 {
+
+	activityInfo, e := models.GetAddActivityInfoById(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
 		return
 	}
-	condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(lenArr) + `)`
-	pars = append(pars, activityIds)
-	listxActivity, e = models.GetCygxActivityList(condition, pars, 0, lenArr)
+	user, e := models.GetWxUserItemByUserId(userId)
+	if e != nil {
+		err = errors.New("GetWxUserItemByUserId" + e.Error())
+		return
+	}
+
+	// 获取用户所在公司剩余的点
+	companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
 	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivityList,Err: " + e.Error())
+		err = errors.New("GetCompanyPoints, Err: " + e.Error())
 		return
 	}
-	for _, v := range listxActivity {
-		fmt.Println(v)
+	//获取需要添加的流水信息
+	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.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
+}
+
+// 2:用户取消报名
+func YanXuanActivityPointsBillSignupCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("用户取消报名扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
+		}
+	}()
+
+	activityId := log.ActivityId
+	userId := log.UserId
+
+	//获取活动是否扣点以及扣点规则明细
+	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
+	}
+
+	// 获取用户所在公司剩余的点
+	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.ChartPermissionId = activityInfo.ChartPermissionId
+	item.DoType = 2
+	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
 }

+ 1 - 0
services/task.go

@@ -127,6 +127,7 @@ func Task() {
 	}
 
 	go UserLabelLogReduce() // 处理用户标签的队列消息
+	//go YanXuanActivityPointsBillReduce() // 处理研选活动扣点
 	//GetCygxActivityAttendanceDetail()
 	//CreateIndexNameArticleHistory()
 	//AddAllArticleHistory()

+ 1 - 0
utils/constants.go

@@ -124,6 +124,7 @@ const (
 const (
 	YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY = "YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY" //易董证通云的token,存Redis使用
 	CYGX_USER_KEY_LABEL              = "CYGX_USER_KEY_LABEL"              //查研观向用户标签
+	CYGX_YANXUAN_POINTS_KEY          = "CYGX_YANXUAN_POINTS_KEY"          //查研观向研选活动扣点KEY
 )
 
 const (