first commit
This commit is contained in:
158
api/controller/otherController.go
Normal file
158
api/controller/otherController.go
Normal file
@@ -0,0 +1,158 @@
|
||||
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 为指令 id,Value 为指令状态 0|1,ValueStr 为字符串值
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user