maxiaoshan há 3 anos atrás
pai
commit
023ec84fea
3 ficheiros alterados com 94 adições e 79 exclusões
  1. 1 0
      src/front/front.go
  2. 39 60
      src/front/project.go
  3. 54 19
      src/front/user.go

+ 1 - 0
src/front/front.go

@@ -67,6 +67,7 @@ type Front struct {
 	userTaskSave     xweb.Mapper `xweb:"/front/user/task/save"`     //用户任务分发
 	userTaskList     xweb.Mapper `xweb:"/front/user/task/list"`     //用户任务列表
 	userTaskRetrieve xweb.Mapper `xweb:"/front/user/task/retrieve"` //用户任务收回
+	userTaskClose    xweb.Mapper `xweb:"/front/user/task/close"`    //用户任务收回
 
 	groupTaskListByAdmin xweb.Mapper `xweb:"/front/group/admin/task/list"` //用户组任务列表(系统管理员权限)
 	groupTaskListByGroup xweb.Mapper `xweb:"/front/group/task/list"`       //用户组任务列表(用户组权限)

+ 39 - 60
src/front/project.go

@@ -475,80 +475,59 @@ func (f *Front) ProjectTaskRepulse() {
 }
 
 // ProjectTaskRetrieve 用户组任务收回
-// TODO 关联用户组下所有用户任务的收回
 func (f *Front) ProjectTaskRetrieve() {
 	defer qu.Catch()
-	success := false
-	msg := ""
-	num := 0
 	user := f.GetSession("user").(map[string]interface{})
 	username := qu.ObjToString(user["s_login"])
 	status := f.GetString("s_status")
-	taskId := f.GetString("id")
-	groupId := f.GetString("s_groupid")
-	sourceinfo := f.GetString("s_sourceinfo")
-	sourcetaskinfo := f.GetString("s_sourcetaskinfo")
-	if status == "已完成" {
-		count1 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_groupid": groupId, "b_istag": false})
-		count2 := util.Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_groupid": groupId, "b_iscomplete": false})
-		if count1 != count2 { //数据源表和临时表数量不一致
-			qu.Debug("Count Is Not Same:", sourceinfo+":", count1, sourceinfo+":", count2)
-		}
-		num = count1
-		if count1 == 0 { //收回数据量为0
-			success = true
-			//更新任务状态、完成时间
-			success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
-				"$set": map[string]interface{}{
-					"s_status":       "已完成",
-					"s_updateperson": username,
-					"i_updatetime":   time.Now().Unix(),
-					"i_completetime": time.Now().Unix(),
-					"s_progress":     "100%",
-				},
-			})
-			if !success {
-				msg += "更新任务:" + taskId + "失败"
+	groupTaskId := f.GetString("taskid")
+	//groupId := f.GetString("s_groupid")
+	sourceInfo := f.GetString("s_sourceinfo")
+	//sourcetaskinfo := f.GetString("s_sourcetaskinfo")
+	msg := ""
+	success := false
+	count := 0
+	groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"v_sonids": 1})
+	if groupTask != nil && len(*groupTask) > 0 {
+		if sonIds, ok := (*groupTask)["v_sonids"].([]interface{}); ok && len(sonIds) > 0 { //更新所有用户任务信息
+			userTaskIdStatus := map[string]string{} //封装要回收的用户任务信息
+			for _, sId := range sonIds {
+				userTaskId := qu.ObjToString(sId)
+				userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_tatus": 1})
+				if userTask != nil && len(*userTask) > 0 {
+					if statusTmp := qu.ObjToString((*userTask)["s_status"]); statusTmp != "已完成" && statusTmp != "已关闭" { //已完成和已关闭的任务不收回
+						userTaskIdStatus[userTaskId] = status
+					}
+				} else {
+					qu.Debug("Find User Task:", userTaskId, "Error")
+				}
 			}
-		} else {
-			//1、更新源数据表
-			success1 := util.Mgo.Update(sourceinfo, map[string]interface{}{"s_groupid": groupId, "b_istag": false}, map[string]interface{}{
-				"$set": map[string]interface{}{
-					"b_isgivegroup": false,
-					"i_updatetime":  time.Now().Unix(),
-				},
-				"$unset": map[string]interface{}{
-					"s_groupid": "",
-				},
-			}, false, true)
-			//2、删除临时任务表中对应未完成数据
-			success2 := util.Mgo.Del(sourcetaskinfo, map[string]interface{}{"s_groupid": groupId, "b_iscomplete": false})
-			if success1 && success2 {
-				//更新任务状态、完成时间
-				success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
-					"$set": map[string]interface{}{
+			if len(userTaskIdStatus) > 0 {
+				msg, count, success = RetrieveTaskByUser(sourceInfo, username, "已完成", "group", userTaskIdStatus) //用户信息收回
+				if success {                                                                                     //所有用户信息收回成功后,更新用户组任务相关信息
+					set := map[string]interface{}{
 						"s_status":       "已完成",
 						"s_updateperson": username,
 						"i_updatetime":   time.Now().Unix(),
 						"i_completetime": time.Now().Unix(),
-					},
-				})
-				if !success {
-					msg += "更新任务:" + taskId + "失败"
-				}
-			} else {
-				qu.Debug("Update "+sourceinfo+":", success1, "	Delete "+sourcetaskinfo+":", success2)
-				if !success1 {
-					msg += "更新" + sourceinfo + "数据失败;"
-				}
-				if !success2 {
-					msg += "删除" + sourcetaskinfo + "数据失败;"
+						"s_progress":     "100%",
+					}
+					inc := map[string]interface{}{
+						"i_givenum": -count,
+					}
+					success := util.Mgo.UpdateById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"$set": set, "$inc": inc})
+					if !success {
+						msg = "用户组任务更新失败"
+					}
 				}
 			}
+		} else { //没有分配给用户任务
+			success = true
 		}
+	} else {
+		msg = "用户组任务查找失败"
 	}
-	qu.Debug("Task Retrieve:", success, "	num:", num, "	Msg:", msg)
-	f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "num": num})
+	f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "count": count})
 }
 
 // ProjectTaskClose 用户组任务关闭

+ 54 - 19
src/front/user.go

@@ -466,7 +466,7 @@ func (f *Front) UserTaskList() {
 		}
 		qu.Debug("Query:", query)
 		count := Mgo.Count(TASKCOLLNAME, query)
-		list, _ := Mgo.Find(TASKCOLLNAME, query, nil, nil, false, start, limit)
+		list, _ := Mgo.Find(TASKCOLLNAME, query, map[string]interface{}{"_id": -1}, nil, false, start, limit)
 		for _, l := range *list {
 			if status := qu.ObjToString(l["s_status"]); status == "进行中" { //更新任务进度
 				personid := qu.ObjToString(l["s_personid"])
@@ -512,11 +512,25 @@ func (f *Front) UserTaskRetrieve() {
 	sourceInfo := f.GetString("s_sourceinfo") //数据源表
 	status := f.GetString("s_status")
 	userTaskIdStatus := map[string]string{userTaskId: status}
-	msg, count, success := RetrieveTaskByUser(sourceInfo, username, userTaskIdStatus)
+	msg, count, success := RetrieveTaskByUser(sourceInfo, username, "已完成", "user", userTaskIdStatus)
 	//userTask, _ := Mgo.FindById(TASKCOLLNAME, userTaskId, nil)
 	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
 }
 
+// UserTaskClose 用户任务关闭
+func (f *Front) UserTaskClose() {
+	defer qu.Catch()
+	user := f.GetSession("user").(map[string]interface{})
+	username := qu.ObjToString(user["s_login"])
+	userTaskId := f.GetString("taskid") //用户任务id
+	qu.Debug("User Task Id:", userTaskId)
+	sourceInfo := f.GetString("s_sourceinfo") //数据源表
+	status := f.GetString("s_status")
+	userTaskIdStatus := map[string]string{userTaskId: status}
+	msg, count, success := RetrieveTaskByUser(sourceInfo, username, "已关闭", "user", userTaskIdStatus)
+	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
+}
+
 // UpdateSourceInfo 用户分发任务成功后更新数据源表
 func UpdateSourceInfo(sourceinfo, groupTaskId string, userTaskIdInfo map[string]Task) {
 	defer qu.Catch()
@@ -578,50 +592,71 @@ func UpdateSourceInfo(sourceinfo, groupTaskId string, userTaskIdInfo map[string]
 }
 
 // RetrieveTaskByUser 用户收回任务
-func RetrieveTaskByUser(sourceInfo, username string, userTaskIdStatus map[string]string) (allMsg string, allCount int, allSuccess bool) {
+func RetrieveTaskByUser(sourceInfo, username, stype, updateByWhom string, userTaskIdStatus map[string]string) (allMsg string, allCount int, allSuccess bool) {
 	defer qu.Catch()
 	allSuccess = true
 	for taskId, status := range userTaskIdStatus {
+		qu.Debug(taskId, status)
 		query := map[string]interface{}{
 			"s_usertaskid": taskId,
 			"b_istag":      false,
 		}
 		count := Mgo.Count(sourceInfo, query)
-		success := false
 		qu.Debug("Find Task Id:", taskId, " Retrieve Count:", count)
-		if count > 0 {
+		//用户任务要更新的信息
+		taskSet := map[string]interface{}{
+			"s_status":       stype,
+			"i_updatetime":   time.Now().Unix(),
+			"s_updateperson": username,
+			"s_progress":     "100%",
+			"i_completetime": time.Now().Unix(),
+		}
+		if status == "未开始" { //未开始打回的任务手动添加开始时间
+			taskSet["i_starttime"] = time.Now().Unix()
+		}
+		if count > 0 { //更新数据源信息
 			set := map[string]interface{}{
 				"i_updatetime": time.Now().Unix(),
 				"b_isgiveuser": false,
 			}
-			if status == "未开始" { //未开始打回的任务手动添加开始时间
-				set["i_starttime"] = time.Now().Unix()
-			}
 			unset := map[string]interface{}{
 				"s_usertaskid": "",
 				"s_userid":     "",
 			}
-			success = Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
-			qu.Debug("User Task", taskId, "Retrieve Data:", success)
+			if updateByWhom == "group" { //通过用户组收回,更新用户组相关信息
+				set["b_isgivegroup"] = false
+				unset["s_groupid"] = ""
+				unset["s_grouptaskid"] = ""
+			}
+			success := Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
+			qu.Debug("Update SourceInfo:", success)
 			if success {
 				allCount += count
 				//收回成功,更新task信息
-				Mgo.UpdateById(TASKCOLLNAME, taskId, map[string]interface{}{
-					"$set": map[string]interface{}{
-						"s_status":       "已完成",
-						"i_updatetime":   time.Now().Unix(),
-						"s_updateperson": username,
-						"s_progress":     "100%",
-						"i_completetime": time.Now().Unix(),
-					},
+				success = Mgo.UpdateById(TASKCOLLNAME, taskId, map[string]interface{}{
+					"$set": taskSet,
 					"$inc": map[string]interface{}{ //更新数据量
 						"i_givenum": -count,
 					},
 				})
+				if !success {
+					allMsg += "任务ID:" + taskId + "更新数据失败;"
+					allSuccess = false
+				}
+				qu.Debug("Update:", taskId, success)
 			} else {
-				allMsg += "任务ID:" + taskId + "更新失败"
+				allMsg += "任务ID:" + taskId + "更新数据源失败;"
+				allSuccess = false
+			}
+		} else { //没有要收回的数据,只更新任务信息
+			success := Mgo.UpdateById(TASKCOLLNAME, taskId, map[string]interface{}{
+				"$set": taskSet,
+			})
+			if !success {
+				allMsg += "任务ID:" + taskId + "更新数据失败;"
 				allSuccess = false
 			}
+			qu.Debug("Update:", taskId, success)
 		}
 	}
 	return