|
@@ -15,7 +15,8 @@ import (
|
|
|
log "github.com/donnie4w/go-logger/logger"
|
|
|
)
|
|
|
|
|
|
-type RegLuaInfo struct { //正则或脚本信息
|
|
|
+type RegLuaInfo struct {
|
|
|
+ //正则或脚本信息
|
|
|
Code, Name, Field string //
|
|
|
RuleText string //
|
|
|
IsLua bool //
|
|
@@ -75,16 +76,17 @@ type ExtractTask struct {
|
|
|
IsFileField bool //是否开启附件抽取
|
|
|
FileFields *sync.Map //抽取附件属性组
|
|
|
|
|
|
- ResultChanel chan bool //抽取结果详情
|
|
|
- ResultArr [][]map[string]interface{} //抽取结果详情
|
|
|
- BidChanel chan bool //抽取结果
|
|
|
- BidArr [][]map[string]interface{} //抽取结果
|
|
|
- BidTotal int //结果数量
|
|
|
+ ResultChanel chan bool //抽取结果详情
|
|
|
+ sync.RWMutex
|
|
|
+ ResultArr [][]map[string]interface{} //抽取结果详情
|
|
|
+ BidChanel chan bool //抽取结果
|
|
|
+ BidArr [][]map[string]interface{} //抽取结果
|
|
|
+ BidTotal int //结果数量
|
|
|
|
|
|
RecogFieldMap map[string]map[string]interface{} //识别字段
|
|
|
FidClassMap map[string][]map[string]interface{} //分类
|
|
|
- CidRuleMap map[string][]map[string]interface{} //规则
|
|
|
- AuditFields []string //需要审核的字段名称
|
|
|
+ CidRuleMap map[string][]map[string]interface{} //规则
|
|
|
+ AuditFields []string //需要审核的字段名称
|
|
|
|
|
|
ProvinceMap map[string]string //省全称简称(key:浙江省 val:浙江)
|
|
|
ProvinceBriefMap map[string]*Province //省简称对应的省信息(key:浙江 val:&Province{})
|
|
@@ -128,6 +130,7 @@ type ClearLua struct {
|
|
|
}
|
|
|
|
|
|
type ClearTask struct {
|
|
|
+ sync.RWMutex
|
|
|
Id string //任务id
|
|
|
Content string //信息内容
|
|
|
ClearTaskInfo *ClearTaskInfo //任务信息
|
|
@@ -553,7 +556,7 @@ func (e *ExtractTask) InitTag() {
|
|
|
}
|
|
|
sort.Sort(tab.Items)
|
|
|
//ju.TagdbTable[fname] = &tab
|
|
|
- ju.TagdbTable.Store(fname,&tab)
|
|
|
+ ju.TagdbTable.Store(fname, &tab)
|
|
|
}
|
|
|
}
|
|
|
//正则标签库
|
|
@@ -571,7 +574,7 @@ func (e *ExtractTask) InitTag() {
|
|
|
}
|
|
|
sort.Sort(tab.Items)
|
|
|
//ju.TagdbTable[fname+"_reg"] = &tab
|
|
|
- ju.TagdbTable.Store(fname+"_reg",&tab)
|
|
|
+ ju.TagdbTable.Store(fname+"_reg", &tab)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -806,15 +809,19 @@ func (e *ExtractTask) InitAreaCode() {
|
|
|
//保存抽取详情数据
|
|
|
func (e *ExtractTask) ResultSave(init bool) {
|
|
|
defer qu.Catch()
|
|
|
+ e.RWMutex.Lock()
|
|
|
if e.ResultArr == nil {
|
|
|
e.ResultArr = [][]map[string]interface{}{}
|
|
|
}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
if init {
|
|
|
go func() {
|
|
|
for {
|
|
|
- if len(e.ResultArr) > 500 {
|
|
|
- arr := e.ResultArr[:500]
|
|
|
- e.ResultArr = e.ResultArr[500:]
|
|
|
+ e.RWMutex.Lock()
|
|
|
+ if len(e.ResultArr) > 100 {
|
|
|
+ arr := e.ResultArr[:100]
|
|
|
+ e.ResultArr = e.ResultArr[100:]
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
db.Mgo.UpSertBulk("extract_result", arr...)
|
|
|
}, func(err interface{}) {
|
|
@@ -823,21 +830,37 @@ func (e *ExtractTask) ResultSave(init bool) {
|
|
|
} else {
|
|
|
arr := e.ResultArr
|
|
|
e.ResultArr = [][]map[string]interface{}{}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
db.Mgo.UpSertBulk("extract_result", arr...)
|
|
|
}, func(err interface{}) {
|
|
|
log.Debug(err)
|
|
|
})
|
|
|
}
|
|
|
- time.Sleep(10 * time.Second)
|
|
|
+
|
|
|
+ time.Sleep(3 * time.Second)
|
|
|
}
|
|
|
}()
|
|
|
} else {
|
|
|
+ e.RWMutex.Lock()
|
|
|
arr := e.ResultArr
|
|
|
e.ResultArr = [][]map[string]interface{}{}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
- e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
+ lenarr := len(arr)
|
|
|
+ for {
|
|
|
+ if lenarr > 100 {
|
|
|
+ arr2 := arr[:100]
|
|
|
+ arr = arr[100:]
|
|
|
+ lenarr = len(arr)
|
|
|
+ e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr2...)
|
|
|
+ } else {
|
|
|
+ e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
}, func(err interface{}) {
|
|
|
+ defer e.RWMutex.Unlock()
|
|
|
log.Debug(err)
|
|
|
})
|
|
|
}
|
|
@@ -846,15 +869,19 @@ func (e *ExtractTask) ResultSave(init bool) {
|
|
|
//保存抽取数据
|
|
|
func (e *ExtractTask) BidSave(init bool) {
|
|
|
defer qu.Catch()
|
|
|
+ e.RWMutex.Lock()
|
|
|
if e.BidArr == nil {
|
|
|
e.BidArr = [][]map[string]interface{}{}
|
|
|
}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
if init {
|
|
|
go func() {
|
|
|
for {
|
|
|
- if len(e.BidArr) > 500 {
|
|
|
- arr := e.BidArr[:500]
|
|
|
- e.BidArr = e.BidArr[500:]
|
|
|
+ e.RWMutex.Lock()
|
|
|
+ if len(e.BidArr) > 100 {
|
|
|
+ arr := e.BidArr[:100]
|
|
|
+ e.BidArr = e.BidArr[100:]
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
}, func(err interface{}) {
|
|
@@ -863,21 +890,34 @@ func (e *ExtractTask) BidSave(init bool) {
|
|
|
} else {
|
|
|
arr := e.BidArr
|
|
|
e.BidArr = [][]map[string]interface{}{}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
}, func(err interface{}) {
|
|
|
log.Debug(err)
|
|
|
})
|
|
|
-
|
|
|
}
|
|
|
- time.Sleep(10 * time.Second)
|
|
|
+ time.Sleep(3 * time.Second)
|
|
|
}
|
|
|
}()
|
|
|
} else {
|
|
|
+ e.RWMutex.Lock()
|
|
|
arr := e.BidArr
|
|
|
e.BidArr = [][]map[string]interface{}{}
|
|
|
+ e.RWMutex.Unlock()
|
|
|
qu.Try(func() {
|
|
|
- e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
+ lenarr := len(arr)
|
|
|
+ for {
|
|
|
+ if lenarr > 100 {
|
|
|
+ arr2 := arr[:100]
|
|
|
+ arr = arr[100:]
|
|
|
+ lenarr = len(arr)
|
|
|
+ e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr2...)
|
|
|
+ } else {
|
|
|
+ e.TaskInfo.TDB.UpSertBulk(e.TaskInfo.ToColl, arr...)
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
}, func(err interface{}) {
|
|
|
log.Debug(err)
|
|
|
})
|
|
@@ -953,7 +993,7 @@ func (e *ExtractTask) InitAuditRule() {
|
|
|
func (e *ExtractTask) InitAuditFields() {
|
|
|
if len(e.AuditFields) == 0 {
|
|
|
v, _ := db.Mgo.FindOne("version", `{"isuse":true,"delete":false}`) //查找当前使用版本
|
|
|
- if v != nil && len(*v) > 0 { //查找当前使用版本中属性配置需要审核的字段
|
|
|
+ if v != nil && len(*v) > 0 { //查找当前使用版本中属性配置需要审核的字段
|
|
|
vid := qu.BsonIdToSId((*v)["_id"])
|
|
|
query := map[string]interface{}{
|
|
|
"isaudit": true,
|