|
@@ -2,6 +2,7 @@
|
|
|
package extract
|
|
|
|
|
|
import (
|
|
|
+ "gopkg.in/mgo.v2/bson"
|
|
|
db "jy/mongodbutil"
|
|
|
ju "jy/util"
|
|
|
qu "qfw/util"
|
|
@@ -235,6 +236,18 @@ func (e *ExtractTask) InitTaskInfo() {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+func (e *ExtractTask) InitSite() {
|
|
|
+ sites, _ := db.Mgo.Find("site_management", bson.M{"version": e.TaskInfo.Version}, nil, bson.M{"site_script": 1}, false, -1, -1)
|
|
|
+ for _, v := range *sites {
|
|
|
+ if vv, ok := v["site_script"].([]interface{}); ok {
|
|
|
+ for _, vv := range vv {
|
|
|
+ Luacodes.Store(vv, map[string]interface{}{})
|
|
|
+ }
|
|
|
+ } else if vv, ok := v["site_script"].(interface{}); ok {
|
|
|
+ Luacodes.Store(vv, map[string]interface{}{})
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
//加载通用前置规则
|
|
|
func (e *ExtractTask) InitRulePres() {
|
|
@@ -279,6 +292,7 @@ func (e *ExtractTask) InitRulePres() {
|
|
|
func (e *ExtractTask) InitRuleBacks(isSite bool) {
|
|
|
defer qu.Catch()
|
|
|
cDB := ""
|
|
|
+ eSiteRuleBacks := []*RegLuaInfo{}
|
|
|
if isSite {
|
|
|
cDB = "site_rule_back"
|
|
|
e.SiteRuleBacks = []*RegLuaInfo{}
|
|
@@ -296,7 +310,8 @@ func (e *ExtractTask) InitRuleBacks(isSite bool) {
|
|
|
if rinfo.IsLua {
|
|
|
rinfo.RuleText = v["s_luascript"].(string)
|
|
|
if isSite {
|
|
|
- e.SiteRuleBacks = append(e.SiteRuleBacks, rinfo)
|
|
|
+ eSiteRuleBacks = append(eSiteRuleBacks, rinfo)
|
|
|
+ //e.SiteRuleBacks = append(e.SiteRuleBacks, rinfo)
|
|
|
} else {
|
|
|
e.RuleBacks = append(e.RuleBacks, rinfo)
|
|
|
}
|
|
@@ -318,7 +333,7 @@ func (e *ExtractTask) InitRuleBacks(isSite bool) {
|
|
|
rinfo.RegPreBac = &ExtReg{Reg: regexp.MustCompile(pattern), Replace: ""}
|
|
|
}
|
|
|
if isSite {
|
|
|
- e.SiteRuleBacks = append(e.SiteRuleBacks, rinfo)
|
|
|
+ eSiteRuleBacks = append(eSiteRuleBacks, rinfo)
|
|
|
} else {
|
|
|
e.RuleBacks = append(e.RuleBacks, rinfo)
|
|
|
}
|
|
@@ -326,6 +341,20 @@ func (e *ExtractTask) InitRuleBacks(isSite bool) {
|
|
|
log.Debug(rinfo.Code, rinfo.Field, err)
|
|
|
})
|
|
|
}
|
|
|
+ if isSite {
|
|
|
+ sm, _ := db.Mgo.FindById("site_management", qu.ObjToString(v["pid"]), bson.M{"site_script": 1})
|
|
|
+ for _, v2 := range (*sm)["site_script"].([]interface{}) {
|
|
|
+ if mdpvalue, ok := Luacodes.Load(v2); ok {
|
|
|
+ if mdpvalue.(map[string]interface{})["e.SiteRuleBacks"] == nil{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteRuleBacks"] = eSiteRuleBacks
|
|
|
+ }else {
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteRuleBacks"].([]*RegLuaInfo) = append(mdpvalue.(map[string]interface{})["e.SiteRuleBacks"].([]*RegLuaInfo), eSiteRuleBacks...)
|
|
|
+ }
|
|
|
+ Luacodes.Store(v2, mdpvalue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ eSiteRuleBacks = []*RegLuaInfo{}
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
func (e *ExtractTask) InfoTypeList() {
|
|
@@ -342,6 +371,7 @@ func (e *ExtractTask) InitRuleCore(isSite bool) {
|
|
|
allFields := getALLFields()
|
|
|
e.Fields = map[string]int{}
|
|
|
var versioninfodb, rule_logicdb, rule_logicpredb, rule_logicbackdb, rule_logicoredb string
|
|
|
+ eSiteRuleCores := make(map[string]map[string][]*RuleCore)
|
|
|
if isSite {
|
|
|
versioninfodb = "site_versioninfo"
|
|
|
rule_logicdb = "site_rule_logic"
|
|
@@ -511,36 +541,55 @@ func (e *ExtractTask) InitRuleCore(isSite bool) {
|
|
|
}
|
|
|
fieldrules[s_field] = append(fieldrules[s_field], rcore)
|
|
|
}
|
|
|
+ if isSite {
|
|
|
+ sm, _ := db.Mgo.FindById("site_management", qu.ObjToString(vinfo["pid"]), bson.M{"site_script": 1})
|
|
|
+ for _, v2 := range (*sm)["site_script"].([]interface{}) {
|
|
|
+ if mdpvalue, ok := Luacodes.Load(v2); ok {
|
|
|
+ //属性配置
|
|
|
+ infolist, _ := db.Mgo.Find("infotype", `{}`, `{}`, `{}`, false, -1, -1)
|
|
|
+ for _, v := range *infolist {
|
|
|
+ topclass := qu.ObjToString(v["topclass"])
|
|
|
+ if v["subclass"] == nil {
|
|
|
+ eSiteRuleCores[topclass] = make(map[string][]*RuleCore)
|
|
|
+ for attr, _ := range v["fields"].(map[string]interface{}) {
|
|
|
+ eSiteRuleCores[topclass][attr] = fieldrules[attr]
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for ca, fs := range v["subclass"].(map[string]interface{}) {
|
|
|
+ eSiteRuleCores[topclass+"_"+ca] = make(map[string][]*RuleCore)
|
|
|
+ for field, _ := range fs.(map[string]interface{}) {
|
|
|
+ eSiteRuleCores[topclass+"_"+ca][field] = fieldrules[field]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if mdpvalue.(map[string]interface{})["e.SiteRuleCores"] == nil{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteRuleCores"] = eSiteRuleCores
|
|
|
+ }else {
|
|
|
+ for k2,v2 :=range eSiteRuleCores{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteRuleCores"].(map[string]map[string][]*RuleCore )[k2] = v2
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Luacodes.Store(v2, mdpvalue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ eSiteRuleCores = make(map[string]map[string][]*RuleCore)
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- //属性配置
|
|
|
- infolist, _ := db.Mgo.Find("infotype", `{}`, `{}`, `{}`, false, -1, -1)
|
|
|
- for _, v := range *infolist {
|
|
|
- topclass := qu.ObjToString(v["topclass"])
|
|
|
- if v["subclass"] == nil {
|
|
|
- if isSite {
|
|
|
- e.SiteRuleCores[topclass] = make(map[string][]*RuleCore)
|
|
|
- } else {
|
|
|
+ if !isSite {
|
|
|
+ //属性配置
|
|
|
+ infolist, _ := db.Mgo.Find("infotype", `{}`, `{}`, `{}`, false, -1, -1)
|
|
|
+ for _, v := range *infolist {
|
|
|
+ topclass := qu.ObjToString(v["topclass"])
|
|
|
+ if v["subclass"] == nil {
|
|
|
e.RuleCores[topclass] = make(map[string][]*RuleCore)
|
|
|
- }
|
|
|
- for attr, _ := range v["fields"].(map[string]interface{}) {
|
|
|
- if isSite {
|
|
|
- e.SiteRuleCores[topclass][attr] = fieldrules[attr]
|
|
|
- } else {
|
|
|
+ for attr, _ := range v["fields"].(map[string]interface{}) {
|
|
|
e.RuleCores[topclass][attr] = fieldrules[attr]
|
|
|
}
|
|
|
- }
|
|
|
- } else {
|
|
|
- for ca, fs := range v["subclass"].(map[string]interface{}) {
|
|
|
- if isSite {
|
|
|
- e.SiteRuleCores[topclass+"_"+ca] = make(map[string][]*RuleCore)
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
+ for ca, fs := range v["subclass"].(map[string]interface{}) {
|
|
|
e.RuleCores[topclass+"_"+ca] = make(map[string][]*RuleCore)
|
|
|
- }
|
|
|
- for field, _ := range fs.(map[string]interface{}) {
|
|
|
- if isSite {
|
|
|
- e.SiteRuleCores[topclass+"_"+ca][field] = fieldrules[field]
|
|
|
- } else {
|
|
|
+ for field, _ := range fs.(map[string]interface{}) {
|
|
|
e.RuleCores[topclass+"_"+ca][field] = fieldrules[field]
|
|
|
}
|
|
|
}
|
|
@@ -615,6 +664,7 @@ func (e *ExtractTask) InitPkgCore() {
|
|
|
func (e *ExtractTask) InitTag(isSite bool) {
|
|
|
defer qu.Catch()
|
|
|
var tagdetailinfodb string
|
|
|
+ eSiteTag := map[string][]*Tag{}
|
|
|
if isSite {
|
|
|
tagdetailinfodb = "site_tagdetailinfo"
|
|
|
e.SiteTag = map[string][]*Tag{}
|
|
@@ -633,7 +683,8 @@ func (e *ExtractTask) InitTag(isSite bool) {
|
|
|
for k, key := range tmp {
|
|
|
tag := &Tag{Type: "string", Key: key.(string)}
|
|
|
if isSite {
|
|
|
- e.SiteTag[field] = append(e.SiteTag[field], tag)
|
|
|
+ eSiteTag[field] = append(eSiteTag[field], tag)
|
|
|
+ //e.SiteTag[field] = append(e.SiteTag[field], tag)
|
|
|
} else {
|
|
|
e.Tag[field] = append(e.Tag[field], tag)
|
|
|
}
|
|
@@ -647,6 +698,22 @@ func (e *ExtractTask) InitTag(isSite bool) {
|
|
|
ju.TagdbTable.Store(fname, &tab)
|
|
|
}
|
|
|
}
|
|
|
+ if isSite {
|
|
|
+ sm, _ := db.Mgo.FindById("site_management", qu.ObjToString(v["pid"]), bson.M{"site_script": 1})
|
|
|
+ for _, v2 := range (*sm)["site_script"].([]interface{}) {
|
|
|
+ if mdpvalue, ok := Luacodes.Load(v2); ok {
|
|
|
+ if mdpvalue.(map[string]interface{})["e.SiteTag"] == nil{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteTag"] = eSiteTag
|
|
|
+ }else {
|
|
|
+ for k2,v2 := range eSiteTag{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteTag"].(map[string][]*Tag)[k2] = v2
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Luacodes.Store(v2, mdpvalue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ eSiteTag = map[string][]*Tag{}
|
|
|
+ }
|
|
|
}
|
|
|
//正则标签库
|
|
|
list, _ = db.Mgo.Find(tagdetailinfodb, `{"s_type":"reg","s_version":"`+e.TaskInfo.Version+`","delete":false}`, nil, nil, false, -1, -1)
|
|
@@ -659,7 +726,8 @@ func (e *ExtractTask) InitTag(isSite bool) {
|
|
|
for k, key := range tmp {
|
|
|
tag := &Tag{Type: "regexp", Key: key.(string), Reg: regexp.MustCompile(key.(string))}
|
|
|
if isSite {
|
|
|
- e.SiteTag[field] = append(e.SiteTag[field], tag)
|
|
|
+ eSiteTag[field] = append(eSiteTag[field], tag)
|
|
|
+ //e.SiteTag[field] = append(e.SiteTag[field], tag)
|
|
|
} else {
|
|
|
e.Tag[field] = append(e.Tag[field], tag)
|
|
|
}
|
|
@@ -673,6 +741,22 @@ func (e *ExtractTask) InitTag(isSite bool) {
|
|
|
ju.TagdbTable.Store(fname+"_reg", &tab)
|
|
|
}
|
|
|
}
|
|
|
+ if isSite {
|
|
|
+ sm, _ := db.Mgo.FindById("site_management", qu.ObjToString(v["pid"]), bson.M{"site_script": 1})
|
|
|
+ for _, v2 := range (*sm)["site_script"].([]interface{}) {
|
|
|
+ if mdpvalue, ok := Luacodes.Load(v2); ok {
|
|
|
+ if mdpvalue.(map[string]interface{})["e.SiteTag"] == nil{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteTag"] = eSiteTag
|
|
|
+ }else {
|
|
|
+ for k2,v2 := range eSiteTag{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteTag"].(map[string][]*Tag)[k2] = v2
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Luacodes.Store(v2, mdpvalue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ eSiteTag = map[string][]*Tag{}
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -706,10 +790,24 @@ func (e *ExtractTask) InitClearFn(isSite bool) {
|
|
|
for _, v := range fns {
|
|
|
fn[field] = append(fn[field], v.(string))
|
|
|
}
|
|
|
+ if isSite {
|
|
|
+ sm, _ := db.Mgo.FindById("site_management", qu.ObjToString(tmp["pid"]), bson.M{"site_script": 1})
|
|
|
+ for _, v2 := range (*sm)["site_script"].([]interface{}) {
|
|
|
+ if mdpvalue, ok := Luacodes.Load(v2); ok {
|
|
|
+ if mdpvalue.(map[string]interface{})["e.SiteClearFn"]== nil{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteClearFn"] = fn
|
|
|
+ }else {
|
|
|
+ for k2,v2 := range fn{
|
|
|
+ mdpvalue.(map[string]interface{})["e.SiteClearFn"].(map[string][]string)[k2] = v2
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Luacodes.Store(v2, mdpvalue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fn = map[string][]string{}
|
|
|
+ }
|
|
|
}
|
|
|
- if isSite {
|
|
|
- e.SiteClearFn = fn
|
|
|
- } else {
|
|
|
+ if !isSite{
|
|
|
e.ClearFn = fn
|
|
|
}
|
|
|
}
|