正在显示
12 个修改的文件
包含
101 行增加
和
40 行删除
| @@ -611,6 +611,7 @@ func (this *ChanceController) ChancePool() { | @@ -611,6 +611,7 @@ func (this *ChanceController) ChancePool() { | ||
| 611 | msg = m | 611 | msg = m |
| 612 | return | 612 | return |
| 613 | } | 613 | } |
| 614 | + request.IncludeSubDepartment = true | ||
| 614 | header := controllers.GetRequestHeader(this.Ctx) | 615 | header := controllers.GetRequestHeader(this.Ctx) |
| 615 | msg = protocol.NewReturnResponse(chance.ChancePool(header, request)) | 616 | msg = protocol.NewReturnResponse(chance.ChancePool(header, request)) |
| 616 | } | 617 | } |
| @@ -96,3 +96,24 @@ func (this *RankController) GetRankPeriods() { | @@ -96,3 +96,24 @@ func (this *RankController) GetRankPeriods() { | ||
| 96 | header := controllers.GetRequestHeader(this.Ctx) | 96 | header := controllers.GetRequestHeader(this.Ctx) |
| 97 | msg = protocol.NewReturnResponse(rank.GetRankPeriods(header, request)) | 97 | msg = protocol.NewReturnResponse(rank.GetRankPeriods(header, request)) |
| 98 | } | 98 | } |
| 99 | + | ||
| 100 | +//ComputeRankScore 手动计算排行榜 | ||
| 101 | +//@router /computeRankScore [post] | ||
| 102 | +func (this *RankController) ComputeRankScore() { | ||
| 103 | + var msg *protocol.ResponseMessage | ||
| 104 | + defer func() { | ||
| 105 | + this.Resp(msg) | ||
| 106 | + }() | ||
| 107 | + var request *protocol.ComputeRankScoreRequest | ||
| 108 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
| 109 | + log.Error(err) | ||
| 110 | + msg = protocol.BadRequestParam(1) | ||
| 111 | + return | ||
| 112 | + } | ||
| 113 | + if b, m := this.Valid(request); !b { | ||
| 114 | + msg = m | ||
| 115 | + return | ||
| 116 | + } | ||
| 117 | + header := controllers.GetRequestHeader(this.Ctx) | ||
| 118 | + msg = protocol.NewReturnResponse(rank.ComputeRankScore(header, request)) | ||
| 119 | +} |
| @@ -169,7 +169,7 @@ where company_id=%v and rank_type_id=%v and rank_range_id=%v and rank_period_id= | @@ -169,7 +169,7 @@ where company_id=%v and rank_type_id=%v and rank_range_id=%v and rank_period_id= | ||
| 169 | return | 169 | return |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | -//排行榜列表-部门 | 172 | +//排行榜列表-部门-用户所属部门排名 |
| 173 | func GetRanksByDepartmentSelf(companyId int64, rankTypeId, rankRangeId, rankPeriodId int, key string, relationId int64, v interface{}) (err error) { | 173 | func GetRanksByDepartmentSelf(companyId int64, rankTypeId, rankRangeId, rankPeriodId int, key string, relationId int64, v interface{}) (err error) { |
| 174 | sql := fmt.Sprintf(`select * from ( | 174 | sql := fmt.Sprintf(`select * from ( |
| 175 | select a.*,(@rowno:=@rowno+1) as ranking from ( | 175 | select a.*,(@rowno:=@rowno+1) as ranking from ( |
| @@ -165,10 +165,11 @@ type MySubmitChanceResponse struct { | @@ -165,10 +165,11 @@ type MySubmitChanceResponse struct { | ||
| 165 | 165 | ||
| 166 | /*ChancePool 机会池*/ | 166 | /*ChancePool 机会池*/ |
| 167 | type ChancePoolRequest struct { | 167 | type ChancePoolRequest struct { |
| 168 | - LastId int64 `json:"lastId"` | ||
| 169 | - PageSize int `json:"pageSize" valid:"Required"` | ||
| 170 | - ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会 | ||
| 171 | - DepartmentId int `json:"departmentId"` //部门编号 | 168 | + LastId int64 `json:"lastId"` |
| 169 | + PageSize int `json:"pageSize" valid:"Required"` | ||
| 170 | + ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会 | ||
| 171 | + DepartmentId int `json:"departmentId"` //部门编号 | ||
| 172 | + IncludeSubDepartment bool | ||
| 172 | } | 173 | } |
| 173 | type ChancePoolResponse struct { | 174 | type ChancePoolResponse struct { |
| 174 | List []CommonListItem `json:"list"` | 175 | List []CommonListItem `json:"list"` |
| @@ -67,3 +67,9 @@ type RankPeriod struct { | @@ -67,3 +67,9 @@ type RankPeriod struct { | ||
| 67 | BeginTime int64 `json:"beginTime"` | 67 | BeginTime int64 `json:"beginTime"` |
| 68 | EndTime int64 `json:"endTime"` | 68 | EndTime int64 `json:"endTime"` |
| 69 | } | 69 | } |
| 70 | + | ||
| 71 | +/*ComputeRankScore */ | ||
| 72 | +type ComputeRankScoreRequest struct { | ||
| 73 | +} | ||
| 74 | +type ComputeRankScoreResponse struct { | ||
| 75 | +} |
| @@ -457,6 +457,14 @@ func init() { | @@ -457,6 +457,14 @@ func init() { | ||
| 457 | 457 | ||
| 458 | beego.GlobalControllerRouter["opp/controllers/v1:RankController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:RankController"], | 458 | beego.GlobalControllerRouter["opp/controllers/v1:RankController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:RankController"], |
| 459 | beego.ControllerComments{ | 459 | beego.ControllerComments{ |
| 460 | + Method: "ComputeRankScore", | ||
| 461 | + Router: `/computeRankScore`, | ||
| 462 | + AllowHTTPMethods: []string{"post"}, | ||
| 463 | + MethodParams: param.Make(), | ||
| 464 | + Params: nil}) | ||
| 465 | + | ||
| 466 | + beego.GlobalControllerRouter["opp/controllers/v1:RankController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:RankController"], | ||
| 467 | + beego.ControllerComments{ | ||
| 460 | Method: "GetRankList", | 468 | Method: "GetRankList", |
| 461 | Router: `/getRankList`, | 469 | Router: `/getRankList`, |
| 462 | AllowHTTPMethods: []string{"post"}, | 470 | AllowHTTPMethods: []string{"post"}, |
| @@ -9,7 +9,8 @@ import ( | @@ -9,7 +9,8 @@ import ( | ||
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | //机会池 | 11 | //机会池 |
| 12 | -func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, lastId int64, pageSize int, v interface{}) (total int, err error) { | 12 | +//@isIncludeSubDeps 是否包含子部门编号 |
| 13 | +func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, isIncludeSubDeps bool, lastId int64, pageSize int, v interface{}) (total int, err error) { | ||
| 13 | var ( | 14 | var ( |
| 14 | check int | 15 | check int |
| 15 | checkMap map[int]int | 16 | checkMap map[int]int |
| @@ -46,7 +47,7 @@ func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, lastId in | @@ -46,7 +47,7 @@ func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, lastId in | ||
| 46 | lastId = chance.ApproveTime.Unix() | 47 | lastId = chance.ApproveTime.Unix() |
| 47 | } | 48 | } |
| 48 | if departmentId > 0 { | 49 | if departmentId > 0 { |
| 49 | - dIds, _ = GetDepartmentIds(cid, departmentId) | 50 | + dIds, _ = GetDepartmentIds(cid, departmentId, isIncludeSubDeps) |
| 50 | } | 51 | } |
| 51 | log.Debug(fmt.Sprintf("user:%v check:%v is_amdin:%v", uid, check, user.Id == uid)) | 52 | log.Debug(fmt.Sprintf("user:%v check:%v is_amdin:%v", uid, check, user.Id == uid)) |
| 52 | switch check { | 53 | switch check { |
| @@ -102,7 +102,14 @@ func ChanceApprovingStatistic(header *protocol.RequestHeader, departmentIds []in | @@ -102,7 +102,14 @@ func ChanceApprovingStatistic(header *protocol.RequestHeader, departmentIds []in | ||
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | //获取部门以及子部门编号 | 104 | //获取部门以及子部门编号 |
| 105 | -func GetDepartmentIds(companyId int64, dId int) (departmentIds []int, err error) { | 105 | +//@isIncludeSubDeps 是否包含子部门 |
| 106 | +func GetDepartmentIds(companyId int64, dId int, isIncludeSubDeps bool) (departmentIds []int, err error) { | ||
| 107 | + if dId == 0 { | ||
| 108 | + return []int{}, nil | ||
| 109 | + } | ||
| 110 | + if !isIncludeSubDeps { | ||
| 111 | + return []int{dId}, nil | ||
| 112 | + } | ||
| 106 | if d, e := models.GetDepartmentById(dId); e != nil { | 113 | if d, e := models.GetDepartmentById(dId); e != nil { |
| 107 | log.Error(err) | 114 | log.Error(err) |
| 108 | err = e | 115 | err = e |
| @@ -1405,7 +1405,7 @@ func ChanceStatistics(header *protocol.RequestHeader, request *protocol.ChanceSt | @@ -1405,7 +1405,7 @@ func ChanceStatistics(header *protocol.RequestHeader, request *protocol.ChanceSt | ||
| 1405 | rsp = &protocol.ChanceStatisticsResponse{} | 1405 | rsp = &protocol.ChanceStatisticsResponse{} |
| 1406 | for i := range chanceType { | 1406 | for i := range chanceType { |
| 1407 | item := chanceType[i] | 1407 | item := chanceType[i] |
| 1408 | - if total, err = agg.GetChancePool(header.UserId, header.CompanyId, item.Id, 0, 0, 0, nil); err != nil { | 1408 | + if total, err = agg.GetChancePool(header.UserId, header.CompanyId, item.Id, 0, false, 0, 0, nil); err != nil { |
| 1409 | log.Error(err) | 1409 | log.Error(err) |
| 1410 | return | 1410 | return |
| 1411 | } | 1411 | } |
| @@ -1493,7 +1493,7 @@ func ChancePool(header *protocol.RequestHeader, request *protocol.ChancePoolRequ | @@ -1493,7 +1493,7 @@ func ChancePool(header *protocol.RequestHeader, request *protocol.ChancePoolRequ | ||
| 1493 | provider *protocol.BaseUserInfo | 1493 | provider *protocol.BaseUserInfo |
| 1494 | flag int | 1494 | flag int |
| 1495 | ) | 1495 | ) |
| 1496 | - if total, err = agg.GetChancePool(header.UserId, header.CompanyId, request.ChanceTypeId, request.DepartmentId, request.LastId, request.PageSize, &myChances); err != nil { | 1496 | + if total, err = agg.GetChancePool(header.UserId, header.CompanyId, request.ChanceTypeId, request.DepartmentId, request.IncludeSubDepartment, request.LastId, request.PageSize, &myChances); err != nil { |
| 1497 | if err == orm.ErrNoRows { | 1497 | if err == orm.ErrNoRows { |
| 1498 | err = nil | 1498 | err = nil |
| 1499 | return | 1499 | return |
| @@ -54,7 +54,7 @@ func ComputeRankScore() error { | @@ -54,7 +54,7 @@ func ComputeRankScore() error { | ||
| 54 | log.Warn("ComputeRankScore is working", ComputeRankScoreFlag) | 54 | log.Warn("ComputeRankScore is working", ComputeRankScoreFlag) |
| 55 | return fmt.Errorf("ComputeRankScore is working. try later") | 55 | return fmt.Errorf("ComputeRankScore is working. try later") |
| 56 | } else { | 56 | } else { |
| 57 | - defer utils.Profiling("ComputeRankScore 执行耗时")() | 57 | + defer utils.Profiling("结束作业:排行榜分数计算 执行耗时")() |
| 58 | } | 58 | } |
| 59 | defer func() { | 59 | defer func() { |
| 60 | atomic.CompareAndSwapInt32(&ComputeRankScoreFlag, 1, 0) | 60 | atomic.CompareAndSwapInt32(&ComputeRankScoreFlag, 1, 0) |
| @@ -103,7 +103,7 @@ func Statistics(header *protocol.RequestHeader, request *protocol.DepartmentStat | @@ -103,7 +103,7 @@ func Statistics(header *protocol.RequestHeader, request *protocol.DepartmentStat | ||
| 103 | rsp := &protocol.DepartmentStatistics{} | 103 | rsp := &protocol.DepartmentStatistics{} |
| 104 | dIds := departmentsResponse.GetChildDepartmentIds(d, true) | 104 | dIds := departmentsResponse.GetChildDepartmentIds(d, true) |
| 105 | rsp.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds) | 105 | rsp.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds) |
| 106 | - rsp.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, d.DepartmentId, 0, 0, nil) | 106 | + rsp.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, d.DepartmentId, true, 0, 0, nil) |
| 107 | rsp.ACTotal = rsp.AchievementTotal + rsp.ChanceApprovedTotal | 107 | rsp.ACTotal = rsp.AchievementTotal + rsp.ChanceApprovedTotal |
| 108 | rsp.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, departmentsResponse.GetChildDepartmentIds(d, true)) | 108 | rsp.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, departmentsResponse.GetChildDepartmentIds(d, true)) |
| 109 | return rsp | 109 | return rsp |
| @@ -144,12 +144,12 @@ func DepartmentStatistic(header *protocol.RequestHeader, request *protocol.Depar | @@ -144,12 +144,12 @@ func DepartmentStatistic(header *protocol.RequestHeader, request *protocol.Depar | ||
| 144 | Id: deparment.Id, | 144 | Id: deparment.Id, |
| 145 | Name: deparment.Name, | 145 | Name: deparment.Name, |
| 146 | } | 146 | } |
| 147 | - if dIds, err = agg.GetDepartmentIds(header.CompanyId, request.DepartmentId); err != nil { | 147 | + if dIds, err = agg.GetDepartmentIds(header.CompanyId, request.DepartmentId, false); err != nil { |
| 148 | log.Error(err) | 148 | log.Error(err) |
| 149 | return | 149 | return |
| 150 | } | 150 | } |
| 151 | departmentStatistic.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds) | 151 | departmentStatistic.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds) |
| 152 | - departmentStatistic.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, request.DepartmentId, 0, 0, nil) | 152 | + departmentStatistic.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, request.DepartmentId, false, 0, 0, nil) |
| 153 | departmentStatistic.ACTotal = departmentStatistic.AchievementTotal + departmentStatistic.ChanceApprovedTotal | 153 | departmentStatistic.ACTotal = departmentStatistic.AchievementTotal + departmentStatistic.ChanceApprovedTotal |
| 154 | departmentStatistic.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, dIds) | 154 | departmentStatistic.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, dIds) |
| 155 | rsp.DepartmentStatistic = departmentStatistic | 155 | rsp.DepartmentStatistic = departmentStatistic |
| @@ -5,6 +5,7 @@ import ( | @@ -5,6 +5,7 @@ import ( | ||
| 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
| 6 | "opp/models" | 6 | "opp/models" |
| 7 | "opp/protocol" | 7 | "opp/protocol" |
| 8 | + "opp/services/contrab" | ||
| 8 | ) | 9 | ) |
| 9 | 10 | ||
| 10 | //排行榜 | 11 | //排行榜 |
| @@ -32,6 +33,16 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe | @@ -32,6 +33,16 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe | ||
| 32 | Lists: make([][]protocol.RankItem, 0), | 33 | Lists: make([][]protocol.RankItem, 0), |
| 33 | } | 34 | } |
| 34 | rsp.SortItems = itemNames | 35 | rsp.SortItems = itemNames |
| 36 | + if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment || rankRange.Type == protocol.RankRangeTypeAllSpecifyDepartment { | ||
| 37 | + if departments, err = models.GetDepartmentByUser(header.UserId); err != nil { | ||
| 38 | + log.Error(err) | ||
| 39 | + return | ||
| 40 | + } | ||
| 41 | + if len(departments) == 0 { | ||
| 42 | + hasDepartmentInRank = false | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + | ||
| 35 | for i := range itemKeys { | 46 | for i := range itemKeys { |
| 36 | key := itemKeys[i] | 47 | key := itemKeys[i] |
| 37 | if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment || rankRange.Type == protocol.RankRangeTypeAllSpecifyDepartment { | 48 | if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment || rankRange.Type == protocol.RankRangeTypeAllSpecifyDepartment { |
| @@ -42,35 +53,25 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe | @@ -42,35 +53,25 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe | ||
| 42 | if !hasDepartmentInRank { | 53 | if !hasDepartmentInRank { |
| 43 | continue | 54 | continue |
| 44 | } | 55 | } |
| 45 | - if hasDepartmentInRank || departmentId > 0 { | ||
| 46 | - if departments, err = models.GetDepartmentByUser(header.UserId); err != nil { | 56 | + if departmentId > 0 { |
| 57 | + if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, departmentId, &selfRank); err != nil { | ||
| 47 | log.Error(err) | 58 | log.Error(err) |
| 48 | return | 59 | return |
| 49 | } | 60 | } |
| 50 | - if len(departments) == 0 { | ||
| 51 | - hasDepartmentInRank = false | ||
| 52 | - } else { | ||
| 53 | - if departmentId == 0 { | ||
| 54 | - for i := range departments { | ||
| 55 | - d := departments[i] | ||
| 56 | - if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil { | ||
| 57 | - log.Error(err) | ||
| 58 | - return | ||
| 59 | - } | ||
| 60 | - if selfRank != nil { | ||
| 61 | - departmentId = int64(d.Id) | ||
| 62 | - break | ||
| 63 | - } | ||
| 64 | - } | ||
| 65 | - if departmentId == 0 { | ||
| 66 | - hasDepartmentInRank = false | ||
| 67 | - } | ||
| 68 | - } else { | ||
| 69 | - if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, departmentId, &selfRank); err != nil { | ||
| 70 | - log.Error(err) | ||
| 71 | - return | ||
| 72 | - } | 61 | + } else if hasDepartmentInRank { |
| 62 | + for i := range departments { | ||
| 63 | + d := departments[i] | ||
| 64 | + if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil { | ||
| 65 | + log.Error(err) | ||
| 66 | + return | ||
| 73 | } | 67 | } |
| 68 | + if selfRank != nil { | ||
| 69 | + departmentId = int64(d.Id) | ||
| 70 | + break | ||
| 71 | + } | ||
| 72 | + } | ||
| 73 | + if departmentId == 0 { | ||
| 74 | + hasDepartmentInRank = false | ||
| 74 | } | 75 | } |
| 75 | } | 76 | } |
| 76 | } else if rankRange.Type == protocol.RankRangeTypeAllCompanyUser || rankRange.Type == protocol.RankRangeTypeSpecifyUser { | 77 | } else if rankRange.Type == protocol.RankRangeTypeAllCompanyUser || rankRange.Type == protocol.RankRangeTypeSpecifyUser { |
| @@ -118,6 +119,9 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange | @@ -118,6 +119,9 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange | ||
| 118 | var ( | 119 | var ( |
| 119 | lists []*models.RankRange | 120 | lists []*models.RankRange |
| 120 | ) | 121 | ) |
| 122 | + rsp = &protocol.GetRankRangeResponse{ | ||
| 123 | + List: make([]protocol.NameItem, 0), | ||
| 124 | + } | ||
| 121 | if lists, err = models.GetRankRanges(int(header.CompanyId), request.RankTypeId); err != nil { | 125 | if lists, err = models.GetRankRanges(int(header.CompanyId), request.RankTypeId); err != nil { |
| 122 | if err == orm.ErrNoRows { | 126 | if err == orm.ErrNoRows { |
| 123 | err = nil | 127 | err = nil |
| @@ -126,7 +130,6 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange | @@ -126,7 +130,6 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange | ||
| 126 | log.Error(err) | 130 | log.Error(err) |
| 127 | return | 131 | return |
| 128 | } | 132 | } |
| 129 | - rsp = &protocol.GetRankRangeResponse{} | ||
| 130 | for i := range lists { | 133 | for i := range lists { |
| 131 | rsp.List = append(rsp.List, protocol.NameItem{Id: lists[i].Id, Name: lists[i].Name}) | 134 | rsp.List = append(rsp.List, protocol.NameItem{Id: lists[i].Id, Name: lists[i].Name}) |
| 132 | } | 135 | } |
| @@ -158,3 +161,16 @@ func GetRankPeriods(header *protocol.RequestHeader, request *protocol.GetRankPer | @@ -158,3 +161,16 @@ func GetRankPeriods(header *protocol.RequestHeader, request *protocol.GetRankPer | ||
| 158 | } | 161 | } |
| 159 | return | 162 | return |
| 160 | } | 163 | } |
| 164 | + | ||
| 165 | +//手动计算排行榜 | ||
| 166 | +func ComputeRankScore(header *protocol.RequestHeader, request *protocol.ComputeRankScoreRequest) (rsp *protocol.ComputeRankScoreResponse, err error) { | ||
| 167 | + var () | ||
| 168 | + rsp = &protocol.ComputeRankScoreResponse{} | ||
| 169 | + if err = contrab.ComputeRankScore(); err != nil { | ||
| 170 | + log.Error(err) | ||
| 171 | + err = protocol.NewCustomMessage(1, err.Error()) | ||
| 172 | + return | ||
| 173 | + } | ||
| 174 | + err = protocol.NewSuccessWithMessage("排行榜统计成功") | ||
| 175 | + return | ||
| 176 | +} |
-
请 注册 或 登录 后发表评论