作者 yangfu

排行榜修改

... ... @@ -611,6 +611,7 @@ func (this *ChanceController) ChancePool() {
msg = m
return
}
request.IncludeSubDepartment = true
header := controllers.GetRequestHeader(this.Ctx)
msg = protocol.NewReturnResponse(chance.ChancePool(header, request))
}
... ...
... ... @@ -96,3 +96,24 @@ func (this *RankController) GetRankPeriods() {
header := controllers.GetRequestHeader(this.Ctx)
msg = protocol.NewReturnResponse(rank.GetRankPeriods(header, request))
}
//ComputeRankScore 手动计算排行榜
//@router /computeRankScore [post]
func (this *RankController) ComputeRankScore() {
var msg *protocol.ResponseMessage
defer func() {
this.Resp(msg)
}()
var request *protocol.ComputeRankScoreRequest
if err := json.Unmarshal(this.ByteBody, &request); err != nil {
log.Error(err)
msg = protocol.BadRequestParam(1)
return
}
if b, m := this.Valid(request); !b {
msg = m
return
}
header := controllers.GetRequestHeader(this.Ctx)
msg = protocol.NewReturnResponse(rank.ComputeRankScore(header, request))
}
... ...
... ... @@ -169,7 +169,7 @@ where company_id=%v and rank_type_id=%v and rank_range_id=%v and rank_period_id=
return
}
//排行榜列表-部门
//排行榜列表-部门-用户所属部门排名
func GetRanksByDepartmentSelf(companyId int64, rankTypeId, rankRangeId, rankPeriodId int, key string, relationId int64, v interface{}) (err error) {
sql := fmt.Sprintf(`select * from (
select a.*,(@rowno:=@rowno+1) as ranking from (
... ...
... ... @@ -165,10 +165,11 @@ type MySubmitChanceResponse struct {
/*ChancePool 机会池*/
type ChancePoolRequest struct {
LastId int64 `json:"lastId"`
PageSize int `json:"pageSize" valid:"Required"`
ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会
DepartmentId int `json:"departmentId"` //部门编号
LastId int64 `json:"lastId"`
PageSize int `json:"pageSize" valid:"Required"`
ChanceTypeId int `json:"chanceTypeId"` //0:所有机会 编号:对应机会类型编号的机会
DepartmentId int `json:"departmentId"` //部门编号
IncludeSubDepartment bool
}
type ChancePoolResponse struct {
List []CommonListItem `json:"list"`
... ...
... ... @@ -67,3 +67,9 @@ type RankPeriod struct {
BeginTime int64 `json:"beginTime"`
EndTime int64 `json:"endTime"`
}
/*ComputeRankScore */
type ComputeRankScoreRequest struct {
}
type ComputeRankScoreResponse struct {
}
... ...
... ... @@ -457,6 +457,14 @@ func init() {
beego.GlobalControllerRouter["opp/controllers/v1:RankController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:RankController"],
beego.ControllerComments{
Method: "ComputeRankScore",
Router: `/computeRankScore`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["opp/controllers/v1:RankController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:RankController"],
beego.ControllerComments{
Method: "GetRankList",
Router: `/getRankList`,
AllowHTTPMethods: []string{"post"},
... ...
... ... @@ -9,7 +9,8 @@ import (
)
//机会池
func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, lastId int64, pageSize int, v interface{}) (total int, err error) {
//@isIncludeSubDeps 是否包含子部门编号
func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, isIncludeSubDeps bool, lastId int64, pageSize int, v interface{}) (total int, err error) {
var (
check int
checkMap map[int]int
... ... @@ -46,7 +47,7 @@ func GetChancePool(uid, cid int64, chanceTypeId int, departmentId int, lastId in
lastId = chance.ApproveTime.Unix()
}
if departmentId > 0 {
dIds, _ = GetDepartmentIds(cid, departmentId)
dIds, _ = GetDepartmentIds(cid, departmentId, isIncludeSubDeps)
}
log.Debug(fmt.Sprintf("user:%v check:%v is_amdin:%v", uid, check, user.Id == uid))
switch check {
... ...
... ... @@ -102,7 +102,14 @@ func ChanceApprovingStatistic(header *protocol.RequestHeader, departmentIds []in
}
//获取部门以及子部门编号
func GetDepartmentIds(companyId int64, dId int) (departmentIds []int, err error) {
//@isIncludeSubDeps 是否包含子部门
func GetDepartmentIds(companyId int64, dId int, isIncludeSubDeps bool) (departmentIds []int, err error) {
if dId == 0 {
return []int{}, nil
}
if !isIncludeSubDeps {
return []int{dId}, nil
}
if d, e := models.GetDepartmentById(dId); e != nil {
log.Error(err)
err = e
... ...
... ... @@ -1405,7 +1405,7 @@ func ChanceStatistics(header *protocol.RequestHeader, request *protocol.ChanceSt
rsp = &protocol.ChanceStatisticsResponse{}
for i := range chanceType {
item := chanceType[i]
if total, err = agg.GetChancePool(header.UserId, header.CompanyId, item.Id, 0, 0, 0, nil); err != nil {
if total, err = agg.GetChancePool(header.UserId, header.CompanyId, item.Id, 0, false, 0, 0, nil); err != nil {
log.Error(err)
return
}
... ... @@ -1493,7 +1493,7 @@ func ChancePool(header *protocol.RequestHeader, request *protocol.ChancePoolRequ
provider *protocol.BaseUserInfo
flag int
)
if total, err = agg.GetChancePool(header.UserId, header.CompanyId, request.ChanceTypeId, request.DepartmentId, request.LastId, request.PageSize, &myChances); err != nil {
if total, err = agg.GetChancePool(header.UserId, header.CompanyId, request.ChanceTypeId, request.DepartmentId, request.IncludeSubDepartment, request.LastId, request.PageSize, &myChances); err != nil {
if err == orm.ErrNoRows {
err = nil
return
... ...
... ... @@ -54,7 +54,7 @@ func ComputeRankScore() error {
log.Warn("ComputeRankScore is working", ComputeRankScoreFlag)
return fmt.Errorf("ComputeRankScore is working. try later")
} else {
defer utils.Profiling("ComputeRankScore 执行耗时")()
defer utils.Profiling("结束作业:排行榜分数计算 执行耗时")()
}
defer func() {
atomic.CompareAndSwapInt32(&ComputeRankScoreFlag, 1, 0)
... ...
... ... @@ -103,7 +103,7 @@ func Statistics(header *protocol.RequestHeader, request *protocol.DepartmentStat
rsp := &protocol.DepartmentStatistics{}
dIds := departmentsResponse.GetChildDepartmentIds(d, true)
rsp.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds)
rsp.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, d.DepartmentId, 0, 0, nil)
rsp.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, d.DepartmentId, true, 0, 0, nil)
rsp.ACTotal = rsp.AchievementTotal + rsp.ChanceApprovedTotal
rsp.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, departmentsResponse.GetChildDepartmentIds(d, true))
return rsp
... ... @@ -144,12 +144,12 @@ func DepartmentStatistic(header *protocol.RequestHeader, request *protocol.Depar
Id: deparment.Id,
Name: deparment.Name,
}
if dIds, err = agg.GetDepartmentIds(header.CompanyId, request.DepartmentId); err != nil {
if dIds, err = agg.GetDepartmentIds(header.CompanyId, request.DepartmentId, false); err != nil {
log.Error(err)
return
}
departmentStatistic.AchievementTotal, _ = agg.AchievementDepartmentStatic(header, 0, dIds)
departmentStatistic.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, request.DepartmentId, 0, 0, nil)
departmentStatistic.ChanceApprovedTotal, _ = agg.GetChancePool(header.UserId, header.CompanyId, 0, request.DepartmentId, false, 0, 0, nil)
departmentStatistic.ACTotal = departmentStatistic.AchievementTotal + departmentStatistic.ChanceApprovedTotal
departmentStatistic.ChanceApprovingTotal, _ = agg.ChanceApprovingStatistic(header, dIds)
rsp.DepartmentStatistic = departmentStatistic
... ...
... ... @@ -5,6 +5,7 @@ import (
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
"opp/models"
"opp/protocol"
"opp/services/contrab"
)
//排行榜
... ... @@ -32,6 +33,16 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe
Lists: make([][]protocol.RankItem, 0),
}
rsp.SortItems = itemNames
if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment || rankRange.Type == protocol.RankRangeTypeAllSpecifyDepartment {
if departments, err = models.GetDepartmentByUser(header.UserId); err != nil {
log.Error(err)
return
}
if len(departments) == 0 {
hasDepartmentInRank = false
}
}
for i := range itemKeys {
key := itemKeys[i]
if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment || rankRange.Type == protocol.RankRangeTypeAllSpecifyDepartment {
... ... @@ -42,35 +53,25 @@ func GetRankList(header *protocol.RequestHeader, request *protocol.GetRankListRe
if !hasDepartmentInRank {
continue
}
if hasDepartmentInRank || departmentId > 0 {
if departments, err = models.GetDepartmentByUser(header.UserId); err != nil {
if departmentId > 0 {
if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, departmentId, &selfRank); err != nil {
log.Error(err)
return
}
if len(departments) == 0 {
hasDepartmentInRank = false
} else {
if departmentId == 0 {
for i := range departments {
d := departments[i]
if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil {
log.Error(err)
return
}
if selfRank != nil {
departmentId = int64(d.Id)
break
}
}
if departmentId == 0 {
hasDepartmentInRank = false
}
} else {
if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, departmentId, &selfRank); err != nil {
log.Error(err)
return
}
} else if hasDepartmentInRank {
for i := range departments {
d := departments[i]
if err = models.GetRanksByDepartmentSelf(header.CompanyId, request.RankTypeId, request.RankRangeId, request.RankPeriodId, key, int64(d.Id), &selfRank); err != nil {
log.Error(err)
return
}
if selfRank != nil {
departmentId = int64(d.Id)
break
}
}
if departmentId == 0 {
hasDepartmentInRank = false
}
}
} else if rankRange.Type == protocol.RankRangeTypeAllCompanyUser || rankRange.Type == protocol.RankRangeTypeSpecifyUser {
... ... @@ -118,6 +119,9 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange
var (
lists []*models.RankRange
)
rsp = &protocol.GetRankRangeResponse{
List: make([]protocol.NameItem, 0),
}
if lists, err = models.GetRankRanges(int(header.CompanyId), request.RankTypeId); err != nil {
if err == orm.ErrNoRows {
err = nil
... ... @@ -126,7 +130,6 @@ func GetRankRange(header *protocol.RequestHeader, request *protocol.GetRankRange
log.Error(err)
return
}
rsp = &protocol.GetRankRangeResponse{}
for i := range lists {
rsp.List = append(rsp.List, protocol.NameItem{Id: lists[i].Id, Name: lists[i].Name})
}
... ... @@ -158,3 +161,16 @@ func GetRankPeriods(header *protocol.RequestHeader, request *protocol.GetRankPer
}
return
}
//手动计算排行榜
func ComputeRankScore(header *protocol.RequestHeader, request *protocol.ComputeRankScoreRequest) (rsp *protocol.ComputeRankScoreResponse, err error) {
var ()
rsp = &protocol.ComputeRankScoreResponse{}
if err = contrab.ComputeRankScore(); err != nil {
log.Error(err)
err = protocol.NewCustomMessage(1, err.Error())
return
}
err = protocol.NewSuccessWithMessage("排行榜统计成功")
return
}
... ...