123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package controller
- import (
- cm "app.yhyue.com/moapp/jybase/common"
- . "biBackService/config"
- "biBackService/public"
- "biBackService/service"
- "encoding/json"
- "fmt"
- "github.com/gin-gonic/gin"
- "io/ioutil"
- "log"
- "math/rand"
- "mime/multipart"
- "net/http"
- "path/filepath"
- "strings"
- "time"
- )
- func UploadFile(r *gin.Context) {
- // 设置内存限制(100 MB)
- if err := r.Request.ParseMultipartForm(100 << 20); err != nil {
- r.JSON(http.StatusBadRequest, gin.H{
- "error": "文件大小超过限制(最大100MB)",
- })
- return
- }
- // 获取所有文件(兼容多字段)
- form, err := r.MultipartForm()
- if err != nil {
- r.JSON(http.StatusBadRequest, gin.H{
- "error": "无法解析表单",
- })
- return
- }
- // 收集所有上传的文件
- var allFiles []*multipart.FileHeader
- for fieldName := range form.File {
- allFiles = append(allFiles, form.File[fieldName]...)
- }
- // 处理上传结果
- successFiles := make([]string, 0)
- failedFiles := make(map[string]string)
- for _, fileHeader := range allFiles {
- // 生成唯一文件名(时间戳+随机数)
- uniqueName := fmt.Sprintf("%s_%d%s",
- time.Now().Format("20060102150405001")+cm.GetComplexRandom(8, 0, 0),
- rand.Intn(1000),
- filepath.Ext(fileHeader.Filename),
- )
- // 检查文件类型(示例:仅允许图片)
- allowedTypes := map[string]bool{
- ".jpg": true,
- ".jpeg": true,
- ".png": true,
- ".gif": true,
- }
- ext := filepath.Ext(uniqueName)
- if !allowedTypes[ext] {
- failedFiles[fileHeader.Filename] = "文件类型不允许"
- continue
- }
- // 保存文件
- //dst := filepath.Join(config.SysConfig.FilePath, uniqueName)
- filePath := service.GetFilePath(uniqueName, "bifile")
- log.Println("获取路径", filePath)
- if err := r.SaveUploadedFile(fileHeader, filePath); err != nil {
- failedFiles[fileHeader.Filename] = fmt.Sprintf("保存失败: %v", err)
- continue
- }
- successFiles = append(successFiles, fmt.Sprintf("/shareFile/%s", strings.Replace(filePath, cm.ObjToString(SysConfig.FilePath), "", 1)))
- }
- // 返回响应
- r.JSON(http.StatusOK, gin.H{
- "success_count": len(successFiles),
- "success_files": successFiles,
- "failed_count": len(failedFiles),
- "failed_files": failedFiles,
- })
- }
- func WorkTaskSave(r *gin.Context) {
- str, _ := ioutil.ReadAll(r.Request.Body)
- var param map[string]interface{}
- err := json.Unmarshal([]byte(string(str)), ¶m)
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- //创建人在kb时候有账号
- name := cm.ObjToString(param["name"])
- kbUserId, err := service.CheckCreateUserAccount(name)
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- //插入工单
- task := &service.WordTask{
- Title: cm.ObjToString(param["title"]),
- Description: cm.ObjToString(param["description"]),
- Color_id: "green",
- Project_id: SysConfig.Project.ProjectId,
- Column_id: SysConfig.Project.TodoColumnId,
- Position: 1,
- Score: 0,
- Creator_id: kbUserId,
- Swimlane_id: SysConfig.Project.SwimlaneId,
- }
- err = task.WordTaskSave()
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- //创建成功发送企微消息
- err = service.SendWechatWorkMessage()
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- r.JSON(http.StatusOK, gin.H{
- "status": 1,
- "error": "",
- "success": 1,
- })
- }
- func GetTitle(r *gin.Context) {
- str, _ := ioutil.ReadAll(r.Request.Body)
- var param map[string]interface{}
- err := json.Unmarshal([]byte(string(str)), ¶m)
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- content := cm.ObjToString(param["content"])
- toTitle, err := service.GetTitleByContent(content)
- if err != nil {
- r.JSON(http.StatusOK, gin.H{
- "status": 0,
- "error": err.Error(),
- })
- return
- }
- r.JSON(http.StatusOK, gin.H{
- "status": 1,
- "error": "",
- "title": toTitle,
- })
- return
- }
- func WorkWeChatPrivateMsg(r *gin.Context) {
- public.SendMsg("RenJiaoJiao", "您新建得工单已解决")
- }
|