123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- package util
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "strings"
- . "subrecommend/config"
- . "app.yhyue.com/moapp/jybase/common"
- "app.yhyue.com/moapp/jybase/logger"
- "app.yhyue.com/moapp/jybase/redis"
- )
- //tp 0:企业-商机管理 2:企业-超级订阅/大会员 3:企业-免费 -1:个人-免费 -2:个人-超级订阅 -3:个人-大会员
- func ChangeUserObj(userObj map[string]interface{}, tp int) bool {
- subSetKey := ""
- if tp > 0 {
- subSetKey = "o_entniche"
- } else if tp == -1 {
- subSetKey = "o_jy"
- } else if tp == -2 {
- subSetKey = "o_vipjy"
- } else if tp == -3 {
- subSetKey = "o_member_jy"
- }
- obj, _ := userObj[subSetKey].(map[string]interface{})
- if tp == 3 || tp == -1 {
- a_key, _ := obj["a_key"].([]interface{})
- new_a_key := proccessKey(a_key)
- if len(new_a_key) == 0 {
- return false
- }
- obj["a_key"] = new_a_key
- } else {
- new_a_items := []interface{}{}
- a_items, _ := obj["a_items"].([]interface{})
- for _, item := range a_items {
- item_map, _ := item.(map[string]interface{})
- a_key, _ := item_map["a_key"].([]interface{})
- if new_a_key := proccessKey(a_key); len(new_a_key) > 0 {
- item_map["a_key"] = new_a_key
- new_a_items = append(new_a_items, item_map)
- }
- }
- if len(new_a_items) == 0 {
- return false
- }
- obj["a_items"] = new_a_items
- }
- userObj[subSetKey] = obj
- return true
- }
- func proccessKey(a_key []interface{}) []map[string]interface{} {
- new_a_key := []map[string]interface{}{}
- for _, v := range a_key {
- vm, _ := v.(map[string]interface{})
- key, _ := vm["key"].([]interface{})
- appendkey, _ := vm["appendkey"].([]interface{})
- key = append(key, appendkey...)
- args := []string{}
- for _, vv := range key {
- vvs, _ := vv.(string)
- vvs = strings.TrimSpace(vvs)
- if vvs == "" {
- continue
- }
- for _, vvv := range strings.Split(vvs, "+") {
- vvv = strings.TrimSpace(vvv)
- if vvv == "" {
- continue
- }
- args = append(args, vvv)
- }
- }
- if len(args) > 0 {
- if Int64All(vm["matchway"]) == 0 {
- if likeWord := GetLikeWord(args); len(likeWord) > 0 {
- delete(vm, "appendkey")
- vm["key"] = likeWord
- new_a_key = append(new_a_key, vm)
- }
- } else {
- newLikeWord := []string{}
- for _, arg := range args {
- if likeWord := GetLikeWord([]string{arg}); len(likeWord) > 0 {
- newLikeWord = append(newLikeWord, likeWord...)
- }
- }
- if len(newLikeWord) > 0 {
- delete(vm, "appendkey")
- vm["key"] = newLikeWord
- new_a_key = append(new_a_key, vm)
- }
- }
- }
- }
- return new_a_key
- }
- //获取相似词
- func GetLikeWord(keys []string) []string {
- redisKey := fmt.Sprintf("subLikeKey_%s", strings.Join(keys, "+"))
- b, err := redis.GetNewBytes("pushcache_2_d", redisKey)
- if err != nil {
- logger.Error(err)
- } else if b != nil {
- var array []string
- if err = json.Unmarshal(*b, &array); err != nil {
- logger.Error(err)
- } else {
- return array
- }
- }
- // 构建请求的 JSON 数据
- jsonData, err := json.Marshal(map[string]interface{}{
- "keywords": keys,
- "topN": len(keys),
- })
- if err != nil {
- logger.Error(err)
- return nil
- }
- // 发起 POST 请求
- resp, err := http.Post(Config.RecomRul, "application/json", bytes.NewBuffer(jsonData))
- if err != nil {
- logger.Error(err)
- return nil
- }
- defer resp.Body.Close()
- // 读取响应内容
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- logger.Error(err)
- return nil
- }
- // 打印响应内容
- //{"status": 200, "result": [["智能交通", 0.939007580280304], ["智能城市", 0.8879148364067078], ["车路协同", 0.859275758266449], ["智慧园区", 0.8444814085960388], ["智能驾驶", 0.832817018032074], ["自动驾驶", 0.832410454750061], ["智慧出行", 0.8308652639389038], ["智慧城市建设", 0.8303624391555786], ["数字城市", 0.8295241594314575], ["智慧物流", 0.8250287771224976], ["智能网联汽车", 0.8246825933456421], ["智慧城市管理", 0.822432279586792], ["智慧安防", 0.8221968412399292], ["智慧医疗", 0.818789541721344], ["城市智能", 0.8181037306785583], ["城市智慧交通", 0.8168191313743591], ["城市安防", 0.8149634003639221], ["物联网", 0.8149363994598389], ["无人驾驶技术", 0.8141185641288757], ["智能汽车", 0.8126631379127502], ["智慧道路", 0.8092268705368042], ["智能城市建设", 0.80910724401474], ["汽车自动驾驶", 0.8075457811355591], ["智慧交通系统", 0.8069972991943359], ["城市大脑", 0.8067115545272827], ["智能网联", 0.8041828870773315], ["智慧停车", 0.8037421703338623], ["智能物流", 0.8029360771179199], ["数字交通", 0.8018928170204163], ["无人驾驶汽车", 0.8017951846122742]]}
- var r struct {
- Status int
- Result []interface{}
- }
- if err := json.Unmarshal(body, &r); err != nil {
- logger.Error(err)
- return nil
- }
- array := []string{}
- for _, v := range r.Result {
- if vv, _ := v.([]interface{}); len(vv) >= 2 && Float64All(vv[1]) > Config.Similarity {
- if vvv, _ := vv[0].(string); vvv != "" {
- array = append(array, vvv)
- }
- }
- }
- redis.PutCKV("pushcache_2_d", redisKey, array)
- return array
- }
|