|
- package svc
-
- import (
- md "applet/app/md/institutional_management/public_platoon"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
- zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_models.git/utils/logx"
- "fmt"
- "xorm.io/xorm"
- )
-
- func GetTrees(engine *xorm.Engine, firstUser *model.PublicPlatoonUserRelation, leveLimit int) (list *md.TreeNode, err error) {
- var trees func(list []*md.TreeNode) []*md.TreeNode
- trees = func(list []*md.TreeNode) []*md.TreeNode {
- for _, item := range list {
- userPublicPlatoonRelations := make([]*model.PublicPlatoonUserRelation, 0)
- err = engine.Where("father_uid1 = ?", item.Uid).Find(&userPublicPlatoonRelations)
- if err != nil || len(userPublicPlatoonRelations) == 0 {
- continue
- }
-
- userIDs := make([]int64, len(userPublicPlatoonRelations))
- for i, relation := range userPublicPlatoonRelations {
- userIDs[i] = relation.Uid
- }
-
- users := make(map[int64]model.User)
- var userRecords []model.User
- err = engine.In("id", userIDs).Find(&userRecords)
- if err != nil {
- users = make(map[int64]model.User)
- } else {
- for _, user := range userRecords {
- users[user.Id] = user
- }
- }
-
- tempValue := make([]*md.TreeNode, 0)
- level := 1
- for _, relation := range userPublicPlatoonRelations {
- user := users[relation.Uid]
- tempValue = append(tempValue, &md.TreeNode{
- AvatarURL: user.Avatar,
- Phone: user.Phone,
- Nickname: user.Nickname,
- Uid: relation.Uid,
- PID: relation.RecommendUid,
- Position: relation.Position1,
- SystemID: relation.Id,
- Level: relation.LevelTotal,
- })
- level = relation.LevelTotal
- }
- item.Son = tempValue
- if level <= leveLimit {
- trees(item.Son)
- }
- }
- return list
- }
-
- if firstUser == nil {
- return
- }
-
- user := new(model.User)
- has, err := engine.ID(firstUser.Uid).Get(user)
- if err != nil || !has {
- return
- }
-
- rootNode := &md.TreeNode{
- AvatarURL: user.Avatar,
- Phone: user.Phone,
- Nickname: user.Nickname,
- Uid: firstUser.Uid,
- PID: firstUser.RecommendUid,
- Level: firstUser.LevelTotal,
- Position: firstUser.Position1,
- SystemID: firstUser.Id,
- }
- trees([]*md.TreeNode{rootNode})
- return rootNode, nil
- }
-
- func ExchangeUserPosition(engine *xorm.Engine, relation1, relation2 *model.PublicPlatoonUserRelation) (err error) {
- uid1 := relation1.Uid
- uid2 := relation2.Uid
- recommendUid1 := relation1.RecommendUid
- recommendUid2 := relation2.RecommendUid
- relation1.Uid = uid2
- relation2.Uid = uid1
- relation1.RecommendUid = recommendUid2
- relation2.RecommendUid = recommendUid1
-
- forceColumns := []string{"recommend_uid", "uid"}
-
- session := engine.NewSession()
- defer session.Close()
-
- if err := session.Begin(); err != nil {
- return zhios_order_relate_logx.Error(err)
- }
-
- _, err = session.Table(new(model.PublicPlatoonUserRelation)).ID(relation1.Id).Update(map[string]interface{}{"uid": -99})
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
- _, err = session.Table(new(model.PublicPlatoonUserRelation)).ID(relation2.Id).Update(map[string]interface{}{"uid": -999})
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
-
- _, err = session.Where("id = ?", relation1.Id).Cols(forceColumns...).Update(session, &relation1)
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
- _, err = session.Where("id = ?", relation2.Id).Cols(forceColumns...).Update(session, &relation2)
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
-
- m := new(model.PublicPlatoonUserRelation)
- for i := 1; i < 9; i++ {
- str := fmt.Sprintf("father_uid%d", i)
- _, err = session.Table(m).Where(fmt.Sprintf("%s = ?", str), uid1).Cols(str).Update(map[string]interface{}{str: -66})
- _, err = session.Table(m).Where(fmt.Sprintf("%s = ?", str), uid2).Cols(str).Update(map[string]interface{}{str: -666})
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
- }
-
- for i := 1; i < 9; i++ {
- str := fmt.Sprintf("father_uid%d", i)
- _, err = session.Table(m).Where(fmt.Sprintf("%s = ?", str), -66).Cols(str).Update(map[string]interface{}{str: uid2})
- _, err = session.Table(m).Where(fmt.Sprintf("%s = ?", str), -666).Cols(str).Update(map[string]interface{}{str: uid1})
- if err != nil {
- return zhios_order_relate_logx.Error(err)
- }
- }
-
- if err = session.Commit(); err != nil {
- return zhios_order_relate_logx.Error(err)
- }
-
- return nil
- }
-
- func GetSonUserDailyActivity(engine *xorm.Engine, fatherUID int64, startDate, endDate string) (activityUserCount int64, activityCount int64, sons []md.SonUserDailyActivityAnalysisNode, err error) {
- relationDb := implement.NewUserRelateDb(engine)
- sonRelations, err := relationDb.FindUserRelateByParentUid(fatherUID, 1)
- if err != nil {
- return 0, 0, nil, err
- }
- if sonRelations == nil {
- return 0, 0, nil, nil
- }
- userIDs := make([]int64, 0)
- for _, relation := range *sonRelations {
- userIDs = append(userIDs, relation.Uid)
- }
-
- activityDb := implement.NewEggEnergyUserActivityDb(engine)
- // 先判断这些用户中是否有活跃用户,如果有再逐个统计
- activityCount, err = activityDb.UserDailyActivityAnalysisCountByUidAndTime(startDate, endDate, userIDs...)
- if err != nil {
- return 0, 0, nil, zhios_order_relate_logx.Error(err)
- }
- if activityCount == 0 {
- return 0, 0, nil, nil
- }
- sons = make([]md.SonUserDailyActivityAnalysisNode, 0)
- for _, userID := range userIDs {
- count, err := activityDb.UserDailyActivityAnalysisCountByUidAndTime(startDate, endDate, userID)
- if err != nil {
- return 0, 0, nil, err
- }
- if count > 0 {
- sons = append(sons, md.SonUserDailyActivityAnalysisNode{
- Uid: userID,
- Nickname: "",
- Phone: "",
- ActivityDayNums: count,
- })
- activityUserCount++
- }
- }
- return activityUserCount, activityCount, sons, nil
- }
|