|
|
|
|
package publicapi
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"appPlatform/middleware/grocerystore"
|
|
|
|
|
"appPlatform/models/modelshr"
|
|
|
|
|
"appPlatform/models/modelsschool"
|
|
|
|
|
"appPlatform/overall"
|
|
|
|
|
"appPlatform/overall/publicmethod"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"net/http"
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
"unicode"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/mitchellh/mapstructure"
|
|
|
|
|
"github.com/mozillazg/go-pinyin"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-07-05 11:41:12
|
|
|
|
|
@ 功能:获取汉字首字母
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) ChineseInitial(c *gin.Context) {
|
|
|
|
|
var requestData publicmethod.PublicName
|
|
|
|
|
err := c.ShouldBindJSON(&requestData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(100, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if requestData.Name == "" {
|
|
|
|
|
publicmethod.Result(1, requestData.Name, c, "请输入关键字!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var wordStr string
|
|
|
|
|
for _, v := range requestData.Name {
|
|
|
|
|
if unicode.Is(unicode.Han, v) {
|
|
|
|
|
firstWord := publicmethod.ChineseFirstWordCapitalize(fmt.Sprintf("%c", v))
|
|
|
|
|
smallWord := strings.ToLower(firstWord)
|
|
|
|
|
// fmt.Printf("sddff--->%v----------->%v\n", firstWord, smallWord)
|
|
|
|
|
wordStr = fmt.Sprintf("%v%v", wordStr, smallWord)
|
|
|
|
|
} else {
|
|
|
|
|
wordStr = fmt.Sprintf("%v%c", wordStr, v)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// fmt.Printf("请输入关键字!----->%v\n", wordStr)
|
|
|
|
|
// firstWord := publicmethod.ChineseFirstWordCapitalize(requestData.Name)
|
|
|
|
|
// smallWord := strings.ToLower(firstWord)
|
|
|
|
|
var keyField string
|
|
|
|
|
jbq := 0
|
|
|
|
|
for _, kj := range wordStr {
|
|
|
|
|
if jbq < 1 {
|
|
|
|
|
if !unicode.IsNumber(kj) {
|
|
|
|
|
jbq++
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if jbq > 0 {
|
|
|
|
|
keyField = fmt.Sprintf("%v%c", keyField, kj)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
publicmethod.Result(0, keyField, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-07-07 09:27:19
|
|
|
|
|
@ 功能: 输出编号
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) SendNumber(c *gin.Context) {
|
|
|
|
|
var requestData publicmethod.CommonId[int64]
|
|
|
|
|
err := c.ShouldBindJSON(&requestData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
requestData.Id = 9
|
|
|
|
|
}
|
|
|
|
|
if requestData.Id == 0 {
|
|
|
|
|
requestData.Id = 9
|
|
|
|
|
}
|
|
|
|
|
uuid := publicmethod.GetUUid(requestData.Id)
|
|
|
|
|
var sendCont SendUUID
|
|
|
|
|
sendCont.UuId = uuid
|
|
|
|
|
sendCont.UuIdString = strconv.FormatInt(uuid, 10)
|
|
|
|
|
publicmethod.Result(0, sendCont, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-07-20 11:41:00
|
|
|
|
|
@ 功能: 生成身份验证唯一识别符
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) GenerateSignCode(c *gin.Context) {
|
|
|
|
|
userKey := c.Request.Header.Get("user-key")
|
|
|
|
|
userToken := c.Request.Header.Get("user-token")
|
|
|
|
|
if userKey == "" || userToken == "" {
|
|
|
|
|
publicmethod.Result(1, userKey, c, "验证失败!未知识别符!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
uuid := publicmethod.GetUUid(6)
|
|
|
|
|
uuidStr := strconv.FormatInt(uuid, 10)
|
|
|
|
|
signCode := publicmethod.Sha1Encryption(uuidStr)
|
|
|
|
|
|
|
|
|
|
var singCodeMd5 publicmethod.Md5Encryption
|
|
|
|
|
singCodeMd5.Md5EncryptionInit(signCode)
|
|
|
|
|
signCodeRedisKey := singCodeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
redisFileKey := fmt.Sprintf("ScanCode:Aut:IdentRec_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, signCodeRedisKey)
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
|
|
|
|
|
redisClient.SetRedisTime(180)
|
|
|
|
|
writeRedisData := map[string]interface{}{
|
|
|
|
|
"userkey": userKey,
|
|
|
|
|
"usertoken": userToken,
|
|
|
|
|
}
|
|
|
|
|
redisClient.HashMsetAdd(redisFileKey, writeRedisData)
|
|
|
|
|
sendCode := publicmethod.MapOut[string]()
|
|
|
|
|
sendCode["code"] = signCode
|
|
|
|
|
publicmethod.Result(0, sendCode, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-09-26 11:51:43
|
|
|
|
|
@ 功能: 中文转拼音
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) ChineseToPinyin(c *gin.Context) {
|
|
|
|
|
var requestData HanziToPinyin
|
|
|
|
|
c.ShouldBindJSON(&requestData)
|
|
|
|
|
if requestData.Title == "" {
|
|
|
|
|
publicmethod.Result(1, requestData, c, "未知中文语句!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
pyObject := pinyin.NewArgs()
|
|
|
|
|
switch requestData.Types {
|
|
|
|
|
case 1:
|
|
|
|
|
pyObject.Style = pinyin.Tone
|
|
|
|
|
case 2:
|
|
|
|
|
pyObject.Style = pinyin.Tone2
|
|
|
|
|
case 3:
|
|
|
|
|
pyObject.Style = pinyin.Initials
|
|
|
|
|
case 4:
|
|
|
|
|
pyObject.Style = pinyin.FirstLetter
|
|
|
|
|
case 5:
|
|
|
|
|
pyObject.Style = pinyin.Finals
|
|
|
|
|
case 6:
|
|
|
|
|
pyObject.Style = pinyin.FinalsTone
|
|
|
|
|
case 7:
|
|
|
|
|
pyObject.Style = pinyin.FinalsTone2
|
|
|
|
|
case 8:
|
|
|
|
|
pyObject.Style = pinyin.Tone3
|
|
|
|
|
case 9:
|
|
|
|
|
pyObject.Style = pinyin.FinalsTone3
|
|
|
|
|
default:
|
|
|
|
|
pyObject.Style = pinyin.Normal
|
|
|
|
|
}
|
|
|
|
|
pyObject.Separator = requestData.Connector
|
|
|
|
|
str := pinyin.Slug(requestData.Title, pyObject)
|
|
|
|
|
publicmethod.Result(0, str, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-11-02 10:35:14
|
|
|
|
|
@ 功能: 生成一键登录地址
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) CreateOneClickLogin(c *gin.Context) {
|
|
|
|
|
userKey := c.Request.Header.Get("user-key")
|
|
|
|
|
userToken := c.Request.Header.Get("user-token")
|
|
|
|
|
if userKey == "" || userToken == "" {
|
|
|
|
|
publicmethod.Result(1, userKey, c, "验证失败!未知识别符!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
sendMap := publicmethod.MapOut[string]()
|
|
|
|
|
var requestData SendUrl
|
|
|
|
|
err := c.ShouldBindJSON(&requestData)
|
|
|
|
|
if err != nil || requestData.UrlStr == "" {
|
|
|
|
|
publicmethod.Result(100, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
timeVal := time.Now().UnixNano() / 1e6
|
|
|
|
|
urlStr := fmt.Sprintf("/insensibleLogin?userkey=%v&usertoken=%v&time=%v", userKey, userToken, timeVal)
|
|
|
|
|
if !strings.HasPrefix(requestData.UrlStr, "https://") && !strings.HasPrefix(requestData.UrlStr, "http://") {
|
|
|
|
|
urlStr = fmt.Sprintf("http://%v%v", requestData.UrlStr, urlStr)
|
|
|
|
|
} else {
|
|
|
|
|
urlStr = fmt.Sprintf("%v%v", requestData.UrlStr, urlStr)
|
|
|
|
|
}
|
|
|
|
|
singStr := fmt.Sprintf("%v%v%v", userKey, userToken, timeVal)
|
|
|
|
|
var singCodeMd5 publicmethod.Md5Encryption
|
|
|
|
|
singCodeMd5.Md5EncryptionInit(singStr)
|
|
|
|
|
signCodeRedisKey := singCodeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
urlStr = fmt.Sprintf("%v&sing=%v", urlStr, signCodeRedisKey)
|
|
|
|
|
|
|
|
|
|
sendMap["http"] = strings.HasPrefix(requestData.UrlStr, "http://")
|
|
|
|
|
sendMap["https"] = strings.HasPrefix(requestData.UrlStr, "https://")
|
|
|
|
|
sendMap["userKey"] = userKey
|
|
|
|
|
sendMap["userToken"] = userToken
|
|
|
|
|
sendMap["urlStr"] = urlStr
|
|
|
|
|
|
|
|
|
|
publicmethod.Result(0, urlStr, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-05 15:34:23
|
|
|
|
|
@ 功能: 获取带规则编号
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) GainNumber(c *gin.Context) {
|
|
|
|
|
var requestData GainRulsNumner
|
|
|
|
|
c.ShouldBindJSON(&requestData)
|
|
|
|
|
uuid := strconv.FormatInt(publicmethod.GetUUid(1), 10)
|
|
|
|
|
// fmt.Printf("uuidAry---->%v\n", uuid)
|
|
|
|
|
if requestData.Automatic {
|
|
|
|
|
uuid = requestData.GainUniqueNumber(uuid)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
publicmethod.Result(0, uuid, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-06 10:39:13
|
|
|
|
|
@ 功能: 获取唯一编号
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (g *GainRulsNumner) GainUniqueNumber(uuid string) string {
|
|
|
|
|
var uuidAry []string
|
|
|
|
|
if len(g.CustomRules) > 0 {
|
|
|
|
|
for _, v := range g.CustomRules {
|
|
|
|
|
switch v.Types {
|
|
|
|
|
case "text":
|
|
|
|
|
uuidAry = append(uuidAry, v.Rule)
|
|
|
|
|
case "randomnumber":
|
|
|
|
|
maxNum, maxerr := strconv.Atoi(v.Rule)
|
|
|
|
|
// fmt.Printf("maxNum---->%v---->%v\n", maxNum, maxerr)
|
|
|
|
|
if maxerr != nil {
|
|
|
|
|
randNum := publicmethod.GetRandNumber(6)
|
|
|
|
|
uuidAry = append(uuidAry, strconv.FormatInt(randNum, 10))
|
|
|
|
|
} else {
|
|
|
|
|
randNum := publicmethod.GetRandNumber(maxNum)
|
|
|
|
|
uuidAry = append(uuidAry, strconv.FormatInt(randNum, 10))
|
|
|
|
|
}
|
|
|
|
|
case "time":
|
|
|
|
|
uuidAry = append(uuidAry, JudgeYearType(v.Rule))
|
|
|
|
|
case "serialnumber":
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
if g.TableKey == "" {
|
|
|
|
|
redisKey := fmt.Sprintf("GetEncoding:AppPlatform:Key_Currency_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
|
|
|
|
|
numAry, numErr := redisClient.Lrange(redisKey, 0, -1)
|
|
|
|
|
if numErr != nil {
|
|
|
|
|
redisClient.Rpush(redisKey, v.Rule)
|
|
|
|
|
uuidAry = append(uuidAry, v.Rule)
|
|
|
|
|
} else {
|
|
|
|
|
if len(numAry) < 1 {
|
|
|
|
|
redisClient.Rpush(redisKey, v.Rule)
|
|
|
|
|
uuidAry = append(uuidAry, v.Rule)
|
|
|
|
|
} else {
|
|
|
|
|
var numFlow JudgeInStringAry
|
|
|
|
|
numFlow.Str = v.Rule
|
|
|
|
|
numFlow.StrAry = numAry
|
|
|
|
|
jieguo := numFlow.GainNotInStr()
|
|
|
|
|
redisClient.Rpush(redisKey, jieguo)
|
|
|
|
|
uuidAry = append(uuidAry, jieguo)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
redisKey := fmt.Sprintf("GetEncoding:AppPlatform:Key_Currency_%v_%v", g.TableKey, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
|
|
|
|
|
numAry, _ := redisClient.Lrange(redisKey, 0, -1)
|
|
|
|
|
var count int64
|
|
|
|
|
err := overall.CONSTANT_DB_CustomerForm.Table(g.TableKey).Count(&count).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
var numFlow JudgeInStringAry
|
|
|
|
|
numFlow.Str = v.Rule
|
|
|
|
|
numFlow.StrAry = numAry
|
|
|
|
|
jieguo := numFlow.GainNotInStr()
|
|
|
|
|
redisClient.Rpush(redisKey, jieguo)
|
|
|
|
|
uuidAry = append(uuidAry, jieguo)
|
|
|
|
|
} else {
|
|
|
|
|
count = count + 1
|
|
|
|
|
var numFlow JudgeInStringAry
|
|
|
|
|
numFlow.Str = strconv.FormatInt(count, 10)
|
|
|
|
|
numFlow.StrAry = numAry
|
|
|
|
|
jieguo := numFlow.GainNotInStr()
|
|
|
|
|
redisClient.Rpush(redisKey, jieguo)
|
|
|
|
|
uuidAry = append(uuidAry, jieguo)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// fmt.Printf("uuidAry-->%v\n", uuidAry)
|
|
|
|
|
if len(uuidAry) > 0 {
|
|
|
|
|
uuid = strings.Join(uuidAry, "-")
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
redisKey := fmt.Sprintf("GetEncoding:AppPlatform:NumKey_Currency_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
|
|
|
|
|
if g.TableKey != "" {
|
|
|
|
|
redisKey = fmt.Sprintf("GetEncoding:AppPlatform:NumKey_Currency_%v_%v", g.TableKey, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
|
|
|
|
|
}
|
|
|
|
|
numAry, _ := redisClient.Lrange(redisKey, 0, -1)
|
|
|
|
|
if len(numAry) > 0 {
|
|
|
|
|
if !publicmethod.IsInTrue[string](uuid, numAry) {
|
|
|
|
|
redisClient.Rpush(redisKey, uuid)
|
|
|
|
|
return uuid
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
redisClient.Rpush(redisKey, uuid)
|
|
|
|
|
return uuid
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
g.GainUniqueNumber(uuid)
|
|
|
|
|
}
|
|
|
|
|
return uuid
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-06 10:28:01
|
|
|
|
|
@ 功能: 获取一个不存在的字符串
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (j *JudgeInStringAry) GainNotInStr() string {
|
|
|
|
|
zhi, _ := strconv.ParseInt(j.Str, 10, 64)
|
|
|
|
|
if !publicmethod.IsInTrue[string](j.Str, j.StrAry) {
|
|
|
|
|
return j.Str
|
|
|
|
|
}
|
|
|
|
|
zhi++
|
|
|
|
|
j.Str = strconv.FormatInt(zhi, 10)
|
|
|
|
|
return j.GainNotInStr()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-05 16:27:20
|
|
|
|
|
@ 功能: 判定随机字符串年格式
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func JudgeYearType(yearClass string) (timeStr string) {
|
|
|
|
|
yearClassBig := strings.ToUpper(yearClass)
|
|
|
|
|
curraytime := time.Now().Unix()
|
|
|
|
|
switch yearClassBig {
|
|
|
|
|
case "YYYYMMDD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 20)
|
|
|
|
|
case "YYYYMMD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 28)
|
|
|
|
|
case "YYYYMD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 29)
|
|
|
|
|
case "YYMD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 30)
|
|
|
|
|
case "YYYYMM":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 21)
|
|
|
|
|
case "YYYYM":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 31)
|
|
|
|
|
case "YYYY":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 16)
|
|
|
|
|
case "YY":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 32)
|
|
|
|
|
case "YMD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 33)
|
|
|
|
|
case "YM":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 34)
|
|
|
|
|
case "Y":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 16)
|
|
|
|
|
case "MMDD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 35)
|
|
|
|
|
case "MMD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 36)
|
|
|
|
|
case "MD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 37)
|
|
|
|
|
case "M":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 38)
|
|
|
|
|
case "MM":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 17)
|
|
|
|
|
case "DD":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 18)
|
|
|
|
|
case "D":
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 39)
|
|
|
|
|
default:
|
|
|
|
|
timeStr = publicmethod.UnixTimeToDay(curraytime, 20)
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-13 07:57:27
|
|
|
|
|
@ 功能: 一键登录授权
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) ObtainToken(c *gin.Context) {
|
|
|
|
|
ContentType := c.Request.Header.Get("Content-Type")
|
|
|
|
|
Origin := c.Request.Header.Get("Origin")
|
|
|
|
|
userAgent := c.Request.Header.Get("User-Agent")
|
|
|
|
|
var requestData gainAuthorize
|
|
|
|
|
err := c.ShouldBindJSON(&requestData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(100, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if requestData.UserNumber == "" || requestData.Password == "" {
|
|
|
|
|
publicmethod.Result(101, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if ContentType == "" || userAgent == "" || Origin == "" {
|
|
|
|
|
// publicmethod.Result(100, err, c)
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
var pwdMd5Cont publicmethod.Md5Encryption
|
|
|
|
|
pwdMd5Cont.Md5EncryptionInit(requestData.Password)
|
|
|
|
|
pwdStr := pwdMd5Cont.Md5EncryptionAlgorithm()
|
|
|
|
|
//验证账号
|
|
|
|
|
var empCont modelshr.EmpowerUser
|
|
|
|
|
err = empCont.GetCont(map[string]interface{}{"userkey": requestData.UserNumber, "password": pwdStr}, "verification_code")
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(2000, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ContentType = requestData.UserNumber
|
|
|
|
|
Origin = pwdStr
|
|
|
|
|
userAgent = empCont.VerificationCode
|
|
|
|
|
|
|
|
|
|
//获取雪花随机数
|
|
|
|
|
uuid := publicmethod.GetUUid(6)
|
|
|
|
|
uuidStr := strconv.FormatInt(uuid, 10)
|
|
|
|
|
var uuidMd5 publicmethod.Md5Encryption
|
|
|
|
|
uuidMd5.Md5EncryptionInit(uuidStr)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
uuidMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
uuidMd5Str := uuidMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//头文件加密
|
|
|
|
|
//Content-Type
|
|
|
|
|
var ContentTypeMd5 publicmethod.Md5Encryption
|
|
|
|
|
ContentTypeMd5.Md5EncryptionInit(ContentType)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
ContentTypeMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
ContentTypeMd5Str := ContentTypeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//Origin
|
|
|
|
|
var OriginMd5 publicmethod.Md5Encryption
|
|
|
|
|
OriginMd5.Md5EncryptionInit(Origin)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
OriginMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
OriginMd5Str := OriginMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//User-Agent
|
|
|
|
|
var userAgentMd5 publicmethod.Md5Encryption
|
|
|
|
|
userAgentMd5.Md5EncryptionInit(userAgent)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
userAgentMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
tokenRedisKey := fmt.Sprintf("%v-%v-%v-%v-%v-%v", ContentTypeMd5Str, OriginMd5Str, userAgentMd5Str, uuidMd5Str, requestData.UserNumber, pwdStr)
|
|
|
|
|
|
|
|
|
|
var tokenMd5 publicmethod.Md5Encryption
|
|
|
|
|
tokenMd5.Md5EncryptionInit(tokenRedisKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
tokenMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
//redis键
|
|
|
|
|
redisKey := fmt.Sprintf("Authentication:PasswordFreeLogin:key_%v", tokenMd5Str)
|
|
|
|
|
//哈希值
|
|
|
|
|
redisCont := publicmethod.MapOut[string]()
|
|
|
|
|
redisCont["number"] = uuidStr
|
|
|
|
|
redisCont["userkey"] = requestData.UserNumber
|
|
|
|
|
redisCont["password"] = pwdStr
|
|
|
|
|
//将信息写入哈希
|
|
|
|
|
// redisClient := grocerystore.RunRedisClan(overall.CONSTANT_ClusterClient)
|
|
|
|
|
// redisClient.SetRedisTime(10800)
|
|
|
|
|
// isTrue := redisClient.HashMsetAddClan(redisKey, redisCont)
|
|
|
|
|
// grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
redisClient.SetRedisTime(10800)
|
|
|
|
|
isTrue := redisClient.HashMsetAdd(redisKey, redisCont)
|
|
|
|
|
if !isTrue {
|
|
|
|
|
publicmethod.Result(1, overall.CONSTANT_Cluster, c, "授权失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//输出内容
|
|
|
|
|
sendCont := publicmethod.MapOut[string]()
|
|
|
|
|
sendCont["number"] = uuidStr
|
|
|
|
|
sendCont["token"] = tokenMd5Str
|
|
|
|
|
sendCont["isTrue"] = isTrue
|
|
|
|
|
sendCont["tokenRedisKey"] = tokenRedisKey
|
|
|
|
|
fmt.Printf("contentType:%v\n", ContentType)
|
|
|
|
|
publicmethod.Result(0, sendCont, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-13 09:00:45
|
|
|
|
|
@ 功能: 验证一键登录者身份
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) VerifyIdentity(c *gin.Context) {
|
|
|
|
|
ContentType := c.Request.Header.Get("Content-Type")
|
|
|
|
|
origin := c.Request.Header.Get("Origin")
|
|
|
|
|
userAgent := c.Request.Header.Get("User-Agent")
|
|
|
|
|
token := c.Query("token")
|
|
|
|
|
number := c.Query("number")
|
|
|
|
|
codeStr := c.Query("code")
|
|
|
|
|
timeStr := c.Query("time")
|
|
|
|
|
openId := c.Query("openid")
|
|
|
|
|
if token == "" || number == "" || timeStr == "" || codeStr == "" {
|
|
|
|
|
publicmethod.Result(100, ContentType, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// currTime := time.Now().Unix()
|
|
|
|
|
// queryTimeInt, _ := strconv.ParseInt(timeStr, 10, 64)
|
|
|
|
|
// if (currTime - queryTimeInt) > 30 {
|
|
|
|
|
// publicmethod.Result(1, timeStr, c, "授权超时")
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
//redis键
|
|
|
|
|
redisKey := fmt.Sprintf("Authentication:PasswordFreeLogin:key_%v", token)
|
|
|
|
|
// redisClient := grocerystore.RunRedisClan(overall.CONSTANT_ClusterClient)
|
|
|
|
|
// tokenInfo, isTrue := redisClient.HashGetAllClan(redisKey)
|
|
|
|
|
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
tokenInfo, isTrue := redisClient.HashGetAll(redisKey)
|
|
|
|
|
if isTrue != true {
|
|
|
|
|
publicmethod.Result(1, redisKey, c, "token错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var validator ValidatorType
|
|
|
|
|
err := mapstructure.Decode(tokenInfo, &validator)
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(1, err, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//验证账号
|
|
|
|
|
var empCont modelshr.EmpowerUser
|
|
|
|
|
err = empCont.GetCont(map[string]interface{}{"userkey": validator.UserKey, "password": validator.PassWord}, "verification_code")
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(1, err, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ContentType = validator.UserKey
|
|
|
|
|
origin = validator.PassWord
|
|
|
|
|
userAgent = empCont.VerificationCode
|
|
|
|
|
//头文件加密
|
|
|
|
|
//Content-Type
|
|
|
|
|
var contentTypeMd5 publicmethod.Md5Encryption
|
|
|
|
|
contentTypeMd5.Md5EncryptionInit(ContentType)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
contentTypeMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
contentTypeMd5Str := contentTypeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
fmt.Printf("contentType:%v\n", ContentType)
|
|
|
|
|
//Origin
|
|
|
|
|
var originMd5 publicmethod.Md5Encryption
|
|
|
|
|
originMd5.Md5EncryptionInit(origin)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
originMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
originMd5Str := originMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//User-Agent
|
|
|
|
|
var userAgentMd5 publicmethod.Md5Encryption
|
|
|
|
|
userAgentMd5.Md5EncryptionInit(userAgent)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
userAgentMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
var uuidMd5 publicmethod.Md5Encryption
|
|
|
|
|
uuidMd5.Md5EncryptionInit(validator.Number)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
uuidMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
uuidMd5Str := uuidMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
tokenRedisKey := fmt.Sprintf("%v-%v-%v-%v-%v-%v", contentTypeMd5Str, originMd5Str, userAgentMd5Str, uuidMd5Str, validator.UserKey, validator.PassWord)
|
|
|
|
|
var tokenMd5 publicmethod.Md5Encryption
|
|
|
|
|
tokenMd5.Md5EncryptionInit(tokenRedisKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
tokenMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//系统验证系数
|
|
|
|
|
systemKey := fmt.Sprintf("%v-%v", tokenMd5Str, uuidMd5Str)
|
|
|
|
|
var systemKeyMd5 publicmethod.Md5Encryption
|
|
|
|
|
systemKeyMd5.Md5EncryptionInit(systemKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
systemKeyMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
systemKeyMd5Str := systemKeyMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//接收系数
|
|
|
|
|
receiveKey := fmt.Sprintf("%v-%v", token, number)
|
|
|
|
|
var receiveKeyMd5 publicmethod.Md5Encryption
|
|
|
|
|
receiveKeyMd5.Md5EncryptionInit(receiveKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
receiveKeyMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
receiveKeyMd5Str := receiveKeyMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
sendData := publicmethod.MapOut[string]()
|
|
|
|
|
sendData["systemKeyMd5Str"] = systemKeyMd5Str
|
|
|
|
|
sendData["receiveKeyMd5Str"] = receiveKeyMd5Str
|
|
|
|
|
sendData["uuidMd5Str"] = uuidMd5Str
|
|
|
|
|
sendData["number"] = number
|
|
|
|
|
sendData["tokenMd5Str"] = tokenMd5Str
|
|
|
|
|
sendData["token"] = token
|
|
|
|
|
sendData["tokenRedisKey"] = tokenRedisKey
|
|
|
|
|
|
|
|
|
|
if systemKeyMd5Str != receiveKeyMd5Str {
|
|
|
|
|
publicmethod.Result(1, sendData, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var userCont modelshr.ManCont
|
|
|
|
|
err = overall.CONSTANT_DB_HR.Where("`number` = ? AND `emp_type` BETWEEN ? AND ?", codeStr, 1, 10).Find(&userCont).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(1, sendData, c, "此账号禁止访问!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var md5JiaMi publicmethod.Md5Encryption
|
|
|
|
|
md5JiaMi.Md5EncryptionInit(userAgent)
|
|
|
|
|
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
var md5JiaMiNumber publicmethod.Md5Encryption
|
|
|
|
|
md5JiaMiNumber.Md5EncryptionInit(userCont.Number)
|
|
|
|
|
userKeyCode := md5JiaMiNumber.Md5EncryptionAlgorithm()
|
|
|
|
|
sha1Str := userKeyCode + userCont.Number + userCont.Password + md5Token
|
|
|
|
|
sha1Token := publicmethod.Sha1Encryption(sha1Str)
|
|
|
|
|
|
|
|
|
|
//返回值
|
|
|
|
|
saveData := publicmethod.MapOut[string]()
|
|
|
|
|
saveData["key"] = userKeyCode
|
|
|
|
|
saveData["token"] = sha1Token
|
|
|
|
|
saveData["userinfo"] = userCont
|
|
|
|
|
|
|
|
|
|
menuoper, jurisdiction := getRoleSeat(userCont.Role)
|
|
|
|
|
writeRedisData := map[string]interface{}{
|
|
|
|
|
"userkey": userKeyCode,
|
|
|
|
|
"key": userCont.Key,
|
|
|
|
|
"usernumber": userCont.Number,
|
|
|
|
|
"userpwd": userCont.Password,
|
|
|
|
|
"usertoken": sha1Token,
|
|
|
|
|
"jurisdiction": jurisdiction,
|
|
|
|
|
"menuOper": menuoper,
|
|
|
|
|
"wand": 118,
|
|
|
|
|
}
|
|
|
|
|
//API Token数据
|
|
|
|
|
redisFileKey := fmt.Sprintf("ScanCode:Authentication:LoginApi_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userKeyCode)
|
|
|
|
|
redisClients := grocerystore.RunRedis(overall.CONSTANT_REDIS5)
|
|
|
|
|
redisClients.SetRedisTime(10800)
|
|
|
|
|
redisClients.HashMsetAdd(redisFileKey, writeRedisData)
|
|
|
|
|
|
|
|
|
|
_, companyId, _, sunDepartId, _ := publicmethod.GetOrgStructurees(userCont.AdminOrg)
|
|
|
|
|
var sunmaindeparment int64
|
|
|
|
|
if companyId != sunDepartId {
|
|
|
|
|
sunmaindeparment = sunDepartId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//缓存写入个人信息
|
|
|
|
|
redisMyContKey := fmt.Sprintf("ScanCode:Authentication:UserCont_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userCont.Number)
|
|
|
|
|
myCont := publicmethod.MapOut[string]()
|
|
|
|
|
myCont["id"] = userCont.Id
|
|
|
|
|
myCont["number"] = userCont.Number //员工工号
|
|
|
|
|
myCont["name"] = userCont.Name //姓名
|
|
|
|
|
myCont["icon"] = userCont.Icon //头像
|
|
|
|
|
myCont["hireclass"] = userCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;)
|
|
|
|
|
myCont["emptype"] = userCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)
|
|
|
|
|
myCont["company"] = userCont.Company //入职公司
|
|
|
|
|
// myCont["maindeparment"] = userCont.MainDeparment //主部门
|
|
|
|
|
// myCont["sunmaindeparment"] = userCont.SunMainDeparment //二级主部门
|
|
|
|
|
myCont["maindeparment"] = companyId //主部门
|
|
|
|
|
myCont["sunmaindeparment"] = sunmaindeparment //二级主部门
|
|
|
|
|
|
|
|
|
|
myCont["deparment"] = userCont.Deparment //部门
|
|
|
|
|
myCont["adminorg"] = userCont.AdminOrg //所属行政组织
|
|
|
|
|
myCont["teamid"] = userCont.TeamId //班组
|
|
|
|
|
myCont["position"] = userCont.Position //职位
|
|
|
|
|
myCont["jobclass"] = userCont.JobClass //职务分类
|
|
|
|
|
myCont["jobid"] = userCont.JobId //职务
|
|
|
|
|
myCont["jobleve"] = userCont.JobLeve //职务等级
|
|
|
|
|
myCont["wechat"] = userCont.Wechat //微信UserId
|
|
|
|
|
myCont["workwechat"] = userCont.WorkWechat //企业微信UserId
|
|
|
|
|
myCont["state"] = userCont.State //状态(1:启用;2:禁用;3:删除)
|
|
|
|
|
myCont["key"] = userCont.Key //key
|
|
|
|
|
myCont["isadmin"] = userCont.IsAdmin //是否为管理员(1:不是;2:分公司;3:集团管理员;4:超级管
|
|
|
|
|
myCont["password"] = userCont.Password //密码
|
|
|
|
|
myCont["role"] = userCont.Role //角色
|
|
|
|
|
myCont["idcardno"] = userCont.Idcardno //身份证号
|
|
|
|
|
myCont["passportno"] = userCont.Passportno //护照号码
|
|
|
|
|
myCont["globalroaming"] = userCont.Globalroaming //国际区号
|
|
|
|
|
myCont["mobilephone"] = userCont.Mobilephone //手机号码
|
|
|
|
|
myCont["email"] = userCont.Email //电子邮件
|
|
|
|
|
myCont["gender"] = userCont.Gender //性别(1:男性;2:女性;3:中性)
|
|
|
|
|
myCont["birthday"] = userCont.Birthday //birthday
|
|
|
|
|
myCont["myfolk"] = userCont.Myfolk //民族
|
|
|
|
|
myCont["nativeplace"] = userCont.Nativeplace //籍贯
|
|
|
|
|
myCont["idcardstartdate"] = userCont.Idcardstartdate //身份证有效期开始
|
|
|
|
|
myCont["idcardenddate"] = userCont.Idcardenddate //身份证有效期结束
|
|
|
|
|
myCont["idcardaddress"] = userCont.Idcardaddress //身份证地址
|
|
|
|
|
myCont["idcardIssued"] = userCont.IdcardIssued //身份证签发机关
|
|
|
|
|
myCont["health"] = userCont.Health //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)
|
|
|
|
|
myCont["maritalstatus"] = userCont.Maritalstatus //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)
|
|
|
|
|
myCont["internaltelephone"] = userCont.Internaltelephone //内线电话
|
|
|
|
|
myCont["currentresidence"] = userCont.Currentresidence //现居住地址
|
|
|
|
|
myCont["constellationing"] = userCont.Constellation //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)
|
|
|
|
|
myCont["isdoubleworker"] = userCont.Isdoubleworker //是否双职工(1:是;2:否)
|
|
|
|
|
myCont["isveterans"] = userCont.Isveterans //是否为退役军人(1:是;2:否)
|
|
|
|
|
myCont["veteransnumber"] = userCont.Veteransnumber //退役证编号
|
|
|
|
|
myCont["jobstartdate"] = userCont.Jobstartdate //参加工作日期
|
|
|
|
|
myCont["entrydate"] = userCont.Entrydate //入职日期
|
|
|
|
|
myCont["probationperiod"] = userCont.Probationperiod //试用期
|
|
|
|
|
myCont["planformaldate"] = userCont.Planformaldate //预计转正日期
|
|
|
|
|
myCont["political_outlook"] = userCont.PoliticalOutlook //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|
|
|
|
var companyCont modelshr.AdministrativeOrganization
|
|
|
|
|
companyCont.GetCont(map[string]interface{}{"`id`": userCont.Company}, "`name`")
|
|
|
|
|
myCont["companyname"] = companyCont.Name
|
|
|
|
|
var departmentCont modelshr.AdministrativeOrganization
|
|
|
|
|
departmentCont.GetCont(map[string]interface{}{"`id`": userCont.MainDeparment}, "`name`")
|
|
|
|
|
myCont["maindeparmentname"] = departmentCont.Name
|
|
|
|
|
var postInfo modelshr.Position
|
|
|
|
|
postInfo.GetCont(map[string]interface{}{"`id`": userCont.Position}, "`name`")
|
|
|
|
|
myCont["positionname"] = postInfo.Name
|
|
|
|
|
redisClients.HashMsetAdd(redisMyContKey, myCont)
|
|
|
|
|
redisClient.HashMsetAdd(redisMyContKey, myCont)
|
|
|
|
|
saveData["usercont"] = myCont
|
|
|
|
|
|
|
|
|
|
if openId != "" {
|
|
|
|
|
var userInfo modelshr.PersonArchives
|
|
|
|
|
userInfo.EiteCont(map[string]interface{}{"id": userCont.Id}, map[string]interface{}{"work_wechat": openId})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var sendKpiCont WriteIderCont
|
|
|
|
|
sendKpiCont.Openid = openId
|
|
|
|
|
sendKpiCont.Key = userKeyCode
|
|
|
|
|
sendKpiCont.Token = sha1Token
|
|
|
|
|
sendKpiCont.UserInfo.Key = strconv.FormatInt(userCont.Key, 10)
|
|
|
|
|
sendKpiCont.UserInfo.Number = userCont.Number
|
|
|
|
|
sendKpiCont.UserInfo.Password = userCont.Password
|
|
|
|
|
sendDate, _ := json.Marshal(sendKpiCont)
|
|
|
|
|
publicmethod.CurlPostJosn("http://120.224.6.6:39168/shiyan/write_token", sendDate)
|
|
|
|
|
c.Redirect(http.StatusMovedPermanently, "/")
|
|
|
|
|
publicmethod.Result(0, saveData, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取权限点位
|
|
|
|
|
func getRoleSeat(roleId string) (menuStr, buttonStr string) {
|
|
|
|
|
var roleInfo modelsschool.SystemRole
|
|
|
|
|
err := roleInfo.GetCont(map[string]interface{}{"r_id": roleId}, "r_menu_oper", "r_jurisdiction")
|
|
|
|
|
if err != nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
menuStr = roleInfo.MenuOper
|
|
|
|
|
buttonStr = roleInfo.Jurisdiction
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
@ 作者: 秦东
|
|
|
|
|
@ 时间: 2023-12-13 16:09:59
|
|
|
|
|
@ 功能: 验证无感登录
|
|
|
|
|
@ 参数
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 返回值
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
@ 方法原型
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
*/
|
|
|
|
|
func (a *ApiMethod) SilentLogin(c *gin.Context) {
|
|
|
|
|
ContentType := c.Request.Header.Get("Content-Type")
|
|
|
|
|
origin := c.Request.Header.Get("Origin")
|
|
|
|
|
userAgent := c.Request.Header.Get("User-Agent")
|
|
|
|
|
var requestData SilentLoginInfo
|
|
|
|
|
err := c.ShouldBindJSON(&requestData)
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(100, err, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if requestData.Token == "" || requestData.Number == "" || requestData.Time == "" || requestData.Code == "" {
|
|
|
|
|
publicmethod.Result(10001, ContentType, c, "token错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// currTime := time.Now().Unix()
|
|
|
|
|
// queryTimeInt, _ := strconv.ParseInt(requestData.Time, 10, 64)
|
|
|
|
|
// if (currTime-queryTimeInt) > 30 || (currTime-queryTimeInt) < 0 {
|
|
|
|
|
// publicmethod.Result(1, currTime-queryTimeInt, c, "授权超时")
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
//redis键
|
|
|
|
|
redisKey := fmt.Sprintf("Authentication:PasswordFreeLogin:key_%v", requestData.Token)
|
|
|
|
|
// redisClient := grocerystore.RunRedisClan(overall.CONSTANT_ClusterClient)
|
|
|
|
|
// tokenInfo, isTrue := redisClient.HashGetAllClan(redisKey)
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_Cluster)
|
|
|
|
|
tokenInfo, isTrue := redisClient.HashGetAll(redisKey)
|
|
|
|
|
if isTrue != true {
|
|
|
|
|
publicmethod.Result(10001, redisKey, c, "token错误")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var validator ValidatorType
|
|
|
|
|
err = mapstructure.Decode(tokenInfo, &validator)
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(10001, err, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//验证账号
|
|
|
|
|
var empCont modelshr.EmpowerUser
|
|
|
|
|
err = empCont.GetCont(map[string]interface{}{"userkey": validator.UserKey, "password": validator.PassWord}, "verification_code")
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(10001, err, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ContentType = validator.UserKey
|
|
|
|
|
origin = validator.PassWord
|
|
|
|
|
userAgent = empCont.VerificationCode
|
|
|
|
|
//头文件加密
|
|
|
|
|
//Content-Type
|
|
|
|
|
var contentTypeMd5 publicmethod.Md5Encryption
|
|
|
|
|
contentTypeMd5.Md5EncryptionInit(ContentType)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
contentTypeMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
contentTypeMd5Str := contentTypeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
fmt.Printf("contentType:%v\n", ContentType)
|
|
|
|
|
//Origin
|
|
|
|
|
var originMd5 publicmethod.Md5Encryption
|
|
|
|
|
originMd5.Md5EncryptionInit(origin)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
originMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
originMd5Str := originMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//User-Agent
|
|
|
|
|
var userAgentMd5 publicmethod.Md5Encryption
|
|
|
|
|
userAgentMd5.Md5EncryptionInit(userAgent)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
userAgentMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
var uuidMd5 publicmethod.Md5Encryption
|
|
|
|
|
uuidMd5.Md5EncryptionInit(validator.Number)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
uuidMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
uuidMd5Str := uuidMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
tokenRedisKey := fmt.Sprintf("%v-%v-%v-%v-%v-%v", contentTypeMd5Str, originMd5Str, userAgentMd5Str, uuidMd5Str, validator.UserKey, validator.PassWord)
|
|
|
|
|
var tokenMd5 publicmethod.Md5Encryption
|
|
|
|
|
tokenMd5.Md5EncryptionInit(tokenRedisKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
tokenMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//系统验证系数
|
|
|
|
|
systemKey := fmt.Sprintf("%v-%v", tokenMd5Str, uuidMd5Str)
|
|
|
|
|
var systemKeyMd5 publicmethod.Md5Encryption
|
|
|
|
|
systemKeyMd5.Md5EncryptionInit(systemKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
systemKeyMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
systemKeyMd5Str := systemKeyMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//接收系数
|
|
|
|
|
receiveKey := fmt.Sprintf("%v-%v", requestData.Token, requestData.Number)
|
|
|
|
|
var receiveKeyMd5 publicmethod.Md5Encryption
|
|
|
|
|
receiveKeyMd5.Md5EncryptionInit(receiveKey)
|
|
|
|
|
if empCont.VerificationCode != "" {
|
|
|
|
|
receiveKeyMd5.AppKey = empCont.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
receiveKeyMd5Str := receiveKeyMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
sendData := publicmethod.MapOut[string]()
|
|
|
|
|
sendData["systemKeyMd5Str"] = systemKeyMd5Str
|
|
|
|
|
sendData["receiveKeyMd5Str"] = receiveKeyMd5Str
|
|
|
|
|
sendData["uuidMd5Str"] = uuidMd5Str
|
|
|
|
|
sendData["number"] = requestData.Number
|
|
|
|
|
sendData["tokenMd5Str"] = tokenMd5Str
|
|
|
|
|
sendData["token"] = requestData.Token
|
|
|
|
|
sendData["tokenRedisKey"] = tokenRedisKey
|
|
|
|
|
|
|
|
|
|
if systemKeyMd5Str != receiveKeyMd5Str {
|
|
|
|
|
publicmethod.Result(10001, sendData, c, "对不起!身份验证失败!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var userCont modelshr.ManCont
|
|
|
|
|
err = overall.CONSTANT_DB_HR.Where("`number` = ? AND `emp_type` BETWEEN ? AND ?", requestData.Code, 1, 10).Find(&userCont).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
publicmethod.Result(10001, sendData, c, "此账号禁止访问!")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var md5JiaMi publicmethod.Md5Encryption
|
|
|
|
|
md5JiaMi.Md5EncryptionInit(userAgent)
|
|
|
|
|
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
var md5JiaMiNumber publicmethod.Md5Encryption
|
|
|
|
|
md5JiaMiNumber.Md5EncryptionInit(userCont.Number)
|
|
|
|
|
userKeyCode := md5JiaMiNumber.Md5EncryptionAlgorithm()
|
|
|
|
|
sha1Str := userKeyCode + userCont.Number + userCont.Password + md5Token
|
|
|
|
|
sha1Token := publicmethod.Sha1Encryption(sha1Str)
|
|
|
|
|
|
|
|
|
|
//返回值
|
|
|
|
|
saveData := publicmethod.MapOut[string]()
|
|
|
|
|
saveData["key"] = userKeyCode
|
|
|
|
|
saveData["token"] = sha1Token
|
|
|
|
|
saveData["userinfo"] = userCont
|
|
|
|
|
|
|
|
|
|
menuoper, jurisdiction := getRoleSeat(userCont.Role)
|
|
|
|
|
writeRedisData := map[string]interface{}{
|
|
|
|
|
"userkey": userKeyCode,
|
|
|
|
|
"key": userCont.Key,
|
|
|
|
|
"usernumber": userCont.Number,
|
|
|
|
|
"userpwd": userCont.Password,
|
|
|
|
|
"usertoken": sha1Token,
|
|
|
|
|
"jurisdiction": jurisdiction,
|
|
|
|
|
"menuOper": menuoper,
|
|
|
|
|
"wand": 118,
|
|
|
|
|
}
|
|
|
|
|
//API Token数据
|
|
|
|
|
redisFileKey := fmt.Sprintf("ScanCode:Authentication:LoginApi_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userKeyCode)
|
|
|
|
|
redisClients := grocerystore.RunRedis(overall.CONSTANT_REDIS5)
|
|
|
|
|
redisClients.SetRedisTime(10800)
|
|
|
|
|
redisClients.HashMsetAdd(redisFileKey, writeRedisData)
|
|
|
|
|
|
|
|
|
|
_, companyId, _, sunDepartId, _ := publicmethod.GetOrgStructurees(userCont.AdminOrg)
|
|
|
|
|
var sunmaindeparment int64
|
|
|
|
|
if companyId != sunDepartId {
|
|
|
|
|
sunmaindeparment = sunDepartId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//缓存写入个人信息
|
|
|
|
|
redisMyContKey := fmt.Sprintf("ScanCode:Authentication:UserCont_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userCont.Number)
|
|
|
|
|
myCont := publicmethod.MapOut[string]()
|
|
|
|
|
myCont["id"] = userCont.Id
|
|
|
|
|
myCont["number"] = userCont.Number //员工工号
|
|
|
|
|
myCont["name"] = userCont.Name //姓名
|
|
|
|
|
myCont["icon"] = userCont.Icon //头像
|
|
|
|
|
myCont["hireclass"] = userCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;)
|
|
|
|
|
myCont["emptype"] = userCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)
|
|
|
|
|
myCont["company"] = userCont.Company //入职公司
|
|
|
|
|
// myCont["maindeparment"] = userCont.MainDeparment //主部门
|
|
|
|
|
// myCont["sunmaindeparment"] = userCont.SunMainDeparment //二级主部门
|
|
|
|
|
myCont["maindeparment"] = companyId //主部门
|
|
|
|
|
myCont["sunmaindeparment"] = sunmaindeparment //二级主部门
|
|
|
|
|
|
|
|
|
|
myCont["deparment"] = userCont.Deparment //部门
|
|
|
|
|
myCont["adminorg"] = userCont.AdminOrg //所属行政组织
|
|
|
|
|
myCont["teamid"] = userCont.TeamId //班组
|
|
|
|
|
myCont["position"] = userCont.Position //职位
|
|
|
|
|
myCont["jobclass"] = userCont.JobClass //职务分类
|
|
|
|
|
myCont["jobid"] = userCont.JobId //职务
|
|
|
|
|
myCont["jobleve"] = userCont.JobLeve //职务等级
|
|
|
|
|
myCont["wechat"] = userCont.Wechat //微信UserId
|
|
|
|
|
myCont["workwechat"] = userCont.WorkWechat //企业微信UserId
|
|
|
|
|
myCont["state"] = userCont.State //状态(1:启用;2:禁用;3:删除)
|
|
|
|
|
myCont["key"] = userCont.Key //key
|
|
|
|
|
myCont["isadmin"] = userCont.IsAdmin //是否为管理员(1:不是;2:分公司;3:集团管理员;4:超级管
|
|
|
|
|
myCont["password"] = userCont.Password //密码
|
|
|
|
|
myCont["role"] = userCont.Role //角色
|
|
|
|
|
myCont["idcardno"] = userCont.Idcardno //身份证号
|
|
|
|
|
myCont["passportno"] = userCont.Passportno //护照号码
|
|
|
|
|
myCont["globalroaming"] = userCont.Globalroaming //国际区号
|
|
|
|
|
myCont["mobilephone"] = userCont.Mobilephone //手机号码
|
|
|
|
|
myCont["email"] = userCont.Email //电子邮件
|
|
|
|
|
myCont["gender"] = userCont.Gender //性别(1:男性;2:女性;3:中性)
|
|
|
|
|
myCont["birthday"] = userCont.Birthday //birthday
|
|
|
|
|
myCont["myfolk"] = userCont.Myfolk //民族
|
|
|
|
|
myCont["nativeplace"] = userCont.Nativeplace //籍贯
|
|
|
|
|
myCont["idcardstartdate"] = userCont.Idcardstartdate //身份证有效期开始
|
|
|
|
|
myCont["idcardenddate"] = userCont.Idcardenddate //身份证有效期结束
|
|
|
|
|
myCont["idcardaddress"] = userCont.Idcardaddress //身份证地址
|
|
|
|
|
myCont["idcardIssued"] = userCont.IdcardIssued //身份证签发机关
|
|
|
|
|
myCont["health"] = userCont.Health //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)
|
|
|
|
|
myCont["maritalstatus"] = userCont.Maritalstatus //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)
|
|
|
|
|
myCont["internaltelephone"] = userCont.Internaltelephone //内线电话
|
|
|
|
|
myCont["currentresidence"] = userCont.Currentresidence //现居住地址
|
|
|
|
|
myCont["constellationing"] = userCont.Constellation //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)
|
|
|
|
|
myCont["isdoubleworker"] = userCont.Isdoubleworker //是否双职工(1:是;2:否)
|
|
|
|
|
myCont["isveterans"] = userCont.Isveterans //是否为退役军人(1:是;2:否)
|
|
|
|
|
myCont["veteransnumber"] = userCont.Veteransnumber //退役证编号
|
|
|
|
|
myCont["jobstartdate"] = userCont.Jobstartdate //参加工作日期
|
|
|
|
|
myCont["entrydate"] = userCont.Entrydate //入职日期
|
|
|
|
|
myCont["probationperiod"] = userCont.Probationperiod //试用期
|
|
|
|
|
myCont["planformaldate"] = userCont.Planformaldate //预计转正日期
|
|
|
|
|
myCont["political_outlook"] = userCont.PoliticalOutlook //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|
|
|
|
var companyCont modelshr.AdministrativeOrganization
|
|
|
|
|
companyCont.GetCont(map[string]interface{}{"`id`": userCont.Company}, "`name`")
|
|
|
|
|
myCont["companyname"] = companyCont.Name
|
|
|
|
|
var departmentCont modelshr.AdministrativeOrganization
|
|
|
|
|
departmentCont.GetCont(map[string]interface{}{"`id`": userCont.MainDeparment}, "`name`")
|
|
|
|
|
myCont["maindeparmentname"] = departmentCont.Name
|
|
|
|
|
var postInfo modelshr.Position
|
|
|
|
|
postInfo.GetCont(map[string]interface{}{"`id`": userCont.Position}, "`name`")
|
|
|
|
|
myCont["positionname"] = postInfo.Name
|
|
|
|
|
redisClients.HashMsetAdd(redisMyContKey, myCont)
|
|
|
|
|
redisClient.HashMsetAdd(redisMyContKey, myCont)
|
|
|
|
|
saveData["usercont"] = myCont
|
|
|
|
|
|
|
|
|
|
if requestData.Openid != "" {
|
|
|
|
|
var userInfo modelshr.PersonArchives
|
|
|
|
|
userInfo.EiteCont(map[string]interface{}{"id": userCont.Id}, map[string]interface{}{"work_wechat": requestData.Openid})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var sendKpiCont WriteIderCont
|
|
|
|
|
sendKpiCont.Openid = requestData.Openid
|
|
|
|
|
sendKpiCont.Key = userKeyCode
|
|
|
|
|
sendKpiCont.Token = sha1Token
|
|
|
|
|
sendKpiCont.UserInfo.Key = strconv.FormatInt(userCont.Key, 10)
|
|
|
|
|
sendKpiCont.UserInfo.Number = userCont.Number
|
|
|
|
|
sendKpiCont.UserInfo.Password = userCont.Password
|
|
|
|
|
sendDate, _ := json.Marshal(sendKpiCont)
|
|
|
|
|
publicmethod.CurlPostJosn("http://120.224.6.6:39168/shiyan/write_token", sendDate)
|
|
|
|
|
publicmethod.Result(0, saveData, c)
|
|
|
|
|
}
|