正在显示
10 个修改的文件
包含
796 行增加
和
22 行删除
@@ -132,3 +132,10 @@ func Profiling(msg string) func() { | @@ -132,3 +132,10 @@ func Profiling(msg string) func() { | ||
132 | log.Info(fmt.Sprintf("%s[%s]:%s", msg, "use", time.Since(start))) | 132 | log.Info(fmt.Sprintf("%s[%s]:%s", msg, "use", time.Since(start))) |
133 | } | 133 | } |
134 | } | 134 | } |
135 | + | ||
136 | +//合并字典 | ||
137 | +func MergeMap(to map[string]interface{}, from map[string]interface{}) { | ||
138 | + for k, v := range from { | ||
139 | + to[k] = v | ||
140 | + } | ||
141 | +} |
@@ -50,3 +50,11 @@ func TestValidVersion(t *testing.T) { | @@ -50,3 +50,11 @@ func TestValidVersion(t *testing.T) { | ||
50 | } | 50 | } |
51 | } | 51 | } |
52 | } | 52 | } |
53 | + | ||
54 | +func TestMergeMap(t *testing.T) { | ||
55 | + to := map[string]interface{}{"1": 1, "2": 2} | ||
56 | + from := map[string]interface{}{"3": 3, "4": 4} | ||
57 | + t.Log("merge 前:", to) | ||
58 | + MergeMap(to, from) | ||
59 | + t.Log("merge 后:", to) | ||
60 | +} |
models/rank.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type Rank struct { | ||
11 | + Id int `orm:"column(id);auto"` | ||
12 | + CompanyId int `orm:"column(company_id)" description:"公司编号 表company.id"` | ||
13 | + RankTypeId int `orm:"column(rank_type_id)" description:"榜单类型编号"` | ||
14 | + RankRangeId int `orm:"column(rank_range_id)" description:"榜单范围编号"` | ||
15 | + RankPeriodId int `orm:"column(rank_period_id)" description:"赛季周期编号"` | ||
16 | + RelationId int64 `orm:"column(relation_id)" description:"用户编号/部门编号"` | ||
17 | + TotalScore float64 `orm:"column(total_score);null;digits(4);decimals(1)" description:"总分"` | ||
18 | + DiscoveryScore float64 `orm:"column(discovery_score);null;digits(4);decimals(1)" description:"发现得分"` | ||
19 | + GraspScore float64 `orm:"column(grasp_score);null;digits(4);decimals(1)" description:"把握分"` | ||
20 | + DiscoveryTotal int `orm:"column(discovery_total);null" description:"发现数量"` | ||
21 | + CommentTotal int `orm:"column(comment_total);null" description:"评论数量"` | ||
22 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
23 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
24 | + EnableStatus int8 `orm:"column(enable_status);null" description:"有效状态 0:无效 1:有效 "` | ||
25 | + Type int8 `orm:"column(type);null" description:"1:所有员工 2:指定员工 3:所有部门 4:指定部门"` | ||
26 | +} | ||
27 | + | ||
28 | +func (t *Rank) TableName() string { | ||
29 | + return "rank" | ||
30 | +} | ||
31 | + | ||
32 | +func init() { | ||
33 | + orm.RegisterModel(new(Rank)) | ||
34 | +} | ||
35 | + | ||
36 | +// AddRank insert a new Rank into database and returns | ||
37 | +// last inserted Id on success. | ||
38 | +func AddRank(m *Rank) (id int64, err error) { | ||
39 | + o := orm.NewOrm() | ||
40 | + id, err = o.Insert(m) | ||
41 | + return | ||
42 | +} | ||
43 | + | ||
44 | +// GetRankById retrieves Rank by Id. Returns error if | ||
45 | +// Id doesn't exist | ||
46 | +func GetRankById(id int) (v *Rank, err error) { | ||
47 | + o := orm.NewOrm() | ||
48 | + v = &Rank{Id: id} | ||
49 | + if err = o.Read(v); err == nil { | ||
50 | + return v, nil | ||
51 | + } | ||
52 | + return nil, err | ||
53 | +} | ||
54 | + | ||
55 | +// UpdateRank updates Rank by Id and returns error if | ||
56 | +// the record to be updated doesn't exist | ||
57 | +func UpdateRankById(m *Rank) (err error) { | ||
58 | + o := orm.NewOrm() | ||
59 | + v := Rank{Id: m.Id} | ||
60 | + // ascertain id exists in the database | ||
61 | + if err = o.Read(&v); err == nil { | ||
62 | + var num int64 | ||
63 | + if num, err = o.Update(m); err == nil { | ||
64 | + fmt.Println("Number of records updated in database:", num) | ||
65 | + } | ||
66 | + } | ||
67 | + return | ||
68 | +} | ||
69 | + | ||
70 | +//取用户当前榜单数据 | ||
71 | +func GetRank(companyId, rankTypeId, rankRangeId, rankPeriodId int, relationId int64) (v *Rank, err error) { | ||
72 | + o := orm.NewOrm() | ||
73 | + sql := "select * from rank where company_id=? and rank_type_id=? and rank_period_id=? and relation_id=?" | ||
74 | + if err = o.Raw(sql, companyId, rankTypeId, rankRangeId, rankPeriodId, relationId).QueryRow(v); err == nil { | ||
75 | + return v, nil | ||
76 | + } | ||
77 | + return nil, err | ||
78 | +} |
models/rank_item.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type RankItem struct { | ||
11 | + Id int `orm:"column(id);auto"` | ||
12 | + CompanyId int `orm:"column(company_id);null" description:"公司编号 company.id"` | ||
13 | + RankTypeId int `orm:"column(rank_type_id)" description:"表rank_type.id 榜单类型编号"` | ||
14 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
15 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
16 | + SortNum int `orm:"column(sort_num);null" description:"序号"` | ||
17 | + ItemName string `orm:"column(item_name);size(50);null" description:"评比项名称"` | ||
18 | + ItemKey string `orm:"column(item_key);size(50);null" description:"评比项键值(排行榜排序使用)"` | ||
19 | +} | ||
20 | + | ||
21 | +func (t *RankItem) TableName() string { | ||
22 | + return "rank_item" | ||
23 | +} | ||
24 | + | ||
25 | +func init() { | ||
26 | + orm.RegisterModel(new(RankItem)) | ||
27 | +} | ||
28 | + | ||
29 | +// AddRankItem insert a new RankItem into database and returns | ||
30 | +// last inserted Id on success. | ||
31 | +func AddRankItem(m *RankItem) (id int64, err error) { | ||
32 | + o := orm.NewOrm() | ||
33 | + id, err = o.Insert(m) | ||
34 | + return | ||
35 | +} | ||
36 | + | ||
37 | +// GetRankItemById retrieves RankItem by Id. Returns error if | ||
38 | +// Id doesn't exist | ||
39 | +func GetRankItemById(id int) (v *RankItem, err error) { | ||
40 | + o := orm.NewOrm() | ||
41 | + v = &RankItem{Id: id} | ||
42 | + if err = o.Read(v); err == nil { | ||
43 | + return v, nil | ||
44 | + } | ||
45 | + return nil, err | ||
46 | +} | ||
47 | + | ||
48 | +// UpdateRankItem updates RankItem by Id and returns error if | ||
49 | +// the record to be updated doesn't exist | ||
50 | +func UpdateRankItemById(m *RankItem) (err error) { | ||
51 | + o := orm.NewOrm() | ||
52 | + v := RankItem{Id: m.Id} | ||
53 | + // ascertain id exists in the database | ||
54 | + if err = o.Read(&v); err == nil { | ||
55 | + var num int64 | ||
56 | + if num, err = o.Update(m); err == nil { | ||
57 | + fmt.Println("Number of records updated in database:", num) | ||
58 | + } | ||
59 | + } | ||
60 | + return | ||
61 | +} | ||
62 | + | ||
63 | +// DeleteRankItem deletes RankItem by Id and returns error if | ||
64 | +// the record to be deleted doesn't exist | ||
65 | +func DeleteRankItem(id int) (err error) { | ||
66 | + o := orm.NewOrm() | ||
67 | + v := RankItem{Id: id} | ||
68 | + // ascertain id exists in the database | ||
69 | + if err = o.Read(&v); err == nil { | ||
70 | + var num int64 | ||
71 | + if num, err = o.Delete(&RankItem{Id: id}); err == nil { | ||
72 | + fmt.Println("Number of records deleted in database:", num) | ||
73 | + } | ||
74 | + } | ||
75 | + return | ||
76 | +} |
models/rank_period.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
6 | + "opp/internal/utils" | ||
7 | + "time" | ||
8 | + | ||
9 | + "github.com/astaxie/beego/orm" | ||
10 | +) | ||
11 | + | ||
12 | +type RankPeriod struct { | ||
13 | + Id int `orm:"column(id);auto" description:"主键"` | ||
14 | + CompanyId int `orm:"column(company_id);null" description:"公司编号 表company.id"` | ||
15 | + RankTypeId int `orm:"column(rank_type_id)" description:"表rank_type.id 榜单类型编号"` | ||
16 | + SeasonName string `orm:"column(season_name);size(50);null" description:"赛季名称"` | ||
17 | + BeginTime time.Time `orm:"column(begin_time);type(timestamp);null" description:"开始时间"` | ||
18 | + EndTime time.Time `orm:"column(end_time);type(timestamp);null" description:"结束时间"` | ||
19 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
20 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
21 | + Status int8 `orm:"column(status);null" description:"状态 0:未开始 1:开始 2:结束 "` | ||
22 | + RankRangeBack string `orm:"column(rank_range_back);null" description:"赛季结束时,备份赛季参与人设置"` | ||
23 | + RankItemBack string `orm:"column(rank_item_back);null" description:"赛季结束时,备份赛季评比项设置"` | ||
24 | +} | ||
25 | + | ||
26 | +func (t *RankPeriod) TableName() string { | ||
27 | + return "rank_period" | ||
28 | +} | ||
29 | + | ||
30 | +func init() { | ||
31 | + orm.RegisterModel(new(RankPeriod)) | ||
32 | +} | ||
33 | + | ||
34 | +// AddRankPeriod insert a new RankPeriod into database and returns | ||
35 | +// last inserted Id on success. | ||
36 | +func AddRankPeriod(m *RankPeriod) (id int64, err error) { | ||
37 | + o := orm.NewOrm() | ||
38 | + id, err = o.Insert(m) | ||
39 | + return | ||
40 | +} | ||
41 | + | ||
42 | +// GetRankPeriodById retrieves RankPeriod by Id. Returns error if | ||
43 | +// Id doesn't exist | ||
44 | +func GetRankPeriodById(id int) (v *RankPeriod, err error) { | ||
45 | + o := orm.NewOrm() | ||
46 | + v = &RankPeriod{Id: id} | ||
47 | + if err = o.Read(v); err == nil { | ||
48 | + return v, nil | ||
49 | + } | ||
50 | + return nil, err | ||
51 | +} | ||
52 | + | ||
53 | +// UpdateRankPeriod updates RankPeriod by Id and returns error if | ||
54 | +// the record to be updated doesn't exist | ||
55 | +func UpdateRankPeriodById(m *RankPeriod) (err error) { | ||
56 | + o := orm.NewOrm() | ||
57 | + v := RankPeriod{Id: m.Id} | ||
58 | + // ascertain id exists in the database | ||
59 | + if err = o.Read(&v); err == nil { | ||
60 | + var num int64 | ||
61 | + if num, err = o.Update(m); err == nil { | ||
62 | + fmt.Println("Number of records updated in database:", num) | ||
63 | + } | ||
64 | + } | ||
65 | + return | ||
66 | +} | ||
67 | + | ||
68 | +// DeleteRankPeriod deletes RankPeriod by Id and returns error if | ||
69 | +// the record to be deleted doesn't exist | ||
70 | +func DeleteRankPeriod(id int) (err error) { | ||
71 | + o := orm.NewOrm() | ||
72 | + v := RankPeriod{Id: id} | ||
73 | + // ascertain id exists in the database | ||
74 | + if err = o.Read(&v); err == nil { | ||
75 | + var num int64 | ||
76 | + if num, err = o.Delete(&RankPeriod{Id: id}); err == nil { | ||
77 | + fmt.Println("Number of records deleted in database:", num) | ||
78 | + } | ||
79 | + } | ||
80 | + return | ||
81 | +} | ||
82 | + | ||
83 | +//获取进行中的赛季周期 状态 0:未开始 1:开始 2:结束 | ||
84 | +func GetRankPeriods(status []int) (v []*RankPeriod, err error) { | ||
85 | + sql := mybeego.NewSqlExutor() | ||
86 | + sql.Table((&RankPeriod{}).TableName()) | ||
87 | + if len(status) > 0 { | ||
88 | + sql.Where(fmt.Sprintf("status in (%v)", utils.JoinInts(status, ","))) | ||
89 | + } | ||
90 | + sql.Order("begin_time") | ||
91 | + _, err = sql.Querys(&v) | ||
92 | + return | ||
93 | +} |
models/rank_range.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
6 | + "time" | ||
7 | + | ||
8 | + "github.com/astaxie/beego/orm" | ||
9 | +) | ||
10 | + | ||
11 | +type RankRange struct { | ||
12 | + Id int `orm:"column(id);auto"` | ||
13 | + CompanyId int `orm:"column(company_id);null" description:"公司编号 表company.id"` | ||
14 | + RankTypeId int `orm:"column(rank_type_id)" description:"表rank_type.id 榜单类型编号"` | ||
15 | + Name string `orm:"column(name);size(50);null" description:"名称"` | ||
16 | + Type int8 `orm:"column(type);null" description:"1:所有员工 2:指定员工 3:所有部门 4:指定部门"` | ||
17 | + SortNum int `orm:"column(sort_num);null" description:"序号"` | ||
18 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
19 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
20 | + Status int8 `orm:"column(status);null" description:"【0:显示】【1:隐藏】"` | ||
21 | + Data string `orm:"column(data);null"` | ||
22 | +} | ||
23 | + | ||
24 | +func (t *RankRange) TableName() string { | ||
25 | + return "rank_range" | ||
26 | +} | ||
27 | + | ||
28 | +func init() { | ||
29 | + orm.RegisterModel(new(RankRange)) | ||
30 | +} | ||
31 | + | ||
32 | +// AddRankRange insert a new RankRange into database and returns | ||
33 | +// last inserted Id on success. | ||
34 | +func AddRankRange(m *RankRange) (id int64, err error) { | ||
35 | + o := orm.NewOrm() | ||
36 | + id, err = o.Insert(m) | ||
37 | + return | ||
38 | +} | ||
39 | + | ||
40 | +// GetRankRangeById retrieves RankRange by Id. Returns error if | ||
41 | +// Id doesn't exist | ||
42 | +func GetRankRangeById(id int) (v *RankRange, err error) { | ||
43 | + o := orm.NewOrm() | ||
44 | + v = &RankRange{Id: id} | ||
45 | + if err = o.Read(v); err == nil { | ||
46 | + return v, nil | ||
47 | + } | ||
48 | + return nil, err | ||
49 | +} | ||
50 | + | ||
51 | +// UpdateRankRange updates RankRange by Id and returns error if | ||
52 | +// the record to be updated doesn't exist | ||
53 | +func UpdateRankRangeById(m *RankRange) (err error) { | ||
54 | + o := orm.NewOrm() | ||
55 | + v := RankRange{Id: m.Id} | ||
56 | + // ascertain id exists in the database | ||
57 | + if err = o.Read(&v); err == nil { | ||
58 | + var num int64 | ||
59 | + if num, err = o.Update(m); err == nil { | ||
60 | + fmt.Println("Number of records updated in database:", num) | ||
61 | + } | ||
62 | + } | ||
63 | + return | ||
64 | +} | ||
65 | + | ||
66 | +// DeleteRankRange deletes RankRange by Id and returns error if | ||
67 | +// the record to be deleted doesn't exist | ||
68 | +func DeleteRankRange(id int) (err error) { | ||
69 | + o := orm.NewOrm() | ||
70 | + v := RankRange{Id: id} | ||
71 | + // ascertain id exists in the database | ||
72 | + if err = o.Read(&v); err == nil { | ||
73 | + var num int64 | ||
74 | + if num, err = o.Delete(&RankRange{Id: id}); err == nil { | ||
75 | + fmt.Println("Number of records deleted in database:", num) | ||
76 | + } | ||
77 | + } | ||
78 | + return | ||
79 | +} | ||
80 | + | ||
81 | +//获取榜单范围数据 | ||
82 | +func GetRankRanges(companyId int) (v []*RankRange, err error) { | ||
83 | + sql := mybeego.NewSqlExutor() | ||
84 | + sql.Table((&RankRange{}).TableName()) | ||
85 | + if companyId > 0 { | ||
86 | + sql.Where(fmt.Sprintf("companyId=%v", companyId)) | ||
87 | + } | ||
88 | + sql.Order("sort_num") | ||
89 | + _, err = sql.Querys(&v) | ||
90 | + return | ||
91 | +} |
models/rank_range_data.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/astaxie/beego/orm" | ||
6 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
7 | +) | ||
8 | + | ||
9 | +type RankRangeData struct { | ||
10 | + Id int `orm:"column(id);auto"` | ||
11 | + RankRangeId int `orm:"column(rank_range_id);null"` | ||
12 | + RangeType string `orm:"column(range_type);size(255);null" description:"类型"` | ||
13 | + RelationId int `orm:"column(relation_id);null"` | ||
14 | +} | ||
15 | + | ||
16 | +func (t *RankRangeData) TableName() string { | ||
17 | + return "rank_range_data" | ||
18 | +} | ||
19 | + | ||
20 | +func init() { | ||
21 | + orm.RegisterModel(new(RankRangeData)) | ||
22 | +} | ||
23 | + | ||
24 | +// AddRankRangeData insert a new RankRangeData into database and returns | ||
25 | +// last inserted Id on success. | ||
26 | +func AddRankRangeData(m *RankRangeData) (id int64, err error) { | ||
27 | + o := orm.NewOrm() | ||
28 | + id, err = o.Insert(m) | ||
29 | + return | ||
30 | +} | ||
31 | + | ||
32 | +// GetRankRangeDataById retrieves RankRangeData by Id. Returns error if | ||
33 | +// Id doesn't exist | ||
34 | +func GetRankRangeDataById(id int) (v *RankRangeData, err error) { | ||
35 | + o := orm.NewOrm() | ||
36 | + v = &RankRangeData{Id: id} | ||
37 | + if err = o.Read(v); err == nil { | ||
38 | + return v, nil | ||
39 | + } | ||
40 | + return nil, err | ||
41 | +} | ||
42 | + | ||
43 | +// UpdateRankRangeData updates RankRangeData by Id and returns error if | ||
44 | +// the record to be updated doesn't exist | ||
45 | +func UpdateRankRangeDataById(m *RankRangeData) (err error) { | ||
46 | + o := orm.NewOrm() | ||
47 | + v := RankRangeData{Id: m.Id} | ||
48 | + // ascertain id exists in the database | ||
49 | + if err = o.Read(&v); err == nil { | ||
50 | + var num int64 | ||
51 | + if num, err = o.Update(m); err == nil { | ||
52 | + fmt.Println("Number of records updated in database:", num) | ||
53 | + } | ||
54 | + } | ||
55 | + return | ||
56 | +} | ||
57 | + | ||
58 | +// DeleteRankRangeData deletes RankRangeData by Id and returns error if | ||
59 | +// the record to be deleted doesn't exist | ||
60 | +func DeleteRankRangeData(id int) (err error) { | ||
61 | + o := orm.NewOrm() | ||
62 | + v := RankRangeData{Id: id} | ||
63 | + // ascertain id exists in the database | ||
64 | + if err = o.Read(&v); err == nil { | ||
65 | + var num int64 | ||
66 | + if num, err = o.Delete(&RankRangeData{Id: id}); err == nil { | ||
67 | + fmt.Println("Number of records deleted in database:", num) | ||
68 | + } | ||
69 | + } | ||
70 | + return | ||
71 | +} | ||
72 | + | ||
73 | +//参榜范围列表 | ||
74 | +func GetRankRangeDataList(rankRangeId int) (v []*RankRangeData, err error) { | ||
75 | + sql := mybeego.NewSqlExutor() | ||
76 | + sql.Table((&RankRangeData{}).TableName()) | ||
77 | + if rankRangeId > 0 { | ||
78 | + sql.Where(fmt.Sprintf("rank_range_id=%v", rankRangeId)) | ||
79 | + } | ||
80 | + sql.Order("relation_id") | ||
81 | + _, err = sql.Querys(&v) | ||
82 | + return | ||
83 | +} |
models/rank_type.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type RankType struct { | ||
11 | + Id int `orm:"column(id);auto"` | ||
12 | + Name string `orm:"column(name);size(50)" description:"榜单名称"` | ||
13 | + CompanyId int `orm:"column(company_id)" description:"公司编号 company.id"` | ||
14 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
15 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
16 | + EnableStatus int8 `orm:"column(enable_status);null" description:"是否有效 【1:禁用】【2:启用】"` | ||
17 | + Type int8 `orm:"column(type);null" description:"榜单类型(1赛季榜、2年榜)"` | ||
18 | +} | ||
19 | + | ||
20 | +func (t *RankType) TableName() string { | ||
21 | + return "rank_type" | ||
22 | +} | ||
23 | + | ||
24 | +func init() { | ||
25 | + orm.RegisterModel(new(RankType)) | ||
26 | +} | ||
27 | + | ||
28 | +// AddRankType insert a new RankType into database and returns | ||
29 | +// last inserted Id on success. | ||
30 | +func AddRankType(m *RankType) (id int64, err error) { | ||
31 | + o := orm.NewOrm() | ||
32 | + id, err = o.Insert(m) | ||
33 | + return | ||
34 | +} | ||
35 | + | ||
36 | +// GetRankTypeById retrieves RankType by Id. Returns error if | ||
37 | +// Id doesn't exist | ||
38 | +func GetRankTypeById(id int) (v *RankType, err error) { | ||
39 | + o := orm.NewOrm() | ||
40 | + v = &RankType{Id: id} | ||
41 | + if err = o.Read(v); err == nil { | ||
42 | + return v, nil | ||
43 | + } | ||
44 | + return nil, err | ||
45 | +} | ||
46 | + | ||
47 | +// UpdateRankType updates RankType by Id and returns error if | ||
48 | +// the record to be updated doesn't exist | ||
49 | +func UpdateRankTypeById(m *RankType) (err error) { | ||
50 | + o := orm.NewOrm() | ||
51 | + v := RankType{Id: m.Id} | ||
52 | + // ascertain id exists in the database | ||
53 | + if err = o.Read(&v); err == nil { | ||
54 | + var num int64 | ||
55 | + if num, err = o.Update(m); err == nil { | ||
56 | + fmt.Println("Number of records updated in database:", num) | ||
57 | + } | ||
58 | + } | ||
59 | + return | ||
60 | +} | ||
61 | + | ||
62 | +// DeleteRankType deletes RankType by Id and returns error if | ||
63 | +// the record to be deleted doesn't exist | ||
64 | +func DeleteRankType(id int) (err error) { | ||
65 | + o := orm.NewOrm() | ||
66 | + v := RankType{Id: id} | ||
67 | + // ascertain id exists in the database | ||
68 | + if err = o.Read(&v); err == nil { | ||
69 | + var num int64 | ||
70 | + if num, err = o.Delete(&RankType{Id: id}); err == nil { | ||
71 | + fmt.Println("Number of records deleted in database:", num) | ||
72 | + } | ||
73 | + } | ||
74 | + return | ||
75 | +} |
@@ -7,6 +7,12 @@ const ( | @@ -7,6 +7,12 @@ const ( | ||
7 | RankRangeTypeAllSpecifyDepartment = 4 | 7 | RankRangeTypeAllSpecifyDepartment = 4 |
8 | ) | 8 | ) |
9 | 9 | ||
10 | +const ( | ||
11 | + RankPeriodWaiting = iota | ||
12 | + RankPeriodBegin | ||
13 | + RankPeriodEnd | ||
14 | +) | ||
15 | + | ||
10 | /*GetRankList 排行榜*/ | 16 | /*GetRankList 排行榜*/ |
11 | type GetRankListRequest struct { | 17 | type GetRankListRequest struct { |
12 | RankTypeId int `json:"rankTypeId" valid:"Required"` //榜单类型编号(赛季榜、年榜) | 18 | RankTypeId int `json:"rankTypeId" valid:"Required"` //榜单类型编号(赛季榜、年榜) |
@@ -16,14 +22,14 @@ type GetRankListRequest struct { | @@ -16,14 +22,14 @@ type GetRankListRequest struct { | ||
16 | PageSize int `json:"pageSize" valid:"Required"` //每页数量 | 22 | PageSize int `json:"pageSize" valid:"Required"` //每页数量 |
17 | } | 23 | } |
18 | type GetRankListResponse struct { | 24 | type GetRankListResponse struct { |
19 | - Self RankItem `json:"self"` //自己或所在部门的排名分数 | ||
20 | - Lists []RankItem `json:"lists"` //排名列表 | 25 | + Self []RankItem `json:"self"` //自己或所在部门的排名分数 |
26 | + Lists [][]RankItem `json:"lists"` //排名列表 | ||
21 | } | 27 | } |
22 | 28 | ||
23 | type RankItem struct { | 29 | type RankItem struct { |
24 | - Name string `json:"name,omitempty"` //名称 | ||
25 | - Score string `json:"score"` //分数 | ||
26 | - Ranking string `json:"ranking"` //排名 | 30 | + Name string `json:"name,omitempty"` //名称 |
31 | + Score float64 `json:"score"` //分数 | ||
32 | + Ranking string `json:"ranking"` //排名 | ||
27 | } | 33 | } |
28 | 34 | ||
29 | /*GetRankType */ | 35 | /*GetRankType */ |
1 | package contrab | 1 | package contrab |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "encoding/json" | ||
4 | "fmt" | 5 | "fmt" |
6 | + "github.com/astaxie/beego/orm" | ||
5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 7 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
6 | "opp/internal/utils" | 8 | "opp/internal/utils" |
9 | + "opp/models" | ||
10 | + "opp/protocol" | ||
11 | + "reflect" | ||
7 | "sync/atomic" | 12 | "sync/atomic" |
8 | "time" | 13 | "time" |
9 | ) | 14 | ) |
10 | 15 | ||
11 | var ComputeRankScoreFlag int32 | 16 | var ComputeRankScoreFlag int32 |
17 | +var rankList = initRankList() | ||
18 | + | ||
19 | +func initRankList() []Rank { | ||
20 | + var list []Rank | ||
21 | + list = append(list, RankDiscovery{}) | ||
22 | + list = append(list, RankGrasp{}) | ||
23 | + list = append(list, RankComment{}) | ||
24 | + return list | ||
25 | +} | ||
12 | 26 | ||
13 | type Rank interface { | 27 | type Rank interface { |
14 | RankUser(o RankOption) (error, RankResult) | 28 | RankUser(o RankOption) (error, RankResult) |
@@ -16,16 +30,17 @@ type Rank interface { | @@ -16,16 +30,17 @@ type Rank interface { | ||
16 | } | 30 | } |
17 | 31 | ||
18 | type RankOption struct { | 32 | type RankOption struct { |
19 | - Type int //RankRangeType | ||
20 | - ObjectId int64 //对象id 用户编号 /部门编号 | ||
21 | - BeginTime time.Time | ||
22 | - EndTime time.Time | ||
23 | - //*model.user_rank | ||
24 | -} | ||
25 | - | ||
26 | -type RankResult struct { | ||
27 | - //Params map[string]interface{} | 33 | + CompanyId int //公司编号 |
34 | + RankTypeId int //榜单类型编号 | ||
35 | + RankRangeId int //榜单范围编号 | ||
36 | + RankPeriodId int //赛季周期编号 | ||
37 | + Type int //Relation类型 | ||
38 | + RelationId int64 //对象id 用户编号 /部门编号 | ||
39 | + BeginTime time.Time | ||
40 | + EndTime time.Time | ||
41 | + Rank *models.Rank //排行榜 | ||
28 | } | 42 | } |
43 | +type RankResult struct{} | ||
29 | 44 | ||
30 | //计算排行分 | 45 | //计算排行分 |
31 | func ComputeRankScore() error { | 46 | func ComputeRankScore() error { |
@@ -45,15 +60,52 @@ func ComputeRankScore() error { | @@ -45,15 +60,52 @@ func ComputeRankScore() error { | ||
45 | 60 | ||
46 | return computeRankScore() | 61 | return computeRankScore() |
47 | } | 62 | } |
48 | - | ||
49 | -func computeRankScore() error { | 63 | +func computeRankScore() (err error) { |
50 | var ( | 64 | var ( |
51 | - //rankList []Rank = initRankList() | 65 | + periods []*models.RankPeriod |
66 | + rankRanges []*models.RankRange | ||
67 | + rankRangeDatas []*models.RankRangeData | ||
52 | ) | 68 | ) |
53 | - //1.从rank_period 查询进行中的赛季 | 69 | + defer func() { |
70 | + if p := recover(); p != nil { | ||
71 | + log.Error(p) | ||
72 | + } | ||
73 | + }() | ||
74 | + //1.l 查询进行中的赛季 | ||
75 | + if periods, err = models.GetRankPeriods([]int{protocol.RankPeriodBegin}); err != nil { | ||
76 | + return | ||
77 | + } | ||
54 | //2.查询对应 rank_type_id 的rank_data | 78 | //2.查询对应 rank_type_id 的rank_data |
55 | - //按类型 | ||
56 | - //3.查询用户列表/部门列表 | 79 | + for i := range periods { |
80 | + period := periods[i] | ||
81 | + if rankRanges, err = models.GetRankRanges(period.CompanyId); err == orm.ErrNoRows { | ||
82 | + continue | ||
83 | + } | ||
84 | + //所有部门 | ||
85 | + | ||
86 | + //所有用户 | ||
87 | + | ||
88 | + //按类型 | ||
89 | + //3.查询用户列表/部门列表 | ||
90 | + for j := range rankRanges { | ||
91 | + var relationIds []int64 | ||
92 | + rankRange := rankRanges[j] | ||
93 | + if rankRange.Type == protocol.RankRangeTypeAllCompanyUser { | ||
94 | + | ||
95 | + } else if rankRange.Type == protocol.RankRangeTypeAllCompanyDepartment { | ||
96 | + | ||
97 | + } else { | ||
98 | + if rankRangeDatas, err = models.GetRankRangeDataList(rankRange.Id); err == orm.ErrNoRows { | ||
99 | + continue | ||
100 | + } | ||
101 | + } | ||
102 | + for k := range rankRangeDatas { | ||
103 | + relationIds = append(relationIds, int64(rankRangeDatas[k].RelationId)) | ||
104 | + } | ||
105 | + updateRankByRelationIds(relationIds, period, rankRange) | ||
106 | + } | ||
107 | + } | ||
108 | + | ||
57 | //4.调用统计接口列表 | 109 | //4.调用统计接口列表 |
58 | //5.汇聚所有的rankResult | 110 | //5.汇聚所有的rankResult |
59 | //6.查询当前user_rank是否有这条记录,比较记录里面数据是否有变化 | 111 | //6.查询当前user_rank是否有这条记录,比较记录里面数据是否有变化 |
@@ -61,6 +113,211 @@ func computeRankScore() error { | @@ -61,6 +113,211 @@ func computeRankScore() error { | ||
61 | return nil | 113 | return nil |
62 | } | 114 | } |
63 | 115 | ||
64 | -func initRankList() []Rank { | ||
65 | - return []Rank{} | 116 | +//更新排行榜按关联id |
117 | +func updateRankByRelationIds(relationIds []int64, period *models.RankPeriod, rankRange *models.RankRange) { | ||
118 | + var option RankOption | ||
119 | + for i := range relationIds { | ||
120 | + option = RankOption{ | ||
121 | + CompanyId: period.CompanyId, | ||
122 | + RankTypeId: period.RankTypeId, | ||
123 | + RankRangeId: rankRange.Id, | ||
124 | + RankPeriodId: period.Id, | ||
125 | + RelationId: relationIds[i], | ||
126 | + Type: int(rankRange.Type), | ||
127 | + } | ||
128 | + updateRank(option) | ||
129 | + } | ||
130 | + updateTotalScore(option) | ||
131 | +} | ||
132 | + | ||
133 | +//更新榜单数据 | ||
134 | +func updateRank(o RankOption) { | ||
135 | + var ( | ||
136 | + rank *models.Rank | ||
137 | + e error | ||
138 | + isNew = true | ||
139 | + rankTmp models.Rank | ||
140 | + ) | ||
141 | + if rank, e = models.GetRank(o.CompanyId, o.RankTypeId, o.RankRangeId, o.RankPeriodId, o.RelationId); e != nil && e == orm.ErrNoRows { | ||
142 | + isNew = true | ||
143 | + rank = &models.Rank{ | ||
144 | + CompanyId: o.CompanyId, | ||
145 | + RankTypeId: o.RankTypeId, | ||
146 | + RankRangeId: o.RankRangeId, | ||
147 | + RankPeriodId: o.RankPeriodId, | ||
148 | + RelationId: o.RelationId, | ||
149 | + UpdateAt: time.Now(), | ||
150 | + CreateAt: time.Now(), | ||
151 | + EnableStatus: protocol.Valid, | ||
152 | + Type: int8(o.Type), | ||
153 | + } | ||
154 | + } else { | ||
155 | + rankTmp = *rank | ||
156 | + } | ||
157 | + for i := range rankList { | ||
158 | + item := rankList[i] | ||
159 | + if o.Type == protocol.RankRangeTypeAllCompanyDepartment || o.Type == protocol.RankRangeTypeAllSpecifyDepartment { | ||
160 | + item.RankDepartment(o) | ||
161 | + continue | ||
162 | + } | ||
163 | + item.RankUser(o) | ||
164 | + } | ||
165 | + if isNew { | ||
166 | + if _, e = models.AddRank(rank); e != nil { | ||
167 | + log.Error(e) | ||
168 | + } | ||
169 | + } else { | ||
170 | + //数据有变化的时候才更新到表 | ||
171 | + if !reflect.DeepEqual(rankTmp, *rank) { | ||
172 | + if e = models.UpdateRankById(rank); e != nil { | ||
173 | + log.Error(e) | ||
174 | + } | ||
175 | + } | ||
176 | + } | ||
177 | + | ||
178 | +} | ||
179 | + | ||
180 | +//更新排行榜总分 //更新总分 系数*发现分 + 系数*把握分 | ||
181 | +func updateTotalScore(o RankOption) { | ||
182 | + var ( | ||
183 | + config *models.SysConfig | ||
184 | + err error | ||
185 | + scoreConfig protocol.ScoreConfig | ||
186 | + sql = `update rank set total_score=discovery_score*%v + grasp_score*%v where | ||
187 | +company_id=%v and rank_type_id=%v and rank_period_id=%v` | ||
188 | + ) | ||
189 | + if config, err = models.GetSysConfigByCompanyId(int(o.CompanyId), models.KeyScore); err != nil { | ||
190 | + err = protocol.NewErrWithMessage(5510) | ||
191 | + log.Error(err) | ||
192 | + return | ||
193 | + } | ||
194 | + if err = json.Unmarshal([]byte(config.Content), &scoreConfig); err != nil { | ||
195 | + err = protocol.NewErrWithMessage(5510) | ||
196 | + log.Error(err) | ||
197 | + return | ||
198 | + } | ||
199 | + sql = fmt.Sprintf(sql, | ||
200 | + scoreConfig.SumScore.DiscoveryFactor, | ||
201 | + scoreConfig.SumScore.CatchFactor, o.CompanyId, o.RankTypeId, o.RankPeriodId) | ||
202 | + orm := orm.NewOrm() | ||
203 | + if err := utils.ExecuteSQLWithOrmer(orm, sql); err != nil { | ||
204 | + log.Error(err) | ||
205 | + return | ||
206 | + } | ||
207 | +} | ||
208 | + | ||
209 | +//发现计算规则 | ||
210 | +type RankDiscovery struct{} | ||
211 | + | ||
212 | +func (rank RankDiscovery) RankUser(o RankOption) (err error, result RankResult) { | ||
213 | + var ( | ||
214 | + sql = "select sum(discovery_score) score,count(0) total from chance where user_id =? and review_status=3" | ||
215 | + score float64 | ||
216 | + total int | ||
217 | + ) | ||
218 | + orm := orm.NewOrm() | ||
219 | + if err = orm.Raw(sql, o.RelationId).QueryRow(&score, &total); err != nil { | ||
220 | + log.Error(err) | ||
221 | + return | ||
222 | + } | ||
223 | + o.Rank.DiscoveryScore = score | ||
224 | + o.Rank.DiscoveryTotal = total | ||
225 | + return | ||
226 | +} | ||
227 | +func (rank RankDiscovery) RankDepartment(o RankOption) (err error, result RankResult) { | ||
228 | + var ( | ||
229 | + sql = "select sum(discovery_score) score,count(0) total from chance where department_id =? and review_status=3" | ||
230 | + score float64 | ||
231 | + total int | ||
232 | + ) | ||
233 | + orm := orm.NewOrm() | ||
234 | + if err = orm.Raw(sql, o.RelationId).QueryRow(&score, &total); err != nil { | ||
235 | + log.Error(err) | ||
236 | + return | ||
237 | + } | ||
238 | + o.Rank.DiscoveryScore = score | ||
239 | + o.Rank.DiscoveryTotal = total | ||
240 | + return | ||
241 | +} | ||
242 | + | ||
243 | +//把握分计算规则 | ||
244 | +type RankGrasp struct{} | ||
245 | + | ||
246 | +func (rank RankGrasp) RankUser(o RankOption) (err error, result RankResult) { | ||
247 | + var ( | ||
248 | + sql = `select sum(a.user_grasp_score) score from( | ||
249 | +select user_grasp_score from achievement where user_company_id=? | ||
250 | +UNION ALL | ||
251 | +select user_grasp_score from achievement_provider where user_company_id=? | ||
252 | +) a | ||
253 | +` | ||
254 | + score float64 | ||
255 | + ) | ||
256 | + orm := orm.NewOrm() | ||
257 | + if err = orm.Raw(sql, o.RelationId, o.RelationId).QueryRow(&score); err != nil { | ||
258 | + log.Error(err) | ||
259 | + return | ||
260 | + } | ||
261 | + o.Rank.GraspScore = score | ||
262 | + return | ||
263 | +} | ||
264 | +func (rank RankGrasp) RankDepartment(o RankOption) (err error, result RankResult) { | ||
265 | + var ( | ||
266 | + sql = `select sum(a.user_grasp_score) score from( | ||
267 | +select user_grasp_score from achievement where department_id=? | ||
268 | +UNION ALL | ||
269 | +select user_grasp_score from achievement_provider where department_id=? | ||
270 | +) a | ||
271 | +` | ||
272 | + score float64 | ||
273 | + ) | ||
274 | + orm := orm.NewOrm() | ||
275 | + if err = orm.Raw(sql, o.RelationId, o.RelationId).QueryRow(&score); err != nil { | ||
276 | + log.Error(err) | ||
277 | + return | ||
278 | + } | ||
279 | + o.Rank.GraspScore = score | ||
280 | + return | ||
281 | +} | ||
282 | + | ||
283 | +//评论数计算规则 | ||
284 | +type RankComment struct{} | ||
285 | + | ||
286 | +func (rank RankComment) RankUser(o RankOption) (err error, result RankResult) { | ||
287 | + var ( | ||
288 | + sql = `select count(0) total from comment where user_id=? | ||
289 | +` | ||
290 | + total int | ||
291 | + ) | ||
292 | + orm := orm.NewOrm() | ||
293 | + if err = orm.Raw(sql, o.RelationId).QueryRow(&total); err != nil { | ||
294 | + log.Error(err) | ||
295 | + return | ||
296 | + } | ||
297 | + o.Rank.CommentTotal = total | ||
298 | + return | ||
299 | +} | ||
300 | +func (rank RankComment) RankDepartment(o RankOption) (err error, result RankResult) { | ||
301 | + var ( | ||
302 | + sql = `select count(0) total from comment where user_id in (%v) | ||
303 | +` | ||
304 | + sqlUserDepartment = `select user_company_id from user_department where department_id=?` | ||
305 | + total int | ||
306 | + userIds []int | ||
307 | + ) | ||
308 | + orm := orm.NewOrm() | ||
309 | + if _, err = orm.Raw(sqlUserDepartment, o.RelationId).QueryRows(&userIds); err != nil { | ||
310 | + log.Error(err) | ||
311 | + return | ||
312 | + } | ||
313 | + if len(userIds) == 0 { | ||
314 | + return | ||
315 | + } | ||
316 | + sql = fmt.Sprintf(sql, utils.JoinInts(userIds, ",")) | ||
317 | + if err = orm.Raw(sql).QueryRow(&total); err != nil { | ||
318 | + log.Error(err) | ||
319 | + return | ||
320 | + } | ||
321 | + o.Rank.CommentTotal = total | ||
322 | + return | ||
66 | } | 323 | } |
-
请 注册 或 登录 后发表评论