正在显示
8 个修改的文件
包含
365 行增加
和
1 行删除
| @@ -43,3 +43,5 @@ h5_host = "http://mmm-web-open-test.fjmaimaimai.com" | @@ -43,3 +43,5 @@ h5_host = "http://mmm-web-open-test.fjmaimaimai.com" | ||
| 43 | #审核中心 | 43 | #审核中心 |
| 44 | suplus_approve_host ="http://suplus-approve-dev.fjmaimaimai.com" | 44 | suplus_approve_host ="http://suplus-approve-dev.fjmaimaimai.com" |
| 45 | 45 | ||
| 46 | +#企业平台 | ||
| 47 | +BUSINESS_ADMIN_SERVICE_HOST ="${BUSINESS_ADMIN_SERVICE_HOST||http://suplus-business-admin-test.fjmaimaimai.com/}" |
| @@ -2,7 +2,7 @@ package v1 | @@ -2,7 +2,7 @@ package v1 | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "encoding/json" | 4 | "encoding/json" |
| 5 | - | 5 | + "github.com/astaxie/beego" |
| 6 | "opp/controllers" | 6 | "opp/controllers" |
| 7 | "opp/protocol" | 7 | "opp/protocol" |
| 8 | "opp/services/auth" | 8 | "opp/services/auth" |
| @@ -36,6 +36,10 @@ func (this *AuthController) Login() { | @@ -36,6 +36,10 @@ func (this *AuthController) Login() { | ||
| 36 | return | 36 | return |
| 37 | } | 37 | } |
| 38 | header := controllers.GetRequestHeader(this.Ctx) | 38 | header := controllers.GetRequestHeader(this.Ctx) |
| 39 | + if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "test" { | ||
| 40 | + msg = protocol.NewReturnResponse(auth.LoginV3(header, request)) | ||
| 41 | + return | ||
| 42 | + } | ||
| 39 | msg = protocol.NewReturnResponse(auth.Login(header, request)) | 43 | msg = protocol.NewReturnResponse(auth.Login(header, request)) |
| 40 | } | 44 | } |
| 41 | 45 |
| @@ -2,6 +2,7 @@ package v1 | @@ -2,6 +2,7 @@ package v1 | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "encoding/json" | 4 | "encoding/json" |
| 5 | + "github.com/astaxie/beego" | ||
| 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 6 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
| 6 | "opp/controllers" | 7 | "opp/controllers" |
| 7 | "opp/protocol" | 8 | "opp/protocol" |
| @@ -157,6 +158,10 @@ func (this *UserController) UserInfo() { | @@ -157,6 +158,10 @@ func (this *UserController) UserInfo() { | ||
| 157 | return | 158 | return |
| 158 | } | 159 | } |
| 159 | header := controllers.GetRequestHeader(this.Ctx) | 160 | header := controllers.GetRequestHeader(this.Ctx) |
| 161 | + if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "test" { | ||
| 162 | + msg = protocol.NewReturnResponse(user.UserInfoV3(header, request)) | ||
| 163 | + return | ||
| 164 | + } | ||
| 160 | msg = protocol.NewReturnResponse(user.UserInfo(header, request)) | 165 | msg = protocol.NewReturnResponse(user.UserInfo(header, request)) |
| 161 | } | 166 | } |
| 162 | 167 |
| @@ -94,6 +94,12 @@ spec: | @@ -94,6 +94,12 @@ spec: | ||
| 94 | value: "stdout" | 94 | value: "stdout" |
| 95 | - name: aliyun_logs_access | 95 | - name: aliyun_logs_access |
| 96 | value: " /opt/logs/app.log" | 96 | value: " /opt/logs/app.log" |
| 97 | + | ||
| 98 | + - name: BUSINESS_ADMIN_SERVICE_HOST | ||
| 99 | + valueFrom: | ||
| 100 | + configMapKeyRef: | ||
| 101 | + name: suplus-config | ||
| 102 | + key: service.businessadmin | ||
| 97 | volumes: | 103 | volumes: |
| 98 | - name: accesslogs | 104 | - name: accesslogs |
| 99 | emptyDir: {} | 105 | emptyDir: {} |
| @@ -129,3 +129,80 @@ func CheckUcenterResponse(message *protocol.Message) (err error) { | @@ -129,3 +129,80 @@ func CheckUcenterResponse(message *protocol.Message) (err error) { | ||
| 129 | } | 129 | } |
| 130 | return | 130 | return |
| 131 | } | 131 | } |
| 132 | + | ||
| 133 | +/*******************企业平台****************/ | ||
| 134 | +var MethodUserAuth = "auth/get-user-auth" | ||
| 135 | + | ||
| 136 | +//验证用户模块权限 | ||
| 137 | +func CheckUserModuleAuth(uid int64) (auth bool) { | ||
| 138 | + var req = NewRequest(fmt.Sprintf("%v%v", beego.AppConfig.String("BUSINESS_ADMIN_SERVICE_HOST"), MethodUserAuth), http.MethodPost) | ||
| 139 | + var message = &protocol.Message{} | ||
| 140 | + var request = struct { | ||
| 141 | + UserId string `json:"userId"` | ||
| 142 | + PlatformId string `json:"platformId"` | ||
| 143 | + }{UserId: fmt.Sprintf("%v", uid), PlatformId: "3"} //平台id:1素+;2问题;3机会;18价值 | ||
| 144 | + var response = struct { | ||
| 145 | + UserAuth bool `json:"userAuth"` | ||
| 146 | + }{} | ||
| 147 | + if data, err := req.ActionDefault(request, &message); err != nil { | ||
| 148 | + log.Error(err) | ||
| 149 | + return false | ||
| 150 | + } else { | ||
| 151 | + log.Debug(req.Url, string(data)) | ||
| 152 | + } | ||
| 153 | + if message.Errno != 0 { | ||
| 154 | + log.Debug("CheckUserModuleAuth :", message.Errno, message.Errmsg) | ||
| 155 | + return false | ||
| 156 | + } | ||
| 157 | + if err := json.Unmarshal(message.Data, &response); err != nil { | ||
| 158 | + log.Error(err, message, string(message.Data)) | ||
| 159 | + return | ||
| 160 | + } | ||
| 161 | + return response.UserAuth | ||
| 162 | +} | ||
| 163 | + | ||
| 164 | +type Request struct { | ||
| 165 | + HttpReq *httplib.BeegoHTTPRequest | ||
| 166 | + Url string | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +func NewRequest(url, httpMethod string) *Request { | ||
| 170 | + var ( | ||
| 171 | + httpReq *httplib.BeegoHTTPRequest | ||
| 172 | + ) | ||
| 173 | + if httpMethod == http.MethodGet { | ||
| 174 | + httpReq = httplib.Get(url) | ||
| 175 | + } else if httpMethod == http.MethodPost { | ||
| 176 | + httpReq = httplib.Post(url) | ||
| 177 | + } else if httpMethod == http.MethodPut { | ||
| 178 | + httpReq = httplib.Put(url) | ||
| 179 | + } | ||
| 180 | + ret := &Request{ | ||
| 181 | + HttpReq: httpReq, | ||
| 182 | + Url: url, | ||
| 183 | + } | ||
| 184 | + return ret | ||
| 185 | +} | ||
| 186 | + | ||
| 187 | +func (req *Request) ActionDefault(request interface{}, message interface{}) (data []byte, err error) { | ||
| 188 | + var ( | ||
| 189 | + httpRsp *http.Response | ||
| 190 | + ) | ||
| 191 | + req.HttpReq.JSONBody(request) | ||
| 192 | + req.HttpReq.Header("Content-Type", "application/json") | ||
| 193 | + if httpRsp, err = req.HttpReq.DoRequest(); err != nil { | ||
| 194 | + log.Error(err) | ||
| 195 | + return | ||
| 196 | + } | ||
| 197 | + data, err = ioutil.ReadAll(httpRsp.Body) | ||
| 198 | + defer httpRsp.Body.Close() | ||
| 199 | + if err != nil { | ||
| 200 | + log.Error(err) | ||
| 201 | + return | ||
| 202 | + } | ||
| 203 | + if err = json.Unmarshal(data, message); err != nil { | ||
| 204 | + log.Error(err) | ||
| 205 | + return | ||
| 206 | + } | ||
| 207 | + return | ||
| 208 | +} |
| @@ -15,3 +15,9 @@ func Test_UcenterIsUserExists(t *testing.T) { | @@ -15,3 +15,9 @@ func Test_UcenterIsUserExists(t *testing.T) { | ||
| 15 | log.Fatal(err) | 15 | log.Fatal(err) |
| 16 | } | 16 | } |
| 17 | } | 17 | } |
| 18 | + | ||
| 19 | +func Test_CheckUserModuleAuth(t *testing.T) { | ||
| 20 | + if ok := CheckUserModuleAuth(3649639319273472); !ok { | ||
| 21 | + t.Fatal("CheckUserModuleAuth error") | ||
| 22 | + } | ||
| 23 | +} |
| @@ -31,6 +31,142 @@ var ( | @@ -31,6 +31,142 @@ var ( | ||
| 31 | ) | 31 | ) |
| 32 | 32 | ||
| 33 | //登录 | 33 | //登录 |
| 34 | +func LoginV3(header *protocol.RequestHeader, request *protocol.LoginRequest) (rsp *protocol.LoginResponse, err error) { | ||
| 35 | + var ( | ||
| 36 | + user *models.User | ||
| 37 | + userAuth *models.UserAuth | ||
| 38 | + id = request.Uid | ||
| 39 | + getUserRequest *protocol.UCenterServerLoginRequest = &protocol.UCenterServerLoginRequest{ | ||
| 40 | + Uid: id, | ||
| 41 | + Token: request.Token, | ||
| 42 | + Type: 2, | ||
| 43 | + } | ||
| 44 | + getUserResponse *protocol.UCenterGetUserResponse | ||
| 45 | + message *protocol.Message | ||
| 46 | + company *models.Company | ||
| 47 | + companys []*models.Company | ||
| 48 | + ) | ||
| 49 | + user, err = models.GetUserByUcenterId(id) | ||
| 50 | + if err != nil { | ||
| 51 | + log.Error(err) | ||
| 52 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 53 | + return | ||
| 54 | + } | ||
| 55 | + if companys, err = models.GetCompanyByPermission(user.Id); err != nil { | ||
| 56 | + log.Error(err) | ||
| 57 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 58 | + return | ||
| 59 | + } | ||
| 60 | + if len(companys) == 0 { | ||
| 61 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 62 | + return | ||
| 63 | + } | ||
| 64 | + if !utils.ValidVersion(header.Version, protocol.RequireVersion) { | ||
| 65 | + log.Warn(fmt.Sprintf("版本不足 当前手机版本:%v 需要版本大于:%v", header.Version, protocol.RequireVersion)) | ||
| 66 | + err = protocol.NewCustomMessage(2002, "版本不足,请升级app") //账号不存在 | ||
| 67 | + return | ||
| 68 | + } | ||
| 69 | + //获取最后一次公司编号给统一用户中心 | ||
| 70 | + if u, e := models.GetUserAuthByUserId(user.Id, protocol.DeviceType); e == nil && user.UserCenterId == id { | ||
| 71 | + if company, e = models.GetCompanyById(u.CurrentCompanyId); e == nil { | ||
| 72 | + getUserRequest.CompanyId = company.UserCenterId | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + //验证 当前登录的公司是否有模块权限 | ||
| 76 | + /************后期移除************/ | ||
| 77 | + if ucIds, e := models.GetUserAllCompany(user.Id); e != nil { | ||
| 78 | + log.Error(e) | ||
| 79 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 80 | + return | ||
| 81 | + } else { | ||
| 82 | + var hasAuth bool = false | ||
| 83 | + for i := 0; i < len(ucIds); i++ { | ||
| 84 | + hasAuth = agg.CheckUserModuleAuth(ucIds[i].Id) | ||
| 85 | + if hasAuth { | ||
| 86 | + break | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | + if !hasAuth { | ||
| 90 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 91 | + return | ||
| 92 | + } | ||
| 93 | + return | ||
| 94 | + } | ||
| 95 | + /************后期移除************/ | ||
| 96 | + | ||
| 97 | + //从用户中心获取用户信息 | ||
| 98 | + if _, err = agg.RequestUserCenter(protocol.MethodServerLogin, http.MethodPost, getUserRequest, &message); err != nil { | ||
| 99 | + log.Error(err) | ||
| 100 | + return | ||
| 101 | + } | ||
| 102 | + log.Debug(fmt.Sprintf("ucenter_id:%v getuser response:", request.Uid), message.Errno, message.Errmsg) | ||
| 103 | + if message.Errno == 0 && message.Errmsg == "ok" { | ||
| 104 | + if err = message.Unmarshal(&getUserResponse); err != nil { | ||
| 105 | + log.Error(err) | ||
| 106 | + return | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + switch message.Errno { | ||
| 110 | + case -1: | ||
| 111 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 112 | + return | ||
| 113 | + case 0: | ||
| 114 | + goto Success | ||
| 115 | + case 2002: | ||
| 116 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 117 | + return | ||
| 118 | + case 10001: | ||
| 119 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 120 | + return | ||
| 121 | + case 10003: | ||
| 122 | + err = protocol.NewErrWithMessage(4140, err) //账号不存在 | ||
| 123 | + return | ||
| 124 | + default: | ||
| 125 | + log.Error("error_no:%v msg:%v", message.Errno, message.Errmsg) | ||
| 126 | + err = protocol.NewErrWithMessage(4140, err) | ||
| 127 | + return | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | +Success: | ||
| 131 | + { | ||
| 132 | + userAuth, err = models.GetUserAuthByUserId(user.Id, 1) | ||
| 133 | + if err != nil { | ||
| 134 | + if err == orm.ErrNoRows { | ||
| 135 | + err = nil | ||
| 136 | + userAuth = &models.UserAuth{ | ||
| 137 | + UserId: user.Id, | ||
| 138 | + DeviceType: 1, //int8(header.DeviceType), | ||
| 139 | + } | ||
| 140 | + models.AddUserAuth(userAuth) | ||
| 141 | + } else { | ||
| 142 | + log.Error(err) | ||
| 143 | + return | ||
| 144 | + } | ||
| 145 | + } | ||
| 146 | + userAuth.AuthCode = uid.NewV1().StringNoDash() | ||
| 147 | + | ||
| 148 | + /*更新用户信息*/ | ||
| 149 | + user.CsAccount = getUserResponse.CustomerAccount | ||
| 150 | + user.ImToken = getUserResponse.ImToken | ||
| 151 | + user.Icon = getUserResponse.Avatar | ||
| 152 | + user.NickName = getUserResponse.NickName | ||
| 153 | + user.Accid = getUserResponse.Accid | ||
| 154 | + user.UserCenterId = getUserResponse.Id | ||
| 155 | + if err = models.UpdateUsersById(user); err != nil { | ||
| 156 | + log.Error(err) | ||
| 157 | + return | ||
| 158 | + } | ||
| 159 | + userAuth.AuthCodeExp = time.Now().Add(time.Second * protocol.TokenExpire) | ||
| 160 | + if err = models.UpdateUserAuthById(userAuth); err != nil { | ||
| 161 | + return | ||
| 162 | + } | ||
| 163 | + rsp = &protocol.LoginResponse{AuthCode: userAuth.AuthCode} | ||
| 164 | + } | ||
| 165 | + err = protocol.NewSuccessWithMessage("登录成功") | ||
| 166 | + return | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +//登录 | ||
| 34 | func Login(header *protocol.RequestHeader, request *protocol.LoginRequest) (rsp *protocol.LoginResponse, err error) { | 170 | func Login(header *protocol.RequestHeader, request *protocol.LoginRequest) (rsp *protocol.LoginResponse, err error) { |
| 35 | var ( | 171 | var ( |
| 36 | user *models.User | 172 | user *models.User |
| @@ -248,6 +248,10 @@ func SwitchCompany(header *protocol.RequestHeader, request *protocol.SwitchCompa | @@ -248,6 +248,10 @@ func SwitchCompany(header *protocol.RequestHeader, request *protocol.SwitchCompa | ||
| 248 | err = protocol.NewErrWithMessage(4201) //找不到这家公司 | 248 | err = protocol.NewErrWithMessage(4201) //找不到这家公司 |
| 249 | return | 249 | return |
| 250 | } | 250 | } |
| 251 | + if hasAuth := agg.CheckUserModuleAuth(userCompany.Id); !hasAuth { | ||
| 252 | + err = protocol.NewErrWithMessage(2002) //找不到这家公司 | ||
| 253 | + return | ||
| 254 | + } | ||
| 251 | if auth, err = models.GetUserAuthByUserId(header.Uid, protocol.DeviceType); err != nil { | 255 | if auth, err = models.GetUserAuthByUserId(header.Uid, protocol.DeviceType); err != nil { |
| 252 | log.Error(err) | 256 | log.Error(err) |
| 253 | return | 257 | return |
| @@ -372,6 +376,130 @@ func UserInfo(header *protocol.RequestHeader, request *protocol.UserInfoRequest) | @@ -372,6 +376,130 @@ func UserInfo(header *protocol.RequestHeader, request *protocol.UserInfoRequest) | ||
| 372 | return | 376 | return |
| 373 | } | 377 | } |
| 374 | 378 | ||
| 379 | +//用户信息 | ||
| 380 | +func UserInfoV3(header *protocol.RequestHeader, request *protocol.UserInfoRequest) (rsp *protocol.UserInfoResponse, err error) { | ||
| 381 | + var ( | ||
| 382 | + companyId int64 | ||
| 383 | + userCompany *models.UserCompany | ||
| 384 | + userAuth *models.UserAuth | ||
| 385 | + userBaseAgg *protocol.UserBaseInfoAggregation | ||
| 386 | + companys []*models.Company | ||
| 387 | + userCompanys []*models.UserCompany | ||
| 388 | + tmpCompanys []*models.Company = make([]*models.Company, 0) | ||
| 389 | + defaultUserId int64 | ||
| 390 | + ) | ||
| 391 | + if companys, err = models.GetCompanyByPermission(header.Uid); err != nil { | ||
| 392 | + log.Error(err) | ||
| 393 | + return | ||
| 394 | + } | ||
| 395 | + if userCompanys, err = models.GetUserAllCompany(header.Uid); err != nil { | ||
| 396 | + log.Error(err) | ||
| 397 | + return | ||
| 398 | + } | ||
| 399 | + for i := range userCompanys { | ||
| 400 | + if hasAuth := agg.CheckUserModuleAuth(userCompanys[i].Id); !hasAuth { | ||
| 401 | + log.Debug("检查公司权限:", userCompanys[i].Id, userCompanys[i].CompanyId, "无模块权限") | ||
| 402 | + continue | ||
| 403 | + } | ||
| 404 | + if companyId == 0 { //取默认一个有权限的公司 | ||
| 405 | + companyId = userCompanys[i].CompanyId | ||
| 406 | + defaultUserId = userCompanys[i].Id | ||
| 407 | + } | ||
| 408 | + for j := 0; j < len(companys); j++ { | ||
| 409 | + if userCompanys[i].CompanyId == companys[j].Id { | ||
| 410 | + tmpCompanys = append(tmpCompanys, companys[j]) | ||
| 411 | + break | ||
| 412 | + } | ||
| 413 | + } | ||
| 414 | + if userCompanys[i].Id == header.UserId && userCompanys[i].CompanyId == header.CompanyId { | ||
| 415 | + companyId = header.CompanyId | ||
| 416 | + break | ||
| 417 | + } | ||
| 418 | + } | ||
| 419 | + //公司列表是所有有权限的公司,企业平台 | ||
| 420 | + companys = tmpCompanys | ||
| 421 | + if len(companys) == 0 { | ||
| 422 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 423 | + return | ||
| 424 | + } | ||
| 425 | + if companyId == 0 { | ||
| 426 | + if userCompany, err = models.GetUserCompanysFirst(header.Uid); err != nil { | ||
| 427 | + log.Error(err) | ||
| 428 | + return | ||
| 429 | + } | ||
| 430 | + if userAuth, err = models.GetUserAuthByUserId(header.Uid, protocol.DeviceType); err != nil { | ||
| 431 | + log.Error(err) | ||
| 432 | + return | ||
| 433 | + } | ||
| 434 | + if err = utils.UpdateTableByMap(&models.UserAuth{Id: userAuth.Id}, map[string]interface{}{ | ||
| 435 | + "CurrentCompanyId": userCompany.CompanyId, "CurrentUserCompanyId": userCompany.Id}); err != nil { | ||
| 436 | + log.Error(err) | ||
| 437 | + return | ||
| 438 | + } | ||
| 439 | + companyId = int64(userCompany.CompanyId) | ||
| 440 | + header.UserId = userCompany.Id | ||
| 441 | + } | ||
| 442 | + if header.UserId == 0 { | ||
| 443 | + header.UserId = defaultUserId | ||
| 444 | + } | ||
| 445 | + if userBaseAgg, err = agg.GetUserBaseInfoAggregation(header.UserId, companyId); err != nil { | ||
| 446 | + return | ||
| 447 | + } | ||
| 448 | + rsp = &protocol.UserInfoResponse{ | ||
| 449 | + User: protocol.User{ | ||
| 450 | + UserId: header.UserId, | ||
| 451 | + Name: userBaseAgg.User.NickName, | ||
| 452 | + Phone: userBaseAgg.User.Phone, | ||
| 453 | + Image: protocol.Picture{ | ||
| 454 | + Path: userBaseAgg.User.Icon, | ||
| 455 | + H: 0, | ||
| 456 | + W: 0, | ||
| 457 | + }, | ||
| 458 | + ImToken: userBaseAgg.User.ImToken, | ||
| 459 | + CompanyId: int(companyId), | ||
| 460 | + Company: protocol.Company{ | ||
| 461 | + Id: userBaseAgg.Company.Id, | ||
| 462 | + Name: userBaseAgg.Company.Name, | ||
| 463 | + CId: userBaseAgg.Company.UserCenterId, | ||
| 464 | + }, | ||
| 465 | + Departments: make([]protocol.Dep, 0), | ||
| 466 | + Positions: make([]protocol.Job, 0), | ||
| 467 | + }, | ||
| 468 | + } | ||
| 469 | + for i := range companys { | ||
| 470 | + rsp.User.Companys = append(rsp.User.Companys, protocol.Company{ | ||
| 471 | + Id: companys[i].Id, | ||
| 472 | + Name: companys[i].Name, | ||
| 473 | + CId: companys[i].UserCenterId, | ||
| 474 | + }) | ||
| 475 | + } | ||
| 476 | + newDep := func(item *protocol.Department) protocol.Dep { | ||
| 477 | + return protocol.Dep{ | ||
| 478 | + Id: item.DepartmentId, | ||
| 479 | + Name: item.Name, | ||
| 480 | + } | ||
| 481 | + } | ||
| 482 | + newPos := func(item *protocol.Position) protocol.Job { | ||
| 483 | + return protocol.Job{ | ||
| 484 | + Id: item.PositionId, | ||
| 485 | + Name: item.Name, | ||
| 486 | + } | ||
| 487 | + } | ||
| 488 | + for i := range userBaseAgg.Departments { | ||
| 489 | + rsp.User.Departments = append(rsp.User.Departments, newDep(userBaseAgg.Departments[i])) | ||
| 490 | + } | ||
| 491 | + for i := range userBaseAgg.Positions { | ||
| 492 | + rsp.User.Positions = append(rsp.User.Positions, newPos(userBaseAgg.Positions[i])) | ||
| 493 | + } | ||
| 494 | + if topDep := agg.GetTopDepartment(userBaseAgg.Departments); topDep.DepartmentId != 0 { | ||
| 495 | + rsp.User.Department = newDep(topDep) | ||
| 496 | + } | ||
| 497 | + if topPos := agg.GetTopPosition(userBaseAgg.Positions); topPos.PositionId != 0 { | ||
| 498 | + rsp.User.Position = newPos(topPos) | ||
| 499 | + } | ||
| 500 | + return | ||
| 501 | +} | ||
| 502 | + | ||
| 375 | //用户中心-统计信息 | 503 | //用户中心-统计信息 |
| 376 | func UserStatistics(header *protocol.RequestHeader, request *protocol.UserStatisticsRequest) (rsp *protocol.UserStatisticsResponse, err error) { | 504 | func UserStatistics(header *protocol.RequestHeader, request *protocol.UserStatisticsRequest) (rsp *protocol.UserStatisticsResponse, err error) { |
| 377 | var ( | 505 | var ( |
-
请 注册 或 登录 后发表评论