作者 yangfu

排行榜修改

@@ -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 (
@@ -169,6 +169,7 @@ type ChancePoolRequest struct { @@ -169,6 +169,7 @@ type ChancePoolRequest struct {
169 PageSize int `json:"pageSize" valid:"Required"` 169 PageSize int `json:"pageSize" valid:"Required"`
170 ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会 170 ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会
171 DepartmentId int `json:"departmentId"` //部门编号 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,15 +53,12 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe @@ -42,15 +53,12 @@ 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 { 61 + } else if hasDepartmentInRank {
54 for i := range departments { 62 for i := range departments {
55 d := departments[i] 63 d := departments[i]
56 if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil { 64 if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil {
@@ -65,13 +73,6 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe @@ -65,13 +73,6 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe
65 if departmentId == 0 { 73 if departmentId == 0 {
66 hasDepartmentInRank = false 74 hasDepartmentInRank = false
67 } 75 }
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 - }  
73 - }  
74 - }  
75 } 76 }
76 } else if rankRange.Type == protocol.RankRangeTypeAllCompanyUser || rankRange.Type == protocol.RankRangeTypeSpecifyUser { 77 } else if rankRange.Type == protocol.RankRangeTypeAllCompanyUser || rankRange.Type == protocol.RankRangeTypeSpecifyUser {
77 if rsp.Total, err = models.GetRanksByUser(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, request.PageIndex, request.PageSize, &ranks); err != nil && err != orm.ErrNoRows { 78 if rsp.Total, err = models.GetRanksByUser(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, request.PageIndex, request.PageSize, &ranks); err != nil && err != orm.ErrNoRows {
@@ -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 +}