Bladeren bron

Merge remote-tracking branch 'origin/hotfix/v1.0.4.2' into dev_v1.0.4_wh

WH01243 1 jaar geleden
bovenliggende
commit
7ec2cf8746

+ 43 - 0
api/common/network.go

@@ -14,6 +14,49 @@ var NetworkCom = &networkCom{}
 
 type networkCom struct{}
 
+//
+func (n *networkCom) GetEntIdByName(names []string) map[string]string {
+	result := map[string]string{}
+	if len(names) == 0 {
+		return result
+	}
+	var query = func(values []string) {
+		wh, args := n.WhArgs(values)
+		rows, err := ClickhouseConn.Query(context.Background(), `select id,company_name from information.ent_info where company_name in (`+wh+`)`, args...)
+		if err != nil {
+			logx.Error(err)
+			return
+		}
+		for rows.Next() {
+			var (
+				id           string
+				company_name string
+			)
+			if err := rows.Scan(&id, &company_name); err != nil {
+				logx.Error(err)
+				continue
+			}
+			result[company_name] = id
+		}
+		rows.Close()
+		if err := rows.Err(); err != nil {
+			logx.Error(err)
+		}
+	}
+	values := []string{}
+	for _, v := range names {
+		values = append(values, v)
+		if len(values) == 200 {
+			query(values)
+			values = []string{}
+		}
+	}
+	if len(values) > 0 {
+		query(values)
+	}
+	return result
+}
+
 //根据标签类型获取标签占位
 func (n *networkCom) GetEntTagSeat(labelType int) []string {
 	rows, err := ClickhouseConn.Query(context.Background(), `select bitmap_num from information.ent_label where label_type=?`, labelType)

+ 100 - 69
api/internal/service/CoopHistoryService.go

@@ -23,8 +23,8 @@ var (
 	sql_2_1_1 = `SELECT project_id, project_name, zbtime FROM information.transaction_info WHERE buyer_id = ? AND agency = ? ORDER BY zbtime DESC`
 	sql_2_2   = `select DISTINCT  b.company_id,b.company_name,a.relate_id,a.relate_name,b.contact_person   from  connection_introduce a  INNER JOIN connection b on  a.position_id= ? and a.connection_id=b.id  and   a.relate_Id = ? and  a.itype =1  and  b.itype=4 and  b.status=1 `
 	sql_2_3   = `select a.a_id as a_id, a.b_id as b_id, a.a_name as a_name, a.b_name as b_name, a.code as code, c.legal_person as c_person, d.legal_person d_person from crm.ent_map_code a left join ent_info c on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.a_id = c.id left join ent_info d on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.b_id = d.id where (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201')`
-	es_query  = `{"query": {"bool": {"must": [{"term": {"buyer_id": "%s"}}],"must_not": {"terms": {"property_form": ["%s"]}}}},"aggs": {"winner_count": {"terms": {"field": "winner","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "project_money"}},"ent_id": {"terms": {"field": "winner_id"}}}}},"size": 1}`
-	es_query1 = `{"query": {"bool": {"must": [{"term": {"buyer_id": "%s"}}]}},"aggs": {"agency_count": {"terms": {"field": "agency","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "project_money"}},"ent_id": {"terms": {"field": "agency_id"}}}}},"size": 1}`
+	es_query  = `{"query": {"bool": {"must": [{"terms": {"buyer_id": ["%s"]}},{"exists": {"field": "winner_id"}}],"must_not": {"terms": {"property_form": ["%s"]}}}},"aggs": {"winner_count": {"terms": {"field": "winner","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "project_money"}},"ent_id": {"terms": {"field": "winner_id"}},"buyer_id": {"terms": {"field": "buyer_id"}}}}},"size": 1}`
+	es_query1 = `{"query": {"bool": {"must": [{"terms": {"buyer_id": ["%s"]}}],"must_not": [{"term": {"agency_id": {"value": ""}}}]}},"aggs": {"agency_count": {"terms": {"field": "agency","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "project_money"}},"ent_id": {"terms": {"field": "agency_id"}},"buyer_id": {"terms": {"field": "buyer_id"}}}}},"size": 1}`
 )
 
 type ResultData struct {
@@ -63,49 +63,14 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 	propertyForm := T.NetworkCom.GetMyProbusfor(req.EntAccountId)
 	// firstparty:甲方 supplier:供应商 adiffb:同甲异业 middleman:中间人 agency:招标代理机构 sup_sub: 上下级
 	// 1、同甲异业数据/ 3、招标代理机构渠道
-	if req.ChannelType == "0" || req.ChannelType == "1" || req.ChannelType == "3" {
-		r1, r2 := GetData(propertyForm, pTmp.BuyerId)
-		if (req.ChannelType == "0" || req.ChannelType == "1") && r1 != nil && len(r1) > 0 {
-			size_1 = int64(len(r1))
-			for _, m := range r1 {
-				near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "adiffb")
-				tmp := ResultData{
-					SourceType:  "adiffb",
-					EntName:     common.ObjToString(m["name"]),
-					ProjectNum:  common.IntAll(m["coop_size"]),
-					TotalAmount: common.Float64All(m["coop_amount"]),
-					RecentTime:  zbtime,
-					NearlyYears: near,
-					BuyerId:     pTmp.BuyerId,
-				}
-				result = append(result, &tmp)
-			}
-		}
-		if req.ChannelType == "0" || req.ChannelType == "3" && r2 != nil && len(r2) > 0 {
-			size_3 = int64(len(r2))
-			for _, m := range r2 {
-				near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "agency")
-				tmp := ResultData{
-					SourceType:  "agency",
-					EntName:     common.ObjToString(m["name"]),
-					ProjectNum:  common.IntAll(m["coop_size"]),
-					TotalAmount: common.Float64All(m["coop_amount"]),
-					RecentTime:  zbtime,
-					NearlyYears: near,
-					BuyerId:     pTmp.BuyerId,
-				}
-				result = append(result, &tmp)
-			}
-		}
-	}
 	if pTmp.BuyerId != "" {
-		if req.ChannelType == "0" || req.ChannelType == "4" {
-			// 中间人可介绍业主
-			var r3 []map[string]interface{}
-			r3 = FindMiddleman([]string{fmt.Sprintf("'%s'", pTmp.BuyerId)}, req.PositionId, r3)
-			if r3 != nil && len(r3) > 0 {
+		// 中间人可介绍业主
+		var r3 []map[string]interface{}
+		r3 = FindMiddleman([]string{fmt.Sprintf("'%s'", pTmp.BuyerId)}, req.PositionId, r3)
+		if r3 != nil && len(r3) > 0 {
+			size_4 = int64(len(r3))
+			if req.ChannelType == "0" || req.ChannelType == "4" {
 				for _, m := range r3 {
-					size_4 = int64(len(r3))
 					tmp := ResultData{
 						SourceType:   "middleman",
 						EntName:      common.ObjToString(m["b_name"]),
@@ -118,12 +83,12 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 				}
 			}
 		}
-		if req.ChannelType == "0" || req.ChannelType == "2" {
-			// 关联单位
-			var r4 []map[string]interface{}
-			r4 = Findfirstparty([]string{fmt.Sprintf("'%s'", pTmp.BuyerId)}, r4)
-			if r4 != nil && len(r4) > 0 {
-				size_2 = int64(len(r4))
+		// 关联单位
+		var r4 []map[string]interface{}
+		r4 = Findfirstparty([]string{fmt.Sprintf("'%s'", pTmp.BuyerId)}, r4)
+		if r4 != nil && len(r4) > 0 {
+			size_2 = int64(len(r4))
+			if req.ChannelType == "0" || req.ChannelType == "2" {
 				for _, m := range r4 {
 					tmp := ResultData{
 						SourceType:   "sup_sub",
@@ -137,12 +102,51 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 				}
 			}
 		}
-
+		rs1, rs2 := GetData(propertyForm, pTmp.BuyerId)
+		r1 := rs1[pTmp.BuyerId]
+		r2 := rs2[pTmp.BuyerId]
+		if r1 != nil && len(r1) > 0 {
+			size_1 = int64(len(r1))
+			if req.ChannelType == "0" || req.ChannelType == "1" {
+				for _, m := range r1 {
+					near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "adiffb")
+					tmp := ResultData{
+						SourceType:  "adiffb",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+						RecentTime:  zbtime,
+						NearlyYears: near,
+						BuyerId:     pTmp.BuyerId,
+					}
+					result = append(result, &tmp)
+				}
+			}
+		}
+		if r2 != nil && len(r2) > 0 {
+			size_3 = int64(len(r2))
+			if req.ChannelType == "0" || req.ChannelType == "3" {
+				for _, m := range r2 {
+					near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "agency")
+					tmp := ResultData{
+						SourceType:  "agency",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+						RecentTime:  zbtime,
+						NearlyYears: near,
+						BuyerId:     pTmp.BuyerId,
+					}
+					result = append(result, &tmp)
+				}
+			}
+		}
 	}
 	return
 }
 
-func GetData(propertyForm []string, bid string) (result1, result2 []map[string]interface{}) {
+func GetData(propertyForm []string, bid string) (result1, result2 map[string][]map[string]interface{}) {
+	result1, result2 = map[string][]map[string]interface{}{}, map[string][]map[string]interface{}{}
 	type AggStruct struct {
 		Buckets []struct {
 			Key        string `json:"key,omitempty"`
@@ -156,14 +160,21 @@ func GetData(propertyForm []string, bid string) (result1, result2 []map[string]i
 					Doc_count int64  `json:"doc_count,omitempty"`
 				} `json:"buckets"`
 			} `json:"ent_id"`
+			BuyerId struct {
+				Buckets []struct {
+					Key       string `json:"key,omitempty"`
+					Doc_count int64  `json:"doc_count,omitempty"`
+				} `json:"buckets"`
+			} `json:"buyer_id"`
 		} `json:"buckets"`
 	}
 	m1 := make(map[string]interface{}) //采购单位-中标单位
 	m2 := make(map[string]interface{}) //采购单位-代理机构
+	noIds := []string{}
 	if len(propertyForm) > 0 {
 		//同甲异态 中标企业
-		aggs, _, _ := elastic.GetAggs(INDEX_1, INDEX_1, fmt.Sprintf(es_query, bid, strings.Join(propertyForm, "\",\"")))
-		logx.Info("es聚合查询结果:", fmt.Sprintf(es_query, bid, strings.Join(propertyForm, "\",\"")))
+		aggs, _, _ := elastic.GetAggs(INDEX_1, INDEX_1, fmt.Sprintf(es_query, strings.ReplaceAll(bid, ",", `","`), strings.Join(propertyForm, "\",\"")))
+		logx.Info("es聚合查询结果:", fmt.Sprintf(es_query, strings.ReplaceAll(bid, ",", `","`), strings.Join(propertyForm, "\",\"")))
 		var m1Buckets = AggStruct{}
 		if aggs != nil && aggs["winner_count"] != nil {
 			bs, err := aggs["winner_count"].MarshalJSON()
@@ -177,26 +188,23 @@ func GetData(propertyForm []string, bid string) (result1, result2 []map[string]i
 					logx.Info(err)
 					if len(m1Buckets.Buckets) > 0 {
 						for _, v := range m1Buckets.Buckets {
-							if v.Key != "" {
-								m1[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count, "nameId": v.EntId.Buckets[0].Key}
+							if v.Key != "" && len(v.EntId.Buckets) > 0 && len(v.BuyerId.Buckets) > 0 {
+								mv := map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count, "buyerId": v.BuyerId.Buckets[0].Key}
+								if len(v.EntId.Buckets) == 1 && v.EntId.Buckets[0].Key != "" {
+									mv["nameId"] = v.EntId.Buckets[0].Key
+								} else {
+									noIds = append(noIds, v.Key)
+								}
+								m1[v.Key] = mv
 							}
 						}
 					}
 				}
 			}
 		}
-		for k, v := range m1 {
-			v1 := v.(map[string]interface{})
-			tmp := make(map[string]interface{})
-			tmp["name"] = k
-			tmp["nameId"] = v1["nameId"]
-			tmp["coop_size"] = v1["count"]
-			tmp["coop_amount"] = v1["amount"]
-			result1 = append(result1, tmp)
-		}
 	}
 	//代理机构
-	aggs1, _, _ := elastic.GetAggs(INDEX_1, INDEX_1, fmt.Sprintf(es_query1, bid))
+	aggs1, _, _ := elastic.GetAggs(INDEX_1, INDEX_1, fmt.Sprintf(es_query1, strings.ReplaceAll(bid, ",", `","`)))
 	var m2Buckets = AggStruct{}
 	if aggs1 != nil && aggs1["agency_count"] != nil {
 		bs, err := aggs1["agency_count"].MarshalJSON()
@@ -210,22 +218,45 @@ func GetData(propertyForm []string, bid string) (result1, result2 []map[string]i
 				logx.Info(err)
 				if len(m2Buckets.Buckets) > 0 {
 					for _, v := range m2Buckets.Buckets {
-						if v.Key != "" {
-							m2[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count, "nameId": v.EntId.Buckets[0].Key}
+						if v.Key != "" && len(v.EntId.Buckets) > 0 && len(v.BuyerId.Buckets) > 0 {
+							if v.EntId.Buckets[0].Key == "" {
+								noIds = append(noIds, v.Key)
+							}
+							m2[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count, "nameId": v.EntId.Buckets[0].Key, "buyerId": v.BuyerId.Buckets[0].Key}
 						}
 					}
 				}
 			}
 		}
 	}
+	idName := T.NetworkCom.GetEntIdByName(noIds)
+	for k, v := range m1 {
+		v1 := v.(map[string]interface{})
+		tmp := make(map[string]interface{})
+		tmp["name"] = k
+		nameId, _ := v1["nameId"].(string)
+		if nameId == "" {
+			nameId = idName[k]
+		}
+		tmp["nameId"] = nameId
+		tmp["coop_size"] = v1["count"]
+		tmp["coop_amount"] = v1["amount"]
+		buyerId, _ := v1["buyerId"].(string)
+		result1[buyerId] = append(result1[buyerId], tmp)
+	}
 	for k, v := range m2 {
 		v1 := v.(map[string]interface{})
 		tmp := make(map[string]interface{})
 		tmp["name"] = k
-		tmp["nameId"] = v1["nameId"]
+		nameId, _ := v1["nameId"].(string)
+		if nameId == "" {
+			nameId = idName[k]
+		}
+		tmp["nameId"] = nameId
 		tmp["coop_size"] = v1["count"]
 		tmp["coop_amount"] = v1["amount"]
-		result2 = append(result2, tmp)
+		buyerId, _ := v1["buyerId"].(string)
+		result2[buyerId] = append(result2[buyerId], tmp)
 	}
 	return
 }

+ 10 - 1
api/internal/service/network.go

@@ -765,6 +765,9 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 //
 func (n *network) FirstpartyNetwork(name string, values []string) map[string][]*firstpartyNetwork {
 	result := map[string][]*firstpartyNetwork{}
+	if len(values) == 0 {
+		return result
+	}
 	wh, args := NetworkCom.WhArgs(values)
 	q := `select DISTINCT a.a_id,a.b_id as company_id,a.b_name as company_name,b.name from information.ent_map_code a 
 				inner join information.ent_code b on (a.a_id in (` + wh + `) and b.pcode in ('0100','0200') and a.code=b.code)`
@@ -1047,10 +1050,13 @@ func (n *network) TypeIntConvert(itype int64) string {
 
 //
 func (n *network) GetQyxyId(ids []string) map[string]string {
+	m := map[string]string{}
+	if len(ids) == 0 {
+		return m
+	}
 	wh, args := NetworkCom.WhArgs(ids)
 	q := `select id,company_id from information.ent_info where id in (` + wh + `)`
 	rows, err := ClickhouseConn.Query(context.Background(), q, args...)
-	m := map[string]string{}
 	if err != nil {
 		logx.Error(err)
 	} else {
@@ -1076,6 +1082,9 @@ func (n *network) GetQyxyId(ids []string) map[string]string {
 //
 func (n *network) BuyerProjectInfo(ids []string, probusfors []string) map[string]*projectInfo {
 	vm := map[string]*projectInfo{}
+	if len(ids) == 0 {
+		return vm
+	}
 	wh, args := NetworkCom.WhArgs(ids)
 	q := `select buyer_id,count(DISTINCT project_id) AS project_count,sum(project_money) AS project_amount,groupUniqArray(project_id) from information.transaction_info where buyer_id in (` + wh + `)`
 	if len(probusfors) > 0 {

+ 5 - 5
api/internal/service/network_test.go

@@ -159,14 +159,14 @@ func TestAddCustomService(t *testing.T) {
 func TestCandidateChannel(t *testing.T) {
 	InitConf()
 	ownerService := &OwnerService{
-		//PartyA: "",
-		//Supplier:     req.Supplier,
-		Intermediary: "30154",
+		PartyA: "15e4d804ce194a029e9fba645fda0cf0,90e9db9308024d3782a1a03e11ccd684,ed856df4ac4f4eb78a8d1ae9a5a98006,009c313ef8e740e59d57432aea777102,9df7aa60510d45a6875205c2069d550b,2c5ecd5d2a0d4c62884c30e472c95ffe",
+		//Supplier: "0d732efa7adc40529100609e6096baad",
+		//Intermediary: "30154",
 		//Heterotophy:  req.Heterotophy,
 		//Agency:       req.Agency,
-		Type:         "middleman",
+		Type:         "adiffb",
 		EntAccountId: 64,
-		PositionId:   935,
+		PositionId:   1205591999,
 	}
 	data, a1, a2, a3, a4 := ownerService.CandidateChannel()
 	for _, v := range data {

+ 12 - 3
api/internal/service/owner.go

@@ -140,8 +140,8 @@ func (t *OwnerService) OwnerlList() map[string]interface{} {
 	startIndex := (t.PageIndex - 1) * t.PageSize
 	endIndex := t.PageIndex * t.PageSize
 	sort.Slice(returnData, func(i, j int) bool {
-		aa := fmt.Sprintf("%s%s", returnData[i].Zbtime, returnData[i].BuyerId)
-		bb := fmt.Sprintf("%s%s", returnData[j].Zbtime, returnData[j].BuyerId)
+		aa := fmt.Sprintf("%d%s", returnData[i].Zbtime, returnData[i].BuyerId)
+		bb := fmt.Sprintf("%d%s", returnData[j].Zbtime, returnData[j].BuyerId)
 		return aa > bb
 	})
 	if startIndex < gconv.Int64(len(returnData)) {
@@ -1089,13 +1089,20 @@ func (t *OwnerService) CandidateChannel() ([]*ResultData, int, int, int, int) {
 	a1, a2, a3, a4 := 0, 0, 0, 0
 	if len(*dataMap) > 0 && dataMap != nil {
 		propertyForm := NetworkCom.GetMyProbusfor(t.EntAccountId)
+		buyerIds := []string{}
 		for buyerId := range *dataMap {
-			r1, r2 := GetData(propertyForm, buyerId)
+			buyerIds = append(buyerIds, buyerId)
+		}
+		rs1, rs2 := GetData(propertyForm, strings.Join(buyerIds, ","))
+		for buyerId := range *dataMap {
+			r1 := rs1[buyerId]
+			r2 := rs2[buyerId]
 			if r1 != nil && len(r1) > 0 {
 				for _, m := range r1 {
 					near, zbtime := LastTimeCoop(buyerId, common.ObjToString(m["name"]), "adiffb")
 					tmp := ResultData{
 						SourceType:  "adiffb",
+						BuyerId:     common.ObjToString(m["nameId"]),
 						EntName:     common.ObjToString(m["name"]),
 						ProjectNum:  common.IntAll(m["coop_size"]),
 						TotalAmount: common.Float64All(m["coop_amount"]),
@@ -1177,6 +1184,8 @@ func (t *OwnerService) CandidateChannel() ([]*ResultData, int, int, int, int) {
 			fmt.Println(value.BuyerId, t.Type, value.SourceType)
 			if t.Type != "" && t.Type != value.SourceType {
 				continue
+			} else if value.BuyerId == "" {
+				continue
 			}
 			result = append(result, value)
 		}

+ 83 - 27
api/internal/service/plistService.go

@@ -8,6 +8,7 @@ import (
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
 	"context"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"github.com/shopspring/decimal"
 	"strconv"
 	"strings"
@@ -59,8 +60,12 @@ type ProjectEntry struct {
 }
 
 func GetProjectList(req *types.ProjectListReq) (resultList []*ProjectEntry, hasNextPage bool, total int) {
-	buyerM := BuyerList(req.PartyA, req.Supplier, req.Heterotophy, req.Intermediary, req.Agency, req.PositionId)
-	if len(*buyerM) <= 0 {
+	buyerM := BuyerList(req.PartyA, req.Supplier, req.Heterotophy, "", req.Agency, req.PositionId)
+	var plist []string
+	if req.Intermediary != "" {
+		plist = getIyProList(req.Intermediary, req.PositionId)
+	}
+	if len(*buyerM) <= 0 && len(plist) <= 0 {
 		return []*ProjectEntry{}, false, 0
 	}
 	mmp := MonitorStatus(req.UserId) // 项目监控
@@ -73,7 +78,7 @@ func GetProjectList(req *types.ProjectListReq) (resultList []*ProjectEntry, hasN
 	if req.SaleStatus == "0" {
 		isSqlPage = true // 是否sql分页
 	}
-	countSql, findSql := getQuerySql(req, isSqlPage, buyerArr)
+	countSql, findSql := getQuerySql(req, isSqlPage, buyerArr, plist)
 	rows, err := T.ClickhouseConn.Query(context.TODO(), findSql)
 	defer rows.Close()
 	if err != nil {
@@ -108,7 +113,7 @@ func GetProjectList(req *types.ProjectListReq) (resultList []*ProjectEntry, hasN
 			hasNextPage = false
 		}
 	}
-	moreInfo(req, resultList) //  补充信息
+	moreInfo(req, plist, resultList) //  补充信息
 
 	return
 }
@@ -127,15 +132,45 @@ func preSalesStatus(posid int64) (m1 map[string]interface{}) {
 	return m1
 }
 
-func getQuerySql(req *types.ProjectListReq, isPage bool, buyerArr []string) (countSql, findSql string) {
+// 中间人 直接查询可介绍项目
+func getIyProList(iy string, positionId int64) (array []string) {
+	wh, args := common.WhArgs(strings.Split(iy, ","))
+	args = append(args, positionId)
+	intermediaryArr := T.CrmMysql.SelectBySql(`select b.relate_id as relate_id,b.relate_name as relate_name from crm.connection a inner join crm.connection_introduce b on ( a.id in (`+wh+`) and  a.position_id=?  and a.id=b.connection_id and b.itype=2)`, args...)
+	for _, m := range *intermediaryArr {
+		pid := gconv.String(m["relate_id"])
+		array = append(array, pid)
+	}
+	return
+}
+
+func getQuerySql(req *types.ProjectListReq, isPage bool, buyerArr, plist []string) (countSql, findSql string) {
 	querys := []string{}
 	// 左侧选中的业主id
-	if len(buyerArr) > 0 {
-		var arr []string
-		for _, s := range buyerArr {
-			arr = append(arr, fmt.Sprintf("'%s'", s))
+	if len(buyerArr) > 0 || len(plist) > 0 {
+		if len(buyerArr) > 0 && len(plist) > 0 {
+			var arr []string
+			for _, s := range buyerArr {
+				arr = append(arr, fmt.Sprintf("'%s'", s))
+			}
+			var arr1 []string
+			for _, s := range plist {
+				arr1 = append(arr1, fmt.Sprintf("'%s'", s))
+			}
+			querys = append(querys, fmt.Sprintf(" (a.buyer_id in (%s) or a.project_id in (%s)) ", strings.Join(arr, ","), strings.Join(arr1, ",")))
+		} else if len(buyerArr) > 0 {
+			var arr []string
+			for _, s := range buyerArr {
+				arr = append(arr, fmt.Sprintf("'%s'", s))
+			}
+			querys = append(querys, fmt.Sprintf(" a.buyer_id in (%s) ", strings.Join(arr, ",")))
+		} else if len(plist) > 0 {
+			var arr1 []string
+			for _, s := range plist {
+				arr1 = append(arr1, fmt.Sprintf("'%s'", s))
+			}
+			querys = append(querys, fmt.Sprintf(" a.project_id in (%s) ", strings.Join(arr1, ",")))
 		}
-		querys = append(querys, fmt.Sprintf(" a.buyer_id in (%s) ", strings.Join(arr, ",")))
 	}
 	//	商机类型
 	if req.BusinessType != "" && req.BusinessType != "全部" {
@@ -188,17 +223,26 @@ func getQuerySql(req *types.ProjectListReq, isPage bool, buyerArr []string) (cou
 		}
 		querys = append(querys, arr...)
 	}
-	// 项目金额
-	if req.Amount != "" && strings.Contains(req.Amount, "-") {
-		minPriceStr, maxPriceStr := strings.Split(req.Amount, "-")[0], strings.Split(req.Amount, "-")[1]
-		minPrice := common.Int64All(common.Float64All(minPriceStr) * 10000) //换成元
-		maxPrice := common.Int64All(common.Float64All(maxPriceStr) * 10000) //换成元
-		if minPriceStr != "" && maxPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("((a.project_money>=%d and a.project_money<=%d))", minPrice, maxPrice))
-		} else if minPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("(a.project_money>=%d)", minPrice))
-		} else if maxPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("(a.project_money<=%d)", maxPrice))
+	// 项目金额 0: 全部,1: 50万以下,2: 50-100万, 3: 100-200万, 4: 200-500万, 5:500万以上
+	if req.Amount != "" {
+		if !strings.Contains(req.Amount, "0") {
+			var tempArr []string
+			for _, s := range strings.Split(req.Amount, ",") {
+				if s == "1" {
+					tempArr = append(tempArr, fmt.Sprintf("(a.project_money<=%d)", 500000))
+				} else if s == "2" {
+					tempArr = append(tempArr, fmt.Sprintf("((a.project_money>=%d and a.project_money<=%d))", 500000, 1000000))
+				} else if s == "3" {
+					tempArr = append(tempArr, fmt.Sprintf("((a.project_money>=%d and a.project_money<=%d))", 1000000, 2000000))
+				} else if s == "4" {
+					tempArr = append(tempArr, fmt.Sprintf("((a.project_money>=%d and a.project_money<=%d))", 2000000, 5000000))
+				} else if s == "5" {
+					tempArr = append(tempArr, fmt.Sprintf("((a.project_money>=%d))", 5000000))
+				}
+			}
+			if len(tempArr) > 0 {
+				querys = append(querys, fmt.Sprintf("(%s)", strings.Join(tempArr, "or")))
+			}
 		}
 	}
 	//物业业态
@@ -276,7 +320,7 @@ func filterData(req *types.ProjectListReq, resultList []*ProjectEntry, preSales,
 // @Author jianghan
 // @Description 补充人脉 等信息
 // @Date 2024/4/17
-func moreInfo(req *types.ProjectListReq, list []*ProjectEntry) (result []*ProjectEntry) {
+func moreInfo(req *types.ProjectListReq, plist []string, list []*ProjectEntry) (result []*ProjectEntry) {
 	var buyerIds []string
 	for _, m := range list {
 		if m.BuyerId != "" {
@@ -308,17 +352,29 @@ func moreInfo(req *types.ProjectListReq, list []*ProjectEntry) (result []*Projec
 		}
 	}
 	for _, m := range list {
+		// 中间人的项目 默认 我的人脉
+		if len(plist) > 0 {
+			for _, pid := range plist {
+				if m.ProjectId == pid {
+					m.MyConn = true
+					m.ConnType = 1
+					break
+				}
+			}
+		}
 		// 补充跳转链接
 		if m.BusinessType == "采购意向" || m.BusinessType == "招标项目" {
 			m.Href = fmt.Sprintf("/article/content/%s.html", encrypt.CommonEncodeArticle("content", m.ProjectId))
 		}
 		m.ProjectId = util.EncodeId(m.ProjectId)
 		// 人脉、人脉所在单位项目 conn_type: 1 人脉可转介绍项目; conn_type: 2 人脉所在单位项目
-		if connMap[m.BuyerId] == 1 {
-			m.MyConn = true // 我的人脉
-			m.ConnType = 1
-		} else {
-			m.MyConn = false
+		if !m.MyConn {
+			if connMap[m.BuyerId] == 1 {
+				m.MyConn = true // 我的人脉
+				m.ConnType = 1
+			} else {
+				m.MyConn = false
+			}
 		}
 		if m.ConnType == 0 {
 			if connMap[m.BuyerId] != 0 {