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 } } }