maxiaoshan 6 жил өмнө
parent
commit
cfdbf290b6

+ 1 - 1
src/config.json

@@ -10,7 +10,7 @@
     "mergetablealias": "projectset_v1",
     "saveresult": false,
     "fieldscore": true,
-    "qualityaudit": false,
+    "qualityaudit": true,
     "iscltlog": false,
     "brandgoods": true,
     "udptaskid": "5be107e600746bf92debf080",

+ 31 - 34
src/jy/admin/audit/dataaudit.go

@@ -19,11 +19,10 @@ func init() {
 		//s_coll := c.Query("s_coll")
 		c.HTML(200, "audit_auditone.html", gin.H{"name": name})
 	})
-	Admin.POST("/audit/auditone", AuditOne)
+	Admin.POST("/audit/auditonefield", AuditOneField)
 	Admin.POST("/audit/buyerclass", BuyerClass) //采购单位分类
 	Admin.POST("/audit/addsave", AddSave)       //新增
 	Admin.POST("/audit/auditsave", AuditSave)   //保存
-
 }
 
 func AuditData(c *gin.Context) {
@@ -46,31 +45,23 @@ func AuditData(c *gin.Context) {
 	}
 }
 
-func AuditOne(c *gin.Context) {
-	name, _ := c.GetPostForm("name")
-	coll, _ := c.GetPostForm("s_coll")
-	source, _ := c.GetPostForm("source")
+func AuditOneField(c *gin.Context) {
+	field, _ := c.GetPostForm("field")
 	limitstr, _ := c.GetPostForm("length")
 	startstr, _ := c.GetPostForm("start")
 	start, _ := strconv.Atoi(startstr)
 	limit, _ := strconv.Atoi(limitstr)
-	query := make(map[string]interface{})
-	if source == "-1" && coll != "" { //外层
-		query = map[string]interface{}{
-			name + "_err": map[string]interface{}{
-				"$exists": true,
-			},
-			name + "_isaudit": false,
-		}
-		data, _ := Mgo.Find(coll, query, `{"_id":-1}`, nil, false, start, limit)
-		count := Mgo.Count(coll, query)
-		for _, d := range *data {
-			d["name"] = d[name]
-		}
-		c.JSON(200, gin.H{"data": data, "recordsFiltered": count, "recordsTotal": count})
-	} else { //分包
-		c.JSON(200, gin.H{"data": map[string]interface{}{}, "recordsFiltered": 0, "recordsTotal": 0})
+	query := map[string]interface{}{
+		"field":     field,
+		"ispackage": false,
+	}
+	data, _ := Mgo.Find("audit_err", query, `{"_id":-1}`, nil, false, start, limit)
+	for _, d := range *data {
+		timeStr := time.Unix(d["l_createtime"].(int64), 0).Format(Date_Short_Layout)
+		d["l_createtime"] = timeStr
 	}
+	count := Mgo.Count("audit_err", query)
+	c.JSON(200, gin.H{"data": data, "recordsFiltered": count, "recordsTotal": count})
 }
 
 func BuyerClass(c *gin.Context) {
@@ -102,9 +93,10 @@ func AddSave(c *gin.Context) {
 
 func AuditSave(c *gin.Context) {
 	field, _ := c.GetPostForm("field")
-	name, _ := c.GetPostForm("name")
-	_id, _ := c.GetPostForm("id")
 	coll, _ := c.GetPostForm("coll")
+	name, _ := c.GetPostForm("val")
+	_id, _ := c.GetPostForm("id")
+	eid, _ := c.GetPostForm("eid")
 	update := make(map[string]interface{})
 	if field == "buyer" || field == "winner" { //更新buyer或winner库,并保存到redis
 		if field == "buyer" {
@@ -117,27 +109,32 @@ func AuditSave(c *gin.Context) {
 		update["pici"] = time.Now().Unix()
 		update["s_source"] = "抽取"
 		//更新结果表数据
-		b1 := Mgo.UpdateById(coll, _id, map[string]interface{}{
+		b1 := Mgo.UpdateById(coll, eid, map[string]interface{}{
 			"$set": map[string]interface{}{
-				field + "_isaudit": true,
-				field:              name,
+				field: name,
 			},
 		})
+		log.Println("update coll", coll, "id", eid, field, "after audit", b1)
 		//更新原有的winner或buyer库
 		b2 := Mgo.Update(field, `{"name":"`+name+`"}`, map[string]interface{}{
 			"$set": update}, true, false)
-		log.Println("Audit--Update "+field, b2)
+		log.Println("Audit--Update ", field, "coll", b2)
 		//更新redis
-		p := redis.PutCKV(field, field+"_"+name, 1)
-		log.Println("Audit--Update "+field+" redis:", p)
+		b3 := redis.PutCKV(field, field+"_"+name, 1)
+		log.Println("Audit--Update ", field, " redis:", b3)
+		//删除audit_err数据
+		b4 := Mgo.Del("audit_err", `{"_id":"`+_id+`"}`)
+		log.Println("Del audit_err id", _id, b4)
 		c.JSON(200, gin.H{"rep": b1})
 	} else {
-		b3 := Mgo.UpdateById(coll, _id, map[string]interface{}{
+		b5 := Mgo.UpdateById(coll, eid, map[string]interface{}{
 			"$set": map[string]interface{}{
-				field + "_isaudit": true,
-				field:              name,
+				field: name,
 			},
 		})
-		c.JSON(200, gin.H{"rep": b3})
+		//删除audit_err数据
+		b4 := Mgo.Del("audit_err", `{"_id":"`+_id+`"}`)
+		log.Println("Del audit_err id", _id, b4)
+		c.JSON(200, gin.H{"rep": b5})
 	}
 }

+ 78 - 38
src/jy/extract/extract.go

@@ -1027,7 +1027,7 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
 
 		//质量审核
 		if ok, _ := ju.Config["qualityaudit"].(bool); ok {
-			e.QualityAudit(tmp)
+			e.QualityAudit(tmp, _id)
 		}
 		if e.IsExtractCity { //城市抽取
 			b, p, c, d := e.TransmitData(tmp, _id) //抽取省份城市
@@ -1154,62 +1154,101 @@ func funcAnalysis(j *ju.Job) (*map[string]interface{}, map[string][]*ju.ExtField
 	return doc, result, _id, values
 }
 
-func (e *ExtractTask) QualityAudit(resulttmp map[string]interface{}) {
+func (e *ExtractTask) QualityAudit(resulttmp map[string]interface{}, _id string) {
 	defer qu.Catch()
 	//获取审核字段
 	for _, field := range e.AuditFields {
-		//1.分包
-		if resulttmp["package"] != nil {
-			packagedata := resulttmp["package"].(map[string]map[string]interface{})
-			for _, val := range packagedata {
-				if val[field] != nil {
-					fv := qu.ObjToString(val[field])
-					if fv != "" {
-						if field == "buyer" || field == "winner" { //field为buyer和winner时特殊处理,先从Redis中查,有直接通过,没有走匹配规则
-							e.RedisMatch(field, fv, val) //redis匹配
-						} else { //除了buyer和winner,其他字段走规则匹配
-							e.RuleMatch(field, fv, val)
-						}
-					}
-				}
-			}
-		}
+		//1.分包 暂时不处理
+		//		if resulttmp["package"] != nil {
+		//			packagedata := resulttmp["package"].(map[string]map[string]interface{})
+		//			for _, val := range packagedata {
+		//				if val[field] != nil {
+		//					fv := qu.ObjToString(val[field])
+		//					if fv != "" {
+		//						if field == "buyer" || field == "winner" { //field为buyer和winner时特殊处理,先从Redis中查,有直接通过,没有走匹配规则
+		//							e.RedisMatch(field, fv, _id, true) //redis匹配
+		//						} else { //除了buyer和winner,其他字段走规则匹配
+		//							e.RuleMatch(field, fv, _id, true)
+		//						}
+		//					}
+		//				}
+		//			}
+		//		}
 		//2.外围
-		if resulttmp[field] != nil {
-			fv := qu.ObjToString(resulttmp[field])
-			if fv != "" {
-				if field == "buyer" || field == "winner" { //field为buyer和winner时特殊处理,先从Redis中查,有直接通过,没有走匹配规则
-					e.RedisMatch(field, fv, resulttmp) //redis匹配
-				} else { //除了buyer和winner,其他字段走规则匹配
-					e.RuleMatch(field, fv, resulttmp)
-				}
+		//if resulttmp[field] != nil {
+		//fv := qu.ObjToString(resulttmp[field])
+		fv := "中标单位123"
+		if fv != "" {
+			if field == "buyer" || field == "winner" { //field为buyer和winner时特殊处理,先从Redis中查,有直接通过,没有走匹配规则
+				e.RedisMatch(field, fv, _id, false) //redis匹配
+			} else { //除了buyer和winner,其他字段走规则匹配
+				e.RuleMatch(field, fv, _id, false)
 			}
 		}
+		//}
 	}
 }
 
 //Redis匹配
-func (e *ExtractTask) RedisMatch(field, fv string, val map[string]interface{}) {
+func (e *ExtractTask) RedisMatch(field, fv, _id string, isPackage bool) {
 	defer qu.Catch()
+	//先匹配redis,在匹配企业名称库
 	i := redis.GetInt(field, field+"_"+fv) //查找redis
-	if i == 0 {                            //reids未找到,执行规则匹配
-		val[field+"_isredis"] = false
-		e.RuleMatch(field, fv, val) //规则匹配
-	} else { //redis找到,打标识存库
-		val[field+"_isredis"] = true
+	if i == 0 {
+		has := e.GetFromBusinessLab(fv) //查企业名称库
+		if !has {                       //没有保存到审核表
+			go func(_id, field, fv string, isPackage bool) {
+				save := map[string]interface{}{
+					"extractid":    _id,
+					"field":        field,
+					"val":          fv,
+					"l_createtime": time.Now().Unix(),
+					"ispackage":    isPackage,
+					"extractcoll":  e.TaskInfo.TrackColl,
+				}
+				db.Mgo.Save("audit_err", save) //保存
+			}(_id, field, fv, isPackage)
+		}
+	} else {
+		return
 	}
+
+	//	if i == 0 {                            //reids未找到,执行规则匹配
+	//		val[field+"_isredis"] = false
+	//		e.RuleMatch(field, fv, val) //规则匹配
+	//	} else { //redis找到,打标识存库
+	//		val[field+"_isredis"] = true
+	//	}
+}
+
+//查企业库
+func (e *ExtractTask) GetFromBusinessLab(name string) bool {
+	//db.Mgo.FindOne()
+	return false
 }
 
 //规则匹配
-func (e *ExtractTask) RuleMatch(field, fieldval string, tmpMap map[string]interface{}) {
+func (e *ExtractTask) RuleMatch(field, fieldval, _id string, isPackage bool) {
 	defer qu.Catch()
 	if fieldval != "" {
 		SMap := e.StartMatch(field, fieldval)
-		//SMap.AddKey(field+"_isaudit", false)
 		for _, k := range SMap.Keys {
-			tmpMap[k] = SMap.Map[k]
+			if k == "err" {
+				go func(_id, field, fv string, isPackage bool) {
+					save := map[string]interface{}{
+						"extractid":    _id,
+						"field":        field,
+						"val":          fv,
+						"l_createtime": time.Now().Unix(),
+						"ispackage":    isPackage,
+						"extractcoll":  e.TaskInfo.TrackColl,
+					}
+					db.Mgo.Save("audit_err", save) //保存
+				}(_id, field, fieldval, isPackage)
+			}
+			//tmpMap[k] = SMap.Map[k]
 		}
-		tmpMap[field+"_isaudit"] = false //添加字段未审核信息
+		//tmpMap[field+"_isaudit"] = false //添加字段未审核信息
 	}
 }
 
@@ -1232,7 +1271,7 @@ func (e *ExtractTask) StartMatch(field, text string) *pretreated.SortMap {
 			for _, c := range classMap { //class
 				classid := qu.BsonIdToSId(c["_id"])
 				classPrerule := qu.ObjToString(c["s_class_prerule"])
-				savefield := qu.ObjToString(c["s_savefield"])                                   //保存字段
+				savefield := qu.ObjToString(c["s_savefield"])
 				textAfterClassPrerule := ju.PreFilter(textAfterRecogFieldPrerule, classPrerule) //class的前置过滤
 				if textAfterClassPrerule != "" {
 					lock.Lock()
@@ -1247,7 +1286,8 @@ func (e *ExtractTask) StartMatch(field, text string) *pretreated.SortMap {
 							b, _ := ju.RecogAnalyRules(textAfterRulePrerule, rule)
 							if b { //匹配到一个分类下某个规则时,不再继续匹配
 								if savefield != "" { //保存字段不为空,存储代码信息
-									SMap.AddKey(field+"_"+savefield, s_name)
+									//SMap.AddKey(field+"_"+savefield, s_name)
+									SMap.AddKey(savefield, s_name)
 								}
 								break L
 							}

+ 1 - 0
src/main.go

@@ -28,6 +28,7 @@ func init() {
 	//初始化redis
 	redis.InitRedisBySize(qu.ObjToString(util.Config["redis"]), 50, 30, 240)
 	//初始化elastic连接
+	//"winner=172.17.145.179:2710,buyer=172.17.145.179:2711"
 	elastic.InitElasticSize(qu.ObjToString(util.Config["elasticsearch"]), qu.IntAllDef(util.Config["elasticPoolSize"], 30))
 }
 

+ 3 - 3
src/main_test.go

@@ -28,8 +28,8 @@ func Test_han(t *testing.T) {
 }
 func Test_task(t *testing.T) {
 	Mgo = MgoFactory(1, 3, 120, "192.168.3.207:27082", "extract_kf")
-	//extract.StartExtractTaskId("5b8f804025e29a290415aee1")
-	extract.StartExtractTestTask("5c528686698414055c47b115", "5a524c3d40d2d9bbe8e9cef0", "1", "mxs_v2", "mxs_v2")
+	//extract.StartExtractTaskId("5b8f804025e29a290415aee1")5c528686698414055c47b115
+	extract.StartExtractTestTask("5b8f804025e29a290415aee1", "5a53966e40d2d9bbe8f7d30a", "1", "mxs_v2", "mxs_v2")
 	//extract.StartExtractTestTask("5c3d75c96984142998eb00e1", "5c2a3d28a5cb26b9b76144dd", "100", "mxs_v3", "mxs_v3")
 	time.Sleep(5 * time.Second)
 }
@@ -47,7 +47,7 @@ func Test_reg(t *testing.T) {
 	log.Println(tmp)
 }
 
-func Test_reg(t *testing.T) {
+func Test_reg1(t *testing.T) {
 	context := `sss<input  name="AgentCode" size="30" maxsize="50" value="91370800688271668P" class="textbox">
     dfdf<input type="hidden" name="AgentCode" size="30" maxsize="50" value="tttt" class="textbox"></input>`
 	reg := regexp.MustCompile(`<\s*input.*value=['"](.[^'"]+).+>`)

+ 29 - 58
src/web/templates/admin/audit_auditone.html

@@ -29,8 +29,12 @@
 		            <table id="dataauditTable" class="table table-bordered table-hover">
 		              <thead>
 		              <tr>
-		                <th>名称</th>
-						<th>是否审核</th>
+		                <th>字段名称</th>
+						<th>字段值</th>
+						<th>ExtractID</th>
+						<th>结果表</th>
+						<th>分包</th>
+						<th>时间</th>
 						<th>操作</th>
 		              </tr>
 		              </thead>
@@ -87,13 +91,11 @@
 <script>
 menuActive("recogfield")
 var id = "";
+var eid = "";
 var classifymap = {};
 var bid = 1;
+var coll = "";
 var field = {{.name}}
-var s_coll =sessionStorage.getItem("s_coll");
-if(s_coll == null){
-	s_coll = "";
-}
 $(function () {
 	ttable=$('#dataauditTable').DataTable({
 		"paging"      : true,
@@ -104,58 +106,33 @@ $(function () {
 		"autoWidth"   : false,
 		"serverSide"  : true,
 		"ajax": {
-			"url": "/admin/audit/auditone",
+			"url": "/admin/audit/auditonefield",
 			"type": "post",
-			"data": {"name":{{.name}},"s_coll":s_coll}
+			"data": {"field":{{.name}}}
 		},
 		"language": {
             "url": "/res/dist/js/dataTables.chinese.lang"
         },
 		"columns": [
-            { "data": "name"},
-			{ "data": "_id",render:function(val,a,row){
-				return "否";
+            { "data": "field"},
+			{ "data": "val"},
+			{ "data": "extractid"},
+			{ "data": "extractcoll"},
+			{ "data": "ispackage",render:function(val,a,row){
+				if(val){
+					return "是"
+				}else{
+					return "否"
+				}
 			}},
+			{ "data": "l_createtime"},
 			{ "data": "_id",render:function(val,a,row){
-					return '<a class="btn btn-sm btn-success" href="#" onclick="audit(\''+row.name+'\',\''+val+'\')">审核</a>'
+					return '<a class="btn btn-sm btn-success" href="#" onclick="audit(\''+row.val+'\',\''+val+'\',\''+row.extractid+'\',\''+row.extractcoll+'\')">审核</a>'
 			}}
-       	],
-		"fnServerParams": function (e) {  
-			var source=$("#datasource").val();
-			if(source){
-				e.source = source;
-			}else{
-				e.source = "-1";
-			}
-			
-		}
-	});
-	ttable.on('init.dt', function () {
-		//结果表
-		var result ="<div class='form-group'><label for='name'>结果表:</label>"+
-			"<input id='resultcoll' class='form-control input-sm' value=\'"+s_coll+"\' placeholder='请输入要查询的表...'></input>&nbsp;&nbsp;"+
-			"<button class='btn btn-primary' onclick='search()'>查询</button><div>";
-		$("#dataauditTable_filter").prepend("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
-		$("#dataauditTable_filter").prepend(result);
-		//内外层数据
-		var opt="<option value='-1'>外层</option>"+
-				"<option value='1'>内层</option>";
-		var select="<div class='form-group'><label for='name'>数据来源:</label>"+
-			"<select id='datasource' onchange='checkclick(this.value)' class='form-control input-sm'>"+
-			opt+
-			"</select></div>"
-		$("#dataauditTable_filter").prepend("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
-		$("#dataauditTable_filter").prepend(select);
-		//样式
-		
-		$("#dataauditTable_wrapper .col-sm-6").css({width:"100%"});
+       	]
 	});
 })
 
-function checkclick(urgency){
-	ttable.ajax.reload();
-}
-
 function addaudit(){
 	//查询分类数据
 	bid = 1;
@@ -226,24 +203,25 @@ function addsave(auditname,parentclass,childclass){
 }
 
 //审核
-function audit(name,_id){
+function audit(val,_id,extractid,extractcoll){
 	bid = 2;
 	getbuyerclass();
 	id = _id;
-	$("#auditname").val(name);
+	eid = extractid;
+	coll = extractcoll;
+	$("#auditname").val(val);
 	$("#audittitleinfo").html("审核");
 	$("#modal-info-auditdata").modal("show");
 }
 //审核确认
 function auditsave(parentclass,childclass){
-	var name = $("#auditname").val();
+	var val = $("#auditname").val();
 	$("#modal-info-auditdata").modal("hide");
-	var coll = sessionStorage.getItem("s_coll");
 	showConfirm("确定通过?", function() {
 		$.ajax({
 			url:"/admin/audit/auditsave",
 			type:"post",
-			data:{"coll":coll,"field":field,"name":name,"parentclass":parentclass,"childclass":childclass,"id":id},
+			data:{"field":field,"val":val,"parentclass":parentclass,"childclass":childclass,"id":id,"eid":eid,"coll":coll},
 			success:function(r){
 				if(r.rep){				
 					ttable.ajax.reload();
@@ -269,11 +247,4 @@ $(document).ready(function(){
 		}
 	});
 });
-
-//查询
-function search(){
-	var coll=$("#resultcoll").val();
-	sessionStorage.setItem("s_coll",coll);
-	window.location.href="/admin/audit/dataaudit?name="+{{.name}}+"&s_coll="+coll;
-}
 </script>