wangchuanjin 9 месяцев назад
Родитель
Сommit
7466e18e10
1 измененных файлов с 40 добавлено и 64 удалено
  1. 40 64
      api/internal/service/CoopHistoryService.go

+ 40 - 64
api/internal/service/CoopHistoryService.go

@@ -134,20 +134,31 @@ 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]
+		winners, agency := []string{}, []string{}
+		for _, m := range r1 {
+			winners = append(winners, common.ObjToString(m["name"]))
+		}
+		for _, m := range r2 {
+			agency = append(agency, common.ObjToString(m["name"]))
+		}
+		logx.Info("CandidateChannel LastTimeCoopBath start ", req.PositionId, " ", pTmp.BuyerId, " ", len(winners), " ", len(agency))
+		ltcs1, ltcs2 := LastTimeCoopBath(req.PositionId, pTmp.BuyerId, winners, agency)
+		logx.Info("CandidateChannel LastTimeCoopBath over ", req.PositionId)
 		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,
 					}
+					if ltc := ltcs1[common.ObjToString(m["name"])]; ltc != nil {
+						tmp.NearlyYears = ltc.Near
+						tmp.RecentTime = ltc.ZbTime
+					}
 					result = append(result, &tmp)
 				}
 			}
@@ -156,16 +167,17 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData, size_1, size_2,
 			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,
 					}
+					if ltc := ltcs2[common.ObjToString(m["name"])]; ltc != nil {
+						tmp.NearlyYears = ltc.Near
+						tmp.RecentTime = ltc.ZbTime
+					}
 					result = append(result, &tmp)
 				}
 			}
@@ -336,18 +348,15 @@ func LastTimeCoop(buyerId, ent, stype string) (bool, int64) {
 	return near, zbtime
 }
 
-func LastTimeCoopBath(positionId int64, buyerIds, winners, agencys []string) (map[string]map[string]*Cooperate, map[string]map[string]*Cooperate) {
-	if len(buyerIds) > 50 {
-		buyerIds = buyerIds[:50]
+func LastTimeCoopBath(positionId int64, buyerId string, winners, agencys []string) (map[string]*Cooperate, map[string]*Cooperate) {
+	if len(winners) > 100 {
+		winners = winners[:100]
 	}
-	if len(winners) > 50 {
-		winners = winners[:50]
+	if len(agencys) > 100 {
+		agencys = agencys[:100]
 	}
-	if len(agencys) > 10 {
-		agencys = agencys[:50]
-	}
-	adiffb, agency := map[string]map[string]*Cooperate{}, map[string]map[string]*Cooperate{}
-	if len(buyerIds) == 0 {
+	adiffb, agency := map[string]*Cooperate{}, map[string]*Cooperate{}
+	if buyerId == "" {
 		return adiffb, agency
 	}
 	var toSearch = func(tp int, query string, args []interface{}) {
@@ -360,11 +369,10 @@ func LastTimeCoopBath(positionId int64, buyerIds, winners, agencys []string) (ma
 		}
 		for rows.Next() {
 			var (
-				buyer_id string
-				one      string
-				zbtime   int64
+				one    string
+				zbtime int64
 			)
-			if err := rows.Scan(&buyer_id, &one, &zbtime); err != nil {
+			if err := rows.Scan(&one, &zbtime); err != nil {
 				logx.Error(err)
 				continue
 			}
@@ -376,15 +384,9 @@ func LastTimeCoopBath(positionId int64, buyerIds, winners, agencys []string) (ma
 				c.Near = true
 			}
 			if tp == 1 {
-				if adiffb[buyer_id] == nil {
-					adiffb[buyer_id] = map[string]*Cooperate{}
-				}
-				adiffb[buyer_id][one] = c
+				adiffb[one] = c
 			} else {
-				if agency[buyer_id] == nil {
-					agency[buyer_id] = map[string]*Cooperate{}
-				}
-				agency[buyer_id][one] = c
+				agency[one] = c
 			}
 		}
 		rows.Close()
@@ -393,44 +395,18 @@ func LastTimeCoopBath(positionId int64, buyerIds, winners, agencys []string) (ma
 		}
 	}
 	if len(winners) > 0 {
-		sql := `SELECT buyer_id,winner_one,max(zbtime) FROM information.transaction_info ARRAY JOIN winner AS winner_one WHERE %s group by buyer_id,winner_one`
-		text := `(buyer_id=? AND has(winner,?))`
-		array := []string{}
-		args := []interface{}{}
-		for _, v := range buyerIds {
-			for _, vv := range winners {
-				args = append(args, v, vv)
-				array = append(array, text)
-				if len(array) == 50 {
-					toSearch(1, fmt.Sprintf(sql, strings.Join(array, " or ")), args)
-					array = []string{}
-					args = []interface{}{}
-				}
-			}
-		}
-		if len(array) > 0 {
-			toSearch(1, fmt.Sprintf(sql, strings.Join(array, " or ")), args)
-		}
+		wh, newArgs := T.NetworkCom.WhArgs(winners)
+		sql := `SELECT winner_one,max(zbtime) FROM information.transaction_info ARRAY JOIN winner AS winner_one WHERE buyer_id=? AND hasAny(winner,[` + wh + `])) group by winner_one`
+		args := []interface{}{buyerId}
+		args = append(args, newArgs...)
+		toSearch(1, sql, args)
 	}
 	if len(agencys) > 0 {
-		sql := `SELECT buyer_id,agency,max(zbtime) FROM information.transaction_info WHERE %s group by buyer_id,agency`
-		text := `(buyer_id=? AND agency=?)`
-		array := []string{}
-		args := []interface{}{}
-		for _, v := range buyerIds {
-			for _, vv := range winners {
-				args = append(args, v, vv)
-				array = append(array, text)
-				if len(array) == 50 {
-					toSearch(2, fmt.Sprintf(sql, strings.Join(array, " or ")), args)
-					array = []string{}
-					args = []interface{}{}
-				}
-			}
-		}
-		if len(array) > 0 {
-			toSearch(2, fmt.Sprintf(sql, strings.Join(array, " or ")), args)
-		}
+		wh, newArgs := T.NetworkCom.WhArgs(agencys)
+		sql := `SELECT agency,max(zbtime) FROM information.transaction_info WHERE buyer_id=? AND agency in (` + wh + `) group by agency`
+		args := []interface{}{buyerId}
+		args = append(args, newArgs...)
+		toSearch(2, sql, newArgs)
 	}
 	return adiffb, agency
 }