|
@@ -2,45 +2,60 @@
|
|
|
package analysis
|
|
|
|
|
|
import (
|
|
|
- "encoding/json"
|
|
|
- "fmt"
|
|
|
- "jy/src/jfw/modules/bigmember/src/config"
|
|
|
- "jy/src/jfw/modules/bigmember/src/entity"
|
|
|
- "jy/src/jfw/modules/bigmember/src/util"
|
|
|
- "log"
|
|
|
- "sort"
|
|
|
- "strconv"
|
|
|
- "strings"
|
|
|
- "sync"
|
|
|
- "time"
|
|
|
+ elastic "app.yhyue.com/moapp/jybase/es"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "jy/src/jfw/modules/bigmember/src/config"
|
|
|
+ "jy/src/jfw/modules/bigmember/src/entity"
|
|
|
+ "jy/src/jfw/modules/bigmember/src/util"
|
|
|
+ "log"
|
|
|
+ "strconv"
|
|
|
+ "sync"
|
|
|
+ "time"
|
|
|
|
|
|
- . "app.yhyue.com/moapp/jybase/api"
|
|
|
- qutil "app.yhyue.com/moapp/jybase/common"
|
|
|
- . "app.yhyue.com/moapp/jybase/date"
|
|
|
- "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
|
|
|
+ . "app.yhyue.com/moapp/jybase/api"
|
|
|
+ qutil "app.yhyue.com/moapp/jybase/common"
|
|
|
+ "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
|
|
|
)
|
|
|
|
|
|
type DecParam struct {
|
|
|
- Area map[string]interface{} //地区
|
|
|
- BuyerContent []ViewKeyWord //采购内容
|
|
|
- BuyerClass []string //采购单位行业
|
|
|
- Sid string //项目招标信息id
|
|
|
- Pname string //项目名称
|
|
|
- Industry string //招标行业
|
|
|
- MinPrice int //最小价格
|
|
|
- MaxPrice int //最大价格
|
|
|
- Buyer string //采购单位
|
|
|
- ServiceId int //大会员服务id
|
|
|
- MobileModel string //手机型号
|
|
|
- AppVersion string //app版本号
|
|
|
+ SearchItem int
|
|
|
+ Area map[string]interface{} //地区
|
|
|
+ BuyerContent []ViewKeyWord //采购内容
|
|
|
+ BuyerClass []string //采购单位行业
|
|
|
+ Sid string //项目招标信息id
|
|
|
+ Pname string //项目名称
|
|
|
+ Industry string //招标行业
|
|
|
+ MinPrice int //最小价格
|
|
|
+ MaxPrice int //最大价格
|
|
|
+ Buyer string //采购单位
|
|
|
+ ServiceId int //大会员服务id
|
|
|
+ MobileModel string //手机型号
|
|
|
+ AppVersion string //app版本号
|
|
|
+ LimitTime string //检索日期
|
|
|
+ ProjectScope int //0 同类项目(默认搜索) 1 全部项目
|
|
|
+ HotWinnerType int // 热门中标企业top10 排序 0 默认金额排序 1:数量
|
|
|
}
|
|
|
|
|
|
/*已选条件--关键词*/
|
|
|
type ViewKeyWord struct {
|
|
|
- Keyword []string `json:"key"` //关键词
|
|
|
- Appended []string `json:"appendkey"` //附加词
|
|
|
- Exclude []string `json:"notkey"` //排除词
|
|
|
- MatchWay int `json:"matchway"` //匹配模式
|
|
|
+ Keyword []string `json:"key"` //关键词
|
|
|
+ Appended []string `json:"appendkey"` //附加词
|
|
|
+ Exclude []string `json:"notkey"` //排除词
|
|
|
+ MatchWay int `json:"matchway"` //匹配模式
|
|
|
+}
|
|
|
+
|
|
|
+type GetProParam struct {
|
|
|
+ ExpertName string //专家名字
|
|
|
+ LimitTime string //检索日期
|
|
|
+ ProjectScope int //0 同类项目(默认搜索) 1 全部项目
|
|
|
+ SearchItem int
|
|
|
+ Area map[string]interface{} //地区
|
|
|
+ Buyer string //采购单位
|
|
|
+ ServiceId int //大会员服务id
|
|
|
+ BuyerContent []ViewKeyWord //采购内容
|
|
|
+ Page int
|
|
|
+ PageSize int
|
|
|
}
|
|
|
|
|
|
// 投标决策分析id
|
|
@@ -48,787 +63,946 @@ var ServiceId = 6
|
|
|
|
|
|
// 采购单位和中标企业 其他项目明细/类似项目明细
|
|
|
func (this *Analysis) ProjectInfoByBW() {
|
|
|
- defer qutil.Catch()
|
|
|
- r := func() Result {
|
|
|
- if this.Method() != "POST" {
|
|
|
- return Result{Data: nil, Error_msg: Error_msg_1005}
|
|
|
- }
|
|
|
- if string(this.Body()) == "" {
|
|
|
- return Result{Data: nil, Error_msg: Error_msg_1003}
|
|
|
- }
|
|
|
- EAD := entity.AnalysisDec{}
|
|
|
- //接收参数
|
|
|
- json.Unmarshal(this.Body(), &EAD)
|
|
|
- if EAD.Sid == "" || EAD.Pname == "" || len(EAD.BuyerContent) == 0 {
|
|
|
- return Result{Data: nil, Error_msg: Error_msg_1003}
|
|
|
- }
|
|
|
- //是否是大会员用户
|
|
|
- if EAD.UserId, EAD.IsPower = entity.CheckPower(this.Session()); !EAD.IsPower {
|
|
|
- return Result{Data: nil, Error_msg: Error_msg_1004}
|
|
|
- }
|
|
|
- EAD.ServiceId = ServiceId
|
|
|
- EAD.UserLock = *entity.ThisLock(EAD.UserId)
|
|
|
- return Result{Data: EAD.GetProjectInfoByBW()}
|
|
|
- }()
|
|
|
- this.ServeJson(r)
|
|
|
+ defer qutil.Catch()
|
|
|
+ r := func() Result {
|
|
|
+ if this.Method() != "POST" {
|
|
|
+ return Result{Data: nil, Error_msg: Error_msg_1005}
|
|
|
+ }
|
|
|
+ if string(this.Body()) == "" {
|
|
|
+ return Result{Data: nil, Error_msg: Error_msg_1003}
|
|
|
+ }
|
|
|
+ EAD := entity.AnalysisDec{}
|
|
|
+ //接收参数
|
|
|
+ json.Unmarshal(this.Body(), &EAD)
|
|
|
+ if len(EAD.BuyerContent) == 0 {
|
|
|
+ return Result{Data: nil, Error_msg: Error_msg_1003}
|
|
|
+ }
|
|
|
+ //是否是大会员用户
|
|
|
+ if EAD.UserId, EAD.IsPower = entity.CheckPower(this.Session()); !EAD.IsPower {
|
|
|
+ return Result{Data: nil, Error_msg: Error_msg_1004}
|
|
|
+ }
|
|
|
+ EAD.ServiceId = ServiceId
|
|
|
+ //EAD.UserLock = *entity.ThisLock(EAD.UserId)
|
|
|
+
|
|
|
+ count, res := EAD.GetProjectInfoByBW()
|
|
|
+ return Result{Data: map[string]interface{}{"count": count, "res": res}}
|
|
|
+ }()
|
|
|
+ this.ServeJson(r)
|
|
|
}
|
|
|
|
|
|
// 试用用户分析
|
|
|
func (this *Analysis) TrialInfo() {
|
|
|
- defer qutil.Catch()
|
|
|
- userId, _ := this.GetSession("userId").(string)
|
|
|
- rData, errMsg := func() (interface{}, error) {
|
|
|
- baseMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
- if baseMsg == nil {
|
|
|
- return -2, nil
|
|
|
- }
|
|
|
- //试用用户
|
|
|
- var isTrialBool = false
|
|
|
- if baseMsg.Status == 4 {
|
|
|
- isTrialBool = true
|
|
|
- }
|
|
|
- //非试用用户 不做统计
|
|
|
- if !isTrialBool {
|
|
|
- return 1, nil
|
|
|
- }
|
|
|
- //是否是已预测过得项目
|
|
|
- pname := this.GetString("pname")
|
|
|
- sid := this.GetString("sid")
|
|
|
- serviceId, _ := this.GetInteger("serviceid")
|
|
|
- if pname == "" || sid == "" {
|
|
|
- return -2, nil
|
|
|
- }
|
|
|
- if serviceId == 0 {
|
|
|
- serviceId = 6
|
|
|
- }
|
|
|
- ai, _, decision_count := AnalysisPower("P", userId, pname, sid, serviceId)
|
|
|
- if ai == 1 {
|
|
|
- return 1, nil
|
|
|
- }
|
|
|
- if decision_count >= 0 {
|
|
|
- return decision_count, nil
|
|
|
- }
|
|
|
- return 0, nil
|
|
|
- }()
|
|
|
- if errMsg != nil {
|
|
|
- log.Printf("%s 获取此用户试用信息出错-%s", userId, errMsg)
|
|
|
- }
|
|
|
- this.ServeJson(NewResult(rData, errMsg))
|
|
|
+ defer qutil.Catch()
|
|
|
+ userId, _ := this.GetSession("userId").(string)
|
|
|
+ rData, errMsg := func() (interface{}, error) {
|
|
|
+ baseMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
+ if baseMsg == nil {
|
|
|
+ return -2, nil
|
|
|
+ }
|
|
|
+ //试用用户
|
|
|
+ var isTrialBool = false
|
|
|
+ if baseMsg.Status == 4 {
|
|
|
+ isTrialBool = true
|
|
|
+ }
|
|
|
+ //非试用用户 不做统计
|
|
|
+ if !isTrialBool {
|
|
|
+ return 1, nil
|
|
|
+ }
|
|
|
+ //是否是已预测过得项目
|
|
|
+ pname := this.GetString("pname")
|
|
|
+ sid := this.GetString("sid")
|
|
|
+ serviceId, _ := this.GetInteger("serviceid")
|
|
|
+ if pname == "" || sid == "" {
|
|
|
+ return -2, nil
|
|
|
+ }
|
|
|
+ if serviceId == 0 {
|
|
|
+ serviceId = 6
|
|
|
+ }
|
|
|
+ ai, _, decision_count := AnalysisPower("P", userId, pname, sid, serviceId)
|
|
|
+ if ai == 1 {
|
|
|
+ return 1, nil
|
|
|
+ }
|
|
|
+ if decision_count >= 0 {
|
|
|
+ return decision_count, nil
|
|
|
+ }
|
|
|
+ return 0, nil
|
|
|
+ }()
|
|
|
+ if errMsg != nil {
|
|
|
+ log.Printf("%s 获取此用户试用信息出错-%s", userId, errMsg)
|
|
|
+ }
|
|
|
+ this.ServeJson(NewResult(rData, errMsg))
|
|
|
}
|
|
|
|
|
|
// 决策分析内容-普通用户
|
|
|
func (this *Analysis) FreeDecInfo() {
|
|
|
- defer qutil.Catch()
|
|
|
- var regMap = Result{
|
|
|
- Data: []map[string]interface{}{},
|
|
|
- Error_code: Error_code,
|
|
|
- Error_msg: "",
|
|
|
- }
|
|
|
- if this.Method() == METHOD {
|
|
|
- //接受前端参数
|
|
|
- getRes := new(DecParam)
|
|
|
- if string(this.Body()) != "" {
|
|
|
- //接收参数
|
|
|
- json.Unmarshal(this.Body(), &getRes)
|
|
|
- }
|
|
|
- if getRes.Sid != "" && getRes.Pname != "" && len(getRes.BuyerContent) > 0 {
|
|
|
- userId, _ := this.GetSession("userId").(string)
|
|
|
- bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
- mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
|
|
|
- entity.UIL.Lock()
|
|
|
- if entity.UIL.DecLock[mainUserid] == nil {
|
|
|
- entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
|
|
|
- }
|
|
|
- entity.UIL.Unlock()
|
|
|
- entity.UIL.DecLock[mainUserid].Lock()
|
|
|
- defer entity.UIL.DecLock[mainUserid].Unlock()
|
|
|
- if getRes.ServiceId == 0 {
|
|
|
- getRes.ServiceId = 6
|
|
|
- }
|
|
|
- //采购单位的采购类型
|
|
|
- buyer_buyerClass := ""
|
|
|
- if getRes.Buyer != "" {
|
|
|
- buyerData := entity.GetEntPC(strings.Split(getRes.Buyer, ","))
|
|
|
- if buyerData != nil && len(buyerData) > 0 {
|
|
|
- buyer_one := *qutil.ObjToMap(buyerData[0])
|
|
|
- if buyer_one["buyerclass"] != nil {
|
|
|
- buyer_buyerClass = buyer_one["buyerclass"].(string)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
- decQuery := DecQueryFree(getRes.Area, getRes.BuyerClass, getRes.BuyerContent, getRes.Industry, getRes.Buyer, buyer_buyerClass, getRes.MinPrice, getRes.MaxPrice)
|
|
|
- regMap.Data = getDecInfoFree(decQuery, buyer_buyerClass, getRes)
|
|
|
- //投标决策分析历史记录
|
|
|
- go SaveDecHistortList(getRes, userId, mainUserid, phone, "", 0, this.Request, "free")
|
|
|
- } else {
|
|
|
- regMap.Error_code = Error_code_1002
|
|
|
- regMap.Error_msg = Error_msg_1002
|
|
|
- }
|
|
|
- } else {
|
|
|
- regMap.Error_code = Error_code_1005
|
|
|
- regMap.Error_msg = Error_msg_1005
|
|
|
- }
|
|
|
- this.ServeJson(regMap)
|
|
|
+ defer qutil.Catch()
|
|
|
+ var regMap = Result{
|
|
|
+ Data: []map[string]interface{}{},
|
|
|
+ Error_code: Error_code,
|
|
|
+ Error_msg: "",
|
|
|
+ }
|
|
|
+ if this.Method() == METHOD {
|
|
|
+ //接受前端参数
|
|
|
+ getRes := new(DecParam)
|
|
|
+ if string(this.Body()) != "" {
|
|
|
+ //接收参数
|
|
|
+ json.Unmarshal(this.Body(), &getRes)
|
|
|
+ }
|
|
|
+
|
|
|
+ if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
|
|
|
+ userId, _ := this.GetSession("userId").(string)
|
|
|
+ bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
+ mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
|
|
|
+ entity.UIL.Lock()
|
|
|
+ if entity.UIL.DecLock[mainUserid] == nil {
|
|
|
+ entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
|
|
|
+ }
|
|
|
+ entity.UIL.Unlock()
|
|
|
+ entity.UIL.DecLock[mainUserid].Lock()
|
|
|
+ defer entity.UIL.DecLock[mainUserid].Unlock()
|
|
|
+ if getRes.ServiceId == 0 {
|
|
|
+ getRes.ServiceId = 6
|
|
|
+ }
|
|
|
+ //采购单位的采购类型
|
|
|
+ buyer_buyerClass := ""
|
|
|
+ getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
+ decQuery := DecQueryFree(getRes.Area, getRes.BuyerContent, getRes.LimitTime, getRes.Buyer, getRes.SearchItem)
|
|
|
+ regMap.Data = getDecInfoFree(decQuery, buyer_buyerClass, getRes)
|
|
|
+ //投标决策分析历史记录
|
|
|
+ go SaveDecHistortList(getRes, userId, mainUserid, phone, "", 0, this.Request, "free")
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1002
|
|
|
+ regMap.Error_msg = Error_msg_1002
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1005
|
|
|
+ regMap.Error_msg = Error_msg_1005
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
}
|
|
|
|
|
|
// 决策分析内容
|
|
|
func (this *Analysis) DecInfo() {
|
|
|
- defer qutil.Catch()
|
|
|
- var regMap = Result{
|
|
|
- Data: []map[string]interface{}{},
|
|
|
- Error_code: Error_code,
|
|
|
- Error_msg: "",
|
|
|
- }
|
|
|
- if this.Method() == METHOD {
|
|
|
- //接受前端参数
|
|
|
- getRes := new(DecParam)
|
|
|
- if string(this.Body()) != "" {
|
|
|
- //接收参数
|
|
|
- json.Unmarshal(this.Body(), &getRes)
|
|
|
- }
|
|
|
- if getRes.Sid != "" && getRes.Pname != "" && len(getRes.BuyerContent) > 0 {
|
|
|
- var decCount = 0 //功能剩余次数
|
|
|
- var base64Key = "" //加密串
|
|
|
- userId, _ := this.GetSession("userId").(string)
|
|
|
- //是否是子账号
|
|
|
- //main_userId, phone, member_status := util.MainUserId(this.Session())
|
|
|
- bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
- mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
|
|
|
- isAble := false
|
|
|
- if len(bigMsg.Data.Member.MemberPowerList) > 0 {
|
|
|
- for _, v := range bigMsg.Data.Member.MemberPowerList {
|
|
|
- if v == 6 {
|
|
|
- isAble = true
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if !isAble {
|
|
|
- regMap.Error_code = Error_code_1004
|
|
|
- regMap.Error_msg = Error_msg_1004
|
|
|
- } else {
|
|
|
- entity.UIL.Lock()
|
|
|
- if entity.UIL.DecLock[mainUserid] == nil {
|
|
|
- entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
|
|
|
- }
|
|
|
- entity.UIL.Unlock()
|
|
|
- entity.UIL.DecLock[mainUserid].Lock()
|
|
|
- defer entity.UIL.DecLock[mainUserid].Unlock()
|
|
|
- if getRes.ServiceId == 0 {
|
|
|
- getRes.ServiceId = 6
|
|
|
- }
|
|
|
- // getRes.Buyer = "北京市交通委员会密云公路分局"
|
|
|
- //采购单位的采购类型
|
|
|
- buyer_buyerClass := ""
|
|
|
- if getRes.Buyer != "" {
|
|
|
- buyerData := entity.GetEntPC(strings.Split(getRes.Buyer, ","))
|
|
|
- if buyerData != nil && len(buyerData) > 0 {
|
|
|
- buyer_one := *qutil.ObjToMap(buyerData[0])
|
|
|
- if buyer_one["buyerclass"] != nil {
|
|
|
- buyer_buyerClass = buyer_one["buyerclass"].(string)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
- decQuery := DecQuery(getRes.Area, getRes.BuyerClass, getRes.BuyerContent, getRes.Industry, getRes.Buyer, buyer_buyerClass, getRes.MinPrice, getRes.MaxPrice)
|
|
|
- regMap.Data = getDecInfo(decQuery, buyer_buyerClass, getRes)
|
|
|
- //投标决策分析历史记录
|
|
|
- go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
|
|
|
- }
|
|
|
- } else {
|
|
|
- regMap.Error_code = Error_code_1002
|
|
|
- regMap.Error_msg = Error_msg_1002
|
|
|
- }
|
|
|
- } else {
|
|
|
- regMap.Error_code = Error_code_1005
|
|
|
- regMap.Error_msg = Error_msg_1005
|
|
|
- }
|
|
|
- this.ServeJson(regMap)
|
|
|
+ defer qutil.Catch()
|
|
|
+ var regMap = Result{
|
|
|
+ Data: []map[string]interface{}{},
|
|
|
+ Error_code: Error_code,
|
|
|
+ Error_msg: "",
|
|
|
+ }
|
|
|
+ if this.Method() == METHOD {
|
|
|
+ //接受前端参数
|
|
|
+ getRes := new(DecParam)
|
|
|
+ if string(this.Body()) != "" {
|
|
|
+ //接收参数
|
|
|
+ json.Unmarshal(this.Body(), &getRes)
|
|
|
+ }
|
|
|
+
|
|
|
+ if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
|
|
|
+ var decCount = 0 //功能剩余次数
|
|
|
+ var base64Key = "" //加密串
|
|
|
+ userId, _ := this.GetSession("userId").(string)
|
|
|
+ //是否是子账号
|
|
|
+ //main_userId, phone, member_status := util.MainUserId(this.Session())
|
|
|
+ bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
+ mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
|
|
|
+ isAble := false
|
|
|
+ if len(bigMsg.Data.Member.MemberPowerList) > 0 {
|
|
|
+ for _, v := range bigMsg.Data.Member.MemberPowerList {
|
|
|
+ if v == 6 {
|
|
|
+ isAble = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isAble {
|
|
|
+ regMap.Error_code = Error_code_1004
|
|
|
+ regMap.Error_msg = Error_msg_1004
|
|
|
+ } else {
|
|
|
+ entity.UIL.Lock()
|
|
|
+ if entity.UIL.DecLock[mainUserid] == nil {
|
|
|
+ entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
|
|
|
+ }
|
|
|
+ entity.UIL.Unlock()
|
|
|
+ entity.UIL.DecLock[mainUserid].Lock()
|
|
|
+ defer entity.UIL.DecLock[mainUserid].Unlock()
|
|
|
+ if getRes.ServiceId == 0 {
|
|
|
+ getRes.ServiceId = 6
|
|
|
+ }
|
|
|
+ var buyer_buyerClass string
|
|
|
+ //采购单位的采购类型
|
|
|
+ /*
|
|
|
+ if getRes.Buyer != "" {
|
|
|
+ buyerData := entity.GetEntBlur(strings.Split(getRes.Buyer, ","))
|
|
|
+ if buyerData != nil && len(buyerData) > 0 {
|
|
|
+ buyer_one := *qutil.ObjToMap(buyerData[0])
|
|
|
+ if buyer_one["buyerclass"] != nil {
|
|
|
+ buyer_buyerClass = buyer_one["buyerclass"].(string)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
+ //各维度项目数量
|
|
|
+ all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
|
|
|
+ var isAnalyze bool
|
|
|
+ if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
|
|
|
+ (getRes.SearchItem == 2 && area_count == 0) {
|
|
|
+ isAnalyze = true
|
|
|
+ }
|
|
|
+ if isAnalyze {
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "PAnalysis": nil,
|
|
|
+ "PCount": all_count,
|
|
|
+ "AreaCount": area_count,
|
|
|
+ "BuyerCount": buyer_count,
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var rMap = sync.Map{}
|
|
|
+ sy := sync.WaitGroup{}
|
|
|
+ for _, v := range []int{1, 2, 3} {
|
|
|
+ sy.Add(1)
|
|
|
+ go func(stype int) {
|
|
|
+ defer sy.Done()
|
|
|
+ decQuery := DecQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, stype)
|
|
|
+ aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, stype)
|
|
|
+ for k, v1 := range aggsArr {
|
|
|
+ rMap.Store(k, v1)
|
|
|
+ }
|
|
|
+ }(v)
|
|
|
+ }
|
|
|
+ sy.Wait()
|
|
|
+ rMaps := make(map[string]interface{})
|
|
|
+ rMap.Range(func(key, value interface{}) bool {
|
|
|
+ rMaps[qutil.InterfaceToStr(key)] = value
|
|
|
+ return true
|
|
|
+ })
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "PAnalysis": rMaps,
|
|
|
+ "PCount": all_count,
|
|
|
+ "AreaCount": area_count,
|
|
|
+ "BuyerCount": buyer_count,
|
|
|
+ }
|
|
|
+ //投标决策分析历史记录
|
|
|
+ go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1002
|
|
|
+ regMap.Error_msg = Error_msg_1002
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1005
|
|
|
+ regMap.Error_msg = Error_msg_1005
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+}
|
|
|
+
|
|
|
+func (this *Analysis) HotWinnerTop() {
|
|
|
+ defer qutil.Catch()
|
|
|
+ var regMap = Result{
|
|
|
+ Data: []map[string]interface{}{},
|
|
|
+ Error_code: Error_code,
|
|
|
+ Error_msg: "",
|
|
|
+ }
|
|
|
+ if this.Method() == METHOD {
|
|
|
+ //接受前端参数
|
|
|
+ getRes := new(DecParam)
|
|
|
+ if string(this.Body()) != "" {
|
|
|
+ //接收参数
|
|
|
+ json.Unmarshal(this.Body(), &getRes)
|
|
|
+ }
|
|
|
+
|
|
|
+ if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
|
|
|
+ //是否是子账号
|
|
|
+ //main_userId, phone, member_status := util.MainUserId(this.Session())
|
|
|
+ bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
+ isAble := false
|
|
|
+ if len(bigMsg.Data.Member.MemberPowerList) > 0 {
|
|
|
+ for _, v := range bigMsg.Data.Member.MemberPowerList {
|
|
|
+ if v == 6 {
|
|
|
+ isAble = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isAble {
|
|
|
+ regMap.Error_code = Error_code_1004
|
|
|
+ regMap.Error_msg = Error_msg_1004
|
|
|
+ } else {
|
|
|
+ if getRes.ServiceId == 0 {
|
|
|
+ getRes.ServiceId = 6
|
|
|
+ }
|
|
|
+ //采购单位的采购类型
|
|
|
+ buyer_buyerClass := ""
|
|
|
+ getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
+ decQuery := DecWinnerQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.HotWinnerType)
|
|
|
+ aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
|
|
|
+ //top明细数量错误问题特殊处理 数量重新查询
|
|
|
+ var rMap = sync.Map{}
|
|
|
+ sy := sync.WaitGroup{}
|
|
|
+ winnerAmount, _ := aggsArr["winnerAmount"].([]*DecWinnerInfo)
|
|
|
+ if len(winnerAmount) > 0 {
|
|
|
+ for _, v := range winnerAmount {
|
|
|
+ sy.Add(1)
|
|
|
+ go func(winner string) {
|
|
|
+ defer sy.Done()
|
|
|
+ winnerSql := DecQueryNewSimilarMsgByBW(winner, getRes, 0)
|
|
|
+ _, count, _ := elastic.GetAggs(P_INDEX, P_TYPE, winnerSql)
|
|
|
+ rMap.Store(winner, count)
|
|
|
+ }(v.Key)
|
|
|
+ }
|
|
|
+ sy.Wait()
|
|
|
+ for _, v := range winnerAmount {
|
|
|
+ if v1, ok := rMap.Load(v.Key); ok {
|
|
|
+ v.Doc_count = qutil.Float64All(v1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sortkey := "doc_count" //默认金额
|
|
|
+ if getRes.HotWinnerType == 0 {
|
|
|
+ sortkey = "total_project"
|
|
|
+ }
|
|
|
+ util.SortData(&winnerAmount, sortkey, true) //排序
|
|
|
+ aggsArr["winnerAmount"] = winnerAmount
|
|
|
+ }
|
|
|
+
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "PAnalysis": aggsArr,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1002
|
|
|
+ regMap.Error_msg = Error_msg_1002
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1005
|
|
|
+ regMap.Error_msg = Error_msg_1005
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+}
|
|
|
+
|
|
|
+// 决策分析内容-评标专家top十
|
|
|
+func (this *Analysis) DecReviewExperts() {
|
|
|
+ defer qutil.Catch()
|
|
|
+ var regMap = Result{
|
|
|
+ Data: []map[string]interface{}{},
|
|
|
+ Error_code: Error_code,
|
|
|
+ Error_msg: "",
|
|
|
+ }
|
|
|
+ if this.Method() == METHOD {
|
|
|
+ //接受前端参数
|
|
|
+ getRes := new(DecParam)
|
|
|
+ if string(this.Body()) != "" {
|
|
|
+ //接收参数
|
|
|
+ json.Unmarshal(this.Body(), &getRes)
|
|
|
+ }
|
|
|
+
|
|
|
+ if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
|
|
|
+ //是否是子账号
|
|
|
+ //main_userId, phone, member_status := util.MainUserId(this.Session())
|
|
|
+ bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
|
|
|
+ isAble := false
|
|
|
+ if len(bigMsg.Data.Member.MemberPowerList) > 0 {
|
|
|
+ for _, v := range bigMsg.Data.Member.MemberPowerList {
|
|
|
+ if v == 6 {
|
|
|
+ isAble = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isAble {
|
|
|
+ regMap.Error_code = Error_code_1004
|
|
|
+ regMap.Error_msg = Error_msg_1004
|
|
|
+ } else {
|
|
|
+ if getRes.ServiceId == 0 {
|
|
|
+ getRes.ServiceId = 6
|
|
|
+ }
|
|
|
+ //各维度项目数量
|
|
|
+ all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
|
|
|
+ var isAnalyze bool
|
|
|
+ if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
|
|
|
+ (getRes.SearchItem == 2 && area_count == 0) {
|
|
|
+ isAnalyze = true
|
|
|
+ }
|
|
|
+ if isAnalyze {
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "PAnalysis": nil,
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // getRes.Buyer = "北京市交通委员会密云公路分局"
|
|
|
+ //采购单位的采购类型
|
|
|
+ buyer_buyerClass := ""
|
|
|
+ getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
|
|
|
+ decQuery := DecReviewExpertsQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, buyer_buyerClass, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
|
|
|
+ aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
|
|
|
+ //log.Println("专家top10", aggsArr["reviewExperts"])
|
|
|
+ var expertlist []map[string]interface{}
|
|
|
+ if reviewExperts, ok := aggsArr["reviewExperts"].([]map[string]interface{}); ok {
|
|
|
+ for k, v := range reviewExperts {
|
|
|
+ if k < 10 {
|
|
|
+ expertName := qutil.ObjToString(v["key"])
|
|
|
+ decQuery := ExpertsCooperationProjectCount(expertName, getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
|
|
|
+ _, count, _ := elastic.GetAggs("projectset", "projectset", decQuery)
|
|
|
+ v["doc_count"] = count
|
|
|
+ expertlist = append(expertlist, v)
|
|
|
+ } else {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ util.SortData(&expertlist, "doc_count", true)
|
|
|
+ aggsArr["reviewExperts"] = expertlist
|
|
|
+ }
|
|
|
+
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "PAnalysis": aggsArr,
|
|
|
+ }
|
|
|
+ //投标决策分析历史记录
|
|
|
+ //go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1002
|
|
|
+ regMap.Error_msg = Error_msg_1002
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ regMap.Error_code = Error_code_1005
|
|
|
+ regMap.Error_msg = Error_msg_1005
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+}
|
|
|
+
|
|
|
+type TRecentProject struct {
|
|
|
+ //RecentProject struct {
|
|
|
+ Hits struct {
|
|
|
+ Total struct {
|
|
|
+ Value int `json:"value"`
|
|
|
+ Relation string `json:"relation"`
|
|
|
+ } `json:"total"`
|
|
|
+ MaxScore interface{} `json:"max_score"`
|
|
|
+ Hits []struct {
|
|
|
+ Index string `json:"_index"`
|
|
|
+ Type string `json:"_type"`
|
|
|
+ Id string `json:"_id"`
|
|
|
+ Score interface{} `json:"_score"`
|
|
|
+ Source struct {
|
|
|
+ Bidamount float64 `json:"bidamount"`
|
|
|
+ Projectname string `json:"projectname"`
|
|
|
+ Jgtime int `json:"jgtime"`
|
|
|
+ Id string `json:"id"`
|
|
|
+ } `json:"_source"`
|
|
|
+ Sort []int `json:"sort"`
|
|
|
+ } `json:"hits"`
|
|
|
+ } `json:"hits"`
|
|
|
+ //} `json:"recent_project"`
|
|
|
}
|
|
|
|
|
|
// 投标决策分析
|
|
|
func getDecInfoFree(decQuery, buyer_buyerClass string, dec *DecParam) map[string]interface{} {
|
|
|
- t1 := time.Now()
|
|
|
- //
|
|
|
- var aggsArr = map[string]interface{}{}
|
|
|
- //聚合
|
|
|
- aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
|
|
|
- if aggs != nil {
|
|
|
- //项目数量
|
|
|
- if all_counts, ok := aggs.Children("all_counts"); ok {
|
|
|
- all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_counts"] = string(all_counts_val)
|
|
|
- }
|
|
|
- //项目涉及中标企业
|
|
|
- if all_winners, ok := aggs.Children("all_winners"); ok {
|
|
|
- all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_winners"] = string(all_winners_val)
|
|
|
- }
|
|
|
- //项目金额
|
|
|
- if all_money, ok := aggs.Children("all_money"); ok {
|
|
|
- all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
|
|
|
- all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
|
|
|
- aggsArr["all_money"] = all_money_float
|
|
|
- }
|
|
|
- //项目专家
|
|
|
- if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
|
|
|
- all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_review_experts"] = string(all_review_experts_val)
|
|
|
- }
|
|
|
- //标书编制周期
|
|
|
- if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- var buckets = []map[string]interface{}{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- buckets = append(buckets, map[string]interface{}{
|
|
|
- "key": v["key"],
|
|
|
- "doc_count": v["doc_count"],
|
|
|
- })
|
|
|
- }
|
|
|
- aggsArr["bidcycle_ranges"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- log.Println("运行时间:", time.Since(t1))
|
|
|
- return aggsArr
|
|
|
+ t1 := time.Now()
|
|
|
+ //
|
|
|
+ var aggsArr = map[string]interface{}{}
|
|
|
+ //聚合
|
|
|
+ aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
|
|
|
+ if aggs != nil {
|
|
|
+ //项目数量
|
|
|
+ if all_counts, ok := aggs.Children("all_counts"); ok {
|
|
|
+ all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_counts"] = string(all_counts_val)
|
|
|
+ }
|
|
|
+ //项目涉及中标企业
|
|
|
+ if all_winners, ok := aggs.Children("all_winners"); ok {
|
|
|
+ all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_winners"] = string(all_winners_val)
|
|
|
+ }
|
|
|
+ //项目金额
|
|
|
+ if all_money, ok := aggs.Children("all_money"); ok {
|
|
|
+ all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
|
|
|
+ all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
|
|
|
+ aggsArr["all_money"] = all_money_float
|
|
|
+ }
|
|
|
+ //项目专家
|
|
|
+ if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
|
|
|
+ all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_review_experts"] = string(all_review_experts_val)
|
|
|
+ }
|
|
|
+ //标书编制周期
|
|
|
+ if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ var buckets = []map[string]interface{}{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ buckets = append(buckets, map[string]interface{}{
|
|
|
+ "key": v["key"],
|
|
|
+ "doc_count": v["doc_count"],
|
|
|
+ })
|
|
|
+ }
|
|
|
+ aggsArr["bidcycle_ranges"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.Println("运行时间:", time.Since(t1))
|
|
|
+ return aggsArr
|
|
|
}
|
|
|
|
|
|
// 投标决策分析
|
|
|
-func getDecInfo(decQuery, buyer_buyerClass string, dec *DecParam) map[string]interface{} {
|
|
|
- t1 := time.Now()
|
|
|
- //
|
|
|
- var aggsArr = map[string]interface{}{}
|
|
|
- //类似项目采购单位采购历史
|
|
|
- var buyerHistroyList = []map[string]interface{}{}
|
|
|
- if dec.Buyer != "" {
|
|
|
- list := GetListByBuyer(dec)
|
|
|
- if list != nil && len(list) > 0 {
|
|
|
- for _, v := range list {
|
|
|
- var firsttime = v["firsttime"]
|
|
|
- infoid := ""
|
|
|
- if v["ids"] != nil {
|
|
|
- ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
|
|
|
- if len(ids) > 0 {
|
|
|
- infoid = util.EncodeId(ids[0])
|
|
|
- }
|
|
|
- }
|
|
|
- var projectMap = map[string]interface{}{
|
|
|
- "projectname": v["projectname"],
|
|
|
- "_id": util.EncodeId(v["_id"].(string)),
|
|
|
- "area": v["area"],
|
|
|
- "bidstatus": v["bidstatus"],
|
|
|
- "firsttime": FormatDateWithObj(&firsttime, Date_Short_Layout),
|
|
|
- "infoid": infoid,
|
|
|
- }
|
|
|
- buyerHistroyList = append(buyerHistroyList, projectMap)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // log.Println("buyerHistroyList.length:", len(buyerHistroyList))
|
|
|
- aggsArr["buyerHistroyList"] = buyerHistroyList
|
|
|
- //聚合
|
|
|
- aggs, res := GetAggs(P_INDEX, P_TYPE, decQuery)
|
|
|
- log.Println("请求数据时间:", time.Since(t1))
|
|
|
- if res != nil && len(res) > 0 {
|
|
|
- res = Sequence(res)
|
|
|
- }
|
|
|
- log.Println("-请求数据时间-:", time.Since(t1))
|
|
|
- if aggs != nil {
|
|
|
- //标书编制周期
|
|
|
- if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- var buckets = []map[string]interface{}{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- buckets = append(buckets, map[string]interface{}{
|
|
|
- "key": v["key"],
|
|
|
- "doc_count": v["doc_count"],
|
|
|
- })
|
|
|
- }
|
|
|
- aggsArr["bidcycle_ranges"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //类似项目预算统计分析
|
|
|
- if aggs_budget, ok := aggs.Children("budget_ranges"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := aggs_budget.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- var buckets = []map[string]interface{}{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
- var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
- var avg interface{} = nil
|
|
|
- if avg_rate["value"] != nil {
|
|
|
- // avg = avg_rate["value"].(interface{})
|
|
|
- }
|
|
|
- var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
- var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
- if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
- var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
- var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
- if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
- avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
- }
|
|
|
- }
|
|
|
- buckets = append(buckets, map[string]interface{}{
|
|
|
- "key": v["key"],
|
|
|
- "doc_count": v["doc_count"],
|
|
|
- "avg": avg,
|
|
|
- })
|
|
|
- }
|
|
|
- aggsArr["budgetAnalysis"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //类似项目地区分布分析
|
|
|
- if aggs_area, ok := aggs.Children("group_area"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := aggs_area.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- var buckets = []map[string]interface{}{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- //类似项目数量
|
|
|
- var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
- var doc_count = 0
|
|
|
- if group_counts_map["value"] != nil {
|
|
|
- doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
- }
|
|
|
- //类似项目规模
|
|
|
- var sum_bidamount_map = *qutil.ObjToMap(v["sum_bidamount"].(map[string]interface{}))
|
|
|
- var bidamount_sum_map = sum_bidamount_map["bidamount_sum"].(map[string]interface{})
|
|
|
- var bidamount_sum float64 = 0
|
|
|
- if bidamount_sum_map["value"] != nil {
|
|
|
- bidamount_sum = qutil.RetainDecimal(qutil.Float64All(bidamount_sum_map["value"].(interface{})), 2)
|
|
|
- }
|
|
|
- buckets = append(buckets, map[string]interface{}{
|
|
|
- "key": v["key"],
|
|
|
- "doc_count": doc_count,
|
|
|
- "bidamount_sum": bidamount_sum,
|
|
|
- })
|
|
|
- }
|
|
|
- aggsArr["group_area"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- var buyer_buyerClass_bool = false
|
|
|
- //类似项目采购单位类型分析
|
|
|
- if group_buyerclass, ok := aggs.Children("group_buyerclass"); ok {
|
|
|
- if group_buyerclass_c, ok := group_buyerclass.Children("group_buyerclass_c"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- // log.Println(aggsMap)
|
|
|
- var buckets = []map[string]interface{}{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- if v["key"].(string) == "" {
|
|
|
- continue
|
|
|
- }
|
|
|
- var this_bool = false
|
|
|
- if buyer_buyerClass == v["key"].(string) {
|
|
|
- buyer_buyerClass_bool = true
|
|
|
- this_bool = true
|
|
|
- }
|
|
|
- //类似项目数量
|
|
|
- var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
- var doc_count = 0
|
|
|
- if group_counts_map["value"] != nil {
|
|
|
- doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
- }
|
|
|
- //类似项目规模
|
|
|
- var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
|
|
|
- var group_money float64 = 0
|
|
|
- if group_money_map["value"] != nil {
|
|
|
- group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
|
|
|
- }
|
|
|
- //平均折扣率
|
|
|
- var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
- var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
- var avg interface{} = nil
|
|
|
- if avg_rate["value"] != nil {
|
|
|
- // avg = avg_rate["value"].(interface{})
|
|
|
- }
|
|
|
- var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
- var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
- if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
- var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
- var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
- if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
- avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
- }
|
|
|
- }
|
|
|
- buckets = append(buckets, map[string]interface{}{
|
|
|
- "key": v["key"], //采购单位类型名称
|
|
|
- "doc_count": doc_count, //类似项目总数
|
|
|
- "doc_money": group_money, //类似项目规模
|
|
|
- "avg": avg, //平均折扣率
|
|
|
- "main": this_bool, //当前采购单位得采购单位类型
|
|
|
- })
|
|
|
- }
|
|
|
- aggsArr["group_buyerclass"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //此采购单位得采购类型 buyer_buyerclass
|
|
|
- if group_buyer_buyerclass, ok := aggs.Children("group_buyer_buyerclass"); ok && !buyer_buyerClass_bool {
|
|
|
- var buyer_buyerclass_map map[string]interface{}
|
|
|
- if group_buyerclass_c, ok := group_buyer_buyerclass.Children("group_buyerclass_c"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- for _, v := range aggsMap {
|
|
|
- //类似项目数量
|
|
|
- var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
- var doc_count = 0
|
|
|
- if group_counts_map["value"] != nil {
|
|
|
- doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
- }
|
|
|
- //类似项目规模
|
|
|
- var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
|
|
|
- var group_money float64 = 0
|
|
|
- if group_money_map["value"] != nil {
|
|
|
- group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
|
|
|
- }
|
|
|
- //平均折扣率
|
|
|
- var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
- var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
- var avg interface{} = nil
|
|
|
- if avg_rate["value"] != nil {
|
|
|
- // avg = avg_rate["value"].(interface{})
|
|
|
- }
|
|
|
- var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
- var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
- if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
- var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
- var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
- if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
- avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
- }
|
|
|
- }
|
|
|
- buyer_buyerclass_map = map[string]interface{}{
|
|
|
- "key": v["key"], //采购单位类型名称
|
|
|
- "doc_count": doc_count, //类似项目总数
|
|
|
- "doc_money": group_money, //类似项目规模
|
|
|
- "avg": avg, //平均折扣率
|
|
|
- "main": true, //当前采购单位得采购单位类型
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if aggsArr["group_buyerclass"] != nil && buyer_buyerclass_map != nil {
|
|
|
- group_buyerclass_buyers := aggsArr["group_buyerclass"].([]map[string]interface{})
|
|
|
- buyers_len := len(group_buyerclass_buyers)
|
|
|
- if buyers_len < 10 {
|
|
|
- group_buyerclass_buyers = append(group_buyerclass_buyers, buyer_buyerclass_map)
|
|
|
- } else {
|
|
|
- group_buyerclass_buyers = append(group_buyerclass_buyers[:buyers_len-1], buyer_buyerclass_map)
|
|
|
- }
|
|
|
- aggsArr["group_buyerclass"] = group_buyerclass_buyers
|
|
|
- }
|
|
|
- }
|
|
|
- //专家评审
|
|
|
- if aggs_review_experts, ok := aggs.Children("group_review_experts"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := aggs_review_experts.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- // log.Println(aggsMap)
|
|
|
- var _aggsMap = []map[string]interface{}{}
|
|
|
- for k, v := range aggsMap {
|
|
|
- if !entity.RegExperts.MatchString(qutil.ObjToString(v["key"])) {
|
|
|
- continue
|
|
|
- }
|
|
|
- _aggsMap = append(_aggsMap, aggsMap[k])
|
|
|
- }
|
|
|
- aggsArr["reviewExperts"] = _aggsMap
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //项目数量
|
|
|
- if all_counts, ok := aggs.Children("all_counts"); ok {
|
|
|
- all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_counts"] = string(all_counts_val)
|
|
|
- }
|
|
|
- //项目金额
|
|
|
- if all_money, ok := aggs.Children("all_money"); ok {
|
|
|
- all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
|
|
|
- all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
|
|
|
- aggsArr["all_money"] = all_money_float
|
|
|
- }
|
|
|
- //项目涉及中标企业
|
|
|
- if all_winners, ok := aggs.Children("all_winners"); ok {
|
|
|
- all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_winners"] = string(all_winners_val)
|
|
|
- }
|
|
|
- //项目专家
|
|
|
- if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
|
|
|
- all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
|
|
|
- aggsArr["all_review_experts"] = string(all_review_experts_val)
|
|
|
- }
|
|
|
- //中标企业
|
|
|
- if aggs_winner, ok := aggs.Children("group_winner"); ok {
|
|
|
- var aggsMap []map[string]interface{}
|
|
|
- bs, _ := aggs_winner.Aggregations["buckets"].MarshalJSON()
|
|
|
- if len(bs) > 0 {
|
|
|
- var winners = []string{}
|
|
|
- json.Unmarshal(bs, &aggsMap)
|
|
|
- if len(aggsMap) > 0 {
|
|
|
- var buckets = []*DecWinnerInfo{}
|
|
|
- for _, v := range aggsMap {
|
|
|
- if !entity.RegWinner.MatchString(qutil.ObjToString(v["key"])) {
|
|
|
- continue
|
|
|
- }
|
|
|
- //类似项目金额
|
|
|
- var total_map = *qutil.ObjToMap(v["total"].(map[string]interface{}))
|
|
|
- var total_project = 0
|
|
|
- if total_map["value"] != nil {
|
|
|
- total_project = qutil.IntAll(total_map["value"])
|
|
|
- }
|
|
|
- //
|
|
|
- var max_jytime_map = *qutil.ObjToMap(v["max_jytime"].(map[string]interface{}))
|
|
|
- var max_jytime int64 = 0
|
|
|
- if max_jytime_map["value"] != nil {
|
|
|
- max_jytime = qutil.Int64All(max_jytime_map["value"])
|
|
|
- }
|
|
|
- //中标企业id
|
|
|
- var group_entidlist = *qutil.ObjToMap(v["group_entidlist"].(map[string]interface{}))
|
|
|
- var entId = ""
|
|
|
- if group_entidlist != nil && group_entidlist["buckets"] != nil {
|
|
|
- buckets := qutil.ObjArrToMapArr(group_entidlist["buckets"].([]interface{}))
|
|
|
- if buckets == nil || len(buckets) == 0 || (buckets[0]["key"] != nil && len(qutil.ObjToString(buckets[0]["key"])) < 10) {
|
|
|
- continue
|
|
|
- }
|
|
|
- entId = util.EncodeId(qutil.ObjToString(buckets[0]["key"]))
|
|
|
- }
|
|
|
- //此中标企业与采购单位类似项目采购历史
|
|
|
- var buyer_similar_list = BuyerSOOL{}
|
|
|
- //此中标企业与采购单位其它项目采购历史
|
|
|
- var buyer_other_list = BuyerSOOL{}
|
|
|
- if dec.Buyer != "" {
|
|
|
- var buyer_map = *qutil.ObjToMap(v["this_buyer"].(map[string]interface{}))
|
|
|
- var buyer_map_count = buyer_map["doc_count"] //类似项目数量
|
|
|
- var buyer_map_tatil_map = *qutil.ObjToMap(buyer_map["total"].(map[string]interface{}))
|
|
|
- var buyer_map_tatil = qutil.RetainDecimal(qutil.Float64All(buyer_map_tatil_map["value"].(interface{})), 4)
|
|
|
- var my_top_hits_map = *qutil.ObjToMap(buyer_map["my_top_hits"].(map[string]interface{}))
|
|
|
- var buyer_hits_map = *qutil.ObjToMap(my_top_hits_map["hits"].(map[string]interface{}))
|
|
|
- var hits_map = qutil.ObjArrToMapArr(buyer_hits_map["hits"].([]interface{}))
|
|
|
- var bid_winner_time = ""
|
|
|
- var buyer_winner_map = map[string]interface{}{} //类似项目 采购单位 和 中标企业
|
|
|
- if hits_map != nil && len(hits_map) > 0 {
|
|
|
- for _, v := range hits_map {
|
|
|
- if v["_source"] != nil {
|
|
|
- var hits_source_map = *qutil.ObjToMap(v["_source"].(map[string]interface{}))
|
|
|
- jgtime := hits_source_map["jgtime"]
|
|
|
- if jgtime != nil && bid_winner_time == "" {
|
|
|
- bid_winner_time = FormatDateWithObj(&jgtime, "2006/01/02")
|
|
|
- }
|
|
|
- buyer_winner_map[hits_source_map["_id"].(string)] = hits_source_map["jgtime"]
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //查询此中标企业 和 此采购单位 所有合作的项目
|
|
|
- buyer_winner_all_query := GetAllBWQuery(v["key"].(string), dec.Buyer)
|
|
|
- buyer_winner_all_aggs, buyer_winner_all_res := GetAggs("projectset", "projectset", buyer_winner_all_query)
|
|
|
- var bid_winner_other_time = ""
|
|
|
- if buyer_winner_all_res != nil && len(buyer_winner_all_res) > 0 {
|
|
|
- for _, v := range buyer_winner_all_res {
|
|
|
- if buyer_winner_map[v["_id"].(string)] == nil && bid_winner_other_time == "" {
|
|
|
- jgtime := v["jgtime"]
|
|
|
- bid_winner_other_time = FormatDateWithObj(&jgtime, "2006/01/02")
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- //此中标企业 和 此采购单位 合作项目总金额
|
|
|
- var sum_project_val_float float64 = 0
|
|
|
- if buyer_winner_all_aggs != nil {
|
|
|
- if sum_project, ok := buyer_winner_all_aggs.Children("sum_project"); ok {
|
|
|
- sum_project_val, _ := sum_project.Aggregations["value"].MarshalJSON()
|
|
|
- sum_project_val_float, _ = strconv.ParseFloat(string(sum_project_val), 64)
|
|
|
- }
|
|
|
- }
|
|
|
- if sum_project_val_float > 0 {
|
|
|
- buyer_other_list = BuyerSOOL{
|
|
|
- dec.Buyer,
|
|
|
- len(buyer_winner_all_res) - qutil.IntAll(buyer_map_count),
|
|
|
- sum_project_val_float - buyer_map_tatil,
|
|
|
- bid_winner_other_time,
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if buyer_map_count != nil {
|
|
|
- buyer_similar_list = BuyerSOOL{
|
|
|
- dec.Buyer,
|
|
|
- qutil.IntAll(buyer_map_count),
|
|
|
- buyer_map_tatil,
|
|
|
- bid_winner_time,
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //中标企业名称
|
|
|
- winners = append(winners, v["key"].(string))
|
|
|
- buckets = append(buckets, &DecWinnerInfo{
|
|
|
- v["key"].(string), //中标企业名称
|
|
|
- v["doc_count"].(float64), //类似项目总数
|
|
|
- total_project, //项目金额
|
|
|
- buyer_similar_list, //中标企业与采购单位类似项目合作历史
|
|
|
- buyer_other_list, //中标企业和采购单位其它项目合作历史
|
|
|
- 0, //中标企业注册资本
|
|
|
- entId, //中标企业加密id
|
|
|
- max_jytime, //类似项目中标时间
|
|
|
- })
|
|
|
- }
|
|
|
- //获取中标企业注资金信息
|
|
|
- capitals := entity.GetWinnerCapitals(winners)
|
|
|
- var isSortBool = false
|
|
|
- var bvdoc_count float64 = -1
|
|
|
- var bvtotal_project = -1
|
|
|
- for k, v := range buckets {
|
|
|
- //类似项目或者其它项目
|
|
|
- if k > 0 && (v.Buyer_other_list.Doc_count > 0 || v.Buyer_similar_list.Doc_count > 0) {
|
|
|
- isSortBool = true
|
|
|
- }
|
|
|
- //项目数相同 且 此中标企业金额大于前一个中标企业金额 允许再次排序
|
|
|
- if bvdoc_count == v.Doc_count && bvtotal_project < v.Total_project {
|
|
|
- isSortBool = true
|
|
|
- }
|
|
|
- bvdoc_count = v.Doc_count
|
|
|
- bvtotal_project = v.Total_project
|
|
|
- v.Capital = capitals[v.Key]
|
|
|
- }
|
|
|
- //根据金额二次排序
|
|
|
- fmt.Println("isSortBool:", isSortBool)
|
|
|
- if isSortBool {
|
|
|
- sort.Sort(DWIArray(buckets))
|
|
|
- }
|
|
|
- aggsArr["winnerAmount"] = buckets
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- log.Println("运行时间:", time.Since(t1))
|
|
|
- return map[string]interface{}{
|
|
|
- "PDeatils": res,
|
|
|
- "PAnalysis": aggsArr,
|
|
|
- }
|
|
|
-}
|
|
|
+func getDecInfo(decQuery, buyer_buyerClass string, dec *DecParam, buyerSty int) map[string]interface{} {
|
|
|
+ t1 := time.Now()
|
|
|
+ //
|
|
|
+ var aggsArr = map[string]interface{}{}
|
|
|
+ /*
|
|
|
+ //类似项目采购单位采购历史
|
|
|
+ var buyerHistroyList = []map[string]interface{}{}
|
|
|
+ if dec.Buyer != "" && buyerSty == 1 {
|
|
|
+ list := GetListByBuyer(dec)
|
|
|
+ if list != nil && len(list) > 0 {
|
|
|
+ for _, v := range list {
|
|
|
+ var firsttime = v["firsttime"]
|
|
|
+ infoid := ""
|
|
|
+ if v["ids"] != nil {
|
|
|
+ ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
|
|
|
+ if len(ids) > 0 {
|
|
|
+ infoid = util.EncodeId(ids[0])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var projectMap = map[string]interface{}{
|
|
|
+ "projectname": v["projectname"],
|
|
|
+ "_id": util.EncodeId(v["_id"].(string)),
|
|
|
+ "area": v["area"],
|
|
|
+ "bidstatus": v["bidstatus"],
|
|
|
+ "firsttime": FormatDateWithObj(&firsttime, Date_Short_Layout),
|
|
|
+ "infoid": infoid,
|
|
|
+ }
|
|
|
+ buyerHistroyList = append(buyerHistroyList, projectMap)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ aggsArr["buyerHistroyList"] = buyerHistroyList
|
|
|
+ }*/
|
|
|
+ //聚合
|
|
|
+ aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
|
|
|
|
|
|
-// 决策分析 根据字段权重排序 中标企业和中标价格
|
|
|
-var (
|
|
|
- bidtype_score = 1 //采购方式
|
|
|
- review_experts_score = 1 //评审专家
|
|
|
- zbtime_score = 1 //招标时间
|
|
|
- bidamount_score = 2 //中标价格
|
|
|
- budget_score = 2 //预算
|
|
|
- project_rate_score = 1 //折扣率
|
|
|
- winnerorder_score = 1 //中标候选人
|
|
|
-)
|
|
|
+ log.Println("-请求数据时间-:", time.Since(t1))
|
|
|
+ if aggs != nil {
|
|
|
+ //标书编制周期
|
|
|
+ if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ var buckets = []map[string]interface{}{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ buckets = append(buckets, map[string]interface{}{
|
|
|
+ "key": v["key"],
|
|
|
+ "doc_count": v["doc_count"],
|
|
|
+ })
|
|
|
+ }
|
|
|
+ aggsArr["bidcycle_ranges"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //类似项目预算统计分析
|
|
|
+ if aggs_budget, ok := aggs.Children("budget_ranges"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := aggs_budget.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ var buckets = []map[string]interface{}{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
+ var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
+ var avg interface{} = nil
|
|
|
+ if avg_rate["value"] != nil {
|
|
|
+ // avg = avg_rate["value"].(interface{})
|
|
|
+ }
|
|
|
+ var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
+ var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
+ if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
+ var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
+ var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
+ if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
+ avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
+ }
|
|
|
+ }
|
|
|
+ buckets = append(buckets, map[string]interface{}{
|
|
|
+ "key": v["key"],
|
|
|
+ "doc_count": v["doc_count"],
|
|
|
+ "avg": avg,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ aggsArr["budgetAnalysis"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //类似项目地区分布分析
|
|
|
+ if aggs_area, ok := aggs.Children("group_area"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := aggs_area.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ var buckets = []map[string]interface{}{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ //类似项目数量
|
|
|
+ var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
+ var doc_count = 0
|
|
|
+ if group_counts_map["value"] != nil {
|
|
|
+ doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
+ }
|
|
|
+ //类似项目规模
|
|
|
+ var sum_bidamount_map = *qutil.ObjToMap(v["sum_bidamount"].(map[string]interface{}))
|
|
|
+ var bidamount_sum_map = sum_bidamount_map["bidamount_sum"].(map[string]interface{})
|
|
|
+ var bidamount_sum float64 = 0
|
|
|
+ if bidamount_sum_map["value"] != nil {
|
|
|
+ bidamount_sum = qutil.RetainDecimal(qutil.Float64All(bidamount_sum_map["value"].(interface{})), 2)
|
|
|
+ }
|
|
|
+ buckets = append(buckets, map[string]interface{}{
|
|
|
+ "key": v["key"],
|
|
|
+ "doc_count": doc_count,
|
|
|
+ "bidamount_sum": bidamount_sum,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ aggsArr["group_area"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var buyer_buyerClass_bool = false
|
|
|
+ //类似项目采购单位类型分析
|
|
|
+ if group_buyerclass, ok := aggs.Children("group_buyerclass"); ok {
|
|
|
+ if group_buyerclass_c, ok := group_buyerclass.Children("group_buyerclass_c"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ // log.Println(aggsMap)
|
|
|
+ var buckets = []map[string]interface{}{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ if v["key"].(string) == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ var this_bool = false
|
|
|
+ if buyer_buyerClass != "" && buyer_buyerClass == v["key"].(string) {
|
|
|
+ buyer_buyerClass_bool = true
|
|
|
+ this_bool = true
|
|
|
+ }
|
|
|
+ //类似项目数量
|
|
|
+ var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
+ var doc_count = 0
|
|
|
+ if group_counts_map["value"] != nil {
|
|
|
+ doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
+ }
|
|
|
+ //类似项目规模
|
|
|
+ var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
|
|
|
+ var group_money float64 = 0
|
|
|
+ if group_money_map["value"] != nil {
|
|
|
+ group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
|
|
|
+ }
|
|
|
+ //平均折扣率
|
|
|
+ var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
+ var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
+ var avg interface{} = nil
|
|
|
+ if avg_rate["value"] != nil {
|
|
|
+ // avg = avg_rate["value"].(interface{})
|
|
|
+ }
|
|
|
+ var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
+ var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
+ if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
+ var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
+ var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
+ if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
+ avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
+ }
|
|
|
+ }
|
|
|
+ buckets = append(buckets, map[string]interface{}{
|
|
|
+ "key": v["key"], //采购单位类型名称
|
|
|
+ "doc_count": doc_count, //类似项目总数
|
|
|
+ "doc_money": group_money, //类似项目规模
|
|
|
+ "avg": avg, //平均折扣率
|
|
|
+ "main": this_bool, //当前采购单位得采购单位类型
|
|
|
+ })
|
|
|
+ }
|
|
|
+ aggsArr["group_buyerclass"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //此采购单位得采购类型 buyer_buyerclass
|
|
|
+ if group_buyer_buyerclass, ok := aggs.Children("group_buyer_buyerclass"); ok && !buyer_buyerClass_bool {
|
|
|
+ var buyer_buyerclass_map map[string]interface{}
|
|
|
+ if group_buyerclass_c, ok := group_buyer_buyerclass.Children("group_buyerclass_c"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ //类似项目数量
|
|
|
+ var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
|
|
|
+ var doc_count = 0
|
|
|
+ if group_counts_map["value"] != nil {
|
|
|
+ doc_count = qutil.IntAll(group_counts_map["value"])
|
|
|
+ }
|
|
|
+ //类似项目规模
|
|
|
+ var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
|
|
|
+ var group_money float64 = 0
|
|
|
+ if group_money_map["value"] != nil {
|
|
|
+ group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
|
|
|
+ }
|
|
|
+ //平均折扣率
|
|
|
+ var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
|
|
|
+ var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
|
|
|
+ var avg interface{} = nil
|
|
|
+ if avg_rate["value"] != nil {
|
|
|
+ // avg = avg_rate["value"].(interface{})
|
|
|
+ }
|
|
|
+ var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
|
|
|
+ var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
|
|
|
+ if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
|
|
|
+ var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4) //预算总额
|
|
|
+ var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
|
|
|
+ if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
|
|
|
+ avg = (sum_budget - sum_bidamount) / sum_budget
|
|
|
+ }
|
|
|
+ }
|
|
|
+ buyer_buyerclass_map = map[string]interface{}{
|
|
|
+ "key": v["key"], //采购单位类型名称
|
|
|
+ "doc_count": doc_count, //类似项目总数
|
|
|
+ "doc_money": group_money, //类似项目规模
|
|
|
+ "avg": avg, //平均折扣率
|
|
|
+ "main": true, //当前采购单位得采购单位类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if aggsArr["group_buyerclass"] != nil && buyer_buyerclass_map != nil {
|
|
|
+ group_buyerclass_buyers := aggsArr["group_buyerclass"].([]map[string]interface{})
|
|
|
+ buyers_len := len(group_buyerclass_buyers)
|
|
|
+ if buyers_len < 10 {
|
|
|
+ group_buyerclass_buyers = append(group_buyerclass_buyers, buyer_buyerclass_map)
|
|
|
+ } else {
|
|
|
+ group_buyerclass_buyers = append(group_buyerclass_buyers[:buyers_len-1], buyer_buyerclass_map)
|
|
|
+ }
|
|
|
+ aggsArr["group_buyerclass"] = group_buyerclass_buyers
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //专家评审
|
|
|
+ if aggs_review_experts, ok := aggs.Children("group_review_experts"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := aggs_review_experts.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ if len(aggsMap) > 10 {
|
|
|
+ aggsMap = aggsMap[:10]
|
|
|
+ }
|
|
|
+ var _aggsMap = []map[string]interface{}{}
|
|
|
+ for k, v := range aggsMap {
|
|
|
+ if !entity.RegExperts.MatchString(qutil.ObjToString(v["key"])) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ var recentProject TRecentProject
|
|
|
+ rp, err := json.Marshal(v["recent_project"])
|
|
|
+ if err == nil {
|
|
|
+ err = json.Unmarshal(rp, &recentProject)
|
|
|
+ if err == nil && len(recentProject.Hits.Hits) > 0 {
|
|
|
+ data := recentProject.Hits.Hits[0]
|
|
|
+ v["jgtime"] = data.Source.Jgtime //成交时间
|
|
|
+ }
|
|
|
+ }
|
|
|
+ delete(aggsMap[k], "recent_project")
|
|
|
+ _aggsMap = append(_aggsMap, aggsMap[k])
|
|
|
+ }
|
|
|
+ aggsArr["reviewExperts"] = _aggsMap
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //项目数量
|
|
|
+ if all_counts, ok := aggs.Children("all_counts"); ok {
|
|
|
+ all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_counts"] = string(all_counts_val)
|
|
|
+ }
|
|
|
+ //项目金额
|
|
|
+ if all_money, ok := aggs.Children("all_money"); ok {
|
|
|
+ all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
|
|
|
+ all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
|
|
|
+ aggsArr["all_money"] = all_money_float
|
|
|
+ }
|
|
|
+ //项目涉及中标企业
|
|
|
+ if all_winners, ok := aggs.Children("all_winners"); ok {
|
|
|
+ all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_winners"] = string(all_winners_val)
|
|
|
+ }
|
|
|
+ //项目专家
|
|
|
+ if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
|
|
|
+ all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
|
|
|
+ aggsArr["all_review_experts"] = string(all_review_experts_val)
|
|
|
+ }
|
|
|
+ //中标企业
|
|
|
+ if aggs_winner, ok := aggs.Children("group_winner"); ok {
|
|
|
+ var aggsMap []map[string]interface{}
|
|
|
+ bs, _ := aggs_winner.Aggregations["buckets"].MarshalJSON()
|
|
|
+ if len(bs) > 0 {
|
|
|
+ var winners = []string{}
|
|
|
+ json.Unmarshal(bs, &aggsMap)
|
|
|
+ if len(aggsMap) > 0 {
|
|
|
+ if len(aggsMap) > 10 {
|
|
|
+ aggsMap = aggsMap[:10]
|
|
|
+ }
|
|
|
+ var buckets = []*DecWinnerInfo{}
|
|
|
+ for _, v := range aggsMap {
|
|
|
+ //if !entity.RegWinner.MatchString(qutil.ObjToString(v["key"])) {
|
|
|
+ // continue
|
|
|
+ //}
|
|
|
+ //类似项目金额
|
|
|
+ var total_map = *qutil.ObjToMap(v["total"].(map[string]interface{}))
|
|
|
+ var total_project = 0
|
|
|
+ if total_map["value"] != nil {
|
|
|
+ total_project = qutil.IntAll(total_map["value"])
|
|
|
+ }
|
|
|
+
|
|
|
+ //中标企业最近合作项目
|
|
|
+ var recentProject TRecentProject
|
|
|
+ latestProject := make(map[string]interface{})
|
|
|
+ rp, err := json.Marshal(v["recent_project"])
|
|
|
+ if err == nil {
|
|
|
+ err = json.Unmarshal(rp, &recentProject)
|
|
|
+ if err == nil && len(recentProject.Hits.Hits) > 0 {
|
|
|
+ latestProject["_id"] = recentProject.Hits.Hits[0].Id
|
|
|
+ data := recentProject.Hits.Hits[0]
|
|
|
+ latestProject["_id"] = util.EncodeId(data.Id)
|
|
|
+ latestProject["bidamount"] = data.Source.Bidamount //金额
|
|
|
+ latestProject["projectname"] = data.Source.Projectname //项目名称
|
|
|
+ latestProject["jgtime"] = data.Source.Jgtime //成交时间
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-func Sequence(seqData []map[string]interface{}) []map[string]interface{} {
|
|
|
- var sequenceArr3 = []map[string]interface{}{}
|
|
|
- var sequenceArr4 = []map[string]interface{}{}
|
|
|
- var sequenceArr5 = []map[string]interface{}{}
|
|
|
- var sequenceArr6 = []map[string]interface{}{}
|
|
|
- var sequenceArr7 = []map[string]interface{}{}
|
|
|
- var sequenceArr8 = []map[string]interface{}{}
|
|
|
- var sequenceArr9 = []map[string]interface{}{}
|
|
|
- for k, v := range seqData {
|
|
|
- var score = 0
|
|
|
- if v["s_winner"] == nil {
|
|
|
- var s_winner = qutil.ObjToString(v["s_winner"])
|
|
|
- var s_length = 0
|
|
|
- for _, v := range strings.Split(s_winner, ",") {
|
|
|
- if entity.RegWinner.MatchString(v) {
|
|
|
- s_length += 1
|
|
|
- }
|
|
|
- }
|
|
|
- if s_length == 0 {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- //评审专家
|
|
|
- review_experts := []string{}
|
|
|
- if v["review_experts"] != nil {
|
|
|
- for _, v := range qutil.ObjArrToStringArr(v["review_experts"].([]interface{})) {
|
|
|
- if entity.RegExperts.MatchString(v) {
|
|
|
- review_experts = append(review_experts, v)
|
|
|
- }
|
|
|
- }
|
|
|
- v["review_experts"] = review_experts
|
|
|
- }
|
|
|
- if len(review_experts) > 0 {
|
|
|
- score += review_experts_score
|
|
|
- }
|
|
|
- //采购方式
|
|
|
- if v["bidtype"] != nil && qutil.ObjToString(v["bidtype"].(string)) != "" {
|
|
|
- score += bidtype_score
|
|
|
- }
|
|
|
- //招标时间
|
|
|
- if v["firsttime"] != nil && qutil.Float64All(v["firsttime"].(float64)) > 0 {
|
|
|
- score += zbtime_score
|
|
|
- }
|
|
|
- //预算
|
|
|
- if v["budget"] != nil && qutil.Float64All(v["budget"].(float64)) > 0 {
|
|
|
- score += budget_score
|
|
|
- }
|
|
|
- //中标价格
|
|
|
- if v["bidamount"] != nil && qutil.Float64All(v["bidamount"].(float64)) > 0 {
|
|
|
- score += bidamount_score
|
|
|
- }
|
|
|
- //折扣率
|
|
|
- if v["project_rate"] != nil && qutil.Float64All(v["project_rate"].(float64)) > 0 {
|
|
|
- score += project_rate_score
|
|
|
- }
|
|
|
- //中标候选人
|
|
|
- if v["winnerorder"] != nil && len(qutil.ObjArrToStringArr(v["winnerorder"].([]interface{}))) > 0 {
|
|
|
- score += winnerorder_score
|
|
|
- }
|
|
|
- //低于三分排除
|
|
|
- if score < 4 {
|
|
|
- // continue
|
|
|
- }
|
|
|
- if v["ids"] != nil {
|
|
|
- ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
|
|
|
- if len(ids) > 0 {
|
|
|
- v["infoid"] = util.EncodeId(ids[0])
|
|
|
- delete(v, "ids")
|
|
|
- }
|
|
|
- }
|
|
|
- v["_id"] = util.EncodeId(v["_id"].(string))
|
|
|
- switch score {
|
|
|
- case 4:
|
|
|
- sequenceArr4 = append(sequenceArr4, seqData[k])
|
|
|
- case 5:
|
|
|
- sequenceArr5 = append(sequenceArr5, seqData[k])
|
|
|
- case 6:
|
|
|
- sequenceArr6 = append(sequenceArr6, seqData[k])
|
|
|
- case 7:
|
|
|
- sequenceArr7 = append(sequenceArr7, seqData[k])
|
|
|
- case 8:
|
|
|
- sequenceArr8 = append(sequenceArr8, seqData[k])
|
|
|
- case 9:
|
|
|
- sequenceArr9 = append(sequenceArr9, seqData[k])
|
|
|
- default:
|
|
|
- sequenceArr3 = append(sequenceArr3, seqData[k])
|
|
|
- }
|
|
|
- }
|
|
|
- return append(append(append(append(append(append(sequenceArr9, sequenceArr8...), sequenceArr7...), sequenceArr6...), sequenceArr5...), sequenceArr4...), sequenceArr3...)
|
|
|
+ var max_jytime_map = *qutil.ObjToMap(v["max_jytime"].(map[string]interface{}))
|
|
|
+ var max_jytime int64 = 0
|
|
|
+ if max_jytime_map["value"] != nil {
|
|
|
+ max_jytime = qutil.Int64All(max_jytime_map["value"])
|
|
|
+ }
|
|
|
+ //中标企业id
|
|
|
+ var group_entidlist = *qutil.ObjToMap(v["group_entidlist"].(map[string]interface{}))
|
|
|
+ var entId = ""
|
|
|
+ if group_entidlist != nil && group_entidlist["buckets"] != nil {
|
|
|
+ buckets := qutil.ObjArrToMapArr(group_entidlist["buckets"].([]interface{}))
|
|
|
+ if buckets == nil || len(buckets) == 0 || (buckets[0]["key"] != nil && len(qutil.ObjToString(buckets[0]["key"])) < 10) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ ent_id := qutil.ObjToString(buckets[0]["key"])
|
|
|
+ winners = append(winners, fmt.Sprintf(`"%s"`, ent_id))
|
|
|
+ entId = util.EncodeId(ent_id)
|
|
|
+ }
|
|
|
+ //此中标企业与采购单位类似项目采购历史
|
|
|
+ var buyer_similar_list = BuyerSOOL{}
|
|
|
+ //此中标企业与采购单位其它项目采购历史
|
|
|
+ var buyer_other_list = BuyerSOOL{}
|
|
|
+ /*if dec.Buyer != "" {
|
|
|
+ var buyer_map = *qutil.ObjToMap(v["this_buyer"].(map[string]interface{}))
|
|
|
+ var buyer_map_count = buyer_map["doc_count"] //类似项目数量
|
|
|
+ var buyer_map_tatil_map = *qutil.ObjToMap(buyer_map["total"].(map[string]interface{}))
|
|
|
+ var buyer_map_tatil = qutil.RetainDecimal(qutil.Float64All(buyer_map_tatil_map["value"].(interface{})), 4)
|
|
|
+ var my_top_hits_map = *qutil.ObjToMap(buyer_map["my_top_hits"].(map[string]interface{}))
|
|
|
+ var buyer_hits_map = *qutil.ObjToMap(my_top_hits_map["hits"].(map[string]interface{}))
|
|
|
+ var hits_map = qutil.ObjArrToMapArr(buyer_hits_map["hits"].([]interface{}))
|
|
|
+ var bid_winner_time = ""
|
|
|
+ var buyer_winner_map = map[string]interface{}{} //类似项目 采购单位 和 中标企业
|
|
|
+ if hits_map != nil && len(hits_map) > 0 {
|
|
|
+ for _, v := range hits_map {
|
|
|
+ if v["_source"] != nil {
|
|
|
+ var hits_source_map = *qutil.ObjToMap(v["_source"].(map[string]interface{}))
|
|
|
+ jgtime := hits_source_map["jgtime"]
|
|
|
+ if jgtime != nil && bid_winner_time == "" {
|
|
|
+ bid_winner_time = FormatDateWithObj(&jgtime, "2006/01/02")
|
|
|
+ }
|
|
|
+ buyer_winner_map[qutil.InterfaceToStr(hits_source_map["id"])] = hits_source_map["jgtime"]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询此中标企业 和 此采购单位 所有合作的项目
|
|
|
+ buyer_winner_all_query := GetAllBWQuery(v["key"].(string), dec.Buyer)
|
|
|
+ buyer_winner_all_aggs, buyer_winner_all_res := GetAggs("projectset", "projectset", buyer_winner_all_query)
|
|
|
+ var bid_winner_other_time = ""
|
|
|
+ if buyer_winner_all_res != nil && len(buyer_winner_all_res) > 0 {
|
|
|
+ for _, v := range buyer_winner_all_res {
|
|
|
+ if buyer_winner_map[v["_id"].(string)] == nil && bid_winner_other_time == "" {
|
|
|
+ jgtime := v["jgtime"]
|
|
|
+ bid_winner_other_time = FormatDateWithObj(&jgtime, "2006/01/02")
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //此中标企业 和 此采购单位 合作项目总金额
|
|
|
+ var sum_project_val_float float64 = 0
|
|
|
+ if buyer_winner_all_aggs != nil {
|
|
|
+ if sum_project, ok := buyer_winner_all_aggs.Children("sum_project"); ok {
|
|
|
+ sum_project_val, _ := sum_project.Aggregations["value"].MarshalJSON()
|
|
|
+ sum_project_val_float, _ = strconv.ParseFloat(string(sum_project_val), 64)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if sum_project_val_float > 0 {
|
|
|
+ buyer_other_list = BuyerSOOL{
|
|
|
+ dec.Buyer,
|
|
|
+ len(buyer_winner_all_res) - qutil.IntAll(buyer_map_count),
|
|
|
+ sum_project_val_float - buyer_map_tatil,
|
|
|
+ bid_winner_other_time,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if buyer_map_count != nil {
|
|
|
+ buyer_similar_list = BuyerSOOL{
|
|
|
+ dec.Buyer,
|
|
|
+ qutil.IntAll(buyer_map_count),
|
|
|
+ buyer_map_tatil,
|
|
|
+ bid_winner_time,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ //中标企业名称
|
|
|
+ buckets = append(buckets, &DecWinnerInfo{
|
|
|
+ v["key"].(string), //中标企业名称
|
|
|
+ v["doc_count"].(float64), //类似项目总数
|
|
|
+ total_project, //项目金额
|
|
|
+ buyer_similar_list, //中标企业与采购单位类似项目合作历史
|
|
|
+ buyer_other_list, //中标企业和采购单位其它项目合作历史
|
|
|
+ 0, //中标企业注册资本
|
|
|
+ entId, //中标企业加密id
|
|
|
+ max_jytime, //类似项目中标时间
|
|
|
+ latestProject, //中标企业最近合作项目
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //获取中标企业注资金信息
|
|
|
+ /*capitals := entity.GetWinnerCapitals(winners)
|
|
|
+ log.Println("查询获取中标企业注资金信息消耗时间", time.Since(t1))
|
|
|
+ var isSortBool = false
|
|
|
+ var bvdoc_count float64 = -1
|
|
|
+ var bvtotal_project = -1
|
|
|
+ for _, v := range buckets {
|
|
|
+ //类似项目或者其它项目
|
|
|
+ if k > 0 && (v.Buyer_other_list.Doc_count > 0 || v.Buyer_similar_list.Doc_count > 0) {
|
|
|
+ isSortBool = true
|
|
|
+ }
|
|
|
+ //项目数相同 且 此中标企业金额大于前一个中标企业金额 允许再次排序
|
|
|
+ if bvdoc_count == v.Doc_count && bvtotal_project < v.Total_project {
|
|
|
+ isSortBool = true
|
|
|
+ }
|
|
|
+ bvdoc_count = v.Doc_count
|
|
|
+ bvtotal_project = v.Total_project
|
|
|
+ v.Capital = capitals[v.EntId]
|
|
|
+ }
|
|
|
+ //根据金额二次排序
|
|
|
+ fmt.Println("isSortBool:", isSortBool)
|
|
|
+ if isSortBool {
|
|
|
+ sort.Sort(DWIArray(buckets))
|
|
|
+ }*/
|
|
|
+ aggsArr["winnerAmount"] = buckets
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.Println("运行时间:", time.Since(t1))
|
|
|
+ return aggsArr
|
|
|
}
|