Files
wechat_ipad_pro/api/service/adminService.go
2026-02-17 13:06:23 +08:00

242 lines
5.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package service
import (
"errors"
"fmt"
"strings"
"time"
"xiawan/wx/api/req"
"xiawan/wx/api/vo"
"xiawan/wx/db"
"xiawan/wx/srv/wxface"
"github.com/gin-gonic/gin"
"github.com/lunny/log"
)
// 检查请求参数 key 对应的 license 是否可用
func CheckKey(queryKey string) (string, error) {
errMsg := fmt.Sprintf("%s 该 key 无效! 请 检查正确性 或 联系管理员生成", queryKey)
if len(strings.TrimSpace(queryKey)) == 0 {
// 请求参数中没有携带 license 或者 license 为空
return "", errors.New(errMsg)
}
has, err := db.HasLicense(queryKey)
if has == nil || err != nil {
// MySQL 数据库没有该 license
return "", errors.New(errMsg)
}
if db.CheckExpiry(has.ExpiryDate, has.Type) {
// MySQL 数据库中的该 license 已过期
return "", fmt.Errorf("%s 该 key 已过期!", queryKey)
}
// license 可用
return queryKey, nil
}
// GenAuthKeyService 生成授权码(新设备)
func GenAuthKeyService(count, days int) vo.DTO {
if count < 1 {
count = 1
}
if days < 1 {
days = 30
}
res := db.CreateLicense(count, days)
authKeys := strings.Split(res, "\n\t")
if len(res) == 0 {
authKeys = []string{}
}
return vo.NewSuccessObj(authKeys, "AuthKey生成成功")
}
// 按类型生成(不使用不计算时间)
func GenAuthKeyService3(count int, itype int) vo.DTO {
//1日 7 周 30月 90季 180 半年 365年 30000
types := []int{1, 7, 30, 90, 180, 365, 30000}
// 判断 itype 在 types 中
isType := false
for _, t := range types {
if t == itype {
isType = true
break
}
}
log.Println("isType", isType)
log.Println("Type", itype)
log.Println("types", types)
if !isType {
return vo.NewFail("type 参数错误")
}
res := db.CreateLicense3(count, itype)
authKeys := strings.Split(res, "\n\t")
if len(res) == 0 {
authKeys = []string{}
}
return vo.NewSuccessObj(authKeys, "AuthKey生成成功")
}
// 授权码延期 西柚云
func DelayAuthKeyServiceNew(key string, m req.DelayAuthKeyModelNew) vo.DTO {
if m.KeyUse == "" || key == "" {
return vo.NewFail("keyuse 参数错误")
}
// 计算被使用key的剩余天数
keyuse_expirydata, err := db.HasLicense(m.KeyUse)
if err != nil || keyuse_expirydata == nil {
return vo.NewFail("查询失败")
}
key_use_days := keyuse_expirydata.Type
ms := req.DelayAuthKeyModel{
Key: key,
Days: key_use_days,
ExpiryDate: "",
}
db.DeleteLicense(m.KeyUse, 2)
return DelayAuthKeyService(ms)
}
// 授权码解绑 西柚云
func UnbindAuthKeyService(key string) vo.DTO {
if key == "" {
return vo.NewFail("key 参数错误")
}
ms := req.DeleteAuthKeyModel{
Key: key,
Opt: 3,
}
return checkExIdPerformNoCreateConnect(key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := connect.GetWXAccount()
wxAccount.GetUserInfo().SetLoginState(0)
if wxAccount.GetUserInfo().GetLoginState() == 0 {
return DeleteAuthKeyService(ms)
} else {
return vo.NewFail("解绑失败")
}
})
}
// 查看配置
func GetConfigService(key string) vo.DTO {
if key == "" {
return vo.NewFail("key 参数错误")
}
query, err := db.QueryCommand(key)
if err != nil {
return vo.NewFail("操作失败!")
}
return vo.NewSuccessObj(query, "操作成功!")
}
// DelayAuthKeyService 授权码延期
func DelayAuthKeyService(m req.DelayAuthKeyModel) vo.DTO {
if m.Days < 1 {
m.Days = 30
}
if len(strings.TrimSpace(m.ExpiryDate)) > 0 {
// 获取当前的过期日期
expiryDate, err := time.Parse("2006-01-02", m.ExpiryDate)
if err != nil {
return vo.NewFail("ExpiryDate 参数解析错误")
}
now := time.Now()
if expiryDate.Before(now) {
return vo.NewFail("ExpiryDate 参数设置错误")
}
// ExpiryDate 参数可用
m.ExpiryDate = strings.TrimSpace(m.ExpiryDate)
m.Days = 0
}
expiryDateStr, err := db.DelayLicense(m)
if err != nil {
return vo.NewFail("延期失败: " + err.Error())
}
// 延期成功; 更新已建立链接的授权码的过期时间
return getExistWxConnect(m.Key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
if connect != nil {
connect.GetWXServer().UpdateExpiryDate(m.Key, expiryDateStr)
}
return vo.NewSuccess(gin.H{
"expiryDate": expiryDateStr,
}, "延期成功")
})
}
// 更新禁用状态
func BannedAuthKeyService(m req.BannedAuthKeyModel) vo.DTO {
bannedStr := "启用0"
if m.IsBanned != 0 {
m.IsBanned = 1
bannedStr = "禁用1"
}
err := db.DisableLicense(m.Key, m.IsBanned)
if err != nil {
return vo.NewFail("设置失败: " + err.Error())
}
// 延期成功; 更新已建立链接的授权码的过期时间
return getExistWxConnect(m.Key, func(connect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
if connect != nil {
connect.GetWXServer().UpdateDisable(m.Key, m.IsBanned)
}
return vo.NewSuccess(gin.H{
"isBanned": bannedStr,
}, "设置成功")
})
}
// HttpSyncLicenseKeyService HTTP-激活状态
func HttpSyncLicenseKeyService() vo.DTO {
results, err := db.HttpSyncLicenseKey()
if err != nil {
return vo.NewFail("发生错误: " + err.Error())
}
return vo.NewSuccessObj(results, "")
}
// DeleteAuthKeyService 删除授权码
func DeleteAuthKeyService(m req.DeleteAuthKeyModel) vo.DTO {
err := db.DeleteLicense(m.Key, m.Opt)
if err != nil {
return vo.NewFail("删除授权码失败: " + err.Error())
}
return vo.NewSuccess(gin.H{}, "删除成功")
}
// GetLicenseKeyService 查询卡密有效期
func GetLicenseKeyService(queryKey string) vo.DTO {
has, err := db.HasLicense(queryKey)
if err != nil {
return vo.NewFail("查询失败")
}
if has == nil {
return vo.NewFail("卡密不存在")
}
return vo.NewSuccessObj(has, "查询成功")
}
// GetActiveLicenseKeysService 获取所有激活状态的卡密
func GetActiveLicenseKeysService() vo.DTO {
results, err := db.GetActiveLicenseKeys()
if err != nil {
return vo.NewFail("查询失败: " + err.Error())
}
return vo.NewSuccessObj(results, "查询成功")
}