劲创营---任务项目
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

181 rinda
4.3 KiB

  1. package svc
  2. import (
  3. "applet/app/comm/db"
  4. "applet/app/comm/db/model"
  5. "applet/app/comm/utils/logx"
  6. "fmt"
  7. "strings"
  8. "time"
  9. "xorm.io/xorm"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // RoutineInsertUserRelate is 协程 当关联上级用户时,需要查询当前用户的所有关联下级,并新增关联上级与当前用户下级关系
  13. func RoutineInsertUserRelate(c *gin.Context, puid, uid, addlv int) {
  14. defer Rev()
  15. urs, err := db.UserRelatesByPuid(db.DBs[c.GetString("mid")], uid, 0, 0)
  16. if err != nil {
  17. logx.Warn(err)
  18. }
  19. // fmt.Println(*urs)
  20. for _, item := range *urs {
  21. _, err := db.UserRelateInsert(db.DBs[c.GetString("mid")],
  22. &model.UserRelate{
  23. ParentUid: puid,
  24. Uid: item.Uid,
  25. Level: item.Level + addlv,
  26. InviteTime: time.Now(),
  27. })
  28. if err != nil {
  29. continue
  30. }
  31. logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v) ,lv:%v", puid, item.Uid, item.Level+addlv))
  32. }
  33. }
  34. func RoutineInsertUserRelateSess(sess *xorm.Session, puid, uid, addlv int) {
  35. defer Rev()
  36. urs, err := db.UserRelatesByPuidSess(sess, uid, 0, 0)
  37. if err != nil {
  38. logx.Warn(err)
  39. }
  40. // fmt.Println(*urs)
  41. for _, item := range *urs {
  42. _, err := db.UserRelateInsertSess(sess,
  43. &model.UserRelate{
  44. ParentUid: puid,
  45. Uid: item.Uid,
  46. Level: item.Level + addlv,
  47. InviteTime: time.Now(),
  48. })
  49. if err != nil {
  50. continue
  51. }
  52. logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v) ,lv:%v", puid, item.Uid, item.Level+addlv))
  53. }
  54. }
  55. //RoutineMultiRelate is 多级关联
  56. func RoutineMultiRelate(c *gin.Context, pid int, uid int, lv int) {
  57. defer Rev()
  58. for {
  59. if pid == 0 {
  60. break
  61. }
  62. m, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], pid)
  63. if err != nil || m == nil {
  64. logx.Warn(err)
  65. break
  66. }
  67. if m.ParentUid == 0 {
  68. break
  69. }
  70. lv++
  71. ur := new(model.UserRelate)
  72. ur.ParentUid = m.ParentUid
  73. ur.Uid = uid
  74. ur.Level = lv
  75. ur.InviteTime = time.Now()
  76. _, err = db.UserRelateInsert(db.DBs[c.GetString("mid")], ur)
  77. if err != nil {
  78. logx.Warn(err)
  79. break
  80. }
  81. // 还要关联当前的用户的所有下级,注意关联等级
  82. go RoutineInsertUserRelate(c, m.ParentUid, uid, lv)
  83. // 下级关联上上级
  84. // 继续查询
  85. logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
  86. logx.Info("继续查询")
  87. pid = m.ParentUid
  88. }
  89. }
  90. func RoutineMultiRelateSess(sess *xorm.Session, pid int, uid int, lv int) {
  91. defer Rev()
  92. for {
  93. if pid == 0 {
  94. break
  95. }
  96. m, err := db.UserProfileFindByIDSess(sess, pid)
  97. if err != nil || m == nil {
  98. logx.Warn(err)
  99. break
  100. }
  101. if m.ParentUid == 0 {
  102. break
  103. }
  104. lv++
  105. ur := new(model.UserRelate)
  106. ur.ParentUid = m.ParentUid
  107. ur.Uid = uid
  108. ur.Level = lv
  109. ur.InviteTime = time.Now()
  110. _, err = db.UserRelateInsertSess(sess, ur)
  111. if err != nil {
  112. logx.Warn(err)
  113. break
  114. }
  115. // 还要关联当前的用户的所有下级,注意关联等级
  116. RoutineInsertUserRelateSess(sess, m.ParentUid, uid, lv)
  117. // 下级关联上上级
  118. // 继续查询
  119. logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
  120. logx.Info("继续查询")
  121. pid = m.ParentUid
  122. }
  123. }
  124. //RoutineMultiRelate is 多级关联
  125. func RoutineMultiRelate1(c *gin.Context, pid int, uid int, lv int) {
  126. defer Rev()
  127. for {
  128. if pid == 0 {
  129. break
  130. }
  131. m, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], pid)
  132. if err != nil {
  133. logx.Warn(err)
  134. break
  135. }
  136. if m != nil {
  137. if m.ParentUid == 0 {
  138. break
  139. }
  140. lv++
  141. ur := new(model.UserRelate)
  142. ur.ParentUid = m.ParentUid
  143. ur.Uid = uid
  144. ur.Level = lv
  145. ur.InviteTime = time.Now()
  146. _, err := db.UserRelateInsert(db.DBs[c.GetString("mid")], ur)
  147. if err != nil && strings.Contains(err.Error(), "Duplicate") == false {
  148. logx.Warn(err)
  149. break
  150. }
  151. if err != nil && strings.Contains(err.Error(), "Duplicate") {
  152. tmp, _, _ := db.UserRelateByUIDAndPUID(db.DBs[c.GetString("mid")], ur.Uid, ur.ParentUid)
  153. if tmp != nil && tmp.Level != ur.Level {
  154. db.UserRelateUpdate(db.DBs[c.GetString("mid")], ur)
  155. }
  156. }
  157. // 还要关联当前的用户的所有下级,注意关联等级
  158. //go RoutineInsertUserRelate(c, m.ParentUid, uid, lv)
  159. // 下级关联上上级
  160. // 继续查询
  161. logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv))
  162. logx.Info("继续查询")
  163. pid = m.ParentUid
  164. }
  165. if m == nil {
  166. logx.Info("查询结束,退出")
  167. break
  168. }
  169. }
  170. }