kbController.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package controller
  2. import (
  3. cm "app.yhyue.com/moapp/jybase/common"
  4. . "biBackService/config"
  5. "biBackService/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. "status": 0,
  86. "error": err.Error(),
  87. })
  88. return
  89. }
  90. //创建人在kb时候有账号
  91. name := cm.ObjToString(param["name"])
  92. kbUserId, err := service.CheckCreateUserAccount(name)
  93. if err != nil {
  94. r.JSON(http.StatusOK, gin.H{
  95. "status": 0,
  96. "error": err.Error(),
  97. })
  98. return
  99. }
  100. //插入工单
  101. task := &service.WordTask{
  102. Title: cm.ObjToString(param["title"]),
  103. Description: cm.ObjToString(param["description"]),
  104. Color_id: "green",
  105. Project_id: 784,
  106. Column_id: 3283,
  107. Position: 1,
  108. Score: 0,
  109. Creator_id: kbUserId,
  110. Swimlane_id: 1338,
  111. }
  112. err = task.WordTaskSave()
  113. if err != nil {
  114. r.JSON(http.StatusOK, gin.H{
  115. "status": 0,
  116. "error": err.Error(),
  117. })
  118. return
  119. }
  120. //创建成功发送企微消息
  121. err = service.SendWechatWorkMessage()
  122. if err != nil {
  123. r.JSON(http.StatusOK, gin.H{
  124. "status": 0,
  125. "error": err.Error(),
  126. })
  127. return
  128. }
  129. r.JSON(http.StatusOK, gin.H{
  130. "status": 1,
  131. "error": "",
  132. "success": 1,
  133. })
  134. }
  135. func GetTitle(r *gin.Context) {
  136. str, _ := ioutil.ReadAll(r.Request.Body)
  137. var param map[string]interface{}
  138. err := json.Unmarshal([]byte(string(str)), &param)
  139. if err != nil {
  140. r.JSON(http.StatusOK, gin.H{
  141. "status": 0,
  142. "error": err.Error(),
  143. })
  144. return
  145. }
  146. content := cm.ObjToString(param["content"])
  147. toTitle, err := service.GetTitleByContent(content)
  148. if err != nil {
  149. r.JSON(http.StatusOK, gin.H{
  150. "status": 0,
  151. "error": err.Error(),
  152. })
  153. return
  154. }
  155. r.JSON(http.StatusOK, gin.H{
  156. "status": 1,
  157. "error": "",
  158. "title": toTitle,
  159. })
  160. return
  161. }