maxiaoshan 3 vuotta sitten
vanhempi
commit
c151921f9d

+ 1 - 1
src/front/front.go

@@ -68,7 +68,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"`    //用户任务收回
+	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"`       //用户组任务列表(用户组权限)

+ 115 - 51
src/front/project.go

@@ -479,77 +479,141 @@ func (f *Front) ProjectTaskRetrieve() {
 	defer qu.Catch()
 	user := f.GetSession("user").(map[string]interface{})
 	username := qu.ObjToString(user["s_login"])
-	status := f.GetString("s_status")
 	groupTaskId := f.GetString("taskid")
-	//groupId := f.GetString("s_groupid")
 	sourceInfo := f.GetString("s_sourceinfo")
-	//sourcetaskinfo := f.GetString("s_sourcetaskinfo")
+	status := f.GetString("s_status")       //未开始、进行中
+	giveNum, _ := f.GetInteger("i_givenum") //收回时要更新的分发数据量
 	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
+	if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务
+		success = true
+	} 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{} //封装要回收的用户任务信息
+				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] = statusTmp
+						}
+					} else {
+						qu.Debug("Find User Task:", userTaskId, "Error")
 					}
-				} else {
-					qu.Debug("Find User Task:", userTaskId, "Error")
 				}
-			}
-			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(),
-						"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 = "用户组任务更新失败"
-					}
+				if len(userTaskIdStatus) > 0 { //收回用户组下所有用户信息
+					msg, count, success = RetrieveTaskByUser(sourceInfo, username, "已完成", userTaskIdStatus) //用户信息收回
+					giveNum = count
+				} else { //用户组下所有用户任务都已完成
+					success = true
+					giveNum = 0 //分发数据量不变
 				}
+			} else { //没有分配给用户任务
+				success = true
 			}
-		} else { //没有分配给用户任务
-			success = true
+		} else {
+			msg = "用户组任务查找失败"
 		}
-	} else {
-		msg = "用户组任务查找失败"
 	}
+	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})
 }
 
 // ProjectTaskClose 用户组任务关闭
 func (f *Front) ProjectTaskClose() {
 	defer qu.Catch()
-	success := false
 	user := f.GetSession("user").(map[string]interface{})
 	username := qu.ObjToString(user["s_login"])
-	status := f.GetString("s_status")
-	taskId := f.GetString("id")
-	if status == "已完成" {
-		//更新任务状态
-		success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
-			"$set": map[string]interface{}{
-				"s_status":       "已关闭",
-				"s_updateperson": username,
-				"i_updatetime":   time.Now().Unix(),
-				"s_progress":     "100%",
-			},
-		})
+	groupTaskId := f.GetString("taskid")
+	sourceInfo := f.GetString("s_sourceinfo")
+	status := f.GetString("s_status")       //未开始、进行中
+	giveNum, _ := f.GetInteger("i_givenum") //收回时要更新的分发数据量
+	msg := ""
+	success := false
+	count := 0
+	if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务
+		success = true
+	} 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{} //封装要回收的用户任务信息
+				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] = statusTmp
+						}
+					} else {
+						qu.Debug("Find User Task:", userTaskId, "Error")
+					}
+				}
+				if len(userTaskIdStatus) > 0 { //收回用户组下所有用户信息
+					msg, count, success = RetrieveTaskByUser(sourceInfo, username, "已关闭", userTaskIdStatus) //用户信息收回
+					giveNum = count
+				} else { //用户组下所有用户任务都已完成
+					success = true
+					giveNum = 0 //分发数据量不变
+				}
+			} else { //没有分配给用户任务
+				success = true
+			}
+		} else {
+			msg = "用户组任务查找失败"
+		}
+	}
+	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) {
+	defer qu.Catch()
+	//更新数据源
+	query := map[string]interface{}{
+		"s_grouptaskid": groupTaskId,
+	}
+	set := map[string]interface{}{
+		"b_isgivegroup": false,
+		"i_updatetime":  time.Now().Unix(),
+	}
+	unset := map[string]interface{}{
+		"s_groupid":     "",
+		"s_grouptaskid": "",
+	}
+	*success = util.Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, false)
+	//更新用户组任务
+	if *success {
+		taskSet := map[string]interface{}{
+			"s_status":       "已完成",
+			"s_updateperson": username,
+			"i_updatetime":   time.Now().Unix(),
+			"i_completetime": time.Now().Unix(),
+			"s_progress":     "100%",
+		}
+		if status == "未开始" {
+			taskSet["i_starttime"] = time.Now().Unix()
+		}
+		inc := map[string]interface{}{
+			"i_givenum": -count,
+		}
+		*success = util.Mgo.UpdateById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"$set": taskSet, "$inc": inc})
+		if !*success {
+			*msg = "更新用户组任务失败"
+		}
+	} else {
+		*msg = "更新数据源信息失败"
 	}
-	f.ServeJson(map[string]interface{}{"success": success})
 }
 
 // DeleleDataTagInfo 删除标注记录

+ 4 - 9
src/front/user.go

@@ -540,7 +540,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, "已完成", "user", userTaskIdStatus)
+	msg, count, success := RetrieveTaskByUser(sourceInfo, username, "已完成", userTaskIdStatus)
 	//userTask, _ := Mgo.FindById(TASKCOLLNAME, userTaskId, nil)
 	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
 }
@@ -555,7 +555,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, "已关闭", "user", userTaskIdStatus)
+	msg, count, success := RetrieveTaskByUser(sourceInfo, username, "已关闭", userTaskIdStatus)
 	f.ServeJson(map[string]interface{}{"success": success, "count": count, "msg": msg})
 }
 
@@ -619,8 +619,8 @@ func UpdateSourceInfo(sourceinfo, groupTaskId string, userTaskIdInfo map[string]
 	}
 }
 
-// RetrieveTaskByUser 用户收回任务
-func RetrieveTaskByUser(sourceInfo, username, stype, updateByWhom string, userTaskIdStatus map[string]string) (allMsg string, allCount int, allSuccess bool) {
+// RetrieveTaskByUser 用户收回任务,更新数据源
+func RetrieveTaskByUser(sourceInfo, username, stype string, userTaskIdStatus map[string]string) (allMsg string, allCount int, allSuccess bool) {
 	defer qu.Catch()
 	allSuccess = true
 	for taskId, status := range userTaskIdStatus {
@@ -651,11 +651,6 @@ func RetrieveTaskByUser(sourceInfo, username, stype, updateByWhom string, userTa
 				"s_usertaskid": "",
 				"s_userid":     "",
 			}
-			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 {

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

@@ -242,10 +242,10 @@
                     "data": "_id", width: "11%", render: function (val, a, row, pos) {
                         tmp = '<div>' +
                             '<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.s_groupid+'\')">收回</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+'\',\''+row.s_groupid +'\')">打回</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-default" onclick="closeTask(\'' + val + '\',\'' + row.s_status + '\')">关闭</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;' +
                             '</div>';
                         return tmp
                     }
@@ -354,12 +354,12 @@
     }
 
     // 收回
-    function retrieveTask(id, sourceinfo, status, groupid) {
+    function retrieveTask(id, sourceinfo, status,givenum) {
         if (status === "未开始" || status === "进行中") {
             $.ajax({
                 url: "/front/project/task/retrieve",
                 type: 'POST',
-                data: {"s_groupid": groupid, "s_sourceinfo": sourceinfo, "taskid": id, "s_status": status},
+                data: { "s_sourceinfo": sourceinfo, "taskid": id, "s_tatus": status,"i_givenum" :givenum},
                 success: function (r) {
                     if (r.success) {
                         ttable.api().ajax.reload()
@@ -374,12 +374,12 @@
     }
 
     // 打回
-    function repulseTask(id, sourceinfo, status, groupid) {
+    function repulseTask(id, sourceinfo,status) {
         if (status === "已完成") {
             $.ajax({
                 url: "/front/project/task/repulse",
                 type: 'POST',
-                data: {"s_groupid": groupid, "s_sourceinfo": sourceinfo, "taskid": id},
+                data: {"s_sourceinfo": sourceinfo, "taskid": id},
                 success: function (r) {
                     if (r.success) {
                         ttable.api().ajax.reload()
@@ -393,12 +393,12 @@
         }
     }
 
-    function closeTask(val, status) {
+    function closeTask(val, sourceinfo,status) {
         showConfirm("确认要关闭当前任务吗?", function () {
             $.ajax({
                 url: "/front/project/task/close",
                 type: 'POST',
-                data: {"s_status": status, "id": val},
+                data: {"s_sourceinfo": sourceinfo, "s_status": status, "taskid": id},
                 success: function (r) {
                     if (r.success) {
                         ttable.api().ajax.reload()

+ 2 - 2
src/web/templates/project/task_detail.html

@@ -395,10 +395,10 @@
             showTip("操作不允许")
         }
     }
-    function closeTask(val, status, sourceinfo) {
+    function closeTask(id, status, sourceinfo) {
         showConfirm("确认要关闭当前任务吗?", function () {
             $.ajax({
-                url: "",
+                url: "/front/user/task/close",
                 type: 'POST',
                 data: {"s_sourceinfo": sourceinfo, "taskid": id, "s_status": status},
                 success: function (r) {