diff --git a/app/hdl/institutional_management/public_platoon/hdl_basic.go b/app/hdl/institutional_management/public_platoon/hdl_basic.go index a7cbadd..468ddb4 100644 --- a/app/hdl/institutional_management/public_platoon/hdl_basic.go +++ b/app/hdl/institutional_management/public_platoon/hdl_basic.go @@ -8,7 +8,9 @@ import ( "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" "code.fnuoos.com/EggPlanet/egg_models.git/src/model" "errors" + "fmt" "github.com/gin-gonic/gin" + "strconv" "time" ) @@ -549,10 +551,10 @@ func AddCommunityDividendsWithUser(c *gin.Context) { // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" -// @Param req body md.UserDailyActivityAnalysisReq true "用户 ID、查询开始时间、结束时间" +// @Param req body md.UserDailyActivityAnalysisReq true "用户 ID、查询开始时间、结束时间(查询时间不超过30天)、页数、每页大小" // @Success 200 {object} md.UserDailyActivityAnalysisResp "具体数据" // @Failure 400 {object} md.Response "具体错误" -// @Router /api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis [post] +// @Router /api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis/index [post] func UserDailyActivityAnalysis(c *gin.Context) { var req *md.UserDailyActivityAnalysisReq if err := c.ShouldBindJSON(&req); err != nil { @@ -570,14 +572,46 @@ func UserDailyActivityAnalysis(c *gin.Context) { return } - activityUserCount, activityCount, sons, err := svc.GetSonUserDailyActivity(db.Db, req.Uid, req.StartDate, req.EndDate) + total, sons, err := svc.GetSonUserDailyActivity(db.Db, req.Uid, req.StartDate, req.EndDate, req.Page, req.PageSize) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } + sql1 := "SELECT COUNT(*) AS total, uid FROM `egg_enery_user_activity` WHERE uid IN (SELECT uid FROM `user_relate` WHERE parent_uid = ?) GROUP BY uid" + res1, err := db.Db.QueryInterface(sql1, parentRelation.Uid) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + + var activityUserCount int64 + for _, value := range res1 { + tempCount, err := strconv.ParseInt(fmt.Sprintf("%v", value), 10, 64) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + } + activityUserCount += tempCount + } + + sql2 := "SELECT COUNT(1) AS total FROM `egg_enery_user_activity` WHERE uid IN (SELECT uid FROM `user_relate` WHERE parent_uid = ?)" + res2, err := db.Db.QueryInterface(sql2, parentRelation.Uid) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + return + } + + var activityCount int64 + for _, value := range res2 { + tempCount, err := strconv.ParseInt(fmt.Sprintf("%v", value), 10, 64) + if err != nil { + e.OutErr(c, e.ERR_DB_ORM, err.Error()) + } + activityCount += tempCount + } + topData := md.DailyActivityAnalysisTopData{ - TeamUserCount: parentRelation.HasSonNum, + TeamUserCount: total, TeamActivityUserCount: activityUserCount, ActivityCount: activityCount, } diff --git a/app/md/institutional_management/public_platoon/md_public_platoon.go b/app/md/institutional_management/public_platoon/md_public_platoon.go index 48cd696..41d8d45 100644 --- a/app/md/institutional_management/public_platoon/md_public_platoon.go +++ b/app/md/institutional_management/public_platoon/md_public_platoon.go @@ -105,6 +105,8 @@ type UserDailyActivityAnalysisReq struct { Uid int64 `json:"uid,required"` // 查询用户 ID StartDate string `json:"start_date,required" example:"开始日期"` EndDate string `json:"end_date,required" example:"结束日期"` + Page int `json:"page,required"` // 页数 + PageSize int `json:"page_size,required"` // 每页大小 } type SonUserDailyActivityAnalysisNode struct { @@ -115,7 +117,7 @@ type SonUserDailyActivityAnalysisNode struct { } type DailyActivityAnalysisTopData struct { - TeamUserCount int `json:"team_user_count"` // 团队人数 + TeamUserCount int64 `json:"team_user_count"` // 团队人数 TeamActivityUserCount int64 `json:"team_activity_user_count"` // 子节点活跃人数 ActivityCount int64 `json:"activity_count"` // 子节点活跃天数 } diff --git a/app/router/router.go b/app/router/router.go index 125ec70..682aab2 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -78,7 +78,7 @@ func rInstitutionalManagement(r *gin.RouterGroup) { //制度管理 } rUserDailyActivityAnalysis := rPublicPlatoon.Group("/userDailyActivityAnalysis") { - rUserDailyActivityAnalysis.POST("", public_platoon.UserDailyActivityAnalysis) + rUserDailyActivityAnalysis.POST("/index", public_platoon.UserDailyActivityAnalysis) } } diff --git a/app/svc/public_platoon/svc_relation_ship_map.go b/app/svc/public_platoon/svc_relation_ship_map.go index 99c4987..a457b77 100644 --- a/app/svc/public_platoon/svc_relation_ship_map.go +++ b/app/svc/public_platoon/svc_relation_ship_map.go @@ -2,10 +2,12 @@ package svc import ( md "applet/app/md/institutional_management/public_platoon" + "applet/app/utils" "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" + "strconv" "xorm.io/xorm" ) @@ -146,44 +148,48 @@ func ExchangeUserPosition(engine *xorm.Engine, relation1, relation2 *model.Publi return nil } -func GetSonUserDailyActivity(engine *xorm.Engine, fatherUID int64, startDate, endDate string) (activityUserCount int64, activityCount int64, sons []md.SonUserDailyActivityAnalysisNode, err error) { +func GetSonUserDailyActivity(engine *xorm.Engine, fatherUID int64, startDate, endDate string, page, pageSize int) (total int64, sons []md.SonUserDailyActivityAnalysisNode, err error) { relationDb := implement.NewUserRelateDb(engine) - sonRelations, err := relationDb.FindUserRelateByParentUid(fatherUID, 1) + sonRelations, total, err := relationDb.PageFindUserRelateByParentUid(fatherUID, page, pageSize) if err != nil { - return 0, 0, nil, err + return 0, nil, zhios_order_relate_logx.Error(err) } if sonRelations == nil { - return 0, 0, nil, nil + return 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...) + userDb := implement.NewUserDb(engine) + users, err := userDb.UserFindByParams(map[string]interface{}{ + "key": "id", + "value": userIDs, + }) if err != nil { - return 0, 0, nil, zhios_order_relate_logx.Error(err) + return 0, nil, zhios_order_relate_logx.Error(err) } - if activityCount == 0 { - return 0, 0, nil, nil + + sql1 := "SELECT COUNT(*) AS total, uid FROM `egg_enery_user_activity` WHERE uid IN ? AND date > ? AND date < ? GROUP BY uid" + res, err := engine.QueryInterface(sql1, utils.AnyToString(userIDs), startDate, endDate) + if err != nil { + return 0, nil, zhios_order_relate_logx.Error(err) } + sons = make([]md.SonUserDailyActivityAnalysisNode, 0) - for _, userID := range userIDs { - count, err := activityDb.UserDailyActivityAnalysisCountByUidAndTime(startDate, endDate, userID) + for _, user := range users { + value := res[user.Id] + activityDayNums, err := strconv.ParseInt(fmt.Sprintf("%v", value), 10, 64) if err != nil { - return 0, 0, nil, err + return 0, nil, zhios_order_relate_logx.Error(err) } - if count > 0 { - sons = append(sons, md.SonUserDailyActivityAnalysisNode{ - Uid: userID, - Nickname: "", - Phone: "", - ActivityDayNums: count, - }) - activityUserCount++ - } - } - return activityUserCount, activityCount, sons, nil + sons = append(sons, md.SonUserDailyActivityAnalysisNode{ + Uid: user.Id, + Nickname: user.Nickname, + Phone: user.Phone, + ActivityDayNums: activityDayNums, + }) + } + return total, sons, nil } diff --git a/docs/docs.go b/docs/docs.go index 467174c..f508c12 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -711,7 +711,7 @@ const docTemplate = `{ } } }, - "/api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis": { + "/api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis/index": { "post": { "description": "日活分析", "consumes": [ @@ -733,7 +733,7 @@ const docTemplate = `{ "required": true }, { - "description": "用户 ID、查询开始时间、结束时间", + "description": "用户 ID、查询开始时间、结束时间(查询时间不超过30天)、页数、每页大小", "name": "req", "in": "body", "required": true, @@ -1514,6 +1514,14 @@ const docTemplate = `{ "type": "string", "example": "结束日期" }, + "page": { + "description": "页数", + "type": "integer" + }, + "page_size": { + "description": "每页大小", + "type": "integer" + }, "start_date": { "type": "string", "example": "开始日期" diff --git a/docs/swagger.json b/docs/swagger.json index 50714c4..fa4aa6d 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -704,7 +704,7 @@ } } }, - "/api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis": { + "/api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis/index": { "post": { "description": "日活分析", "consumes": [ @@ -726,7 +726,7 @@ "required": true }, { - "description": "用户 ID、查询开始时间、结束时间", + "description": "用户 ID、查询开始时间、结束时间(查询时间不超过30天)、页数、每页大小", "name": "req", "in": "body", "required": true, @@ -1507,6 +1507,14 @@ "type": "string", "example": "结束日期" }, + "page": { + "description": "页数", + "type": "integer" + }, + "page_size": { + "description": "每页大小", + "type": "integer" + }, "start_date": { "type": "string", "example": "开始日期" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index f17dca4..e148178 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -491,6 +491,12 @@ definitions: end_date: example: 结束日期 type: string + page: + description: 页数 + type: integer + page_size: + description: 每页大小 + type: integer start_date: example: 开始日期 type: string @@ -1028,7 +1034,7 @@ paths: summary: 制度中心-公排管理-公排基础设置(修改) tags: - 公排管理 - /api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis: + /api/institutionalManagement/publicPlatoon/userDailyActivityAnalysis/index: post: consumes: - application/json @@ -1039,7 +1045,7 @@ paths: name: Authorization required: true type: string - - description: 用户 ID、查询开始时间、结束时间 + - description: 用户 ID、查询开始时间、结束时间(查询时间不超过30天)、页数、每页大小 in: body name: req required: true