123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- 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(util.IntAll(SysConfig["queryNum"]), util.ObjToString(SysConfig["querySid"]))
- }
- func Query(num int, sid string) {
- xf, err := xlsx.OpenFile("抽取结果对比.xlsx")
- if err != nil {
- log.Println("读取文件", err)
- return
- }
- var projectcodenum, bidamountnum, winnernum, buyernum, budgetnum, projectnamenum int //不相等计数器
- var projectcodenumXT, bidamountnumXT, winnernumXT, buyernumXT, budgetnumXT, projectnamenumXT int //相等计数器
- var pcodeNotNilNumP, bidamountNotNilNumP, winnerNotNilNumP, buyerNotNilNumP, budgetNotNilNumP, pnameNotNilNumP int //不相等计数器
- var pcodeNotNilNumN, bidamountNotNilNumN, winnerNotNilNumN, buyerNotNilNumN, budgetNotNilNumN, pnameNotNilNumN int //不相等计数器
- log.Println(num, sid)
- if num < 1 {
- log.Println("查询数量应该大于0")
- return
- }
- sum := num //总量
- //if strings.TrimSpace(gteid) == "" {
- // gteid = "386cd3000000000000000000"
- //}
- var iter *mgo.Iter
- if sid == "" {
- iter = Extractmgo.DB(util.ObjToString(SysConfig["extractdb"])).C(util.ObjToString(SysConfig["extractc"])).Find(nil).Select(bson.M{"_id": 1}).Iter()
- } else {
- iter = Extractmgo.DB(util.ObjToString(SysConfig["extractdb"])).C(util.ObjToString(SysConfig["extractc"])).Find(bson.M{"_id": bson.M{
- "$gte": bson.ObjectIdHex(sid)},
- }).Select(bson.M{"_id": 1}).Iter()
- }
- defer log.Println("关闭 iter:", iter.Close())
- var data map[string]bson.ObjectId
- getdata := make([]bson.ObjectId, 0)
- for iter.Next(&data) {
- if num == 0 {
- break
- }
- getdata = append(getdata, data["_id"])
- num--
- }
- log.Println(sum, "条数据加载完成")
- 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 _, gv := range getdata {
- log.Println(gv)
- gvid := gv.Hex()
- pdata, b := Previousmgo.FindById(util.ObjToString(SysConfig["previousc"]), gvid, SysConfig["keyfield"])
- if !b || len(*pdata) == 0 {
- log.Println("oldId不存在")
- continue
- }
- log.Println("pdata:", pdata)
- ndata, b := Newmgo.FindById(util.ObjToString(SysConfig["newc"]), gvid, SysConfig["keyfield"])
- if !b || len(*ndata) == 0 {
- log.Println("nweId不存在")
- continue
- }
- log.Println("ndata:", ndata)
- versioncomparison := new(versionComparison)
- versioncomparison.Id = gvid
- versioncomparison.Url = "https://www.jianyu360.com/article/content/" + util.CommonEncodeArticle("content", gvid) + ".html"
- for k := range SysConfig["keyfield"].(map[string]interface{}) {
- var pd interface{}
- var nd interface{}
- if k == "budget" || k == "bidamount" {
- pd = util.Float64All((*pdata)[k])
- nd = util.Float64All((*ndata)[k])
- if pd.(float64) > 0 {
- switch k {
- case "budget":
- budgetNotNilNumP++
- case "bidamount":
- bidamountNotNilNumP++
- }
- }
- if nd.(float64) > 0 {
- switch k {
- case "budget":
- budgetNotNilNumN++
- case "bidamount":
- bidamountNotNilNumN++
- }
- }
- } else {
- pd = strings.TrimSpace(util.ObjToString((*pdata)[k]))
- nd = strings.TrimSpace(util.ObjToString((*ndata)[k]))
- if strings.TrimSpace(pd.(string)) != "" {
- switch k {
- case "projectname":
- pnameNotNilNumP++
- case "buyer":
- buyerNotNilNumP++
- case "projectcode":
- pcodeNotNilNumP++
- case "winner":
- winnerNotNilNumP++
- }
- }
- if strings.TrimSpace(nd.(string)) != "" {
- switch k {
- case "projectname":
- pnameNotNilNumN++
- case "buyer":
- buyerNotNilNumN++
- case "projectcode":
- pcodeNotNilNumN++
- case "winner":
- winnerNotNilNumN++
- }
- }
- }
- if pd != nd {
- //log.Println(k)
- switch k {
- case "projectname":
- projectname := new(Projectname)
- projectname.versionComparison = *versioncomparison
- pd = strings.Trim(fmt.Sprint(pd), "项目")
- pd = strings.Trim(strings.TrimSpace(fmt.Sprint(pd)), "采购")
- nd = strings.Trim(fmt.Sprint(nd), "项目")
- nd = strings.Trim(strings.TrimSpace(fmt.Sprint(nd)), "采购")
- if pd != nd{
- projectname.ProjectnameOld = fmt.Sprint(pd)
- projectname.ProjectnameNew = fmt.Sprint(nd)
- projectnames = append(projectnames, projectname)
- projectnamenum++
- }else {
- projectnamenumXT++
- }
- case "buyer":
- buyer := new(Buyer)
- buyer.versionComparison = *versioncomparison
- buyer.BuyerOld = fmt.Sprint(pd)
- buyer.BuyerNew = fmt.Sprint(nd)
- buyers = append(buyers, buyer)
- buyernum++
- case "projectcode":
- projectcode := new(Projectcode)
- projectcode.ProjectcodeOld = fmt.Sprint(pd)
- projectcode.ProjectcodeNew = fmt.Sprint(nd)
- projectcode.versionComparison = *versioncomparison
- projectcodes = append(projectcodes, projectcode)
- projectcodenum++
- case "winner":
- winner := new(Winner)
- winner.WinnerOld = fmt.Sprint(pd)
- winner.WinnerNew = fmt.Sprint(nd)
- winner.versionComparison = *versioncomparison
- winners = append(winners, winner)
- winnernum++
- case "budget":
- budget := new(Budget)
- budget.BudgetOld = fmt.Sprint(pd)
- budget.BudgetNew = fmt.Sprint(nd)
- budget.versionComparison = *versioncomparison
- budgets = append(budgets, budget)
- budgetnum++
- case "bidamount":
- bidamount := new(Bidamount)
- bidamount.BidamountOld = fmt.Sprint(pd)
- bidamount.BidamountNew = fmt.Sprint(nd)
- bidamount.versionComparison = *versioncomparison
- bidamounts = append(bidamounts, bidamount)
- bidamountnum++
- }
- }else {
- //相同统计
- pd = strings.TrimSpace(fmt.Sprint(pd))
- nd = strings.TrimSpace(fmt.Sprint(nd))
- if pd == ""||pd == "0" || nd == ""|| nd == "0"{
- continue
- }
- if pd == nd {
- switch k {
- case "projectname":
- projectnamenumXT++
- case "buyer":
- buyernumXT++
- case "projectcode":
- projectcodenumXT++
- case "winner":
- winnernumXT++
- case "budget":
- budgetnumXT++
- case "bidamount":
- bidamountnumXT++
- }
- }
- }
- }
- 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":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(pnameNotNilNumP)
- ivr.Cells[2].SetValue(pnameNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(projectnamenumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(projectnamenum)
- ivr.Cells[4].SetStyle(style)
- case "buyer":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(buyerNotNilNumP)
- ivr.Cells[2].SetValue(buyerNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(buyernumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(buyernum)
- ivr.Cells[4].SetStyle(style)
- case "projectcode":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(pcodeNotNilNumP)
- ivr.Cells[2].SetValue(pcodeNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(projectcodenumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(projectcodenum)
- ivr.Cells[4].SetStyle(style)
- case "winner":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(winnerNotNilNumP)
- ivr.Cells[2].SetValue(winnerNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(winnernumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(winnernum)
- ivr.Cells[4].SetStyle(style)
- case "budget":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(budgetNotNilNumP)
- ivr.Cells[2].SetValue(budgetNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(budgetnumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(budgetnum)
- ivr.Cells[4].SetStyle(style)
- case "bidamount":
- style := ivr.Cells[1].GetStyle()
- style.Font.Color = "000000"
- ivr.Cells[1].SetValue(bidamountNotNilNumP)
- ivr.Cells[2].SetValue(bidamountNotNilNumN)
- //结果相同数量
- ivr.Cells[3].SetValue(bidamountnumXT)
- ivr.Cells[3].SetStyle(style)
- //结果不同数量
- ivr.Cells[4].SetValue(bidamountnum)
- ivr.Cells[4].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
- }
|