wangshan 1 ano atrás
pai
commit
1c9ef50075
1 arquivos alterados com 170 adições e 66 exclusões
  1. 170 66
      internal/dao/internal/userTask.go

+ 170 - 66
internal/dao/internal/userTask.go

@@ -82,6 +82,8 @@ func (ut *UserTask) Run() {
 			if ut.MatchConditions(info) {
 				//模块计算
 				ut.Calculate(info)
+				//数据整理
+				ut.DataCollation()
 			}
 		case <-ut.Ticker.C:
 			ut.ResultSave()
@@ -298,28 +300,26 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 		defer func() {
 			ut.CalculateWG.Done()
 		}()
-		if utility.DateIsIn(ut.StartTime, ut.EndTime, pt.JgTime, 0) && pt.Sortprice > 0 {
-			var (
-				entIdList = pt.Entidlist
-			)
-			if len(pt.Entidlist) > 0 {
-				//加密
-				for _, entId := range pt.Entidlist {
-					entIdList = append(entIdList, utility.EncodeId(entId))
-				}
+		var (
+			entIdList = pt.Entidlist
+		)
+		if len(pt.Entidlist) > 0 {
+			//加密
+			for _, entId := range pt.Entidlist {
+				entIdList = append(entIdList, utility.EncodeId(entId))
 			}
-			topProject.ProjectTop10 = append(topProject.ProjectTop10, entity.ProjectTop{
-				Id:          common.If(pt.SourceInfoId != "", utility.EncodeId(pt.SourceInfoId), "").(string),
-				Area:        pt.Area,
-				City:        pt.City,
-				Eidlist:     entIdList,
-				Jgtime:      pt.JgTime,
-				Projectname: pt.ProjectName,
-				Sortprice:   pt.Sortprice,
-				WinnerS:     strings.Split(pt.Winners, ","),
-			})
 		}
-		/*-------------排序----------------*/
+		topProject.ProjectTop10 = append(topProject.ProjectTop10, entity.ProjectTop{
+			Id:          common.If(pt.SourceInfoId != "", utility.EncodeId(pt.SourceInfoId), "").(string),
+			Area:        pt.Area,
+			City:        pt.City,
+			Eidlist:     entIdList,
+			Jgtime:      pt.JgTime,
+			Projectname: pt.ProjectName,
+			Sortprice:   pt.Sortprice,
+			WinnerS:     strings.Split(pt.Winners, ","),
+		})
+		/*-------------排序--------B--------*/
 		if len(topProject.ProjectTop10) > 1 {
 			sort.Slice(topProject.ProjectTop10, func(i, j int) bool {
 				return topProject.ProjectTop10[i].Sortprice > topProject.ProjectTop10[j].Sortprice // 根据 price 字段进行倒序排序
@@ -523,7 +523,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							} else {
 								sbct.Winner = utility.GetWinnerInfoOfCount(pt)
 							}
-							/*-------------排序----------------*/
+							/*-------------排序------------Winner----*/
 							if len(sbct.Winner) > 1 {
 								sort.Slice(sbct.Winner, func(i, j int) bool {
 									return sbct.Winner[i].WinnerTotal > sbct.Winner[j].WinnerTotal
@@ -535,15 +535,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							break
 						}
 					}
-					/*-------------排序----------------*/
-					if len(pad.ScaleBuyclassCountTop) > 1 {
-						sort.Slice(pad.ScaleBuyclassCountTop, func(i, j int) bool {
-							return pad.ScaleBuyclassCountTop[i].BuyclassCount > pad.ScaleBuyclassCountTop[j].BuyclassCount
-						})
-						if len(pad.ScaleBuyclassCountTop) > consts.Top3 {
-							pad.ScaleBuyclassCountTop = pad.ScaleBuyclassCountTop[:consts.Top3]
-						}
-					}
+					/*-------------排序------BuyerclassCount----------*/
+					//if len(pad.ScaleBuyclassCountTop) > 1 {
+					//	sort.Slice(pad.ScaleBuyclassCountTop, func(i, j int) bool {
+					//		return pad.ScaleBuyclassCountTop[i].BuyclassCount > pad.ScaleBuyclassCountTop[j].BuyclassCount
+					//	})
+					//	if len(pad.ScaleBuyclassCountTop) > consts.Top3 {
+					//		pad.ScaleBuyclassCountTop = pad.ScaleBuyclassCountTop[:consts.Top3]
+					//	}
+					//}
 					//项目金额TOP3客户类型的重点中标单位
 					for _, sbat := range pad.ScaleBuyclassAmountTop {
 						if sbat.Name == bc {
@@ -594,7 +594,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							} else {
 								sbat.Winner = utility.GetWinnerInfoOfAmount(pt)
 							}
-							/*-------------排序----------------*/
+							/*-------------排序---------Winner-------*/
 							if len(sbat.Winner) > 1 {
 								sort.Slice(sbat.Winner, func(i, j int) bool {
 									return sbat.Winner[i].WinnerAmount > sbat.Winner[j].WinnerAmount
@@ -605,19 +605,21 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							}
 						}
 					}
-					/*-------------排序----------------*/
-					if len(pad.ScaleBuyclassCountTop) > 1 {
-						sort.Slice(pad.ScaleBuyclassCountTop, func(i, j int) bool {
-							return pad.ScaleBuyclassCountTop[i].BuyclassCount > pad.ScaleBuyclassCountTop[j].BuyclassCount
-						})
-						if len(pad.ScaleBuyclassCountTop) > consts.Top3 {
-							pad.ScaleBuyclassCountTop = pad.ScaleBuyclassCountTop[:consts.Top3]
-						}
-					}
+					/*-------------排序-----BuyerclassAmount-----------*/
+					//if len(pad.ScaleBuyclassAmountTop) > 1 {
+					//	sort.Slice(pad.ScaleBuyclassAmountTop, func(i, j int) bool {
+					//		return pad.ScaleBuyclassAmountTop[i].BuyclassAmount > pad.ScaleBuyclassAmountTop[j].BuyclassAmount
+					//	})
+					//	if len(pad.ScaleBuyclassAmountTop) > consts.Top3 {
+					//		pad.ScaleBuyclassAmountTop = pad.ScaleBuyclassAmountTop[:consts.Top3]
+					//	}
+					//}
 				}
 			}
 		}
-		customerScaleFunc()
+		if pt.Sortprice > 0 {
+			customerScaleFunc()
+		}
 		//项目规模分布
 		var ProjectScaleFunc = func() {
 			var psk = ""
@@ -721,7 +723,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						} else {
 							saat.Winner = utility.GetWinnerInfoOfAmount(pt)
 						}
-						/*-------------排序----------------*/
+						/*-------------排序---------Winner-------*/
 						if len(saat.Winner) > 1 {
 							sort.Slice(saat.Winner, func(i, j int) bool {
 								return saat.Winner[i].WinnerAmount > saat.Winner[j].WinnerAmount
@@ -732,15 +734,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						}
 					}
 				}
-				/*-------------排序----------------*/
-				if len(pad.ScaleAreaAmountTop) > 1 {
-					sort.Slice(pad.ScaleAreaAmountTop, func(i, j int) bool {
-						return pad.ScaleAreaAmountTop[i].AreaAmount > pad.ScaleAreaAmountTop[j].AreaAmount
-					})
-					if len(pad.ScaleAreaAmountTop) > consts.Top3 {
-						pad.ScaleAreaAmountTop = pad.ScaleAreaAmountTop[:consts.Top3]
-					}
-				}
+				/*-------------排序----------AreaAmount------*/
+				//if len(pad.ScaleAreaAmountTop) > 1 {
+				//	sort.Slice(pad.ScaleAreaAmountTop, func(i, j int) bool {
+				//		return pad.ScaleAreaAmountTop[i].AreaAmount > pad.ScaleAreaAmountTop[j].AreaAmount
+				//	})
+				//	if len(pad.ScaleAreaAmountTop) > consts.Top3 {
+				//		pad.ScaleAreaAmountTop = pad.ScaleAreaAmountTop[:consts.Top3]
+				//	}
+				//}
 				//项目数量---TOP3地区的重点中标单位
 				for _, sact := range pad.ScaleAreaCountTop {
 					if sact.Name == pt.Area {
@@ -791,7 +793,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						} else {
 							sact.Winner = utility.GetWinnerInfoOfCount(pt)
 						}
-						/*-------------排序----------------*/
+						/*-------------排序--------Winner--------*/
 						if len(sact.Winner) > 1 {
 							sort.Slice(sact.Winner, func(i, j int) bool {
 								return sact.Winner[i].WinnerTotal > sact.Winner[j].WinnerTotal
@@ -802,15 +804,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						}
 					}
 				}
-				/*-------------排序----------------*/
-				if len(pad.ScaleAreaCountTop) > 1 {
-					sort.Slice(pad.ScaleAreaCountTop, func(i, j int) bool {
-						return pad.ScaleAreaCountTop[i].AreaCount > pad.ScaleAreaCountTop[j].AreaCount
-					})
-					if len(pad.ScaleAreaCountTop) > consts.Top3 {
-						pad.ScaleAreaCountTop = pad.ScaleAreaCountTop[:consts.Top3]
-					}
-				}
+				/*-------------排序-------AreaCount---------*/
+				//if len(pad.ScaleAreaCountTop) > 1 {
+				//	sort.Slice(pad.ScaleAreaCountTop, func(i, j int) bool {
+				//		return pad.ScaleAreaCountTop[i].AreaCount > pad.ScaleAreaCountTop[j].AreaCount
+				//	})
+				//	if len(pad.ScaleAreaCountTop) > consts.Top3 {
+				//		pad.ScaleAreaCountTop = pad.ScaleAreaCountTop[:consts.Top3]
+				//	}
+				//}
 			}
 		}
 		scaleAreaAmountAndCountTopFunc()
@@ -912,7 +914,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 								} else {
 									srtt.TopList = utility.GetWinnerInfoTopList(pt, 1, float64(scale.MarketProfile.ProjectCount))
 								}
-								/*-------------排序----------------*/
+								/*-------------排序----------Winner------*/
 								if len(srtt.TopList) > 1 {
 									sort.Slice(srtt.TopList, func(i, j int) bool {
 										return srtt.TopList[i].Value > srtt.TopList[j].Value
@@ -975,7 +977,7 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 								} else {
 									srat.TopList = utility.GetWinnerInfoTopList(pt, pt.Sortprice, float64(scale.MarketProfile.ProjectCount))
 								}
-								/*-------------排序----------------*/
+								/*-------------排序----------Winner------*/
 								if len(srat.TopList) > 1 {
 									sort.Slice(srat.TopList, func(i, j int) bool {
 										return srat.TopList[i].Value > srat.TopList[j].Value
@@ -1069,6 +1071,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						break
 					}
 				}
+				/*-------------排序----------Buyer------*/
+				if len(baw.BuyerCountTop3) > 1 {
+					sort.Slice(baw.BuyerCountTop3, func(i, j int) bool {
+						return baw.BuyerCountTop3[i].Number > baw.BuyerCountTop3[j].Number
+					})
+					if len(baw.BuyerCountTop3) > consts.Top30 {
+						baw.BuyerCountTop3 = baw.BuyerCountTop3[:consts.Top30]
+					}
+				}
 				//采购金额TOP30采购单位及其重点合作中标单位
 				for _, bat := range baw.BuyerAmountTop3 {
 					if bat.Name == pt.Buyer {
@@ -1121,6 +1132,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 						break
 					}
 				}
+				/*-------------排序----------Buyer------*/
+				if len(baw.BuyerAmountTop3) > 1 {
+					sort.Slice(baw.BuyerAmountTop3, func(i, j int) bool {
+						return baw.BuyerAmountTop3[i].Amount > baw.BuyerAmountTop3[j].Amount
+					})
+					if len(baw.BuyerAmountTop3) > consts.Top30 {
+						baw.BuyerAmountTop3 = baw.BuyerAmountTop3[:consts.Top30]
+					}
+				}
 			}
 			//采购规模分布 --7
 			var psk = ""
@@ -1217,6 +1237,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							break
 						}
 					}
+					/*-------------排序--------Winner--------*/
+					if len(baw.WinnerCountTop3) > 1 {
+						sort.Slice(baw.WinnerCountTop3, func(i, j int) bool {
+							return baw.WinnerCountTop3[i].Number > baw.WinnerCountTop3[j].Number
+						})
+						if len(baw.WinnerCountTop3) > consts.Top30 {
+							baw.WinnerCountTop3 = baw.WinnerCountTop3[:consts.Top30]
+						}
+					}
 					//中标金额TOP30中标单位及其重点合作采购单位
 					for _, wat := range baw.WinnerAmountTop3 {
 						if wat.Name == pt.Buyer {
@@ -1261,6 +1290,15 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 							break
 						}
 					}
+					/*-------------排序----------Winner------*/
+					if len(baw.WinnerAmountTop3) > 1 {
+						sort.Slice(baw.WinnerAmountTop3, func(i, j int) bool {
+							return baw.WinnerAmountTop3[i].Amount > baw.WinnerAmountTop3[j].Amount
+						})
+						if len(baw.WinnerAmountTop3) > consts.Top30 {
+							baw.WinnerAmountTop3 = baw.WinnerAmountTop3[:consts.Top30]
+						}
+					}
 				}
 			}
 			//中标规模分布
@@ -1306,7 +1344,73 @@ func (ut *UserTask) Calculate(pt *entity.ProjectInfo) {
 		ut.CalculateWG.Wait()
 	}
 	scaleFunc()
-	nextFunc()
+	if utility.DateIsIn(ut.StartTime, ut.EndTime, pt.JgTime, 0) {
+		nextFunc()
+	}
+}
+
+// DataCollation 数据整理
+func (ut *UserTask) DataCollation() {
+	var projectAllData = func() {
+		pad := ut.Result.ProjectAllData
+		//项目数量TOP3客户类型的重点中标单位
+		if len(pad.ScaleBuyclassCountTop) > 1 {
+			/*-------------排序------BuyerclassCount----------*/
+			sort.Slice(pad.ScaleBuyclassCountTop, func(i, j int) bool {
+				return pad.ScaleBuyclassCountTop[i].BuyclassCount > pad.ScaleBuyclassCountTop[j].BuyclassCount
+			})
+			if len(pad.ScaleBuyclassCountTop) > consts.Top3 {
+				pad.ScaleBuyclassCountTop = pad.ScaleBuyclassCountTop[:consts.Top3]
+			}
+		}
+		//项目金额TOP3客户类型的重点中标单位
+		if len(pad.ScaleBuyclassAmountTop) > 1 {
+			/*-------------排序-----BuyerclassAmount-----------*/
+			sort.Slice(pad.ScaleBuyclassAmountTop, func(i, j int) bool {
+				return pad.ScaleBuyclassAmountTop[i].BuyclassAmount > pad.ScaleBuyclassAmountTop[j].BuyclassAmount
+			})
+			if len(pad.ScaleBuyclassAmountTop) > consts.Top3 {
+				pad.ScaleBuyclassAmountTop = pad.ScaleBuyclassAmountTop[:consts.Top3]
+			}
+		}
+		//项目金额TOP3地区的重点中标单位
+		if len(pad.ScaleAreaAmountTop) > 1 {
+			/*-------------排序----------AreaAmount------*/
+			sort.Slice(pad.ScaleAreaAmountTop, func(i, j int) bool {
+				return pad.ScaleAreaAmountTop[i].AreaAmount > pad.ScaleAreaAmountTop[j].AreaAmount
+			})
+			if len(pad.ScaleAreaAmountTop) > consts.Top3 {
+				pad.ScaleAreaAmountTop = pad.ScaleAreaAmountTop[:consts.Top3]
+			}
+		}
+		//项目数量TOP3地区的重点中标单位
+		/*-------------排序-------AreaCount---------*/
+		if len(pad.ScaleAreaCountTop) > 1 {
+			sort.Slice(pad.ScaleAreaCountTop, func(i, j int) bool {
+				return pad.ScaleAreaCountTop[i].AreaCount > pad.ScaleAreaCountTop[j].AreaCount
+			})
+			if len(pad.ScaleAreaCountTop) > consts.Top3 {
+				pad.ScaleAreaCountTop = pad.ScaleAreaCountTop[:consts.Top3]
+			}
+		}
+	}
+	/* 项目规模 地区分布 客户分布 地区客户top3*/
+	projectAllData()
+	/*---------------*/
+	//var buyerAndWinner = func() {
+	//	///* 市场-采购单位&&中标企业*/
+	//	baw := ut.Result.BuyerAndWinner
+	//	/*-------------排序----------BuyerCount------*/
+	//	if len(baw.BuyerCountTop3) > 1 {
+	//		sort.Slice(baw.BuyerCountTop3, func(i, j int) bool {
+	//			return baw.BuyerCountTop3[i].Number > baw.BuyerCountTop3[j].Number
+	//		})
+	//		if len(baw.BuyerCountTop3) > consts.Top30 {
+	//			baw.BuyerCountTop3 = baw.BuyerCountTop3[:consts.Top30]
+	//		}
+	//	}
+	//}
+	//buyerAndWinner()
 }
 
 // ResultSave  结果保存
@@ -1341,7 +1445,7 @@ func (ut *UserTask) ResultSave() {
 	}
 	//细化市场
 	sr := ut.Result.ScaleRefine
-	if len(sr.ScaleRefineAll) > 0 {
+	if len(sr.ScaleRefineAll) > 0 || len(sr.ScaleRefineTotalTop) > 0 {
 		var srMap = common.StructToMapMore(sr)
 		srMap["s_m_id"] = ut.Id
 		if id := do.Mgo.Save(consts.MarketScaleRefine, srMap); id == "" {
@@ -1350,7 +1454,7 @@ func (ut *UserTask) ResultSave() {
 	}
 	///* 市场-采购单位&&中标企业*/
 	baw := ut.Result.BuyerAndWinner
-	if len(baw.WinnerCountTop3) > 0 {
+	if len(baw.WinnerCountTop3) > 0 || len(baw.BuyerCountTop3) > 0 {
 		var bawMap = common.StructToMapMore(baw)
 		bawMap["s_m_id"] = ut.Id
 		if id := do.Mgo.Save(consts.MarketBuyerAndWinner, bawMap); id == "" {