You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
261 lines
5.3 KiB
261 lines
5.3 KiB
package common |
|
|
|
import ( |
|
"fmt" |
|
"io" |
|
"mime" |
|
"net/http" |
|
"os" |
|
"server/call" |
|
"server/common" |
|
"server/config" |
|
"server/db" |
|
utils "server/modules/backend/util" |
|
"server/modules/customer/app" |
|
"server/modules/customer/bdb" |
|
"server/modules/customer/values" |
|
"server/util" |
|
"strings" |
|
"time" |
|
|
|
"github.com/olivere/elastic/v7" |
|
|
|
"github.com/gin-gonic/gin" |
|
"github.com/liangdas/mqant/log" |
|
) |
|
|
|
// 上传图片 并返回图片地址 |
|
func UploadImage(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
|
|
// 解析请求中的 multipart/form-data |
|
err := c.Request.ParseMultipartForm(10 << 20) // 限制上传文件的大小为 10MB |
|
if err != nil { |
|
log.Error("图片超过10Mb, err:%v", err.Error()) |
|
a.Code = values.CodeParam |
|
return |
|
} |
|
|
|
// 打开上传的文件 |
|
file, header, err := c.Request.FormFile("file") |
|
if err != nil { |
|
log.Error("打开上传图片失败, err:%v", err.Error()) |
|
a.Code = values.CodeParam |
|
return |
|
} |
|
defer file.Close() |
|
|
|
// 获取上传文件的 MIME 类型 |
|
contentType := header.Header.Get("Content-Type") |
|
|
|
// 根据 MIME 类型获取文件扩展名 |
|
ext, err := mime.ExtensionsByType(contentType) |
|
if err != nil || len(ext) == 0 { |
|
log.Error("获取上传图片格式失败, err:%v", err.Error()) |
|
a.Code = values.CodeParam |
|
return |
|
} |
|
imageName := call.SnowNode().Generate().String() + ext[0] |
|
|
|
// 读取上传的文件内容 |
|
data, err := io.ReadAll(file) |
|
if err != nil { |
|
log.Error("读取图片内容失败, err:%v", err.Error()) |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
|
|
// 获取当前本地时间 |
|
now := time.Now() |
|
zeroTime := now.Format("20060102") |
|
rounded := now.Hour() |
|
dir := fmt.Sprintf("%v/%v/%v", values.ImagePath, zeroTime, rounded) |
|
|
|
// 创建保存文件的目标文件 |
|
err = createDirIfNotExist(dir) |
|
if err != nil { |
|
log.Error("创建图片保存目录, err:%v", err.Error()) |
|
a.Code = values.CodeParam |
|
return |
|
} |
|
|
|
// 将上传的文件复制到目标文件 |
|
err = os.WriteFile(dir+"/"+imageName, data, 0644) // 写入文件 |
|
if err != nil { |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
|
|
name := strings.Replace(dir+"/"+imageName, "/", ",", -1) |
|
a.Data = config.GetConfig().Customer.ImageURL + name |
|
} |
|
|
|
// 检测文件目录是否存在 |
|
func createDirIfNotExist(path string) error { |
|
// 检查目录是否存在 |
|
_, err := os.Stat(path) |
|
if err == nil { |
|
// 目录已存在,直接返回 |
|
return nil |
|
} |
|
|
|
// 目录不存在,创建目录 |
|
if os.IsNotExist(err) { |
|
err = os.MkdirAll(path, 0755) |
|
if err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
} |
|
|
|
// 返回图片 |
|
func DownImage(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
// req := &values.DownLoadImageReq{} |
|
// if !a.S(req) { |
|
// return |
|
// } |
|
|
|
name := c.Query("path") |
|
path := strings.Replace(name, ",", "/", -1) |
|
|
|
// 打开要返回的图片文件 |
|
file, err := os.Open(path) |
|
if err != nil { |
|
c.AbortWithError(http.StatusInternalServerError, err) |
|
return |
|
} |
|
defer file.Close() |
|
|
|
// 读取图片文件的内容 |
|
data, err := io.ReadAll(file) |
|
if err != nil { |
|
c.AbortWithError(http.StatusInternalServerError, err) |
|
return |
|
} |
|
|
|
arr := strings.Split(path, ".") |
|
|
|
// 返回图片 |
|
c.Data(http.StatusOK, "image/"+arr[len(arr)-1], data) |
|
} |
|
|
|
// OptList 操作日志 |
|
func OptList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.EditHistoryListReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
resp := values.EditHistoryListResp{} |
|
if err := bdb.BackDB.C().Order("time Desc").Limit(int(req.Num)).Offset(int((req.Page - 1) * req.Num)).Find(&resp.List).Error; err != nil { |
|
log.Error("err:%v", err) |
|
} |
|
resp.Count = bdb.BackDB.Count(&values.EditHistory{}, "") |
|
a.Data = resp |
|
} |
|
|
|
func GoodList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
} |
|
|
|
func ProductList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
products := call.GetConfigPayProduct() |
|
resp := &values.ProductListResp{List: products} |
|
a.Data = resp |
|
} |
|
|
|
func GamesList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
a.Data = values.GamesListResp{} |
|
} |
|
|
|
func ChannelList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
ret := call.GetChannelListReal() |
|
if ret == nil { |
|
a.Code = values.CodeRetry |
|
return |
|
} |
|
resp := values.ChannelListResp{} |
|
for _, v := range ret { |
|
if v.Show != 2 { |
|
continue |
|
} |
|
if len(a.User.SChannels) > 0 { |
|
if !util.SliceContain(a.User.SChannels, v.ChannelID) { |
|
continue |
|
} |
|
} |
|
resp.List = append(resp.List, v) |
|
} |
|
a.Data = resp |
|
} |
|
|
|
func UserInfo(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
resp := values.UserInfoResp{Name: a.User.Name, Role: a.User.Role, Power: a.User.Power} |
|
a.Data = resp |
|
} |
|
|
|
func GameInfo(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
|
|
var resp values.GameInfoResp |
|
|
|
a.Data = resp |
|
} |
|
|
|
func FeedbackList(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.Response() |
|
}() |
|
req := new(values.FeedbackListReq) |
|
if !a.S(req) { |
|
return |
|
} |
|
var resp values.FeedbackListResp |
|
su, eu := utils.GetQueryUnix(req.Start, req.End) |
|
q := elastic.NewBoolQuery() |
|
q.Must(elastic.NewRangeQuery("time").Gt(su)) |
|
q.Must(elastic.NewRangeQuery("time").Lt(eu)) |
|
var list []*common.ESFeedback |
|
count, err := db.ES().QueryList(common.ESIndexBackFeedback, req.Page-1, req.Num, q, &list, "time", false) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
} |
|
resp.List = list |
|
resp.Count = count |
|
a.Data = resp |
|
}
|
|
|