195 lines
6.3 KiB
Go
195 lines
6.3 KiB
Go
|
// ==========================================================================
|
|||
|
// GFast自动生成controller操作代码。
|
|||
|
// 生成日期:2023-09-16 10:32:04
|
|||
|
// 生成路径: internal/app/system/controller/document.go
|
|||
|
// 生成人:gfast
|
|||
|
// desc:母板
|
|||
|
// company:云南奇讯科技有限公司
|
|||
|
// ==========================================================================
|
|||
|
|
|||
|
package controller
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"encoding/json"
|
|||
|
"errors"
|
|||
|
"github.com/gogf/gf/v2/frame/g"
|
|||
|
"github.com/gogf/gf/v2/net/ghttp"
|
|||
|
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
|
|||
|
"github.com/tiger1103/gfast/v3/api/v1/system"
|
|||
|
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
|||
|
"github.com/tiger1103/gfast/v3/library/liberr"
|
|||
|
"github.com/tiger1103/gfast/v3/third/officeWeb365"
|
|||
|
"io"
|
|||
|
"net/http"
|
|||
|
"os"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
type documentController struct {
|
|||
|
BaseController
|
|||
|
}
|
|||
|
|
|||
|
type Action struct {
|
|||
|
Type int `json:"type"`
|
|||
|
UserID string `json:"userid"`
|
|||
|
}
|
|||
|
|
|||
|
type MyStruct struct {
|
|||
|
Actions []Action `json:"actions"`
|
|||
|
ForceSaveType string `json:"forcesavetype"`
|
|||
|
Key string `json:"key"`
|
|||
|
Status int `json:"status"`
|
|||
|
URL string `json:"url"`
|
|||
|
Userdata string `json:"userdata"`
|
|||
|
Users []string `json:"users"`
|
|||
|
}
|
|||
|
|
|||
|
var Document = new(documentController)
|
|||
|
|
|||
|
func (c *documentController) SendFile(ctx context.Context, req *system.SendFileReq) (res *system.SendFileRes, err error) {
|
|||
|
res = new(system.SendFileRes)
|
|||
|
|
|||
|
err, path := officeWeb365.SendFile199(ctx, req.FilePath, req.FileType)
|
|||
|
res.FilePath = path
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// List 列表
|
|||
|
func (c *documentController) List(ctx context.Context, req *system.DocumentSearchReq) (res *system.DocumentSearchRes, err error) {
|
|||
|
res, err = service.Document().List(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// AllList 列表
|
|||
|
func (c *documentController) AllList(ctx context.Context, req *system.AllDocumentSearchReq) (res *system.AllDocumentSearchRes, err error) {
|
|||
|
res, err = service.Document().AllList(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Get 获取母板(根据id)
|
|||
|
func (c *documentController) Get(ctx context.Context, req *system.DocumentGetReq) (res *system.DocumentGetRes, err error) {
|
|||
|
res = new(system.DocumentGetRes)
|
|||
|
res.DocumentInfoRes, err = service.Document().GetById(ctx, req.Id)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Add 本地导入(文件/压缩文件夹)
|
|||
|
func (c *documentController) Add(ctx context.Context, req *system.DocumentAddReq) (res *system.DocumentAddRes, err error) {
|
|||
|
err = service.Document().Add(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// NewFolderFunc 新建文件夹
|
|||
|
func (c *documentController) NewFolderFunc(ctx context.Context, req *system.NewFolderReq) (res *system.NewFolderRes, err error) {
|
|||
|
err = service.Document().NewFolderFunc(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Edit 修改母板
|
|||
|
func (c *documentController) Edit(ctx context.Context, req *system.DocumentEditReq) (res *system.DocumentEditRes, err error) {
|
|||
|
err = service.Document().Edit(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Delete 删除母板
|
|||
|
func (c *documentController) Delete(ctx context.Context, req *system.DocumentDeleteReq) (res *system.DocumentDeleteRes, err error) {
|
|||
|
err = service.Document().Delete(ctx, req.Ids)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// TreeStructureFunc 树形结构
|
|||
|
func (c *documentController) TreeStructureFunc(ctx context.Context, req *system.TreeStructureReq) (res *system.TreeStructureRes, err error) {
|
|||
|
res, err = service.Document().TreeStructureFunc(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// CompressedDownload 根据文件目录进行下载压缩包
|
|||
|
func (c *documentController) CompressedDownload(ctx context.Context, req *system.CompressedDownloadReq) (res *system.CompressedDownloadRes, err error) {
|
|||
|
res = new(system.CompressedDownloadRes)
|
|||
|
download, err := ZIPDownload(ctx, req.RelativePath)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
} else {
|
|||
|
res = download
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// ZIPDownload 生成压缩包
|
|||
|
func ZIPDownload(ctx context.Context, relativePath string) (res *system.CompressedDownloadRes, err error) {
|
|||
|
res = new(system.CompressedDownloadRes)
|
|||
|
sourceDir := strings.ReplaceAll(relativePath, "/file", coryCommon.GetCWD()+"/resource/public") // 指定要压缩的文件夹路径
|
|||
|
zipFile := coryCommon.GetCWD() + coryCommon.Temporary + "/" + coryCommon.FileName("") + ".zip"
|
|||
|
err = coryCommon.CreateZipFile(sourceDir, zipFile)
|
|||
|
if err != nil {
|
|||
|
err = errors.New("下载失败!")
|
|||
|
return
|
|||
|
} else {
|
|||
|
res.RelativePath = strings.Replace(zipFile, coryCommon.GetCWD()+"/resource/public", "/file", 1)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// UniFileDownload 单文件下载
|
|||
|
func (c *documentController) UniFileDownload(ctx context.Context, req *system.UniFileDownloadReq) (res *system.UniFileDownloadRes, err error) {
|
|||
|
res = new(system.UniFileDownloadRes)
|
|||
|
rpath := coryCommon.FileToFunc(req.RelativePath, 2)
|
|||
|
g.RequestFromCtx(ctx).Response.ServeFileDownload(rpath)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// TemplateRecycleBinFunc 模板回收站
|
|||
|
func (c *documentDataController) TemplateRecycleBinFunc(ctx context.Context, req *system.TemplateRecycleBinReq) (res *system.TemplateRecycleBinRes, err error) {
|
|||
|
err = service.Document().TemplateRecycleBinFunc(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
func (c *busConstructionUserController) ExposeSingleFileUploads(ctx context.Context, req *system.WriteFreelyReq) (res *system.WriteFreelyRes, err error) {
|
|||
|
res = new(system.WriteFreelyRes)
|
|||
|
res, err = SingleFileUploads(ctx, req.Path)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SingleFileUploads 畅写回调地址
|
|||
|
func SingleFileUploads(ctx context.Context, path string) (res *system.WriteFreelyRes, err error) {
|
|||
|
err = g.Try(ctx, func(ctx context.Context) {
|
|||
|
var my MyStruct
|
|||
|
r := ghttp.RequestFromCtx(ctx)
|
|||
|
writer := r.Response.Writer
|
|||
|
//正文
|
|||
|
body := r.GetBody()
|
|||
|
err = json.Unmarshal(body, &my)
|
|||
|
res = new(system.WriteFreelyRes)
|
|||
|
status := my.Status
|
|||
|
if status == 0 {
|
|||
|
err = errors.New("Invalid status format")
|
|||
|
} else if status == 2 || status == 6 {
|
|||
|
downloadURL := my.URL
|
|||
|
if downloadURL == "" {
|
|||
|
err = errors.New("Invalid URL format")
|
|||
|
}
|
|||
|
resp, err := http.Get(downloadURL)
|
|||
|
if err != nil {
|
|||
|
err = errors.New("Error downloading file")
|
|||
|
}
|
|||
|
defer resp.Body.Close()
|
|||
|
|
|||
|
fileContent, err := io.ReadAll(resp.Body)
|
|||
|
if err != nil {
|
|||
|
err = errors.New("Error reading file content")
|
|||
|
}
|
|||
|
pathForSave := coryCommon.FileToFunc(path, 2)
|
|||
|
err = os.WriteFile(pathForSave, fileContent, 0644)
|
|||
|
if err != nil {
|
|||
|
err = errors.New("Error saving file")
|
|||
|
}
|
|||
|
} else if status == 3 || status == 7 {
|
|||
|
writer.Write([]byte("{\"error\":-1}"))
|
|||
|
return
|
|||
|
}
|
|||
|
writer.Write([]byte("{\"error\":0}"))
|
|||
|
liberr.ErrIsNil(ctx, err)
|
|||
|
})
|
|||
|
return
|
|||
|
}
|