group.go 6.4 KB

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