maxiaoshan 3 years ago
parent
commit
9fc26dab04
3 changed files with 51 additions and 37 deletions
  1. 24 15
      src/front/project.go
  2. 20 15
      src/front/user.go
  3. 7 7
      src/web/templates/project/project_clear.html

+ 24 - 15
src/front/project.go

@@ -243,7 +243,7 @@ func (f *Front) ProjectTaskList() {
 			}
 		}
 		qu.Debug("Query:", query)
-		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, map[string]interface{}{"_id": -1}, nil, false, start, limit)
 		count := util.Mgo.Count(util.TASKCOLLNAME, query)
 		for _, l := range *list {
 			if status := qu.ObjToString(l["s_status"]); status == "进行中" { //更新任务进度
@@ -330,7 +330,7 @@ func (f *Front) ProjectTaskSave() {
 		msg = "用户组信息解析失败"
 	} else {
 		qu.Debug("用户组信息:", groupArr, stype)
-		if stype == "notag" { //如果分发的是达标数据且进行了初步质检,将没有质检记录的字段从v_taginfo标注记录中删除
+		if stype != "tag" { //如果分发的是达标数据或者全部数据且进行了初步质检,将没有质检记录的字段从v_taginfo标注记录中删除
 			DeleleDataTagInfo(sourceinfo)
 		}
 		for _, groupInfo := range groupArr {
@@ -488,6 +488,7 @@ func (f *Front) ProjectTaskRetrieve() {
 	count := 0
 	if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务
 		success = true
+		count = giveNum
 	} else { //进行中的用户组任务需更新其下用户信息
 		groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"v_sonids": 1})
 		if groupTask != nil && len(*groupTask) > 0 {
@@ -504,8 +505,11 @@ func (f *Front) ProjectTaskRetrieve() {
 						qu.Debug("Find User Task:", userTaskId, "Error")
 					}
 				}
+				qu.Debug("userTaskIdStatus:", len(userTaskIdStatus))
 				if len(userTaskIdStatus) > 0 { //收回用户组下所有用户信息
-					msg, count, success = RetrieveTaskByUser(sourceInfo, username, "已完成", userTaskIdStatus) //用户信息收回
+					msg, _, success = RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus) //用户信息收回
+					//用户组收回时,若已有用户任务再未开始时收回或关闭,调用RetrieveTaskByUser返回的总收回量count就遗漏了用户收回或关闭任务的量
+					qu.Debug(msg, count, success)
 					giveNum = count
 				} else { //用户组下所有用户任务都已完成
 					success = true
@@ -519,7 +523,7 @@ func (f *Front) ProjectTaskRetrieve() {
 		}
 	}
 	if success { //所有用户信息收回成功后,更新用户组任务相关信息
-		UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, giveNum, &msg, &success)
+		UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, "已完成", giveNum, &msg, &success)
 	}
 	qu.Debug(success, count, msg)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "count": count})
@@ -537,28 +541,31 @@ func (f *Front) ProjectTaskClose() {
 	msg := ""
 	success := false
 	count := 0
-	if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务
+	if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务;已完成只更新用户组任务
+		success = true
+	} else if status == "已完成" {
 		success = true
+		giveNum = 0
 	} else { //进行中的用户组任务需更新其下用户信息
 		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{} //封装要回收的用户任务信息
+				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 != "已关闭" { //已完成和已关闭的任务不收回
+						if statusTmp := qu.ObjToString((*userTask)["s_status"]); statusTmp != "已关闭" { //已关闭的任务不更新
 							userTaskIdStatus[userTaskId] = statusTmp
 						}
 					} else {
 						qu.Debug("Find User Task:", userTaskId, "Error")
 					}
 				}
-				if len(userTaskIdStatus) > 0 { //收回用户组下所有用户信息
-					msg, count, success = RetrieveTaskByUser(sourceInfo, username, "已关闭", userTaskIdStatus) //用户信息收回
+				if len(userTaskIdStatus) > 0 { //关闭用户组下所有用户信息
+					msg, count, success = RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus) //用户信息收回
 					giveNum = count
-				} else { //用户组下所有用户任务都已完成
+				} else { //用户组下所有用户任务都已关闭
 					success = true
 					giveNum = 0 //分发数据量不变
 				}
@@ -569,16 +576,17 @@ func (f *Front) ProjectTaskClose() {
 			msg = "用户组任务查找失败"
 		}
 	}
-	if success { //所有用户信息收回成功后,更新用户组任务相关信息
-		UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, giveNum, &msg, &success)
+	if success { //所有用户信息关闭成功后,更新用户组任务相关信息
+		UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, "已关闭", giveNum, &msg, &success)
 	}
 	qu.Debug(success, count, msg)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "count": count})
 }
 
 // UpdateGroupTaskAndSourceInfo 更新用户组任务相关信息
-func UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status string, count int, msg *string, success *bool) {
+func UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, stype string, count int, msg *string, success *bool) {
 	defer qu.Catch()
+	qu.Debug("GroupTaskStatus:", status, "	Act:", stype)
 	//更新数据源
 	query := map[string]interface{}{
 		"s_grouptaskid": groupTaskId,
@@ -591,16 +599,17 @@ func UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status stri
 		"s_groupid":     "",
 		"s_grouptaskid": "",
 	}
-	*success = util.Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
+	*success = util.Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, true)
 	//更新用户组任务
 	if *success {
 		taskSet := map[string]interface{}{
-			"s_status":       "已完成",
+			"s_status":       stype,
 			"s_updateperson": username,
 			"i_updatetime":   time.Now().Unix(),
 			"i_completetime": time.Now().Unix(),
 			"s_progress":     "100%",
 		}
+
 		if status == "未开始" {
 			taskSet["i_starttime"] = time.Now().Unix()
 		}

+ 20 - 15
src/front/user.go

@@ -549,7 +549,7 @@ 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 := RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus)
 	//userTask, _ := Mgo.FindById(TASKCOLLNAME, userTaskId, nil)
 	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
 }
@@ -564,7 +564,7 @@ func (f *Front) UserTaskClose() {
 	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 := RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus)
 	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
 }
 
@@ -628,29 +628,34 @@ func UpdateSourceInfo(sourceinfo, groupTaskId string, userTaskIdInfo map[string]
 	}
 }
 
-// RetrieveTaskByUser 用户收回任务,更新数据源
-func RetrieveTaskByUser(sourceInfo, username, stype string, userTaskIdStatus map[string]string) (allMsg string, allCount int, allSuccess bool) {
+// RetrieveCloseTaskByUser 用户收回任务、关闭,更新数据源
+func RetrieveCloseTaskByUser(sourceInfo, username 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)
-		qu.Debug("Find Task Id:", taskId, " Retrieve Count:", count)
+	for taskId, userTaskStatus := range userTaskIdStatus {
+		/*
+			收回时userTaskStatus:未开始、进行中
+			关闭时userTaskStatus:未开始
+		*/
+		qu.Debug(taskId, userTaskStatus)
 		//用户任务要更新的信息
 		taskSet := map[string]interface{}{
-			"s_status":       stype,
+			"s_status":       "已完成", //收回、关闭时默认任务状态已完成
 			"i_updatetime":   time.Now().Unix(),
 			"s_updateperson": username,
 			"s_progress":     "100%",
 			"i_completetime": time.Now().Unix(),
 		}
-		if status == "未开始" { //未开始打回的任务手动添加开始时间
+		if userTaskStatus == "未开始" { //未开始的任务手动添加开始时间
 			taskSet["i_starttime"] = time.Now().Unix()
+			taskSet["s_status"] = "已关闭"
 		}
+		query := map[string]interface{}{
+			"s_usertaskid": taskId,
+			"b_istag":      false,
+		}
+		count := Mgo.Count(sourceInfo, query)
+		qu.Debug("Find Task Id:", taskId, " Retrieve Count:", count)
 		if count > 0 { //更新数据源信息
 			set := map[string]interface{}{
 				"i_updatetime": time.Now().Unix(),
@@ -660,7 +665,7 @@ func RetrieveTaskByUser(sourceInfo, username, stype string, userTaskIdStatus map
 				"s_usertaskid": "",
 				"s_userid":     "",
 			}
-			success := Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
+			success := Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, true)
 			qu.Debug("Update SourceInfo:", success)
 			if success {
 				allCount += count

+ 7 - 7
src/web/templates/project/project_clear.html

@@ -244,8 +244,8 @@
                             '<a class="btn btn-sm btn-primary" href="/front/user/task/list?grouptaskid=' + val + '&s_sourceinfo='+row.s_sourceinfo+'">查看</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-warning" onclick="retrieveTask(\''+val+'\',\''+row.s_sourceinfo+'\',\''+row.s_status+'\',\''+row.i_givenum+'\')">收回</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-info">质检</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-info" onclick="repulseTask(\''+val+'\',\''+row.s_sourceinfo+'\',\''+row.s_status+'\')">打回</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-default" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">关闭</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-info" onclick="repulseTask(\''+val+'\',\''+row.s_sourceinfo+'\',\''+row.s_status+'\',\''+row.i_givenum+'\')">打回</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-default" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\',\''+row.i_givenum+'\')">关闭</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
                     }
@@ -359,7 +359,7 @@
             $.ajax({
                 url: "/front/project/task/retrieve",
                 type: 'POST',
-                data: { "s_sourceinfo": sourceinfo, "taskid": id, "s_tatus": status,"i_givenum" :givenum},
+                data: { "s_sourceinfo": sourceinfo, "taskid": id, "s_status": status,"i_givenum" :givenum},
                 success: function (r) {
                     if (r.success) {
                         location.reload()
@@ -374,12 +374,12 @@
     }
 
     // 打回
-    function repulseTask(id, sourceinfo,status) {
+    function repulseTask(id, sourceinfo,status,givenum) {
         if (status === "已完成") {
             $.ajax({
                 url: "/front/project/task/repulse",
                 type: 'POST',
-                data: {"s_sourceinfo": sourceinfo, "taskid": id},
+                data: {"s_sourceinfo": sourceinfo, "taskid": id, "s_tatus": status,"i_givenum" :givenum},
                 success: function (r) {
                     if (r.success) {
                         location.reload()
@@ -393,12 +393,12 @@
         }
     }
 
-    function closeTask(val, sourceinfo,status) {
+    function closeTask(id, sourceinfo,status,givenum) {
         showConfirm("确认要关闭当前任务吗?", function () {
             $.ajax({
                 url: "/front/project/task/close",
                 type: 'POST',
-                data: {"s_sourceinfo": sourceinfo, "s_status": status, "taskid": id},
+                data: {"s_sourceinfo": sourceinfo, "s_status": status, "taskid": id,"i_givenum":givenum},
                 success: function (r) {
                     if (r.success) {
                         location.reload()