绩效考核
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.
 
 
 

594 lines
18 KiB

package commonus
//企业微信相关操作
import (
"encoding/json"
"fmt"
"strconv"
"gin_server_admin/global"
"gin_server_admin/utils/redishandel"
"github.com/mitchellh/mapstructure"
)
// 获取企业微信token
func GetWechatTokenType(types string) (tokenInfo string, redisClient *redishandel.RedisStoreType, err error) {
redisClient = redishandel.RunRedis()
isTrue := false
redisPrefix := "workWeChatToken_"
companyId := global.GVA_CONFIG.WorkWechatId.CompanyId
secretStr := global.GVA_CONFIG.WorkWechatMailList.SecretStr
switch types {
case "maillist":
redisPrefix = redisPrefix + "mail_"
secretStr = global.GVA_CONFIG.WorkWechatMailList.SecretStr
case "health":
redisPrefix = redisPrefix + "health_"
secretStr = global.GVA_CONFIG.WorkHealthReport.SecretStr
default:
redisPrefix = redisPrefix + "sholle_"
secretStr = global.GVA_CONFIG.WorkWechatSchool.SecretStr
}
// fmt.Printf("token=====>%v***************%v------------------%v\n", redisPrefix, global.GVA_CONFIG.RedisPrefix.Alias, global.GVA_REDIS)
// return
isTrue, tokenInfo = redisClient.Get(redisPrefix + global.GVA_CONFIG.RedisPrefix.Alias)
// fmt.Printf("token=====>%v***************%v------------------%v\n", isTrue, companyId, secretStr)
if isTrue == true {
return
} else {
// getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + global.GVA_CONFIG.WorkWechatIds.CompanyId + "&corpsecret=" + global.GVA_CONFIG.WorkWechatMailLists.SecretStr
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + companyId + "&corpsecret=" + secretStr
// fmt.Printf("getTokenUrl:%v\n", getTokenUrl)
token := CurlGet(getTokenUrl)
var callBackData weChatCallBack
err = json.Unmarshal(token, &callBackData)
if err != nil {
return
}
if callBackData.Errcode != 0 {
return
}
// fmt.Printf("%v\n", callBackData)
tokenInfo = callBackData.Accesstoken
redisClient.SetRedisTime(7080)
// redisClient.Set("workWeChatToken_"+global.GVA_CONFIG.RedisPrefix.Alias, tokenInfo)
redisClient.Set(redisPrefix+global.GVA_CONFIG.RedisPrefix.Alias, tokenInfo)
}
return
}
// 获取企业微信token
func GetWechatToken() (tokenInfo string, redisClient *redishandel.RedisStoreType, err error) {
redisClient = redishandel.RunRedis()
isTrue, tokenInfo := redisClient.Get("workWeChatToken_" + global.GVA_CONFIG.RedisPrefix.Alias)
if isTrue == true {
return
} else {
// getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + global.GVA_CONFIG.WorkWechatIds.CompanyId + "&corpsecret=" + global.GVA_CONFIG.WorkWechatMailLists.SecretStr
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + global.GVA_CONFIG.WorkWechatId.CompanyId + "&corpsecret=" + global.GVA_CONFIG.WorkWechatMailList.SecretStr
// fmt.Printf("getTokenUrl:%v\n", getTokenUrl)
token := CurlGet(getTokenUrl)
var callBackData weChatCallBack
err = json.Unmarshal(token, &callBackData)
if err != nil {
return
}
if callBackData.Errcode != 0 {
return
}
// fmt.Printf("%v\n", callBackData)
tokenInfo = callBackData.Accesstoken
redisClient.SetRedisTime(7080)
redisClient.Set("workWeChatToken_"+global.GVA_CONFIG.RedisPrefix.Alias, tokenInfo)
}
return
}
func GetDepartment(dePartMentId int) (departmentlist *[]DePartMentInfo, isTrue bool) {
isTrue = false
ton, redisClient, err := GetWechatToken()
if err != nil {
return
}
dePartMentIdStr := strconv.Itoa(dePartMentId)
isTrue, dePartMentMapJson := redisClient.Get("dePartMentList:list_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + dePartMentIdStr)
if isTrue == true {
//json转换成Struct
err := json.Unmarshal([]byte(dePartMentMapJson), &departmentlist)
if err != nil {
fmt.Println("JsonToMapDemo err: ", err)
return departmentlist, false
}
// fmt.Printf("Map => %v", departmentlist)
// if errMap := mapstructure.Decode(dePartMentMapJson, &departmentlist); errMap != nil {
// // redisClient.HashMsetAdd("dePartMentAry_ment_dev_"+dePartMentIdStr, departmentlist)
// return departmentlist, false
// }
return departmentlist, true
// fmt.Printf("Key_jia1 ==> %v ------ Val_jia1 ==> %v\n", dePartMentMap, isTrue)
// var dePartMentStruct dePartMentInfoStr
// if errMap := mapstructure.Decode(dePartMentMap, &dePartMentStruct); errMap != nil {
// fmt.Printf("Key_jia2 ==> %v ------ Val_jia2 ==> %v\n", dePartMentMap, errMap)
// return departmentlist, false
// }
// var ksjdes []dePartMentInfo
// var ksjd dePartMentInfo
// ksjd.Id, _ = strconv.Atoi(dePartMentStruct.Id)
// ksjd.Name = dePartMentStruct.Name
// ksjd.NameEN = dePartMentStruct.NameEN
// ksjd.Parentid, _ = strconv.Atoi(dePartMentStruct.Parentid)
// ksjd.Order, _ = strconv.Atoi(dePartMentStruct.Order)
// ksjdes = append(ksjdes, ksjd)
// departmentlist = &ksjdes
// fmt.Printf("Key ==> %v ------ Val ==> %v\n", dePartMentMap, departmentlist)
// return departmentlist, true
} else {
//获取企业微信部门列表
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + ton + "&id=" + dePartMentIdStr
// fmt.Printf("URL ===> %v\n", getTokenUrl)
callBackList := CurlGet(getTokenUrl)
var callBackData dePartMent
err = json.Unmarshal(callBackList, &callBackData)
if err != nil {
return departmentlist, false
}
// fmt.Printf("%+v\n", callBackData)
// departmentlist = &callBackData.DePartMent
// return callBackData.DePartMent
redisClient.SetRedisTime(604800)
if callBackData.Errcode == 0 {
if errMap := mapstructure.Decode(callBackData.DePartMent, &departmentlist); errMap != nil {
// redisClient.HashMsetAdd("dePartMentAry_ment_dev_"+dePartMentIdStr, departmentlist)
return departmentlist, false
}
for _, val := range callBackData.DePartMent {
// fmt.Printf("Key ==> %v ------ Val ==> %v\n", key, val)
writeRedisData := map[string]interface{}{
"id": val.Id,
"name": val.Name,
"name_en": val.NameEN,
"parentid": val.Parentid,
"order": val.Order,
}
departId := strconv.FormatInt(val.Id, 10)
redisClient.HashMsetAdd("dePartMentAry:ment_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+departId, writeRedisData)
}
dePartMentJson, _ := json.Marshal(callBackData.DePartMent)
redisClient.Set("dePartMentList:list_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+dePartMentIdStr, string(dePartMentJson))
} else {
return departmentlist, false
}
}
return departmentlist, true
}
// 获取企业微信部门列表
func GetWechatFramework(id int64) (callBackList []byte, isTrue bool) {
isTrue = false
ton, _, err := GetWechatToken()
if err != nil {
return
}
dePartMentIdStr := strconv.FormatInt(id, 10)
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + ton + "&id=" + dePartMentIdStr
callBackList = CurlGet(getTokenUrl)
var callBackData dePartMent
err = json.Unmarshal(callBackList, &callBackData)
if err != nil {
return callBackList, false
}
if callBackData.Errcode == 0 {
isTrue = true
return
}
return
}
// 获取单个部门信息
func GetOneDePartMent(dePartMentId int) (departmentlist *DePartMentInfo, isTrue bool) {
isTrue = false
_, redisClient, err := GetWechatToken()
if err != nil {
return
}
dePartMentIdStr := strconv.Itoa(dePartMentId)
dePartMentMapJson, isTrue := redisClient.HashGetAll("dePartMentAry:ment_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + dePartMentIdStr)
if isTrue == true {
var departmentinfo dePartMentInfoStr
err := mapstructure.Decode(dePartMentMapJson, &departmentinfo)
if err != nil {
return departmentlist, false
}
var jjks DePartMentInfo
jjks.Id, _ = strconv.ParseInt(departmentinfo.Id, 10, 64)
jjks.Name = departmentinfo.Name
jjks.NameEN = departmentinfo.NameEN
jjks.Parentid, _ = strconv.ParseInt(departmentinfo.Parentid, 10, 64)
jjks.Order, _ = strconv.ParseInt(departmentinfo.Order, 10, 64)
departmentlist = &jjks
return departmentlist, true
} else {
_, _ = GetDepartment(dePartMentId)
dePartMentMapJson, isTrue := redisClient.HashGetAll("dePartMentAry:ment_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + dePartMentIdStr)
if isTrue == true {
var departmentinfo dePartMentInfoStr
err := mapstructure.Decode(dePartMentMapJson, &departmentinfo)
if err != nil {
return departmentlist, false
}
var jjks DePartMentInfo
jjks.Id, _ = strconv.ParseInt(departmentinfo.Id, 10, 64)
jjks.Name = departmentinfo.Name
jjks.NameEN = departmentinfo.NameEN
jjks.Parentid, _ = strconv.ParseInt(departmentinfo.Parentid, 10, 64)
jjks.Order, _ = strconv.ParseInt(departmentinfo.Order, 10, 64)
departmentlist = &jjks
return departmentlist, true
}
}
return departmentlist, true
}
/*
创建部门
*/
func (d *DePartMentInfo) AddDepartment(parentid int64, name string) (int64, bool) {
d.InstDepartMentInfo()
if parentid <= 0 {
return 0, false
}
if name == "" {
return 0, false
}
d.Parentid = parentid
d.Name = name
// jsonBytes, _ := json.Marshal(d)
weChatPart := MapOut()
weChatPart["parentid"] = d.Parentid
weChatPart["name"] = d.Name
if d.NameEN != "" {
weChatPart["name_en"] = d.NameEN
}
if d.Id != 0 {
weChatPart["id"] = d.Id
}
if d.Order != 0 {
weChatPart["order"] = d.Order
}
sendJsonData, _ := json.Marshal(weChatPart)
tonken, _, err := GetWechatToken() //获取token
if err != nil {
return 0, false
}
weChatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=" + tonken
addDePartMent := CurlPostJosn(weChatApiUrl, sendJsonData)
var callBackData DePartMentCallBack
err = json.Unmarshal(addDePartMent, &callBackData)
if callBackData.Errcode != 0 {
return 0, false
}
// fmt.Printf("%v=================>&&&&&&&&&& %v ------------>%v#################3%v\n", d, jsonBytes, string(addDePartMent), callBackData)
return callBackData.Id, true
}
/*
更新部门
*/
func (d *DePartMentInfo) SaveDepartment(id, order, parentid int64, name, name_en string) (int64, bool) {
d.InstDepartMentInfo()
if id <= 0 {
return 0, false
}
if parentid <= 0 {
return 0, false
}
if name == "" {
return 0, false
}
d.Id = id
d.Parentid = parentid
d.Name = name
if order > 0 {
d.Order = order
}
if name_en != "" {
d.NameEN = name_en
}
weChatPart := MapOut()
weChatPart["parentid"] = d.Parentid
weChatPart["name"] = d.Name
if d.NameEN != "" {
weChatPart["name_en"] = d.NameEN
}
if d.Id != 0 {
weChatPart["id"] = d.Id
}
if d.Order != 0 {
weChatPart["order"] = d.Order
}
sendJsonData, _ := json.Marshal(weChatPart)
tonken, _, err := GetWechatToken() //获取token
if err != nil {
return 0, false
}
weChatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token=" + tonken
addDePartMent := CurlPostJosn(weChatApiUrl, sendJsonData)
var callBackData DePartMentCallBack
err = json.Unmarshal(addDePartMent, &callBackData)
fmt.Printf("json ===>%v\n", callBackData)
if callBackData.Errcode != 0 {
return 0, false
}
return d.Id, true
}
func (d *DePartMentInfo) InstDepartMentInfo() (departmentinfo *DePartMentInfo) {
var dep DePartMentInfo
dep.Id = 0
dep.Name = ""
dep.NameEN = ""
dep.Parentid = 0
dep.Order = 0
departmentinfo = &dep
return
}
/*
删除部门
*/
func DelDepartment(id int64) bool {
isTrue := false
ton, _, err := GetWechatToken()
if err != nil {
return isTrue
}
delIdStr := strconv.FormatInt(id, 10)
//删除部门
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + ton + "&id=" + delIdStr
// fmt.Printf("URL ===> %v\n", getTokenUrl)
callBackList := CurlGet(getTokenUrl)
var callBackData dePartMent
err = json.Unmarshal(callBackList, &callBackData)
if err != nil {
return isTrue
}
if callBackData.Errcode != 0 {
return isTrue
}
isTrue = true
return isTrue
}
// 获取读取成员(单个)
func GetOneAddressBookMember(userId string) (userInfoByte []byte, msg string, isTrue bool) {
isTrue = false
if userId == "" {
msg = "请输入用户UserId"
return
}
ton, _, err := GetWechatTokenType("maillist")
if err != nil {
msg = "获取Token失败!"
return
}
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + ton + "&userid=" + userId
// fmt.Printf("getTokenUrl:%v\n", getTokenUrl)
userInfo := CurlGet(getTokenUrl)
var callBackData WechatUserInfo
err = json.Unmarshal(userInfo, &callBackData)
if err != nil {
return
}
if callBackData.Errcode != 0 {
return
}
userInfoByte = userInfo
return
}
// 获取部门成员详情
func GetDepartmentUserList(dePartMentId int) (userInfoByte []byte, msg string, isTrue bool) {
isTrue = false
if dePartMentId == 0 {
msg = "请输入部门Id"
return
}
ton, _, err := GetWechatTokenType("maillist")
if err != nil {
msg = "获取Token失败!"
return
}
getTokenUrl := "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=" + ton + "&department_id=" + strconv.Itoa(dePartMentId) + "&fetch_child=1"
userInfo := CurlGet(getTokenUrl)
userInfoByte = userInfo
isTrue = true
msg = "获取成功!"
return
}
//健康上报相关操作
/*
获取健康上报使用统计
*/
func GetHealthReportStat(dateTime string) (pv, uv int64, isTrue bool, msg string) {
isTrue = false
pv = 0
uv = 0
msg = "获取失败!"
if dateTime == "" {
return
}
ton, _, err := GetWechatTokenType("health")
if err != nil {
msg = "获取Token失败!"
return
}
getWechatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/health/get_health_report_stat?access_token=" + ton
weChatPart := MapOut()
weChatPart["date"] = dateTime
sendJsonData, jsonErr := json.Marshal(weChatPart)
if jsonErr != nil {
msg = "提交数据转换失败!"
return
}
addDePartMent := CurlPostJosn(getWechatApiUrl, sendJsonData)
var callBackData HealthReportStat
err = json.Unmarshal(addDePartMent, &callBackData)
// fmt.Printf("json ===>%v------>%v\n", weChatPart, string(addDePartMent))
if callBackData.Errcode != 0 {
return
}
isTrue = true
pv = callBackData.Pv
uv = callBackData.Uv
msg = callBackData.Errmsg
return
}
/*
企业当前正在运行的上报任务ID列表
ANIAyAd9-A4AHAAEwZhACsvfrYYfjcTz
*/
func GetRunHealthReportJobids(page int, pageSize int64) (dateAry []string, isTrue bool, msg string) {
isTrue = false
if pageSize == 0 {
pageSize = 100
}
ton, _, err := GetWechatTokenType("health")
if err != nil {
msg = "获取Token失败!"
return
}
getWechatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/health/get_report_jobids?access_token=" + ton
weChatPart := MapOut()
weChatPart["offset"] = page
weChatPart["limit"] = pageSize
sendJsonData, jsonErr := json.Marshal(weChatPart)
if jsonErr != nil {
msg = "提交数据转换失败!"
return
}
addDePartMent := CurlPostJosn(getWechatApiUrl, sendJsonData)
var callBackData CallBackData
err = json.Unmarshal(addDePartMent, &callBackData)
// fmt.Printf("json ===>%v------>%v\n", weChatPart, string(addDePartMent))
// return
if callBackData.Errcode != 0 {
return
}
isTrue = true
msg = callBackData.ErrMsg
var mspStructAry []string
for _, val := range callBackData.Jobids {
mspStructAry = append(mspStructAry, val.(string))
}
// fmt.Printf("json3 ===>%v------>%v\n", mspStructAry, string(addDePartMent))
dateAry = mspStructAry
// fmt.Printf("json2 ===>%v------>%v\n", dateAry, string(addDePartMent))
// fmt.Printf("%v", callBackData)
return
}
// 获取指定的健康上报任务详情
func GetReportJobInfo(jobid, date string) (ca *CallBackReportJobInfo, isTrue bool, kk, msg string) {
isTrue = false
if jobid == "" {
msg = "请输入任务ID"
return
}
if date == "" {
msg = "请输入要查询的日期"
return
}
ton, _, err := GetWechatTokenType("health")
if err != nil {
msg = "获取Token失败!"
return
}
getWechatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/health/get_report_job_info?access_token=" + ton
weChatPart := MapOut()
weChatPart["jobid"] = jobid
weChatPart["date"] = date
sendJsonData, jsonErr := json.Marshal(weChatPart)
if jsonErr != nil {
msg = "提交数据转换失败!"
return
}
addDePartMent := CurlPostJosn(getWechatApiUrl, sendJsonData)
// fmt.Printf("json2 ===>%v------>%v\n", weChatPart, string(addDePartMent))
kk = string(addDePartMent)
var sendCallBackDate CallBackReportJobInfo
err = json.Unmarshal(addDePartMent, &sendCallBackDate)
fmt.Printf("json23 ===>%v===>%v===>%v------>%v\n", getWechatApiUrl, string(sendJsonData), sendCallBackDate, string(addDePartMent))
if sendCallBackDate.Errcode == 0 {
isTrue = true
}
msg = sendCallBackDate.ErrMsg
ca = &sendCallBackDate
return
}
// 获取用户填写答案
func GetUserWriteAnswer(jobid, date string, page int, pageSize int64) (btyDate []byte, r *ReportAnswerResult, isTrue bool, msg string) {
isTrue = false
if jobid == "" {
msg = "请输入任务ID"
return
}
if date == "" {
msg = "请输入要查询的日期"
return
}
var pageInt64 int64 = 0
if page != 0 {
pageInt64 = int64(page) * pageSize
}
// pageInt64 = int64(page) * pageSize
if pageSize == 0 {
pageSize = 100
}
ton, _, err := GetWechatTokenType("health")
if err != nil {
msg = "获取Token失败!"
return
}
getWechatApiUrl := "https://qyapi.weixin.qq.com/cgi-bin/health/get_report_answer?access_token=" + ton
weChatPart := MapOut()
weChatPart["jobid"] = jobid
weChatPart["date"] = date
weChatPart["offset"] = pageInt64
weChatPart["limit"] = pageSize
sendJsonData, jsonErr := json.Marshal(weChatPart)
if jsonErr != nil {
msg = "提交数据转换失败!"
return
}
addDePartMent := CurlPostJosn(getWechatApiUrl, sendJsonData)
btyDate = addDePartMent
// fmt.Printf("结果---->%v\n", string(sendJsonData))
var reportAnswerJson ReportAnswerResult
err = json.Unmarshal(addDePartMent, &reportAnswerJson)
r = &reportAnswerJson
if reportAnswerJson.Errcode == 0 {
isTrue = true
}
msg = reportAnswerJson.ErrMsg
// fmt.Printf("json2*** %v ===>%v------>%v\n", page, weChatPart, len(reportAnswerJson.Answers))
return
}