作者 yangfu

表彰

1 [dev] 1 [dev]
2 #数据库相关 2 #数据库相关
3 mysql_user = "${MYSQL_USER||root}" 3 mysql_user = "${MYSQL_USER||root}"
4 -mysql_password = "${MYSQL_PASSWORD||123456}"  
5 -mysql_host = "${MYSQL_HOST||192.168.100.102}" 4 +mysql_password = "${MYSQL_PASSWORD||sutianxia2015}"
  5 +mysql_host = "${MYSQL_HOST||115.29.205.99}"
6 mysql_port = "${MYSQL_PORT||3306}" 6 mysql_port = "${MYSQL_PORT||3306}"
7 mysql_db_name = "${MYSQL_DB_NAME||opportunity}" 7 mysql_db_name = "${MYSQL_DB_NAME||opportunity}"
8 8
  1 +package v1
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
  6 + "opp/controllers"
  7 + "opp/protocol"
  8 + "opp/services/commend"
  9 +)
  10 +
  11 +type CommendController struct {
  12 + controllers.BaseController
  13 +}
  14 +
  15 +//Commend
  16 +// @router /company [post]
  17 +func (this *CommendController) Company() {
  18 + var msg *protocol.ResponseMessage
  19 + defer func() {
  20 + this.Resp(msg)
  21 + }()
  22 + var request *protocol.CommendRequest
  23 + if err := json.Unmarshal(this.ByteBody, &request); err != nil {
  24 + log.Error(err)
  25 + msg = protocol.BadRequestParam(1)
  26 + return
  27 + }
  28 + if b, m := this.Valid(request); !b {
  29 + msg = m
  30 + return
  31 + }
  32 + header := controllers.GetRequestHeader(this.Ctx)
  33 + msg = protocol.NewReturnResponse(commend.Commend(header, request))
  34 +}
@@ -7,6 +7,7 @@ require ( @@ -7,6 +7,7 @@ require (
7 github.com/go-sql-driver/mysql v1.4.1 7 github.com/go-sql-driver/mysql v1.4.1
8 github.com/gorilla/websocket v1.4.1 8 github.com/gorilla/websocket v1.4.1
9 github.com/prometheus/client_golang v1.1.0 9 github.com/prometheus/client_golang v1.1.0
  10 + github.com/prometheus/common v0.6.0
10 github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect 11 github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
11 gitlab.fjmaimaimai.com/mmm-go/gocomm v0.0.1 12 gitlab.fjmaimaimai.com/mmm-go/gocomm v0.0.1
12 google.golang.org/appengine v1.6.2 // indirect 13 google.golang.org/appengine v1.6.2 // indirect
  1 +package repository
  2 +
  3 +import "opp/models"
  4 +
  5 +type ICommendRepository interface {
  6 + GetCommends(companyId int, llastId int, pageSize int) (v []*models.Commend, total int, err error)
  7 +}
  8 +
  9 +var _ ICommendRepository = (*CommendRepository)(nil)
  10 +
  11 +type CommendRepository struct{}
  12 +
  13 +func (r *CommendRepository) GetCommends(companyId int, lastId int, pageSize int) (v []*models.Commend, total int, err error) {
  14 + return models.GetCommends(companyId, lastId, pageSize)
  15 +}
  1 +package repository
  2 +
  3 +import "opp/models"
  4 +
  5 +type ICompanyRepository interface {
  6 + GetCompanyById(companyId int64) (v *models.Company, err error)
  7 +}
  8 +
  9 +var _ ICompanyRepository = (*CompanyRepository)(nil)
  10 +
  11 +type CompanyRepository struct{}
  12 +
  13 +func (r *CompanyRepository) GetCompanyById(companyId int64) (v *models.Company, err error) {
  14 + return models.GetCompanyById(companyId)
  15 +}
  1 +package repository
  2 +
  3 +import "opp/models"
  4 +
  5 +type IDepartmentRepository interface {
  6 + GetDepartmentById(companyId int) (v *models.Department, err error)
  7 +}
  8 +
  9 +var _ IDepartmentRepository = (*DepartmentRepository)(nil)
  10 +
  11 +type DepartmentRepository struct{}
  12 +
  13 +func (r *DepartmentRepository) GetDepartmentById(id int) (v *models.Department, err error) {
  14 + return models.GetDepartmentById(id)
  15 +}
  1 +package repository
  2 +
  3 +import "opp/models"
  4 +
  5 +type IPositionRepository interface {
  6 + GetPositionById(companyId int) (v *models.Position, err error)
  7 +}
  8 +
  9 +var _ IPositionRepository = (*PositionRepository)(nil)
  10 +
  11 +type PositionRepository struct{}
  12 +
  13 +func (r *PositionRepository) GetPositionById(id int) (v *models.Position, err error) {
  14 + return models.GetPositionById(id)
  15 +}
@@ -4,9 +4,13 @@ import "sync" @@ -4,9 +4,13 @@ import "sync"
4 4
5 //全局 5 //全局
6 var ( 6 var (
7 - once sync.Once  
8 - User IUserRepository  
9 - UserAuth IUserAuthRepository 7 + once sync.Once
  8 + User IUserRepository
  9 + UserAuth IUserAuthRepository
  10 + Commend ICommendRepository
  11 + Company ICompanyRepository
  12 + Department IDepartmentRepository
  13 + Position IPositionRepository
10 ) 14 )
11 15
12 func init() { 16 func init() {
@@ -16,6 +20,10 @@ func init() { @@ -16,6 +20,10 @@ func init() {
16 func InitRepository() { 20 func InitRepository() {
17 User = &UserRepository{} 21 User = &UserRepository{}
18 UserAuth = &UserAuthRepository{} 22 UserAuth = &UserAuthRepository{}
  23 + Commend = &CommendRepository{}
  24 + Company = &CompanyRepository{}
  25 + Department = &DepartmentRepository{}
  26 + Position = &PositionRepository{}
19 } 27 }
20 28
21 func InitRepositoryMock() { 29 func InitRepositoryMock() {
@@ -28,7 +28,7 @@ type User struct { @@ -28,7 +28,7 @@ type User struct {
28 } 28 }
29 29
30 func (t *User) TableName() string { 30 func (t *User) TableName() string {
31 - return "users" 31 + return "user"
32 } 32 }
33 33
34 func init() { 34 func init() {
  1 +package protocol
  2 +
  3 +import "opp/models"
  4 +
  5 +//聚合数据
  6 +
  7 +//用户基础聚合
  8 +type UserBaseInfoAggregation struct {
  9 + User *models.User
  10 + Company *models.Company
  11 + Department *models.Department
  12 + Position *models.Position
  13 +}
  1 +package protocol
  2 +
  3 +/*公司表彰*/
  4 +type CommendRequest struct {
  5 + LastId int `json:"lastId"`
  6 + PageSize int `json:"pageSize" valid:"Required"`
  7 +}
  8 +
  9 +type CommendResponse struct {
  10 + Lists []CommendInfo `json:"lists"`
  11 + Total int `json:"total"`
  12 +}
  13 +
  14 +type CommendInfo struct {
  15 + Id int64 `json:"cid"` //表彰编号
  16 + Content string `json:"content"` //表彰内容
  17 + Company string `json:"company"` //公司名
  18 + CommendAt int64 `json:"getTime"` //表彰时间
  19 + Honored HonoredUserInfo `json:"honored"` //证书获得者 信息
  20 +}
  21 +
  22 +type HonoredUserInfo struct {
  23 + UserId int64 `json:"uid"` //用户id
  24 + NickName string `json:"uname"` //用户名
  25 + Department string `json:"department"` //部门
  26 + Position string `json:"position"` //岗位
  27 +}
1 package protocol 1 package protocol
2 2
  3 +import "github.com/prometheus/common/log"
  4 +
3 var errmessge ErrorMap = map[int]string{ 5 var errmessge ErrorMap = map[int]string{
4 1: "系统异常", 6 1: "系统异常",
5 101: "clientId或clientSecret无效", 7 101: "clientId或clientSecret无效",
@@ -29,6 +31,8 @@ func NewReturnResponse(data interface{}, eRR error) *ResponseMessage { @@ -29,6 +31,8 @@ func NewReturnResponse(data interface{}, eRR error) *ResponseMessage {
29 msg = NewMesage(0) 31 msg = NewMesage(0)
30 msg.Data = data 32 msg.Data = data
31 return msg 33 return msg
  34 + } else {
  35 + log.Error("sys error:", eRR)
32 } 36 }
33 // fmt.Println("日志:" + eRR.Error()) 37 // fmt.Println("日志:" + eRR.Error())
34 if x, ok := eRR.(CustomErrParse); ok { 38 if x, ok := eRR.(CustomErrParse); ok {
@@ -47,6 +47,14 @@ func init() { @@ -47,6 +47,14 @@ func init() {
47 MethodParams: param.Make(), 47 MethodParams: param.Make(),
48 Params: nil}) 48 Params: nil})
49 49
  50 + beego.GlobalControllerRouter["opp/controllers/v1:CommendController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:CommendController"],
  51 + beego.ControllerComments{
  52 + Method: "Company",
  53 + Router: `/company`,
  54 + AllowHTTPMethods: []string{"post"},
  55 + MethodParams: param.Make(),
  56 + Params: nil})
  57 +
50 beego.GlobalControllerRouter["opp/controllers/v1:UploadController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:UploadController"], 58 beego.GlobalControllerRouter["opp/controllers/v1:UploadController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:UploadController"],
51 beego.ControllerComments{ 59 beego.ControllerComments{
52 Method: "Image", 60 Method: "Image",
@@ -15,6 +15,7 @@ func init() { @@ -15,6 +15,7 @@ func init() {
15 beego.NSNamespace("auth", beego.NSInclude(&v1.AuthController{})), 15 beego.NSNamespace("auth", beego.NSInclude(&v1.AuthController{})),
16 beego.NSNamespace("upload", beego.NSInclude(&v1.UploadController{})), 16 beego.NSNamespace("upload", beego.NSInclude(&v1.UploadController{})),
17 beego.NSNamespace("version", beego.NSInclude(&v1.VersionController{})), 17 beego.NSNamespace("version", beego.NSInclude(&v1.VersionController{})),
  18 + beego.NSNamespace("commend", beego.NSInclude(&v1.CommendController{})),
18 ) 19 )
19 beego.AddNamespace(nsV1) 20 beego.AddNamespace(nsV1)
20 beego.SetStaticPath("/file/ab", beego.AppConfig.String("source_path")) 21 beego.SetStaticPath("/file/ab", beego.AppConfig.String("source_path"))
  1 +package agg
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
  5 + "opp/internal/repository"
  6 + "opp/protocol"
  7 + "sync"
  8 +)
  9 +
  10 +func GetUserBaseInfo(uid int64) (v *protocol.UserBaseInfoAggregation, err error) {
  11 + v = &protocol.UserBaseInfoAggregation{}
  12 + var wg sync.WaitGroup
  13 + if v.User, err = repository.User.GetUsersById(uid); err != nil {
  14 + log.Error(err)
  15 + return
  16 + }
  17 + wg.Add(3)
  18 +
  19 + go func() {
  20 + defer wg.Done()
  21 + if v.Company, err = repository.Company.GetCompanyById(int64(v.User.CompanyId)); err != nil {
  22 + log.Error(err)
  23 + return
  24 + }
  25 + }()
  26 +
  27 + go func() {
  28 + defer wg.Done()
  29 + if v.Department, err = repository.Department.GetDepartmentById(v.User.DepartmentId); err != nil {
  30 + log.Error(err)
  31 + return
  32 + }
  33 + }()
  34 +
  35 + go func() {
  36 + defer wg.Done()
  37 + if v.Position, err = repository.Position.GetPositionById(v.User.PositionId); err != nil {
  38 + log.Error(err)
  39 + return
  40 + }
  41 + }()
  42 + wg.Wait()
  43 + return
  44 +}
  1 +package commend
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/mmm-go/gocomm/time"
  5 + "opp/internal/repository"
  6 + "opp/models"
  7 + "opp/protocol"
  8 + "opp/services/agg"
  9 +)
  10 +
  11 +func Commend(header *protocol.RequestHeader, request *protocol.CommendRequest) (rsp *protocol.CommendResponse, err error) {
  12 + var (
  13 + userBaseInfo *protocol.UserBaseInfoAggregation
  14 + user *models.User
  15 + commends []*models.Commend
  16 + )
  17 + rsp = &protocol.CommendResponse{}
  18 + user, err = repository.User.GetUsersById(header.Uid)
  19 + if err != nil {
  20 + return
  21 + }
  22 + if commends, rsp.Total, err = repository.Commend.GetCommends(user.CompanyId, request.LastId, request.PageSize); err != nil {
  23 + return
  24 + }
  25 + for i := 0; i < len(commends); i++ {
  26 + c := commends[i]
  27 + userBaseInfo, err = agg.GetUserBaseInfo(c.UserId)
  28 + if err != nil {
  29 + continue
  30 + }
  31 + user = userBaseInfo.User
  32 + cInfo := protocol.CommendInfo{
  33 + Id: c.Id,
  34 + Content: c.Content,
  35 + Company: userBaseInfo.Company.Name,
  36 + CommendAt: time.GetUnixTimeByNDayUnix(c.CommendAt.Unix(), 0),
  37 + Honored: protocol.HonoredUserInfo{
  38 + UserId: c.UserId,
  39 + NickName: user.NickName,
  40 + Department: userBaseInfo.Department.Name,
  41 + Position: userBaseInfo.Position.Name,
  42 + },
  43 + }
  44 + rsp.Lists = append(rsp.Lists, cInfo)
  45 + }
  46 + return
  47 +}