浏览代码

1.抽取打分如果是title跳过
2.抽取对比

fengweiqiang 6 年之前
父节点
当前提交
5f00a3856b

+ 3 - 0
src/jy/extract/score.go

@@ -89,6 +89,9 @@ func ScoreFields(j *ju.Job) map[string][]*ju.ExtField {
 	qu.Catch()
 	for field, tmps := range result {
 		for tmpsindex, tmpsvalue := range tmps {
+			if tmpsvalue.ExtFrom == "title"{
+				continue
+			}
 			//是否有段标签
 			if len(tmpsvalue.BlockTag) > 0 {
 				//有标签段

+ 1 - 1
src/jy/pretreated/analytable.go

@@ -1763,7 +1763,7 @@ func (table *Table) FindTdVal(td *TD, direct, vdirect int) (b bool) {
 						bfind = true
 					}
 				}
-				if bvalfind {
+				if bvalfind && varrpos >-1{
 					vals[varrpos] = td.Val // += "__" + td.Val
 				} else {
 					//添加时候去除空值和nil

+ 28 - 14
src/res/tagscore.json

@@ -1,11 +1,11 @@
 {
-  "招标条件": {
+  "bidcondition": {
     "buyer": 1,
     "projectname": 1,
     "agency": 1,
     "approvalno": 1
   },
-  "项目概况/采购需求": {
+  "projectoverview": {
     "projectscope": 1,
     "projectcode": 1,
     "projectaddr": 1,
@@ -14,15 +14,23 @@
     "projectscale": 1,
     "funds": 1
   },
-  "投标文件的递交": {
+  "bidder_requirement": {},
+  "examineway": {},
+  "biddingsignup": {},
+  "biddingfile_obtain": {},
+  "bidfile_submit": {
     "bidopendate": 1,
     "bidopentime": 1
   },
-  "开标信息": {
+  "bidopen_info": {
     "bidopendate": 1,
     "bidopentime": 1
   },
-  "联系方式": {
+  "purchasepolicy": {
+  },
+  "noticemedia": {},
+  "superviseway": {},
+  "contactway": {
     "buyer": 1,
     "buyerperson": 1,
     "buyertel": 1,
@@ -32,29 +40,32 @@
     "agencytel": 1,
     "agencyaddr": 1
   },
-  "项目信息": {
+  "bidbond": {},
+  "bidder_inforeg": {},
+  "bid_note": {},
+  "projectinfo": {
     "projectcode": 1,
     "projectname": 1
   },
-  "采购单位信息": {
+  "buyerinfo": {
     "buyer": 1,
     "buyeraddr": 1,
     "buyerperson": 1,
     "buyertel": 1
   },
-  "招标代理机构信息": {
+  "bidagencyinfo": {
     "agency": 1,
     "agencyaddr": 1,
     "agencyperson": 1,
     "agencytel": 1
   },
-  "中标供应商": {
+  "winner": {
     "winner": 1,
     "winneraddr": 1,
     "winnerpserson": 1,
     "winnertel": 1
   },
-  "成交信息": {
+  "dealinfo": {
     "projectname": 1,
     "projectcode": 1,
     "bidamount": 1,
@@ -64,17 +75,20 @@
     "experts": 1,
     "purchasinglist": 1
   },
-  "评标委员会": {
+  "servicecharge": {},
+  "bidevaluat_result": {},
+  "bidevaluat_committee": {
     "experts": 1
   },
-  "报价明细": {
+  "offerdetail": {
     "purchasinglist": 1,
     "bidamount": 1
   },
-  "合同金额": {
+  "contractamount": {
     "bidamount": 1
   },
-  "其他": {
+  "payway": {},
+  "other": {
     "buyer": 1,
     "projectname": 1,
     "agency": 1,

+ 29 - 0
src/res/公告结构.txt

@@ -0,0 +1,29 @@
+招标公告	
+	招标条件 bidcondition
+	项目概况/采购需求 projectoverview
+	投标人资格要求 bidder_requirement
+	资格审查方式 examineway
+	投标报名 biddingsignup
+	招标文件的获取 biddingfile_obtain
+	投标文件的递交 bidfile_submit
+	开标信息 bidopen_info
+	采购项目需要落实的政府采购政策 purchasepolicy
+	公告媒体 noticemedia
+	监督方式 superviseway
+	联系方式 contactway
+	投标保证金 bidbond
+	投标人信息注册 bidder_inforeg
+	投标注意事项 bid_note
+"中标公告 合同"	
+	项目信息 projectinfo
+	采购单位信息 buyerinfo
+	招标代理机构信息 bidagencyinfo
+	中标供应商 winner
+	成交信息 dealinfo
+	采购代理服务费收取 servicecharge
+	评标结果公示 bidevaluat_result
+	评标委员会 bidevaluat_committee
+	报价明细 offerdetail
+	联系方式 contactway
+	合同金额 contractamount
+	付款方式 payway

+ 19 - 0
versioncomparison/config.json

@@ -0,0 +1,19 @@
+{
+  "extractmgo": "192.168.3.207:27081",
+  "extractdb": "qfw",
+  "extractc": "bidding",
+  "previousmgo": "192.168.3.207:27081",
+  "previousdb": "qfw",
+  "previousc": "result_v3",
+  "newmgo": "192.168.3.207:27081",
+  "newdb": "extract_v3",
+  "newc": "result_data",
+  "keyfield": {
+    "bidamount": 1,
+    "budget": 1,
+    "winner": 1,
+    "projectcode":1,
+    "buyer": 1,
+    "projectname": 1
+  }
+}

+ 315 - 0
versioncomparison/main.go

@@ -0,0 +1,315 @@
+package main
+
+import (
+	"fmt"
+	"gopkg.in/mgo.v2"
+	"gopkg.in/mgo.v2/bson"
+	"jy/mongodbutil"
+	"log"
+	"qfw/common/src/github.com/tealeg/xlsx"
+	"qfw/util"
+	"strings"
+)
+
+var (
+	SysConfig   map[string]interface{}
+	Extractmgo  *mgo.Session      //抽取
+	Previousmgo *mongodbutil.Pool //之前抽取
+	Newmgo      *mongodbutil.Pool //最新抽取
+)
+
+/**
+与上个抽取版本做比较
+ */
+func init() {
+	util.ReadConfig(&SysConfig)
+	if len(SysConfig) < 1 {
+		log.Println("配置文件读取失败")
+		return
+	}
+	session, e := mgo.Dial(util.ObjToString(SysConfig["extractmgo"]))
+	if e != nil {
+		log.Fatal(e)
+	}
+	Extractmgo = session
+	Previousmgo = mongodbutil.MgoFactory(2, 5, 120, util.ObjToString(SysConfig["previousmgo"]), util.ObjToString(SysConfig["previousdb"]))
+	Newmgo = mongodbutil.MgoFactory(2, 5, 120, util.ObjToString(SysConfig["newmgo"]), util.ObjToString(SysConfig["newdb"]))
+}
+
+type versionComparison struct {
+	Id  interface{} `json:"_id"`
+	Url string      `json:"url"`
+}
+
+func main() {
+	Query(1000)
+}
+
+func Query(num int) {
+	xf, err := xlsx.OpenFile("抽取结果对比.xlsx")
+	if err != nil {
+		log.Println("读取文件", err)
+		return
+	}
+	var projectcodenum, bidamountnum, winnernum, buyernum, budgetnum, projectnamenum int //不相等计数器
+	log.Println(num)
+	if num < 1 {
+		log.Println("查询数量应该大于0")
+		return
+	}
+	sum := num //总量
+	//if strings.TrimSpace(gteid) == "" {
+	//	gteid = "386cd3000000000000000000"
+	//}
+
+	iter := Extractmgo.DB(util.ObjToString(SysConfig["extractdb"])).C(util.ObjToString(SysConfig["extractc"])).Find(nil).Select(bson.M{"_id": 1, "href": 1}).Iter()
+	defer log.Println("关闭 iter:", iter.Close())
+	var data map[string]interface{}
+	projectnames := make([]*Projectname, 0)
+	buyers := make([]*Buyer, 0)
+	projectcodes := make([]*Projectcode, 0)
+	winners := make([]*Winner, 0)
+	budgets := make([]*Budget, 0)
+	bidamounts := make([]*Bidamount, 0)
+	for iter.Next(&data) {
+		if num == 0 {
+			break
+		}
+		log.Println(data["_id"])
+		id := data["_id"].(bson.ObjectId).Hex()
+		pdata, b := Previousmgo.FindById(util.ObjToString(SysConfig["previousc"]), id, SysConfig["keyfield"])
+		if !b || len(*pdata) == 0 {
+			log.Println("oldId不存在")
+			continue
+		}
+		log.Println("pdata:", pdata)
+
+		ndata, b := Newmgo.FindById(util.ObjToString(SysConfig["newc"]), id, SysConfig["keyfield"])
+		if !b || len(*ndata) == 0 {
+			log.Println("nweId不存在")
+			continue
+		}
+		log.Println("ndata:", ndata)
+
+		versioncomparison := new(versionComparison)
+		versioncomparison.Id = id
+		versioncomparison.Url = "https://www.jianyu360.com/article/content/" + util.CommonEncodeArticle("content", data["_id"].(bson.ObjectId).Hex()) + ".html"
+		for k := range SysConfig["keyfield"].(map[string]interface{}) {
+			if util.ObjToString((*pdata)[k]) != util.ObjToString((*ndata)[k]) {
+				//log.Println(k)
+				switch k {
+				case "projectname":
+					projectname := new(Projectname)
+					projectname.versionComparison = *versioncomparison
+					projectname.ProjectnameOld = util.ObjToString((*pdata)[k])
+					projectname.ProjectnameNew = util.ObjToString((*ndata)[k])
+					projectnames = append(projectnames, projectname)
+					projectnamenum++
+				case "buyer":
+					buyer := new(Buyer)
+					buyer.versionComparison = *versioncomparison
+					buyer.BuyerOld = util.ObjToString((*pdata)[k])
+					buyer.BuyerNew = util.ObjToString((*ndata)[k])
+					buyers = append(buyers, buyer)
+					buyernum++
+				case "projectcode":
+					projectcode := new(Projectcode)
+					projectcode.ProjectcodeOld = util.ObjToString((*pdata)[k])
+					projectcode.ProjectcodeNew = util.ObjToString((*ndata)[k])
+					projectcode.versionComparison = *versioncomparison
+					projectcodes = append(projectcodes, projectcode)
+					projectcodenum++
+				case "winner":
+					winner := new(Winner)
+					winner.WinnerOld = util.ObjToString((*pdata)[k])
+					winner.WinnerNew = util.ObjToString((*ndata)[k])
+					winner.versionComparison = *versioncomparison
+					winners = append(winners, winner)
+					winnernum++
+				case "budget":
+					budget := new(Budget)
+					budget.BudgetOld = util.ObjToString((*pdata)[k])
+					budget.BudgetNew = util.ObjToString((*ndata)[k])
+					budget.versionComparison = *versioncomparison
+					budgets = append(budgets, budget)
+					budgetnum++
+				case "bidamount":
+					bidamount := new(Bidamount)
+					bidamount.BidamountOld = util.ObjToString((*pdata)[k])
+					bidamount.BidamountNew = util.ObjToString((*ndata)[k])
+					bidamount.versionComparison = *versioncomparison
+					bidamounts = append(bidamounts, bidamount)
+					bidamountnum++
+				}
+			}
+		}
+		num--
+		fmt.Println()
+	}
+	log.Println(projectcodenum, bidamountnum, winnernum, buyernum, budgetnum, projectnamenum)
+	for ins, ivs := range xf.Sheets {
+		for inr, ivr := range ivs.Rows {
+			for _, ivc := range ivr.Cells {
+				//抽取对比
+				if ins == 0 {
+					if inr < 3 {
+						continue
+					}
+					switch strings.TrimSpace(ivc.String()) {
+					case "projectname":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - projectnamenum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(projectnamenum)
+						ivr.Cells[2].SetStyle(style)
+					case "buyer":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - buyernum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(buyernum)
+						ivr.Cells[2].SetStyle(style)
+					case "projectcode":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - projectcodenum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(projectcodenum)
+						ivr.Cells[2].SetStyle(style)
+					case "winner":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - winnernum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(winnernum)
+						ivr.Cells[2].SetStyle(style)
+					case "budget":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - budgetnum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(budgetnum)
+						ivr.Cells[2].SetStyle(style)
+					case "bidamount":
+						//结果相同数量
+						ivr.Cells[1].SetValue(sum - bidamountnum)
+						style := ivr.Cells[1].GetStyle()
+						style.Font.Color = "000000"
+						ivr.Cells[1].SetStyle(style)
+						//结果不同数量
+						ivr.Cells[2].SetValue(bidamountnum)
+						ivr.Cells[2].SetStyle(style)
+					}
+				}
+			}
+		}
+		if ins > 0 {
+			if len(ivs.Rows) == 0 {
+				row := ivs.AddRow()
+				row.AddCell().SetValue("ObjectId")
+				row.AddCell().SetValue("dev3.1.2")
+				row.AddCell().SetValue("dev3.2")
+				row.AddCell().SetValue("URL")
+			}
+			log.Println(ivs.Name)
+			switch strings.TrimSpace(ivs.Name) {
+			case "projectname":
+				for _, v := range projectnames {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.ProjectnameOld)
+					row.AddCell().SetValue(v.ProjectnameNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			case "buyer":
+				for _, v := range buyers {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.BuyerOld)
+					row.AddCell().SetValue(v.BuyerNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			case "projectcode":
+				for _, v := range projectcodes {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.ProjectcodeOld)
+					row.AddCell().SetValue(v.ProjectcodeNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			case "winner":
+				for _, v := range winners {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.WinnerOld)
+					row.AddCell().SetValue(v.WinnerNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			case "budget":
+				for _, v := range budgets {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.BudgetOld)
+					row.AddCell().SetValue(v.BudgetNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			case "bidamount":
+				for _, v := range bidamounts {
+					row := ivs.AddRow()
+					row.AddCell().SetValue(v.Id)
+					row.AddCell().SetValue(v.BidamountOld)
+					row.AddCell().SetValue(v.BidamountNew)
+					row.AddCell().SetValue(v.Url)
+				}
+			}
+		}
+	}
+	err = xf.Save("resultdata.xlsx")
+	if err != nil {
+		log.Println("保存xlsx失败:", err)
+		return
+	}
+	log.Println("xlsx保存成功")
+}
+
+type Projectname struct {
+	versionComparison
+	ProjectnameOld string
+	ProjectnameNew string
+}
+type Buyer struct {
+	versionComparison
+	BuyerOld string
+	BuyerNew string
+}
+type Projectcode struct {
+	versionComparison
+	ProjectcodeOld string
+	ProjectcodeNew string
+}
+type Winner struct {
+	versionComparison
+	WinnerOld string
+	WinnerNew string
+}
+type Budget struct {
+	versionComparison
+	BudgetOld string
+	BudgetNew string
+}
+type Bidamount struct {
+	versionComparison
+	BidamountOld string
+	BidamountNew string
+}

二进制
versioncomparison/抽取结果对比.xlsx