【新增】资源管理模块

This commit is contained in:
PandaGoAdmin
2022-01-14 17:37:01 +08:00
parent 9094780f40
commit 6b060d54aa
22 changed files with 619 additions and 36 deletions

View File

@@ -132,7 +132,7 @@ func (g *GenTableApi) Insert(rc *ctx.ReqCtx) {
// @Tags 工具 / 生成工具
// @Accept application/json
// @Product application/json
// @Param data body tools.SysTables true "body"
// @Param data body entity.DevGenTable true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
// @Router /develop/code/table [put]

157
apps/resource/api/email.go Normal file
View File

@@ -0,0 +1,157 @@
package api
import (
"pandax/apps/resource/api/from"
"pandax/apps/resource/entity"
"pandax/apps/resource/services"
"pandax/base/biz"
"pandax/base/ctx"
"pandax/base/ginx"
email "pandax/base/mail"
"pandax/base/utils"
)
/**
* @Description 添加qq群467890197 交流学习
* @Author 熊猫
* @Date 2022/1/14 15:23
**/
type ResEmailsApi struct {
ResEmailsApp services.ResEmailsModel
}
// @Summary ResEmails列表数据
// @Tags ResEmails
// @Param pageSize query int false "页条数"
// @Param pageNum query int false "页码"
// @Param status query string false "状态"
// @Param category query string false "分类"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /resource/email/list [get]
// @Security
func (p *ResEmailsApi) GetResEmailsList(rc *ctx.ReqCtx) {
pageNum := ginx.QueryInt(rc.GinCtx, "pageNum", 1)
pageSize := ginx.QueryInt(rc.GinCtx, "pageSize", 10)
status := rc.GinCtx.Query("status")
category := rc.GinCtx.Query("category")
data := entity.ResEmail{Status: status, Category: category}
list, total := p.ResEmailsApp.FindListPage(pageNum, pageSize, data)
li := *list
for i, data := range li {
data.From = utils.DdmMail(data.From)
data.Secret = utils.DdmPassword(data.Secret)
li[i] = data
}
rc.ResData = map[string]interface{}{
"data": list,
"total": total,
"pageNum": pageNum,
"pageSize": pageSize,
}
}
// @Summary 获取ResEmails
// @Description 获取JSON
// @Tags ResEmails
// @Param mailId path int true "mailId"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /resource/email/{mailId }[get]
// @Security
func (p *ResEmailsApi) GetResEmails(rc *ctx.ReqCtx) {
mailId := ginx.PathParamInt(rc.GinCtx, "mailId")
p.ResEmailsApp.FindOne(int64(mailId))
}
// @Summary 添加ResEmails
// @Description 获取JSON
// @Tags ResEmails
// @Accept application/json
// @Product application/json
// @Param data body entity.ResEmail true "data"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /resource/email [post]
// @Security X-TOKEN
func (p *ResEmailsApi) InsertResEmails(rc *ctx.ReqCtx) {
var data entity.ResEmail
ginx.BindJsonAndValid(rc.GinCtx, &data)
p.ResEmailsApp.Insert(data)
}
// @Summary 修改ResEmails
// @Description 获取JSON
// @Tags ResEmails
// @Accept application/json
// @Product application/json
// @Param data body entity.ResEmail true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /resource/email [put]
// @Security X-TOKEN
func (p *ResEmailsApi) UpdateResEmails(rc *ctx.ReqCtx) {
var data entity.ResEmail
ginx.BindJsonAndValid(rc.GinCtx, &data)
p.ResEmailsApp.Update(data)
}
// @Summary 删除ResEmails
// @Description 删除数据
// @Tags ResEmails
// @Param mailId path string true "mailId"
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": 400, "message": "删除失败"}"
// @Router /resource/email/{mailId } [delete]
func (p *ResEmailsApi) DeleteResEmails(rc *ctx.ReqCtx) {
mailId := rc.GinCtx.Param("mailId")
mailIds := utils.IdsStrToIdsIntGroup(mailId)
p.ResEmailsApp.Delete(mailIds)
}
// @Summary 删除ResEmails
// @Description 获取JSON
// @Tags ResOsses
// @Accept application/json
// @Product application/json
// @Param data body entity.ResEmail true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /resource/oss [put]
// @Security X-TOKEN
func (p *ResEmailsApi) UpdateMailStatus(rc *ctx.ReqCtx) {
var data entity.ResEmail
ginx.BindJsonAndValid(rc.GinCtx, &data)
p.ResEmailsApp.Update(entity.ResEmail{MailId: data.MailId, Status: data.Status})
}
// @Summary 测试发邮件
// @Description 获取JSON
// @Tags ResEmails
// @Accept application/json
// @Product application/json
// @Param data body from.SendMail true "data"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /resource/email/debugMail [post]
// @Security X-TOKEN
func (p *ResEmailsApi) DebugMail(rc *ctx.ReqCtx) {
var data from.SendMail
ginx.BindJsonAndValid(rc.GinCtx, &data)
one := p.ResEmailsApp.FindOne(data.MailId)
ml := email.Mail{
Host: one.Host,
Port: one.Port,
From: one.From,
Nickname: one.Nickname,
Secret: one.Secret,
IsSSL: one.IsSSL,
}
biz.ErrIsNil(ml.Email(data.To, email.TEXTTYPE, data.Subject, data.Body), "邮件发送失败")
}

View File

@@ -0,0 +1,14 @@
package from
/**
* @Description 添加qq群467890197 交流学习
* @Author 熊猫
* @Date 2022/1/14 16:53
**/
type SendMail struct {
MailId int64 `json:"mailId"`
To string `json:"to"`
Subject string `json:"subject"`
Body string `json:"body"`
}

View File

@@ -1,11 +1,15 @@
package api
import (
"fmt"
"pandax/apps/resource/entity"
"pandax/apps/resource/services"
"pandax/base/biz"
"pandax/base/ctx"
"pandax/base/ginx"
"pandax/base/oss"
"pandax/base/utils"
"time"
)
/**
@@ -22,8 +26,11 @@ type ResOssesApi struct {
// @Tags ResOsses
// @Param pageSize query int false "页条数"
// @Param pageNum query int false "页码"
// @Param status query string false "状态"
// @Param category query string false "分类"
// @Param ossCode query string false "编号"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /admin/resOsses/list [get]
// @Router /resource/oss/list [get]
// @Security
func (p *ResOssesApi) GetResOssesList(rc *ctx.ReqCtx) {
@@ -37,8 +44,8 @@ func (p *ResOssesApi) GetResOssesList(rc *ctx.ReqCtx) {
list, total := p.ResOssesApp.FindListPage(pageNum, pageSize, data)
li := *list
for i, data := range li {
data.AccessKey = utils.Ddm(data.AccessKey)
data.SecretKey = utils.Ddm(data.SecretKey)
data.AccessKey = utils.DdmKey(data.AccessKey)
data.SecretKey = utils.DdmKey(data.SecretKey)
li[i] = data
}
rc.ResData = map[string]interface{}{
@@ -54,7 +61,7 @@ func (p *ResOssesApi) GetResOssesList(rc *ctx.ReqCtx) {
// @Tags ResOsses
// @Param ossId path int true "ossId"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /admin/resOsses/{ossId }[get]
// @Router /resource/oss/{ossId }[get]
// @Security
func (p *ResOssesApi) GetResOsses(rc *ctx.ReqCtx) {
ossId := ginx.PathParamInt(rc.GinCtx, "ossId")
@@ -66,10 +73,10 @@ func (p *ResOssesApi) GetResOsses(rc *ctx.ReqCtx) {
// @Tags ResOsses
// @Accept application/json
// @Product application/json
// @Param data body entity.ResOsses true "data"
// @Param data body entity.ResOss true "data"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /admin/resOsses [post]
// @Router /resource/oss [post]
// @Security X-TOKEN
func (p *ResOssesApi) InsertResOsses(rc *ctx.ReqCtx) {
var data entity.ResOss
@@ -83,10 +90,10 @@ func (p *ResOssesApi) InsertResOsses(rc *ctx.ReqCtx) {
// @Tags ResOsses
// @Accept application/json
// @Product application/json
// @Param data body entity.ResOsses true "body"
// @Param data body entity.ResOss true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /admin/resOsses [put]
// @Router /resource/oss [put]
// @Security X-TOKEN
func (p *ResOssesApi) UpdateResOsses(rc *ctx.ReqCtx) {
var data entity.ResOss
@@ -101,10 +108,64 @@ func (p *ResOssesApi) UpdateResOsses(rc *ctx.ReqCtx) {
// @Param ossId path string true "ossId"
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": 400, "message": "删除失败"}"
// @Router /admin/resOsses/{ossId } [delete]
// @Router /resource/oss/{ossId} [delete]
func (p *ResOssesApi) DeleteResOsses(rc *ctx.ReqCtx) {
ossId := rc.GinCtx.Param("ossId")
ossIds := utils.IdsStrToIdsIntGroup(ossId)
p.ResOssesApp.Delete(ossIds)
}
// @Summary 上传文件ResOsses
// @Description 上传文件
// @Tags ResOsses
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": 400, "message": "删除失败"}"
// @Router /resource/oss/uploadFile [post]
func (p *ResOssesApi) UplaodResOsses(rc *ctx.ReqCtx) {
file, _ := rc.GinCtx.FormFile("file")
ossCode, _ := rc.GinCtx.GetQuery("ossCode")
list := p.ResOssesApp.FindList(entity.ResOss{OssCode: ossCode})
li := *list
yunFileTmpPath := "uploads/" + time.Now().Format("2006-01-02") + "/" + file.Filename
// 读取本地文件。
f, openError := file.Open()
biz.ErrIsNil(openError, "function file.Open() Failed")
biz.ErrIsNil(NewOss(li[0]).PutObj(yunFileTmpPath, f), "上传OSS失败")
rc.ResData = fmt.Sprintf("https://%s.%s/%s", li[0].BucketName, li[0].Endpoint, yunFileTmpPath)
}
// @Summary 修改ResOsses状态
// @Description 获取JSON
// @Tags ResOsses
// @Accept application/json
// @Product application/json
// @Param data body entity.ResOss true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /resource/oss [put]
// @Security X-TOKEN
func (p *ResOssesApi) UpdateOssStatus(rc *ctx.ReqCtx) {
var data entity.ResOss
ginx.BindJsonAndValid(rc.GinCtx, &data)
p.ResOssesApp.Update(entity.ResOss{OssId: data.OssId, Status: data.Status})
}
func NewOss(ens entity.ResOss) oss.Driver {
switch ens.Category {
case "0":
return oss.NewAliOss(oss.AliConfig{
AccessKey: ens.AccessKey,
SecretKey: ens.SecretKey,
Bucket: ens.BucketName,
Endpoint: ens.Endpoint,
})
case "1":
//return oss.NewQnOss()
case "2":
//return oss.NewTencentOss()
}
return nil
}

View File

@@ -1,7 +1,21 @@
package entity
import "pandax/base/model"
/**
* @Description 添加qq群467890197 交流学习
* @Author 熊猫
* @Date 2022/1/13 14:47
**/
type ResEmail struct {
MailId int64 `json:"mailId" gorm:"primaryKey;AUTO_INCREMENT;comment:主键编码"`
Category string `json:"category" grom:"type:varchar(1);comment:分类qq或163"` // 0 163邮箱1 qq邮箱 2 企业邮箱
Host string `json:"host" grom:"type:varchar(64);comment:服务器地址"` // 服务器地址
Port int `json:"port" grom:"type:int;comment:服务器端口"` // 服务器端口
From string `json:"from" grom:"type:varchar(64);comment:邮箱账号"` // 邮箱账号
Nickname string `json:"nickname" grom:"type:varchar(64);comment:发件人"` // 发件人
Secret string `json:"secret" grom:"type:varchar(64);comment:邮箱密码"` // 邮箱密码
IsSSL bool `json:"isSsl" grom:"comment:是否开启ssl"` // 是否开启ssl
Status string `json:"status" grom:"type:varchar(1);comment:状态"`
model.BaseModel
}

View File

@@ -0,0 +1,56 @@
package router
import (
"github.com/gin-gonic/gin"
"pandax/apps/resource/api"
"pandax/apps/resource/services"
"pandax/base/ctx"
)
/**
* @Description 添加qq群467890197 交流学习
* @Author 熊猫
* @Date 2022/1/14 15:24
**/
func InitResEmailsRouter(router *gin.RouterGroup) {
s := &api.ResEmailsApi{
ResEmailsApp: services.ResEmailsModelDao,
}
routerGroup := router.Group("email")
ResEmailsListLog := ctx.NewLogInfo("获取ResEmails分页列表")
routerGroup.GET("list", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(ResEmailsListLog).Handle(s.GetResEmailsList)
})
ResEmailsLog := ctx.NewLogInfo("获取ResEmails信息")
routerGroup.GET(":mailId", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(ResEmailsLog).Handle(s.GetResEmails)
})
insertResEmailsLog := ctx.NewLogInfo("添加ResEmails信息")
routerGroup.POST("", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(insertResEmailsLog).Handle(s.InsertResEmails)
})
updateResEmailsLog := ctx.NewLogInfo("修改ResEmails信息")
routerGroup.PUT("", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(updateResEmailsLog).Handle(s.UpdateResEmails)
})
deleteResEmailsLog := ctx.NewLogInfo("删除ResEmails信息")
routerGroup.DELETE(":mailId", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(deleteResEmailsLog).Handle(s.DeleteResEmails)
})
updateStatusEmailLog := ctx.NewLogInfo("修改状态")
routerGroup.PUT("changeStatus", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(updateStatusEmailLog).Handle(s.UpdateMailStatus)
})
debugMailEmailLog := ctx.NewLogInfo("修改状态")
routerGroup.POST("debugMail", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(debugMailEmailLog).Handle(s.DebugMail)
})
}

View File

@@ -43,4 +43,14 @@ func InitResOssRouter(router *gin.RouterGroup) {
routerGroup.DELETE(":ossId", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(deleteResOssesLog).Handle(s.DeleteResOsses)
})
uplaodResOssesLog := ctx.NewLogInfo("测试文件上传")
routerGroup.POST("uploadFile", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(uplaodResOssesLog).Handle(s.UplaodResOsses)
})
updateStatusOssLog := ctx.NewLogInfo("修改状态")
routerGroup.PUT("/changeStatus", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(updateStatusOssLog).Handle(s.UpdateOssStatus)
})
}

View File

@@ -0,0 +1,94 @@
package services
import (
"pandax/apps/resource/entity"
"pandax/base/biz"
"pandax/base/global"
)
/**
* @Description 添加qq群467890197 交流学习
* @Author 熊猫
* @Date 2022/1/14 15:21
**/
type (
ResEmailsModel interface {
Insert(data entity.ResEmail) *entity.ResEmail
FindOne(mailId int64) *entity.ResEmail
FindListPage(page, pageSize int, data entity.ResEmail) (*[]entity.ResEmail, int64)
FindList(data entity.ResEmail) *[]entity.ResEmail
Update(data entity.ResEmail) *entity.ResEmail
Delete(mailIds []int64)
}
emailModelImpl struct {
table string
}
)
var ResEmailsModelDao ResEmailsModel = &emailModelImpl{
table: `res_emails`,
}
func (m *emailModelImpl) Insert(data entity.ResEmail) *entity.ResEmail {
err := global.Db.Table(m.table).Create(&data).Error
biz.ErrIsNil(err, "添加ResEmails失败")
return &data
}
func (m *emailModelImpl) FindOne(mailId int64) *entity.ResEmail {
resData := new(entity.ResEmail)
err := global.Db.Table(m.table).Where("mail_id = ?", mailId).First(resData).Error
biz.ErrIsNil(err, "查询ResEmails失败")
return resData
}
func (m *emailModelImpl) FindListPage(page, pageSize int, data entity.ResEmail) (*[]entity.ResEmail, int64) {
list := make([]entity.ResEmail, 0)
var total int64 = 0
offset := pageSize * (page - 1)
db := global.Db.Table(m.table)
// 此处填写 where参数判断
if data.MailId != 0 {
db = db.Where("mail_id = ?", data.MailId)
}
if data.Status != "" {
db = db.Where("status = ?", data.Status)
}
if data.Category != "" {
db = db.Where("category = ?", data.Category)
}
db.Where("delete_time IS NULL")
err := db.Count(&total).Error
err = db.Order("create_time").Limit(pageSize).Offset(offset).Find(&list).Error
biz.ErrIsNil(err, "查询ResEmails分页列表失败")
return &list, total
}
func (m *emailModelImpl) FindList(data entity.ResEmail) *[]entity.ResEmail {
list := make([]entity.ResEmail, 0)
db := global.Db.Table(m.table)
// 此处填写 where参数判断
if data.MailId != 0 {
db = db.Where("mail_id = ?", data.MailId)
}
if data.Status != "" {
db = db.Where("status = ?", data.Status)
}
if data.Category != "" {
db = db.Where("category = ?", data.Category)
}
db.Where("delete_time IS NULL")
biz.ErrIsNil(db.Order("create_time").Find(&list).Error, "查询ResEmails列表失败")
return &list
}
func (m *emailModelImpl) Update(data entity.ResEmail) *entity.ResEmail {
biz.ErrIsNil(global.Db.Table(m.table).Updates(&data).Error, "修改ResEmails失败")
return &data
}
func (m *emailModelImpl) Delete(mailIds []int64) {
biz.ErrIsNil(global.Db.Table(m.table).Delete(&entity.ResEmail{}, "mail_id in (?)", mailIds).Error, "删除ResEmails失败")
}

View File

@@ -60,7 +60,7 @@ func (m *resOssesModelImpl) FindListPage(page, pageSize int, data entity.ResOss)
db = db.Where("oss_id = ?", data.OssId)
}
if data.OssCode != "" {
db = db.Where("oss_code like ?", "%"+data.OssCode+"%")
db = db.Where("oss_code = ?", data.OssCode)
}
if data.Status != "" {
db = db.Where("status = ?", data.Status)
@@ -83,8 +83,10 @@ func (m *resOssesModelImpl) FindList(data entity.ResOss) *[]entity.ResOss {
if data.OssId != 0 {
db = db.Where("oss_id = ?", data.OssId)
}
db.Where("delete_time IS NULL")
if data.OssCode != "" {
db = db.Where("oss_code = ?", data.OssCode)
}
db.Where("status = '0' AND delete_time IS NULL")
biz.ErrIsNil(db.Order("create_time").Find(&list).Error, "查询ResOsses列表失败")
return &list
}