github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/api4/task.go (about)

     1  //  Copyright  (c)  2017-present  Xenia,  Inc.  All  Rights  Reserved.
     2  //  See  License.txt  for  license  information.
     3  
     4  package  api4
     5  
     6  import  (
     7  	"bytes"
     8  	"encoding/json"
     9  	"fmt"
    10  	"io/ioutil"
    11  	"net/http"
    12  	"strconv"
    13  	"time"
    14  	//  "github.com/xzl8028/xenia-server/mlog"
    15  	"github.com/xzl8028/xenia-server/model"
    16  )
    17  
    18  
    19  
    20  type payload2 struct{
    21  
    22  	Id string`json:"id"`
    23  	Is_pinned bool`json:"is_pinned"`
    24  	Message string `json:"message"`
    25  	File_ids []string`json:"file_ids"`
    26  	Has_reactions bool `json:"has_reactions"`
    27  	Props props `json:"props"`
    28  
    29  
    30  }
    31  
    32  
    33  type  payload  struct{
    34  	Channel_id    string  `json:"channel_id"`
    35  	Message  string  `json:"message"`
    36  	Root_id  string  `json:"root_id"`
    37  	//File_ids  []string`json:"file_ids"`
    38  	Props  props  `json:"props"`
    39  }
    40  
    41  type  props  struct  {
    42  	From_webhook  string  `json:"from_webhook"`
    43  	Override_icon_url  string  `json:"override_icon_url"`
    44  	Override_username  string  `json:"override_username"`
    45  	Webhook_display_name  string  `json:"webhook_display_name"`
    46  	Attachments  []attachment  `json:"attachments"`
    47  }
    48  
    49  
    50  type  attachment  struct  {
    51  	Color string `json:"color"`
    52  	Fields    []field  `json:"fields"`
    53  	Actions  []action  `json:"actions"`
    54  }
    55  
    56  
    57  type  field  struct{
    58  	Short  bool  `json:"short"`
    59  	Title  string  `json:"title"`
    60  	Value  string  `json:"value"`
    61  }
    62  
    63  type  action  struct{
    64  	Name  string  `json:"name"`
    65  	Integration    integration_url  `json:"integration"`
    66  }
    67  
    68  
    69  type  integration_url  struct{
    70  	Url    string  `json:"url"`
    71  }
    72  
    73  type  Host  struct  {
    74  	IP  string
    75  	Name  string
    76  }
    77  
    78  
    79  func  (api  *API)  InitTask()  {
    80  	//  api.BaseRoutes.Tasks.Handle("",  api.ApiSessionRequired(createTask)).Methods("POST")
    81  	//  api.BaseRoutes.Task.Handle("",  api.ApiSessionRequired(patchTask)).Methods("PUT")
    82  	api.BaseRoutes.Task.Handle("",  api.ApiSessionRequired(getTask)).Methods("GET")
    83  	api.BaseRoutes.Tasks.Handle("",  api.ApiSessionRequired(getTasks)).Methods("GET")
    84  	api.BaseRoutes.Tasks.Handle("/withteam",  api.ApiSessionRequired(getTasksWithTeam)).Methods("GET")
    85  	api.BaseRoutes.Task.Handle("/insert",  api.ApiSessionRequired(insertTask)).Methods("POST")
    86  	api.BaseRoutes.Task.Handle("/",  api.ApiSessionRequired(insertTask)).Methods("POST")
    87  	api.BaseRoutes.Task.Handle("/insertpost",  api.ApiSessionRequired(insertTaskWithPost)).Methods("POST")
    88  	api.BaseRoutes.Task.Handle("/update",  api.ApiSessionRequired(updateTask)).Methods("POST")
    89  	api.BaseRoutes.Task.Handle("/updatepost",  api.ApiSessionRequired(updateTaskStatusQuickWithPost)).Methods("POST")
    90  	api.BaseRoutes.Task.Handle("/update_status_quick",  api.ApiSessionRequired(updateTaskStatusQuick)).Methods("POST")
    91  
    92  	//  api.BaseRoutes.Task.Handle("/disable",  api.ApiSessionRequired(disableTask)).Methods("POST")
    93  	//  api.BaseRoutes.Task.Handle("/enable",  api.ApiSessionRequired(enableTask)).Methods("POST")
    94  	//  api.BaseRoutes.Task.Handle("/assign/{user_id:[A-Za-z0-9]+}",  api.ApiSessionRequired(assignTask)).Methods("POST")
    95  }
    96  
    97  //  func  createTask(c  *Context,  w  http.ResponseWriter,  r  *http.Request)  {
    98  //  taskPatch  :=  model.TaskPatchFromJson(r.Body)
    99  //  if  taskPatch  ==  nil  {
   100  //  c.SetInvalidParam("task")
   101  //  return
   102  //  }
   103  
   104  //  task  :=  &model.Task{
   105  //  OwnerId:  c.App.Session.UserId,
   106  //  }
   107  //  task.Patch(taskPatch)
   108  
   109  //  if  !c.App.SessionHasPermissionTo(c.App.Session,  model.PERMISSION_CREATE_TASK)  {
   110  //  c.SetPermissionError(model.PERMISSION_CREATE_TASK)
   111  //  return
   112  //  }
   113  
   114  //  if  user,  err  :=  c.App.GetUser(c.App.Session.UserId);  err  ==  nil  {
   115  //  if  user.IsTask  {
   116  //  c.SetPermissionError(model.PERMISSION_CREATE_TASK)
   117  //  return
   118  //  }
   119  //  }
   120  
   121  //  if  !*c.App.Config().ServiceSettings.EnableTaskAccountCreation  {
   122  //  c.Err  =  model.NewAppError("createTask",  "api.task.create_disabled",  nil,  "",  http.StatusForbidden)
   123  //  return
   124  //  }
   125  
   126  //  createdTask,  err  :=  c.App.CreateTask(tas k)
   127  // 	if err != nil {
   128  // 	c.Err = err
   129  // 	return
   130  // 	}
   131  
   132  // 	w.WriteHeader(http.StatusCreated)
   133  // 	w.Write(createdTask.ToJson())
   134  // }
   135  
   136  // func patchTask(c *Context, w http.ResponseWriter, r *http.Request) {
   137  // 	c.RequireTaskId()
   138  // 	if c.Err != nil {
   139  // 	return
   140  // 	}
   141  // 	TaskId := c.Params.TaskId
   142  
   143  // 	taskPatch := model.TaskPatchFromJson(r.Body)
   144  // 	if taskPatch == nil {
   145  // 	c.SetInvalidParam("task")
   146  // 	return
   147  // 	}
   148  
   149  // 	if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil {
   150  // 	c.Err = err
   151  // 	return
   152  // 	}
   153  
   154  // 	updatedTask, err := c.App.PatchTask(TaskId, taskPatch)
   155  // 	if err != nil {
   156  // 	c.Err = err
   157  // 	return
   158  // 	}
   159  
   160  // 	w.Write(updatedTask.ToJson())
   161  // }
   162  
   163  func getTask(c *Context, w http.ResponseWriter, r *http.Request) {
   164  	c.RequireTaskId()
   165  	if c.Err != nil {
   166  		return
   167  	}
   168  	taskId := c.Params.TaskId
   169  
   170  	// includeDeleted := r.URL.Query().Get("include_deleted") == "true"
   171  
   172  	task, err := c.App.GetTask(taskId)
   173  	if err != nil {
   174  		c.Err = err
   175  		return
   176  	}
   177  
   178  	// if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) {
   179  	// 	// Allow access to any task.
   180  	// } else if task.OwnerId == c.App.Session.UserId {
   181  	// 	if !c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) {
   182  	// 	// Pretend like the task doesn't exist at all to avoid revealing that the
   183  	// 	// user is a task. It's kind of silly in this case, sine we created the task,
   184  	// 	// but we don't have read task permissions.
   185  	// 	c.Err = model.MakeTaskNotFoundError(TaskId)
   186  	// 	return
   187  	// 	}
   188  	// } else {
   189  	// 	// Pretend like the task doesn't exist at all, to avoid revealing that the
   190  	// 	// user is a task.
   191  	// 	c.Err = model.MakeTaskNotFoundError(TaskId)
   192  	// 	return
   193  	// }
   194  
   195  	// if c.HandleEtag(task.Etag(), "Get Task", w, r) {
   196  	// 	return
   197  	// }
   198  
   199  	w.Write(task.ToJson())
   200  }
   201  
   202  func getTasks(c *Context, w http.ResponseWriter, r *http.Request) {
   203  	// includeDeleted := r.URL.Query().Get("include_deleted") == "true"
   204  	// onlyOrphaned := r.URL.Query().Get("only_orphaned") == "true"
   205  
   206  	// var OwnerId string
   207  	// if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) {
   208  	// 	// Get tasks created by any user.
   209  	// 	OwnerId = ""
   210  	// } else if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) {
   211  	// 	// Only get tasks created by this user.
   212  	// 	OwnerId = c.App.Session.UserId
   213  	// } else {
   214  	// 	c.SetPermissionError(model.PERMISSION_READ_TASKS)
   215  	// 	return
   216  	// }
   217  
   218  	tasks, err := c.App.GetTasks()
   219  	if err != nil {
   220  		c.Err = err
   221  		return
   222  	}
   223  
   224  	// if c.HandleEtag(tasks.Etag(), "Get Tasks", w, r) {
   225  	// 	return
   226  	// }
   227  
   228  	w.Write(tasks.ToJson())
   229  }
   230  
   231  
   232  func getTasksWithTeam(c *Context, w http.ResponseWriter, r *http.Request) {
   233  	// includeDeleted := r.URL.Query().Get("include_deleted") == "true"
   234  	// onlyOrphaned := r.URL.Query().Get("only_orphaned") == "true"
   235  
   236  	// var OwnerId string
   237  	// if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) {
   238  	// 	// Get tasks created by any user.
   239  	// 	OwnerId = ""
   240  	// } else if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) {
   241  	// 	// Only get tasks created by this user.
   242  	// 	OwnerId = c.App.Session.UserId
   243  	// } else {
   244  	// 	c.SetPermissionError(model.PERMISSION_READ_TASKS)
   245  	// 	return
   246  	// }
   247  
   248  	teams,errteam := c.App.GetTeamMembersForUser(c.App.Session.UserId)
   249  	if(errteam!=nil){
   250  		return;
   251  	}
   252  
   253  
   254  	tasks, err := c.App.GetAllWithTeamId(teams[0].TeamId)
   255  	if err != nil {
   256  		c.Err = err
   257  		return
   258  	}
   259  
   260  
   261  	// if c.HandleEtag(tasks.Etag(), "Get Tasks", w, r) {
   262  	// 	return
   263  	// }
   264  
   265  	w.Write(tasks.ToJson())
   266  }
   267  
   268  
   269  
   270  // func disableTask(c *Context, w http.ResponseWriter, r *http.Request) {
   271  // 	updateTaskActive(c, w, r, false)
   272  // }
   273  
   274  // func enableTask(c *Context, w http.ResponseWriter, r *http.Request) {
   275  // 	updateTaskActive(c, w, r, true)
   276  // }
   277  
   278  func updateTask(c *Context, w http.ResponseWriter, r *http.Request) {
   279  	c.RequireTaskId()
   280  	if c.Err != nil {
   281  		return
   282  	}
   283  	taskId := c.Params.TaskId
   284  
   285  	old_task, err := c.App.GetTask(taskId)
   286  	if err != nil {
   287  		c.Err = err
   288  		return
   289  	}
   290  
   291  	new_task := old_task
   292  
   293  	// if r.URL.Query().Get("task_id") != "" {
   294  	// 	i, err1 := strconv.Atoi(r.URL.Query().Get("task_id"))
   295  	// 	err1 = err1
   296  	// 	new_task.TaskId = i
   297  	// }
   298  
   299  	if r.URL.Query().Get("create_at") != "" {
   300  		i, err1 := strconv.ParseInt(r.URL.Query().Get("create_at"), 10, 64)
   301  		err1 = err1
   302  		new_task.CreateAt = i
   303  	}
   304  
   305  	if r.URL.Query().Get("due_at") != "" {
   306  		i, err1 := strconv.ParseInt(r.URL.Query().Get("due_at"), 10, 64)
   307  		err1 = err1
   308  		new_task.DueAt = i
   309  	}
   310  
   311  	if r.URL.Query().Get("confirm_at") != "" {
   312  		i, err1 := strconv.ParseInt(r.URL.Query().Get("confirm_at"), 10, 64)
   313  		err1 = err1
   314  		new_task.ConfirmAt = i
   315  	}
   316  
   317  	if r.URL.Query().Get("finish_at") != "" {
   318  		i, err1 := strconv.ParseInt(r.URL.Query().Get("finish_at"), 10, 64)
   319  		err1 = err1
   320  		new_task.FinishAt = i
   321  	}
   322  
   323  	if r.URL.Query().Get("send_dept") != "" {
   324  		new_task.SendDept = r.URL.Query().Get("send_dept")
   325  	}
   326  
   327  	if r.URL.Query().Get("receive_dept") != "" {
   328  		new_task.ReceiveDept = r.URL.Query().Get("receive_dept")
   329  	}
   330  
   331  	if r.URL.Query().Get("room_id") != "" {
   332  		i, err1 := strconv.Atoi(r.URL.Query().Get("room_id"))
   333  		err1 = err1
   334  		new_task.RoomId = i
   335  	}
   336  
   337  	if r.URL.Query().Get("task_type") != "" {
   338  		new_task.TaskType = r.URL.Query().Get("task_type")
   339  	}
   340  
   341  	if r.URL.Query().Get("note") != "" {
   342  		new_task.Note = r.URL.Query().Get("note")
   343  	}
   344  
   345  	if r.URL.Query().Get("status") != "" {
   346  		i, err1 := strconv.Atoi(r.URL.Query().Get("status"))
   347  		err1 = err1
   348  		new_task.Status = i
   349  	}
   350  
   351  
   352  	// if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil {
   353  	// 	c.Err = err
   354  	// 	return
   355  	// }
   356  
   357  	// task, err := c.App.UpdateTaskActive(TaskId, active)
   358  	// if err != nil {
   359  	// 	c.Err = err
   360  	// 	return
   361  	// }
   362  
   363  	task, err := c.App.UpdateTask(new_task)
   364  	if err != nil {
   365  		c.Err = err
   366  		return
   367  	}
   368  
   369  
   370  
   371  	w.Write(task.ToJson())
   372  }
   373  
   374  
   375  func updateTaskStatusQuickWithPost(c *Context, w http.ResponseWriter, r *http.Request) {
   376  	var res string
   377  	c.RequireTaskId()
   378  	if c.Err != nil {
   379  		return
   380  	}
   381  	taskId := c.Params.TaskId
   382  
   383  	old_task, err := c.App.GetTask(taskId)
   384  	if err != nil {
   385  		c.Err = err
   386  		return
   387  	}
   388  
   389  
   390  	new_task := old_task
   391  
   392  	receiveDeptToId := make(map[string]string)
   393  	receiveDeptToId["housekeeping"] = "r86qtsc49pbw7cdzigptsgm47a"
   394  	fmt.Println("!!!POSTTIPM!!!new task.roomid", new_task.DueAt)
   395  	var due_at_int64 time.Time = time.Unix(0, int64(new_task.DueAt) * int64(time.Millisecond))
   396  	due_at_string := due_at_int64.Format("01月02日 15:04")
   397  
   398  	//field struct
   399  
   400  	field2 := field{Title: "客房号", Value: strconv.Itoa(new_task.RoomId), Short: true}
   401  	field3 := field{Title: "要求完成时间", Value: due_at_string, Short: true}
   402  	field4 := field{Title: "任务内容", Value: new_task.TaskType, Short: true}
   403  	field5 := field{Title: "发单部门", Value: new_task.SendDept, Short: true}
   404  	field6 := field{Title: "备注", Value: new_task.Note, Short: true}
   405  
   406  
   407  	if r.URL.Query().Get("status") == "1" && old_task.Status == 0 {
   408  		new_task.ConfirmAt = model.GetMillis()
   409  		new_task.Status = 1
   410  		integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(new_task.TaskId) +"/updatepost?status=2"}
   411  		action_obj := action{ Name: "确认完成", Integration: integration_url_self }
   412  		action_self := []action{action_obj}
   413  		field1 := field{Title: "任务状态", Value: "**执行中**", Short: true}
   414  		field_self := []field{field1, field2, field3, field4, field5, field6}
   415  		//attachment struct
   416  		attachment_obj := attachment{Color:"#2CACE1", Fields:field_self, Actions:action_self}
   417  		attachment_self := []attachment{attachment_obj}
   418  
   419  		//props struct
   420  		//props_self := props{Attachments: attachment_self }
   421  		props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self }
   422  
   423  
   424  		//payload struct
   425  		payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self }
   426  
   427  
   428  		//strinify playload
   429  		jsonData,err2 := json.Marshal(payload_self)
   430  		fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ")
   431  		if(err2!=nil){
   432  			fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2)
   433  			return
   434  		}
   435  
   436  
   437  
   438  		var r2 http.Request
   439  		r2.Body =  ioutil.NopCloser(bytes.NewReader(jsonData))
   440  		c.Params.PostId = old_task.PostId
   441  		res = updatePostWithReturn(c,w,&r2)
   442  
   443  
   444  	} else if r.URL.Query().Get("status") == "2" && (old_task.Status == 1 || old_task.Status == 4){
   445  		new_task.FinishAt = model.GetMillis()
   446  		new_task.Status = 2
   447  		field1 := field{Title: "任务状态", Value: "**已完成**", Short: true}
   448  		field_self := []field{field1, field2, field3, field4, field5, field6}
   449  		//attachment struct
   450  		attachment_obj := attachment{Color:"#258A28", Fields:field_self}
   451  		attachment_self := []attachment{attachment_obj}
   452  
   453  		//props struct
   454  		props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self }
   455  
   456  		//payload struct
   457  		payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self }
   458  
   459  
   460  		//strinify playload
   461  		jsonData,err2 := json.Marshal(payload_self)
   462  		fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ")
   463  		if(err2!=nil){
   464  			fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2)
   465  			return
   466  		}
   467  
   468  
   469  
   470  		var r2 http.Request
   471  		r2.Body =  ioutil.NopCloser(bytes.NewReader(jsonData))
   472  		c.Params.PostId = old_task.PostId
   473  		res = updatePostWithReturn(c,w,&r2)
   474  
   475  	} else if r.URL.Query().Get("status") == "3" && old_task.Status != 3 && old_task.Status != 2 {
   476  		new_task.Status = 3
   477  		field1 := field{Title: "任务状态", Value: "**已取消**", Short: true}
   478  		field_self := []field{field1, field2, field3, field4, field5, field6}
   479  		//attachment struct
   480  		attachment_obj := attachment{Color:"#3D3C40", Fields:field_self}
   481  		attachment_self := []attachment{attachment_obj}
   482  
   483  		//props struct
   484  		props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self }
   485  
   486  
   487  		//payload struct
   488  		payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self }
   489  
   490  
   491  		//strinify playload
   492  		jsonData,err2 := json.Marshal(payload_self)
   493  		fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ")
   494  		if(err2!=nil){
   495  			fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2)
   496  			return
   497  		}
   498  
   499  		var r2 http.Request
   500  		r2.Body =  ioutil.NopCloser(bytes.NewReader(jsonData))
   501  		c.Params.PostId = old_task.PostId
   502  		res = updatePostWithReturn(c,w,&r2)
   503  
   504  
   505  	} else if r.URL.Query().Get("status") == "4" && old_task.Status != 3 && old_task.Status != 2 && old_task.Status != 4 {
   506  		//超时是4
   507  		new_task.Status = 4
   508  		integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(new_task.TaskId) +"/updatepost?status=2"}
   509  		action_obj := action{ Name: "确认完成", Integration: integration_url_self }
   510  		action_self := []action{action_obj}
   511  		field1 := field{Title: "任务状态", Value: "**已超时**", Short: true}
   512  		field_self := []field{field1, field2, field3, field4, field5, field6}
   513  		//attachment struct
   514  		attachment_obj := attachment{Color:"#FC3D41", Fields:field_self, Actions:action_self}
   515  		attachment_self := []attachment{attachment_obj}
   516  
   517  		//props struct
   518  		props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self }
   519  
   520  		//payload struct
   521  		payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self }
   522  
   523  
   524  		//strinify playload
   525  		jsonData,err2 := json.Marshal(payload_self)
   526  		fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ")
   527  		if(err2!=nil){
   528  			fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2)
   529  			return
   530  		}
   531  
   532  		var r2 http.Request
   533  		r2.Body =  ioutil.NopCloser(bytes.NewReader(jsonData))
   534  		c.Params.PostId = old_task.PostId
   535  		res = updatePostWithReturn(c,w,&r2)
   536  
   537  
   538  	}
   539  	new_task.PostId = res
   540  	task, err := c.App.UpdateTask(new_task)
   541  	if err != nil {
   542  		c.Err = err
   543  		return
   544  	}
   545  
   546  	w.Write(task.ToJson())
   547  }
   548  
   549  
   550  
   551  
   552  
   553  
   554  
   555  
   556  func insertTaskWithPost(c *Context, w http.ResponseWriter, r *http.Request) {
   557  	fmt.Println("!!!!!HERE!!!!")
   558  	// new_task := model.TaskFromJson(r.Body)
   559  	var new_task model.Task
   560  
   561  	fmt.Println(c.App.Session.TeamMembers[0],"0 here!!!")
   562  	fmt.Println(len(c.App.Session.TeamMembers),"length!!!")
   563  	//fmt.Println(c.App.Session.TeamMembers[1],"1 here!!!")
   564  
   565  	new_task = insertHelper(new_task,r)
   566  
   567  	task, err := c.App.InsertTask(&new_task)
   568  	if err != nil {
   569  		c.Err = err
   570  		return
   571  	}
   572  
   573  
   574  	// !!!! 做调用create post这个API的数据准备了 !!!! //
   575  
   576  	//create a map { receive_dept: channel_id }
   577  	//此处需要根据不同的酒店数据库情况修改
   578  	//未来加入更多匹配值
   579  	//receiveDeptToId := make(map[string]string)
   580  	//receiveDeptToId["housekeeping"] = "r86qtsc49pbw7cdzigptsgm47a"
   581  
   582  	teams,_ := c.App.GetTeamMembersForUser(c.App.Session.UserId)
   583  
   584  	channel,errdisplay := c.App.GetByDisplayName(teams[0].TeamId,task.ReceiveDept)
   585  	if errdisplay!=nil{
   586  		c.Err = errdisplay
   587  		return
   588  	}
   589  
   590  	// integration_url struct
   591  	integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(task.TaskId) +"/updatepost?status=1"}
   592  
   593  	// action struct
   594  	action_obj := action{ Name: "确认接收", Integration: integration_url_self }
   595  	action_self := []action{action_obj}
   596  
   597  	//convert due_at into normal Date format for field struct
   598  	fmt.Println("!!!POSTTIPM!!!new task.roomid", new_task.DueAt)
   599  	var due_at_int64 time.Time = time.Unix(0, int64(new_task.DueAt) * int64(time.Millisecond))
   600  	due_at_string := due_at_int64.Format("01月02日 15:04")
   601  
   602  	//field struct
   603  	field1 := field{Title: "任务状态", Value: "**等待接收**", Short: true}
   604  	field2 := field{Title: "客房号", Value: strconv.Itoa(new_task.RoomId), Short: true}
   605  	field3 := field{Title: "要求完成时间", Value: due_at_string, Short: true}
   606  	field4 := field{Title: "任务内容", Value: new_task.TaskType, Short: true}
   607  	field5 := field{Title: "发单部门", Value: new_task.SendDept, Short: true}
   608  	field6 := field{Title: "备注", Value: new_task.Note, Short: true}
   609  	field_self := []field{field1, field2, field3, field4, field5, field6}
   610  
   611  	//attachment struct
   612  	attachment_obj := attachment{Color:"#9C58E3" ,Fields:field_self, Actions:action_self}
   613  	attachment_self := []attachment{attachment_obj}
   614  
   615  	//props struct
   616  	props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self }
   617  
   618  
   619  
   620  	//payload struct
   621  	payload_self := payload{Channel_id: channel.Id, Message: "任务"+strconv.Itoa(task.TaskId), Root_id: "", Props: props_self }
   622  
   623  
   624  	//strinify playload
   625  	jsonData,err2 := json.Marshal(payload_self)
   626  	fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ")
   627  	if(err2!=nil){
   628  		fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2)
   629  		return
   630  	}
   631  
   632  	post  :=  model.PostFromJson(bytes.NewBuffer(jsonData))
   633  	if  post  ==  nil  {
   634  		c.SetInvalidParam("post")
   635  		return
   636  	}
   637  	fmt.Println("!!!!insert task with post")
   638  	var r2 http.Request
   639  	r2.Body =  ioutil.NopCloser(bytes.NewReader(jsonData))
   640  
   641  	res := createPostWithReturn(c,w,&r2)
   642  	task.PostId = res
   643  	task.TeamId = teams[0].TeamId
   644  	tasklateset, err := c.App.UpdateTask(task)
   645  
   646  
   647  
   648  	w.Write(tasklateset.ToJson())
   649  }
   650  func insertTask(c *Context, w http.ResponseWriter, r *http.Request) {
   651  	var new_task model.Task
   652  
   653  
   654  	new_task = insertHelper(new_task,r)
   655  	// mlog.Debug("passed")
   656  
   657  	// if err := c.App.SessionHasPermissionToManageTask(c.App.Session, taskUserId); err != nil {
   658  	// 	c.Err = err
   659  	// 	return
   660  	// }
   661  
   662  	// task, err := c.App.UpdateTaskActive(taskUserId, active)
   663  	// if err != nil {
   664  	// 	c.Err = err
   665  	// 	return
   666  	// }
   667  
   668  	task, err := c.App.InsertTask(&new_task)
   669  	if err != nil {
   670  		c.Err = err
   671  		return
   672  	}
   673  
   674  	w.Write(task.ToJson())
   675  }
   676  
   677  
   678  func insertHelper(new_task model.Task,r *http.Request)(res model.Task){
   679  	new_task.CreateAt = model.GetMillis()
   680  
   681  	if r.URL.Query().Get("due_at") != "" {
   682  		i, err1 := strconv.ParseInt(r.URL.Query().Get("due_at"), 10, 64)
   683  		err1 = err1
   684  		new_task.DueAt = i
   685  	} else {
   686  		return
   687  	}
   688  
   689  	new_task.ConfirmAt = -1
   690  
   691  	new_task.FinishAt = -1
   692  
   693  	if r.URL.Query().Get("send_dept") != "" {
   694  		new_task.SendDept = r.URL.Query().Get("send_dept")
   695  	} else {
   696  		return
   697  	}
   698  
   699  	if r.URL.Query().Get("receive_dept") != "" {
   700  		new_task.ReceiveDept = r.URL.Query().Get("receive_dept")
   701  	} else {
   702  		return
   703  	}
   704  
   705  	if r.URL.Query().Get("room_id") != "" {
   706  		i, err1 := strconv.Atoi(r.URL.Query().Get("room_id"))
   707  		err1 = err1
   708  		new_task.RoomId = i
   709  	} else {
   710  		return
   711  	}
   712  
   713  	if r.URL.Query().Get("task_type") != "" {
   714  		new_task.TaskType = r.URL.Query().Get("task_type")
   715  	} else {
   716  		return
   717  	}
   718  
   719  	if r.URL.Query().Get("note") != "" {
   720  		new_task.Note = r.URL.Query().Get("note")
   721  	} else {
   722  		return
   723  	}
   724  
   725  	if r.URL.Query().Get("status") != "" {
   726  		i, err1 := strconv.Atoi(r.URL.Query().Get("status"))
   727  		err1 = err1
   728  		new_task.Status = i
   729  	} else {
   730  		return
   731  	}
   732  	return new_task
   733  }
   734  
   735  
   736  func updateTaskStatusQuick(c *Context, w http.ResponseWriter, r *http.Request) {
   737  	c.RequireTaskId()
   738  	if c.Err != nil {
   739  		return
   740  	}
   741  	taskId := c.Params.TaskId
   742  
   743  	old_task, err := c.App.GetTask(taskId)
   744  	if err != nil {
   745  		c.Err = err
   746  		return
   747  	}
   748  
   749  	new_task := old_task
   750  
   751  	if r.URL.Query().Get("status") == "1" && old_task.Status == 0 {
   752  		new_task.ConfirmAt = model.GetMillis()
   753  		new_task.Status = 1
   754  	} else if r.URL.Query().Get("status") == "2" && old_task.Status == 1 {
   755  		new_task.FinishAt = model.GetMillis()
   756  		new_task.Status = 2
   757  	} else if r.URL.Query().Get("status") == "3" && old_task.Status != 3 && old_task.Status != 2 {
   758  		new_task.Status = 3
   759  	}
   760  
   761  	task, err := c.App.UpdateTask(new_task)
   762  	if err != nil {
   763  		c.Err = err
   764  		return
   765  	}
   766  
   767  	w.Write(task.ToJson())
   768  }
   769  
   770  // func assignTask(c *Context, w http.ResponseWriter, r *http.Request) {
   771  // 	c.RequireUserId()
   772  // 	c.RequireTaskId()
   773  // 	if c.Err != nil {
   774  // 	return
   775  // 	}
   776  // 	TaskId := c.Params.TaskId
   777  // 	userId := c.Params.UserId
   778  
   779  // 	if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil {
   780  // 	c.Err = err
   781  // 	return
   782  // 	}
   783  
   784  // 	if user, err := c.App.GetUser(userId); err == nil {
   785  // 	if user.IsTask {
   786  // 	c.SetPermissionError(model.PERMISSION_ASSIGN_TASK)
   787  // 	return
   788  // 	}
   789  // 	}
   790  
   791  // 	task, err := c.App.UpdateTaskOwner(TaskId, userId)
   792  // 	if err != nil {
   793  // 	c.Err = err
   794  // 	return
   795  // 	}
   796  
   797  // 	w.Write(task.ToJson())
   798  // }