123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- package system
- import (
- "context"
- "github.com/gin-gonic/gin"
- "go.uber.org/zap"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials/insecure"
- "io/ioutil"
- "net/http"
- "os"
- "path"
- "path/filepath"
- "server/global"
- "server/model/common/request"
- "server/model/common/response"
- "server/model/system"
- systemReq "server/model/system/request"
- proto "server/proto"
- "server/utils"
- "strconv"
- "strings"
- "time"
- )
- type FileApi struct{}
- func (b *FileApi) GetFileList(c *gin.Context) {
- var search systemReq.SearchAppFileParams
- err := c.ShouldBindJSON(&search)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = utils.Verify(search.PageInfo, utils.PageInfoVerify)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- list, total, err := fileService.GetFileInfoList(search)
- if err != nil {
- global.GVA_LOG.Error("获取失败!", zap.Error(err))
- response.FailWithMessage("获取失败", c)
- return
- }
- response.OkWithDetailed(response.PageResult{
- List: list,
- Total: total,
- Page: search.PageInfo.Page,
- PageSize: search.PageInfo.PageSize,
- }, "获取成功", c)
- }
- func (b *FileApi) Upload(c *gin.Context) {
- id := utils.GetUserID(c)
- // 获取表单字段的值
- categoryName := c.PostForm("categoryName")
- str := c.PostForm("authId")
- iv := c.PostForm("iv")
- authId := strings.Replace(str, ",", "", -1)
- // 获取上传的文件
- file, err := c.FormFile("file")
- if err != nil {
- global.GVA_LOG.Error("获取文件数据失败", zap.Error(err))
- response.FailWithMessage("获取文件数据失败", c)
- return
- }
- //获取后缀
- sufx := path.Ext(file.Filename)
- //利用时间戳生成文件名
- fileNameInt := time.Now().Unix()
- fileNameStr := strconv.FormatInt(fileNameInt, 10)
- //新的文件名
- newfileName := fileNameStr + sufx
- currentDir, _ := os.Getwd()
- parentDir := filepath.Dir(currentDir)
- folderPath := filepath.Join(parentDir, "uploadfiles")
- _, err = os.Stat(folderPath)
- if os.IsNotExist(err) {
- os.Mkdir(folderPath, os.ModePerm)
- }
- //保存文件
- filePath := filepath.Join(folderPath, "/", newfileName)
- c.SaveUploadedFile(file, filePath)
- savePath := "/uploadfiles/" + newfileName
- currentTimeValue := time.Now()
- err = fileService.Upload(system.File{
- OriginalName: strings.TrimSuffix(file.Filename, filepath.Ext(file.Filename)),
- EncryptedName: file.Filename,
- SavePath: savePath,
- CategoryName: categoryName,
- AuthId: authId,
- SuffixName: path.Ext(file.Filename),
- UploadTime: ¤tTimeValue,
- Uploader: int(id),
- Icon: strings.TrimPrefix(path.Ext(file.Filename), ".") + ".png",
- Iv: iv,
- })
- if err != nil {
- global.GVA_LOG.Error("上传失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithMessage("上传成功", c)
- }
- func (b *FileApi) SetFileInfo(c *gin.Context) {
- var file systemReq.ChangeFileInfo
- err := c.ShouldBindJSON(&file)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = utils.Verify(file, utils.IdVerify)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- // 将整数数组转换为字符串切片
- var result string
- for _, v := range file.AuthId {
- result += strconv.Itoa(v)
- }
- err = fileService.SetFileInfo(system.File{
- ID: file.ID,
- CategoryName: file.CategoryName,
- AuthId: result,
- })
- if err != nil {
- global.GVA_LOG.Error("设置失败!", zap.Error(err))
- response.FailWithMessage("设置失败", c)
- return
- }
- response.OkWithMessage("设置成功", c)
- }
- func (b *FileApi) DeleteBaseFile(c *gin.Context) {
- var reqId request.GetById
- err := c.ShouldBindJSON(&reqId)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = utils.Verify(reqId, utils.IdVerify)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = fileService.DeleteFile(reqId.ID)
- if err != nil {
- global.GVA_LOG.Error("删除失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithMessage("删除成功", c)
- }
- func (b *FileApi) Distribute(c *gin.Context) {
- id := utils.GetUserID(c)
- var file systemReq.Distribute
- err := c.ShouldBindJSON(&file)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = utils.Verify(file, utils.IdVerify)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- users, err := deptService.GetDeptsUsers(file.Depts)
- if err != nil {
- global.GVA_LOG.Error("操作失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- return
- }
- var userFile []systemReq.UserFile
- var usersId []int64
- for _, user := range users {
- userFile = append(userFile, systemReq.UserFile{
- Operator: int(id),
- Receiver: int(user.ID),
- FileId: file.ID,
- EffectiveDate: file.EfectiveDate,
- OperationStatus: "下发",
- IsDeleted: 0,
- })
- usersId = append(usersId, int64(user.ID))
- }
- err = fileService.Distribute(userFile)
- if err != nil {
- global.GVA_LOG.Error("下发失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- return
- }
- //下发消息
- conn, err := grpc.Dial("127.0.0.1:9090", grpc.WithTransportCredentials(insecure.NewCredentials()))
- if err != nil {
- global.GVA_LOG.Error("grpc远程连接错误!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- }
- defer conn.Close()
- //建立连接
- client := proto.NewSendMessageClient(conn)
- resp, err := client.Distribution(context.Background(), &proto.DistributionRequest{Users: usersId})
- if resp.GetCode() != 200 && err != nil {
- global.GVA_LOG.Error("消息通知失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- }
- response.OkWithMessage("下发成功", c)
- }
- func (b *FileApi) View(c *gin.Context) {
- var reqId request.GetById
- err := c.ShouldBindJSON(&reqId)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- file, err := fileService.View(reqId.ID)
- if err != nil {
- global.GVA_LOG.Error("查找失败!", zap.Error(err))
- response.FailWithMessage(err.Error(), c)
- return
- }
- currentDir, _ := os.Getwd()
- parentDir := filepath.Dir(currentDir)
- data, _ := ioutil.ReadFile(parentDir + file.SavePath)
- c.Data(http.StatusOK, "application/octet-stream", data)
- response.OkWithMessage("查看成功", c)
- }
|