main.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package main
  2. import (
  3. "fmt"
  4. "gopkg.in/mgo.v2"
  5. "gopkg.in/mgo.v2/bson"
  6. "jy/mongodbutil"
  7. "log"
  8. "qfw/common/src/github.com/tealeg/xlsx"
  9. "qfw/util"
  10. "strings"
  11. )
  12. var (
  13. SysConfig map[string]interface{}
  14. Extractmgo *mgo.Session //抽取
  15. Previousmgo *mongodbutil.Pool //之前抽取
  16. Newmgo *mongodbutil.Pool //最新抽取
  17. )
  18. /**
  19. 与上个抽取版本做比较
  20. */
  21. func init() {
  22. util.ReadConfig(&SysConfig)
  23. if len(SysConfig) < 1 {
  24. log.Println("配置文件读取失败")
  25. return
  26. }
  27. session, e := mgo.Dial(util.ObjToString(SysConfig["extractmgo"]))
  28. if e != nil {
  29. log.Fatal(e)
  30. }
  31. Extractmgo = session
  32. Previousmgo = mongodbutil.MgoFactory(2, 5, 120, util.ObjToString(SysConfig["previousmgo"]), util.ObjToString(SysConfig["previousdb"]))
  33. Newmgo = mongodbutil.MgoFactory(2, 5, 120, util.ObjToString(SysConfig["newmgo"]), util.ObjToString(SysConfig["newdb"]))
  34. }
  35. type versionComparison struct {
  36. Id interface{} `json:"_id"`
  37. Url string `json:"url"`
  38. }
  39. func main() {
  40. Query(1000)
  41. }
  42. func Query(num int) {
  43. xf, err := xlsx.OpenFile("抽取结果对比.xlsx")
  44. if err != nil {
  45. log.Println("读取文件", err)
  46. return
  47. }
  48. var projectcodenum, bidamountnum, winnernum, buyernum, budgetnum, projectnamenum int //不相等计数器
  49. log.Println(num)
  50. if num < 1 {
  51. log.Println("查询数量应该大于0")
  52. return
  53. }
  54. sum := num //总量
  55. //if strings.TrimSpace(gteid) == "" {
  56. // gteid = "386cd3000000000000000000"
  57. //}
  58. iter := Extractmgo.DB(util.ObjToString(SysConfig["extractdb"])).C(util.ObjToString(SysConfig["extractc"])).Find(nil).Select(bson.M{"_id": 1, "href": 1}).Iter()
  59. defer log.Println("关闭 iter:", iter.Close())
  60. var data map[string]interface{}
  61. projectnames := make([]*Projectname, 0)
  62. buyers := make([]*Buyer, 0)
  63. projectcodes := make([]*Projectcode, 0)
  64. winners := make([]*Winner, 0)
  65. budgets := make([]*Budget, 0)
  66. bidamounts := make([]*Bidamount, 0)
  67. for iter.Next(&data) {
  68. if num == 0 {
  69. break
  70. }
  71. log.Println(data["_id"])
  72. id := data["_id"].(bson.ObjectId).Hex()
  73. pdata, b := Previousmgo.FindById(util.ObjToString(SysConfig["previousc"]), id, SysConfig["keyfield"])
  74. if !b || len(*pdata) == 0 {
  75. log.Println("oldId不存在")
  76. continue
  77. }
  78. log.Println("pdata:", pdata)
  79. ndata, b := Newmgo.FindById(util.ObjToString(SysConfig["newc"]), id, SysConfig["keyfield"])
  80. if !b || len(*ndata) == 0 {
  81. log.Println("nweId不存在")
  82. continue
  83. }
  84. log.Println("ndata:", ndata)
  85. versioncomparison := new(versionComparison)
  86. versioncomparison.Id = id
  87. versioncomparison.Url = "https://www.jianyu360.com/article/content/" + util.CommonEncodeArticle("content", data["_id"].(bson.ObjectId).Hex()) + ".html"
  88. for k := range SysConfig["keyfield"].(map[string]interface{}) {
  89. if util.ObjToString((*pdata)[k]) != util.ObjToString((*ndata)[k]) {
  90. //log.Println(k)
  91. switch k {
  92. case "projectname":
  93. projectname := new(Projectname)
  94. projectname.versionComparison = *versioncomparison
  95. projectname.ProjectnameOld = util.ObjToString((*pdata)[k])
  96. projectname.ProjectnameNew = util.ObjToString((*ndata)[k])
  97. projectnames = append(projectnames, projectname)
  98. projectnamenum++
  99. case "buyer":
  100. buyer := new(Buyer)
  101. buyer.versionComparison = *versioncomparison
  102. buyer.BuyerOld = util.ObjToString((*pdata)[k])
  103. buyer.BuyerNew = util.ObjToString((*ndata)[k])
  104. buyers = append(buyers, buyer)
  105. buyernum++
  106. case "projectcode":
  107. projectcode := new(Projectcode)
  108. projectcode.ProjectcodeOld = util.ObjToString((*pdata)[k])
  109. projectcode.ProjectcodeNew = util.ObjToString((*ndata)[k])
  110. projectcode.versionComparison = *versioncomparison
  111. projectcodes = append(projectcodes, projectcode)
  112. projectcodenum++
  113. case "winner":
  114. winner := new(Winner)
  115. winner.WinnerOld = util.ObjToString((*pdata)[k])
  116. winner.WinnerNew = util.ObjToString((*ndata)[k])
  117. winner.versionComparison = *versioncomparison
  118. winners = append(winners, winner)
  119. winnernum++
  120. case "budget":
  121. budget := new(Budget)
  122. budget.BudgetOld = util.ObjToString((*pdata)[k])
  123. budget.BudgetNew = util.ObjToString((*ndata)[k])
  124. budget.versionComparison = *versioncomparison
  125. budgets = append(budgets, budget)
  126. budgetnum++
  127. case "bidamount":
  128. bidamount := new(Bidamount)
  129. bidamount.BidamountOld = util.ObjToString((*pdata)[k])
  130. bidamount.BidamountNew = util.ObjToString((*ndata)[k])
  131. bidamount.versionComparison = *versioncomparison
  132. bidamounts = append(bidamounts, bidamount)
  133. bidamountnum++
  134. }
  135. }
  136. }
  137. num--
  138. fmt.Println()
  139. }
  140. log.Println(projectcodenum, bidamountnum, winnernum, buyernum, budgetnum, projectnamenum)
  141. for ins, ivs := range xf.Sheets {
  142. for inr, ivr := range ivs.Rows {
  143. for _, ivc := range ivr.Cells {
  144. //抽取对比
  145. if ins == 0 {
  146. if inr < 3 {
  147. continue
  148. }
  149. switch strings.TrimSpace(ivc.String()) {
  150. case "projectname":
  151. //结果相同数量
  152. ivr.Cells[1].SetValue(sum - projectnamenum)
  153. style := ivr.Cells[1].GetStyle()
  154. style.Font.Color = "000000"
  155. ivr.Cells[1].SetStyle(style)
  156. //结果不同数量
  157. ivr.Cells[2].SetValue(projectnamenum)
  158. ivr.Cells[2].SetStyle(style)
  159. case "buyer":
  160. //结果相同数量
  161. ivr.Cells[1].SetValue(sum - buyernum)
  162. style := ivr.Cells[1].GetStyle()
  163. style.Font.Color = "000000"
  164. ivr.Cells[1].SetStyle(style)
  165. //结果不同数量
  166. ivr.Cells[2].SetValue(buyernum)
  167. ivr.Cells[2].SetStyle(style)
  168. case "projectcode":
  169. //结果相同数量
  170. ivr.Cells[1].SetValue(sum - projectcodenum)
  171. style := ivr.Cells[1].GetStyle()
  172. style.Font.Color = "000000"
  173. ivr.Cells[1].SetStyle(style)
  174. //结果不同数量
  175. ivr.Cells[2].SetValue(projectcodenum)
  176. ivr.Cells[2].SetStyle(style)
  177. case "winner":
  178. //结果相同数量
  179. ivr.Cells[1].SetValue(sum - winnernum)
  180. style := ivr.Cells[1].GetStyle()
  181. style.Font.Color = "000000"
  182. ivr.Cells[1].SetStyle(style)
  183. //结果不同数量
  184. ivr.Cells[2].SetValue(winnernum)
  185. ivr.Cells[2].SetStyle(style)
  186. case "budget":
  187. //结果相同数量
  188. ivr.Cells[1].SetValue(sum - budgetnum)
  189. style := ivr.Cells[1].GetStyle()
  190. style.Font.Color = "000000"
  191. ivr.Cells[1].SetStyle(style)
  192. //结果不同数量
  193. ivr.Cells[2].SetValue(budgetnum)
  194. ivr.Cells[2].SetStyle(style)
  195. case "bidamount":
  196. //结果相同数量
  197. ivr.Cells[1].SetValue(sum - bidamountnum)
  198. style := ivr.Cells[1].GetStyle()
  199. style.Font.Color = "000000"
  200. ivr.Cells[1].SetStyle(style)
  201. //结果不同数量
  202. ivr.Cells[2].SetValue(bidamountnum)
  203. ivr.Cells[2].SetStyle(style)
  204. }
  205. }
  206. }
  207. }
  208. if ins > 0 {
  209. if len(ivs.Rows) == 0 {
  210. row := ivs.AddRow()
  211. row.AddCell().SetValue("ObjectId")
  212. row.AddCell().SetValue("dev3.1.2")
  213. row.AddCell().SetValue("dev3.2")
  214. row.AddCell().SetValue("URL")
  215. }
  216. log.Println(ivs.Name)
  217. switch strings.TrimSpace(ivs.Name) {
  218. case "projectname":
  219. for _, v := range projectnames {
  220. row := ivs.AddRow()
  221. row.AddCell().SetValue(v.Id)
  222. row.AddCell().SetValue(v.ProjectnameOld)
  223. row.AddCell().SetValue(v.ProjectnameNew)
  224. row.AddCell().SetValue(v.Url)
  225. }
  226. case "buyer":
  227. for _, v := range buyers {
  228. row := ivs.AddRow()
  229. row.AddCell().SetValue(v.Id)
  230. row.AddCell().SetValue(v.BuyerOld)
  231. row.AddCell().SetValue(v.BuyerNew)
  232. row.AddCell().SetValue(v.Url)
  233. }
  234. case "projectcode":
  235. for _, v := range projectcodes {
  236. row := ivs.AddRow()
  237. row.AddCell().SetValue(v.Id)
  238. row.AddCell().SetValue(v.ProjectcodeOld)
  239. row.AddCell().SetValue(v.ProjectcodeNew)
  240. row.AddCell().SetValue(v.Url)
  241. }
  242. case "winner":
  243. for _, v := range winners {
  244. row := ivs.AddRow()
  245. row.AddCell().SetValue(v.Id)
  246. row.AddCell().SetValue(v.WinnerOld)
  247. row.AddCell().SetValue(v.WinnerNew)
  248. row.AddCell().SetValue(v.Url)
  249. }
  250. case "budget":
  251. for _, v := range budgets {
  252. row := ivs.AddRow()
  253. row.AddCell().SetValue(v.Id)
  254. row.AddCell().SetValue(v.BudgetOld)
  255. row.AddCell().SetValue(v.BudgetNew)
  256. row.AddCell().SetValue(v.Url)
  257. }
  258. case "bidamount":
  259. for _, v := range bidamounts {
  260. row := ivs.AddRow()
  261. row.AddCell().SetValue(v.Id)
  262. row.AddCell().SetValue(v.BidamountOld)
  263. row.AddCell().SetValue(v.BidamountNew)
  264. row.AddCell().SetValue(v.Url)
  265. }
  266. }
  267. }
  268. }
  269. err = xf.Save("resultdata.xlsx")
  270. if err != nil {
  271. log.Println("保存xlsx失败:", err)
  272. return
  273. }
  274. log.Println("xlsx保存成功")
  275. }
  276. type Projectname struct {
  277. versionComparison
  278. ProjectnameOld string
  279. ProjectnameNew string
  280. }
  281. type Buyer struct {
  282. versionComparison
  283. BuyerOld string
  284. BuyerNew string
  285. }
  286. type Projectcode struct {
  287. versionComparison
  288. ProjectcodeOld string
  289. ProjectcodeNew string
  290. }
  291. type Winner struct {
  292. versionComparison
  293. WinnerOld string
  294. WinnerNew string
  295. }
  296. type Budget struct {
  297. versionComparison
  298. BudgetOld string
  299. BudgetNew string
  300. }
  301. type Bidamount struct {
  302. versionComparison
  303. BidamountOld string
  304. BidamountNew string
  305. }