You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
5.2 KiB
Go

package cmd
import (
"crypto/md5"
"encoding/base64"
"encoding/hex"
"fmt"
"math/rand"
"time"
"github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/spf13/cast"
"github.com/spf13/cobra"
"github.com/tidwall/gjson"
)
func init() {
rootCmd.AddCommand(testCmd)
}
var testCmd = &cobra.Command{
Use: "test",
Short: "Only for test",
Run: func(cmd *cobra.Command, args []string) {
res := getUserIds()
fmt.Println(res)
for _, v := range res {
result, err := CheckUser(
v,
WMSToken,
)
if err != nil {
panic(exception.New(err.Error()))
}
moduleResultList := gjson.Get(result, "data.moduleResultList").Array()
qianfei := moduleResultList[0].Get("itemList").Array()[3].Get("itemResult").String()
lixian := moduleResultList[3].Get("itemList").Array()[0].Get("itemResult").String()
if qianfei == "是" && lixian == "离线" {
fmt.Println(v + " 欠费且离线")
}
}
},
}
func getUserIds() []string {
var m []string
client := resty.New().SetRetryCount(5).SetRetryWaitTime(20 * time.Second)
resp, err := client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).SetBody(map[string]string{
"eqptId": "124390484",
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/eqpt/resEqpt/portOfEqpt")
if err != nil {
panic(exception.New(err.Error()))
}
arr := gjson.Get(resp.String(), "data").Array()
for i, v := range arr {
if i == 0 || v.Get("STATE").String() != "A" {
continue
} else {
id := v.Get("SUBSCRIBER_ID").String()
resp, err = client.R().
SetHeaders(map[string]string{
"Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")),
"Content-Type": "application/json;charset=UTF-8",
"Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")),
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}).SetQueryParams(map[string]string{
"productInstanceId": id,
"regionId": "A",
"state": "A",
"sysMenuId": "2166",
}).Get("http://132.151.25.19:15609/prod-api/resource/queryProductInfo/portUserList")
if err != nil {
panic(exception.New(err.Error()))
}
if len(gjson.Get(resp.String(), "data").Array()) > 0 {
m = append(m, gjson.Get(resp.String(), "data").Array()[0].Get("bandNumber").String())
}
}
}
return m
}
const (
AppID = "gkSystem"
AppSec = "123456"
UserType = 1
WMSToken = "2521870EF1B066C03DAE4A3F954961A4C22BC06A5FBCD5B54AD4586B24755772817529295CB7A609E022DE1810993F01"
)
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
func randomString(n int) string {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
b := make([]byte, n)
for i := range b {
b[i] = chars[r.Intn(len(chars))]
}
return string(b)
}
func buildSign() (string, string, int64) {
timestamp := time.Now().UnixMilli()
nonceStr := randomString(32)
raw := fmt.Sprintf(
"%s_%s_%d_%s",
AppID,
AppSec,
timestamp,
nonceStr,
)
sum := md5.Sum([]byte(raw))
md5Hex := hex.EncodeToString(sum[:])
sign := base64.StdEncoding.EncodeToString(
[]byte(md5Hex),
)
return sign, nonceStr, timestamp
}
func CheckUser(account string, token string) (string, error) {
sign, nonceStr, timestamp := buildSign()
body := map[string]any{
"account": base64.StdEncoding.EncodeToString([]byte(account)),
"type": UserType,
"appId": AppID,
"sign": sign,
"nonceStr": nonceStr,
"timestamp": timestamp,
}
resp, err := resty.New().
R().
SetHeader("Content-Type", "application/json").
SetQueryParam("touchKey", AppID).
SetQueryParam("appSec", AppSec).
SetQueryParam("token", token).
SetBody(body).
Post("https://zjgkappservice.zj186.com/diagnosed/checkUser")
if err != nil {
panic(exception.New(err.Error()))
}
return resp.String(), nil
}