|
- package svc
-
- import (
- "applet/app/comm/db"
- "applet/app/comm/db/model"
- "applet/app/comm/utils/logx"
- "fmt"
- "strings"
- "time"
- "xorm.io/xorm"
-
- "github.com/gin-gonic/gin"
- )
-
- // RoutineInsertUserRelate is 协程 当关联上级用户时,需要查询当前用户的所有关联下级,并新增关联上级与当前用户下级关系
- func RoutineInsertUserRelate(c *gin.Context, puid, uid, addlv int) {
- defer Rev()
- urs, err := db.UserRelatesByPuid(db.DBs[c.GetString("mid")], uid, 0, 0)
- if err != nil {
- logx.Warn(err)
- }
- // fmt.Println(*urs)
- for _, item := range *urs {
- _, err := db.UserRelateInsert(db.DBs[c.GetString("mid")],
- &model.UserRelate{
- ParentUid: puid,
- Uid: item.Uid,
- Level: item.Level + addlv,
- InviteTime: time.Now(),
- })
- if err != nil {
- continue
- }
- logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v) ,lv:%v", puid, item.Uid, item.Level+addlv))
-
- }
- }
- func RoutineInsertUserRelateSess(sess *xorm.Session, puid, uid, addlv int) {
- defer Rev()
- urs, err := db.UserRelatesByPuidSess(sess, uid, 0, 0)
- if err != nil {
- logx.Warn(err)
- }
- // fmt.Println(*urs)
- for _, item := range *urs {
- _, err := db.UserRelateInsertSess(sess,
- &model.UserRelate{
- ParentUid: puid,
- Uid: item.Uid,
- Level: item.Level + addlv,
- InviteTime: time.Now(),
- })
- if err != nil {
- continue
- }
- logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v) ,lv:%v", puid, item.Uid, item.Level+addlv))
-
- }
- }
-
- //RoutineMultiRelate is 多级关联
- func RoutineMultiRelate(c *gin.Context, pid int, uid int, lv int) {
- defer Rev()
- for {
- if pid == 0 {
- break
- }
- m, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], pid)
- if err != nil || m == nil {
- logx.Warn(err)
- break
- }
- if m.ParentUid == 0 {
- break
- }
- lv++
- ur := new(model.UserRelate)
- ur.ParentUid = m.ParentUid
- ur.Uid = uid
- ur.Level = lv
- ur.InviteTime = time.Now()
- _, err = db.UserRelateInsert(db.DBs[c.GetString("mid")], ur)
- if err != nil {
- logx.Warn(err)
- break
- }
- // 还要关联当前的用户的所有下级,注意关联等级
- go RoutineInsertUserRelate(c, m.ParentUid, uid, lv)
- // 下级关联上上级
- // 继续查询
- logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
- logx.Info("继续查询")
- pid = m.ParentUid
- }
-
- }
- func RoutineMultiRelateSess(sess *xorm.Session, pid int, uid int, lv int) {
- defer Rev()
- for {
- if pid == 0 {
- break
- }
- m, err := db.UserProfileFindByIDSess(sess, pid)
- if err != nil || m == nil {
- logx.Warn(err)
- break
- }
- if m.ParentUid == 0 {
- break
- }
- lv++
- ur := new(model.UserRelate)
- ur.ParentUid = m.ParentUid
- ur.Uid = uid
- ur.Level = lv
- ur.InviteTime = time.Now()
- _, err = db.UserRelateInsertSess(sess, ur)
- if err != nil {
- logx.Warn(err)
- break
- }
- // 还要关联当前的用户的所有下级,注意关联等级
- RoutineInsertUserRelateSess(sess, m.ParentUid, uid, lv)
- // 下级关联上上级
- // 继续查询
- logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
- logx.Info("继续查询")
- pid = m.ParentUid
- }
-
- }
-
- //RoutineMultiRelate is 多级关联
- func RoutineMultiRelate1(c *gin.Context, pid int, uid int, lv int) {
- defer Rev()
- for {
- if pid == 0 {
- break
- }
- m, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], pid)
- if err != nil {
- logx.Warn(err)
- break
- }
- if m != nil {
- if m.ParentUid == 0 {
- break
- }
- lv++
- ur := new(model.UserRelate)
- ur.ParentUid = m.ParentUid
- ur.Uid = uid
- ur.Level = lv
- ur.InviteTime = time.Now()
- _, err := db.UserRelateInsert(db.DBs[c.GetString("mid")], ur)
- if err != nil && strings.Contains(err.Error(), "Duplicate") == false {
- logx.Warn(err)
- break
- }
- if err != nil && strings.Contains(err.Error(), "Duplicate") {
- tmp, _, _ := db.UserRelateByUIDAndPUID(db.DBs[c.GetString("mid")], ur.Uid, ur.ParentUid)
- if tmp != nil && tmp.Level != ur.Level {
- db.UserRelateUpdate(db.DBs[c.GetString("mid")], ur)
- }
- }
- // 还要关联当前的用户的所有下级,注意关联等级
- //go RoutineInsertUserRelate(c, m.ParentUid, uid, lv)
- // 下级关联上上级
- // 继续查询
- logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
- logx.Info("继续查询")
- pid = m.ParentUid
- }
- if m == nil {
- logx.Info("查询结束,退出")
- break
- }
- }
-
- }
|