浏览代码

Merge branch 'dev2.0' of http://192.168.3.207:8080/data_processing/data_validation into dev2.0

* 'dev2.0' of http://192.168.3.207:8080/data_processing/data_validation:
  xg
  xg
Jianghan 3 年之前
父节点
当前提交
87da5dacfc
共有 5 个文件被更改,包括 117 次插入66 次删除
  1. 1 0
      src/front/front.go
  2. 68 2
      src/front/group.go
  3. 36 36
      src/front/quality.go
  4. 12 28
      src/front/user.go
  5. 二进制
      src/web/model/taskexportmodel.xlsx

+ 1 - 0
src/front/front.go

@@ -75,6 +75,7 @@ type Front struct {
 	groupTaskListByGroup xweb.Mapper `xweb:"/front/group/task/list"`       //用户组任务列表(用户组权限)
 	groupTaskDeliver     xweb.Mapper `xweb:"/front/group/task/deliver"`    //用户组任务交付
 	groupTaskExport      xweb.Mapper `xweb:"/front/group/task/export"`     //用户组任务导出
+	groupUserTaskList    xweb.Mapper `xweb:"/front/group/user/task/list"`  //用户组下用户任务列表
 }
 
 func (f *Front) Index() {

+ 68 - 2
src/front/group.go

@@ -93,6 +93,67 @@ func (f *Front) GroupTaskListByAdmin() {
 	}
 }
 
+// GroupUserTaskList 用户任务分发列表
+func (f *Front) GroupUserTaskList() {
+	defer qu.Catch()
+	//groupId := f.GetString("s_groupid") //用户组id
+	groupTaskId := f.GetString("grouptaskid") //用户组任务id
+	qu.Debug("groupTaskId:", groupTaskId)
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		status := f.GetString("s_status")
+		login := f.GetString("s_login")
+		//searchStr := f.GetString("search[value]")
+		//search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"s_stype":    "user",
+			"s_parentid": groupTaskId,
+		}
+		if status != "-1" { //任务状态
+			query["s_status"] = status
+		}
+		if login != "-1" { //用户账号
+			query["s_login"] = login
+		}
+		qu.Debug("Query:", query)
+		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 == "进行中" { //更新任务进度
+				giveNum := qu.IntAll(l["i_givenum"])
+				sourceinfo := qu.ObjToString(l["s_sourceinfo"])
+				tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": mongodb.BsonIdToSId(l["_id"]), "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 {
+		sourceinfo := f.GetString("s_sourceinfo")
+		qu.Debug(sourceinfo)
+		//统计数据量
+		isGiveNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": true})     //已分发量
+		isNotGiveNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": false}) //待分发量
+		isTagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": true})           //已标注数量
+		isNotTagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": false})       //未标注数量
+		allNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId})                              //数据总量
+		qu.Debug("数据总量:", allNum, "已分发量:", isGiveNum, "待分发量:", isNotGiveNum, "已标注量:", isTagNum, "未标注量:", isNotTagNum)
+		f.T["grouptaskid"] = groupTaskId
+		f.T["allNum"] = allNum
+		f.T["isGiveNum"] = isGiveNum
+		f.T["isNotGiveNum"] = isNotGiveNum
+		f.T["isTagNum"] = isTagNum
+		f.T["isNotTagNum"] = isNotTagNum
+		_ = f.Render("project/task_detail.html", &f.T)
+	}
+}
+
 // GroupTaskDeliver 用户组任务交付
 func (f *Front) GroupTaskDeliver() {
 	defer qu.Catch()
@@ -173,7 +234,7 @@ func (f *Front) GroupTaskExport() {
 	qu.Debug("Query:", query)
 	count := util.Mgo.Count(util.TASKCOLLNAME, query)
 	if count > 0 {
-		file, err := xlsx.OpenFile("taskexportmodel.xlsx")
+		file, err := xlsx.OpenFile("web/model/taskexportmodel.xlsx")
 		if err != nil {
 			qu.Debug("Load Excel Model Error")
 			f.ServeJson("加载脚本失败")
@@ -188,6 +249,7 @@ func (f *Front) GroupTaskExport() {
 			"s_groupname":    1,
 			"s_personname":   1,
 			"i_givenum":      1,
+			"s_status":       1,
 			"i_starttime":    1,
 			"i_completetime": 1,
 		}
@@ -201,6 +263,7 @@ func (f *Front) GroupTaskExport() {
 			groupname := qu.ObjToString(l["s_groupname"])
 			personname := qu.ObjToString(l["s_personname"])
 			givenum := qu.IntAll(l["i_givenum"])
+			status := qu.ObjToString(l["s_status"])
 			starttimestr := ""
 			if starttime := qu.Int64All(l["i_starttime"]); starttime != 0 {
 				starttimestr = qu.FormatDateByInt64(&starttime, qu.Date_Full_Layout)
@@ -216,6 +279,7 @@ func (f *Front) GroupTaskExport() {
 			row.AddCell().SetValue(groupname)
 			row.AddCell().SetValue(personname)
 			row.AddCell().SetValue(givenum)
+			row.AddCell().SetValue(status)
 			row.AddCell().SetValue(starttimestr)
 			row.AddCell().SetValue(completetimestr)
 		}
@@ -227,9 +291,11 @@ func (f *Front) GroupTaskExport() {
 			f.ServeJson("导出失败")
 			return
 		}
+		arr := strings.Split(fname, "/")
+		f.ResponseWriter.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", arr[len(arr)-1]))
 		f.ServeFile(fname)
 		go func(path string) {
-			time.Sleep(time.Minute * 10)
+			time.Sleep(time.Second * 30)
 			os.Remove(path)
 		}(fname)
 	} else {

+ 36 - 36
src/front/quality.go

@@ -8,11 +8,12 @@ import (
 	"time"
 	u "util"
 )
+
 func (f *Front) QuaScoreData() {
 	defer qu.Catch()
 	coll_name := f.GetString("coll_name")
 	field_tag := f.GetSlice("field_tag")
-	rep := QuaFieldScore(field_tag,coll_name)
+	rep := QuaFieldScore(field_tag, coll_name)
 	f.ServeJson(map[string]interface{}{
 		"rep": rep,
 	})
@@ -27,7 +28,7 @@ func QuaFieldScore(field_tag []string, coll_name string) bool {
 	sess := u.Mgo.GetMgoConn()
 	defer u.Mgo.DestoryMongoConn(sess)
 	it := sess.DB(u.Mgo.DbName).C(coll_name).Find(&q).Sort("_id").Iter()
-	updateFieldScore,total := [][]map[string]interface{}{},0
+	updateFieldScore, total := [][]map[string]interface{}{}, 0
 	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
 		if total%1000 == 0 {
 			log.Println("当前数量:", total)
@@ -78,8 +79,8 @@ func calculateFieldScore(tmp map[string]interface{}, field_tag []string) map[str
 	}
 
 	//综合比对是否正确 field_tag   - 指定字段
-	isUse ,v_taginfo:= true,make(map[string]interface{},0)
-	b_isfield_tag := make(map[string]interface{},0)
+	isUse, v_taginfo := true, make(map[string]interface{}, 0)
+	b_isfield_tag := make(map[string]interface{}, 0)
 	for _, key := range field_tag {
 		v_taginfo[key] = int64(1)
 		value := *qu.ObjToMap(update_dict[key])
@@ -89,12 +90,12 @@ func calculateFieldScore(tmp map[string]interface{}, field_tag []string) map[str
 		}
 	}
 
-	for k,v :=range update_dict{
+	for k, v := range update_dict {
 		data := *qu.ObjToMap(v)
 		score := qu.Int64All(data["score"])
 		if score < 99 {
 			b_isfield_tag[k] = true
-		}else {
+		} else {
 			b_isfield_tag[k] = false
 		}
 	}
@@ -105,41 +106,39 @@ func calculateFieldScore(tmp map[string]interface{}, field_tag []string) map[str
 
 	return map[string]interface{}{
 		"$set": map[string]interface{}{
-			"v_fieldscore": update_dict,
-			"v_taginfo" :v_taginfo,
-			"b_cleartag" :false,
-			"b_isfield_tag":b_isfield_tag,
-			"b_istagging":b_istagging,
-			"b_isprchasing":b_isprchasing,
+			"v_fieldscore":  update_dict,
+			"v_taginfo":     v_taginfo,
+			"b_isfield_tag": b_isfield_tag,
+			"b_istagging":   b_istagging,
+			"b_isprchasing": b_isprchasing,
 		},
 	}
 }
 
-
 //标的物-计算
 func calculatePrchasinglist(tmp map[string]interface{}) bool {
 	b_ispurchasing := true //默认需要标注
 	if purchasinglist, ok := tmp["purchasinglist"].([]interface{}); ok {
-		if len(purchasinglist)<=0 {
+		if len(purchasinglist) <= 0 {
 			return b_ispurchasing
 		}
 		isListUserArr := []bool{}
-		for _,data := range purchasinglist{
+		for _, data := range purchasinglist {
 			isUse := isUsePurchasing(*qu.ObjToMap(data))
-			isListUserArr = append(isListUserArr,isUse)
+			isListUserArr = append(isListUserArr, isUse)
 		}
 		b_ispurchasing = !isUseAllPurchasing(isListUserArr)
 		return b_ispurchasing
 	}
 
 	if purchasinglistA, okA := tmp["purchasinglist"].(primitive.A); okA {
-		if len(purchasinglistA)<=0 {
+		if len(purchasinglistA) <= 0 {
 			return b_ispurchasing
 		}
 		isListUserArr := []bool{}
-		for _,data := range purchasinglistA{
+		for _, data := range purchasinglistA {
 			isUse := isUsePurchasing(*qu.ObjToMap(data))
-			isListUserArr = append(isListUserArr,isUse)
+			isListUserArr = append(isListUserArr, isUse)
 		}
 		b_ispurchasing = !isUseAllPurchasing(isListUserArr)
 	}
@@ -147,8 +146,8 @@ func calculatePrchasinglist(tmp map[string]interface{}) bool {
 }
 
 //判断各个标的物是否可用  默认不可用
-func isUsePurchasing(data map[string]interface{}) bool{
-	isUse :=  false
+func isUsePurchasing(data map[string]interface{}) bool {
+	isUse := false
 	num := 1
 	total_score := qu.Float64All(data["score"])
 	if total_score <= float64(0) {
@@ -156,9 +155,9 @@ func isUsePurchasing(data map[string]interface{}) bool{
 	}
 	ner_data := *qu.ObjToMap(data["ner_data"])
 	NerGoods := *qu.ObjToMap(ner_data["NerGoods"])
-	for _,v := range NerGoods{
+	for _, v := range NerGoods {
 		num++
-		total_score+=qu.Float64All(v)
+		total_score += qu.Float64All(v)
 	}
 	//计算总平均分输
 	if total_score/float64(num) > float64(0.3) {
@@ -166,33 +165,34 @@ func isUsePurchasing(data map[string]interface{}) bool{
 	}
 	return isUse
 }
+
 //是否整体可用 - 默认不可用
-func isUseAllPurchasing(isListUserArr []bool) bool{
-	isUse :=  false
+func isUseAllPurchasing(isListUserArr []bool) bool {
+	isUse := false
 	total_num := len(isListUserArr)
-	ok_num :=0
-	for _,v := range isListUserArr {
+	ok_num := 0
+	for _, v := range isListUserArr {
 		if v {
 			ok_num++
 		}
 	}
-	if ok_num==0 {
+	if ok_num == 0 {
 		return isUse
 	}
-	correct := float64(ok_num)/float64(total_num)
-	if total_num<=2 {
-		if correct>=float64(1) {
+	correct := float64(ok_num) / float64(total_num)
+	if total_num <= 2 {
+		if correct >= float64(1) {
 			isUse = true
 		}
-	} else if total_num>2 && total_num<=6 {
-		if correct>=float64(0.6) {
+	} else if total_num > 2 && total_num <= 6 {
+		if correct >= float64(0.6) {
 			isUse = true
 		}
-	}else if total_num>7 {
-		if correct>=float64(0.5) {
+	} else if total_num > 7 {
+		if correct >= float64(0.5) {
 			isUse = true
 		}
-	}else {
+	} else {
 
 	}
 	return isUse

+ 12 - 28
src/front/user.go

@@ -477,39 +477,38 @@ func (f *Front) UserTaskSave() {
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
 
-// UserTaskList 用户任务分发列表
+// UserTaskList 用户任务列表
 func (f *Front) UserTaskList() {
 	defer qu.Catch()
-	//groupId := f.GetString("s_groupid") //用户组id
-	groupTaskId := f.GetString("grouptaskid") //用户组任务id
-	qu.Debug("groupTaskId:", groupTaskId)
+	user := f.GetSession("user").(map[string]interface{})
+	s_personid := qu.ObjToString(user["_id"])
 	if f.Method() == "POST" {
 		start, _ := f.GetInteger("start")
 		limit, _ := f.GetInteger("length")
 		draw, _ := f.GetInteger("draw")
 		status := f.GetString("s_status")
-		login := f.GetString("s_login")
-		//searchStr := f.GetString("search[value]")
-		//search := strings.TrimSpace(searchStr)
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
 		query := map[string]interface{}{
 			"s_stype":    "user",
-			"s_parentid": groupTaskId,
+			"s_personid": s_personid,
 		}
 		if status != "-1" { //任务状态
 			query["s_status"] = status
 		}
-		if login != "-1" { //用户账号
-			query["s_login"] = login
+		if search != "" {
+			query["$or"] = []interface{}{
+				map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
+			}
 		}
 		qu.Debug("Query:", query)
 		count := Mgo.Count(TASKCOLLNAME, query)
 		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"])
 				giveNum := qu.IntAll(l["i_givenum"])
 				sourceinfo := qu.ObjToString(l["s_sourceinfo"])
-				tagNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_userid": personid, "b_istag": true})
+				tagNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": mgo.BsonIdToSId(l["_id"]), "b_istag": true})
 				progressFloat := float64(tagNum) / float64(giveNum)
 				value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", progressFloat), 64)
 				progress := fmt.Sprint(value*100) + "%"
@@ -520,22 +519,7 @@ func (f *Front) UserTaskList() {
 		}
 		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
 	} else {
-		sourceinfo := f.GetString("s_sourceinfo")
-		qu.Debug(sourceinfo)
-		//统计数据量
-		isGiveNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": true})     //已分发量
-		isNotGiveNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_isgiveuser": false}) //待分发量
-		isTagNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": true})           //已标注数量
-		isNotTagNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": false})       //未标注数量
-		allNum := Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId})                              //数据总量
-		qu.Debug("数据总量:", allNum, "已分发量:", isGiveNum, "待分发量:", isNotGiveNum, "已标注量:", isTagNum, "未标注量:", isNotTagNum)
-		f.T["grouptaskid"] = groupTaskId
-		f.T["allNum"] = allNum
-		f.T["isGiveNum"] = isGiveNum
-		f.T["isNotGiveNum"] = isNotGiveNum
-		f.T["isTagNum"] = isTagNum
-		f.T["isNotTagNum"] = isNotTagNum
-		_ = f.Render("project/task_detail.html", &f.T)
+		_ = f.Render("project/task_user_list.html", &f.T)
 	}
 }
 

二进制
src/web/model/taskexportmodel.xlsx