fileService.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package service
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "io/ioutil"
  5. "iot_manager_service/app/file/dao"
  6. "iot_manager_service/app/file/model"
  7. userdao "iot_manager_service/app/user/dao"
  8. "iot_manager_service/util/common"
  9. "iot_manager_service/util/websocket"
  10. "net/http"
  11. "path"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 用户管理服务
  17. var FileService = new(fileService)
  18. type fileService struct{}
  19. func (f *fileService) Distribute(encryptedname, savepath string, requserfile *model.ReqSysUserFile, uid int) *common.Errors {
  20. file := &dao.File{
  21. OriginalName: requserfile.OriginalName,
  22. EncryptedName: encryptedname,
  23. SavePath: savepath,
  24. CategoryName: requserfile.CategoryName,
  25. AuthId: requserfile.AuthId,
  26. SuffixName: path.Ext(requserfile.OriginalName),
  27. UploadTime: time.Now(),
  28. Uploader: uid,
  29. Icon: strings.TrimPrefix(path.Ext(requserfile.OriginalName), ".") + ".png",
  30. }
  31. err := file.Create()
  32. if err != nil {
  33. return common.FailResponse("保存文件失败", nil)
  34. }
  35. //查询部门下对应的员工
  36. user := &userdao.SysUser{}
  37. users, err := user.GetDeptsSysUsers(requserfile.DeptsId)
  38. if err != nil {
  39. return common.FailResponse(err.Error(), nil)
  40. }
  41. var userfile []dao.SysUserFile
  42. for _, u := range users {
  43. userfile = append(userfile, dao.SysUserFile{
  44. Operator: uid,
  45. Receiver: u.ID,
  46. FileID: file.ID,
  47. EffectiveDate: requserfile.EffectiveDate,
  48. OperationStatus: "下发",
  49. })
  50. }
  51. userfiledao := &dao.SysUserFile{}
  52. err = userfiledao.BatchUFRecords(userfile)
  53. if err != nil {
  54. return common.FailResponse(err.Error(), nil)
  55. }
  56. //下发消息
  57. for _, u := range users {
  58. websocket.SendMessage(strconv.Itoa(u.ID), "您有新的文件,请注意查收!")
  59. }
  60. return common.SuccessResponse("新增记录成功", nil)
  61. }
  62. func (f *fileService) GetSysUserFiles(id string, search model.SearchSysUserFiles) *common.Errors {
  63. filedao := &dao.File{}
  64. uid, _ := strconv.Atoi(id)
  65. files, err := filedao.GetSysUserFiles(uid, search)
  66. if err != nil {
  67. return common.FailResponse(err.Error(), nil)
  68. }
  69. return common.SuccessResponse("查询成功", gin.H{"files": files})
  70. }
  71. func (f *fileService) GetFile(id string, c *gin.Context) {
  72. filedao := &dao.File{}
  73. file, err := filedao.GetFile(id)
  74. if err != nil {
  75. panic(err.Error())
  76. }
  77. encryptedData, err := ioutil.ReadFile(file.SavePath)
  78. if err != nil {
  79. panic(err.Error())
  80. }
  81. c.Header("Content-Disposition", "attachment;filename="+file.EncryptedName)
  82. c.Header("Content-Type", "application/octet-stream")
  83. c.Data(http.StatusOK, "application/octet-stream", encryptedData)
  84. }
  85. // 转发
  86. func (f *fileService) ForwardingFile(uid, fileid int, users []int) *common.Errors {
  87. var userfile []dao.SysUserFile
  88. var nilTime *time.Time
  89. for _, u := range users {
  90. userfile = append(userfile, dao.SysUserFile{
  91. Operator: uid,
  92. Receiver: u,
  93. FileID: fileid,
  94. EffectiveDate: nilTime,
  95. OperationStatus: "转发",
  96. })
  97. }
  98. userfiledao := &dao.SysUserFile{}
  99. err := userfiledao.BatchUFRecords(userfile)
  100. if err != nil {
  101. return common.FailResponse(err.Error(), nil)
  102. }
  103. return common.SuccessResponse("新增记录成功", nil)
  104. }