group.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package front
  2. import (
  3. "fmt"
  4. "github.com/tealeg/xlsx"
  5. "os"
  6. qu "qfw/util"
  7. "strings"
  8. "time"
  9. "util"
  10. )
  11. // GroupTaskListByGroup 用户组权限用户组任务列表
  12. func (f *Front) GroupTaskListByGroup() {
  13. defer qu.Catch()
  14. if f.Method() == "POST" {
  15. start, _ := f.GetInteger("start")
  16. limit, _ := f.GetInteger("length")
  17. draw, _ := f.GetInteger("draw")
  18. status := f.GetString("status")
  19. searchStr := f.GetString("search[value]")
  20. search := strings.TrimSpace(searchStr)
  21. query := map[string]interface{}{
  22. "s_stype": "group", //检索用户组任务
  23. }
  24. if status != "-1" { //任务状态
  25. query["s_status"] = status
  26. }
  27. if search != "" {
  28. query["$or"] = []interface{}{
  29. map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
  30. }
  31. }
  32. list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
  33. count := util.Mgo.Count(util.TASKCOLLNAME, query)
  34. f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
  35. } else {
  36. _ = f.Render("project/task_group_list.html")
  37. }
  38. }
  39. // GroupTaskListByAdmin 系统管理员权限用户组任务列表
  40. func (f *Front) GroupTaskListByAdmin() {
  41. defer qu.Catch()
  42. if f.Method() == "POST" {
  43. start, _ := f.GetInteger("start")
  44. limit, _ := f.GetInteger("length")
  45. draw, _ := f.GetInteger("draw")
  46. status := f.GetString("status")
  47. searchStr := f.GetString("search[value]")
  48. search := strings.TrimSpace(searchStr)
  49. query := map[string]interface{}{
  50. "s_stype": "group", //检索用户组任务
  51. }
  52. if status != "-1" { //任务状态
  53. query["s_status"] = status
  54. }
  55. if search != "" {
  56. query["$or"] = []interface{}{
  57. map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
  58. map[string]interface{}{"s_entname": map[string]interface{}{"$regex": search}},
  59. map[string]interface{}{"s_rule": map[string]interface{}{"$regex": search}},
  60. map[string]interface{}{"s_departname": map[string]interface{}{"$regex": search}},
  61. }
  62. }
  63. list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
  64. count := util.Mgo.Count(util.TASKCOLLNAME, query)
  65. f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
  66. } else {
  67. _ = f.Render("project/task_list.html")
  68. }
  69. }
  70. // GroupTaskDeliver 用户组任务交付
  71. func (f *Front) GroupTaskDeliver() {
  72. defer qu.Catch()
  73. user := f.GetSession("user").(map[string]interface{})
  74. username := qu.ObjToString(user["s_login"]) //当前登录用户
  75. success := true
  76. msg := ""
  77. taskId := f.GetString("taskid") //用户组任务id
  78. qu.Debug("Group Task ID:", taskId)
  79. groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, taskId, map[string]interface{}{"v_sonids": 1})
  80. if groupTask != nil && len(*groupTask) > 0 {
  81. sonUserIds := (*groupTask)["v_sonids"].([]interface{})
  82. if len(sonUserIds) > 0 {
  83. for _, id := range sonUserIds {
  84. userTaskId := qu.ObjToString(id)
  85. userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
  86. status := qu.ObjToString((*userTask)["s_status"])
  87. if status != "已完成" || status != "已关闭" {
  88. success = false
  89. msg = "任务暂未完成"
  90. }
  91. }
  92. if success { //用户组下用户任务全部完成,更新该用户组任务状态
  93. success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
  94. "$set": map[string]interface{}{
  95. "i_completetime": time.Now().Unix(),
  96. "s_updateperson": username,
  97. "i_updatetime": time.Now().Unix(),
  98. "s_status": "已完成",
  99. },
  100. })
  101. if !success {
  102. msg = "更新任务信息失败"
  103. }
  104. }
  105. } else {
  106. success = false
  107. msg = "任务暂未分配"
  108. }
  109. } else {
  110. success = false
  111. msg = "查询任务失败"
  112. }
  113. f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
  114. }
  115. var modelpath string = "web/model/任务详情%d.xlsx"
  116. // GroupTaskExport 用户组任务导出
  117. func (f *Front) GroupTaskExport() {
  118. defer qu.Catch()
  119. starttime, _ := f.GetInt("i_starttime")
  120. completetime, _ := f.GetInt("i_completetime")
  121. status := f.GetString("s_status")
  122. searchStr := f.GetString("search[value]")
  123. search := strings.TrimSpace(searchStr)
  124. query := map[string]interface{}{
  125. "s_stype": "group",
  126. }
  127. if status != "-1" { //任务状态
  128. query["s_status"] = status
  129. }
  130. if search != "" {
  131. query["$or"] = []interface{}{
  132. map[string]interface{}{"s_entname": map[string]interface{}{"$regex": search}},
  133. }
  134. }
  135. if starttime > 0 {
  136. query["i_starttime"] = map[string]interface{}{
  137. "$gte": starttime,
  138. }
  139. }
  140. if completetime > 0 {
  141. query["i_completetime"] = map[string]interface{}{
  142. "$lte": completetime,
  143. }
  144. }
  145. qu.Debug("Query:", query)
  146. count := util.Mgo.Count(util.TASKCOLLNAME, query)
  147. if count > 0 {
  148. file, err := xlsx.OpenFile("taskexportmodel.xlsx")
  149. if err != nil {
  150. qu.Debug("Load Excel Model Error")
  151. f.ServeJson("加载脚本失败")
  152. return
  153. }
  154. sheet := file.Sheets[0]
  155. fields := map[string]interface{}{
  156. "s_entname": 1,
  157. "s_departname": 1,
  158. "s_rulename": 1,
  159. "s_projectname": 1,
  160. "s_groupname": 1,
  161. "s_personname": 1,
  162. "i_givenum": 1,
  163. "i_starttime": 1,
  164. "i_completetime": 1,
  165. }
  166. list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, fields, false, -1, -1)
  167. for _, l := range *list {
  168. row := sheet.AddRow()
  169. entname := qu.ObjToString(l["s_entname"])
  170. departname := qu.ObjToString(l["s_departname"])
  171. rulename := qu.ObjToString(l["s_rulename"])
  172. projectname := qu.ObjToString(l["s_projectname"])
  173. groupname := qu.ObjToString(l["s_groupname"])
  174. personname := qu.ObjToString(l["s_personname"])
  175. givenum := qu.IntAll(l["i_givenum"])
  176. starttimestr := ""
  177. if starttime := qu.Int64All(l["i_starttime"]); starttime != 0 {
  178. starttimestr = qu.FormatDateByInt64(&starttime, qu.Date_Full_Layout)
  179. }
  180. completetimestr := ""
  181. if completetime := qu.Int64All(l["i_completetime"]); completetime != 0 {
  182. completetimestr = qu.FormatDateByInt64(&completetime, qu.Date_Full_Layout)
  183. }
  184. row.AddCell().SetValue(entname)
  185. row.AddCell().SetValue(departname)
  186. row.AddCell().SetValue(rulename)
  187. row.AddCell().SetValue(projectname)
  188. row.AddCell().SetValue(groupname)
  189. row.AddCell().SetValue(personname)
  190. row.AddCell().SetValue(givenum)
  191. row.AddCell().SetValue(starttimestr)
  192. row.AddCell().SetValue(completetimestr)
  193. }
  194. fname := fmt.Sprintf(modelpath, time.Now().Unix())
  195. qu.Debug("File Name:", fname)
  196. err = file.Save(fname)
  197. if err != nil {
  198. qu.Debug("Save Excel" + fname + "Error")
  199. f.ServeJson("导出失败")
  200. return
  201. }
  202. f.ServeFile(fname)
  203. go func(path string) {
  204. time.Sleep(time.Minute * 10)
  205. os.Remove(path)
  206. }(fname)
  207. } else {
  208. f.ServeJson("没有数据")
  209. }
  210. }