maxiaoshan 3 lat temu
rodzic
commit
31ea2d407d

+ 1 - 0
src/front/front.go

@@ -57,6 +57,7 @@ type Front struct {
 	//project
 	projectList              xweb.Mapper `xweb:"/front/project"`                   //项目列表
 	projectSave              xweb.Mapper `xweb:"/front/project/save"`              //新增项目
+	projectComplete          xweb.Mapper `xweb:"/front/project/complete"`          //新增完成
 	projectQualityAssessment xweb.Mapper `xweb:"/front/project/qualityAssessment"` //数据质量评估
 	projectTaskSave          xweb.Mapper `xweb:"/front/project/task/save"`         //用户组任务分发
 	projectTaskList          xweb.Mapper `xweb:"/front/project/task/list"`         //用户组任务分发列表

+ 37 - 18
src/front/group.go

@@ -3,8 +3,10 @@ package front
 import (
 	"fmt"
 	"github.com/tealeg/xlsx"
+	"mongodb"
 	"os"
 	qu "qfw/util"
+	"strconv"
 	"strings"
 	"time"
 	"util"
@@ -63,8 +65,25 @@ func (f *Front) GroupTaskListByAdmin() {
 				map[string]interface{}{"s_departname": map[string]interface{}{"$regex": search}},
 			}
 		}
-		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
 		count := util.Mgo.Count(util.TASKCOLLNAME, query)
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, map[string]interface{}{"_id": -1}, nil, false, start, limit)
+		for _, l := range *list {
+			if status := qu.ObjToString(l["s_status"]); status == "进行中" { //更新任务进度
+				//groupId := qu.ObjToString(l["s_groupid"])
+				groupTaskId := mongodb.BsonIdToSId(l["_id"])
+				giveNum := qu.IntAll(l["i_givenum"])
+				sourceinfo := qu.ObjToString(l["s_sourceinfo"])
+				//tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_isgivegroup": true, "s_grouptaskid": groupTaskId, "b_istag": true})
+				tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": true})
+				progressFloat := float64(tagNum) / float64(giveNum)
+				value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", progressFloat), 64)
+				progress := fmt.Sprint(value*100) + "%"
+				l["s_progress"] = progress
+				//同步数据库
+				util.Mgo.UpdateById(util.TASKCOLLNAME, l["_id"], map[string]interface{}{"$set": map[string]interface{}{"s_progress": progress}})
+			}
+		}
+
 		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
 	} else {
 		_ = f.Render("project/task_list.html")
@@ -76,42 +95,42 @@ func (f *Front) GroupTaskDeliver() {
 	defer qu.Catch()
 	user := f.GetSession("user").(map[string]interface{})
 	username := qu.ObjToString(user["s_login"]) //当前登录用户
-	success := true
+	success := false
 	msg := ""
-	taskId := f.GetString("taskid") //用户组任务id
-	qu.Debug("Group Task ID:", taskId)
-	groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, taskId, map[string]interface{}{"v_sonids": 1})
+	groupTaskId := f.GetString("taskid") //用户组任务id
+	qu.Debug("Group Task ID:", groupTaskId)
+	groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"v_sonids": 1})
 	if groupTask != nil && len(*groupTask) > 0 {
 		sonUserIds := (*groupTask)["v_sonids"].([]interface{})
 		if len(sonUserIds) > 0 {
-			for _, id := range sonUserIds {
-				userTaskId := qu.ObjToString(id)
-				userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
-				status := qu.ObjToString((*userTask)["s_status"])
-				if status != "已完成" || status != "已关闭" {
-					success = false
-					msg = "任务暂未完成"
-				}
-			}
-			if success { //用户组下用户任务全部完成,更新该用户组任务状态
-				success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
+			sourceInfo := qu.ObjToString((*groupTask)["s_sourceinfo"])
+			dataCount := util.Mgo.Count(sourceInfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": false})
+			taskCount := util.Mgo.Count(util.TASKCOLLNAME, map[string]interface{}{"s_parentid": groupTaskId, "s_status": map[string]interface{}{"$in": []string{"未开始", "进行中"}}})
+			if dataCount == 0 && taskCount == 0 {
+				success = util.Mgo.UpdateById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{
 					"$set": map[string]interface{}{
 						"i_completetime": time.Now().Unix(),
 						"s_updateperson": username,
 						"i_updatetime":   time.Now().Unix(),
 						"s_status":       "已完成",
+						"s_progress":     "100%",
 					},
 				})
 				if !success {
 					msg = "更新任务信息失败"
 				}
+			} else {
+				if taskCount != 0 {
+					msg += "用户任务未全部完成;"
+				}
+				if dataCount != 0 {
+					msg += "数据未全部标注;"
+				}
 			}
 		} else {
-			success = false
 			msg = "任务暂未分配"
 		}
 	} else {
-		success = false
 		msg = "查询任务失败"
 	}
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})

+ 42 - 1
src/front/project.go

@@ -179,6 +179,48 @@ func (f *Front) ProjectSave() {
 	}
 }
 
+// ProjectComplete 项目提交完成
+func (f *Front) ProjectComplete() {
+	defer qu.Catch()
+	user := f.GetSession("user").(map[string]interface{})
+	username := qu.ObjToString(user["s_login"]) //当前登录用户
+	success := false
+	msg := ""
+	projectId := f.GetString("s_projectid")
+	sourceInfo := f.GetString("s_sourceinfo")
+
+	query := map[string]interface{}{
+		"s_projectid": projectId,
+		"s_status": map[string]interface{}{
+			"$in": []string{"未开始", "进行中"},
+		},
+	}
+	taskCount := util.Mgo.Count(util.TASKCOLLNAME, query)                             //查询未完成的用户组和用户任务
+	dataCount := util.Mgo.Count(sourceInfo, map[string]interface{}{"b_istag": false}) //未标注数据个数
+	qu.Debug("No Tag Count:", dataCount)
+	if dataCount == 0 && taskCount == 0 { //全部完成
+		success = util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectId, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"s_status":       "已完成",
+				"i_completetime": time.Now().Unix(),
+				"s_updateperson": username,
+				"i_updatetime":   time.Now().Unix(),
+			},
+		})
+		if !success {
+			msg = "更新项目失败"
+		}
+	} else {
+		if taskCount != 0 {
+			msg += "任务未全部完成;"
+		}
+		if dataCount != 0 {
+			msg += "数据未全部标注;"
+		}
+	}
+	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
+}
+
 // ProjectQualityAssessment 数据质量评估
 func (f *Front) ProjectQualityAssessment() {
 	defer qu.Catch()
@@ -418,7 +460,6 @@ func (f *Front) ProjectGetEntnameList() {
 }
 
 // ProjectTaskRepulse 用户组任务打回
-// TODO 关联用户组下所有用户任务的打回
 func (f *Front) ProjectTaskRepulse() {
 	defer qu.Catch()
 	success := false

+ 6 - 6
src/web/templates/project/task_list.html

@@ -135,9 +135,9 @@
                     "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.i_givenum+'\')">收回</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-warning" onclick="retrieveTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">收回</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-info">质检</a>&nbsp;&nbsp;' +
-                            '<a class="btn btn-sm btn-info" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\',\''+row.i_givenum+'\')">关闭</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-info" onclick="closeTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">关闭</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
                     }
@@ -164,12 +164,12 @@
     });
 
     // 收回
-    function retrieveTask(id, sourceinfo, status, giveNum) {
+    function retrieveTask(id, sourceinfo, status) {
         if (status === "未开始" || status === "进行中") {
             $.ajax({
                 url: "/front/project/task/retrieve",
                 type: 'POST',
-                data: {"s_status": status, "taskid": id, "s_sourceinfo": sourceinfo, "i_givenum": giveNum},
+                data: {"s_status": status, "taskid": id, "s_sourceinfo": sourceinfo},
                 success: function (r) {
                     if (r.success) {
                         ttable.api().ajax.reload()
@@ -182,13 +182,13 @@
             showTip("操作不允许")
         }
     }
-    function closeTask(id, sourceinfo,status,givenum) {
+    function closeTask(id, sourceinfo,status) {
         if (status === "未开始") {
             showConfirm("确认要关闭当前任务吗?", function () {
                 $.ajax({
                     url: "/front/project/task/close",
                     type: 'POST',
-                    data: {"s_sourceinfo": sourceinfo, "s_status": status, "taskid": id,"i_givenum":givenum},
+                    data: {"s_sourceinfo": sourceinfo, "s_status": status, "taskid": id},
                     success: function (r) {
                         if (r.success) {
                             location.reload()