123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- // thisinfo
- package main
- import (
- "crypto/sha1"
- "encoding/json"
- "fmt"
- "io"
- du "jy/util"
- "qfw/util"
- "strings"
- "gopkg.in/mgo.v2/bson"
- )
- //抽取信息映射实体类
- type Info struct {
- Id string `json:"_id"`
- Href string `json:"href"`
- Publishtime int64 `json:"publishtime"`
- Title string `json:"title"`
- TopType string `json:"toptype"`
- SubType string `json:"subtype"`
- ProjectName string `json:"projectname"`
- ProjectCode string `json:"projectcode"`
- Buyer string `json:"buyer"`
- Buyerperson string `json:"buyerperson"`
- Buyertel string `json:"buyertel"`
- Agency string `json:"agency"`
- Area string `json:"area"`
- City string `json:"city"`
- HasPackage bool `json:"haspackage"`
- Package map[string]interface{} `json:"package"`
- PNum string `json:"pnum"`
- Topscopeclass []string `json:"topscopeclass"`
- Subscopeclass []string `json:"subscopeclass"`
- Winners []string
- dealtype int
- Buyerclass string `json:"buyerclass"`
- Bidopentime int64 `json:"bidopentime"`
- District string `json:"district"`
- Winnerorder []string
- NewPNKey string
- PNKey string
- PCKey string
- PBKey string
- AllRelatePNKeyMap map[string]*Key
- AllRelatePCKeyMap map[string]*Key
- }
- //pcb三选值
- type PCBV struct {
- Val int //1一项有效值,2二项有效值,3三项有效值
- Pname bool //有项目名称
- Pcode bool //有项目编号
- Buyer bool //有采购单位
- Area bool //区域
- City bool //市
- Agency bool //代理机构
- PnameLen int //值长度
- PcodeLen int //值长度
- BuyerLen int //值长度
- }
- func PreThisInfo(tmp map[string]interface{} /*新信息*/) *Info {
- bys, _ := json.Marshal(tmp)
- var thisinfo *Info
- json.Unmarshal(bys, &thisinfo)
- if thisinfo == nil {
- return nil
- }
- if len(thisinfo.Topscopeclass) == 0 {
- thisinfo.Topscopeclass = []string{}
- }
- if len(thisinfo.Subscopeclass) == 0 {
- thisinfo.Subscopeclass = []string{}
- }
- //去重
- thisinfo.Subscopeclass = RemoveDup(thisinfo.Subscopeclass)
- if len(thisinfo.Package) > 0 { //信息是否分包
- thisinfo.HasPackage = true
- } else if thisinfo.TopType == "结果" && TitleReg.MatchString(thisinfo.Title) {
- //当信息类型是结果时,并且标题中包含分包字样,找到包号,用以后面比较打分
- res := TitleReg.FindAllStringSubmatch(thisinfo.Title, -1)
- pnum := du.PackageNumberConvert(res[0][0])
- //du.Debug(pnum, res)
- thisinfo.PNum = pnum
- }
- if thisinfo.SubType == "变更" || strings.Index(thisinfo.Title, "变更公告") > -1 || strings.Index(thisinfo.Title, "更正公告") > -1 {
- //当信息类型是变更或标题中含变更时
- if thisinfo.TopType == "招标" {
- //招标的变更公告过,不作处理
- //du.Debug(thisinfo.Id, thisinfo.Href, thisinfo.ProjectName, thisinfo.ProjectCode)
- return nil
- } else if thisinfo.TopType == "结果" {
- thisinfo.SubType = "变更"
- }
- }
- //计算中标人
- winner, _ := tmp["winner"].(string)
- m1 := map[string]bool{}
- winners := []string{}
- if winner != "" {
- m1[winner] = true
- winners = append(winners, winner)
- }
- if thisinfo.HasPackage {
- packageM, _ := tmp["package"].(bson.M)
- for _, p := range packageM {
- pm, _ := p.(map[string]interface{})
- pw, _ := pm["winner"].(string)
- if pw != "" {
- m1[pw] = true
- winners = append(winners, pw)
- }
- }
- }
- thisinfo.Winners = winners
- m1 = nil
- //中标候选人
- winnerorder := []string{}
- if winorders, ok := tmp["winnerorder"].([]interface{}); ok {
- for _, wins := range winorders {
- if win, ok := wins.(map[string]interface{}); ok {
- entname := util.ObjToString(win["entname"])
- if entname != "" && len([]rune(entname)) > 6 {
- winnerorder = append(winnerorder, entname)
- }
- }
- }
- }
- thisinfo.Winnerorder = winnerorder
- new_pn, _ := handleprojectname(thisinfo.ProjectName, thisinfo.Buyer, thisinfo.TopType) //作为判断依据
- thisinfo.NewPNKey = new_pn
- thisinfo.PNKey = "pn_" + new_pn
- thisinfo.PCKey = "pc_" + thisinfo.ProjectCode
- thisinfo.PBKey = "pb_" + thisinfo.Buyer
- return thisinfo
- }
- //获取hascode
- func GetHas1(key string) string {
- t := sha1.New()
- io.WriteString(t, key)
- return fmt.Sprintf("%x", t.Sum(nil))
- }
|