wangchuanjin 1 سال پیش
والد
کامیت
f3de6d85be
3فایلهای تغییر یافته به همراه70 افزوده شده و 26 حذف شده
  1. 14 2
      api/common/network.go
  2. 50 22
      api/internal/service/network.go
  3. 6 2
      api/internal/service/network_test.go

+ 14 - 2
api/common/network.go

@@ -52,7 +52,7 @@ func (n *networkCom) GetMyProbusfor(entAccoutId int64) []string {
 	return strings.Split(probusfor, ",")
 }
 
-//
+//获取总数封装
 func (n *networkCom) Count(query string, args ...interface{}) int64 {
 	row := ClickhouseConn.QueryRow(context.Background(), query, args...)
 	var count uint64
@@ -63,7 +63,19 @@ func (n *networkCom) Count(query string, args ...interface{}) int64 {
 	return int64(count)
 }
 
-//
+//获取我监控的企业
+func (n *networkCom) EntMonitor(positionId int64) map[string]bool {
+	m := map[string]bool{}
+	list := CrmMysql.SelectBySql(`select * from base_service.follow_ent_monitor where s_userid=?`, positionId)
+	for _, v := range *list {
+		if entName := ObjToString(v["s_entname"]); entName != "" {
+			m[entName] = true
+		}
+	}
+	return m
+}
+
+//获取问号占位符数量及对应的参数值
 func (n *networkCom) WhArgs(args []string) (string, []interface{}) {
 	newArgs := make([]interface{}, len(args))
 	wh := make([]string, len(args))

+ 50 - 22
api/internal/service/network.go

@@ -11,6 +11,7 @@ import (
 
 	. "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	. "app.yhyue.com/moapp/jybase/es"
 	. "app.yhyue.com/moapp/jybase/sort"
 	. "bp.jydev.jianyu360.cn/CRM/application/api/common"
@@ -39,6 +40,7 @@ type projectInfo struct {
 	ProjectCount  int64
 	ProjectAmount float64
 	MonitorCount  int64
+	ExportId      []string
 }
 type firstpartyNetwork struct {
 	CompanyId   string
@@ -324,7 +326,7 @@ func (n *network) AllProject(in *types.AllprojectReq) (reply *types.Reply) {
 
 //人脉库-列表
 func (n *network) List(in *types.NetWorkListReq) *types.Reply {
-	q := `select a.company_id,a.company_name,a.itype,a.contact_person as person,a.contact_phone as phone,count(if(b.itype=1,1,null)) as buyer_count,count(if(b.itype=2,1,null)) as project_count,GROUP_CONCAT(IF(b.itype=1,relate_id,NULL)) AS relate_buyer_id,GROUP_CONCAT(IF(b.itype=2,relate_id,NULL)) AS relate_project_id,a.create_time from crm.connection a 
+	q := `select a.company_id,a.company_name,a.itype,a.contact_person as person,a.contact_phone as phone,count(DISTINCT if(b.itype=1,b.relate_id,null)) as buyer_count,count(DISTINCT if(b.itype=2,b.relate_id,null)) as project_count,GROUP_CONCAT(IF(b.itype=1,b.relate_id,NULL)) AS relate_buyer_id,GROUP_CONCAT(IF(b.itype=2,b.relate_id,NULL)) AS relate_project_id,a.create_time from crm.connection a 
 		left join crm.connection_introduce b on (a.id=b.connection_id) where a.position_id=?`
 	args := []interface{}{in.PositionId}
 	if in.Type != "" {
@@ -374,8 +376,9 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 		}
 	}
 	if isGoNextSetp {
-		entMonitor := n.EntMonitor(in.PositionId)
-		firstparty_project := n.Introduce_Firstparty(n.FirstpartyNetwork("", firstparty_array), entMonitor, in.Project_matchme, probusfors)
+		entMonitor := NetworkCom.EntMonitor(in.PositionId)
+		fpn := n.FirstpartyNetwork("", firstparty_array)
+		firstparty_project := n.Introduce_Firstparty(fpn, entMonitor, in.Project_matchme, probusfors)
 		supplier_project := n.Introduce_Supplier(supplier_array, entMonitor, in.Project_matchme, probusfors)
 		adiffb_project := n.Introduce_Supplier(adiffb_array, entMonitor, in.Project_matchme, probusfors)
 		agency_project := n.Introduce_Agency(agency_array, entMonitor, in.Project_matchme, probusfors)
@@ -384,36 +387,54 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 			itype := ""
 			buyer_count, project_count, expect_amount, monitor_count := int64(0), int64(0), float64(0), int64(0)
 			company_id := ObjToString(v["company_id"])
+			export_id := []string{}
+			jump_type, jump_id := "", ""
 			switch Int64All(v["itype"]) {
 			case 1:
 				itype = "甲方"
+				jump_type = "firstparty"
+				for _, vv := range fpn[company_id] {
+					if jump_id != "" {
+						jump_id += ","
+					}
+					jump_id += vv.CompanyId
+				}
 				firstparty_count++
 				if firstparty_project[company_id] != nil {
 					buyer_count = firstparty_project[company_id].BuyerCount
 					project_count = firstparty_project[company_id].ProjectCount
 					expect_amount = firstparty_project[company_id].ProjectAmount
 					monitor_count = firstparty_project[company_id].MonitorCount
+					export_id = firstparty_project[company_id].ExportId
 				}
 			case 2:
 				itype = "供应商"
+				jump_type = "supplier"
+				jump_id = company_id
 				supplier_count++
 				if supplier_project[company_id] != nil {
 					buyer_count = supplier_project[company_id].BuyerCount
 					project_count = supplier_project[company_id].ProjectCount
 					expect_amount = supplier_project[company_id].ProjectAmount
 					monitor_count = supplier_project[company_id].MonitorCount
+					export_id = supplier_project[company_id].ExportId
 				}
 			case 3:
 				itype = "同甲异业渠道"
+				jump_type = "adiffb"
+				jump_id = company_id
 				adiffb_count++
 				if adiffb_project[company_id] != nil {
 					buyer_count = adiffb_project[company_id].BuyerCount
 					project_count = adiffb_project[company_id].ProjectCount
 					expect_amount = adiffb_project[company_id].ProjectAmount
 					monitor_count = adiffb_project[company_id].MonitorCount
+					export_id = adiffb_project[company_id].ExportId
 				}
 			case 4:
 				itype = "中间人"
+				jump_type = "middleman"
+				jump_id = company_id
 				middleman_count++
 				buyer_count = Int64All(v["buyer_count"])
 				project_count = Int64All(v["project_count"])
@@ -428,7 +449,8 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 					}
 				}
 				if relate_project_id := ObjToString(v["relate_project_id"]); relate_project_id != "" {
-					for _, v := range strings.Split(relate_project_id, ",") {
+					export_id = strings.Split(relate_project_id, ",")
+					for _, v := range export_id {
 						if middleman_project[v] != nil {
 							expect_amount += middleman_project[v].ProjectAmount
 						}
@@ -439,12 +461,15 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 				}
 			case 5:
 				itype = "招标代理机构"
+				jump_type = "agency"
+				jump_id = company_id
 				agency_count++
 				if agency_project[company_id] != nil {
 					buyer_count = agency_project[company_id].BuyerCount
 					project_count = agency_project[company_id].ProjectCount
 					expect_amount = agency_project[company_id].ProjectAmount
 					monitor_count = agency_project[company_id].MonitorCount
+					export_id = agency_project[company_id].ExportId
 				}
 			}
 			if buyer_count < in.Buyercount_start {
@@ -462,10 +487,17 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 			} else if in.Project_matchme == 1 && project_count == 0 {
 				continue
 			}
+			exportId := ""
+			if len(export_id) > 0 {
+				exportId = encrypt.SE.EncodeStringByCheck(strings.Join(export_id, ","))
+			}
+			company_name, _ := v["company_name"].(string)
 			list = append(list, &map[string]interface{}{
 				"company_id":    company_id,
-				"company_name":  v["company_name"],
+				"company_name":  company_name,
 				"type":          itype,
+				"jump_type":     jump_type,
+				"jump_id":       jump_id,
 				"person":        v["person"],
 				"phone":         v["phone"],
 				"buyer_count":   buyer_count,
@@ -473,6 +505,8 @@ func (n *network) List(in *types.NetWorkListReq) *types.Reply {
 				"expect_amount": RetainDecimal(expect_amount/10000, 2),
 				"project_count": project_count,
 				"create_time":   v["create_time"],
+				"export_id":     exportId,
+				"url":           "/swordfish/page_big_pc/unit_portrayal/" + company_name,
 			})
 		}
 	}
@@ -570,7 +604,7 @@ func (n *network) Introduce_Firstparty(fpn map[string][]*firstpartyNetwork, entM
 		}
 	}
 	wh, args := NetworkCom.WhArgs(values)
-	q := `select buyer_id,count(project_id) AS project_count,sum(project_money) AS project_amount from information.transaction_info where buyer_id in (` + wh + `)`
+	q := `select buyer_id,count(project_id) AS project_count,sum(project_money) AS project_amount,groupUniqArray(project_id) from information.transaction_info where buyer_id in (` + wh + `)`
 	if matchme == 1 {
 		newWh, newArgs := NetworkCom.WhArgs(probusfors)
 		q += ` hasAny(property_form,[` + newWh + `])`
@@ -587,8 +621,9 @@ func (n *network) Introduce_Firstparty(fpn map[string][]*firstpartyNetwork, entM
 			buyer_id       string
 			project_count  uint64
 			project_amount decimal.Decimal
+			project_id     []string
 		)
-		if err := rows.Scan(&buyer_id, &project_count, &project_amount); err != nil {
+		if err := rows.Scan(&buyer_id, &project_count, &project_amount, &project_id); err != nil {
 			logx.Error(err)
 			continue
 		}
@@ -598,6 +633,7 @@ func (n *network) Introduce_Firstparty(fpn map[string][]*firstpartyNetwork, entM
 		vm[buyer_id].ProjectCount += int64(project_count)
 		pf, _ := project_amount.Float64()
 		vm[buyer_id].ProjectAmount += pf
+		vm[buyer_id].ExportId = project_id
 	}
 	rows.Close()
 	if err := rows.Err(); err != nil {
@@ -630,7 +666,7 @@ func (n *network) Introduce_Supplier(values []string, entMonitor map[string]bool
 		vm[v] = &projectInfo{}
 	}
 	wh, args := NetworkCom.WhArgs(values)
-	q := `select a.winner_id,count(DISTINCT b.buyer_id) AS buyer_count,count(DISTINCT b.project_id) AS project_count,sum(b.project_money) AS project_amount,groupUniqArray(b.buyer) from information.transaction_info a 
+	q := `select a.winner_id,count(DISTINCT b.buyer_id) AS buyer_count,count(DISTINCT b.project_id) AS project_count,sum(b.project_money) AS project_amount,groupUniqArray(b.buyer),groupUniqArray(b.project_id) from information.transaction_info a 
 		inner join information.transaction_info b on (hasAny(a.winner_id,[` + wh + `]) and a.buyer_id<>'' and a.buyer_id=b.buyer_id`
 	if matchme == 1 {
 		newWh, newArgs := NetworkCom.WhArgs(probusfors)
@@ -650,8 +686,9 @@ func (n *network) Introduce_Supplier(values []string, entMonitor map[string]bool
 			project_count  uint64
 			project_amount decimal.Decimal
 			buyers         []string
+			project_id     []string
 		)
-		if err := rows.Scan(&winner_id, &buyer_count, &project_count, &project_amount, &buyers); err != nil {
+		if err := rows.Scan(&winner_id, &buyer_count, &project_count, &project_amount, &buyers, &project_id); err != nil {
 			logx.Error(err)
 			continue
 		}
@@ -663,6 +700,7 @@ func (n *network) Introduce_Supplier(values []string, entMonitor map[string]bool
 			vm[v].ProjectCount += int64(project_count)
 			pf, _ := project_amount.Float64()
 			vm[v].ProjectAmount += pf
+			vm[v].ExportId = project_id
 			for _, v := range buyers {
 				if entMonitor[v] {
 					vm[v].MonitorCount++
@@ -684,7 +722,7 @@ func (n *network) Introduce_Agency(values []string, entMonitor map[string]bool,
 		vm[v] = &projectInfo{}
 	}
 	wh, args := NetworkCom.WhArgs(values)
-	q := `select a.agency_id,count(DISTINCT b.buyer_id) AS buyer_count,count(DISTINCT b.project_id) AS project_count,sum(b.project_money) AS project_amount,groupUniqArray(b.buyer) from information.transaction_info a 
+	q := `select a.agency_id,count(DISTINCT b.buyer_id) AS buyer_count,count(DISTINCT b.project_id) AS project_count,sum(b.project_money) AS project_amount,groupUniqArray(b.buyer),groupUniqArray(b.project_id) from information.transaction_info a 
 		inner join information.transaction_info b on (a.agency_id in (` + wh + `) and a.buyer_id<>'' and a.buyer_id=b.buyer_id`
 	if matchme == 1 {
 		newWh, newArgs := NetworkCom.WhArgs(probusfors)
@@ -704,6 +742,7 @@ func (n *network) Introduce_Agency(values []string, entMonitor map[string]bool,
 			project_count  uint64
 			project_amount decimal.Decimal
 			buyers         []string
+			project_id     []string
 		)
 		if err := rows.Scan(&agency_id, &buyer_count, &project_count, &project_amount, &buyers); err != nil {
 			logx.Error(err)
@@ -716,6 +755,7 @@ func (n *network) Introduce_Agency(values []string, entMonitor map[string]bool,
 		vm[agency_id].ProjectCount += int64(project_count)
 		pf, _ := project_amount.Float64()
 		vm[agency_id].ProjectAmount += pf
+		vm[agency_id].ExportId = project_id
 		for _, v := range buyers {
 			if entMonitor[v] {
 				vm[agency_id].MonitorCount++
@@ -759,18 +799,6 @@ func (n *network) Introduce_Middleman(values []string, entMonitor map[string]boo
 	return vm
 }
 
-//
-func (n *network) EntMonitor(positionId int64) map[string]bool {
-	m := map[string]bool{}
-	list := CrmMysql.SelectBySql(`select * from base_service.follow_ent_monitor where s_userid=?`, positionId)
-	for _, v := range *list {
-		if entName := ObjToString(v["s_entname"]); entName != "" {
-			m[entName] = true
-		}
-	}
-	return m
-}
-
 //
 func (n *network) TypeConvert(itype string) int {
 	//firstparty:甲方 supplier:供应商 adiffb:同甲异业 middleman:中间人 agency:招标代理机构

+ 6 - 2
api/internal/service/network_test.go

@@ -84,8 +84,12 @@ func TestNetWorkList(t *testing.T) {
 	initDb()
 	//类型;firstparty:甲方 supplier:供应商 adiffb:同甲异业 middleman:中间人 agency:招标代理机构
 	res := Network.List(&types.NetWorkListReq{
-		PositionId:   943,
-		Order_amount: 1,
+		PositionId:         943,
+		Order_amount:       1,
+		Monitorcount_start: 1,
+		Monitorcount_end:   1,
+		//Monitor:      0,
+		//Project_matchme: 1,
 	})
 	for k, v := range res.Data.(map[string]interface{}) {
 		if k == "list" {