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.
365 lines
9.0 KiB
365 lines
9.0 KiB
package workWechat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"hr_server/models"
|
|
"hr_server/overall"
|
|
"hr_server/overall/overallhandle"
|
|
"time"
|
|
)
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 11:23:32
|
|
@ 功能: 获取统一企业微信Token
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func GainWechatTokenUnify() string {
|
|
md5Token := "WorkWechatUpdatePeopleInfo"
|
|
token, err := GainWechatToken("txl", md5Token, 1)
|
|
fmt.Printf("token-2-2->%v->%v\n", err, token)
|
|
if err != nil {
|
|
GainWechatTokenUnify()
|
|
}
|
|
return token
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 11:09:57
|
|
@ 功能: 获取行政组织列表
|
|
@ 参数
|
|
|
|
#orgId 行政组织Id
|
|
#token 企业
|
|
|
|
@ 返回值
|
|
|
|
#departmentAry 部门列表
|
|
#newToekn 新token
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (w *WechatOrg) GainWechatOrgList() {
|
|
|
|
sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v&id=%v", w.Token, w.OrgId)
|
|
if w.OrgId == 0 {
|
|
sendWechatUrl = fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v", w.Token)
|
|
}
|
|
//获取企业微信取部门列表
|
|
wechatCallBack := overallhandle.CurlGet(sendWechatUrl)
|
|
var deparmentsList WechatCallBackDepartment
|
|
err := json.Unmarshal(wechatCallBack, &deparmentsList)
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Printf("企业微信返回值:%v\n", string(wechatCallBack))
|
|
if deparmentsList.Errcode != 0 {
|
|
// w.Token = GainWechatTokenUnify()
|
|
// w.NewToekn = true
|
|
// w.GainWechatOrgList()
|
|
return
|
|
}
|
|
w.OrgList = deparmentsList.Department
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 13:10:15
|
|
@ 功能: 处理人员信息
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (w *WechatOrg) GainOrgPeopleList() {
|
|
if len(w.OrgList) <= 0 {
|
|
overallhandle.WriteLog("e", "没有相应的行政组织!", w.OrgList)
|
|
return
|
|
}
|
|
var orgPeople WechatOrgPeole
|
|
orgPeople.Token = w.Token
|
|
for _, v := range w.OrgList {
|
|
synPro.Add(1)
|
|
go orgPeople.GainOrgPeopleList(v)
|
|
}
|
|
synPro.Wait()
|
|
if orgPeople.NewToekn {
|
|
w.Token = orgPeople.Token
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 13:17:41
|
|
@ 功能: 获取企业微信行政组织下的人员信息
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (w *WechatOrgPeole) GainOrgPeopleList(org WechatDepartmentInfo) {
|
|
defer synPro.Done()
|
|
w.WechatOrgHandPeople(int64(org.Id))
|
|
jsonStr, _ := json.Marshal(w.UserList)
|
|
fmt.Printf("人员1信息========》%v:%v\n", org.Id, string(jsonStr))
|
|
if len(w.UserList) <= 0 {
|
|
overallhandle.WriteLog("e", "没有行111111人员!", w.UserList)
|
|
return
|
|
}
|
|
var peopleAry []interface{}
|
|
for _, v := range w.UserList {
|
|
// isWriteNum := true
|
|
gonghao := ""
|
|
dangAn := ""
|
|
if len(v.Extattr.Attrs) > 0 {
|
|
for _, a := range v.Extattr.Attrs {
|
|
if a.Name == "工号" {
|
|
if a.Value == "" {
|
|
gonghao = a.Text.Value
|
|
} else {
|
|
gonghao = a.Value
|
|
}
|
|
|
|
}
|
|
if a.Web.Url != "" {
|
|
dangAn = a.Web.Url
|
|
}
|
|
}
|
|
}
|
|
attJson, _ := json.Marshal(v.Extattr.Attrs)
|
|
fmt.Printf("人员信息%v:%v---->%v---->%v---->%v\n", org.Id, v.Userid, gonghao, dangAn, string(attJson))
|
|
//获取HR数据库中的员工信息
|
|
var userCont models.PersonArchives
|
|
if gonghao != "" {
|
|
overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`number` = ?", gonghao).First(&userCont)
|
|
// isWriteNum = false
|
|
} else {
|
|
if v.Userid != "" {
|
|
overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`work_wechat` = ? OR `wechat` = ?", v.Userid, v.Userid).First(&userCont)
|
|
}
|
|
// isWriteNum = true
|
|
}
|
|
if userCont.Id != 0 {
|
|
// fmt.Printf("@人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, userCont)
|
|
updateWechatUserCont := overallhandle.MapOut()
|
|
updateWechatUserCont["userid"] = v.Userid
|
|
//判断是否要更新当前人员信息
|
|
|
|
var attrsAry []interface{} //企业微信个人属性
|
|
// for _, ev := range v.Extattr.Attrs {
|
|
// if ev.Name == "档案" {
|
|
dangAnUrl := fmt.Sprintf("http://hr.hxgk.group/#/?usernum=%v", userCont.Number)
|
|
var dangAnInfi UpdateMyWechatURL
|
|
dangAnInfi.Name = "档案"
|
|
dangAnInfi.Type = 1
|
|
dangAnInfi.Web.Title = "详细信息"
|
|
dangAnInfi.Web.Url = dangAnUrl
|
|
attrsAry = append(attrsAry, dangAnInfi)
|
|
// }
|
|
// if ev.Name == "工号" {
|
|
var gonhaoInFo UpdateMyWechatText
|
|
gonhaoInFo.Name = "工号"
|
|
gonhaoInFo.Type = 0
|
|
gonhaoInFo.Value = userCont.Number
|
|
gonhaoInFo.Text.Value = userCont.Number
|
|
attrsAry = append(attrsAry, gonhaoInFo)
|
|
// }
|
|
// }
|
|
// fmt.Printf("更新完毕!人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, attrsAry)
|
|
if len(attrsAry) > 0 {
|
|
extattr := overallhandle.MapOut()
|
|
extattr["attrs"] = attrsAry
|
|
updateWechatUserCont["extattr"] = extattr
|
|
peopleAry = append(peopleAry, updateWechatUserCont)
|
|
}
|
|
if dangAn == "" {
|
|
w.SendUserInfoToWorkWechat(updateWechatUserCont)
|
|
} else {
|
|
overallhandle.WriteLog("t", "企业微信人员已有档案信息,无需重新生成!", v.Extattr.Attrs)
|
|
}
|
|
|
|
userSaveInfo := make(map[string]interface{})
|
|
if userCont.Number == "" && gonghao != "" {
|
|
userSaveInfo["number"] = gonghao
|
|
}
|
|
if userCont.WorkWechat == "" && v.Userid != "" {
|
|
userSaveInfo["work_wechat"] = v.Userid
|
|
}
|
|
if userCont.Wechat == "" && v.Userid != "" {
|
|
userSaveInfo["wechat"] = v.Userid
|
|
}
|
|
if len(userSaveInfo) > 0 {
|
|
userSaveInfo["eite_time"] = time.Now().Unix()
|
|
var userNumInfo models.PersonArchives
|
|
userNumInfo.EiteCont(map[string]interface{}{"`id`": userCont.Id}, userSaveInfo)
|
|
}
|
|
} else {
|
|
usWechatJson, _ := json.Marshal(v)
|
|
overallhandle.WriteLog("e", "没有行人员!", string(usWechatJson))
|
|
}
|
|
}
|
|
peopleJson, _ := json.Marshal(peopleAry)
|
|
fmt.Printf("更新完毕!人员信息%v---->%v\n", org, string(peopleJson))
|
|
overallhandle.WriteLog("e", "更新完毕!END", org, string(peopleJson))
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 15:33:28
|
|
@ 功能: 发送信息修改通知
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (w *WechatOrgPeole) SendUserInfoToWorkWechat(userInfo map[string]interface{}) {
|
|
if _, ok := userInfo["userid"]; !ok {
|
|
err := errors.New("关键信息不全userid")
|
|
overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userInfo)
|
|
return
|
|
}
|
|
userJson, err := json.Marshal(userInfo)
|
|
if err != nil {
|
|
overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userJson)
|
|
return
|
|
}
|
|
overallhandle.WriteLog("i", "向企业微信发送人员信息", string(userJson))
|
|
sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=%v", w.Token)
|
|
wechatCallBack := overallhandle.CurlPostJosn(sendWechatUrl, userJson)
|
|
var orgPeopleList RevokeMsgSendCallBack
|
|
err = json.Unmarshal(wechatCallBack, &orgPeopleList)
|
|
if err != nil {
|
|
overallhandle.WriteLog("e", "2、更新企业微信人员信息出错,从新发起请求。", err, string(wechatCallBack))
|
|
w.Token = GainWechatTokenUnify()
|
|
w.NewToekn = true
|
|
w.SendUserInfoToWorkWechat(userInfo)
|
|
return
|
|
}
|
|
if orgPeopleList.Errcode != 0 {
|
|
err = errors.New(orgPeopleList.Errmsg)
|
|
overallhandle.WriteLog("e", "3、更新企业微信人员信息发生错误!重新提交此数据!", orgPeopleList.Errcode, orgPeopleList.Errmsg)
|
|
w.Token = GainWechatTokenUnify()
|
|
w.NewToekn = true
|
|
w.SendUserInfoToWorkWechat(userInfo)
|
|
return
|
|
}
|
|
overallhandle.WriteLog("write", "更新企业微信人员信息完成!", userInfo)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 13:32:50
|
|
@ 功能: 获取企业微信行政组织下人员信息
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (w *WechatOrgPeole) WechatOrgHandPeople(orgId int64) {
|
|
sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=%v&department_id=%v", w.Token, orgId)
|
|
fmt.Printf("sendWechatUrl--1->:%v\n", sendWechatUrl)
|
|
//获取企业微信取部门成员详情
|
|
wechatCallBack := overallhandle.CurlGet(sendWechatUrl)
|
|
var orgPeopleList WechatCallBackPeople
|
|
err := json.Unmarshal(wechatCallBack, &orgPeopleList)
|
|
if err != nil {
|
|
w.Token = GainWechatTokenUnify()
|
|
w.NewToekn = true
|
|
w.WechatOrgHandPeople(orgId)
|
|
return
|
|
}
|
|
if orgPeopleList.Errcode != 0 {
|
|
w.Token = GainWechatTokenUnify()
|
|
w.NewToekn = true
|
|
w.WechatOrgHandPeople(orgId)
|
|
return
|
|
}
|
|
// fmt.Printf("sendWechatUrl:%v\n", sendWechatUrl)
|
|
w.UserList = orgPeopleList.UserList
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-02 15:44:36
|
|
@ 功能: 新版定时任务启动数据同步
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func NewTimedTasksForOrgWechat(orgId int64, errmsg ...any) {
|
|
fmt.Printf("orgId-2-->%v\n", orgId)
|
|
token := GainWechatTokenUnify()
|
|
fmt.Printf("token--->%v\n", token)
|
|
var orgMap WechatOrg
|
|
orgMap.OrgId = orgId
|
|
orgMap.Token = token
|
|
orgMap.GainWechatOrgList()
|
|
if orgMap.NewToekn {
|
|
token = orgMap.Token
|
|
}
|
|
fmt.Printf("orgMap--->%v\n", orgMap)
|
|
orgMap.GainOrgPeopleList()
|
|
// sendMap := make(map[string]interface{})
|
|
// sendMap["token"] = token
|
|
// sendMap["orgMap"] = orgMap
|
|
overallhandle.WriteLog("i", "行政组织:", orgId, "更新完成")
|
|
}
|
|
|