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