作者 tangxvhui

bug

修复
... ... @@ -2,6 +2,7 @@ package controllers
import (
"encoding/json"
"fmt"
"oppmg/common/log"
"oppmg/models"
"oppmg/protocol"
... ... @@ -59,6 +60,26 @@ func (c AchievementController) AddAchievement() {
msg = protocol.BadRequestParam("10108")
return
}
if param.GraspScore < 0 || param.GraspScore > 100 {
log.Error(" param.GraspScore < 0 || param.GraspScore > 100 ")
msg = protocol.BadRequestParam("10121")
return
}
if param.UserGraspScore < 0 || param.UserGraspScore > 100 {
log.Error("param.UserGraspScore < 0 || param.UserGraspScore > 100")
msg = protocol.BadRequestParam("10122")
}
var providerScore float64
for _, v := range param.Provider {
providerScore += v.UserGraspScore
}
remainScore := param.GraspScore - param.UserGraspScore - providerScore
if remainScore < 0 {
log.Error("分配的总分不可大于把握分")
msg = protocol.BadRequestParam("10122")
return
}
companyid := c.GetCompanyId()
err := serveachievement.AddAchievement(&param, companyid)
msg = protocol.NewReturnResponse(nil, err)
... ... @@ -204,3 +225,22 @@ func (c AchievementController) ForbidAllowAchievement() {
msg = protocol.NewReturnResponse(nil, nil)
return
}
//AchievementScoreRemain 获取福利池分数
//@router /achievement/remain/score
func (c AchievementController) AchievementScoreRemain() {
var msg *protocol.ResponseMessage
defer func() {
c.ResposeJson(msg)
}()
companyid := c.GetCompanyId()
scoreData, err := models.GetAchevementScoreByCompanyId(companyid)
rspData := map[string]string{
"score": "0",
}
if err == nil {
rspData["score"] = fmt.Sprintf("%.1f", scoreData.GraspScoreRemain)
}
msg = protocol.NewReturnResponse(rspData, nil)
return
}
... ...
... ... @@ -134,6 +134,46 @@ func (c *AuthController) LoginSms() {
return
}
// LoginSecret 使用秘钥进行登录
// @router /login [post]
func (c *AuthController) LoginSecretKey() {
var msg *protocol.ResponseMessage
defer func() {
c.ResposeJson(msg)
}()
type Parameter struct {
Secret string `json:"secret"`
}
var param Parameter
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
log.Error("json 解析失败", err)
msg = protocol.BadRequestParam("1")
return
}
if len(param.Secret) == 0 {
msg = protocol.BadRequestParam("10080")
return
}
logintoken, err := serveauth.LoginAuthBySecretKey(param.Secret)
if err != nil {
msg = protocol.NewReturnResponse(nil, err)
return
}
err = serveauth.ResetLoginToken(logintoken)
if err != nil {
log.Error("token 信息记录数据库失败")
}
err = serveauth.ResetLoginTokenRedis(logintoken)
if err != nil {
log.Error("token 信息记录redis失败")
}
data := protocol.ResponseLogin{
Access: logintoken,
}
msg = protocol.NewReturnResponse(data, nil)
return
}
//SmsCode 发送验证码短信
//@router /auth/smscode
func (c *AuthController) SmsCode() {
... ...
... ... @@ -232,6 +232,7 @@ func (c *CommonController) SelectChanceList() {
}()
type Parameter struct {
protocol.RequestPageInfo
SearchType int `json:"search_type"` //1:根据机会编码搜索 2:根据提交人搜索
ChanceCode string `json:"chance_code"`
}
var param Parameter
... ... @@ -241,7 +242,7 @@ func (c *CommonController) SelectChanceList() {
return
}
companyid := c.GetCompanyId()
listData := servecommon.SelectChanceList(param.PageIndex, param.PageSize, companyid, param.ChanceCode)
listData := servecommon.SelectChanceList(param.PageIndex, param.PageSize, companyid, param.SearchType, param.ChanceCode)
msg = protocol.NewPageDataResponse(listData, nil)
return
}
... ...
package models
import (
"time"
"github.com/astaxie/beego/orm"
)
type AchevementScore struct {
Id int64 `orm:"column(id);auto"`
GraspScoreRemain float64 `orm:"column(grasp_score_remain);null;digits(10);decimals(1)" description:"福利池总分 ,来源achievement中的评分"`
CompanyId int64 `orm:"column(company_id)"`
CreateAt time.Time `orm:"column(create_at);type(timestamp);null"`
UpdateAt time.Time `orm:"column(update_at);type(timestamp);null"`
}
func (t *AchevementScore) TableName() string {
return "achevement_score"
}
func init() {
orm.RegisterModel(new(AchevementScore))
}
// AddAchevementScore insert a new AchevementScore into database and returns
// last inserted Id on success.
func AddAchevementScore(m *AchevementScore, o orm.Ormer) (id int64, err error) {
id, err = o.Insert(m)
return
}
// GetAchevementScoreById retrieves AchevementScore by Id. Returns error if
// Id doesn't exist
func GetAchevementScoreById(id int64) (v *AchevementScore, err error) {
o := orm.NewOrm()
v = &AchevementScore{Id: id}
if err = o.Read(v); err == nil {
return v, nil
}
return nil, err
}
func GetAchevementScoreByCompanyId(companyid int64) (v *AchevementScore, err error) {
o := orm.NewOrm()
v = &AchevementScore{}
ok := o.QueryTable(&AchevementScore{}).
Filter("company_id", companyid).
Exist()
if !ok {
return v, nil
}
err = o.QueryTable(&AchevementScore{}).
Filter("company_id", companyid).
One(v)
return v, err
}
func IncreaseAchevementScore(companyid int64, addScore float64, o orm.Ormer) error {
v := &AchevementScore{}
ok := o.QueryTable(&AchevementScore{}).
Filter("company_id", companyid).
Exist()
if ok {
//存在
_, err := o.QueryTable(&AchevementScore{}).
Filter("company_id", companyid).
Update(orm.Params{
"grasp_score_remain": orm.ColValue(orm.ColAdd, addScore),
"update_time": time.Now().String(),
})
return err
}
//不存在
v.CompanyId = companyid
v.GraspScoreRemain = addScore
v.CreateAt = time.Now()
_, err := o.Insert(v)
return err
}
... ...
... ... @@ -101,7 +101,7 @@ type SelectChanceListItem struct {
AuditTemplateId int64 `json:"audit_template_id" orm:"column(audit_template_id)"`
AuditTemplateName string `json:"audit_template_name" orm:"-"`
UserId int64 `json:"user_id" orm:"column(user_id)"`
UserName string `json:"user_name" orm:"column(-)"`
UserName string `json:"user_name" orm:"column(nick_name)"`
Code string `json:"code" orm:"column(code)"`
CreateAt string `json:"create_at" orm:"column(create_at)"`
}
... ...
... ... @@ -36,6 +36,7 @@ var errmessge ErrorMap = map[string]string{
"10028": "请输入正确的验证码",
"10029": "获取验证码失败",
"10080": "无操作权限",
"10111": "获取公司信息失败",
//用户相关
"10031": "无效角色",
... ... @@ -106,7 +107,7 @@ var errmessge ErrorMap = map[string]string{
"12102": "评分规则不符合要求",
//权限配置相关
"10091": "至少选择一个特定部门",
//榜单设置
"10101": "赛季周期设置与其他赛季重叠",
"10102": "参与人类型不一致",
"10103": "排行榜名称最多5个字符",
... ... @@ -116,6 +117,9 @@ var errmessge ErrorMap = map[string]string{
"10107": "参与范围名称最多输入5个字符",
"10108": "成果一级分类必填",
"10109": "成果来源必填",
"10110": "把握人得分不可大于把握得分",
"10121": "把握得分必填,0.1-100",
"10122": "分配的总分不可大于把握分",
}
//错误码转换 ,兼容需要
... ...
... ... @@ -133,6 +133,7 @@ func init() {
beego.NSRouter("/info", &controllers.AchievementController{}, "post:AchievementInfo"),
beego.NSRouter("/delete", &controllers.AchievementController{}, "post:DeleteAchievement"),
beego.NSRouter("/forbid_allow", &controllers.AchievementController{}, "post:ForbidAllowAchievement"),
beego.NSRouter("/remain/score", &controllers.AchievementController{}, "post:AchievementScoreRemain"),
),
)
... ... @@ -140,6 +141,7 @@ func init() {
beego.NSBefore(middleware.AllowOption),
beego.NSBefore(middleware.LogRequestData),
beego.NSRouter("/login", &controllers.AuthController{}, "post:Login"),
beego.NSRouter("/login_secret", &controllers.AuthController{}, "post:LoginSecretKey"),
beego.NSRouter("/startCaptcha", &controllers.AuthController{}, "post:RegisterGeetest"),
beego.NSRouter("/verifyCaptcha", &controllers.AuthController{}, "post:ValidateGeetest"),
beego.NSRouter("/login_sms", &controllers.AuthController{}, "post:LoginSms"),
... ...
... ... @@ -104,6 +104,18 @@ func AddAchievement(addData *protocol.RequestAddAchievement, companyid int64) er
return protocol.NewErrWithMessage("1")
}
}
//操作achievement_score福利池数据
var providerScore float64
for _, v := range addData.Provider {
providerScore += v.UserGraspScore
}
addScore := addData.GraspScore - addData.UserGraspScore - providerScore
err = models.IncreaseAchevementScore(companyid, addScore, o)
if err != nil {
o.Rollback()
log.Error("更新福利池分数achevement_score失败")
return protocol.NewErrWithMessage("1")
}
o.Commit()
return nil
}
... ...
... ... @@ -571,3 +571,54 @@ func ValidUserPermission(urlPath string, userid int64, companyid int64) bool {
}
return false
}
//LoginAuthBySecretKey 使用秘钥进行登录
func LoginAuthBySecretKey(secretKey string) (protocol.LoginAuthToken, error) {
var (
err error
logintoken protocol.LoginAuthToken
usercompanyid int64
userdata *models.User
companyData *models.Company
)
var uclientReturn *ucenter.ResponseLogin
uclientReturn, err = ucenter.RequestUCenterLoginBySecret(secretKey)
if err != nil {
return logintoken, protocol.NewErrWithMessage("1")
}
userdata, err = models.GetUserByPhone(uclientReturn.Data.Phone)
if err != nil {
log.Debug("GetUserByUCenter(%d) err:%s", uclientReturn.Data.Id, err)
return logintoken, protocol.NewErrWithMessage("10021")
}
companyData, err = models.GetCompanyByUCenter(uclientReturn.Data.CompanyId)
if err != nil {
log.Error("获取company数据失败:%s", err)
return logintoken, protocol.NewErrWithMessage("10111")
}
ucompany, err := models.GetUserCompanyBy(userdata.Id, companyData.Id)
if err != nil {
log.Error("获取user_company失败;%s", err)
return logintoken, protocol.NewErrWithMessage("10022")
}
logintoken, _ = GenerateAuthToken(userdata.Id, companyData.Id, ucompany.Id)
//更新用户数据
userdata.Accid = uclientReturn.Data.Accid
userdata.Icon = uclientReturn.Data.Avatar
userdata.ImToken = uclientReturn.Data.Imtoken
userdata.NickName = uclientReturn.Data.NickName
userdata.CsAccount = uclientReturn.Data.CustomerAccount
userdata.LastLoginTime = time.Now()
err = models.UpdateUserById(userdata, []string{"Accid", "Icon", "ImToken", "NickName", "CsAccount", "LastLoginTime"})
if err != nil {
log.Error("更新用户user数据失败:%s", err)
}
ucompany.NickName = uclientReturn.Data.NickName
err = models.UpdateUserCompanyById(ucompany, []string{"NickName"})
if err != nil {
log.Error("更新用户user_company数据失败:%s", err)
}
InitPermission(usercompanyid, userdata.Id)
return logintoken, err
}
... ...
... ... @@ -235,16 +235,31 @@ func SelectCompanyUserList(pageIndex int, pageSize int, companyid int64, userNam
return rspData
}
func SelectChanceList(pageIndex int, pageSize int, companyid int64, chanceCode string) protocol.SelectChanceList {
datasql := ` SELECT id ,department_id,chance_type_id,audit_template_id,user_id,create_at,code
FROM chance WHERE company_id =? `
func SelectChanceList(pageIndex int, pageSize int, companyid int64, searchType int, chanceCode string) protocol.SelectChanceList {
datasql := ` SELECT a.id ,a.department_id,a.chance_type_id,a.audit_template_id
,a.user_id,a.create_at,a.code,c.nick_name
FROM chance as a
LEFT JOIN user_company AS b ON a.user_id = b.id
JOIN user AS c ON b.user_id = c.id
WHERE a.company_id =? `
countsql := `SELECT count(*)
FROM chance WHERE company_id =? `
FROM chance as a
LEFT JOIN user_company AS b ON a.user_id = b.id
JOIN user AS c ON b.user_id = c.id
WHERE a.company_id =? `
cond := []interface{}{companyid}
where := ""
if len(chanceCode) > 0 {
where += ` And code like ? `
cond = append(cond, "%"+chanceCode+"%")
switch searchType {
case 1:
//根据机会编码
where += ` And a.code like ? `
cond = append(cond, "%"+chanceCode+"%")
case 2:
//根据提交人
where += ` And c.nick_name like ? `
cond = append(cond, "%"+chanceCode+"%")
}
}
datasql += where
countsql += where
... ...
... ... @@ -32,6 +32,30 @@ func RequestUCenterLogin(account, password string) (*ResponseLogin, error) {
return &uclientReturn, nil
}
//RequestUCenterLogin 调用用户中心进行账号密码登录
func RequestUCenterLoginBySecret(secret string) (*ResponseLogin, error) {
var uclientReturn ResponseLogin
param := RequesLogin{
Type: 3,
Secret: secret,
}
uclient := NewUCenterClient()
btBody, err := uclient.Call(param)
if err != nil {
log.Error("统一用户中心请求失败 err:%s", err)
return nil, protocol.NewErrWithMessage("1")
}
err = json.Unmarshal(btBody, &uclientReturn)
if err != nil {
log.Error("解析统一用户中心响应失败 err:%s", err)
return nil, protocol.NewErrWithMessage("1")
}
if !(uclientReturn.Code == ResponseCode0) {
return nil, protocol.NewErrWithMessage("10052")
}
return &uclientReturn, nil
}
//RequestUCenterAddUser 调用用户中心进行注册用户
func RequestUCenterAddUser(phone string, nickname string, avatar string) (*ResponseAddUser, error) {
... ...
... ... @@ -16,6 +16,7 @@ type RequesLogin struct {
Type int8 `json:"type"`
Password string `json:"password"`
Phone string `json:"phone"`
Secret string `json:"secret"`
}
var (
... ... @@ -56,6 +57,7 @@ type ResponseLogin struct {
Imtoken string `json:"imtoken"` //网易云imtoken
Accid int64 `json:"accid"` //网易云id
CustomerAccount int64 `json:"customerAccount"` //客服id
CompanyId int64 `json:"companyId"` //总后台的公司id
} `json:"data"`
}
... ...