HR管理系统
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

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, "更新完成")
}