user.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582
  1. package front
  2. import (
  3. "encoding/json"
  4. "github.com/dchest/captcha"
  5. "github.com/gorilla/sessions"
  6. "go.mongodb.org/mongo-driver/bson"
  7. "go.mongodb.org/mongo-driver/bson/primitive"
  8. mgo "mongodb"
  9. qu "qfw/util"
  10. "strconv"
  11. "strings"
  12. "sync"
  13. "time"
  14. . "util"
  15. )
  16. var store = sessions.NewCookieStore([]byte("jianyu_secret20210422"))
  17. func (f *Front) Login() {
  18. defer qu.Catch()
  19. if f.Method() == "POST" {
  20. username := f.GetString("username")
  21. password := f.GetString("pwd")
  22. imgCode := f.GetString("imgCode")
  23. passwordEn := qu.SE.EncodeString(password)
  24. qu.Debug(username, passwordEn, imgCode)
  25. session, err := store.Get(f.Request, "dataTagLoginImgCode")
  26. if err != nil {
  27. qu.Debug("图片验证码session获取失败-%s \n", username)
  28. f.ServeJson(map[string]interface{}{
  29. "code": 0,
  30. "status": false,
  31. "message": "获取失败",
  32. })
  33. return
  34. }
  35. code := qu.ObjToString(session.Values["dataTagLoginImgCode"])
  36. if code == "" {
  37. qu.Debug("图片验证码过期-%s \n", username)
  38. f.ServeJson(map[string]interface{}{
  39. "checked": false,
  40. "message": "图片验证码过期",
  41. })
  42. return
  43. }
  44. //if !captcha.VerifyString(code, imgCode) {
  45. // qu.Debug("图片验证码错误-%s \n", username)
  46. // f.ServeJson(map[string]interface{}{
  47. // "checked": false,
  48. // "message": "图片验证码错误",
  49. // })
  50. // return
  51. //}
  52. query := map[string]interface{}{
  53. "s_login": username,
  54. "s_password": passwordEn,
  55. }
  56. user, _ := Mgo.FindOne("s_user", query)
  57. checked := false
  58. if user != nil && len(*user) > 0 {
  59. checked = true
  60. f.SetSession("user", map[string]interface{}{
  61. //"s_groupid": (*user)["s_groupid"],
  62. "s_name": (*user)["s_name"],
  63. "i_role": (*user)["i_role"],
  64. "s_pwd": password,
  65. "s_login": username,
  66. "id": mgo.BsonIdToSId((*user)["_id"]),
  67. })
  68. UserMenu[username] = GetUserMenu(qu.IntAll((*user)["i_role"]))
  69. }
  70. f.ServeJson(map[string]interface{}{
  71. "checked": checked,
  72. "message": "账号或密码错误",
  73. })
  74. } else {
  75. _ = f.Render("login.html")
  76. }
  77. }
  78. // 获取图片验证码
  79. func (f *Front) Code() {
  80. id := captcha.NewLen(4)
  81. //r := &http.Request{}
  82. f.Request.Header.Add("Cache-Control", "no-cache, no-store, must-revalidate")
  83. f.Request.Header.Add("Pragma", "no-cache")
  84. f.Request.Header.Add("Expires", "0")
  85. f.Request.Header.Add("Content-Type", "image/png")
  86. w := f.ResponseWriter
  87. session, err := store.Get(f.Request, "dataTagLoginImgCode")
  88. if err != nil {
  89. qu.Debug("session1获取失败")
  90. return
  91. }
  92. session.Values["dataTagLoginImgCode"] = id
  93. session.Options.MaxAge = 60
  94. if err := session.Save(f.Request, w); err != nil {
  95. qu.Debug("session1保存错误,验证码 ", id)
  96. }
  97. err2 := captcha.WriteImage(w, id, 90, 30)
  98. if err2 != nil {
  99. qu.Debug("生成图片验证码错误,验证码 ", id)
  100. }
  101. return
  102. }
  103. func (f *Front) Logout() {
  104. f.DelSession("user")
  105. f.Redirect("/")
  106. }
  107. func (f *Front) UserGroup() {
  108. defer qu.Catch()
  109. if f.Method() == "POST" {
  110. start, _ := f.GetInteger("start")
  111. limit, _ := f.GetInteger("length")
  112. draw, _ := f.GetInteger("draw")
  113. searchStr := f.GetString("search[value]")
  114. search := strings.TrimSpace(searchStr)
  115. query := map[string]interface{}{
  116. "b_delete": false,
  117. }
  118. if search != "" {
  119. query["$or"] = []interface{}{
  120. bson.M{"s_name": bson.M{"$regex": search}},
  121. }
  122. }
  123. data, _ := Mgo.Find("s_group", query, `{"i_createtime":-1}`, nil, false, start, limit)
  124. count := Mgo.Count("s_group", query)
  125. f.ServeJson(map[string]interface{}{
  126. "draw": draw,
  127. "data": data,
  128. "recordsFiltered": count,
  129. "recordsTotal": count,
  130. })
  131. } else {
  132. _ = f.Render("user/user_group.html")
  133. }
  134. }
  135. func (f *Front) UserGroupNew() {
  136. defer qu.Catch()
  137. if f.Method() == "POST" {
  138. data := GetPostForm(f.Request)
  139. group := *qu.ObjToMap(data["group"])
  140. user := *qu.ObjToMap(data["user"])
  141. currenttime := time.Now().Unix()
  142. group["i_createtime"] = currenttime
  143. group["i_updatetime"] = currenttime
  144. group["b_delete"] = false
  145. gid := Mgo.Save("s_group", group) // 保存用户组
  146. if gid != "" {
  147. // 1、用户组管理员账号
  148. m1 := make(map[string]interface{})
  149. m1["s_groupid"] = gid
  150. m1["s_name"] = ""
  151. m1["s_login"] = group["s_name"]
  152. m1["s_password"] = qu.SE.EncodeString(qu.ObjToString(group["s_password"]))
  153. m1["i_power"] = "1"
  154. m1["s_phone"] = ""
  155. m1["i_createtime"] = currenttime
  156. m1["i_updatetime"] = currenttime
  157. m1["i_state"] = true
  158. m1["b_delete"] = false
  159. Mgo.Save("s_user", m1)
  160. // 2、质检员账号
  161. for i := 0; i < qu.IntAll(user["u1_size"]); i++ {
  162. m := make(map[string]interface{})
  163. m["s_groupid"] = gid
  164. m["s_name"] = ""
  165. m["s_login"] = qu.ObjToString(group["s_name"]) + "_zj_" + strconv.Itoa(i)
  166. m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u1_pwd"]))
  167. m["i_power"] = "2"
  168. m["s_phone"] = ""
  169. m["i_createtime"] = currenttime
  170. m["i_updatetime"] = currenttime
  171. m["i_state"] = true
  172. m["b_delete"] = false
  173. Mgo.Save("s_user", m)
  174. }
  175. // 3、普通用户账号
  176. for i := 0; i < qu.IntAll(user["u2_size"]); i++ {
  177. m := make(map[string]interface{})
  178. m["s_groupid"] = gid
  179. m["s_name"] = ""
  180. m["s_login"] = qu.ObjToString(group["s_name"]) + "_" + strconv.Itoa(i)
  181. m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u2_pwd"]))
  182. m["i_power"] = "3"
  183. m["s_phone"] = ""
  184. m["i_createtime"] = currenttime
  185. m["i_updatetime"] = currenttime
  186. m["i_state"] = true
  187. m["b_delete"] = false
  188. Mgo.Save("s_user", m)
  189. }
  190. f.ServeJson(map[string]interface{}{
  191. "rep": true,
  192. })
  193. } else {
  194. f.ServeJson(map[string]interface{}{
  195. "rep": false,
  196. })
  197. }
  198. } else {
  199. f.T["pwd"] = Password
  200. _ = f.Render("user/user_group_create.html", &f.T)
  201. }
  202. }
  203. func (f *Front) UserGroupState() {
  204. defer qu.Catch()
  205. if f.Method() == "POST" {
  206. data := GetPostForm(f.Request)
  207. b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
  208. f.ServeJson(map[string]interface{}{
  209. "rep": b,
  210. })
  211. }
  212. }
  213. func (f *Front) UserGroupStateBulk() {
  214. defer qu.Catch()
  215. if f.Method() == "POST" {
  216. data := GetPostForm(f.Request)
  217. qu.Debug(data)
  218. ids := strings.Split(qu.ObjToString(data["ids"]), ",")
  219. for _, k := range ids {
  220. b := Mgo.UpdateById("s_group", k, map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
  221. if !b {
  222. f.ServeJson(map[string]interface{}{
  223. "rep": b,
  224. })
  225. }
  226. }
  227. f.ServeJson(map[string]interface{}{
  228. "rep": true,
  229. })
  230. }
  231. }
  232. func (f *Front) UserGroupDel() {
  233. defer qu.Catch()
  234. if f.Method() == "POST" {
  235. data := GetPostForm(f.Request)
  236. qu.Debug(data)
  237. b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
  238. f.ServeJson(map[string]interface{}{
  239. "rep": b,
  240. })
  241. }
  242. }
  243. func (f *Front) UserManage() {
  244. defer qu.Catch()
  245. if f.Method() == "POST" {
  246. data := GetPostForm(f.Request)
  247. gid := qu.ObjToString(data["gid"])
  248. draw, _ := f.GetInteger("draw")
  249. query := map[string]interface{}{"s_groupid": gid, "b_delete": false}
  250. info, b := Mgo.Find("s_user", query, nil, nil, false, -1, -1)
  251. count := Mgo.Count("s_user", query)
  252. if b && len(*info) > 0 {
  253. f.ServeJson(map[string]interface{}{
  254. "rep": true,
  255. "data": *info,
  256. "draw": draw,
  257. "recordsFiltered": count,
  258. "recordsTotal": count,
  259. })
  260. } else {
  261. f.ServeJson(map[string]interface{}{
  262. "rep": false,
  263. })
  264. }
  265. } else {
  266. f.T["gid"] = f.GetString("id")
  267. _ = f.Render("user/user_list.html", &f.T)
  268. }
  269. }
  270. func (f *Front) UserState() {
  271. defer qu.Catch()
  272. if f.Method() == "POST" {
  273. data := GetPostForm(f.Request)
  274. b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
  275. f.ServeJson(map[string]interface{}{
  276. "rep": b,
  277. })
  278. }
  279. }
  280. func (f *Front) UserDel() {
  281. defer qu.Catch()
  282. if f.Method() == "POST" {
  283. data := GetPostForm(f.Request)
  284. b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
  285. f.ServeJson(map[string]interface{}{
  286. "rep": b,
  287. })
  288. }
  289. }
  290. func (f *Front) UserModify() {
  291. defer qu.Catch()
  292. if f.Method() == "POST" {
  293. data := GetPostForm(f.Request)
  294. b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"s_name": data["s_name"], "s_phone": data["s_phone"]}})
  295. f.ServeJson(map[string]interface{}{
  296. "rep": b,
  297. })
  298. }
  299. }
  300. func (f *Front) GroupList() {
  301. qu.Catch()
  302. query := map[string]interface{}{"b_delete": false, "i_state": false}
  303. field := map[string]interface{}{"s_name": 1}
  304. info, b := Mgo.Find("s_group", query, nil, field, false, -1, -1)
  305. if b && len(*info) > 0 {
  306. f.ServeJson(map[string]interface{}{
  307. "rep": b,
  308. "data": *info,
  309. })
  310. }
  311. }
  312. //用户任务分发
  313. func (f *Front) UserTaskSave() {
  314. defer qu.Catch()
  315. user := f.GetSession("user").(map[string]interface{})
  316. username := qu.ObjToString(user["s_name"])
  317. var taskArr []map[string]interface{}
  318. var userTaskIdArr []string
  319. userTaskIdInfo := map[string]Task{}
  320. success := false
  321. msg := ""
  322. groupTaskId := f.GetString("grouptaskid") //用户组任务id
  323. groupTask, _ := Mgo.FindById(TASKCOLLNAME, groupTaskId, nil)
  324. if len(*groupTask) == 0 {
  325. qu.Debug("GroupTask Find Error:", groupTaskId)
  326. msg = "用户组任务:" + groupTaskId + "查询失败"
  327. f.ServeJson(map[string]interface{}{"success": false, "msg": msg})
  328. return
  329. }
  330. sourcetaskinfo := qu.ObjToString((*groupTask)["s_sourcetaskinfo"])
  331. userNums := f.GetString("usernums")
  332. var userArr []map[string]interface{}
  333. if err := json.Unmarshal([]byte(userNums), &userArr); err != nil {
  334. qu.Debug("UserInfo Unmarshal Failed:", err)
  335. msg = "用户信息解析失败"
  336. } else {
  337. for _, userInfo := range userArr {
  338. userid := qu.ObjToString(userInfo["s_userid"])
  339. name := qu.ObjToString(userInfo["s_name"])
  340. login := qu.ObjToString(userInfo["s_login"])
  341. givenum := qu.IntAll(userInfo["i_givenum"])
  342. userTaskId := primitive.NewObjectID()
  343. userTaskIdStr := mgo.BsonIdToSId(userTaskId)
  344. userTaskIdArr = append(userTaskIdArr, userTaskIdStr)
  345. ut := Task{
  346. UserId: userid,
  347. GiveNum: givenum,
  348. }
  349. userTaskIdInfo[userTaskIdStr] = ut
  350. userTask := map[string]interface{}{
  351. "_id": userTaskId, //生成任务id
  352. "s_projectid": qu.ObjToString((*groupTask)["s_projectid"]), //项目标识
  353. "s_projectname": qu.ObjToString((*groupTask)["s_projectname"]), //项目名称
  354. "s_status": "未开始", //任务状态
  355. "s_personid": userid, //任务负责人标识
  356. "s_personname": name, //任务负责人
  357. "s_login": login, //用户账号
  358. "s_groupname": qu.ObjToString((*groupTask)["s_groupname"]), //用户组名称
  359. "s_groupid": qu.ObjToString((*groupTask)["s_groupid"]), //用户组标识
  360. "i_givenum": givenum, //分发数据量
  361. "s_createname": username, //创建人
  362. "i_createtime": time.Now().Unix(), //创建时间
  363. "s_progress": "0%", //完成进度
  364. "s_sourceinfo": qu.ObjToString((*groupTask)["s_sourceinfo"]), //源数据表
  365. "s_sourcetaskinfo": sourcetaskinfo, //任务日志表
  366. "s_stype": "user", //任务类型
  367. "s_parentid": groupTaskId, //父任务及用户组任务id
  368. }
  369. taskArr = append(taskArr, userTask)
  370. }
  371. }
  372. if len(taskArr) > 0 {
  373. //分发数据后更新对应用户组任务信息
  374. success = Mgo.UpdateById(TASKCOLLNAME, groupTaskId, map[string]interface{}{
  375. "$push": map[string]interface{}{
  376. "v_sonids": map[string]interface{}{
  377. "$each": userTaskIdArr,
  378. },
  379. },
  380. })
  381. if !success {
  382. msg = "更新用户组任务:" + groupTaskId + "关联用户任务失败"
  383. } else { //用户分发任务
  384. success = Mgo.SaveBulk(TASKCOLLNAME, taskArr...)
  385. if success {
  386. //用户分发任务后更新该用户组任务的状态和开始时间
  387. Mgo.Update(TASKCOLLNAME,
  388. map[string]interface{}{
  389. "_id": mgo.StringTOBsonId(groupTaskId),
  390. "s_status": "未开始",
  391. },
  392. map[string]interface{}{
  393. "$set": map[string]interface{}{
  394. "s_status": "进行中",
  395. "i_starttime": time.Now().Unix(),
  396. }},
  397. false, false)
  398. msg = "任务分发成功"
  399. UpdateSourceTaskInfo(sourcetaskinfo, groupTaskId, userTaskIdInfo) //用户分发任务成功后,同时更新任务临时表
  400. }
  401. }
  402. }
  403. }
  404. // UserTaskList 用户任务分发列表
  405. func (f *Front) UserTaskList() {
  406. defer qu.Catch()
  407. //groupId := f.GetString("s_groupid") //用户组id
  408. groupTaskId := f.GetString("grouptaskid") //用户组任务id
  409. if f.Method() == "POST" {
  410. start, _ := f.GetInteger("start")
  411. limit, _ := f.GetInteger("length")
  412. draw, _ := f.GetInteger("draw")
  413. status := f.GetString("status")
  414. login := f.GetString("login")
  415. //searchStr := f.GetString("search[value]")
  416. //search := strings.TrimSpace(searchStr)
  417. query := map[string]interface{}{
  418. "s_parentid": groupTaskId,
  419. }
  420. if status != "-1" { //任务状态
  421. query["s_status"] = status
  422. }
  423. if login != "-1" { //用户账号
  424. query["s_login"] = login
  425. }
  426. list, _ := Mgo.Find(TASKCOLLNAME, query, nil, nil, false, start, limit)
  427. count := Mgo.Count(TASKCOLLNAME, query)
  428. f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
  429. } else {
  430. sourcetaskinfo := f.GetString("s_sourcetaskinfo")
  431. //统计数据量
  432. isGiveNum := Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": true}) //已分发量
  433. isNotGiveNum := Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": false}) //待分发量
  434. isTagNum := Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_iscomplete": true}) //已标注数量
  435. isNotTagNum := Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_iscomplete": false}) //未标注数量
  436. allNum := Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_grouptaskid": groupTaskId}) //数据总量
  437. f.T["grouptaskid"] = groupTaskId
  438. f.T["allNum"] = allNum
  439. f.T["isGiveNum"] = isGiveNum
  440. f.T["isNotGiveNum"] = isNotGiveNum
  441. f.T["isTagNum"] = isTagNum
  442. f.T["isNotTagNum"] = isNotTagNum
  443. _ = f.Render("project/task_user_list.html", &f.T)
  444. }
  445. }
  446. // UserTaskRetrieve 用户任务收回
  447. func (f *Front) UserTaskRetrieve() {
  448. defer qu.Catch()
  449. user := f.GetSession("user").(map[string]interface{})
  450. username := qu.ObjToString(user["s_name"])
  451. userTaskId := f.GetString("taskid") //用户任务id
  452. sourceTaskInfo := f.GetString("s_sourcetaskinfo") //临时表
  453. msg, count, success := RetrieveTaskByUser(sourceTaskInfo, username, userTaskId)
  454. //userTask, _ := Mgo.FindById(TASKCOLLNAME, userTaskId, nil)
  455. f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
  456. }
  457. // UpdateSourceTaskInfo 用户分发任务成功后更新临时任务表
  458. func UpdateSourceTaskInfo(sourcetaskinfo, groupTaskId string, userTaskIdInfo map[string]Task) {
  459. defer qu.Catch()
  460. for userTaskId, tInfo := range userTaskIdInfo {
  461. userId := tInfo.UserId
  462. num := tInfo.GiveNum
  463. sess := Mgo.GetMgoConn()
  464. defer Mgo.DestoryMongoConn(sess)
  465. ch := make(chan bool, 5)
  466. wg := &sync.WaitGroup{}
  467. lock := &sync.Mutex{}
  468. query := map[string]interface{}{ //查找用户组任务id关联的临时数据
  469. "s_grouptaskid": groupTaskId,
  470. "b_isgiveuser": false,
  471. }
  472. updateArr := [][]map[string]interface{}{}
  473. qu.Debug("Query:", query)
  474. it := sess.DB(Mgo.DbName).C(sourcetaskinfo).Find(&query).Limit(int64(num)).Iter()
  475. n := 0
  476. for tmp := make(map[string]interface{}); it.Next(tmp); n++ {
  477. ch <- true
  478. wg.Add(1)
  479. go func(tmp map[string]interface{}) {
  480. defer func() {
  481. <-ch
  482. wg.Done()
  483. }()
  484. update := []map[string]interface{}{}
  485. update = append(update, map[string]interface{}{"_id": tmp["_id"]})
  486. update = append(update, map[string]interface{}{
  487. "$set": map[string]interface{}{
  488. "s_usertaskid": userTaskId,
  489. "s_userid": userId,
  490. "b_isgiveuser": true,
  491. "i_updatetime": time.Now().Unix(),
  492. },
  493. })
  494. lock.Lock()
  495. updateArr = append(updateArr, update)
  496. if len(updateArr) > 500 {
  497. Mgo.UpdateBulk(sourcetaskinfo, updateArr...)
  498. updateArr = [][]map[string]interface{}{}
  499. }
  500. lock.Unlock()
  501. }(tmp)
  502. if n%100 == 0 {
  503. qu.Debug("current:", n)
  504. }
  505. tmp = map[string]interface{}{}
  506. }
  507. wg.Wait()
  508. lock.Lock()
  509. if len(updateArr) > 0 {
  510. Mgo.UpdateBulk(sourcetaskinfo, updateArr...)
  511. updateArr = [][]map[string]interface{}{}
  512. }
  513. lock.Unlock()
  514. }
  515. }
  516. // RetrieveTaskByUser 用户收回任务
  517. func RetrieveTaskByUser(sourceTaskInfo, username string, userTaskIds ...string) (allMsg string, allCount int, allSuccess bool) {
  518. defer qu.Catch()
  519. allSuccess = true
  520. for _, taskId := range userTaskIds {
  521. query := map[string]interface{}{
  522. "s_usertaskid": taskId,
  523. "b_isgiveuser": true,
  524. "b_iscomplete": false,
  525. }
  526. count := Mgo.Count(sourceTaskInfo, query)
  527. success := false
  528. qu.Debug("Find Task Id:", taskId, " Retrieve Count:", count)
  529. if count > 0 {
  530. set := map[string]interface{}{
  531. "b_isgiveuser": false,
  532. "i_updatetime": time.Now().Unix(),
  533. }
  534. unset := map[string]interface{}{
  535. "s_usertaskid": "",
  536. "s_userid": "",
  537. }
  538. success = Mgo.Update(sourceTaskInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
  539. qu.Debug("User Task", taskId, "Retrieve Data:", success)
  540. if success {
  541. allCount += count
  542. //收回成功,更新task信息
  543. Mgo.UpdateById(TASKCOLLNAME, taskId, map[string]interface{}{
  544. "$set": map[string]interface{}{
  545. "s_status": "已完成",
  546. "i_updatetime": time.Now().Unix(),
  547. "s_updateperson": username,
  548. "s_progress": "100%",
  549. },
  550. "$inc": map[string]interface{}{ //更新数据量
  551. "i_givenum": -count,
  552. },
  553. })
  554. } else {
  555. allMsg += "任务ID:" + taskId + "更新失败"
  556. allSuccess = false
  557. }
  558. }
  559. }
  560. return
  561. }