Browse Source

质量评估-新增标的物-字段

zhengkun 3 years ago
parent
commit
0fc0b61d58
1 changed files with 106 additions and 4 deletions
  1. 106 4
      src/front/quality.go

+ 106 - 4
src/front/quality.go

@@ -1,6 +1,7 @@
 package front
 package front
 
 
 import (
 import (
+	"go.mongodb.org/mongo-driver/bson/primitive"
 	"log"
 	"log"
 	qu "qfw/util"
 	qu "qfw/util"
 	"qua"
 	"qua"
@@ -28,7 +29,7 @@ func QuaFieldScore(field_tag []string,coll_name string) bool {
 	q := map[string]interface{}{}
 	q := map[string]interface{}{}
 	sess := u.Mgo.GetMgoConn()
 	sess := u.Mgo.GetMgoConn()
 	defer u.Mgo.DestoryMongoConn(sess)
 	defer u.Mgo.DestoryMongoConn(sess)
-	it := sess.DB(u.Mgo.DbName).C(coll_name).Find(&q).Iter()
+	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++ {
 	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
 		if total%1000 == 0 {
 		if total%1000 == 0 {
@@ -80,25 +81,126 @@ func calculateFieldScore(tmp map[string]interface{},field_tag []string) (map[str
 	}
 	}
 
 
 
 
-	//综合比对是否正确 field_tag
+	//综合比对是否正确 field_tag   - 指定字段
 	isUse ,v_taginfo:= true,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{
 	for _,key :=range field_tag{
 		v_taginfo[key] = int64(1)
 		v_taginfo[key] = int64(1)
 		value := *qu.ObjToMap(update_dict[key])
 		value := *qu.ObjToMap(update_dict[key])
 		score := qu.Int64All(value["score"])
 		score := qu.Int64All(value["score"])
-		if score < 98 {
+		if score < 99 {
 			isUse = false //需要标注
 			isUse = false //需要标注
 			break
 			break
 		}
 		}
 	}
 	}
+
+	for k,v :=range update_dict{
+		data := *qu.ObjToMap(v)
+		score := qu.Int64All(data["score"])
+		if score < 99 {
+			b_isfield_tag[k] = true
+		}else {
+			b_isfield_tag[k] = false
+		}
+	}
+
 	b_istagging := !isUse
 	b_istagging := !isUse
 
 
+
+	//计算标的物-有效状态
+	b_isprchasing := calculatePrchasinglist(tmp)
+
 	return map[string]interface{}{
 	return map[string]interface{}{
 		"$set": map[string]interface{}{
 		"$set": map[string]interface{}{
 			"v_fieldscore": update_dict,
 			"v_fieldscore": update_dict,
+			"v_taginfo" :v_taginfo,
 			"b_cleartag" :false,
 			"b_cleartag" :false,
+			"b_isfield_tag":b_isfield_tag,
 			"b_istagging":b_istagging,
 			"b_istagging":b_istagging,
-			"v_taginfo" :v_taginfo,
+			"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 {
+			return b_ispurchasing
+		}
+		isListUserArr := []bool{}
+		for _,data := range purchasinglist{
+			isUse := isUsePurchasing(*qu.ObjToMap(data))
+			isListUserArr = append(isListUserArr,isUse)
+		}
+		b_ispurchasing = !isUseAllPurchasing(isListUserArr)
+		return b_ispurchasing
+	}
+
+	if purchasinglistA, okA := tmp["purchasinglist"].(primitive.A); okA {
+		if len(purchasinglistA)<=0 {
+			return b_ispurchasing
+		}
+		isListUserArr := []bool{}
+		for _,data := range purchasinglistA{
+			isUse := isUsePurchasing(*qu.ObjToMap(data))
+			isListUserArr = append(isListUserArr,isUse)
+		}
+		b_ispurchasing = !isUseAllPurchasing(isListUserArr)
+	}
+	return b_ispurchasing
+}
+
+//判断各个标的物是否可用  默认不可用
+func isUsePurchasing(data map[string]interface{}) bool{
+	isUse :=  false
+	num := 1
+	total_score := qu.Float64All(data["score"])
+	if total_score <= float64(0) {
+		return isUse
+	}
+	ner_data := *qu.ObjToMap(data["ner_data"])
+	NerGoods := *qu.ObjToMap(ner_data["NerGoods"])
+	for _,v := range NerGoods{
+		num++
+		total_score+=qu.Float64All(v)
+	}
+	//计算总平均分输
+	if total_score/float64(num) > float64(0.3) {
+		isUse = true
+	}
+	return isUse
+}
+//是否整体可用 - 默认不可用
+func isUseAllPurchasing(isListUserArr []bool) bool{
+	isUse :=  false
+	total_num := len(isListUserArr)
+	ok_num :=0
+	for _,v := range isListUserArr {
+		if v {
+			ok_num++
+		}
+	}
+	if ok_num==0 {
+		return isUse
+	}
+	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) {
+			isUse = true
+		}
+	}else if total_num>7 {
+		if correct>=float64(0.5) {
+			isUse = true
+		}
+	}else {
+
+	}
+	return isUse
 }
 }