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

159 lines
4.1 KiB
Go
Raw Permalink 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 controller
import (
"encoding/xml"
"log"
"net/http"
"net/url"
"os"
"path/filepath"
"strings"
"xiawan/wx/api/req"
"xiawan/wx/api/service"
"xiawan/wx/api/vo"
"github.com/gin-gonic/gin"
)
// GetMyQrCode 获取我的二维码
func GetMyQrCode(ctx *gin.Context) {
reqModel := new(req.GetQrCodeModel)
queryKey, isExist := ctx.GetQuery("key")
if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" {
//确保每次都有Key
ctx.JSON(http.StatusOK, vo.NewFailUUId(""))
return
}
if !validateData(ctx, &reqModel) {
return
}
result := service.GetMyQrCodeService(queryKey, *reqModel)
ctx.JSON(http.StatusOK, result)
}
// GetPeopleNearbyApi 查看附近的人
func GetPeopleNearbyApi(ctx *gin.Context) {
reqModel := new(req.PeopleNearbyModel)
queryKey, isExist := ctx.GetQuery("key")
if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" {
//确保每次都有Key
ctx.JSON(http.StatusOK, vo.NewFailUUId(""))
return
}
if !validateData(ctx, &reqModel) {
return
}
result := service.GetPeopleNearbyService(queryKey, *reqModel)
ctx.JSON(http.StatusOK, result)
}
// UpdateCmdStatusApi 更新指令状态, key 为指令 idValue 为指令状态 0|1ValueStr 为字符串值
func UpdateCmdStatusApi(ctx *gin.Context) {
reqModel := new(req.ModifyCmdStatusModelNew)
queryKey, isExist := ctx.GetQuery("key")
if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" {
//确保每次都有Key
ctx.JSON(http.StatusOK, vo.NewFailUUId(""))
return
}
if !validateData(ctx, &reqModel) {
return
}
result := service.UpdateCmdStatusService(queryKey, *reqModel)
ctx.JSON(http.StatusOK, result)
}
// GetProjectFullPathApi 获取项目完整路径
func GetProjectFullPathApi(ctx *gin.Context) {
execPath, err := os.Executable() // 获取可执行文件的路径
if err != nil {
log.Fatalf("Failed to get executable path: %v", err)
ctx.JSON(http.StatusNotFound, "")
return
}
execPath, err = filepath.EvalSymlinks(execPath) // 解析符号链接,获取真实路径
if err != nil {
log.Fatalf("Failed to evaluate symlinks: %v", err)
ctx.JSON(http.StatusNotFound, "")
return
}
// 获取可执行文件所在目录
dir := filepath.Dir(execPath)
ctx.JSON(http.StatusOK, dir)
}
// 企微图片下载
func QWImageDownloadApi(ctx *gin.Context) {
reqModel := new(req.DownloadQWImageModel)
queryKey, isExist := ctx.GetQuery("key")
if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" {
ctx.JSON(http.StatusOK, vo.NewFailUUId(""))
return
}
if !validateData(ctx, &reqModel) {
return
}
// 解析XML提取 AesKey / FileURL / FileType
type imageXML struct {
XMLName xml.Name `xml:"msg"`
Img struct {
AESKey string `xml:"aeskey,attr"`
CdnMidImgURL string `xml:"cdnmidimgurl,attr"`
CdnThumbURL string `xml:"cdnthumburl,attr"`
TpURL string `xml:"tpurl,attr"`
TpThumbAESKey string `xml:"tpthumbaeskey,attr"`
} `xml:"img"`
}
var parsed imageXML
if err := xml.Unmarshal([]byte(reqModel.Xml), &parsed); err != nil {
ctx.JSON(http.StatusOK, vo.NewFail("XML解析失败:"+err.Error()))
return
}
aesKey := strings.TrimSpace(parsed.Img.AESKey)
if aesKey == "" {
aesKey = strings.TrimSpace(parsed.Img.TpThumbAESKey)
}
fileURL := ""
tpurl := strings.TrimSpace(parsed.Img.TpURL)
if tpurl != "" {
if u, err := url.Parse(tpurl); err == nil {
f := u.Query().Get("f")
if f != "" {
fileURL = f
} else {
// 回退为完整tpurl如果缺少f参数
fileURL = tpurl
}
} else {
fileURL = tpurl
}
} else {
fileURL = strings.TrimSpace(parsed.Img.CdnMidImgURL)
if fileURL == "" {
fileURL = strings.TrimSpace(parsed.Img.CdnThumbURL)
}
}
if aesKey == "" || fileURL == "" {
ctx.JSON(http.StatusOK, vo.NewFail("参数错误无法从XML提取必要字段(AesKey或FileURL)"))
return
}
model := req.DownMediaModel{
AesKey: aesKey,
FileURL: fileURL,
FileType: 1, // 默认 1
}
result := service.SendCdnDownloadService(queryKey, model)
ctx.JSON(http.StatusOK, result)
}