xdd-plus/models/asset.go
2021-08-17 13:52:21 +08:00

156 lines
3.7 KiB
Go

package models
import (
"encoding/json"
"fmt"
"net/url"
"strconv"
"strings"
"time"
"github.com/beego/beego/v2/client/httplib"
)
type Asset struct {
Nickname string
Bean struct {
Total int
TodayIn int
TodayOut int
YestodayIn int
YestodayOut int
MonthIn int
MonthOut int
ToExpire []int
}
RedPacket struct {
Total float64
ToExpire float64
ToExpireJd float64
ToExpireJx float64
ToExpireJs float64
}
}
var Int = func(s string) int {
i, _ := strconv.Atoi(s)
return i
}
func DailyAssetsPush() {
for _, ck := range GetJdCookies() {
if (ck.QQ != 0 && Config.QQID != 0 && SendQQ != nil) || ck.PushPlus != "" {
msg := ""
for _, task := range Config.Tasks {
if task.Word == "查询" {
task.Envs = []Env{{
Name: "pins",
Value: ck.PtPin,
}}
msg = runTask(&task, true)
break
}
}
if ck.QQ != 0 && Config.QQID != 0 && SendQQ != nil {
SendQQ(int64(ck.QQ), msg)
}
if ck.PushPlus != "" {
pushPlus(ck.PushPlus, msg)
}
}
}
}
func (ck *JdCookie) Query() string {
msgs := []string{}
asset := Asset{}
if CookieOK(ck) {
today := time.Now().Local().Format("2006-01-02")
yestoday := time.Now().Local().Add(-time.Hour * 24).Format("2006-01-02")
month := time.Now().Local().Format("2006-01")
page := 1
end := false
for {
if end {
break
}
bds := getJingBeanBalanceDetail(page, fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
if bds == nil {
end = true
break
}
for _, bd := range bds {
amount := Int(bd.Amount)
if !strings.Contains(bd.Date, month) {
end = true
break
}
if amount > 0 {
asset.Bean.MonthIn += amount
} else {
asset.Bean.MonthOut += -amount
}
if strings.Contains(bd.Date, today) {
if amount > 0 {
asset.Bean.TodayIn += amount
} else {
asset.Bean.TodayOut += -amount
}
}
if strings.Contains(bd.Date, yestoday) {
if amount > 0 {
asset.Bean.YestodayIn += amount
} else {
asset.Bean.YestodayOut += -amount
}
}
}
page++
}
msgs = append(msgs, []string{
fmt.Sprintf("当月收入:%d京豆", asset.Bean.MonthIn),
fmt.Sprintf("当月支出:%d京豆", asset.Bean.MonthOut),
fmt.Sprintf("昨日收入:%d京豆", asset.Bean.YestodayIn),
fmt.Sprintf("昨日支出:%d京豆", asset.Bean.YestodayOut),
fmt.Sprintf("今日收入:%d京豆", asset.Bean.TodayIn),
fmt.Sprintf("今日支出:%d京豆", asset.Bean.TodayOut),
}...)
} else {
msgs = append(msgs, []string{
"提醒:该账号已过期,请重新登录",
}...)
}
ck.PtPin, _ = url.QueryUnescape(ck.PtPin)
return strings.Join(append([]string{
fmt.Sprintf("账号:%s", ck.PtPin),
fmt.Sprintf("昵称:%s", ck.Nickname),
fmt.Sprintf("备注:%s", ck.Note),
}, append(msgs, fmt.Sprintf("当前京豆:%v京豆", ck.BeanNum))...), "\n")
}
type BeanDetail struct {
Date string `json:"date"`
Amount string `json:"amount"`
EventMassage string `json:"eventMassage"`
}
func getJingBeanBalanceDetail(page int, cookie string) []BeanDetail {
type AutoGenerated struct {
Code string `json:"code"`
DetailList []BeanDetail `json:"detailList"`
}
a := AutoGenerated{}
req := httplib.Post(`https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail`)
req.Header("User-Agent", ua)
req.Header("Host", "api.m.jd.com")
req.Header("Content-Type", "application/x-www-form-urlencoded")
req.Header("Cookie", cookie)
req.Body(fmt.Sprintf(`body={"pageSize": "20", "page": "%d"}&appid=ld`, page))
data, err := req.Bytes()
if err != nil {
return nil
}
json.Unmarshal(data, &a)
return a.DetailList
}