wangchuanjin 1 rok temu
rodzic
commit
ca9d2b596a

+ 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)

+ 52 - 22
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"}},{"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"}}}}},"size": 1}`
-	es_query1 = `{"query": {"bool": {"must": [{"term": {"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"}}}}},"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 {
@@ -102,7 +102,9 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 				}
 			}
 		}
-		r1, r2 := GetData(propertyForm, pTmp.BuyerId)
+		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" {
@@ -143,7 +145,8 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 	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"`
@@ -157,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()
@@ -178,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()
@@ -211,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 {

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

@@ -139,8 +139,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)) {
@@ -1087,8 +1087,14 @@ 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")