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 }