aiweek-reconstruction/udesk/filter/function.go

131 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package filter
import (
"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 {
optionobj := tools.NewOptionObj()
Opt := optionobj.ReadYaml("./udesk.yaml").Filters
sevenDayPages, err := GetUdeskTicketId(Opt[0].Filter7D)
if err != nil {
log.Printf("获取7天的工单过滤器中的page信息失败错误是%v", err)
}
fourteenDayPages, err := GetUdeskTicketId(Opt[1].Filter14D)
if err != nil {
log.Printf("获取14天的工单过滤器中的page信息失败错误是%v", err)
}
sevenDaytTickets, err := LoopGetTicketId(sevenDayPages, Opt[0].Filter7D)
if err != nil {
log.Printf("获取7天的工单过滤器中的ticket信息失败错误是%v", err)
}
fourteenDaytickets, err := LoopGetTicketId(fourteenDayPages, Opt[1].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
}