app_file.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package system
  2. import (
  3. "context"
  4. "github.com/gin-gonic/gin"
  5. "go.uber.org/zap"
  6. "google.golang.org/grpc"
  7. "google.golang.org/grpc/credentials/insecure"
  8. "os"
  9. "path"
  10. "path/filepath"
  11. "server/global"
  12. "server/model/common/request"
  13. "server/model/common/response"
  14. "server/model/system"
  15. systemReq "server/model/system/request"
  16. proto "server/proto"
  17. "server/utils"
  18. "strconv"
  19. "strings"
  20. "time"
  21. )
  22. type FileApi struct{}
  23. func (b *FileApi) GetFileList(c *gin.Context) {
  24. var search systemReq.SearchAppFileParams
  25. err := c.ShouldBindJSON(&search)
  26. if err != nil {
  27. response.FailWithMessage(err.Error(), c)
  28. return
  29. }
  30. err = utils.Verify(search.PageInfo, utils.PageInfoVerify)
  31. if err != nil {
  32. response.FailWithMessage(err.Error(), c)
  33. return
  34. }
  35. list, total, err := fileService.GetFileInfoList(search)
  36. if err != nil {
  37. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  38. response.FailWithMessage("获取失败", c)
  39. return
  40. }
  41. response.OkWithDetailed(response.PageResult{
  42. List: list,
  43. Total: total,
  44. Page: search.PageInfo.Page,
  45. PageSize: search.PageInfo.PageSize,
  46. }, "获取成功", c)
  47. }
  48. func (b *FileApi) Upload(c *gin.Context) {
  49. id := utils.GetUserID(c)
  50. // 获取表单字段的值
  51. categoryName := c.PostForm("categoryName")
  52. str := c.PostForm("authId")
  53. authId := strings.Replace(str, ",", "", -1)
  54. // 获取上传的文件
  55. file, err := c.FormFile("file")
  56. if err != nil {
  57. global.GVA_LOG.Error("获取文件数据失败", zap.Error(err))
  58. response.FailWithMessage("获取文件数据失败", c)
  59. return
  60. }
  61. //获取后缀
  62. sufx := path.Ext(file.Filename)
  63. //利用时间戳生成文件名
  64. fileNameInt := time.Now().Unix()
  65. fileNameStr := strconv.FormatInt(fileNameInt, 10)
  66. //新的文件名
  67. newfileName := fileNameStr + sufx
  68. _, err = os.Stat("uploadfiles")
  69. if os.IsNotExist(err) {
  70. os.Mkdir("./uploadfiles", os.ModePerm)
  71. }
  72. //保存文件
  73. filePath := filepath.Join("uploadfiles", "/", newfileName)
  74. c.SaveUploadedFile(file, filePath)
  75. savePath := "uploadfiles/" + newfileName
  76. currentTimeValue := time.Now()
  77. err = fileService.Upload(system.File{
  78. OriginalName: strings.TrimSuffix(file.Filename, filepath.Ext(file.Filename)),
  79. EncryptedName: file.Filename,
  80. SavePath: savePath,
  81. CategoryName: categoryName,
  82. AuthId: authId,
  83. SuffixName: path.Ext(file.Filename),
  84. UploadTime: &currentTimeValue,
  85. Uploader: int(id),
  86. Icon: strings.TrimPrefix(path.Ext(file.Filename), ".") + ".png",
  87. })
  88. if err != nil {
  89. global.GVA_LOG.Error("上传失败!", zap.Error(err))
  90. response.FailWithMessage(err.Error(), c)
  91. return
  92. }
  93. response.OkWithMessage("上传成功", c)
  94. }
  95. func (b *FileApi) SetFileInfo(c *gin.Context) {
  96. var file systemReq.ChangeFileInfo
  97. err := c.ShouldBindJSON(&file)
  98. if err != nil {
  99. response.FailWithMessage(err.Error(), c)
  100. return
  101. }
  102. err = utils.Verify(file, utils.IdVerify)
  103. if err != nil {
  104. response.FailWithMessage(err.Error(), c)
  105. return
  106. }
  107. // 将整数数组转换为字符串切片
  108. var result string
  109. for _, v := range file.AuthId {
  110. result += strconv.Itoa(v)
  111. }
  112. err = fileService.SetFileInfo(system.File{
  113. ID: file.ID,
  114. CategoryName: file.CategoryName,
  115. AuthId: result,
  116. })
  117. if err != nil {
  118. global.GVA_LOG.Error("设置失败!", zap.Error(err))
  119. response.FailWithMessage("设置失败", c)
  120. return
  121. }
  122. response.OkWithMessage("设置成功", c)
  123. }
  124. func (b *FileApi) DeleteBaseFile(c *gin.Context) {
  125. var reqId request.GetById
  126. err := c.ShouldBindJSON(&reqId)
  127. if err != nil {
  128. response.FailWithMessage(err.Error(), c)
  129. return
  130. }
  131. err = utils.Verify(reqId, utils.IdVerify)
  132. if err != nil {
  133. response.FailWithMessage(err.Error(), c)
  134. return
  135. }
  136. err = fileService.DeleteFile(reqId.ID)
  137. if err != nil {
  138. global.GVA_LOG.Error("删除失败!", zap.Error(err))
  139. response.FailWithMessage(err.Error(), c)
  140. return
  141. }
  142. response.OkWithMessage("删除成功", c)
  143. }
  144. func (b *FileApi) Distribute(c *gin.Context) {
  145. id := utils.GetUserID(c)
  146. var file systemReq.Distribute
  147. err := c.ShouldBindJSON(&file)
  148. if err != nil {
  149. response.FailWithMessage(err.Error(), c)
  150. return
  151. }
  152. err = utils.Verify(file, utils.IdVerify)
  153. if err != nil {
  154. response.FailWithMessage(err.Error(), c)
  155. return
  156. }
  157. users, err := deptService.GetDeptsUsers(file.Depts)
  158. if err != nil {
  159. global.GVA_LOG.Error("操作失败!", zap.Error(err))
  160. response.FailWithMessage(err.Error(), c)
  161. return
  162. }
  163. var userFile []systemReq.UserFile
  164. var usersId []int64
  165. for _, user := range users {
  166. userFile = append(userFile, systemReq.UserFile{
  167. Operator: int(id),
  168. Receiver: int(user.ID),
  169. FileId: file.ID,
  170. EffectiveDate: file.EfectiveDate,
  171. OperationStatus: "下发",
  172. IsDeleted: 0,
  173. })
  174. usersId = append(usersId, int64(user.ID))
  175. }
  176. err = fileService.Distribute(userFile)
  177. if err != nil {
  178. global.GVA_LOG.Error("下发失败!", zap.Error(err))
  179. response.FailWithMessage(err.Error(), c)
  180. return
  181. }
  182. //下发消息
  183. conn, err := grpc.Dial("127.0.0.1:9090", grpc.WithTransportCredentials(insecure.NewCredentials()))
  184. if err != nil {
  185. global.GVA_LOG.Error("grpc远程连接错误!", zap.Error(err))
  186. response.FailWithMessage(err.Error(), c)
  187. }
  188. defer conn.Close()
  189. //建立连接
  190. client := proto.NewSendMessageClient(conn)
  191. resp, err := client.Distribution(context.Background(), &proto.DistributionRequest{Users: usersId})
  192. if resp.GetCode() != 200 && err != nil {
  193. global.GVA_LOG.Error("消息通知失败!", zap.Error(err))
  194. response.FailWithMessage(err.Error(), c)
  195. }
  196. response.OkWithMessage("下发成功", c)
  197. }