2024-01-22 22:34:59 +08:00
|
|
|
package qyweixin
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2024-07-12 16:26:05 +08:00
|
|
|
"git.u8t.cn/open/gosdk/util"
|
2024-01-22 22:34:59 +08:00
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/smbrave/goutil"
|
|
|
|
"github.com/spf13/cast"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
urlQyWeixinHrGetAllField = "https://qyapi.weixin.qq.com/cgi-bin/hr/get_fields"
|
|
|
|
urlQyWeixinHrGetStaffInfo = "https://qyapi.weixin.qq.com/cgi-bin/hr/get_staff_info"
|
|
|
|
)
|
|
|
|
|
|
|
|
type AppHr struct {
|
|
|
|
App
|
|
|
|
config *AppConfig
|
|
|
|
}
|
|
|
|
|
|
|
|
type StaffInfo struct {
|
|
|
|
UserName string
|
|
|
|
RealName string
|
2024-11-04 18:07:41 +08:00
|
|
|
Extra map[string]string
|
2024-01-22 22:34:59 +08:00
|
|
|
Phone string
|
|
|
|
StaffType string
|
|
|
|
Idno string
|
|
|
|
Salary float64
|
2024-11-04 18:02:08 +08:00
|
|
|
PerfSalary float64
|
2024-01-22 22:34:59 +08:00
|
|
|
Stock float64
|
|
|
|
EntryDate string
|
|
|
|
BirthDate string
|
|
|
|
OfficialDate string
|
|
|
|
BankName string
|
|
|
|
BankCard string
|
2024-09-27 11:30:33 +08:00
|
|
|
AlipayUid string
|
2024-01-22 22:34:59 +08:00
|
|
|
}
|
|
|
|
|
2024-01-22 22:47:35 +08:00
|
|
|
func NewAppHr(cfg *AppConfig) *AppHr {
|
2024-01-22 22:34:59 +08:00
|
|
|
return &AppHr{
|
2024-01-22 22:47:35 +08:00
|
|
|
App: *NewApp(cfg),
|
2024-01-22 22:34:59 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (h *AppHr) GetStaffInfo(userId string) (*StaffInfo, error) {
|
|
|
|
reqUrl := fmt.Sprintf("%s?access_token=%s", urlQyWeixinHrGetStaffInfo, h.GetToken())
|
|
|
|
reqBody := make(map[string]interface{})
|
|
|
|
reqBody["userid"] = userId
|
|
|
|
reqBody["get_all"] = true
|
|
|
|
rspBody, err := util.HttpPostJson(reqUrl, nil, []byte(goutil.EncodeJSON(reqBody)))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
staff := new(StaffInfo)
|
|
|
|
result, err := h.GetResult(rspBody)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
fieldMap := make(map[string]map[string]interface{})
|
|
|
|
for _, fieldInfo := range cast.ToSlice(result["field_info"]) {
|
|
|
|
fi := cast.ToStringMap(fieldInfo)
|
|
|
|
fieldMap[cast.ToString(fi["fieldid"])] = fi
|
|
|
|
}
|
|
|
|
|
|
|
|
userInfo, err := h.GetUserInfo(userId)
|
|
|
|
if err != nil {
|
|
|
|
log.Errorf("GetUserInfo error:%s", err.Error())
|
|
|
|
return nil, err
|
|
|
|
}
|
2024-11-04 18:13:17 +08:00
|
|
|
staff.Extra = make(map[string]string)
|
2024-11-04 18:07:41 +08:00
|
|
|
for k, v := range fieldMap {
|
|
|
|
staff.Extra[k] = h.getFieldValue(v)
|
|
|
|
}
|
|
|
|
|
2024-01-22 22:34:59 +08:00
|
|
|
staff.UserName = userId
|
|
|
|
staff.RealName = userInfo.RealName
|
|
|
|
staff.Salary = cast.ToFloat64(h.getFieldValue(fieldMap["20001"]))
|
|
|
|
staff.Stock = cast.ToFloat64(h.getFieldValue(fieldMap["20002"]))
|
|
|
|
staff.Phone = cast.ToString(h.getFieldValue(fieldMap["17003"]))
|
|
|
|
staff.StaffType = cast.ToString(h.getFieldValue(fieldMap["12003"]))
|
|
|
|
staff.Idno = cast.ToString(h.getFieldValue(fieldMap["11015"]))
|
|
|
|
staff.BankName = cast.ToString(h.getFieldValue(fieldMap["13001"]))
|
|
|
|
staff.BankCard = cast.ToString(h.getFieldValue(fieldMap["13002"]))
|
|
|
|
staff.EntryDate = time.Unix(cast.ToInt64(h.getFieldValue(fieldMap["12018"])), 0).Format("2006-01-02")
|
|
|
|
staff.BirthDate = time.Unix(cast.ToInt64(h.getFieldValue(fieldMap["11005"])), 0).Format("2006-01-02")
|
|
|
|
staff.OfficialDate = time.Unix(cast.ToInt64(h.getFieldValue(fieldMap["12023"])), 0).Format("2006-01-02")
|
2024-09-27 11:30:33 +08:00
|
|
|
staff.AlipayUid = cast.ToString(h.getFieldValue(fieldMap["20004"]))
|
2024-11-04 18:02:08 +08:00
|
|
|
staff.PerfSalary = cast.ToFloat64(h.getFieldValue(fieldMap["20004"]))
|
2024-01-22 22:34:59 +08:00
|
|
|
|
|
|
|
//fmt.Println(goutil.EncodeJSON(staff))
|
|
|
|
return staff, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (h *AppHr) getFieldValue(fieldInfo map[string]interface{}) string {
|
|
|
|
valueType := cast.ToInt(fieldInfo["value_type"])
|
|
|
|
if valueType == 1 {
|
|
|
|
return cast.ToString(fieldInfo["value_string"])
|
|
|
|
} else if valueType == 2 {
|
|
|
|
return cast.ToString(fieldInfo["value_uint64"])
|
|
|
|
} else if valueType == 3 {
|
|
|
|
return cast.ToString(fieldInfo["value_uint32"])
|
|
|
|
} else if valueType == 4 {
|
|
|
|
return cast.ToString(fieldInfo["value_int64"])
|
|
|
|
} else if valueType == 5 {
|
|
|
|
moble := cast.ToStringMap(fieldInfo["value_mobile"])
|
|
|
|
return cast.ToString(moble["value_mobile"])
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
func (h *AppHr) GetAllField() ([]byte, error) {
|
|
|
|
reqUrl := fmt.Sprintf("%s?access_token=%s", urlQyWeixinHrGetAllField, h.GetToken())
|
|
|
|
rspBody, err := util.HttpGet(reqUrl, nil)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
result, err := h.GetResult(rspBody)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
fmt.Println(goutil.EncodeJSONIndent(result))
|
|
|
|
return rspBody, err
|
|
|
|
}
|