|
@@ -26,16 +26,16 @@ import (
|
|
|
|
|
|
var (
|
|
|
lock, lockrule, lockclear, locktag, blocktag sync.RWMutex
|
|
|
- JYUrl = "https://www.jianyu360.com/article/content/%s.html"
|
|
|
- cut = ju.NewCut() //获取正文并清理
|
|
|
- ExtLogs map[*TaskInfo][]map[string]interface{} //抽取日志
|
|
|
- TaskList map[string]*ExtractTask //任务列表
|
|
|
- ClearTaskList map[string]*ClearTask //清理任务列表
|
|
|
- saveLimit = 100 //抽取日志批量保存
|
|
|
- PageSize = 5000 //查询分页
|
|
|
- Fields = `{"jyfb_data":1,"title":1,"summary":1,"detail":1,"contenthtml":1,"site":1,"spidercode":1,"toptype":1,"subtype":1,"bidstatus":1,"area":1,"city":1,"comeintime":1,"publishtime":1,"sensitive":1,"projectinfo":1,"jsondata":1,"href":1,"infoformat":1,"attach_text":1,"dataging":1,"review_experts":1,"purchasing":1}`
|
|
|
+ JYUrl = "https://www.jianyu360.com/article/content/%s.html"
|
|
|
+ cut = ju.NewCut() //获取正文并清理
|
|
|
+ ExtLogs map[*TaskInfo][]map[string]interface{} //抽取日志
|
|
|
+ TaskList map[string]*ExtractTask //任务列表
|
|
|
+ ClearTaskList map[string]*ClearTask //清理任务列表
|
|
|
+ saveLimit = 100 //抽取日志批量保存
|
|
|
+ PageSize = 5000 //查询分页
|
|
|
+ Fields = `{"jyfb_data":1,"title":1,"summary":1,"detail":1,"contenthtml":1,"site":1,"spidercode":1,"toptype":1,"subtype":1,"bidstatus":1,"area":1,"city":1,"comeintime":1,"publishtime":1,"sensitive":1,"projectinfo":1,"jsondata":1,"href":1,"infoformat":1,"attach_text":1,"dataging":1,"review_experts":1,"purchasing":1}`
|
|
|
//Fields = `{"title":1,"summary":1,"detail":1,"contenthtml":1,"site":1,"spidercode":1,"toptype":1,"subtype":1,"bidstatus":1,"area":1,"city":1,"comeintime":1,"publishtime":1,"sensitive":1,"projectinfo":1,"jsondata":1,"href":1,"infoformat":1,"attach_text":1,"dataging":1,"new_attach_text":1,"createtime":1,"currency":1,"id":1,"company_email":1,"buyerclass":1,"tagname":1,"company_phone":1,"appid":1,"industry":1,"projectscope":1,"item":1,"s_subscopeclass":1,"matchkey":1,"jybxhref":1,"legal_person":1,"matchtype":1,"review_experts":1,"purchasing":1}`
|
|
|
- Fields2 = `{"budget":1,"bidamount":1,"title":1,"projectname":1,"winner":1}`
|
|
|
+ Fields2 = `{"budget":1,"bidamount":1,"title":1,"projectname":1,"winner":1}`
|
|
|
spidercode = map[string]bool{
|
|
|
"gd_zhsggzyjyzx_jsgc_fjczbgg": true,
|
|
|
"js_szgyyqggzyjyzx_jsgc_zjfbgs": true,
|
|
@@ -67,7 +67,6 @@ var (
|
|
|
|
|
|
//var packageUnUsedReg = regexp.MustCompile("1[0-9].投标报价\n1[0-9].1")
|
|
|
|
|
|
-
|
|
|
//启动测试抽取-、、、、结果追踪
|
|
|
func StartExtractTestTask(taskId, startId, num, resultcoll, trackcoll string) bool {
|
|
|
defer qu.Catch()
|
|
@@ -152,7 +151,7 @@ func RunExtractTestTask(ext *ExtractTask, startId, num string) bool {
|
|
|
if ext.IsFileField && (v["projectinfo"] != nil || v["attach_text"] != nil) {
|
|
|
v["isextFile"] = true
|
|
|
j, jf, isSite = ext.PreInfo(v)
|
|
|
- } else {//无附件
|
|
|
+ } else { //无附件
|
|
|
j, _, isSite = ext.PreInfo(v)
|
|
|
}
|
|
|
go ext.ExtractProcess(j, jf, isSite) //抽取-打分-保存
|
|
@@ -329,11 +328,6 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
|
|
|
file2text(&doc) //附件文本堆一起(后期可以考虑,分开处理),方法里修改了doc["detailfile"]结果
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
//正文小于200个字,有附件把附件内容加到正文
|
|
|
//tmpDeatil := detail
|
|
|
//tmpdocument, err := goquery.NewDocumentFromReader(strings.NewReader(tmpDeatil))
|
|
@@ -356,10 +350,10 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
|
|
|
if qu.ObjToString(doc["type"]) == "bid" {
|
|
|
toptype = "结果"
|
|
|
}
|
|
|
- if toptype == "" || toptype=="采购意向" {
|
|
|
+ if toptype == "" || toptype == "采购意向" {
|
|
|
toptype = "all"
|
|
|
}
|
|
|
- if subtype == "" || subtype=="采购意向" {
|
|
|
+ if subtype == "" || subtype == "采购意向" {
|
|
|
subtype = "all"
|
|
|
}
|
|
|
if subtype == "其他" {
|
|
@@ -405,7 +399,7 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
|
|
|
RuleBlock: e.RuleBlock,
|
|
|
Dataging: qu.IntAll(doc["dataging"]),
|
|
|
IsClearnMoney: isClearnMoneystr,
|
|
|
- IsUnRulesTab : false,
|
|
|
+ IsUnRulesTab: false,
|
|
|
}
|
|
|
if isextFile {
|
|
|
jf = &ju.Job{
|
|
@@ -426,7 +420,7 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
|
|
|
IsFile: isextFile,
|
|
|
Dataging: qu.IntAll(doc["dataging"]),
|
|
|
IsClearnMoney: isClearnMoneystr,
|
|
|
- IsUnRulesTab : false,
|
|
|
+ IsUnRulesTab: false,
|
|
|
}
|
|
|
}
|
|
|
codeSite := j.SpiderCode
|
|
@@ -517,21 +511,21 @@ func file2text(doc *map[string]interface{}) {
|
|
|
}
|
|
|
|
|
|
//判断-附件分包是否有效
|
|
|
-func isUsedPackageJF(jf_package map[string]map[string]interface{})bool {
|
|
|
- if jf_package == nil || len(jf_package) == 0 {
|
|
|
+func isUsedPackageJF(jf_package map[string]map[string]interface{}) bool {
|
|
|
+ if jf_package == nil || len(jf_package) == 0 {
|
|
|
return false
|
|
|
}
|
|
|
- for _,pack := range jf_package {
|
|
|
+ for _, pack := range jf_package {
|
|
|
budget := qu.Float64All(pack["budget"])
|
|
|
bidamount := qu.Float64All(pack["bidamount"])
|
|
|
//winner := qu.Float64All(pack["winner"])
|
|
|
//text := qu.ObjToString(pack["text"])
|
|
|
//13.投标报价\n13.1本次报价
|
|
|
//14.投标报价\n14.1投标报价
|
|
|
- if budget >0.0 && budget <= 1.0 {
|
|
|
+ if budget > 0.0 && budget <= 1.0 {
|
|
|
return false
|
|
|
}
|
|
|
- if bidamount >0.0 && bidamount <= 1.0 {
|
|
|
+ if bidamount > 0.0 && bidamount <= 1.0 {
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
@@ -541,7 +535,7 @@ func isUsedPackageJF(jf_package map[string]map[string]interface{})bool {
|
|
|
//抽取-正文
|
|
|
func (e *ExtractTask) ExtractProcess(j, jf *ju.Job, isSite bool) {
|
|
|
e.ExtractDetail(j, isSite, j.SpiderCode) //正文抽取属性
|
|
|
- if jf != nil && jf.IsFile { //附件jf → j 合并
|
|
|
+ if jf != nil && jf.IsFile { //附件jf → j 合并
|
|
|
e.ExtractDetail(jf, isSite, j.SpiderCode)
|
|
|
for tmpk, xs := range jf.Result {
|
|
|
if len(j.Result[tmpk]) == 0 {
|
|
@@ -552,32 +546,40 @@ func (e *ExtractTask) ExtractProcess(j, jf *ju.Job, isSite bool) {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
+ if tmpk == "winner" && j.Category == "招标" && j.CategorySecond != "单一" {
|
|
|
+ //log.Debug("不采用~招标类附件中标信息")
|
|
|
+ continue
|
|
|
+ }
|
|
|
j.Result[tmpk] = append(j.Result[tmpk], jf.Result[tmpk]...)
|
|
|
}
|
|
|
- }else {
|
|
|
- if tmpk=="winner" {
|
|
|
- //均没有有效值~采用附件的
|
|
|
+ } else {
|
|
|
+ if tmpk == "winner" { //均没有有效值~采用附件的
|
|
|
isUsed := false
|
|
|
- for _,v := range j.Result[tmpk] {
|
|
|
- if v.Value!="" {
|
|
|
+ for _, v := range j.Result[tmpk] {
|
|
|
+ if v.Value != "" {
|
|
|
isUsed = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
if !isUsed {
|
|
|
+ if j.Category == "招标" && j.CategorySecond != "单一" {
|
|
|
+ //log.Debug("不采用~招标类附件中标信息~")
|
|
|
+ continue
|
|
|
+ }
|
|
|
j.Result[tmpk] = append(j.Result[tmpk], jf.Result[tmpk]...)
|
|
|
}
|
|
|
}
|
|
|
- //if tmpk=="buyer" { //附件数据-没有正文靠谱
|
|
|
- // j.Result[tmpk] = append(j.Result[tmpk], jf.Result[tmpk]...)
|
|
|
- //}
|
|
|
}
|
|
|
}
|
|
|
if len(j.Winnerorder) == 0 && jf.Winnerorder != nil && len(jf.Winnerorder) > 0 {
|
|
|
- j.Winnerorder = append(j.Winnerorder, jf.Winnerorder...)
|
|
|
+ if j.Category == "招标" && j.CategorySecond != "单一" {
|
|
|
+ //log.Debug("不采用~招标类附件中标信息~~")
|
|
|
+ } else {
|
|
|
+ j.Winnerorder = append(j.Winnerorder, jf.Winnerorder...)
|
|
|
+ }
|
|
|
}
|
|
|
- if len(j.PackageInfo) == 0 && isUsedPackageJF(jf.PackageInfo) {
|
|
|
- j.PackageInfo = jf.PackageInfo
|
|
|
+ if len(j.PackageInfo) == 0 && isUsedPackageJF(jf.PackageInfo) {
|
|
|
+ j.PackageInfo = jf.PackageInfo
|
|
|
}
|
|
|
}
|
|
|
if isSite {
|
|
@@ -684,7 +686,7 @@ func (e *ExtractTask) ExtractDetail(j *ju.Job, isSite bool, codeSite string) {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- if vc.Field =="signendtime" {
|
|
|
+ if vc.Field == "addressing" {
|
|
|
//log.Debug("调试抽取字段")
|
|
|
}
|
|
|
////抽取-前置规则
|
|
@@ -785,9 +787,9 @@ func (e *ExtractTask) ExtractDetail(j *ju.Job, isSite bool, codeSite string) {
|
|
|
text := qu.ObjToString(v.Value)
|
|
|
before = text
|
|
|
//指定清理--新增-函数清理-其他清理
|
|
|
- if key=="winner"||key=="agency"||key=="buyer" {
|
|
|
- text = strings.ReplaceAll(text,"【","")
|
|
|
- text = strings.ReplaceAll(text,"】","")
|
|
|
+ if key == "winner" || key == "agency" || key == "buyer" {
|
|
|
+ text = strings.ReplaceAll(text, "【", "")
|
|
|
+ text = strings.ReplaceAll(text, "】", "")
|
|
|
}
|
|
|
v.Value = clear.OtherClean(key, text)
|
|
|
BeforeAddClearFnLog("clear.OtherClean", "特殊符号清理clear.OtherClean", j.SourceMid, before, v.MatchType, v, e)
|
|
@@ -1117,7 +1119,7 @@ func ExtRuleCoreByPkgReg(j *ju.Job, in *RegLuaInfo, e *ExtractTask) {
|
|
|
//块抽取
|
|
|
if in.Field != "" {
|
|
|
//临时调试分包抽取字段-
|
|
|
- if in.Field=="bidamount" {
|
|
|
+ if in.Field == "bidamount" {
|
|
|
//log.Debug("分包-调试字段...")
|
|
|
}
|
|
|
for k, vbpkg := range j.BlockPackage {
|
|
@@ -1233,7 +1235,7 @@ func ExtRuleCoreByPkgReg(j *ju.Job, in *RegLuaInfo, e *ExtractTask) {
|
|
|
j.BlockPackage[k].IsTrueAgencyfee = true
|
|
|
}
|
|
|
break
|
|
|
- }else if in.Field == "bidamount" && vbpkg.Bidamount <= 0 {
|
|
|
+ } else if in.Field == "bidamount" && vbpkg.Bidamount <= 0 {
|
|
|
lock.Lock()
|
|
|
cfn := e.ClearFn[in.Field]
|
|
|
lock.Unlock()
|
|
@@ -1656,10 +1658,10 @@ func ExtRegBack(j *ju.Job, in *RegLuaInfo, t *TaskInfo, vc *RuleCore) {
|
|
|
}
|
|
|
text := qu.ObjToString(v.Value)
|
|
|
if v.Field == "bidamount" || v.Field == "budget" {
|
|
|
- if (strings.Contains(qu.ObjToString(v.SourceValue), "费率")||
|
|
|
+ if (strings.Contains(qu.ObjToString(v.SourceValue), "费率") ||
|
|
|
strings.Contains(qu.ObjToString(v.SourceValue), "税率") ||
|
|
|
- strings.Contains(qu.ObjToString(v.SourceValue), "(%)") ) &&
|
|
|
- !strings.Contains(qu.ObjToString(v.SourceValue), "工程设计费"){
|
|
|
+ strings.Contains(qu.ObjToString(v.SourceValue), "(%)")) &&
|
|
|
+ !strings.Contains(qu.ObjToString(v.SourceValue), "工程设计费") {
|
|
|
j.Result[in.Field][k].IsTrue = false
|
|
|
continue
|
|
|
}
|
|
@@ -1753,7 +1755,7 @@ func ExtRuleKV(j *ju.Job, in *RegLuaInfo, t *TaskInfo) {
|
|
|
if v.Type != "table" && !strings.Contains(v.Type, "colon") && !strings.Contains(v.Type, "space") {
|
|
|
continue
|
|
|
}
|
|
|
- if v.Field=="docendtime" {
|
|
|
+ if v.Field == "docendtime" {
|
|
|
//log.Debug("调试字段...")
|
|
|
}
|
|
|
text := qu.ObjToString(v.Value)
|
|
@@ -1903,74 +1905,74 @@ type FieldValue struct {
|
|
|
|
|
|
var clearWinnerReg = regexp.MustCompile("名称|施工|拟定供应商名称|:|:")
|
|
|
var unPackageWinnerReg = regexp.MustCompile("(重新招标)")
|
|
|
+
|
|
|
//包含字母的实体单位
|
|
|
var letter_entity = regexp.MustCompile("^[\u4E00-\u9FA5]{1,10}[A-Za-z]{1,5}[\u4E00-\u9FA5]{1,10}(公司|集团|单位|机构|企业|厂|场|院|所|店|中心|市|局|站|城|处|行|部|队|联合[会|体])$")
|
|
|
|
|
|
-
|
|
|
//特殊金额-处理判断-倍率关系
|
|
|
-func calculateAbnormalMoney(val []*ju.ExtField) (bool,int) {
|
|
|
+func calculateAbnormalMoney(val []*ju.ExtField) (bool, int) {
|
|
|
//金额结果只有两种 - 倍率关系10000 - 过10E
|
|
|
moneyIndex := []int{}
|
|
|
moneyArr := []float64{}
|
|
|
difValue := map[string]interface{}{}
|
|
|
for k, v := range val { //取第一个非负数,项目名称除外
|
|
|
- if v.IsTrue && v.Score > -1 {
|
|
|
- moneyArr = append(moneyArr,qu.Float64All(v.Value))
|
|
|
- moneyIndex = append(moneyIndex,k)
|
|
|
+ if v.IsTrue && v.Score > -1 {
|
|
|
+ moneyArr = append(moneyArr, qu.Float64All(v.Value))
|
|
|
+ moneyIndex = append(moneyIndex, k)
|
|
|
key := ""
|
|
|
- if m,ok := v.Value.(float64);ok {
|
|
|
- key = fmt.Sprintf("%f",m)
|
|
|
- }else {
|
|
|
+ if m, ok := v.Value.(float64); ok {
|
|
|
+ key = fmt.Sprintf("%f", m)
|
|
|
+ } else {
|
|
|
key = qu.ObjToString(v.Value)
|
|
|
}
|
|
|
- if difValue[key]==nil {
|
|
|
+ if difValue[key] == nil {
|
|
|
difValue[key] = 1
|
|
|
}
|
|
|
- if len(difValue)>2 {
|
|
|
- return false,0
|
|
|
+ if len(difValue) > 2 {
|
|
|
+ return false, 0
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//计算金额数组
|
|
|
- if len(difValue)==2 {
|
|
|
- money_1,money_2 := float64(0),float64(0)
|
|
|
- for k,v := range moneyArr{
|
|
|
- if k==0 {
|
|
|
- money_1=v
|
|
|
- }else {
|
|
|
- if v!=money_1 {
|
|
|
- money_2=v
|
|
|
+ if len(difValue) == 2 {
|
|
|
+ money_1, money_2 := float64(0), float64(0)
|
|
|
+ for k, v := range moneyArr {
|
|
|
+ if k == 0 {
|
|
|
+ money_1 = v
|
|
|
+ } else {
|
|
|
+ if v != money_1 {
|
|
|
+ money_2 = v
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- isRatio,new_money:= false,float64(0) //判断金额是否为倍率关系
|
|
|
- if money_1!=float64(0)&&money_2!=float64(0) {
|
|
|
- if money_1 == money_2*float64(10000) && money_1>=1000000000{
|
|
|
+ isRatio, new_money := false, float64(0) //判断金额是否为倍率关系
|
|
|
+ if money_1 != float64(0) && money_2 != float64(0) {
|
|
|
+ if money_1 == money_2*float64(10000) && money_1 >= 100000000 {
|
|
|
isRatio = true
|
|
|
new_money = money_2
|
|
|
}
|
|
|
- if money_2 == money_1*float64(10000) && money_2>=1000000000{
|
|
|
+ if money_2 == money_1*float64(10000) && money_2 >= 100000000 {
|
|
|
isRatio = true
|
|
|
new_money = money_1
|
|
|
}
|
|
|
|
|
|
if isRatio { //采用新值
|
|
|
- for k,v := range moneyArr{
|
|
|
- if v==new_money {
|
|
|
- return true,moneyIndex[k]
|
|
|
+ for k, v := range moneyArr {
|
|
|
+ if v == new_money {
|
|
|
+ return true, moneyIndex[k]
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return false,0
|
|
|
+ return false, 0
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//分析抽取结果并保存
|
|
|
func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
qu.Try(func() {
|
|
|
+ //(j.Category == "招标" || j.Category == "预告")
|
|
|
if (j.Category == "招标" || j.Category == "预告") && (len(j.BlockPackage) > 0 || len(j.PackageInfo) > 0 || len(j.Result) > 0) {
|
|
|
if j.CategorySecond != "单一" {
|
|
|
delete(j.Result, "winner")
|
|
@@ -2018,7 +2020,7 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
}
|
|
|
|
|
|
//字段-抽取来源
|
|
|
- fieldSource := make(map[string]interface{},0)
|
|
|
+ fieldSource := make(map[string]interface{}, 0)
|
|
|
//字段-抽取来源
|
|
|
for k, val := range result {
|
|
|
if k == "qualifies" {
|
|
@@ -2053,14 +2055,14 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
}
|
|
|
|
|
|
//预算-中标金额字段-特殊情况特殊处理
|
|
|
- if k=="bidamount" || k=="budget" {
|
|
|
- b,index :=calculateAbnormalMoney(val)
|
|
|
+ if k == "bidamount" || k == "budget" {
|
|
|
+ b, index := calculateAbnormalMoney(val)
|
|
|
if b {
|
|
|
new_v := val[index]
|
|
|
tmp[new_v.Field] = new_v.Value
|
|
|
fieldSource[new_v.Field] = map[string]interface{}{
|
|
|
- "ext_type":new_v.Type,
|
|
|
- "ext_from":new_v.ExtFrom,
|
|
|
+ "ext_type": new_v.Type,
|
|
|
+ "ext_from": new_v.ExtFrom,
|
|
|
}
|
|
|
tmp["is_dif_ratioMoney"] = true
|
|
|
continue
|
|
@@ -2071,24 +2073,24 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
if (v.Field == "bidamount" || v.Field == "budget") && v.IsTrue && v.Score > -1 {
|
|
|
tmp[v.Field] = v.Value
|
|
|
fieldSource[v.Field] = map[string]interface{}{
|
|
|
- "ext_type":v.Type,
|
|
|
- "ext_from":v.ExtFrom,
|
|
|
+ "ext_type": v.Type,
|
|
|
+ "ext_from": v.ExtFrom,
|
|
|
}
|
|
|
break
|
|
|
}
|
|
|
if v.Score > -1 && (v.Field != "bidamount" && v.Field != "budget") && len(strings.TrimSpace(fmt.Sprint(v.Value))) > 0 {
|
|
|
tmp[v.Field] = v.Value
|
|
|
fieldSource[v.Field] = map[string]interface{}{
|
|
|
- "ext_type":v.Type,
|
|
|
- "ext_from":v.ExtFrom,
|
|
|
+ "ext_type": v.Type,
|
|
|
+ "ext_from": v.ExtFrom,
|
|
|
}
|
|
|
//中标单位~含字母判断~对比企业库
|
|
|
- if (v.Field =="winner"||v.Field=="buyer") && letter_entity.MatchString(qu.ObjToString(v.SourceValue)){
|
|
|
+ if (v.Field == "winner" || v.Field == "buyer") && letter_entity.MatchString(qu.ObjToString(v.SourceValue)) {
|
|
|
qyxy_data := make([]map[string]interface{}, 0)
|
|
|
ju.QyxySess.Find(map[string]interface{}{
|
|
|
"company_name": qu.ObjToString(v.SourceValue),
|
|
|
}).All(&qyxy_data)
|
|
|
- if qyxy_data!=nil && len(qyxy_data)>0 {
|
|
|
+ if qyxy_data != nil && len(qyxy_data) > 0 {
|
|
|
tmp[v.Field] = v.SourceValue
|
|
|
}
|
|
|
}
|
|
@@ -2108,7 +2110,7 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
if len(j.PackageInfo) > 0 { //分包信息
|
|
|
tmp["package"] = j.PackageInfo
|
|
|
//包预算,中标金额合并大于抽取就覆盖
|
|
|
- tmpBidamount, tmpBudget,tmpAgencyfee:=qu.Float64All(0),qu.Float64All(0),qu.Float64All(0)
|
|
|
+ tmpBidamount, tmpBudget, tmpAgencyfee := qu.Float64All(0), qu.Float64All(0), qu.Float64All(0)
|
|
|
//s_winner逗号分隔拼接,分包中标人
|
|
|
var tmpstr, savewinner []string
|
|
|
//按包排序
|
|
@@ -2122,35 +2124,35 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
//包数大于1累加
|
|
|
for _, v := range j.PackageInfo {
|
|
|
if v["budget"] != nil {
|
|
|
- tmpBudget = precisionAddFloat(tmpBudget,qu.Float64All(v["budget"]))
|
|
|
+ tmpBudget = precisionAddFloat(tmpBudget, qu.Float64All(v["budget"]))
|
|
|
}
|
|
|
if v["bidamount"] != nil {
|
|
|
- tmpBidamount = precisionAddFloat(tmpBidamount,qu.Float64All(v["bidamount"]))
|
|
|
+ tmpBidamount = precisionAddFloat(tmpBidamount, qu.Float64All(v["bidamount"]))
|
|
|
}
|
|
|
if v["agencyfee"] != nil {
|
|
|
- tmpAgencyfee = precisionAddFloat(tmpAgencyfee,qu.Float64All(v["agencyfee"]))
|
|
|
+ tmpAgencyfee = precisionAddFloat(tmpAgencyfee, qu.Float64All(v["agencyfee"]))
|
|
|
}
|
|
|
}
|
|
|
if qu.Float64All(tmp["budget"]) < tmpBudget {
|
|
|
fieldSource["budget"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["budget"] = tmpBudget
|
|
|
}
|
|
|
|
|
|
if qu.Float64All(tmp["agencyfee"]) < tmpAgencyfee {
|
|
|
fieldSource["agencyfee"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["agencyfee"] = tmpAgencyfee
|
|
|
}
|
|
|
|
|
|
if qu.Float64All(tmp["bidamount"]) > 0 && qu.Float64All(tmp["budget"]) > 0 && (qu.Float64All(tmp["bidamount"])/10 > qu.Float64All(tmp["budget"])) {
|
|
|
fieldSource["bidamount"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["bidamount"] = tmpBidamount
|
|
|
} else if qu.Float64All(tmp["bidamount"]) < tmpBidamount {
|
|
@@ -2166,8 +2168,8 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
for _, v := range j.PackageInfo {
|
|
|
if v["budget"] != nil {
|
|
|
fieldSource["budget"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["budget"] = v["budget"]
|
|
|
}
|
|
@@ -2178,8 +2180,8 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
for _, v := range j.PackageInfo {
|
|
|
if v["agencyfee"] != nil {
|
|
|
fieldSource["agencyfee"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["agencyfee"] = v["agencyfee"]
|
|
|
}
|
|
@@ -2190,8 +2192,8 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
for _, v := range j.PackageInfo {
|
|
|
if v["bidamount"] != nil {
|
|
|
fieldSource["bidamount"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
tmp["bidamount"] = v["bidamount"]
|
|
|
}
|
|
@@ -2207,7 +2209,7 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
continue
|
|
|
}
|
|
|
//名称黑名单
|
|
|
- if unPackageWinnerReg.MatchString(new_winner) {
|
|
|
+ if unPackageWinnerReg.MatchString(new_winner) {
|
|
|
continue
|
|
|
}
|
|
|
savewinner = append(savewinner, new_winner)
|
|
@@ -2216,15 +2218,15 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
tmp["s_winner"] = tmp["winner"]
|
|
|
fieldSource["s_winner"] = fieldSource["winner"]
|
|
|
} else if savewinner != nil {
|
|
|
- if len(savewinner)==1 && tmp["winner"] != nil {
|
|
|
+ if len(savewinner) == 1 && tmp["winner"] != nil {
|
|
|
tmp["s_winner"] = tmp["winner"]
|
|
|
fieldSource["s_winner"] = fieldSource["winner"]
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
savewinner = RemoveReplicaSliceString(savewinner)
|
|
|
tmp["s_winner"] = strings.Join(savewinner, ",")
|
|
|
fieldSource["s_winner"] = map[string]interface{}{
|
|
|
- "ext_type":"",
|
|
|
- "ext_from":"package",
|
|
|
+ "ext_type": "",
|
|
|
+ "ext_from": "package",
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2260,24 +2262,27 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
if (v.Field == "bidamount" || v.Field == "budget") && v.IsTrue && v.Value.(float64) > 100 && v.Value.(float64) < 50000000000 {
|
|
|
tmp[v.Field] = v.Value
|
|
|
fieldSource[v.Field] = map[string]interface{}{
|
|
|
- "ext_type":v.Type,
|
|
|
- "ext_from":"ff",
|
|
|
+ "ext_type": v.Type,
|
|
|
+ "ext_from": "ff",
|
|
|
}
|
|
|
break
|
|
|
}
|
|
|
if v.Score > -1 && (v.Field != "bidamount" && v.Field != "budget") && len(strings.TrimSpace(fmt.Sprint(v.Value))) > 0 {
|
|
|
+ if v.Field == "winner" && j.Category == "招标" && j.CategorySecond != "单一" {
|
|
|
+ break //此方法逻辑上已经不会达到这里 winner
|
|
|
+ }
|
|
|
tmp[v.Field] = v.Value
|
|
|
fieldSource[v.Field] = map[string]interface{}{
|
|
|
- "ext_type":v.Type,
|
|
|
- "ext_from":"ff",
|
|
|
+ "ext_type": v.Type,
|
|
|
+ "ext_from": "ff",
|
|
|
}
|
|
|
//中标单位~含字母判断~对比企业库
|
|
|
- if (v.Field =="winner" || v.Field=="buyer") && letter_entity.MatchString(qu.ObjToString(v.SourceValue)){
|
|
|
+ if (v.Field == "winner" || v.Field == "buyer") && letter_entity.MatchString(qu.ObjToString(v.SourceValue)) {
|
|
|
qyxy_data := make([]map[string]interface{}, 0)
|
|
|
ju.QyxySess.Find(map[string]interface{}{
|
|
|
"company_name": qu.ObjToString(v.SourceValue),
|
|
|
}).All(&qyxy_data)
|
|
|
- if qyxy_data!=nil && len(qyxy_data)>0 {
|
|
|
+ if qyxy_data != nil && len(qyxy_data) > 0 {
|
|
|
tmp[v.Field] = v.SourceValue
|
|
|
}
|
|
|
}
|
|
@@ -2301,7 +2306,7 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
tmp["field_source"] = fieldSource
|
|
|
//是否为不规则表格字段
|
|
|
if j.IsUnRulesTab {
|
|
|
- tmp["is_UnRules_Tab"]= j.IsUnRulesTab
|
|
|
+ tmp["is_UnRules_Tab"] = j.IsUnRulesTab
|
|
|
}
|
|
|
for k, v := range *doc {
|
|
|
if utf8.RuneCountInString(qu.ObjToString(v)) > 100000 {
|
|
@@ -2415,9 +2420,9 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
delete(tmp,k)
|
|
|
}
|
|
|
}*/
|
|
|
- //检查字段
|
|
|
- tmp = checkFields(tmp,*j.Data)
|
|
|
|
|
|
+ //检查字段
|
|
|
+ tmp = checkFields(tmp, *j.Data)
|
|
|
|
|
|
if tmp["projectname"] == nil || tmp["projectname"] == "" {
|
|
|
tmp["projectname"] = j.Title
|
|
@@ -2491,36 +2496,47 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
}
|
|
|
|
|
|
//检查字段-
|
|
|
-func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[string]interface{} {
|
|
|
+func checkFields(tmp map[string]interface{}, j_data map[string]interface{}) map[string]interface{} {
|
|
|
delete(tmp, "contenthtml")
|
|
|
delete(tmp, "detail")
|
|
|
- tmp["repeat"] = 0
|
|
|
|
|
|
+ //对于招标类信息~若winner没有值~过滤掉中标相关信息
|
|
|
+ if qu.ObjToString(tmp["toptype"]) == "招标" &&
|
|
|
+ qu.ObjToString(tmp["subtype"]) != "单一" {
|
|
|
+ delete(tmp, "winner")
|
|
|
+ delete(tmp, "s_winner")
|
|
|
+ delete(tmp, "bidamount")
|
|
|
+ delete(tmp, "winnerorder")
|
|
|
+ //if qu.ObjToString(tmp["winner"])=="" || qu.ObjToString(tmp["winner"])=="有限公司"{
|
|
|
+ // delete(tmp,"winner")
|
|
|
+ // delete(tmp,"s_winner")
|
|
|
+ // delete(tmp,"bidamount")
|
|
|
+ // delete(tmp,"winnerorder")
|
|
|
+ //}
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp["repeat"] = 0
|
|
|
//指定爬虫-金额处理-预算-中标金额异常
|
|
|
- if qu.ObjToString(tmp["spidercode"])=="xz_xzzzqjzscjgycxxxpt_zbtzs" {
|
|
|
- if budget, ok := tmp["budget"].(float64); ok && budget>0 && budget < 1000000{
|
|
|
- tmp["budget"] = budget*10000.0
|
|
|
+ if qu.ObjToString(tmp["spidercode"]) == "xz_xzzzqjzscjgycxxxpt_zbtzs" {
|
|
|
+ if budget, ok := tmp["budget"].(float64); ok && budget > 0 && budget < 1000000 {
|
|
|
+ tmp["budget"] = budget * 10000.0
|
|
|
}
|
|
|
- if bidamount, ok := tmp["bidamount"].(float64); ok && bidamount>0 && bidamount > 1000000000{
|
|
|
- tmp["bidamount"] = bidamount/10000.0
|
|
|
+ if bidamount, ok := tmp["bidamount"].(float64); ok && bidamount > 0 && bidamount > 1000000000 {
|
|
|
+ tmp["bidamount"] = bidamount / 10000.0
|
|
|
}
|
|
|
}
|
|
|
- if qu.ObjToString(tmp["spidercode"])=="js_jsszbtbw_zbhxrgs" {
|
|
|
- if bidamount, ok := tmp["bidamount"].(float64); ok && bidamount>0 && bidamount > 1000000000{
|
|
|
- tmp["bidamount"] = bidamount/10000.0
|
|
|
+ if qu.ObjToString(tmp["spidercode"]) == "js_jsszbtbw_zbhxrgs" {
|
|
|
+ if bidamount, ok := tmp["bidamount"].(float64); ok && bidamount > 0 && bidamount > 1000000000 {
|
|
|
+ tmp["bidamount"] = bidamount / 10000.0
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
//金额比例异常-
|
|
|
if _, ok := tmp["bidamount"].(string); ok {
|
|
|
delete(tmp, "bidamount")
|
|
|
} else if fb, ok := tmp["bidamount"].(float64); ok && fb > 0 && qu.Float64All(tmp["budget"]) > 0 && (fb/10 > qu.Float64All(tmp["budget"]) || qu.Float64All(tmp["budget"])/1000 > fb) {
|
|
|
- if fb>1000.0 &&fb<100000000.0{
|
|
|
- }else {
|
|
|
+ if fb > 1000.0 && fb < 100000000.0 {
|
|
|
+ } else {
|
|
|
delete(tmp, "bidamount")
|
|
|
}
|
|
|
}
|
|
@@ -2557,7 +2573,7 @@ func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[s
|
|
|
|
|
|
//项目周期-有效值
|
|
|
projectperiod := qu.ObjToString(tmp["projectperiod"])
|
|
|
- if projectperiod !="" {
|
|
|
+ if projectperiod != "" {
|
|
|
//项目周期包含日期,数字及日期单位可保留,其余可清洗
|
|
|
isNeedValueReg := regexp.MustCompile(`([0-9俩两一二三四五六七八九年月日天周]|合同)`)
|
|
|
if !isNeedValueReg.MatchString(projectperiod) {
|
|
@@ -2568,11 +2584,11 @@ func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[s
|
|
|
//工期单位是否有效-清理
|
|
|
if project_timeunit, ok := tmp["project_timeunit"].(string); ok {
|
|
|
dateReg := regexp.MustCompile(`[年|月|日|天|周]`)
|
|
|
- if !dateReg.MatchString(project_timeunit) || utf8.RuneCountInString(project_timeunit)>4 {
|
|
|
+ if !dateReg.MatchString(project_timeunit) || utf8.RuneCountInString(project_timeunit) > 4 {
|
|
|
delete(tmp, "project_timeunit")
|
|
|
}
|
|
|
//年-0 >5 删除
|
|
|
- if project_timeunit == "年" && (qu.Int64All(tmp["project_duration"])==0 || qu.Int64All(tmp["project_duration"])>5 ){
|
|
|
+ if project_timeunit == "年" && (qu.Int64All(tmp["project_duration"]) == 0 || qu.Int64All(tmp["project_duration"]) > 5) {
|
|
|
delete(tmp, "project_timeunit")
|
|
|
}
|
|
|
}
|
|
@@ -2594,7 +2610,7 @@ func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[s
|
|
|
if bg, ok := tmp["bidamount"].(float64); ok && bg >= 50000000000 {
|
|
|
code := qu.ObjToString(tmp["spidercode"])
|
|
|
if bg >= 50000000000 && code != "xz_xzzzqjzscjgycxxxpt_zbtzs" &&
|
|
|
- code != "js_jsszbtbw_zbhxrgs"{
|
|
|
+ code != "js_jsszbtbw_zbhxrgs" {
|
|
|
tmp["bidamount_max_err"] = bg
|
|
|
delete(tmp, "bidamount")
|
|
|
}
|
|
@@ -2603,21 +2619,22 @@ func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[s
|
|
|
bidway := qu.IntAll(tmp["bidway"])
|
|
|
if bidway == 1 {
|
|
|
tmp["bidway"] = "纸质投标"
|
|
|
- }else if bidway == 2 {
|
|
|
+ } else if bidway == 2 {
|
|
|
tmp["bidway"] = "电子投标"
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
delete(tmp, "bidway")
|
|
|
}
|
|
|
|
|
|
//折扣系数
|
|
|
discount := dealWithDiscountBid(tmp)
|
|
|
- if discount >0.0 {
|
|
|
+ if discount > 0.0 {
|
|
|
tmp["biddiscount"] = discount
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
delete(tmp, "biddiscount")
|
|
|
}
|
|
|
delete(tmp, "biddiscount_up")
|
|
|
delete(tmp, "biddiscount_down")
|
|
|
+ delete(tmp, "addressing")
|
|
|
|
|
|
//临时
|
|
|
//bidstarttime := qu.Int64All(tmp["bidstarttime"])
|
|
@@ -2633,16 +2650,15 @@ func checkFields(tmp map[string]interface{},j_data map[string]interface{}) map[s
|
|
|
// tmp["docendtime"] = time_2
|
|
|
//}
|
|
|
|
|
|
- jyhref:= fmt.Sprintf(JYUrl, qu.CommonEncodeArticle("content", qu.BsonIdToSId(tmp["_id"])))
|
|
|
+ jyhref := fmt.Sprintf(JYUrl, qu.CommonEncodeArticle("content", qu.BsonIdToSId(tmp["_id"])))
|
|
|
tmp["jytest_href"] = jyhref
|
|
|
|
|
|
-
|
|
|
//检查剑鱼发布-爬虫
|
|
|
jyfb_data := *qu.ObjToMap(j_data["jyfb_data"])
|
|
|
- if jyfb_data!=nil {
|
|
|
- for k,v := range jyfb_data{
|
|
|
- if k=="area" {
|
|
|
- delete(tmp,"district")
|
|
|
+ if jyfb_data != nil {
|
|
|
+ for k, v := range jyfb_data {
|
|
|
+ if k == "area" {
|
|
|
+ delete(tmp, "district")
|
|
|
}
|
|
|
tmp[k] = v
|
|
|
}
|
|
@@ -2657,59 +2673,53 @@ func dealWithDiscountBid(tmp map[string]interface{}) float64 {
|
|
|
biddiscount_down := qu.Float64All(tmp["biddiscount_down"])
|
|
|
|
|
|
baseCount := float64(1)
|
|
|
- if biddiscount_down >0.0 {
|
|
|
- num1:=decimal.NewFromFloat(baseCount)
|
|
|
- num2:=decimal.NewFromFloat(biddiscount_down)
|
|
|
+ if biddiscount_down > 0.0 {
|
|
|
+ num1 := decimal.NewFromFloat(baseCount)
|
|
|
+ num2 := decimal.NewFromFloat(biddiscount_down)
|
|
|
decimalValue := num1.Sub(num2)
|
|
|
- res,_ := decimalValue.Float64()
|
|
|
- //log.Debug("下浮后折扣系数:",res)
|
|
|
+ res, _ := decimalValue.Float64()
|
|
|
return res
|
|
|
}
|
|
|
- if biddiscount_up >0.0 {
|
|
|
- num1:=decimal.NewFromFloat(baseCount)
|
|
|
- num2:=decimal.NewFromFloat(biddiscount_up)
|
|
|
+ if biddiscount_up > 0.0 {
|
|
|
+ num1 := decimal.NewFromFloat(baseCount)
|
|
|
+ num2 := decimal.NewFromFloat(biddiscount_up)
|
|
|
decimalValue := num1.Add(num2)
|
|
|
- res,_ := decimalValue.Float64()
|
|
|
+ res, _ := decimalValue.Float64()
|
|
|
//log.Debug("上浮后折扣系数:",res)
|
|
|
return res
|
|
|
}
|
|
|
- if biddiscount>0.0 {
|
|
|
- if biddiscount > 1.0 && biddiscount<=10.0 {
|
|
|
- num1:=decimal.NewFromFloat(10.0)
|
|
|
- num2:=decimal.NewFromFloat(biddiscount)
|
|
|
+ if biddiscount > 0.0 {
|
|
|
+ if biddiscount > 1.0 && biddiscount <= 10.0 {
|
|
|
+ num1 := decimal.NewFromFloat(10.0)
|
|
|
+ num2 := decimal.NewFromFloat(biddiscount)
|
|
|
decimalValue := num2.Div(num1)
|
|
|
- res,_ := decimalValue.Float64()
|
|
|
- //log.Debug("标准-①折扣系数:",res)
|
|
|
+ res, _ := decimalValue.Float64()
|
|
|
return res
|
|
|
- }else if biddiscount>10.0 {
|
|
|
- num1:=decimal.NewFromFloat(100.0)
|
|
|
- num2:=decimal.NewFromFloat(biddiscount)
|
|
|
+ } else if biddiscount > 10.0 {
|
|
|
+ num1 := decimal.NewFromFloat(100.0)
|
|
|
+ num2 := decimal.NewFromFloat(biddiscount)
|
|
|
decimalValue := num2.Div(num1)
|
|
|
- res,_ := decimalValue.Float64()
|
|
|
+ res, _ := decimalValue.Float64()
|
|
|
//log.Debug("标准-⑩折扣系数:",res)
|
|
|
return res
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
//log.Debug("标准折扣系数:",biddiscount)
|
|
|
return biddiscount
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
return 0.0
|
|
|
}
|
|
|
+
|
|
|
//精度丢失-相加
|
|
|
-func precisionAddFloat(tmp1,tmp2 float64)float64{
|
|
|
- num1:=decimal.NewFromFloat(tmp1)
|
|
|
- num2:=decimal.NewFromFloat(tmp2)
|
|
|
+func precisionAddFloat(tmp1, tmp2 float64) float64 {
|
|
|
+ num1 := decimal.NewFromFloat(tmp1)
|
|
|
+ num2 := decimal.NewFromFloat(tmp2)
|
|
|
decimalValue := num2.Add(num1)
|
|
|
- res,_ := decimalValue.Float64()
|
|
|
+ res, _ := decimalValue.Float64()
|
|
|
return res
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
//保存其他
|
|
|
//kv、表格、块上的标签凡是新的标签都入库
|
|
|
//val type times firstid createtime 判定field
|
|
@@ -3014,29 +3024,29 @@ func (e *ExtractTask) StartMatch(field, text string) *pretreated.SortMap {
|
|
|
|
|
|
//筛选重复候选人-相关
|
|
|
func filterRepeatWinArr(j *ju.Job) {
|
|
|
- if j.SpiderCode=="sh_shszfhcxjsglwyh_jsgc_zhbhxrgs" {
|
|
|
- sort_WinOrder_Arr := make([][]map[string]interface{},0)
|
|
|
- sort_arr := make([]map[string]interface{},0)
|
|
|
- for _,v := range j.Winnerorder{
|
|
|
+ if j.SpiderCode == "sh_shszfhcxjsglwyh_jsgc_zhbhxrgs" {
|
|
|
+ sort_WinOrder_Arr := make([][]map[string]interface{}, 0)
|
|
|
+ sort_arr := make([]map[string]interface{}, 0)
|
|
|
+ for _, v := range j.Winnerorder {
|
|
|
sort := qu.IntAll(v["sort"])
|
|
|
- if sort==1 { //为一组
|
|
|
- if len(sort_arr)>0 {
|
|
|
- sort_WinOrder_Arr = append(sort_WinOrder_Arr,sort_arr)
|
|
|
+ if sort == 1 { //为一组
|
|
|
+ if len(sort_arr) > 0 {
|
|
|
+ sort_WinOrder_Arr = append(sort_WinOrder_Arr, sort_arr)
|
|
|
}
|
|
|
- sort_arr = make([]map[string]interface{},0)
|
|
|
+ sort_arr = make([]map[string]interface{}, 0)
|
|
|
}
|
|
|
- sort_arr = append(sort_arr,v)
|
|
|
+ sort_arr = append(sort_arr, v)
|
|
|
}
|
|
|
|
|
|
- if len(sort_arr)>0 {
|
|
|
- sort_WinOrder_Arr = append(sort_WinOrder_Arr,sort_arr)
|
|
|
+ if len(sort_arr) > 0 {
|
|
|
+ sort_WinOrder_Arr = append(sort_WinOrder_Arr, sort_arr)
|
|
|
}
|
|
|
- if len(sort_WinOrder_Arr)>0 { //有重复排序组-开始筛选清理
|
|
|
- isIndex :=0
|
|
|
- for index,winArr := range sort_WinOrder_Arr {
|
|
|
- if len(winArr)>0 {
|
|
|
- if qu.ObjToString(winArr[0]["price"])!=""&&
|
|
|
- qu.ObjToString(winArr[0]["entname"])!="" {
|
|
|
+ if len(sort_WinOrder_Arr) > 0 { //有重复排序组-开始筛选清理
|
|
|
+ isIndex := 0
|
|
|
+ for index, winArr := range sort_WinOrder_Arr {
|
|
|
+ if len(winArr) > 0 {
|
|
|
+ if qu.ObjToString(winArr[0]["price"]) != "" &&
|
|
|
+ qu.ObjToString(winArr[0]["entname"]) != "" {
|
|
|
isIndex = index
|
|
|
break
|
|
|
}
|