Files
zmkgC/internal/app/system/controller/document.go

195 lines
6.3 KiB
Go
Raw Normal View History

2025-07-07 20:11:59 +08:00
// ==========================================================================
// 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
}