kbController.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package controller
  2. import (
  3. cm "app.yhyue.com/moapp/jybase/common"
  4. . "bindresume/config"
  5. "bindresume/service"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "io/ioutil"
  10. "log"
  11. "math/rand"
  12. "mime/multipart"
  13. "net/http"
  14. "path/filepath"
  15. "strings"
  16. "time"
  17. )
  18. func UploadFile(r *gin.Context) {
  19. // 设置内存限制(100 MB)
  20. if err := r.Request.ParseMultipartForm(100 << 20); err != nil {
  21. r.JSON(http.StatusBadRequest, gin.H{
  22. "error": "文件大小超过限制(最大100MB)",
  23. })
  24. return
  25. }
  26. // 获取所有文件(兼容多字段)
  27. form, err := r.MultipartForm()
  28. if err != nil {
  29. r.JSON(http.StatusBadRequest, gin.H{
  30. "error": "无法解析表单",
  31. })
  32. return
  33. }
  34. // 收集所有上传的文件
  35. var allFiles []*multipart.FileHeader
  36. for fieldName := range form.File {
  37. allFiles = append(allFiles, form.File[fieldName]...)
  38. }
  39. // 处理上传结果
  40. successFiles := make([]string, 0)
  41. failedFiles := make(map[string]string)
  42. for _, fileHeader := range allFiles {
  43. // 生成唯一文件名(时间戳+随机数)
  44. uniqueName := fmt.Sprintf("%s_%d%s",
  45. time.Now().Format("20060102150405001")+cm.GetComplexRandom(8, 0, 0),
  46. rand.Intn(1000),
  47. filepath.Ext(fileHeader.Filename),
  48. )
  49. // 检查文件类型(示例:仅允许图片)
  50. allowedTypes := map[string]bool{
  51. ".jpg": true,
  52. ".jpeg": true,
  53. ".png": true,
  54. ".gif": true,
  55. }
  56. ext := filepath.Ext(uniqueName)
  57. if !allowedTypes[ext] {
  58. failedFiles[fileHeader.Filename] = "文件类型不允许"
  59. continue
  60. }
  61. // 保存文件
  62. //dst := filepath.Join(config.SysConfig.FilePath, uniqueName)
  63. filePath := service.GetFilePath(uniqueName, "bifile")
  64. log.Println("获取路径", filePath)
  65. if err := r.SaveUploadedFile(fileHeader, filePath); err != nil {
  66. failedFiles[fileHeader.Filename] = fmt.Sprintf("保存失败: %v", err)
  67. continue
  68. }
  69. successFiles = append(successFiles, fmt.Sprintf("/shareFile/%s", strings.Replace(filePath, cm.ObjToString(SysConfig.FilePath), "", 1)))
  70. }
  71. // 返回响应
  72. r.JSON(http.StatusOK, gin.H{
  73. "success_count": len(successFiles),
  74. "success_files": successFiles,
  75. "failed_count": len(failedFiles),
  76. "failed_files": failedFiles,
  77. })
  78. }
  79. func WorkTaskSave(r *gin.Context) {
  80. str, _ := ioutil.ReadAll(r.Request.Body)
  81. var param map[string]interface{}
  82. err := json.Unmarshal([]byte(string(str)), &param)
  83. if err != nil {
  84. r.JSON(http.StatusOK, gin.H{
  85. "error": err.Error(),
  86. })
  87. return
  88. }
  89. //创建人在kb时候有账号
  90. name := cm.ObjToString(param["name"])
  91. kbUserId, err := service.CheckCreateUserAccount(name)
  92. if err != nil {
  93. r.JSON(http.StatusOK, gin.H{
  94. "error": err.Error(),
  95. })
  96. return
  97. }
  98. //插入工单
  99. task := &service.WordTask{
  100. Title: cm.ObjToString(param["title"]),
  101. Description: cm.ObjToString(param["description"]),
  102. Color_id: "green",
  103. Project_id: 784,
  104. Column_id: 3283,
  105. Position: 1,
  106. Score: 0,
  107. Creator_id: kbUserId,
  108. Swimlane_id: 1338,
  109. }
  110. err = task.WordTaskSave()
  111. if err != nil {
  112. r.JSON(http.StatusOK, gin.H{
  113. "error": err.Error(),
  114. })
  115. return
  116. }
  117. //创建成功发送企微消息
  118. err = service.SendWechatWorkMessage()
  119. if err != nil {
  120. r.JSON(http.StatusOK, gin.H{
  121. "error": err.Error(),
  122. })
  123. return
  124. }
  125. r.JSON(http.StatusOK, gin.H{
  126. "success": 1,
  127. })
  128. }