123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- 抽取结果对比
- */
- package main
- import (
- "flag"
- "fmt"
- "jy/mongodbutil"
- "log"
- qu "qfw/util"
- "github.com/tealeg/xlsx"
- "gopkg.in/mgo.v2/bson"
- )
- var (
- SysConfig map[string]interface{}
- Premgo *mongodbutil.Pool //上个版本库
- Newmgo *mongodbutil.Pool //当前版本库
- FieldData map[string]map[string]*Data
- Compares map[string]*Compare
- Sid, Eid string
- Fields []string
- )
- type Compare struct {
- Field string //属性
- PreExtNum, NewExtNum int //上个版、当前版有值数量
- PreNilnum, NewNilnum int //上个版、当前版无值数量
- EqNum, NEqNum int //相等、不等数据量
- }
- type Data struct {
- Id string
- PreVal, NewVal string
- }
- func init() {
- flag.StringVar(&Sid, "sid", "5d348c0ca5cb26b9b76a4bb8", "开始id")
- flag.StringVar(&Eid, "eid", "5d34ae22a5cb26b9b7850b43", "结束id")
- flag.Parse()
- qu.ReadConfig(&SysConfig)
- Premgo = mongodbutil.MgoFactory(1, 3, 120, qu.ObjToString(SysConfig["premgo"]), qu.ObjToString(SysConfig["predb"]))
- Newmgo = mongodbutil.MgoFactory(1, 3, 120, qu.ObjToString(SysConfig["newmgo"]), qu.ObjToString(SysConfig["newdb"]))
- tmp, _ := SysConfig["fields"].([]interface{})
- for _, v := range tmp {
- Fields = append(Fields, qu.ObjToString(v))
- }
- FieldData = map[string]map[string]*Data{}
- Compares = map[string]*Compare{}
- }
- func main() {
- getVersionData()
- createXlsx()
- }
- func createXlsx() {
- xf, err := xlsx.OpenFile("template.xlsx")
- if err != nil {
- log.Println(err)
- return
- }
- //生成第一个sheet信息
- sh := xf.Sheets[0]
- for i, field := range Fields {
- for k, row := range sh.Rows {
- if k > 2+i {
- style := (*row).Cells[1].GetStyle()
- style.Font.Color = "000000"
- (*row).Cells[0].SetString(field)
- (*row).Cells[1].SetInt(Compares[field].PreExtNum)
- (*row).Cells[1].SetStyle(style)
- (*row).Cells[2].SetInt(Compares[field].NewExtNum)
- (*row).Cells[2].SetStyle(style)
- (*row).Cells[3].SetInt(Compares[field].EqNum)
- (*row).Cells[3].SetStyle(style)
- (*row).Cells[4].SetInt(Compares[field].NEqNum)
- (*row).Cells[4].SetStyle(style)
- }
- sh.Rows[k] = row
- }
- }
- //生成信息sheet
- url := "https://www.jianyu360.com/article/content/%s.html"
- for _, field := range Fields {
- sh, _ := xf.AddSheet(field)
- rowh := sh.AddRow()
- rowh.AddCell().SetString("id")
- rowh.AddCell().SetString("preval")
- rowh.AddCell().SetString("newval")
- rowh.AddCell().SetString("url")
- tmp := FieldData[field]
- for k, v := range tmp {
- if v.NewVal != v.PreVal {
- row := sh.AddRow()
- row.AddCell().SetString(k)
- row.AddCell().SetString(v.PreVal)
- row.AddCell().SetString(v.NewVal)
- row.AddCell().SetString(fmt.Sprintf(url, qu.CommonEncodeArticle("content", v.Id)))
- }
- }
- }
- err = xf.Save("result.xlsx")
- if err != nil {
- log.Println("保存xlsx失败:", err)
- return
- }
- log.Println("xlsx保存成功")
- }
- func getVersionData() {
- query := bson.M{"_id": bson.M{"$gte": bson.ObjectIdHex(Sid), "$lte": bson.ObjectIdHex(Eid)}}
- log.Println(qu.ObjToString(SysConfig["prec"]), query)
- list1, _ := Premgo.Find(qu.ObjToString(SysConfig["prec"]), query, nil, `{}`, false, -1, -1)
- for _, v := range *list1 {
- for _, key := range Fields {
- rd := FieldData[key]
- if rd == nil {
- rd = map[string]*Data{}
- }
- rd[qu.BsonIdToSId(v["_id"])] = &Data{
- Id: qu.BsonIdToSId(v["_id"]),
- PreVal: fmt.Sprint(v[key]),
- }
- FieldData[key] = rd
- }
- }
- log.Println("pre version 加载完成", len(*list1))
- list2, _ := Newmgo.Find(qu.ObjToString(SysConfig["newc"]), query, nil, `{}`, false, -1, -1)
- for _, v := range *list2 {
- for _, field := range Fields {
- rd := FieldData[field]
- if rd == nil {
- rd = map[string]*Data{}
- }
- _id := qu.BsonIdToSId(v["_id"])
- tmp := rd[_id]
- if tmp != nil {
- tmp.NewVal = fmt.Sprint(v[field])
- rd[_id] = tmp
- } else {
- rd[_id] = &Data{
- NewVal: fmt.Sprint(v[field]),
- }
- }
- FieldData[field] = rd
- }
- }
- log.Println("new version 加载完成", len(*list2))
- for k, v := range FieldData {
- cp := &Compare{Field: k}
- for _, d := range v {
- if d.NewVal != "" && d.PreVal != "" {
- if d.NewVal == d.PreVal {
- cp.EqNum++
- } else {
- cp.NEqNum++
- }
- cp.PreExtNum++
- cp.NewExtNum++
- } else {
- if d.NewVal == "" {
- cp.NewNilnum++
- if d.PreVal != "" {
- cp.NEqNum++
- cp.PreExtNum++
- }
- }
- if d.PreVal == "" {
- cp.PreNilnum++
- if d.NewVal != "" {
- cp.NewExtNum++
- cp.NEqNum++
- }
- }
- }
- }
- Compares[k] = cp
- }
- }
|