189 lines
4.8 KiB
Go
189 lines
4.8 KiB
Go
|
package udesk
|
|||
|
|
|||
|
import (
|
|||
|
"bytes"
|
|||
|
"crypto/sha256"
|
|||
|
"encoding/hex"
|
|||
|
"encoding/json"
|
|||
|
"fmt"
|
|||
|
"github.com/google/uuid"
|
|||
|
"github.com/tidwall/gjson"
|
|||
|
"io"
|
|||
|
"log"
|
|||
|
"net/http"
|
|||
|
"strconv"
|
|||
|
"strings"
|
|||
|
"time"
|
|||
|
)
|
|||
|
|
|||
|
//新建请求体对象
|
|||
|
|
|||
|
func newReqUdeskToken() RequestUdeskBody {
|
|||
|
return RequestUdeskBody{
|
|||
|
Email: Email,
|
|||
|
Password: Password,
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 新建返回体对象
|
|||
|
func newRespUdeskBody() UdeskToken {
|
|||
|
return UdeskToken{
|
|||
|
Code: "",
|
|||
|
Open_api_auth_token: "",
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//获取Unix时间戳
|
|||
|
|
|||
|
func GetTimeStamp() string {
|
|||
|
return strconv.FormatInt(time.Now().Unix(), 10)
|
|||
|
}
|
|||
|
|
|||
|
//获取nonce
|
|||
|
|
|||
|
func GetNonce() string {
|
|||
|
randomUUID := uuid.New()
|
|||
|
nonce := randomUUID.String()
|
|||
|
return nonce
|
|||
|
}
|
|||
|
|
|||
|
// sha256转换函数
|
|||
|
func calculateSHA256(input string) string {
|
|||
|
// 将字符串转换为字节数组
|
|||
|
inputBytes := []byte(input)
|
|||
|
|
|||
|
// 创建SHA-256哈希对象
|
|||
|
hasher := sha256.New()
|
|||
|
|
|||
|
// 将字节数组写入哈希对象
|
|||
|
hasher.Write(inputBytes)
|
|||
|
|
|||
|
// 计算哈希值并返回
|
|||
|
hashInBytes := hasher.Sum(nil)
|
|||
|
hashString := hex.EncodeToString(hashInBytes)
|
|||
|
|
|||
|
return hashString
|
|||
|
}
|
|||
|
|
|||
|
// 获取鉴权token对象
|
|||
|
|
|||
|
func GetUdeskAuthToken() UdeskToken {
|
|||
|
reqBody := newReqUdeskToken()
|
|||
|
jsonData, err := json.Marshal(reqBody)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("获取udesk管理员token过程中转换请求体json失败,错误是:%v", err)
|
|||
|
}
|
|||
|
payload := bytes.NewBufferString(string(jsonData))
|
|||
|
resp, err := http.Post(Auth_token_url, "application/json", payload)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("获取udesk管理员token过程中请求获取token接口失败,错误是:%v", err)
|
|||
|
}
|
|||
|
defer func(Body io.ReadCloser) {
|
|||
|
err := Body.Close()
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
}(resp.Body)
|
|||
|
body, err := io.ReadAll(resp.Body)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("获取udesk管理员token过程中获取token接口响应失败,错误是:%v", err)
|
|||
|
}
|
|||
|
json.Unmarshal(body, &u)
|
|||
|
return u
|
|||
|
}
|
|||
|
|
|||
|
//把udeskid转换为cloudid
|
|||
|
|
|||
|
func Id2CloudId(id string) string {
|
|||
|
detailUrl := 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 func(Body io.ReadCloser) {
|
|||
|
err := Body.Close()
|
|||
|
if err != nil {
|
|||
|
|
|||
|
}
|
|||
|
}(resp.Body)
|
|||
|
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
|
|||
|
}
|
|||
|
|
|||
|
//* 获取工单过滤器下的符合条件的工单id *
|
|||
|
|
|||
|
// 获取工单总共的页数
|
|||
|
|
|||
|
func GetUdeskTicketId() (*int64, error) {
|
|||
|
filterUrl := Geturlstring("https://servicecenter-alauda.udesk.cn/open_api_v1/tickets/tickets_in_filter?filter_id=16523464&")
|
|||
|
resp, err := http.Get(filterUrl)
|
|||
|
if err != nil {
|
|||
|
// 处理错误
|
|||
|
log.Printf("获取工单过滤器下的工单信息失败,发送请求过程,错误是:%v", err)
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
defer func(Body io.ReadCloser) {
|
|||
|
err := Body.Close()
|
|||
|
if err != nil {
|
|||
|
|
|||
|
}
|
|||
|
}(resp.Body)
|
|||
|
body, err := io.ReadAll(resp.Body)
|
|||
|
if err != nil {
|
|||
|
// 处理错误
|
|||
|
log.Printf("获取工单过滤器下的工单信息失败,读取返回体过程,错误是:%v", err)
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
jsonData := string(body)
|
|||
|
//fmt.Println(jsonData)
|
|||
|
totalPages := gjson.Get(jsonData, "meta.total_pages").Int()
|
|||
|
return &totalPages, nil
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// 根据上面获取的页数,分别请求接口,取到工单id切片
|
|||
|
|
|||
|
func LoopGetTicketId(totalPages *int64) ([]string, error) {
|
|||
|
var idSlice = make([]string, 0)
|
|||
|
for i := int64(1); i <= *totalPages; i++ {
|
|||
|
getIdUrl := Geturlstring("https://servicecenter-alauda.udesk.cn/open_api_v1/tickets/tickets_in_filter?filter_id=16523464&") + "&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
|
|||
|
}
|