package filter import ( "aiweek/option" "aiweek/tools" "aiweek/udesk/auth" "fmt" "github.com/tidwall/gjson" "io" "log" "net/http" "strconv" "strings" ) //* 获取工单过滤器下的符合条件的工单id * // 获取工单总共的页数 func GetUdeskTicketId(filterId string) (*int64, error) { filterUrl := fmt.Sprintf("https://servicecenter-alauda.udesk.cn/open_api_v1/tickets/tickets_in_filter?filter_id=%v&", filterId) filterUrl = auth.Geturlstring(filterUrl) resp, err := http.Get(filterUrl) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的工单信息失败,发送请求过程,错误是:%v", err) return nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的工单信息失败,读取返回体过程,错误是:%v", err) return nil, err } jsonData := string(body) totalPages := gjson.Get(jsonData, "meta.total_pages").Int() return &totalPages, nil } // 根据上面获取的页数,分别请求接口,取到工单id切片 func LoopGetTicketId(totalPages *int64, filterId string) ([]string, error) { var idSlice = make([]string, 0) for i := int64(1); i <= *totalPages; i++ { filterUrl := fmt.Sprintf("https://servicecenter-alauda.udesk.cn/open_api_v1/tickets/tickets_in_filter?filter_id=%v", filterId) getIdUrl := auth.Geturlstring(filterUrl+"&") + "&page=" + strconv.FormatInt(i, 10) resp, err := http.Get(getIdUrl) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的工单id失败,发送请求过程,错误是:%v", err) return nil, err } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { log.Printf("获取工单过滤器下的工单id失败,关闭返回体,错误是:%v", err) } }(resp.Body) body, err := io.ReadAll(resp.Body) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的工单id失败,读取返回体过程,错误是:%v", err) return nil, err } jsonData := string(body) ticketIdstr := gjson.Get(jsonData, "contents.#.ticket.id").String() sliceStr := strings.Trim(ticketIdstr, "[]") numbers := strings.Split(sliceStr, ",") log.Printf("处理id切片中...第%v次处理...\n", i) idSlice = append(idSlice, numbers...) log.Printf("%T,%v", idSlice, idSlice) } log.Println("处理完成~owo~") return idSlice, nil } //把udeskid转换为cloudid func Id2CloudId(id string) string { detailUrl := auth.Geturlstring("https://servicecenter-alauda.udesk.cn/open_api_v1/tickets/detail?") + "&id=" + id resp, err := http.Get(detailUrl) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的cloudid失败,发送请求过程,错误是:%v", err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { // 处理错误 log.Printf("获取工单过滤器下的cloudid失败,读取返回体过程,错误是:%v", err) } jsonData := string(body) cloudId := gjson.Get(jsonData, "ticket.custom_fields.TextField_219254").String() return cloudId } //获取上周到上上周的工单 func GetWeeklyTicket() []string { sevenDayPages, err := GetUdeskTicketId(option.UDESK_FILTER7D) if err != nil { log.Printf("获取7天的工单过滤器中的page信息失败!错误是%v", err) } fourteenDayPages, err := GetUdeskTicketId(option.UDSK_FILTER14D) if err != nil { log.Printf("获取14天的工单过滤器中的page信息失败!错误是%v", err) } sevenDaytTickets, err := LoopGetTicketId(sevenDayPages, option.UDESK_FILTER7D) if err != nil { log.Printf("获取7天的工单过滤器中的ticket信息失败!错误是%v", err) } fourteenDaytickets, err := LoopGetTicketId(fourteenDayPages, option.UDSK_FILTER14D) if err != nil { log.Printf("获取14天的工单过滤器中的ticket信息失败!错误是%v", err) } fmt.Println("7天", sevenDaytTickets) fmt.Println("14天", fourteenDaytickets) weeklyTicket := tools.ExcludeSlice(sevenDaytTickets, fourteenDaytickets) fmt.Println("上周到上上周的工单:", weeklyTicket) return weeklyTicket }