|
@@ -2,17 +2,19 @@
|
|
|
package analysis
|
|
|
|
|
|
import (
|
|
|
+ . "app.yhyue.com/moapp/jybase/api"
|
|
|
+ . "app.yhyue.com/moapp/jybase/date"
|
|
|
+ "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
+ "app.yhyue.com/moapp/jypkg/common/src/qfw/util/dataexport"
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
+ "github.com/gogf/gf/v2/util/gconv"
|
|
|
"jy/src/jfw/modules/bigmember/src/config"
|
|
|
"jy/src/jfw/modules/bigmember/src/db"
|
|
|
"jy/src/jfw/modules/bigmember/src/util"
|
|
|
"sort"
|
|
|
"strconv"
|
|
|
|
|
|
- . "app.yhyue.com/moapp/jybase/api"
|
|
|
- . "app.yhyue.com/moapp/jybase/date"
|
|
|
-
|
|
|
"log"
|
|
|
|
|
|
qutil "app.yhyue.com/moapp/jybase/common"
|
|
@@ -92,6 +94,16 @@ func getForecastProjectSql(scd *util.ViewCondition, startTime, endTime int, data
|
|
|
areaquery += `]}}`
|
|
|
areaCity = append(areaCity, areaquery)
|
|
|
}
|
|
|
+ //县
|
|
|
+ if len(scd.District) > 0 {
|
|
|
+ for _, v := range scd.District {
|
|
|
+ cityName := strings.Split(v, "_")[0]
|
|
|
+ districtName := strings.Split(v, "_")[1]
|
|
|
+ query_bool_must_and_district := `{"bool":{"must":[{"terms":{"city":["%s"]}},{"terms":{"district":["%s"]}}]}}`
|
|
|
+ areaCity = append(areaCity, fmt.Sprintf(query_bool_must_and_district, cityName, districtName))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if len(areaCity) > 0 {
|
|
|
musts = append(musts, fmt.Sprintf(filter_must_area_city, strings.Join(areaCity, ",")))
|
|
|
}
|
|
@@ -224,6 +236,156 @@ func (this *Analysis) ForPContent() {
|
|
|
this.ServeJson(NewResult(rData, errMsg))
|
|
|
}
|
|
|
|
|
|
+func (this *Analysis) ForArea() {
|
|
|
+ defer qutil.Catch()
|
|
|
+ var (
|
|
|
+ regMap = Result{
|
|
|
+ Data: []map[string]interface{}{},
|
|
|
+ Error_code: Error_code,
|
|
|
+ Error_msg: "",
|
|
|
+ }
|
|
|
+ )
|
|
|
+
|
|
|
+ data := make(map[string]map[string][]string)
|
|
|
+ main_userId, _, _ := util.MainUserId(this.Session())
|
|
|
+ //查库获得大会员用户的信息
|
|
|
+ o_mb := config.Compatible.Select(main_userId, `{"o_member_jy":1}`)
|
|
|
+ if (*o_mb)["o_member_jy"] == nil {
|
|
|
+ //PC端大会员 没有进行初始化
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "msg": "暂无设置订阅信息,无法获取省份",
|
|
|
+ "code": 1,
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ oMemberJy := qutil.ObjToMap((*o_mb)["o_member_jy"])
|
|
|
+ o_area := map[string]interface{}{}
|
|
|
+ o_district := map[string]interface{}{}
|
|
|
+ if (*oMemberJy)["o_area"] != nil {
|
|
|
+ o_area = (*oMemberJy)["o_area"].(map[string]interface{})
|
|
|
+ }
|
|
|
+ if (*oMemberJy)["o_district"] != nil {
|
|
|
+ o_district, _ = (*oMemberJy)["o_district"].(map[string]interface{})
|
|
|
+ }
|
|
|
+ for s, i := range o_area {
|
|
|
+ cityMap := make(map[string][]string)
|
|
|
+ city, _ := i.([]interface{})
|
|
|
+ citys := ArrToStringArr(city)
|
|
|
+ for _, c := range citys {
|
|
|
+ var ds []interface{}
|
|
|
+ if district, ok := o_district[c]; ok {
|
|
|
+ ds, _ = district.([]interface{})
|
|
|
+ }
|
|
|
+ cityMap[c] = ArrToStringArr(ds)
|
|
|
+ }
|
|
|
+ data[s] = cityMap
|
|
|
+ }
|
|
|
+ regMap.Data = data
|
|
|
+ this.ServeJson(regMap)
|
|
|
+}
|
|
|
+
|
|
|
+func ArrToStringArr(old []interface{}) []string {
|
|
|
+ newData := []string{}
|
|
|
+ if old != nil {
|
|
|
+ newData = make([]string, len(old))
|
|
|
+ for i, v := range old {
|
|
|
+ newData[i], _ = v.(string)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return newData
|
|
|
+}
|
|
|
+
|
|
|
+func (this *Analysis) ForDerive() {
|
|
|
+ defer qutil.Catch()
|
|
|
+ userId, _ := this.GetSession("userId").(string)
|
|
|
+ main_userId, _, _ := util.MainUserId(this.Session())
|
|
|
+
|
|
|
+ startTime, _ := this.GetInteger("startTime")
|
|
|
+ endTime, _ := this.GetInteger("endTime")
|
|
|
+ dataType := this.GetString("dataType")
|
|
|
+ area := this.GetString("area")
|
|
|
+ if area == "{}" {
|
|
|
+ area = ""
|
|
|
+ }
|
|
|
+ count, _ := this.GetInteger("count")
|
|
|
+ ids := strings.Split(this.GetString("selectIds"), ",")
|
|
|
+ var (
|
|
|
+ selectIds []string
|
|
|
+ sql *util.ViewCondition
|
|
|
+ )
|
|
|
+ idTrue := make(map[string]bool)
|
|
|
+ for _, id := range ids {
|
|
|
+ if id == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ sid := util.DecodeId(id)
|
|
|
+ if idTrue[sid] {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ idTrue[sid] = true
|
|
|
+ selectIds = append(selectIds, sid)
|
|
|
+ }
|
|
|
+
|
|
|
+ o_member_jy := &map[string]interface{}{}
|
|
|
+ //查库获得大会员用户的信息
|
|
|
+ o_mb := config.Compatible.Select(main_userId, `{"o_member_jy":1}`)
|
|
|
+ if o_mb != nil && (*o_mb) != nil {
|
|
|
+ if (*o_mb)["o_member_jy"] != nil {
|
|
|
+ o_member_jy = qutil.ObjToMap((*o_mb)["o_member_jy"])
|
|
|
+ //项目预测检索库
|
|
|
+ selectIds, sql = getNewForecastDerive(main_userId, *o_member_jy, startTime, endTime, count, dataType, area, selectIds)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if selectIds == nil || len(selectIds) == 0 || sql == nil {
|
|
|
+ this.ServeJson(Result{
|
|
|
+ Error_code: -1,
|
|
|
+ Error_msg: "统计infoid异常",
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var region []string
|
|
|
+ if sql.District != nil {
|
|
|
+ for _, s := range sql.District {
|
|
|
+ str := strings.Split(s, "_")
|
|
|
+ if len(str) == 2 {
|
|
|
+ region = append(region, str[1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var dKWord []*util.DeriveKeyWord
|
|
|
+ for _, word := range sql.Keyword {
|
|
|
+ dKWord = append(dKWord, &util.DeriveKeyWord{
|
|
|
+ Keyword: strings.Join(word.Keyword, " "),
|
|
|
+ Appended: word.Appended,
|
|
|
+ Exclude: word.Exclude,
|
|
|
+ MatchWay: word.MatchWay,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ saveData := map[string]interface{}{
|
|
|
+ "selectIds": selectIds,
|
|
|
+ "s_userid": userId,
|
|
|
+ "keywords": dKWord,
|
|
|
+ "area": sql.Area,
|
|
|
+ "city": sql.City,
|
|
|
+ "region": region,
|
|
|
+ "district": sql.District,
|
|
|
+ "buyerclass": sql.Buyerclass,
|
|
|
+ "selectType": "purchasing",
|
|
|
+ "subtype": strings.Join(sql.Subtype, ","),
|
|
|
+ "dataType": dataType,
|
|
|
+ "comeinfrom": "latentPrediction",
|
|
|
+ "comeintime": time.Now().Unix(),
|
|
|
+ }
|
|
|
+ if startTime > 0 || endTime > 0 {
|
|
|
+ saveData["publishtime"] = fmt.Sprintf("%d_%d", startTime, endTime)
|
|
|
+ }
|
|
|
+ id := db.Mgo.Save(dataexport.ExportTable, saveData)
|
|
|
+ this.ServeJson(NewResult(map[string]interface{}{
|
|
|
+ "_id": encrypt.SE.Encode2Hex(id),
|
|
|
+ }, nil))
|
|
|
+}
|
|
|
+
|
|
|
func (this *Analysis) ForPList() {
|
|
|
defer qutil.Catch()
|
|
|
var regMap = Result{
|
|
@@ -234,10 +396,11 @@ func (this *Analysis) ForPList() {
|
|
|
if this.Method() == METHOD {
|
|
|
msg := ""
|
|
|
code := 0
|
|
|
- list := []map[string]interface{}{}
|
|
|
+ //list := []map[string]interface{}{}
|
|
|
flist := []map[string]interface{}{}
|
|
|
- count := 0
|
|
|
- var fcount int64 = 0
|
|
|
+ var (
|
|
|
+ fcount, distinctCount int64
|
|
|
+ )
|
|
|
userId, _ := this.GetSession("userId").(string)
|
|
|
main_userId, _, _ := util.MainUserId(this.Session())
|
|
|
isSubCount := false
|
|
@@ -250,45 +413,52 @@ func (this *Analysis) ForPList() {
|
|
|
startTime, _ := this.GetInteger("startTime")
|
|
|
endTime, _ := this.GetInteger("endTime")
|
|
|
dataType := this.GetString("dataType")
|
|
|
+ area := this.GetString("area")
|
|
|
+ total, _ := this.GetInteger("total")
|
|
|
+ if area == "{}" {
|
|
|
+ area = ""
|
|
|
+ }
|
|
|
+ if total == 0 && (area != "" || endTime > 0 || startTime > 0) {
|
|
|
+ regMap.Data = map[string]interface{}{
|
|
|
+ "msg": "您设置的订阅关键词无法进行预测",
|
|
|
+ "code": 2,
|
|
|
+ "isSubCount": isSubCount,
|
|
|
+ }
|
|
|
+ this.ServeJson(regMap)
|
|
|
+ return
|
|
|
+ }
|
|
|
if pageSize == 0 {
|
|
|
pageSize = 10
|
|
|
}
|
|
|
- o_member_jy := &map[string]interface{}{}
|
|
|
//查库获得大会员用户的信息
|
|
|
o_mb := config.Compatible.Select(main_userId, `{"o_member_jy":1}`)
|
|
|
- if o_mb != nil && (*o_mb) != nil {
|
|
|
- if (*o_mb)["o_member_jy"] != nil {
|
|
|
- o_member_jy = qutil.ObjToMap((*o_mb)["o_member_jy"])
|
|
|
- //项目预测检索库
|
|
|
- flist, fcount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize, startTime, endTime, dataType)
|
|
|
- if pageNum == 1 {
|
|
|
- if (*o_member_jy)["a_items"] != nil {
|
|
|
- a_items := qutil.ObjArrToMapArr((*o_member_jy)["a_items"].([]interface{}))
|
|
|
- if len(a_items) == 0 || a_items[0]["a_key"] == nil || len(a_items[0]["a_key"].([]interface{})) == 0 {
|
|
|
- msg = "暂无设置订阅关键词,无法进行预测"
|
|
|
- code = 1
|
|
|
- } else if (list == nil || len(list) == 0) && len(flist) == 0 {
|
|
|
- msg = "您设置的订阅关键词无法进行预测"
|
|
|
- code = 2
|
|
|
- }
|
|
|
+ isKWD, o_member_jy := isKeWord(o_mb)
|
|
|
+ if isKWD {
|
|
|
+ flist, fcount, distinctCount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize, startTime, endTime, dataType, area)
|
|
|
+ if pageNum == 1 {
|
|
|
+ if len(flist) == 0 {
|
|
|
+ if area != "" || startTime != 0 || endTime != 0 {
|
|
|
+ msg = "当前筛选条件下结果为空"
|
|
|
+ code = 3
|
|
|
} else {
|
|
|
- msg = "暂无设置订阅关键词,无法进行预测"
|
|
|
- code = 1
|
|
|
+ msg = "您设置的订阅关键词无法进行预测"
|
|
|
+ code = 2
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- //PC端大会员 没有进行初始化
|
|
|
- msg = "暂无设置订阅关键词,无法进行预测"
|
|
|
- code = 1
|
|
|
}
|
|
|
+ } else {
|
|
|
+ //PC端大会员 没有进行初始化
|
|
|
+ msg = "暂无设置订阅关键词,无法进行预测"
|
|
|
+ code = 1
|
|
|
}
|
|
|
+
|
|
|
regMap.Data = map[string]interface{}{
|
|
|
- "msg": msg,
|
|
|
- "code": code,
|
|
|
- "list": forecastMerge(list, flist),
|
|
|
- "count": int64(count) + fcount,
|
|
|
- "isSubCount": isSubCount,
|
|
|
+ "msg": msg,
|
|
|
+ "code": code,
|
|
|
+ "distinctCount": distinctCount,
|
|
|
+ "list": forecastMerge(nil, flist),
|
|
|
+ "count": fcount,
|
|
|
+ "isSubCount": isSubCount,
|
|
|
}
|
|
|
} else {
|
|
|
regMap.Error_code = Error_code_1005
|
|
@@ -297,6 +467,26 @@ func (this *Analysis) ForPList() {
|
|
|
this.ServeJson(regMap)
|
|
|
}
|
|
|
|
|
|
+func isKeWord(o_mb *map[string]interface{}) (bool, *map[string]interface{}) {
|
|
|
+ if o_mb == nil || len(*o_mb) == 0 || (*o_mb)["o_member_jy"] == nil {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ o_member_jy := qutil.ObjToMap((*o_mb)["o_member_jy"])
|
|
|
+ if (*o_member_jy)["a_items"] == nil {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ a_items := qutil.ObjArrToMapArr((*o_member_jy)["a_items"].([]interface{}))
|
|
|
+ if len(a_items) == 0 {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ for _, item := range a_items {
|
|
|
+ if item["a_key"] != nil && len(item["a_key"].([]interface{})) > 0 {
|
|
|
+ return true, o_member_jy
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false, nil
|
|
|
+}
|
|
|
+
|
|
|
type ForecastInfo struct {
|
|
|
Buyer string `json:"buyer"`
|
|
|
Id string `json:"id"`
|
|
@@ -306,6 +496,7 @@ type ForecastInfo struct {
|
|
|
Keys string `json:"keys"`
|
|
|
Jyhref string `json:"jyhref"`
|
|
|
Yuceendtime int64 `json:"yuceendtime"`
|
|
|
+ InfoId string `json:"infoId"`
|
|
|
}
|
|
|
|
|
|
// 合并去重
|
|
@@ -343,6 +534,7 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
|
|
|
Jyhref: qutil.ObjToString(fv["jyhref"]),
|
|
|
Keys: "",
|
|
|
Yuceendtime: qutil.Int64All(fv["yuceendtime"]),
|
|
|
+ InfoId: util.EncodeId(qutil.ObjToString(fv["infoid"])),
|
|
|
})
|
|
|
}
|
|
|
}
|
|
@@ -357,11 +549,11 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
|
|
|
|
|
|
var d = &dfa.DFA{}
|
|
|
|
|
|
-func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int, startTime, endTime int, dataType string) (list []map[string]interface{}, count int64) {
|
|
|
+func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int, startTime, endTime int, dataType, area string) (list []map[string]interface{}, count, distinctCount int64) {
|
|
|
if userId == "" {
|
|
|
return
|
|
|
}
|
|
|
- sql := getSqlObjFromId(o_member_jy)
|
|
|
+ sql := getSqlObjFromId(o_member_jy, area)
|
|
|
if sql == nil {
|
|
|
return
|
|
|
}
|
|
@@ -387,26 +579,44 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
|
|
|
// qstr := GetMemberForecastSql(sql)
|
|
|
qstr := getForecastProjectSql(sql, startTime, endTime, dataType)
|
|
|
count = elastic.Count(INDEX, TYPE, qstr)
|
|
|
+ distinctCount = count
|
|
|
+ if int(distinctCount) > config.Config.MsgMaxCount { //超过20000 计算去重后的实际标讯数据
|
|
|
+ distinctSql := fmt.Sprintf(`%s,"aggs": {"distinct_infoid_count": {"cardinality": {"field": "infoid"}}},"size": 0}`, qstr[:len(qstr)-1])
|
|
|
+ res := util.GetAggs(INDEX, TYPE, distinctSql)
|
|
|
+ if res != nil && len(res) > 0 {
|
|
|
+ var infoIds DistinctInfoidCount
|
|
|
+ if b, err := res["distinct_infoid_count"].MarshalJSON(); err == nil && b != nil {
|
|
|
+ err = json.Unmarshal(b, &infoIds)
|
|
|
+ if err == nil {
|
|
|
+ distinctCount = int64(infoIds.Value)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
list = *elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*pageSize, pageSize, 0, false)
|
|
|
if list != nil {
|
|
|
d.AddWord(keys...)
|
|
|
for _, v := range list {
|
|
|
+ rsvMap := map[string]bool{}
|
|
|
var rsArr = []string{}
|
|
|
var rsArrRes = []string{}
|
|
|
- if v["results"] != nil {
|
|
|
- results := qutil.ObjArrToMapArr(v["results"].([]interface{}))
|
|
|
- rsvMap := map[string]bool{}
|
|
|
- for _, rsv := range results {
|
|
|
- rsArr = append(rsArr, d.Analy(rsv["purchasing"].(string))...)
|
|
|
- }
|
|
|
- for _, rv := range rsArr {
|
|
|
- if rsvMap[strings.Join(rsArr, "+")] {
|
|
|
- continue
|
|
|
+ if dataType == "nj" {
|
|
|
+ rsArr = append(rsArr, d.Analy(qutil.InterfaceToStr(v["title"]))...)
|
|
|
+ } else {
|
|
|
+ if v["results"] != nil {
|
|
|
+ results := qutil.ObjArrToMapArr(v["results"].([]interface{}))
|
|
|
+ for _, rsv := range results {
|
|
|
+ rsArr = append(rsArr, d.Analy(rsv["purchasing"].(string))...)
|
|
|
}
|
|
|
- rsArrRes = append(rsArrRes, rv)
|
|
|
- rsvMap[strings.Join(rsArr, "+")] = true
|
|
|
}
|
|
|
}
|
|
|
+ for _, rv := range rsArr {
|
|
|
+ if rsvMap[strings.Join(rsArr, "+")] {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ rsArrRes = append(rsArrRes, rv)
|
|
|
+ rsvMap[strings.Join(rsArr, "+")] = true
|
|
|
+ }
|
|
|
v["results"] = rsArrRes
|
|
|
v["id"] = qutil.ObjToString(v["_id"])
|
|
|
v["yucetime"] = qutil.Int64All(v["yucetime"].(float64))
|
|
@@ -417,6 +627,69 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+type DistinctInfoId struct {
|
|
|
+ Buckets []struct {
|
|
|
+ Key string `json:"key"`
|
|
|
+ } `json:"buckets"`
|
|
|
+}
|
|
|
+
|
|
|
+type DistinctInfoidCount struct {
|
|
|
+ Value int `json:"value"`
|
|
|
+}
|
|
|
+
|
|
|
+func getNewForecastDerive(userId string, o_member_jy map[string]interface{}, startTime, endTime, count int, dataType, area string, selectIds []string) (ids []string, sql *util.ViewCondition) {
|
|
|
+ if userId == "" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sql = getSqlObjFromId(o_member_jy, area)
|
|
|
+ if sql == nil || len(selectIds) != 0 {
|
|
|
+ return selectIds, sql
|
|
|
+ }
|
|
|
+ keys := []string{}
|
|
|
+ keyIsexists := map[string]bool{}
|
|
|
+ for _, v := range sql.Keyword {
|
|
|
+ var keys_one []string
|
|
|
+ for _, k := range v.Keyword {
|
|
|
+ keys_one = append(keys_one, k)
|
|
|
+ }
|
|
|
+ for _, k := range v.Appended {
|
|
|
+ keys_one = append(keys_one, k)
|
|
|
+ }
|
|
|
+ if keyIsexists[strings.Join(keys_one, "+")] {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ keyIsexists[strings.Join(keys_one, "+")] = true
|
|
|
+ keys = append(keys, strings.Join(keys_one, "+"))
|
|
|
+ }
|
|
|
+ if len(keys) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // qstr := GetMemberForecastSql(sql)
|
|
|
+ qstr := getForecastProjectSql(sql, startTime, endTime, dataType)
|
|
|
+ if count > config.Config.MsgMaxCount {
|
|
|
+ count = config.Config.MsgMaxCount
|
|
|
+ }
|
|
|
+ //聚合去重infoid
|
|
|
+ aggSql := fmt.Sprintf(`,"size": 0,"aggs": {"distinct_infoid": {"terms": {"field": "infoid","size": %d,"order": {"top_yucetime.value": "desc"}},"aggs": {"top_yucetime": {"max": {"field": "yucetime"}}}}}}`, count)
|
|
|
+ qstr = fmt.Sprintf("%s%s", qstr[:len(qstr)-1], aggSql)
|
|
|
+ res := util.GetAggs(INDEX, TYPE, qstr)
|
|
|
+ if res == nil || len(res) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var infoIds DistinctInfoId
|
|
|
+ if b, err := res["distinct_infoid"].MarshalJSON(); err == nil && b != nil {
|
|
|
+ err = json.Unmarshal(b, &infoIds)
|
|
|
+ if err == nil {
|
|
|
+ for _, bucket := range infoIds.Buckets {
|
|
|
+ if bucket.Key != "" {
|
|
|
+ ids = append(ids, bucket.Key)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// 获取大会员forecast 检索库查询语句 - 查询逻辑有调整 dev4.6.8 -ws 新方法:getForecastProjectSql()
|
|
|
func GetMemberForecastSql(scd *util.ViewCondition) string {
|
|
|
query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
|
|
@@ -518,7 +791,7 @@ func GetMemberForecastSql(scd *util.ViewCondition) string {
|
|
|
}
|
|
|
|
|
|
// member_jy
|
|
|
-func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
|
|
|
+func getSqlObjFromId(o_member_jy map[string]interface{}, area string) *util.ViewCondition {
|
|
|
if o_member_jy["a_items"] == nil {
|
|
|
return nil
|
|
|
}
|
|
@@ -537,18 +810,75 @@ func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
|
|
|
if o_member_jy["a_infotype"] != nil {
|
|
|
a_infotype = o_member_jy["a_infotype"].([]interface{})
|
|
|
}
|
|
|
+ var (
|
|
|
+ areaArr, cityArr, districtArr []string
|
|
|
+ )
|
|
|
o_area := map[string]interface{}{}
|
|
|
+ o_district := map[string]interface{}{}
|
|
|
if o_member_jy["o_area"] != nil {
|
|
|
o_area = o_member_jy["o_area"].(map[string]interface{})
|
|
|
}
|
|
|
+ if o_member_jy["o_district"] != nil {
|
|
|
+ o_district, _ = o_member_jy["o_district"].(map[string]interface{})
|
|
|
+ }
|
|
|
+
|
|
|
+ if area != "" {
|
|
|
+ data := qutil.ObjToMap(area)
|
|
|
+ if data != nil {
|
|
|
+ for s, is := range *data {
|
|
|
+ i, _ := is.(map[string]interface{})
|
|
|
+ //未选城市 订阅城市也为空
|
|
|
+ if vs, ok := o_area[s]; (!ok || vs == nil || len(vs.([]interface{})) == 0) && len(i) == 0 {
|
|
|
+ areaArr = append(areaArr, s)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if len(i) == 0 { //未选城市 订阅城市不为空 默认为订阅的城市 对应的区县
|
|
|
+ for _, i3 := range o_area[s].([]interface{}) {
|
|
|
+ city := qutil.InterfaceToStr(i3)
|
|
|
+ i[city] = o_district[city]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for s2, is2 := range i {
|
|
|
+ i2, _ := is2.([]interface{})
|
|
|
+ //订阅区县为空
|
|
|
+ if len(i2) == 0 {
|
|
|
+ cityArr = append(cityArr, s2)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ for _, s3 := range i2 {
|
|
|
+ districtArr = append(districtArr, fmt.Sprintf("%s_%s", s2, s3))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ areaArr, cityArr, districtArr = getStringArrFromDbResult(o_area, o_district)
|
|
|
+ }
|
|
|
+
|
|
|
return &util.ViewCondition{
|
|
|
Keyword: getKeyWordArr(a_items, "", -1),
|
|
|
Buyerclass: qutil.ObjArrToStringArr(a_buyerclass),
|
|
|
Subtype: qutil.ObjArrToStringArr(a_infotype),
|
|
|
- Area: getStringArrFromDbResult(o_area, 1),
|
|
|
- City: getStringArrFromDbResult(o_area, 2),
|
|
|
+ Area: areaArr,
|
|
|
+ City: cityArr,
|
|
|
SelectType: strconv.Itoa(qutil.IntAll(o_member_jy["i_matchway"])),
|
|
|
+ District: districtArr,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func getStringArrFromDistrict(district map[string]interface{}) (arr []string) {
|
|
|
+ if district == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for k, v := range district {
|
|
|
+ if len(gconv.SliceAny(v)) > 0 {
|
|
|
+ for _, v1 := range gconv.SliceAny(v) {
|
|
|
+ arr = append(arr, fmt.Sprintf("%s_%s", k, v1))
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
// 关键词 附加词 排除词
|
|
@@ -596,23 +926,27 @@ func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.Vi
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
|
|
|
+func getStringArrFromDbResult(area, oDistrict map[string]interface{}) (areaArr, cityArr, districtArr []string) {
|
|
|
if area == nil {
|
|
|
return
|
|
|
}
|
|
|
- var eareArr []string
|
|
|
- var cityArr []string
|
|
|
for k, v := range area {
|
|
|
- if len(v.([]interface{})) > 0 {
|
|
|
- cityArr = append(cityArr, qutil.ObjArrToStringArr(v.([]interface{}))...)
|
|
|
+ if len(v.([]interface{})) > 0 { //是否有城市
|
|
|
+ vs := ArrToStringArr(v.([]interface{}))
|
|
|
+ for _, i := range vs {
|
|
|
+ if is, ok := oDistrict[i]; ok && is != nil && len(is.([]interface{})) > 0 { //是否有区县
|
|
|
+ dt := ArrToStringArr(is.([]interface{}))
|
|
|
+ for _, s := range dt {
|
|
|
+ districtArr = append(districtArr, fmt.Sprintf("%s_%s", i, s))
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cityArr = append(cityArr, i)
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
- eareArr = append(eareArr, k)
|
|
|
+ areaArr = append(areaArr, k)
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
- if i == 1 {
|
|
|
- arr = eareArr
|
|
|
- } else {
|
|
|
- arr = cityArr
|
|
|
- }
|
|
|
return
|
|
|
}
|