| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- package checkin
- import (
- "fmt"
- "github.com/silenceper/wechat/v2/util"
- )
- const (
- // getCheckinDataURL 获取打卡记录数据
- getCheckinDataURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token=%s"
- // getDayDataURL 获取打卡日报数据
- getDayDataURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckin_daydata?access_token=%s"
- // getMonthDataURL 获取打卡月报数据
- getMonthDataURL = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckin_monthdata?access_token=%s"
- )
- type (
- // GetCheckinDataRequest 获取打卡记录数据请求
- GetCheckinDataRequest struct {
- OpenCheckinDataType int64 `json:"opencheckindatatype"`
- StartTime int64 `json:"starttime"`
- EndTime int64 `json:"endtime"`
- UserIDList []string `json:"useridlist"`
- }
- // GetCheckinDataResponse 获取打卡记录数据响应
- GetCheckinDataResponse struct {
- util.CommonError
- CheckinData []*GetCheckinDataItem `json:"checkindata"`
- }
- // GetCheckinDataItem 打卡记录数据
- GetCheckinDataItem struct {
- UserID string `json:"userid"`
- GroupName string `json:"groupname"`
- CheckinType string `json:"checkin_type"`
- ExceptionType string `json:"exception_type"`
- CheckinTime int64 `json:"checkin_time"`
- LocationTitle string `json:"location_title"`
- LocationDetail string `json:"location_detail"`
- WifiName string `json:"wifiname"`
- Notes string `json:"notes"`
- WifiMac string `json:"wifimac"`
- MediaIDs []string `json:"mediaids"`
- SchCheckinTime int64 `json:"sch_checkin_time"`
- GroupID int64 `json:"groupid"`
- ScheduleID int64 `json:"schedule_id"`
- TimelineID int64 `json:"timeline_id"`
- Lat int64 `json:"lat,omitempty"`
- Lng int64 `json:"lng,omitempty"`
- DeviceID string `json:"deviceid,omitempty"`
- }
- )
- // GetCheckinData 获取打卡记录数据
- // @see https://developer.work.weixin.qq.com/document/path/90262
- func (r *Client) GetCheckinData(req *GetCheckinDataRequest) (*GetCheckinDataResponse, error) {
- var (
- accessToken string
- err error
- )
- if accessToken, err = r.GetAccessToken(); err != nil {
- return nil, err
- }
- var response []byte
- if response, err = util.PostJSON(fmt.Sprintf(getCheckinDataURL, accessToken), req); err != nil {
- return nil, err
- }
- result := &GetCheckinDataResponse{}
- err = util.DecodeWithError(response, result, "GetCheckinData")
- return result, err
- }
- type (
- // GetDayDataResponse 获取打卡日报数据
- GetDayDataResponse struct {
- util.CommonError
- Datas []DayDataItem `json:"datas"`
- }
- // DayDataItem 日报
- DayDataItem struct {
- BaseInfo DayBaseInfo `json:"base_info"`
- SummaryInfo DaySummaryInfo `json:"summary_info"`
- HolidayInfos []HolidayInfo `json:"holiday_infos"`
- ExceptionInfos []ExceptionInfo `json:"exception_infos"`
- OtInfo OtInfo `json:"ot_info"`
- SpItems []SpItem `json:"sp_items"`
- }
- // DayBaseInfo 基础信息
- DayBaseInfo struct {
- Date int64 `json:"date"`
- RecordType int64 `json:"record_type"`
- Name string `json:"name"`
- NameEx string `json:"name_ex"`
- DepartsName string `json:"departs_name"`
- AcctID string `json:"acctid"`
- DayType int64 `json:"day_type"`
- RuleInfo DayRuleInfo `json:"rule_info"`
- }
- // DayCheckInTime 当日打卡时间
- DayCheckInTime struct {
- WorkSec int64 `json:"work_sec"`
- OffWorkSec int64 `json:"off_work_sec"`
- }
- // DayRuleInfo 打卡人员所属规则信息
- DayRuleInfo struct {
- GroupID int64 `json:"groupid"`
- GroupName string `json:"groupname"`
- ScheduleID int64 `json:"scheduleid"`
- ScheduleName string `json:"schedulename"`
- CheckInTimes []DayCheckInTime `json:"checkintime"`
- }
- // DaySummaryInfo 汇总信息
- DaySummaryInfo struct {
- CheckinCount int64 `json:"checkin_count"`
- RegularWorkSec int64 `json:"regular_work_sec"`
- StandardWorkSec int64 `json:"standard_work_sec"`
- EarliestTime int64 `json:"earliest_time"`
- LastestTime int64 `json:"lastest_time"`
- }
- // HolidayInfo 假勤相关信息
- HolidayInfo struct {
- SpNumber string `json:"sp_number"`
- SpTitle SpTitle `json:"sp_title"`
- SpDescription SpDescription `json:"sp_description"`
- }
- // SpTitle 假勤信息摘要-标题信息
- SpTitle struct {
- Data []SpData `json:"data"`
- }
- // SpDescription 假勤信息摘要-描述信息
- SpDescription struct {
- Data []SpData `json:"data"`
- }
- // SpData 假勤信息(多种语言描述,目前只有中文一种)
- SpData struct {
- Lang string `json:"lang"`
- Text string `json:"text"`
- }
- // SpItem 假勤统计信息
- SpItem struct {
- Count int64 `json:"count"`
- Duration int64 `json:"duration"`
- TimeType int64 `json:"time_type"`
- Type int64 `json:"type"`
- VacationID int64 `json:"vacation_id"`
- Name string `json:"name"`
- }
- // ExceptionInfo 校准状态信息
- ExceptionInfo struct {
- Count int64 `json:"count"`
- Duration int64 `json:"duration"`
- Exception int64 `json:"exception"`
- }
- // OtInfo 加班信息
- OtInfo struct {
- OtStatus int64 `json:"ot_status"`
- OtDuration int64 `json:"ot_duration"`
- ExceptionDuration []uint64 `json:"exception_duration"`
- }
- )
- // GetDayData 获取打卡日报数据
- // @see https://developer.work.weixin.qq.com/document/path/96498
- func (r *Client) GetDayData(req *GetCheckinDataRequest) (result *GetDayDataResponse, err error) {
- var (
- response []byte
- accessToken string
- )
- if accessToken, err = r.GetAccessToken(); err != nil {
- return
- }
- if response, err = util.PostJSON(fmt.Sprintf(getDayDataURL, accessToken), req); err != nil {
- return
- }
- result = new(GetDayDataResponse)
- err = util.DecodeWithError(response, result, "GetDayData")
- return
- }
- type (
- // GetMonthDataResponse 获取打卡月报数据
- GetMonthDataResponse struct {
- util.CommonError
- Datas []MonthDataItem `json:"datas"`
- }
- // MonthDataItem 月报数据
- MonthDataItem struct {
- BaseInfo MonthBaseInfo `json:"base_info"`
- SummaryInfo MonthSummaryInfo `json:"summary_info"`
- ExceptionInfos []ExceptionInfo `json:"exception_infos"`
- SpItems []SpItem `json:"sp_items"`
- OverWorkInfo OverWorkInfo `json:"overwork_info"`
- }
- // MonthBaseInfo 基础信息
- MonthBaseInfo struct {
- RecordType int64 `json:"record_type"`
- Name string `json:"name"`
- NameEx string `json:"name_ex"`
- DepartsName string `json:"departs_name"`
- AcctID string `json:"acctid"`
- RuleInfo MonthRuleInfo `json:"rule_info"`
- }
- // MonthRuleInfo 打卡人员所属规则信息
- MonthRuleInfo struct {
- GroupID int64 `json:"groupid"`
- GroupName string `json:"groupname"`
- }
- // MonthSummaryInfo 汇总信息
- MonthSummaryInfo struct {
- WorkDays int64 `json:"work_days"`
- ExceptDays int64 `json:"except_days"`
- RegularDays int64 `json:"regular_days"`
- RegularWorkSec int64 `json:"regular_work_sec"`
- StandardWorkSec int64 `json:"standard_work_sec"`
- }
- // OverWorkInfo 加班情况
- OverWorkInfo struct {
- WorkdayOverSec int64 `json:"workday_over_sec"`
- HolidayOverSec int64 `json:"holidays_over_sec"`
- RestDayOverSec int64 `json:"restdays_over_sec"`
- }
- )
- // GetMonthData 获取打卡月报数据
- // @see https://developer.work.weixin.qq.com/document/path/96499
- func (r *Client) GetMonthData(req *GetCheckinDataRequest) (result *GetMonthDataResponse, err error) {
- var (
- response []byte
- accessToken string
- )
- if accessToken, err = r.GetAccessToken(); err != nil {
- return
- }
- if response, err = util.PostJSON(fmt.Sprintf(getMonthDataURL, accessToken), req); err != nil {
- return
- }
- result = new(GetMonthDataResponse)
- err = util.DecodeWithError(response, result, "GetMonthData")
- return
- }
|