dddd
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

523 lines
17 KiB

package custom
import (
"encoding/json"
"fmt"
"strconv"
"github.com/flipped-aurora/gin-vue-admin/server/api/admin/systemuser"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/staff"
"github.com/flipped-aurora/gin-vue-admin/server/commonus"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
roleModel "github.com/flipped-aurora/gin-vue-admin/server/model/systemuser"
"github.com/flipped-aurora/gin-vue-admin/server/utils"
"github.com/flipped-aurora/gin-vue-admin/server/utils/redishandel"
"github.com/gin-gonic/gin"
)
//自定义登录
func (cu *CustomHandle) CustomLogin(c *gin.Context) {
var l systemReq.Login
_ = c.ShouldBindJSON(&l)
// if err := utils.Verify(l, utils.LoginVerify); err != nil {
// response.FailWithMessage(err.Error(), c)
// return
// }
userAgent := c.Request.Header.Get("User-Agent")
userAgent = "250"
// store
// if store.Verify(l.CaptchaId, l.Captcha, true) {
userErr, user := staff.GetUserWork(l.Username, l.Password)
if userErr != true {
// // global.GVA_LOG.Error("登陆失败! 用户名不存在或者密码错误!", zap.Any("err", err))
response.Result(101, userErr, "登陆失败! 用户名不存在或者密码错误!!", c)
return
} else {
if user.State == 2 {
response.Result(102, userErr, "登陆失败! 该账号已经被禁用!", c)
return
}
if user.State == 3 {
response.Result(102, userErr, "登陆失败! 该账号不存在!", c)
return
}
if user.HireSet != 1 {
response.Result(102, userErr, "登陆失败! 该员工已经离职!", c)
return
}
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
sha1Str := user.KeyStr + user.Number + user.Password + md5Token
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["key"] = user.KeyStr
saveData["token"] = sha1Token
saveData["userinfo"] = user
redisClient := redishandel.RunRedis()
redisClient.SetRedisTime(86400)
// redisClient.SetRedisTime(60)
writeRedisData := map[string]interface{}{
"userkey": user.KeyStr,
"usernumber": user.Number,
"userpwd": user.Password,
"usertoken": sha1Token,
}
// global.GVA_INDEX_USERKEY = user.Key
redisClient.HashMsetAdd("system:Identification_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+user.KeyStr, writeRedisData)
userInfo := commonus.MapOut()
userInfo["id"] = user.Id
userInfo["number"] = user.Number
userInfo["departmentid"] = user.DepartmentId
userInfo["workshopid"] = user.WorkshopId
userInfo["postid"] = user.PostId
userInfo["key"] = user.Key
userInfo["group"] = user.Group
userInfo["tema"] = user.Tema
userInfo["workwechatid"] = user.WorkWechatId
userInfo["wechatid"] = user.WechatId
userInfo["name"] = user.Name
userInfo["nickname"] = user.NickName
redisUserClient := redishandel.RunRedis()
redisUserClient.SetRedisTime(0)
redisUserClient.HashMsetAdd("system:userContent_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+user.KeyStr, userInfo)
// // b.tokenNext(c, *user)
response.Result(0, saveData, "登录成功!", c)
}
// } else {
// response.FailWithMessage("验证码错误", c)
// }
}
//自定义登录
func (cu *CustomHandle) SystemLogin(c *gin.Context) {
var l systemReq.Login
_ = c.ShouldBindJSON(&l)
if err := utils.Verify(l, utils.LoginVerify); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
userAgent := c.Request.Header.Get("User-Agent")
// store
// if store.Verify(l.CaptchaId, l.Captcha, true) {
userErr, user := systemuser.GetSysAdminLoginInfo(l.Username, l.Password)
if userErr != true {
// // global.GVA_LOG.Error("登陆失败! 用户名不存在或者密码错误!", zap.Any("err", err))
response.Result(101, userErr, "登陆失败! 用户名不存在或者密码错误!!", c)
return
} else {
if user.State == 2 {
response.Result(102, userErr, "登陆失败! 该账号已经被禁用!", c)
return
}
if user.State == 3 {
response.Result(102, userErr, "登陆失败! 该账号不存在!", c)
return
}
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
sha1Str := user.KeyStr + user.Name + user.PassWord + md5Token
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["key"] = user.KeyStr
saveData["token"] = sha1Token
saveData["userinfo"] = user
redisClient := redishandel.RunRedis()
redisClient.SetRedisTime(86400)
writeRedisData := map[string]interface{}{
"userkey": user.KeyStr,
"usernumber": user.Name,
"userpwd": user.PassWord,
"usertoken": sha1Token,
"jurisdiction": user.Jurisdiction,
"menuOper": user.MenuOper,
"wand": user.Wand,
}
redisClient.HashMsetAdd("system:SystemIdentification_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+user.KeyStr, writeRedisData)
adminRedisData := map[string]interface{}{
"userkey": user.KeyStr,
"usernumber": user.Name,
"userpwd": user.PassWord,
"usertoken": sha1Token,
"jurisdiction": user.Jurisdiction,
"menuOper": user.MenuOper,
"wand": user.Wand,
"name": user.NameAttr,
"groupname": user.GroupName,
"group": user.Group,
"attribute": user.Attribute,
"branchfactoryname": user.BranchFactoryName,
"role": user.Role,
"roleName": user.RoleName,
}
redisAdminClient := redishandel.RunRedis()
redisAdminClient.SetRedisTime(0)
redisAdminClient.HashMsetAdd("system:SystemAdminInfo_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+user.KeyStr, adminRedisData)
global.GVA_ADMIN_USERKEY = strconv.FormatInt(user.Key, 10)
// // b.tokenNext(c, *user)
var surisdictionStr []string
var surisdictionInt []int64
jsonErr := json.Unmarshal([]byte(user.Jurisdiction), &surisdictionStr)
if jsonErr == nil {
for _, jurVal := range surisdictionStr {
jurValInt, jurValErr := strconv.ParseInt(jurVal, 10, 64)
if jurValErr == nil {
surisdictionInt = append(surisdictionInt, jurValInt)
}
}
}
global.Gva_Authority_Authentication = surisdictionInt
var menuOperStr []string
var menuOperInts []int64
jsonErrSun := json.Unmarshal([]byte(user.MenuOper), &menuOperStr)
if jsonErrSun == nil {
for _, menuOperVal := range menuOperStr {
menuOperInt, menuOperErr := strconv.ParseInt(menuOperVal, 10, 64)
if menuOperErr == nil {
menuOperInts = append(menuOperInts, menuOperInt)
}
}
}
global.Gva_Authority_Authentication_Subsidiary = menuOperInts
saveData["Jurisdiction"] = global.Gva_Authority_Authentication
saveData["MenuOper"] = global.Gva_Authority_Authentication_Subsidiary
// saveData["jsonErr"] = jsonErr
// saveData["jsonErrSun"] = jsonErrSun
response.Result(0, saveData, "登录成功!", c)
}
// } else {
// response.FailWithMessage("验证码错误", c)
// }
}
//oauth2.0
func (cu *CustomHandle) OauthTwo(c *gin.Context) {
var requestData getData
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, err, "单点登录登录失败!", c)
return
}
if requestData.Number == "" {
response.Result(102, err, "单点登录登录失败!", c)
return
}
redisClient := redishandel.RunRedis()
tokenErr, token := redisClient.Get("system:Oauth2_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + requestData.Number)
if tokenErr == true {
saveData := commonus.MapOut()
saveData["token"] = token
response.Result(0, saveData, "登录成功!", c)
} else {
userAgent := c.Request.Header.Get("User-Agent")
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
var md5Number commonus.Md5Encryption
md5Number.Md5EncryptionInit(requestData.Number)
md5NumberToken := md5Number.Md5EncryptionAlgorithm()
sha1Str := fmt.Sprintf("%v-%v-%v", md5Token, requestData.Number, md5NumberToken)
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["token"] = sha1Token
redisClient.SetRedisTime(10800)
redisClient.Set("system:Oauth2_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+requestData.Number, sha1Token)
response.Result(0, saveData, "Token获取成功!", c)
}
}
//企业微信单点登录
func (cu *CustomHandle) SingleSignOn(c *gin.Context) {
var requestData oneLogin
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, err, "单点登录登录失败!", c)
return
}
if requestData.Number == "" {
response.Result(102, err, "单点登录登录失败!", c)
return
}
if requestData.Token == "" {
response.Result(102, err, "单点登录登录失败!", c)
return
}
if requestData.OpenId == "" {
response.Result(102, err, "单点登录登录失败!", c)
return
}
redisClient := redishandel.RunRedis()
tokenErr, token := redisClient.Get("system:Oauth2_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + requestData.Number)
if tokenErr != true {
response.Result(103, err, "单点登录登录失败!", c)
return
}
if token != requestData.Token {
response.Result(103, err, "单点登录登录失败!", c)
return
}
isTrue, userInfo := commonus.GetUesrContForWechatID(requestData.OpenId)
if isTrue != true {
response.Result(103, err, "单点登录登录失败!", c)
return
}
//获取操作人
userFileStr := "worker_man.*,worker_man_data.*"
//操作人条件
userWherAry := commonus.MapOut()
// userWherAry["wm_key"] = "WoBenShanLiang_3" //"WoBenShanLiang_3"
userWherAry["wm_key"] = userInfo.Key
userConting, userIsTrue := commonus.GetUserInfoPublic(userFileStr, userWherAry)
if userIsTrue != true {
response.Result(103, err, "单点登录登录失败!", c)
return
}
userAgent := c.Request.Header.Get("User-Agent")
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
sha1Str := fmt.Sprintf("%v%v%v%v", userConting.Key, userConting.Number, userConting.Password, md5Token)
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["key"] = userConting.Key
saveData["token"] = sha1Token
saveData["userinfo"] = userConting
writeRedisData := map[string]interface{}{
"userkey": userInfo.Key,
"usernumber": userInfo.Number,
"userpwd": userConting.Password,
"usertoken": sha1Token,
}
redisClient.SetRedisTime(86400)
redisKey := fmt.Sprintf("system:Identification_%v_%v", global.GVA_CONFIG.RedisPrefix.Alias, userInfo.Key)
redisClient.HashMsetAdd(redisKey, writeRedisData)
userInfoMap := commonus.MapOut()
userInfoMap["id"] = userConting.Id
userInfoMap["number"] = userConting.Number
userInfoMap["departmentid"] = userConting.DepartmentId
userInfoMap["workshopid"] = userConting.WorkshopId
userInfoMap["postid"] = userConting.PostId
userInfoMap["key"] = userConting.Key
userInfoMap["group"] = userConting.Group
userInfoMap["tema"] = userConting.Tema
userInfoMap["workwechatid"] = userConting.WorkWechatId
userInfoMap["wechatid"] = userConting.WechatId
userInfoMap["name"] = userConting.Name
userInfoMap["nickname"] = userConting.NickName
redisUserClient := redishandel.RunRedis()
redisUserClient.SetRedisTime(0)
redisKeyMap := fmt.Sprintf("system:userContent_%v_%v", global.GVA_CONFIG.RedisPrefix.Alias, userInfo.Key)
redisUserClient.HashMsetAdd(redisKeyMap, userInfoMap)
response.Result(0, saveData, "登录成功!", c)
}
//一端登录
func (cu *CustomHandle) ScanCodeLogin(c *gin.Context) {
var l systemReq.Login
_ = c.ShouldBindJSON(&l)
// if err := utils.Verify(l, utils.LoginVerify); err != nil {
// response.FailWithMessage(err.Error(), c)
// return
// }
userAgent := c.Request.Header.Get("User-Agent")
userAgent = "250"
userAdminErr, userAdmin := systemuser.GetSysAdminLoginInfo(l.Username, l.Password)
fmt.Printf("jieguo----------------->%v\n", userAdminErr)
// userAdminErr, _ := systemuser.HrUserInfor(l.Username, l.Password)
if userAdminErr == true {
if userAdmin.State == 2 {
response.Result(102, userAdminErr, "登陆失败! 该账号已经被禁用!", c)
return
}
if userAdmin.State == 3 {
response.Result(102, userAdminErr, "登陆失败! 该账号不存在!", c)
return
}
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
var md5JiaMiNumber commonus.Md5Encryption
md5JiaMiNumber.Md5EncryptionInit(userAdmin.Name)
userKeyCode := md5JiaMi.Md5EncryptionAlgorithm()
sha1Str := userKeyCode + userAdmin.Name + userAdmin.PassWord + md5Token
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["key"] = userKeyCode
saveData["token"] = sha1Token
saveData["userinfo"] = userAdmin
// userKeyInt, _ := strconv.ParseInt(userKeyCode, 10, 64)
global.GVA_ADMIN_USERKEY = userKeyCode
global.GVA_SCANCODE_USERNUMBER = userAdmin.KeyStr
roleCont := getRole(userAdmin.Role)
writeRedisData := map[string]interface{}{
"userkey": userKeyCode,
"key": userAdmin.KeyStr,
"usernumber": userAdmin.Name,
"userpwd": userAdmin.PassWord,
"usertoken": sha1Token,
"jurisdiction": roleCont.Jurisdiction,
"menuOper": roleCont.MenuOper,
"wand": 118,
}
var surisdictionStr []string
var surisdictionInt []int64
jsonErr := json.Unmarshal([]byte(roleCont.Jurisdiction), &surisdictionStr)
if jsonErr == nil {
for _, jurVal := range surisdictionStr {
jurValInt, jurValErr := strconv.ParseInt(jurVal, 10, 64)
if jurValErr == nil {
surisdictionInt = append(surisdictionInt, jurValInt)
}
}
}
global.Gva_Authority_Authentication = surisdictionInt
var menuOperStr []string
var menuOperInts []int64
jsonErrSun := json.Unmarshal([]byte(roleCont.MenuOper), &menuOperStr)
if jsonErrSun == nil {
for _, menuOperVal := range menuOperStr {
menuOperInt, menuOperErr := strconv.ParseInt(menuOperVal, 10, 64)
if menuOperErr == nil {
menuOperInts = append(menuOperInts, menuOperInt)
}
}
}
global.Gva_Authority_Authentication_Subsidiary = menuOperInts
redisFileKey := "ScanCode:Authentication:LoginApi_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + userKeyCode
redisClient := redishandel.RunRedis()
redisClient.SetRedisDb(5)
redisClient.SetRedisTime(10800)
redisClient.HashMsetAdd(redisFileKey, writeRedisData)
response.Result(0, saveData, "登录成功!", c)
} else {
// userErr, user := staff.GetUserWork(l.Username, l.Password)
userErr, user := staff.HrUserInfor(l.Username, l.Password)
if userErr != true {
response.Result(109, userErr, "登录失败!", c)
return
}
if user.State == 2 {
response.Result(102, userErr, "登陆失败! 该账号已经被禁用!", c)
return
}
if user.State == 3 {
response.Result(102, userErr, "登陆失败! 该账号不存在!", c)
return
}
var md5JiaMi commonus.Md5Encryption
md5JiaMi.Md5EncryptionInit(userAgent)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
var md5JiaMiNumber commonus.Md5Encryption
md5JiaMiNumber.Md5EncryptionInit(user.Number)
userKeyCode := md5JiaMi.Md5EncryptionAlgorithm()
sha1Str := userKeyCode + user.Number + user.Password + md5Token
sha1Token := commonus.Sha1Encryption(sha1Str)
saveData := commonus.MapOut()
saveData["key"] = userKeyCode
saveData["token"] = sha1Token
saveData["userinfo"] = user
// userKeyInt, _ := strconv.ParseInt(userKeyCode, 10, 64)
global.GVA_ADMIN_USERKEY = userKeyCode
global.GVA_SCANCODE_USERNUMBER = user.Number
writeRedisData := map[string]interface{}{
"userkey": userKeyCode,
"key": user.Key,
"usernumber": user.Number,
"userpwd": user.Password,
"usertoken": sha1Token,
"jurisdiction": user.Jurisdiction,
"menuOper": user.Menuoper,
"wand": 118,
}
var surisdictionStr []string
var surisdictionInt []int64
jsonErr := json.Unmarshal([]byte(user.Jurisdiction), &surisdictionStr)
if jsonErr == nil {
for _, jurVal := range surisdictionStr {
jurValInt, jurValErr := strconv.ParseInt(jurVal, 10, 64)
if jurValErr == nil {
surisdictionInt = append(surisdictionInt, jurValInt)
}
}
}
global.Gva_Authority_Authentication = surisdictionInt
var menuOperStr []string
var menuOperInts []int64
jsonErrSun := json.Unmarshal([]byte(user.Menuoper), &menuOperStr)
if jsonErrSun == nil {
for _, menuOperVal := range menuOperStr {
menuOperInt, menuOperErr := strconv.ParseInt(menuOperVal, 10, 64)
if menuOperErr == nil {
menuOperInts = append(menuOperInts, menuOperInt)
}
}
}
global.Gva_Authority_Authentication_Subsidiary = menuOperInts
redisFileKey := "ScanCode:Authentication:LoginApi_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + userKeyCode
redisClient := redishandel.RunRedis()
redisClient.SetRedisDb(5)
redisClient.SetRedisTime(10800)
redisClient.HashMsetAdd(redisFileKey, writeRedisData)
response.Result(0, saveData, "登录成功!", c)
}
}
//获取角色信息
func getRole(roleId int64) (roleCont roleModel.SystemRole) {
global.GVA_DB_HrDataBase.Where("`id` = ?", roleId).Find(&roleCont)
return
}