作者 tangxvhui

bug

修复
@@ -2,6 +2,7 @@ package controllers @@ -2,6 +2,7 @@ package controllers
2 2
3 import ( 3 import (
4 "encoding/json" 4 "encoding/json"
  5 + "fmt"
5 "oppmg/common/log" 6 "oppmg/common/log"
6 "oppmg/models" 7 "oppmg/models"
7 "oppmg/protocol" 8 "oppmg/protocol"
@@ -59,6 +60,26 @@ func (c AchievementController) AddAchievement() { @@ -59,6 +60,26 @@ func (c AchievementController) AddAchievement() {
59 msg = protocol.BadRequestParam("10108") 60 msg = protocol.BadRequestParam("10108")
60 return 61 return
61 } 62 }
  63 + if param.GraspScore < 0 || param.GraspScore > 100 {
  64 + log.Error(" param.GraspScore < 0 || param.GraspScore > 100 ")
  65 + msg = protocol.BadRequestParam("10121")
  66 + return
  67 + }
  68 + if param.UserGraspScore < 0 || param.UserGraspScore > 100 {
  69 + log.Error("param.UserGraspScore < 0 || param.UserGraspScore > 100")
  70 + msg = protocol.BadRequestParam("10122")
  71 + }
  72 + var providerScore float64
  73 + for _, v := range param.Provider {
  74 + providerScore += v.UserGraspScore
  75 + }
  76 + remainScore := param.GraspScore - param.UserGraspScore - providerScore
  77 + if remainScore < 0 {
  78 + log.Error("分配的总分不可大于把握分")
  79 + msg = protocol.BadRequestParam("10122")
  80 + return
  81 + }
  82 +
62 companyid := c.GetCompanyId() 83 companyid := c.GetCompanyId()
63 err := serveachievement.AddAchievement(&param, companyid) 84 err := serveachievement.AddAchievement(&param, companyid)
64 msg = protocol.NewReturnResponse(nil, err) 85 msg = protocol.NewReturnResponse(nil, err)
@@ -204,3 +225,22 @@ func (c AchievementController) ForbidAllowAchievement() { @@ -204,3 +225,22 @@ func (c AchievementController) ForbidAllowAchievement() {
204 msg = protocol.NewReturnResponse(nil, nil) 225 msg = protocol.NewReturnResponse(nil, nil)
205 return 226 return
206 } 227 }
  228 +
  229 +//AchievementScoreRemain 获取福利池分数
  230 +//@router /achievement/remain/score
  231 +func (c AchievementController) AchievementScoreRemain() {
  232 + var msg *protocol.ResponseMessage
  233 + defer func() {
  234 + c.ResposeJson(msg)
  235 + }()
  236 + companyid := c.GetCompanyId()
  237 + scoreData, err := models.GetAchevementScoreByCompanyId(companyid)
  238 + rspData := map[string]string{
  239 + "score": "0",
  240 + }
  241 + if err == nil {
  242 + rspData["score"] = fmt.Sprintf("%.1f", scoreData.GraspScoreRemain)
  243 + }
  244 + msg = protocol.NewReturnResponse(rspData, nil)
  245 + return
  246 +}
@@ -134,6 +134,46 @@ func (c *AuthController) LoginSms() { @@ -134,6 +134,46 @@ func (c *AuthController) LoginSms() {
134 return 134 return
135 } 135 }
136 136
  137 +// LoginSecret 使用秘钥进行登录
  138 +// @router /login [post]
  139 +func (c *AuthController) LoginSecretKey() {
  140 + var msg *protocol.ResponseMessage
  141 + defer func() {
  142 + c.ResposeJson(msg)
  143 + }()
  144 + type Parameter struct {
  145 + Secret string `json:"secret"`
  146 + }
  147 + var param Parameter
  148 + if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
  149 + log.Error("json 解析失败", err)
  150 + msg = protocol.BadRequestParam("1")
  151 + return
  152 + }
  153 + if len(param.Secret) == 0 {
  154 + msg = protocol.BadRequestParam("10080")
  155 + return
  156 + }
  157 + logintoken, err := serveauth.LoginAuthBySecretKey(param.Secret)
  158 + if err != nil {
  159 + msg = protocol.NewReturnResponse(nil, err)
  160 + return
  161 + }
  162 + err = serveauth.ResetLoginToken(logintoken)
  163 + if err != nil {
  164 + log.Error("token 信息记录数据库失败")
  165 + }
  166 + err = serveauth.ResetLoginTokenRedis(logintoken)
  167 + if err != nil {
  168 + log.Error("token 信息记录redis失败")
  169 + }
  170 + data := protocol.ResponseLogin{
  171 + Access: logintoken,
  172 + }
  173 + msg = protocol.NewReturnResponse(data, nil)
  174 + return
  175 +}
  176 +
137 //SmsCode 发送验证码短信 177 //SmsCode 发送验证码短信
138 //@router /auth/smscode 178 //@router /auth/smscode
139 func (c *AuthController) SmsCode() { 179 func (c *AuthController) SmsCode() {
@@ -232,6 +232,7 @@ func (c *CommonController) SelectChanceList() { @@ -232,6 +232,7 @@ func (c *CommonController) SelectChanceList() {
232 }() 232 }()
233 type Parameter struct { 233 type Parameter struct {
234 protocol.RequestPageInfo 234 protocol.RequestPageInfo
  235 + SearchType int `json:"search_type"` //1:根据机会编码搜索 2:根据提交人搜索
235 ChanceCode string `json:"chance_code"` 236 ChanceCode string `json:"chance_code"`
236 } 237 }
237 var param Parameter 238 var param Parameter
@@ -241,7 +242,7 @@ func (c *CommonController) SelectChanceList() { @@ -241,7 +242,7 @@ func (c *CommonController) SelectChanceList() {
241 return 242 return
242 } 243 }
243 companyid := c.GetCompanyId() 244 companyid := c.GetCompanyId()
244 - listData := servecommon.SelectChanceList(param.PageIndex, param.PageSize, companyid, param.ChanceCode) 245 + listData := servecommon.SelectChanceList(param.PageIndex, param.PageSize, companyid, param.SearchType, param.ChanceCode)
245 msg = protocol.NewPageDataResponse(listData, nil) 246 msg = protocol.NewPageDataResponse(listData, nil)
246 return 247 return
247 } 248 }
  1 +package models
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "github.com/astaxie/beego/orm"
  7 +)
  8 +
  9 +type AchevementScore struct {
  10 + Id int64 `orm:"column(id);auto"`
  11 + GraspScoreRemain float64 `orm:"column(grasp_score_remain);null;digits(10);decimals(1)" description:"福利池总分 ,来源achievement中的评分"`
  12 + CompanyId int64 `orm:"column(company_id)"`
  13 + CreateAt time.Time `orm:"column(create_at);type(timestamp);null"`
  14 + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null"`
  15 +}
  16 +
  17 +func (t *AchevementScore) TableName() string {
  18 + return "achevement_score"
  19 +}
  20 +
  21 +func init() {
  22 + orm.RegisterModel(new(AchevementScore))
  23 +}
  24 +
  25 +// AddAchevementScore insert a new AchevementScore into database and returns
  26 +// last inserted Id on success.
  27 +func AddAchevementScore(m *AchevementScore, o orm.Ormer) (id int64, err error) {
  28 + id, err = o.Insert(m)
  29 + return
  30 +}
  31 +
  32 +// GetAchevementScoreById retrieves AchevementScore by Id. Returns error if
  33 +// Id doesn't exist
  34 +func GetAchevementScoreById(id int64) (v *AchevementScore, err error) {
  35 + o := orm.NewOrm()
  36 + v = &AchevementScore{Id: id}
  37 + if err = o.Read(v); err == nil {
  38 + return v, nil
  39 + }
  40 + return nil, err
  41 +}
  42 +
  43 +func GetAchevementScoreByCompanyId(companyid int64) (v *AchevementScore, err error) {
  44 + o := orm.NewOrm()
  45 + v = &AchevementScore{}
  46 + ok := o.QueryTable(&AchevementScore{}).
  47 + Filter("company_id", companyid).
  48 + Exist()
  49 + if !ok {
  50 + return v, nil
  51 + }
  52 + err = o.QueryTable(&AchevementScore{}).
  53 + Filter("company_id", companyid).
  54 + One(v)
  55 + return v, err
  56 +}
  57 +
  58 +func IncreaseAchevementScore(companyid int64, addScore float64, o orm.Ormer) error {
  59 + v := &AchevementScore{}
  60 + ok := o.QueryTable(&AchevementScore{}).
  61 + Filter("company_id", companyid).
  62 + Exist()
  63 + if ok {
  64 + //存在
  65 + _, err := o.QueryTable(&AchevementScore{}).
  66 + Filter("company_id", companyid).
  67 + Update(orm.Params{
  68 + "grasp_score_remain": orm.ColValue(orm.ColAdd, addScore),
  69 + "update_time": time.Now().String(),
  70 + })
  71 + return err
  72 + }
  73 + //不存在
  74 + v.CompanyId = companyid
  75 + v.GraspScoreRemain = addScore
  76 + v.CreateAt = time.Now()
  77 + _, err := o.Insert(v)
  78 + return err
  79 +}
@@ -101,7 +101,7 @@ type SelectChanceListItem struct { @@ -101,7 +101,7 @@ type SelectChanceListItem struct {
101 AuditTemplateId int64 `json:"audit_template_id" orm:"column(audit_template_id)"` 101 AuditTemplateId int64 `json:"audit_template_id" orm:"column(audit_template_id)"`
102 AuditTemplateName string `json:"audit_template_name" orm:"-"` 102 AuditTemplateName string `json:"audit_template_name" orm:"-"`
103 UserId int64 `json:"user_id" orm:"column(user_id)"` 103 UserId int64 `json:"user_id" orm:"column(user_id)"`
104 - UserName string `json:"user_name" orm:"column(-)"` 104 + UserName string `json:"user_name" orm:"column(nick_name)"`
105 Code string `json:"code" orm:"column(code)"` 105 Code string `json:"code" orm:"column(code)"`
106 CreateAt string `json:"create_at" orm:"column(create_at)"` 106 CreateAt string `json:"create_at" orm:"column(create_at)"`
107 } 107 }
@@ -36,6 +36,7 @@ var errmessge ErrorMap = map[string]string{ @@ -36,6 +36,7 @@ var errmessge ErrorMap = map[string]string{
36 "10028": "请输入正确的验证码", 36 "10028": "请输入正确的验证码",
37 "10029": "获取验证码失败", 37 "10029": "获取验证码失败",
38 "10080": "无操作权限", 38 "10080": "无操作权限",
  39 + "10111": "获取公司信息失败",
39 40
40 //用户相关 41 //用户相关
41 "10031": "无效角色", 42 "10031": "无效角色",
@@ -106,7 +107,7 @@ var errmessge ErrorMap = map[string]string{ @@ -106,7 +107,7 @@ var errmessge ErrorMap = map[string]string{
106 "12102": "评分规则不符合要求", 107 "12102": "评分规则不符合要求",
107 //权限配置相关 108 //权限配置相关
108 "10091": "至少选择一个特定部门", 109 "10091": "至少选择一个特定部门",
109 - //榜单设置 110 +
110 "10101": "赛季周期设置与其他赛季重叠", 111 "10101": "赛季周期设置与其他赛季重叠",
111 "10102": "参与人类型不一致", 112 "10102": "参与人类型不一致",
112 "10103": "排行榜名称最多5个字符", 113 "10103": "排行榜名称最多5个字符",
@@ -116,6 +117,9 @@ var errmessge ErrorMap = map[string]string{ @@ -116,6 +117,9 @@ var errmessge ErrorMap = map[string]string{
116 "10107": "参与范围名称最多输入5个字符", 117 "10107": "参与范围名称最多输入5个字符",
117 "10108": "成果一级分类必填", 118 "10108": "成果一级分类必填",
118 "10109": "成果来源必填", 119 "10109": "成果来源必填",
  120 + "10110": "把握人得分不可大于把握得分",
  121 + "10121": "把握得分必填,0.1-100",
  122 + "10122": "分配的总分不可大于把握分",
119 } 123 }
120 124
121 //错误码转换 ,兼容需要 125 //错误码转换 ,兼容需要
@@ -133,6 +133,7 @@ func init() { @@ -133,6 +133,7 @@ func init() {
133 beego.NSRouter("/info", &controllers.AchievementController{}, "post:AchievementInfo"), 133 beego.NSRouter("/info", &controllers.AchievementController{}, "post:AchievementInfo"),
134 beego.NSRouter("/delete", &controllers.AchievementController{}, "post:DeleteAchievement"), 134 beego.NSRouter("/delete", &controllers.AchievementController{}, "post:DeleteAchievement"),
135 beego.NSRouter("/forbid_allow", &controllers.AchievementController{}, "post:ForbidAllowAchievement"), 135 beego.NSRouter("/forbid_allow", &controllers.AchievementController{}, "post:ForbidAllowAchievement"),
  136 + beego.NSRouter("/remain/score", &controllers.AchievementController{}, "post:AchievementScoreRemain"),
136 ), 137 ),
137 ) 138 )
138 139
@@ -140,6 +141,7 @@ func init() { @@ -140,6 +141,7 @@ func init() {
140 beego.NSBefore(middleware.AllowOption), 141 beego.NSBefore(middleware.AllowOption),
141 beego.NSBefore(middleware.LogRequestData), 142 beego.NSBefore(middleware.LogRequestData),
142 beego.NSRouter("/login", &controllers.AuthController{}, "post:Login"), 143 beego.NSRouter("/login", &controllers.AuthController{}, "post:Login"),
  144 + beego.NSRouter("/login_secret", &controllers.AuthController{}, "post:LoginSecretKey"),
143 beego.NSRouter("/startCaptcha", &controllers.AuthController{}, "post:RegisterGeetest"), 145 beego.NSRouter("/startCaptcha", &controllers.AuthController{}, "post:RegisterGeetest"),
144 beego.NSRouter("/verifyCaptcha", &controllers.AuthController{}, "post:ValidateGeetest"), 146 beego.NSRouter("/verifyCaptcha", &controllers.AuthController{}, "post:ValidateGeetest"),
145 beego.NSRouter("/login_sms", &controllers.AuthController{}, "post:LoginSms"), 147 beego.NSRouter("/login_sms", &controllers.AuthController{}, "post:LoginSms"),
@@ -104,6 +104,18 @@ func AddAchievement(addData *protocol.RequestAddAchievement, companyid int64) er @@ -104,6 +104,18 @@ func AddAchievement(addData *protocol.RequestAddAchievement, companyid int64) er
104 return protocol.NewErrWithMessage("1") 104 return protocol.NewErrWithMessage("1")
105 } 105 }
106 } 106 }
  107 + //操作achievement_score福利池数据
  108 + var providerScore float64
  109 + for _, v := range addData.Provider {
  110 + providerScore += v.UserGraspScore
  111 + }
  112 + addScore := addData.GraspScore - addData.UserGraspScore - providerScore
  113 + err = models.IncreaseAchevementScore(companyid, addScore, o)
  114 + if err != nil {
  115 + o.Rollback()
  116 + log.Error("更新福利池分数achevement_score失败")
  117 + return protocol.NewErrWithMessage("1")
  118 + }
107 o.Commit() 119 o.Commit()
108 return nil 120 return nil
109 } 121 }
@@ -571,3 +571,54 @@ func ValidUserPermission(urlPath string, userid int64, companyid int64) bool { @@ -571,3 +571,54 @@ func ValidUserPermission(urlPath string, userid int64, companyid int64) bool {
571 } 571 }
572 return false 572 return false
573 } 573 }
  574 +
  575 +//LoginAuthBySecretKey 使用秘钥进行登录
  576 +func LoginAuthBySecretKey(secretKey string) (protocol.LoginAuthToken, error) {
  577 + var (
  578 + err error
  579 + logintoken protocol.LoginAuthToken
  580 + usercompanyid int64
  581 + userdata *models.User
  582 + companyData *models.Company
  583 + )
  584 + var uclientReturn *ucenter.ResponseLogin
  585 + uclientReturn, err = ucenter.RequestUCenterLoginBySecret(secretKey)
  586 + if err != nil {
  587 + return logintoken, protocol.NewErrWithMessage("1")
  588 + }
  589 + userdata, err = models.GetUserByPhone(uclientReturn.Data.Phone)
  590 + if err != nil {
  591 + log.Debug("GetUserByUCenter(%d) err:%s", uclientReturn.Data.Id, err)
  592 + return logintoken, protocol.NewErrWithMessage("10021")
  593 + }
  594 + companyData, err = models.GetCompanyByUCenter(uclientReturn.Data.CompanyId)
  595 + if err != nil {
  596 + log.Error("获取company数据失败:%s", err)
  597 + return logintoken, protocol.NewErrWithMessage("10111")
  598 + }
  599 + ucompany, err := models.GetUserCompanyBy(userdata.Id, companyData.Id)
  600 + if err != nil {
  601 + log.Error("获取user_company失败;%s", err)
  602 + return logintoken, protocol.NewErrWithMessage("10022")
  603 + }
  604 +
  605 + logintoken, _ = GenerateAuthToken(userdata.Id, companyData.Id, ucompany.Id)
  606 + //更新用户数据
  607 + userdata.Accid = uclientReturn.Data.Accid
  608 + userdata.Icon = uclientReturn.Data.Avatar
  609 + userdata.ImToken = uclientReturn.Data.Imtoken
  610 + userdata.NickName = uclientReturn.Data.NickName
  611 + userdata.CsAccount = uclientReturn.Data.CustomerAccount
  612 + userdata.LastLoginTime = time.Now()
  613 + err = models.UpdateUserById(userdata, []string{"Accid", "Icon", "ImToken", "NickName", "CsAccount", "LastLoginTime"})
  614 + if err != nil {
  615 + log.Error("更新用户user数据失败:%s", err)
  616 + }
  617 + ucompany.NickName = uclientReturn.Data.NickName
  618 + err = models.UpdateUserCompanyById(ucompany, []string{"NickName"})
  619 + if err != nil {
  620 + log.Error("更新用户user_company数据失败:%s", err)
  621 + }
  622 + InitPermission(usercompanyid, userdata.Id)
  623 + return logintoken, err
  624 +}
@@ -235,16 +235,31 @@ func SelectCompanyUserList(pageIndex int, pageSize int, companyid int64, userNam @@ -235,16 +235,31 @@ func SelectCompanyUserList(pageIndex int, pageSize int, companyid int64, userNam
235 return rspData 235 return rspData
236 } 236 }
237 237
238 -func SelectChanceList(pageIndex int, pageSize int, companyid int64, chanceCode string) protocol.SelectChanceList {  
239 - datasql := ` SELECT id ,department_id,chance_type_id,audit_template_id,user_id,create_at,code  
240 - FROM chance WHERE company_id =? ` 238 +func SelectChanceList(pageIndex int, pageSize int, companyid int64, searchType int, chanceCode string) protocol.SelectChanceList {
  239 + datasql := ` SELECT a.id ,a.department_id,a.chance_type_id,a.audit_template_id
  240 + ,a.user_id,a.create_at,a.code,c.nick_name
  241 + FROM chance as a
  242 + LEFT JOIN user_company AS b ON a.user_id = b.id
  243 + JOIN user AS c ON b.user_id = c.id
  244 + WHERE a.company_id =? `
241 countsql := `SELECT count(*) 245 countsql := `SELECT count(*)
242 - FROM chance WHERE company_id =? ` 246 + FROM chance as a
  247 + LEFT JOIN user_company AS b ON a.user_id = b.id
  248 + JOIN user AS c ON b.user_id = c.id
  249 + WHERE a.company_id =? `
243 cond := []interface{}{companyid} 250 cond := []interface{}{companyid}
244 where := "" 251 where := ""
245 if len(chanceCode) > 0 { 252 if len(chanceCode) > 0 {
246 - where += ` And code like ? `  
247 - cond = append(cond, "%"+chanceCode+"%") 253 + switch searchType {
  254 + case 1:
  255 + //根据机会编码
  256 + where += ` And a.code like ? `
  257 + cond = append(cond, "%"+chanceCode+"%")
  258 + case 2:
  259 + //根据提交人
  260 + where += ` And c.nick_name like ? `
  261 + cond = append(cond, "%"+chanceCode+"%")
  262 + }
248 } 263 }
249 datasql += where 264 datasql += where
250 countsql += where 265 countsql += where
@@ -32,6 +32,30 @@ func RequestUCenterLogin(account, password string) (*ResponseLogin, error) { @@ -32,6 +32,30 @@ func RequestUCenterLogin(account, password string) (*ResponseLogin, error) {
32 return &uclientReturn, nil 32 return &uclientReturn, nil
33 } 33 }
34 34
  35 +//RequestUCenterLogin 调用用户中心进行账号密码登录
  36 +func RequestUCenterLoginBySecret(secret string) (*ResponseLogin, error) {
  37 + var uclientReturn ResponseLogin
  38 + param := RequesLogin{
  39 + Type: 3,
  40 + Secret: secret,
  41 + }
  42 + uclient := NewUCenterClient()
  43 + btBody, err := uclient.Call(param)
  44 + if err != nil {
  45 + log.Error("统一用户中心请求失败 err:%s", err)
  46 + return nil, protocol.NewErrWithMessage("1")
  47 + }
  48 + err = json.Unmarshal(btBody, &uclientReturn)
  49 + if err != nil {
  50 + log.Error("解析统一用户中心响应失败 err:%s", err)
  51 + return nil, protocol.NewErrWithMessage("1")
  52 + }
  53 + if !(uclientReturn.Code == ResponseCode0) {
  54 + return nil, protocol.NewErrWithMessage("10052")
  55 + }
  56 + return &uclientReturn, nil
  57 +}
  58 +
35 //RequestUCenterAddUser 调用用户中心进行注册用户 59 //RequestUCenterAddUser 调用用户中心进行注册用户
36 func RequestUCenterAddUser(phone string, nickname string, avatar string) (*ResponseAddUser, error) { 60 func RequestUCenterAddUser(phone string, nickname string, avatar string) (*ResponseAddUser, error) {
37 61
@@ -16,6 +16,7 @@ type RequesLogin struct { @@ -16,6 +16,7 @@ type RequesLogin struct {
16 Type int8 `json:"type"` 16 Type int8 `json:"type"`
17 Password string `json:"password"` 17 Password string `json:"password"`
18 Phone string `json:"phone"` 18 Phone string `json:"phone"`
  19 + Secret string `json:"secret"`
19 } 20 }
20 21
21 var ( 22 var (
@@ -56,6 +57,7 @@ type ResponseLogin struct { @@ -56,6 +57,7 @@ type ResponseLogin struct {
56 Imtoken string `json:"imtoken"` //网易云imtoken 57 Imtoken string `json:"imtoken"` //网易云imtoken
57 Accid int64 `json:"accid"` //网易云id 58 Accid int64 `json:"accid"` //网易云id
58 CustomerAccount int64 `json:"customerAccount"` //客服id 59 CustomerAccount int64 `json:"customerAccount"` //客服id
  60 + CompanyId int64 `json:"companyId"` //总后台的公司id
59 } `json:"data"` 61 } `json:"data"`
60 } 62 }
61 63