userBehavior.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771
  1. package v1
  2. import (
  3. "context"
  4. "designs/app/common/request"
  5. "designs/app/common/response"
  6. "designs/global"
  7. "designs/service"
  8. "designs/utils"
  9. "encoding/json"
  10. "fmt"
  11. "github.com/gin-gonic/gin"
  12. "go.mongodb.org/mongo-driver/v2/bson"
  13. "go.mongodb.org/mongo-driver/v2/mongo/options"
  14. "math"
  15. "time"
  16. )
  17. // 总览
  18. func Summary(c *gin.Context) {
  19. form := request.Check(c, &struct {
  20. Gid string `form:"gid" json:"gid" binding:"required"`
  21. Pf string `form:"pf" json:"pf" binding:"required"`
  22. }{})
  23. //查询用户总数
  24. var userCount int64
  25. err := global.App.DB.Table("user").
  26. Where("gid", form.Gid).
  27. Where("pf", form.Pf).
  28. Count(&userCount).Error
  29. if err != nil {
  30. response.Fail(c, 1001, err.Error())
  31. return
  32. }
  33. //查询近七日活跃总数
  34. now := time.Now()
  35. sevenDayAgo := now.AddDate(0, 0, -7)
  36. thirtyDayAgo := now.AddDate(0, 0, -30)
  37. var activeUserCount7 int64
  38. err = global.App.DB.Table("user_login").
  39. Where("gid", form.Gid).
  40. Where("pf", form.Pf).
  41. Where("loginTime", ">=", sevenDayAgo).
  42. Where("loginTime", "<=", now).
  43. Distinct("userId").
  44. Count(&activeUserCount7).Error
  45. if err != nil {
  46. response.Fail(c, 1001, err.Error())
  47. return
  48. }
  49. var activeUserCount30 int64
  50. err = global.App.DB.Table("user_login").
  51. Where("gid", form.Gid).
  52. Where("pf", form.Pf).
  53. Where("loginTime", ">=", thirtyDayAgo).
  54. Where("loginTime", "<=", now).
  55. Distinct("userId").
  56. Count(&activeUserCount30).Error
  57. if err != nil {
  58. response.Fail(c, 1001, err.Error())
  59. return
  60. }
  61. //查询 近7日单设备日均使用时长
  62. res, err := service.UserOnlineSummary(form.Gid, form.Pf, "", sevenDayAgo.Format("2006-01-02 15:04:05"), now.Format("2006-01-02 15:04:05"))
  63. if err != nil {
  64. response.Fail(c, 1001, err.Error())
  65. return
  66. }
  67. var avgTime int
  68. for _, v := range res {
  69. avgTime = avgTime + int(v)
  70. }
  71. var avgTimeString string
  72. if avgTime != 0 {
  73. avgTime = int(math.Round(float64(avgTime / len(res))))
  74. avgTimeString = utils.TimeStampToMDS(avgTime)
  75. } else {
  76. avgTimeString = "00.00"
  77. }
  78. response.Success(c, gin.H{
  79. "data": map[string]interface{}{
  80. "userCount": userCount,
  81. "activeUserCount7": activeUserCount7,
  82. "activeUserCount30": activeUserCount30,
  83. "activeUserCount7Time": avgTimeString,
  84. },
  85. })
  86. }
  87. // 时段分布
  88. func TimeDistributionData(c *gin.Context) {
  89. form := request.Check(c, &struct {
  90. Gid string `form:"gid" json:"gid" binding:"required"`
  91. Pf string `form:"pf" json:"pf" binding:"required"`
  92. Type int `form:"type" json:"type" binding:"required"`
  93. }{})
  94. var data interface{}
  95. if form.Type == 1 {
  96. //新增用户
  97. todayTimeDistribution, yesterdayTimeDistribution, yesterdayCount, todayCount, yesterdayThisTimeCount, err := service.GetRegisterTimeDistribution(form.Pf, form.Gid)
  98. if err != nil {
  99. response.Fail(c, 1001, err.Error())
  100. return
  101. }
  102. data = map[string]interface{}{
  103. "today": todayTimeDistribution,
  104. "yesterday": yesterdayTimeDistribution,
  105. "yesterdayCount": yesterdayCount,
  106. "yesterdayThisTimeCount": yesterdayThisTimeCount,
  107. "todayCount": todayCount,
  108. }
  109. } else if form.Type == 2 {
  110. //活跃设备
  111. todayTimeDistribution, yesterdayTimeDistribution, yesterdayCount, todayCount, yesterdayThisTimeCount, err := service.GetActiveTimeDistribution(form.Pf, form.Gid)
  112. if err != nil {
  113. response.Fail(c, 1001, err.Error())
  114. return
  115. }
  116. data = map[string]interface{}{
  117. "today": todayTimeDistribution,
  118. "yesterday": yesterdayTimeDistribution,
  119. "yesterdayCount": yesterdayCount,
  120. "yesterdayThisTimeCount": yesterdayThisTimeCount,
  121. "todayCount": todayCount,
  122. }
  123. } else if form.Type == 3 {
  124. //启动次数
  125. todayTimeDistribution, yesterdayTimeDistribution, yesterdayCount, todayCount, yesterdayThisTimeCount, err := service.GetActionDistribution(form.Pf, form.Gid)
  126. if err != nil {
  127. response.Fail(c, 1001, err.Error())
  128. return
  129. }
  130. data = map[string]interface{}{
  131. "today": todayTimeDistribution,
  132. "yesterday": yesterdayTimeDistribution,
  133. "yesterdayCount": yesterdayCount,
  134. "yesterdayThisTimeCount": yesterdayThisTimeCount,
  135. "todayCount": todayCount,
  136. }
  137. } else {
  138. response.Fail(c, 1003, "type错误")
  139. return
  140. }
  141. response.Success(c, gin.H{
  142. "data": data,
  143. })
  144. }
  145. // 30日趋势
  146. func MouthDistributionData(c *gin.Context) {
  147. form := request.Check(c, &struct {
  148. Gid string `form:"gid" json:"gid" binding:"required"`
  149. Pf string `form:"pf" json:"pf" binding:"required"`
  150. Type int `form:"type" json:"type" binding:"required"`
  151. }{})
  152. now := time.Now()
  153. EndTime := now.AddDate(0, 0, 1).Format("2006-01-02")
  154. StartTime := now.AddDate(0, 0, -29).Format("2006-01-02")
  155. data := make(map[string]interface{})
  156. if form.Type == 1 {
  157. //查询新增设备趋势图
  158. TimeDistribution, count, avg, err := service.GetRegisterDayDistribution(form.Pf, form.Gid, StartTime, EndTime)
  159. if err != nil {
  160. response.Fail(c, 1001, err.Error())
  161. return
  162. }
  163. data["timeDistribution"] = TimeDistribution
  164. data["count"] = count
  165. data["avg"] = avg
  166. } else if form.Type == 2 {
  167. //查询活跃用户趋势图
  168. TimeDistribution, count, avg, err := service.GetActiveDayDistribution(form.Pf, form.Gid, StartTime, EndTime)
  169. if err != nil {
  170. response.Fail(c, 1001, err.Error())
  171. return
  172. }
  173. data["timeDistribution"] = TimeDistribution
  174. data["count"] = count
  175. data["avg"] = avg
  176. } else if form.Type == 3 {
  177. //查询启动次数
  178. TimeDistribution, count, avg, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, StartTime, EndTime)
  179. if err != nil {
  180. response.Fail(c, 1001, err.Error())
  181. return
  182. }
  183. data["timeDistribution"] = TimeDistribution
  184. data["count"] = count
  185. data["avg"] = avg
  186. } else if form.Type == 4 {
  187. //查询单用户使用时长
  188. TimeDistribution, count, avg, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, StartTime, EndTime)
  189. if err != nil {
  190. response.Fail(c, 1001, err.Error())
  191. return
  192. }
  193. data["timeDistribution"] = TimeDistribution
  194. data["count"] = count
  195. data["avg"] = avg
  196. } else if form.Type == 5 {
  197. //查询用户留存率
  198. //todo
  199. } else {
  200. response.Fail(c, 1003, "type错误")
  201. return
  202. }
  203. response.Success(c, gin.H{
  204. "data": data,
  205. })
  206. }
  207. // 用户趋势 总览
  208. func UserTrendsOverview(c *gin.Context) {
  209. form := request.Check(c, &struct {
  210. Gid string `form:"gid" json:"gid" binding:"required"`
  211. Pf string `form:"pf" json:"pf" binding:"required"`
  212. StartTime string `form:"startTime" json:"startTime" binding:"required"`
  213. EndTime string `form:"endTime" json:"endTime" binding:"required"`
  214. }{})
  215. //查询用户新增
  216. var registerCount int64
  217. err := global.App.DB.Table("user").
  218. Where("gid", form.Gid).
  219. Where("pf", form.Pf).
  220. Where("createdAt", ">=", form.StartTime).
  221. Where("createdAt", "<=", form.EndTime).
  222. Count(&registerCount).Error
  223. if err != nil {
  224. response.Fail(c, 1001, err.Error())
  225. return
  226. }
  227. //查询活跃设备
  228. var activeCount int64
  229. err = global.App.DB.Table("user_online").
  230. Where("gid", form.Gid).
  231. Where("pf", form.Pf).
  232. Where("logTime", ">=", form.StartTime).
  233. Where("logTime", "<=", form.EndTime).
  234. Distinct("userId").Count(&activeCount).Error
  235. if err != nil {
  236. response.Fail(c, 1001, err.Error())
  237. return
  238. }
  239. //查询启动次数
  240. var loginCount int64
  241. err = global.App.DB.Table("user_login").
  242. Where("gid", form.Gid).
  243. Where("pf", form.Pf).
  244. Where("loginTime", ">=", form.StartTime).
  245. Where("loginTime", "<=", form.EndTime).
  246. Count(&loginCount).Error
  247. if err != nil {
  248. response.Fail(c, 1001, err.Error())
  249. return
  250. }
  251. //查询平均启动时长
  252. //查询活跃用户月趋势图
  253. _, _, activeTime, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  254. if err != nil {
  255. response.Fail(c, 1001, err.Error())
  256. return
  257. }
  258. //查询 DAU/MAU
  259. //todo 查询方式需要更新
  260. dauMau := 0.3
  261. response.Success(c, gin.H{
  262. "data": map[string]interface{}{
  263. "registerCount": registerCount,
  264. "activeCount": activeCount,
  265. "loginCount": loginCount,
  266. "activeTime": activeTime,
  267. "dauMau": dauMau,
  268. },
  269. })
  270. }
  271. // 数据趋势
  272. func DataTrades(c *gin.Context) {
  273. form := request.Check(c, &struct {
  274. Gid string `form:"gid" json:"gid" binding:"required"`
  275. Pf string `form:"pf" json:"pf" binding:"required"`
  276. StartTime string `form:"startTime" json:"startTime" binding:"required"`
  277. EndTime string `form:"endTime" json:"endTime" binding:"required"`
  278. Type int `form:"type" json:"type" binding:"required"`
  279. }{})
  280. data := make(map[string]interface{})
  281. form.EndTime = form.EndTime + " 23:59:59"
  282. if form.Type == 1 {
  283. //查询新增设备趋势图
  284. TimeDistribution, count, avg, err := service.GetRegisterDayDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  285. if err != nil {
  286. response.Fail(c, 1001, err.Error())
  287. return
  288. }
  289. data["imeDistribution"] = TimeDistribution
  290. data["count"] = count
  291. data["avg"] = avg
  292. } else if form.Type == 2 {
  293. //查询活跃用户趋势图
  294. TimeDistribution, count, avg, err := service.GetActiveDayDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  295. if err != nil {
  296. response.Fail(c, 1001, err.Error())
  297. return
  298. }
  299. data["imeDistribution"] = TimeDistribution
  300. data["count"] = count
  301. data["avg"] = avg
  302. } else if form.Type == 3 {
  303. //查询活跃用户周趋势图
  304. TimeDistribution, count, avg, err := service.GetActiveWeekDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  305. if err != nil {
  306. response.Fail(c, 1001, err.Error())
  307. return
  308. }
  309. data["imeDistribution"] = TimeDistribution
  310. data["count"] = count
  311. data["avg"] = avg
  312. } else if form.Type == 4 {
  313. //查询活跃用户月趋势图
  314. TimeDistribution, count, avg, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  315. if err != nil {
  316. response.Fail(c, 1001, err.Error())
  317. return
  318. }
  319. data["imeDistribution"] = TimeDistribution
  320. data["count"] = count
  321. data["avg"] = avg
  322. } else if form.Type == 5 {
  323. //查询启动次数
  324. TimeDistribution, count, avg, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  325. if err != nil {
  326. response.Fail(c, 1001, err.Error())
  327. return
  328. }
  329. data["imeDistribution"] = TimeDistribution
  330. data["count"] = count
  331. data["avg"] = avg
  332. } else if form.Type == 6 {
  333. //查询平均启动时间
  334. TimeDistribution, count, avg, err := service.UserOnlineSummaryByDay(form.Gid, form.Pf, form.StartTime, form.EndTime)
  335. if err != nil {
  336. response.Fail(c, 1001, err.Error())
  337. return
  338. }
  339. data["imeDistribution"] = TimeDistribution
  340. data["count"] = count
  341. data["avg"] = avg
  342. } else {
  343. response.Fail(c, 1003, "type 错误")
  344. return
  345. }
  346. response.Success(c, gin.H{
  347. "data": data,
  348. })
  349. }
  350. // 数据趋势的整合
  351. func DataTradesDetail(c *gin.Context) {
  352. form := request.Check(c, &struct {
  353. Gid string `form:"gid" json:"gid" binding:"required"`
  354. Pf string `form:"pf" json:"pf" binding:"required"`
  355. StartTime string `form:"startTime" json:"startTime" binding:"required"`
  356. EndTime string `form:"endTime" json:"endTime" binding:"required"`
  357. }{})
  358. form.EndTime = form.EndTime + " 23:59:59"
  359. type dayData struct {
  360. NewUser int `json:"newUser"`
  361. ActiveUser int `json:"activeUser"`
  362. ActiveUserWeek int `json:"activeUserWeek"`
  363. ActiveUserMouth int `json:"activeUserMouth"`
  364. ActiveStart int `json:"activeStart"`
  365. AvgTime int `json:"avgTime"`
  366. }
  367. var data = make(map[string]dayData)
  368. //查询新增设备趋势图
  369. NewUser, _, _, err := service.GetRegisterDayDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  370. if err != nil {
  371. response.Fail(c, 1001, err.Error())
  372. return
  373. }
  374. //查询活跃用户趋势图
  375. ActiveUser, _, _, err := service.GetActiveDayDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  376. if err != nil {
  377. response.Fail(c, 1001, err.Error())
  378. return
  379. }
  380. //查询活跃用户周趋势图
  381. ActiveUserWeek, _, _, err := service.GetActiveWeekDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  382. if err != nil {
  383. response.Fail(c, 1001, err.Error())
  384. return
  385. }
  386. //查询活跃用户月趋势图
  387. ActiveUserMouth, _, _, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  388. if err != nil {
  389. response.Fail(c, 1001, err.Error())
  390. return
  391. }
  392. //查询启动次数
  393. ActiveStart, _, _, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
  394. if err != nil {
  395. response.Fail(c, 1001, err.Error())
  396. return
  397. }
  398. //查询平均启动时间
  399. AvgTime, _, _, err := service.UserOnlineSummaryByDay(form.Gid, form.Pf, form.StartTime, form.EndTime)
  400. if err != nil {
  401. response.Fail(c, 1001, err.Error())
  402. return
  403. }
  404. for k := range AvgTime {
  405. data[k] = dayData{
  406. NewUser: NewUser[k],
  407. ActiveUser: ActiveUser[k],
  408. ActiveUserWeek: ActiveUserWeek[k],
  409. ActiveUserMouth: ActiveUserMouth[k],
  410. ActiveStart: ActiveStart[k],
  411. AvgTime: AvgTime[k],
  412. }
  413. }
  414. response.Success(c, gin.H{
  415. "data": data,
  416. })
  417. }
  418. func RemainDataBydDay(c *gin.Context) {
  419. form := request.Check(c, &struct {
  420. Gid string `form:"gid" json:"gid" binding:"required"`
  421. Pf string `form:"pf" json:"pf" binding:"required"`
  422. StartTime string `form:"startTime" json:"startTime" binding:"required"`
  423. EndTime string `form:"endTime" json:"endTime" binding:"required"`
  424. Type int `form:"type" json:"type" binding:"required"`
  425. }{})
  426. data, err := service.RemainDataBydDay(form.Type, form.Pf, form.Gid, form.StartTime, form.EndTime)
  427. if err != nil {
  428. response.Fail(c, 1001, err.Error())
  429. return
  430. }
  431. response.Success(c, gin.H{
  432. "data": data,
  433. })
  434. }
  435. type AdData struct {
  436. Pid string `json:"pid"`
  437. Aid string `json:"aid"`
  438. Cid string `json:"cid"`
  439. ReportUrl string `json:"reportUrl"`
  440. Reported bool `json:"reported"`
  441. Duration int64 `json:"duration"`
  442. AdReqCount uint8 `json:"adReqCount"`
  443. AdEposedcount uint8 `json:"adEposedcount"`
  444. CreateTime int `json:"createTime"`
  445. }
  446. type UserBehavior struct {
  447. Id string `bson:"_id,omitempty"`
  448. Gid string `bson:"gid"`
  449. Pf string `bson:"pf"`
  450. OpenId string `bson:"openId"`
  451. AdData interface{} `bson:"adData"`
  452. AdFromCount int `bson:"adFromCount"`
  453. TotalDuration int `bson:"totalDuration"`
  454. TotalAdReqCount int `bson:"totalAdReqCount"`
  455. TotalAdEposedCount int `bson:"totalAdEposedCount"`
  456. }
  457. type BehaviorFilter struct {
  458. Gt int `json:"gt"`
  459. Gte int `json:"gte"`
  460. Lte int `json:"lte"`
  461. Lt int `json:"lt"`
  462. Ne int `json:"ne"`
  463. //$gt 大于
  464. //$gte:大于或等于
  465. //$lt:小于
  466. //$lte:小于或等于
  467. //$ne:不等于
  468. }
  469. func BehaviorList(c *gin.Context) {
  470. form := request.Check(c, &struct {
  471. Gid string `form:"gid" json:"gid" binding:"required"`
  472. Pf string `form:"pf" json:"pf" binding:"required"`
  473. OpenId string `form:"search" json:"search" binding:""`
  474. Offset int `form:"offset" json:"offset" binding:""`
  475. Limit int `form:"limit" json:"limit" binding:""`
  476. Reported string `form:"reported" json:"reported" binding:""` //all true false
  477. Pid string `form:"pid" json:"pid" binding:""`
  478. Aid string `form:"aid" json:"aid" binding:""`
  479. Cid string `form:"cid" json:"cid" binding:""`
  480. Duration interface{} `form:"duration" json:"duration" binding:""`
  481. AdReqCount interface{} `form:"adReqCount" json:"adReqCount" binding:""`
  482. AdEposedcount interface{} `form:"adEposedcount" json:"adEposedcount" binding:""`
  483. AdFromCount interface{} `form:"adFromCount" json:"adFromCount" binding:""`
  484. TotalDuration interface{} `form:"totalDuration" json:"totalDuration" binding:""`
  485. TotalAdReqCount interface{} `form:"totalAdReqCount" json:"totalAdReqCount" binding:""`
  486. TotalAdEposedCount interface{} `form:"totalAdEposedCount" json:"totalAdEposedCount" binding:""`
  487. }{})
  488. collection := global.App.MongoDB.Database("chunhao").Collection("userBehavior")
  489. ctx := context.Background()
  490. filter := bson.M{"gid": form.Gid, "pf": form.Pf}
  491. if form.OpenId != "" {
  492. filter["openId"] = bson.M{"$regex": form.OpenId}
  493. }
  494. if form.Pid != "" {
  495. filter["adData.pid"] = form.Pid
  496. }
  497. if form.Aid != "" {
  498. filter["adData.aid"] = form.Aid
  499. }
  500. if form.Cid != "" {
  501. filter["adData.cid"] = form.Cid
  502. }
  503. if form.AdFromCount != nil {
  504. fmt.Println(form.AdFromCount)
  505. marsh, _ := json.Marshal(form.AdFromCount)
  506. var adFromCount BehaviorFilter
  507. json.Unmarshal(marsh, &adFromCount)
  508. filters := bson.M{}
  509. if adFromCount.Gt != 0 {
  510. filters["$gt"] = adFromCount.Gt
  511. }
  512. if adFromCount.Gte != 0 {
  513. filters["$gte"] = adFromCount.Gte
  514. }
  515. if adFromCount.Lte != 0 {
  516. filters["$lte"] = adFromCount.Lte
  517. }
  518. if adFromCount.Lt != 0 {
  519. filters["$lt"] = adFromCount.Lt
  520. }
  521. if adFromCount.Lt != 0 {
  522. filters["$ne"] = adFromCount.Ne
  523. }
  524. if len(filters) > 0 {
  525. filter["adFromCount"] = filters
  526. }
  527. }
  528. if form.TotalDuration != nil {
  529. marsh, _ := json.Marshal(form.TotalDuration)
  530. var totalDuration BehaviorFilter
  531. json.Unmarshal(marsh, &totalDuration)
  532. filters := bson.M{}
  533. if totalDuration.Gt != 0 {
  534. filters["$gt"] = totalDuration.Gt
  535. }
  536. if totalDuration.Gte != 0 {
  537. filters["$gte"] = totalDuration.Gte
  538. }
  539. if totalDuration.Lte != 0 {
  540. filters["$lte"] = totalDuration.Lte
  541. }
  542. if totalDuration.Lt != 0 {
  543. filters["$lt"] = totalDuration.Lt
  544. }
  545. if totalDuration.Lt != 0 {
  546. filters["$ne"] = totalDuration.Ne
  547. }
  548. if len(filters) > 0 {
  549. filter["TotalDuration"] = filters
  550. }
  551. }
  552. if form.TotalAdReqCount != nil {
  553. marsh, _ := json.Marshal(form.TotalAdReqCount)
  554. var totalAdReqCount BehaviorFilter
  555. json.Unmarshal(marsh, &totalAdReqCount)
  556. filters := bson.M{}
  557. if totalAdReqCount.Gt != 0 {
  558. filters["$gt"] = totalAdReqCount.Gt
  559. }
  560. if totalAdReqCount.Gte != 0 {
  561. filters["$gte"] = totalAdReqCount.Gte
  562. }
  563. if totalAdReqCount.Lte != 0 {
  564. filters["$lte"] = totalAdReqCount.Lte
  565. }
  566. if totalAdReqCount.Lt != 0 {
  567. filters["$lt"] = totalAdReqCount.Lt
  568. }
  569. if totalAdReqCount.Lt != 0 {
  570. filters["$ne"] = totalAdReqCount.Ne
  571. }
  572. if len(filters) > 0 {
  573. filter["totalAdReqCount"] = filters
  574. }
  575. }
  576. if form.TotalAdEposedCount != nil {
  577. marsh, _ := json.Marshal(form.TotalAdEposedCount)
  578. var totalAdEposedCount BehaviorFilter
  579. json.Unmarshal(marsh, &totalAdEposedCount)
  580. filters := bson.M{}
  581. if totalAdEposedCount.Gt != 0 {
  582. filters["$gt"] = totalAdEposedCount.Gt
  583. }
  584. if totalAdEposedCount.Gte != 0 {
  585. filters["$gte"] = totalAdEposedCount.Gte
  586. }
  587. if totalAdEposedCount.Lte != 0 {
  588. filters["$lte"] = totalAdEposedCount.Lte
  589. }
  590. if totalAdEposedCount.Lt != 0 {
  591. filters["$lt"] = totalAdEposedCount.Lt
  592. }
  593. if totalAdEposedCount.Lt != 0 {
  594. filters["$ne"] = totalAdEposedCount.Ne
  595. }
  596. if len(filters) > 0 {
  597. filter["totalAdEposedCount"] = filters
  598. }
  599. }
  600. if form.Duration != nil {
  601. marsh, _ := json.Marshal(form.Duration)
  602. var duration BehaviorFilter
  603. json.Unmarshal(marsh, &duration)
  604. filters := bson.M{}
  605. if duration.Gt != 0 {
  606. filters["$gt"] = duration.Gt
  607. }
  608. if duration.Gte != 0 {
  609. filters["$gte"] = duration.Gte
  610. }
  611. if duration.Lte != 0 {
  612. filters["$lte"] = duration.Lte
  613. }
  614. if duration.Lt != 0 {
  615. filters["$lt"] = duration.Lt
  616. }
  617. if duration.Lt != 0 {
  618. filters["$ne"] = duration.Ne
  619. }
  620. if len(filters) > 0 {
  621. filter["adData.duration"] = filters
  622. }
  623. }
  624. if form.AdReqCount != nil {
  625. marsh, _ := json.Marshal(form.AdReqCount)
  626. var adReqCount BehaviorFilter
  627. json.Unmarshal(marsh, &adReqCount)
  628. filters := bson.M{}
  629. if adReqCount.Gt != 0 {
  630. filters["$gt"] = adReqCount.Gt
  631. }
  632. if adReqCount.Gte != 0 {
  633. filters["$gte"] = adReqCount.Gte
  634. }
  635. if adReqCount.Lte != 0 {
  636. filters["$lte"] = adReqCount.Lte
  637. }
  638. if adReqCount.Lt != 0 {
  639. filters["$lt"] = adReqCount.Lt
  640. }
  641. if adReqCount.Lt != 0 {
  642. filters["$ne"] = adReqCount.Ne
  643. }
  644. if len(filters) > 0 {
  645. filter["adData.adReqCount"] = filters
  646. }
  647. }
  648. if form.AdEposedcount != nil {
  649. marsh, _ := json.Marshal(form.AdEposedcount)
  650. var adEposedcount BehaviorFilter
  651. json.Unmarshal(marsh, &adEposedcount)
  652. filters := bson.M{}
  653. if adEposedcount.Gt != 0 {
  654. filters["$gt"] = adEposedcount.Gt
  655. }
  656. if adEposedcount.Gte != 0 {
  657. filters["$gte"] = adEposedcount.Gte
  658. }
  659. if adEposedcount.Lte != 0 {
  660. filters["$lte"] = adEposedcount.Lte
  661. }
  662. if adEposedcount.Lt != 0 {
  663. filters["$lt"] = adEposedcount.Lt
  664. }
  665. if adEposedcount.Lt != 0 {
  666. filters["$ne"] = adEposedcount.Ne
  667. }
  668. if len(filters) > 0 {
  669. filter["adData.adEposedcount"] = filters
  670. }
  671. }
  672. option := options.Find()
  673. option.SetLimit(int64(form.Limit))
  674. option.SetSkip(int64(form.Offset))
  675. cur, err := collection.Find(ctx, filter, option)
  676. if err != nil {
  677. response.Fail(c, 1001, err.Error())
  678. return
  679. }
  680. count, err := collection.CountDocuments(ctx, filter)
  681. if err != nil {
  682. response.Fail(c, 1001, err.Error())
  683. return
  684. }
  685. var data []UserBehavior
  686. err = cur.All(ctx, &data)
  687. if err != nil {
  688. response.Fail(c, 1001, err.Error())
  689. return
  690. }
  691. response.Success(c, gin.H{
  692. "data": data,
  693. "count": count,
  694. })
  695. }