|
@@ -4,7 +4,7 @@ import (
|
|
|
"fmt"
|
|
|
u "jy/util"
|
|
|
qutil "qfw/util"
|
|
|
- // "reflect"
|
|
|
+ "reflect"
|
|
|
"regexp"
|
|
|
"strings"
|
|
|
|
|
@@ -547,6 +547,7 @@ func AnalyTableV2(tabs []*goquery.Selection, toptype, blockTag, con string, ityp
|
|
|
|
|
|
//开始解析表格集
|
|
|
func (ts *TableResult) Analy() {
|
|
|
+ fmt.Println("1111111111111111")
|
|
|
tabs := []*Table{}
|
|
|
contactFormat := &u.ContactFormat{
|
|
|
IndexMap: map[int]string{},
|
|
@@ -558,11 +559,11 @@ func (ts *TableResult) Analy() {
|
|
|
ts := tn.Analy(contactFormat)
|
|
|
for _, tab := range ts {
|
|
|
tabs = append(tabs, tab)
|
|
|
- fmt.Println("tab.SortKV.Map", tab.SortKV.Map)
|
|
|
+ fmt.Println("tab.SortKV.Map", tab.SortKV.Keys)
|
|
|
}
|
|
|
//tn.SonTables = append(tn.SonTables, tn)
|
|
|
}
|
|
|
- //统一合并,考统一多表格是多包的情况---新增
|
|
|
+ //统一合并,考虑统一多表格是多包的情况---新增
|
|
|
if len(tabs) > 1 {
|
|
|
pns := map[string]string{}
|
|
|
pnarr := []string{}
|
|
@@ -779,7 +780,7 @@ func (table *Table) Analy(contactFormat *u.ContactFormat) []*Table {
|
|
|
table.TdContactFormat(contactFormat)
|
|
|
//开始查找kv,核心模块
|
|
|
table.FindKV()
|
|
|
- fmt.Println("KvMap----------", table.SortKV.Map)
|
|
|
+ fmt.Println("KvMap----------", table.SortKV.Keys)
|
|
|
//table中抽取品牌
|
|
|
//table.analyBrand()
|
|
|
//判断是否是多包,并处理分包的
|
|
@@ -2656,348 +2657,347 @@ L:
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
-//func (table *Table) analyBrand() {
|
|
|
-// //产品名称 品牌 规格 单价 单位 数量 小计 质保期
|
|
|
-// lineMap := make(map[string]map[string]string)
|
|
|
-// lineMapArr := make(map[string]map[string][]string)
|
|
|
-// brandRule := u.BrandRules
|
|
|
-// //将val为数组和string的分开
|
|
|
-// for key, val := range table.SortKV.Map {
|
|
|
-// key = regReplAllSpace.ReplaceAllString(key, "")
|
|
|
-// key = strings.Replace(key, "", "", -1) //处理一个特殊的采购量 经上层处理空格后未处理掉
|
|
|
-// kind := reflect.TypeOf(val).String()
|
|
|
-// //处理多个key相同的数据
|
|
|
-// if kind == "[]string" { //val为数组 {"数量":["1","2","3"]}
|
|
|
-// /*
|
|
|
-// {
|
|
|
-// "商品":["","",],
|
|
|
-// "商品_"["",""],
|
|
|
-// }
|
|
|
-
|
|
|
-// */
|
|
|
-// realTypeVal := val.([]string)
|
|
|
-// hasGoods(table, realTypeVal) //判断val中是否含产品
|
|
|
-// hasBrand(table, realTypeVal) //判断val中是否含品牌
|
|
|
-// line := underline.FindString(key)
|
|
|
-// lineValMap := lineMapArr[line]
|
|
|
-// i := 1
|
|
|
-// L:
|
|
|
-// for { //去除数组空数据
|
|
|
-// last := realTypeVal[len(realTypeVal)-i]
|
|
|
-// if last == "" {
|
|
|
-// i++
|
|
|
-// if i > len(realTypeVal) {
|
|
|
-// break
|
|
|
-// }
|
|
|
-// goto L
|
|
|
-// } else {
|
|
|
-// break
|
|
|
-// }
|
|
|
-// }
|
|
|
-// dislodgeNull := realTypeVal[:(len(realTypeVal) - i + 1)] //去除数组中空数据
|
|
|
-// if len(lineValMap) == 0 && len(realTypeVal) != 0 { //没有数据
|
|
|
-// lineMapArr[line] = map[string][]string{key: dislodgeNull}
|
|
|
-// } else { //新增数据
|
|
|
-// if len(dislodgeNull) != 0 {
|
|
|
-// lineValMap[key] = dislodgeNull
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else if kind == "string" { //val为字符串 {"数量":"1"}
|
|
|
-// /*
|
|
|
-// {
|
|
|
-// "商品:"",名称:"",
|
|
|
-// "商品_:"",名称_:"",
|
|
|
-// "商品__:"",名称__:"",
|
|
|
-// }
|
|
|
-// */
|
|
|
+func (table *Table) analyBrand() {
|
|
|
+ fmt.Println("-------", table.BrandData)
|
|
|
+ //产品名称 品牌 规格 单价 单位 数量 小计 质保期
|
|
|
+ lineMap := make(map[string]map[string]string)
|
|
|
+ lineMapArr := make(map[string]map[string][]string)
|
|
|
+ brandRule := u.BrandRules
|
|
|
+ //将val为数组和string的分开
|
|
|
+ for key, val := range table.SortKV.Map {
|
|
|
+ fmt.Println("key:", key, " val:", val)
|
|
|
+ key = regReplAllSpace.ReplaceAllString(key, "")
|
|
|
+ key = strings.Replace(key, "", "", -1) //处理一个特殊的采购量 经上层处理空格后未处理掉
|
|
|
+ kind := reflect.TypeOf(val).String()
|
|
|
+ //处理多个key相同的数据
|
|
|
+ if kind == "[]string" { //val为数组 {"数量":["1","2","3"]}
|
|
|
+ fmt.Println("=====[]string")
|
|
|
+ /*
|
|
|
+ {
|
|
|
+ "商品":["","",],
|
|
|
+ "商品_"["",""],
|
|
|
+ }
|
|
|
|
|
|
-// realTypeVal := val.(string)
|
|
|
-// afterFilter := tabletdclear.ReplaceAllString(realTypeVal, "")
|
|
|
-// if afterFilter == "" { //空val值舍弃
|
|
|
-// continue
|
|
|
-// }
|
|
|
-// hasGoods(table, realTypeVal) //判断val中是否含产品
|
|
|
-// hasBrand(table, realTypeVal) //判断val中是否含品牌
|
|
|
-// line := underline.FindString(key)
|
|
|
-// lineValMap := lineMap[line]
|
|
|
-// if len(lineValMap) == 0 { //没有数据
|
|
|
-// lineMap[line] = map[string]string{key: realTypeVal}
|
|
|
-// } else { //新增数据
|
|
|
-// lineValMap[key] = realTypeVal
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //fmt.Println("lineMapArr------------------------------", lineMapArr)
|
|
|
-// //fmt.Println("lineMap------------------------------", lineMap)
|
|
|
-// //处理数组数据后,匹配必须title和替换要保存的title
|
|
|
-// if len(lineMapArr) > 0 {
|
|
|
-// for _, aMap := range lineMapArr {
|
|
|
-// //u.Debug(aMap)
|
|
|
-// //minNum := 0
|
|
|
-// maxNum := 0
|
|
|
-// arrcount := 0 //记录key是否存在必须title(数组数据)
|
|
|
-// ka := make(map[string][]string) //最终存储数据
|
|
|
-// for k0, v0 := range aMap {
|
|
|
-// //匹配必须title
|
|
|
-// for nameM, r := range brandRule["must"] {
|
|
|
-// if convert(k0, r) { //匹配成功
|
|
|
-// if len(ka[nameM]) != 0 && strings.Contains(k0, "描述") { //防止k0匹配到多次 和特殊情况 物料名称 物料描述同时出现
|
|
|
-// continue
|
|
|
-// }
|
|
|
-// ka[nameM] = v0
|
|
|
-// arrcount++
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //fmt.Println(arrcount, k0, v0)
|
|
|
-// //替换其它要保存字段
|
|
|
-// for nameR, r := range brandRule["replace"] {
|
|
|
-// if convert(k0, r) { //匹配成功
|
|
|
-// ka[nameR] = v0
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //找最终存储数据的最小len(arr)
|
|
|
-// // for _, vf := range ka {
|
|
|
-// // //找最短的数组
|
|
|
-// // lenVal := len(vf)
|
|
|
-// // if minNum == 0 || minNum > lenVal { //maxNum = len(最短数组)
|
|
|
-// // minNum = lenVal
|
|
|
-// // }
|
|
|
-// // }
|
|
|
-// //找最终存储数据的最大len(arr),小的补空
|
|
|
-// for _, vf1 := range ka {
|
|
|
-// lenVal := len(vf1)
|
|
|
-// if lenVal > maxNum {
|
|
|
-// maxNum = lenVal
|
|
|
-// }
|
|
|
-// }
|
|
|
-// finishKa := make(map[string][]string)
|
|
|
-// for vf2K, vf2 := range ka {
|
|
|
-// if len(vf2) < maxNum {
|
|
|
-// lenMv := maxNum - len(vf2)
|
|
|
-// for i := 0; i < lenMv; i++ {
|
|
|
-// vf2 = append(vf2, "")
|
|
|
-// }
|
|
|
-// }
|
|
|
-// finishKa[vf2K] = vf2
|
|
|
-// }
|
|
|
-// hasKey(table, arrcount) //是否匹配到两个以上的key
|
|
|
-// if arrcount >= 1 {
|
|
|
-// finishData := dealArrData(maxNum, finishKa)
|
|
|
-// table.BrandData = append(table.BrandData, finishData)
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //处理string数据后,匹配必须title和替换要保存的title
|
|
|
-// if len(lineMap) > 0 {
|
|
|
-// for _, sMap := range lineMap {
|
|
|
-// strcount := 0 //记录key是否存在必须title(字符串数据)
|
|
|
-// //fmt.Println("---------------", sMap)
|
|
|
-// endStrMap := make(map[string]string)
|
|
|
-// for k1, v1 := range sMap {
|
|
|
-// //匹配必须title
|
|
|
-// for nameM, r := range brandRule["must"] {
|
|
|
-// if convert(k1, r) { //匹配成功
|
|
|
-// endStrMap[nameM] = v1
|
|
|
-// strcount++
|
|
|
-// //fmt.Println(strcount, k1, v1)
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //替换其它要保存字段
|
|
|
-// for nameR, r := range brandRule["replace"] {
|
|
|
-// if convert(k1, r) { //匹配成功
|
|
|
-// endStrMap[nameR] = v1
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //原始字符串数据处理
|
|
|
-// hasKey(table, strcount) //是否匹配到两个以上的key
|
|
|
-// if strcount >= 1 {
|
|
|
-// finishData := dealStrData(endStrMap)
|
|
|
-// table.BrandData = append(table.BrandData, finishData)
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //fmt.Println("finish---", table.BrandData)
|
|
|
-//}
|
|
|
+ */
|
|
|
+ realTypeVal := val.([]string)
|
|
|
+ hasGoods(table, realTypeVal) //判断val中是否含产品
|
|
|
+ hasBrand(table, realTypeVal) //判断val中是否含品牌
|
|
|
+ line := underline.FindString(key)
|
|
|
+ lineValMap := lineMapArr[line]
|
|
|
+ i := 1
|
|
|
+ L:
|
|
|
+ for { //去除数组空数据
|
|
|
+ last := realTypeVal[len(realTypeVal)-i]
|
|
|
+ if last == "" {
|
|
|
+ i++
|
|
|
+ if i > len(realTypeVal) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ goto L
|
|
|
+ } else {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dislodgeNull := realTypeVal[:(len(realTypeVal) - i + 1)] //去除数组中空数据
|
|
|
+ if len(lineValMap) == 0 && len(realTypeVal) != 0 { //没有数据
|
|
|
+ lineMapArr[line] = map[string][]string{key: dislodgeNull}
|
|
|
+ } else { //新增数据
|
|
|
+ if len(dislodgeNull) != 0 {
|
|
|
+ lineValMap[key] = dislodgeNull
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if kind == "string" { //val为字符串 {"数量":"1"}
|
|
|
+ fmt.Println("=====string")
|
|
|
+ /*
|
|
|
+ {
|
|
|
+ "商品:"",名称:"",
|
|
|
+ "商品_:"",名称_:"",
|
|
|
+ "商品__:"",名称__:"",
|
|
|
+ }
|
|
|
+ */
|
|
|
|
|
|
-//func dealArrData(minNum int, ka map[string][]string) []map[string]string {
|
|
|
-// for k2, v2 := range ka {
|
|
|
-// //处理数组长度不相等,使长度一致
|
|
|
-// if len(v2) > minNum {
|
|
|
-// ka[k2] = v2[:minNum]
|
|
|
-// }
|
|
|
-// }
|
|
|
-// finalData := assembleData(ka)
|
|
|
-// if len(finalData) > 0 {
|
|
|
-// return finalData
|
|
|
-// }
|
|
|
-// return nil
|
|
|
+ realTypeVal := val.(string)
|
|
|
+ afterFilter := tabletdclear.ReplaceAllString(realTypeVal, "")
|
|
|
+ if afterFilter == "" { //空val值舍弃
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ hasGoods(table, realTypeVal) //判断val中是否含产品
|
|
|
+ hasBrand(table, realTypeVal) //判断val中是否含品牌
|
|
|
+ line := underline.FindString(key)
|
|
|
+ lineValMap := lineMap[line]
|
|
|
+ if len(lineValMap) == 0 { //没有数据
|
|
|
+ lineMap[line] = map[string]string{key: realTypeVal}
|
|
|
+ } else { //新增数据
|
|
|
+ lineValMap[key] = realTypeVal
|
|
|
+ }
|
|
|
+ fmt.Println("lineValMap===", lineValMap)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fmt.Println("lineMapArr------------------------------", lineMapArr)
|
|
|
+ //fmt.Println("lineMap------------------------------", lineMap)
|
|
|
+ //处理数组数据后,匹配必须title和替换要保存的title
|
|
|
+ if len(lineMapArr) > 0 {
|
|
|
+ for _, aMap := range lineMapArr {
|
|
|
+ //u.Debug(aMap)
|
|
|
+ //minNum := 0
|
|
|
+ maxNum := 0
|
|
|
+ arrcount := 0 //记录key是否存在必须title(数组数据)
|
|
|
+ ka := make(map[string][]string) //最终存储数据
|
|
|
+ for k0, v0 := range aMap {
|
|
|
+ //匹配必须title
|
|
|
+ for nameM, r := range brandRule["must"] {
|
|
|
+ if convert(k0, r) { //匹配成功
|
|
|
+ if len(ka[nameM]) != 0 && strings.Contains(k0, "描述") { //防止k0匹配到多次 和特殊情况 物料名称 物料描述同时出现
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ ka[nameM] = v0
|
|
|
+ arrcount++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fmt.Println(arrcount, k0, v0)
|
|
|
+ //替换其它要保存字段
|
|
|
+ for nameR, r := range brandRule["replace"] {
|
|
|
+ if convert(k0, r) { //匹配成功
|
|
|
+ ka[nameR] = v0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //找最终存储数据的最小len(arr)
|
|
|
+ // for _, vf := range ka {
|
|
|
+ // //找最短的数组
|
|
|
+ // lenVal := len(vf)
|
|
|
+ // if minNum == 0 || minNum > lenVal { //maxNum = len(最短数组)
|
|
|
+ // minNum = lenVal
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //找最终存储数据的最大len(arr),小的补空
|
|
|
+ for _, vf1 := range ka {
|
|
|
+ lenVal := len(vf1)
|
|
|
+ if lenVal > maxNum {
|
|
|
+ maxNum = lenVal
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finishKa := make(map[string][]string)
|
|
|
+ for vf2K, vf2 := range ka {
|
|
|
+ if len(vf2) < maxNum {
|
|
|
+ lenMv := maxNum - len(vf2)
|
|
|
+ for i := 0; i < lenMv; i++ {
|
|
|
+ vf2 = append(vf2, "")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finishKa[vf2K] = vf2
|
|
|
+ }
|
|
|
+ hasKey(table, arrcount) //是否匹配到两个以上的key
|
|
|
+ if arrcount >= 1 {
|
|
|
+ finishData := dealArrData(maxNum, finishKa)
|
|
|
+ table.BrandData = append(table.BrandData, finishData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //处理string数据后,匹配必须title和替换要保存的title
|
|
|
+ if len(lineMap) > 0 {
|
|
|
+ for _, sMap := range lineMap {
|
|
|
+ strcount := 0 //记录key是否存在必须title(字符串数据)
|
|
|
+ //fmt.Println("---------------", sMap)
|
|
|
+ endStrMap := make(map[string]string)
|
|
|
+ for k1, v1 := range sMap {
|
|
|
+ //匹配必须title
|
|
|
+ for nameM, r := range brandRule["must"] {
|
|
|
+ if convert(k1, r) { //匹配成功
|
|
|
+ endStrMap[nameM] = v1
|
|
|
+ strcount++
|
|
|
+ //fmt.Println(strcount, k1, v1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //替换其它要保存字段
|
|
|
+ for nameR, r := range brandRule["replace"] {
|
|
|
+ if convert(k1, r) { //匹配成功
|
|
|
+ endStrMap[nameR] = v1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //原始字符串数据处理
|
|
|
+ hasKey(table, strcount) //是否匹配到两个以上的key
|
|
|
+ if strcount >= 1 {
|
|
|
+ finishData := dealStrData(endStrMap) //处理数据
|
|
|
+ if len(finishData) > 0 {
|
|
|
+ table.BrandData = append(table.BrandData, finishData)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fmt.Println("finish---", table.BrandData)
|
|
|
+}
|
|
|
|
|
|
-//}
|
|
|
-//func dealStrData(kv map[string]string) []map[string]string {
|
|
|
-// finalData := assembleData(kv)
|
|
|
-// if len(finalData) > 0 {
|
|
|
-// return finalData
|
|
|
-// }
|
|
|
-// return nil
|
|
|
+func dealArrData(minNum int, ka map[string][]string) []map[string]string {
|
|
|
+ for k2, v2 := range ka {
|
|
|
+ //处理数组长度不相等,使长度一致
|
|
|
+ if len(v2) > minNum {
|
|
|
+ ka[k2] = v2[:minNum]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finalData := assembleData(ka)
|
|
|
+ if len(finalData) > 0 {
|
|
|
+ return finalData
|
|
|
+ }
|
|
|
+ return nil
|
|
|
|
|
|
-//}
|
|
|
+}
|
|
|
+func dealStrData(kv map[string]string) []map[string]string {
|
|
|
+ finalData := []map[string]string{}
|
|
|
+ finalData = assembleData(kv)
|
|
|
+ return finalData
|
|
|
|
|
|
-////组装数据,每一行的数据为一数据集合
|
|
|
-//func assembleData(m interface{}) []map[string]string {
|
|
|
-// defer qutil.Catch()
|
|
|
-// /*
|
|
|
-// {
|
|
|
-// "itemname":["计算机","打印机","机柜"],
|
|
|
-// "number" :["1","12","4"]
|
|
|
-// }
|
|
|
-// */
|
|
|
-// datas := []map[string]string{}
|
|
|
-// switch reflect.TypeOf(m).String() {
|
|
|
-// case "map[string][]string": //数组数据
|
|
|
-// realTypeM := m.(map[string][]string)
|
|
|
-// //根据数组数据的顺序 将多个数组中索引相同的数据拼装成一个map,并将这多个map放入一个arr
|
|
|
-// /*
|
|
|
-// arr1 ["a1","b1","c1"]
|
|
|
-// arr2 ["a2","b2","c2"]
|
|
|
+}
|
|
|
|
|
|
-// [
|
|
|
-// {"a1","a2"},
|
|
|
-// {"b1","b2"},
|
|
|
-// {"c1","c2"}
|
|
|
-// ]
|
|
|
-// */
|
|
|
-// //start
|
|
|
-// for k3, v3 := range realTypeM {
|
|
|
-// for _, val := range v3 {
|
|
|
-// data := make(map[string]string)
|
|
|
-// data[k3] = val
|
|
|
-// datas = append(datas, data)
|
|
|
-// }
|
|
|
-// break
|
|
|
-// }
|
|
|
-// for i, data := range datas {
|
|
|
-// for k4, v4 := range realTypeM {
|
|
|
-// if i < len(v4) { //数组数据长度不一致
|
|
|
-// if v4[i] != " " {
|
|
|
-// data[k4] = v4[i]
|
|
|
-// } else {
|
|
|
-// delete(data, k4)
|
|
|
-// continue
|
|
|
-// }
|
|
|
-// } else {
|
|
|
-// fmt.Println("err table")
|
|
|
-// continue
|
|
|
-// }
|
|
|
-// }
|
|
|
-// datas[i] = data
|
|
|
-// }
|
|
|
-// //end
|
|
|
-// for _, fdv := range datas { //清除空数据和只含特殊符号的数据
|
|
|
-// for fmk, fmv := range fdv {
|
|
|
-// if tabletdclear.ReplaceAllString(fmv, "") == "" {
|
|
|
-// delete(fdv, fmk)
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// case "map[string]string": //字符串数据
|
|
|
-// realTypeM := m.(map[string]string)
|
|
|
-// datas = append(datas, realTypeM)
|
|
|
-// default:
|
|
|
-// }
|
|
|
-// return datas
|
|
|
-//}
|
|
|
+//组装数据,每一行的数据为一数据集合
|
|
|
+func assembleData(m interface{}) []map[string]string {
|
|
|
+ defer qutil.Catch()
|
|
|
+ /*
|
|
|
+ {
|
|
|
+ "itemname":["计算机","打印机","机柜"],
|
|
|
+ "number" :["1","12","4"]
|
|
|
+ }
|
|
|
+ */
|
|
|
+ datas := []map[string]string{}
|
|
|
+ switch reflect.TypeOf(m).String() {
|
|
|
+ case "map[string][]string": //数组数据
|
|
|
+ realTypeM := m.(map[string][]string)
|
|
|
+ //根据数组数据的顺序 将多个数组中索引相同的数据拼装成一个map,并将这多个map放入一个arr
|
|
|
+ /*
|
|
|
+ arr1 ["a1","b1","c1"]
|
|
|
+ arr2 ["a2","b2","c2"]
|
|
|
|
|
|
-//func convert(key, r string) bool {
|
|
|
-// flag := false
|
|
|
-// //fmt.Println("key1---", key)
|
|
|
-// key = tabletitleclear.ReplaceAllString(key, "")
|
|
|
-// //fmt.Println("key2---", key)
|
|
|
-// reg, err := regexp.Compile(r)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("reg err:", err)
|
|
|
-// return flag
|
|
|
-// }
|
|
|
-// flag = reg.MatchString(key)
|
|
|
-// //fmt.Println(key, " ", r, " ", flag)
|
|
|
-// return flag
|
|
|
-//}
|
|
|
+ [
|
|
|
+ {"a1","a2"},
|
|
|
+ {"b1","b2"},
|
|
|
+ {"c1","c2"}
|
|
|
+ ]
|
|
|
+ */
|
|
|
+ //start
|
|
|
+ for k3, v3 := range realTypeM {
|
|
|
+ for _, val := range v3 {
|
|
|
+ data := make(map[string]string)
|
|
|
+ data[k3] = val
|
|
|
+ datas = append(datas, data)
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ for i, data := range datas {
|
|
|
+ for k4, v4 := range realTypeM {
|
|
|
+ if i < len(v4) { //数组数据长度不一致
|
|
|
+ if v4[i] != " " {
|
|
|
+ data[k4] = v4[i]
|
|
|
+ } else {
|
|
|
+ delete(data, k4)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ fmt.Println("err table")
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ datas[i] = data
|
|
|
+ }
|
|
|
+ //end
|
|
|
+ for _, fdv := range datas { //清除空数据和只含特殊符号的数据
|
|
|
+ for fmk, fmv := range fdv {
|
|
|
+ if tabletdclear.ReplaceAllString(fmv, "") == "" {
|
|
|
+ delete(fdv, fmk)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case "map[string]string": //字符串数据
|
|
|
+ realTypeM := m.(map[string]string)
|
|
|
+ datas = append(datas, realTypeM)
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ return datas
|
|
|
+}
|
|
|
|
|
|
-//func hasKey(table *Table, n int) {
|
|
|
-// //fmt.Println("key匹配到:", n, table.TableResult.HasKey)
|
|
|
-// if table.TableResult.HasKey == 1 {
|
|
|
-// return
|
|
|
-// }
|
|
|
-// if n >= 1 {
|
|
|
-// table.TableResult.HasKey = 1
|
|
|
-// }
|
|
|
-// //fmt.Println(table.TableResult.HasKey)
|
|
|
-//}
|
|
|
+func convert(key, r string) bool {
|
|
|
+ flag := false
|
|
|
+ //fmt.Println("key1---", key)
|
|
|
+ key = tabletitleclear.ReplaceAllString(key, "")
|
|
|
+ //fmt.Println("key2---", key)
|
|
|
+ reg, err := regexp.Compile(r)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("reg err:", err)
|
|
|
+ return flag
|
|
|
+ }
|
|
|
+ flag = reg.MatchString(key)
|
|
|
+ //fmt.Println(key, " ", r, " ", flag)
|
|
|
+ return flag
|
|
|
+}
|
|
|
|
|
|
-////是否有商品
|
|
|
-//func hasGoods(table *Table, data interface{}) {
|
|
|
-// if table.TableResult.HasGoods == 1 {
|
|
|
-// return
|
|
|
-// }
|
|
|
-// sData, ok := data.(string)
|
|
|
-// proFlag := false
|
|
|
-// if ok { //string数据检查goods
|
|
|
-// if sData != "" {
|
|
|
-// // if name == "goods" {
|
|
|
-// // return GoodsGet.CheckSensitiveWord(src)
|
|
|
-// // } else {
|
|
|
-// // return BrandGet.CheckSensitiveWord(src)
|
|
|
-// // }
|
|
|
+func hasKey(table *Table, n int) {
|
|
|
+ //fmt.Println("key匹配到:", n, table.TableResult.HasKey)
|
|
|
+ if table.TableResult.HasKey == 1 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if n >= 1 {
|
|
|
+ table.TableResult.HasKey = 1
|
|
|
+ }
|
|
|
+ //fmt.Println(table.TableResult.HasKey)
|
|
|
+}
|
|
|
|
|
|
-// proFlag = u.CheckSensitiveWord("goods", sData)
|
|
|
-// if proFlag {
|
|
|
-// table.TableResult.HasGoods = 1
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else { //arr数据检查goods
|
|
|
-// arrData := data.([]string)
|
|
|
-// if len(arrData) > 0 {
|
|
|
-// for _, src := range arrData {
|
|
|
-// if src != "" {
|
|
|
-// proFlag = u.CheckSensitiveWord("pro", src)
|
|
|
-// if proFlag {
|
|
|
-// table.TableResult.HasGoods = 1
|
|
|
-// break
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//}
|
|
|
+//是否有商品
|
|
|
+func hasGoods(table *Table, data interface{}) {
|
|
|
+ if table.TableResult.HasGoods == 1 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sData, ok := data.(string)
|
|
|
+ proFlag := ""
|
|
|
+ if ok { //string数据检查goods
|
|
|
+ if sData != "" {
|
|
|
+ proFlag = u.GoodsGet.CheckSensitiveWord(sData)
|
|
|
+ if len(proFlag) > 0 {
|
|
|
+ table.TableResult.HasGoods = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else { //arr数据检查goods
|
|
|
+ arrData := data.([]string)
|
|
|
+ if len(arrData) > 0 {
|
|
|
+ for _, src := range arrData {
|
|
|
+ if src != "" {
|
|
|
+ proFlag = u.GoodsGet.CheckSensitiveWord(src)
|
|
|
+ if len(proFlag) > 0 {
|
|
|
+ table.TableResult.HasGoods = 1
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
-////是否有品牌
|
|
|
-//func hasBrand(table *Table, data interface{}) {
|
|
|
-// if table.TableResult.HasBrand == 1 {
|
|
|
-// return
|
|
|
-// }
|
|
|
-// sData, ok := data.(string)
|
|
|
-// brandFlag := false
|
|
|
-// if ok { //string数据检查goods
|
|
|
-// if sData != "" {
|
|
|
-// brandFlag = u.CheckSensitiveWord("brand", sData)
|
|
|
-// //fmt.Println("--------------", sData, brandFlag)
|
|
|
-// if brandFlag {
|
|
|
-// table.TableResult.HasBrand = 1
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else { //arr数据检查goods
|
|
|
-// arrData := data.([]string)
|
|
|
-// if len(arrData) > 0 {
|
|
|
-// for _, src := range arrData {
|
|
|
-// if src != "" {
|
|
|
-// brandFlag = u.CheckSensitiveWord("brand", src)
|
|
|
-// if brandFlag {
|
|
|
-// table.TableResult.HasBrand = 1
|
|
|
-// break
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//}
|
|
|
+//是否有品牌
|
|
|
+func hasBrand(table *Table, data interface{}) {
|
|
|
+ if table.TableResult.HasBrand == 1 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sData, ok := data.(string)
|
|
|
+ brandFlag := ""
|
|
|
+ if ok { //string数据检查brand
|
|
|
+ if sData != "" {
|
|
|
+ brandFlag = u.BrandGet.CheckSensitiveWord(sData)
|
|
|
+ //fmt.Println("--------------", sData, brandFlag)
|
|
|
+ if len(brandFlag) > 0 {
|
|
|
+ table.TableResult.HasBrand = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else { //arr数据检查brand
|
|
|
+ arrData := data.([]string)
|
|
|
+ if len(arrData) > 0 {
|
|
|
+ for _, src := range arrData {
|
|
|
+ if src != "" {
|
|
|
+ brandFlag = u.BrandGet.CheckSensitiveWord(src)
|
|
|
+ if len(brandFlag) > 0 {
|
|
|
+ table.TableResult.HasBrand = 1
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|