|  | @@ -286,7 +286,7 @@ public abstract class RankStrategyBasic implements RankStrategy {
 | 
											
												
													
														|  |          if (Objects.equals(layer, "有曝光无转化") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
 |  |          if (Objects.equals(layer, "有曝光无转化") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
 | 
											
												
													
														|  |              List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
 |  |              List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
 | 
											
												
													
														|  |              List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || e.getCustomerId() != 26L).collect(Collectors.toList());
 |  |              List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || e.getCustomerId() != 26L).collect(Collectors.toList());
 | 
											
												
													
														|  | -            if(CollectionUtils.isNotEmpty(filteredAdList)){
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if (CollectionUtils.isNotEmpty(filteredAdList)) {
 | 
											
												
													
														|  |                  request.setAdIdList(filteredAdList);
 |  |                  request.setAdIdList(filteredAdList);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
 |  |              log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
 | 
											
										
											
												
													
														|  | @@ -444,24 +444,34 @@ public abstract class RankStrategyBasic implements RankStrategy {
 | 
											
												
													
														|  |          Integer viewsHour = jsonObject.getInteger("viewsHour");
 |  |          Integer viewsHour = jsonObject.getInteger("viewsHour");
 | 
											
												
													
														|  |          Integer viewsDay = jsonObject.getInteger("viewsDay");
 |  |          Integer viewsDay = jsonObject.getInteger("viewsDay");
 | 
											
												
													
														|  |          double realCtcvrHour = safeDouble(jsonObject.getDouble("realCtcvrHour"), minCtcvr);
 |  |          double realCtcvrHour = safeDouble(jsonObject.getDouble("realCtcvrHour"), minCtcvr);
 | 
											
												
													
														|  | -        double pCtcvrHour = safeDouble(jsonObject.getDouble("pCtcvrHour"), minCtcvr);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        double pCtcvrHour = jsonObject.getDouble("pCtcvrHour");
 | 
											
												
													
														|  |          double realCtcvrDay = safeDouble(jsonObject.getDouble("realCtcvrDay"), minCtcvr);
 |  |          double realCtcvrDay = safeDouble(jsonObject.getDouble("realCtcvrDay"), minCtcvr);
 | 
											
												
													
														|  | -        double pCtcvrDay = safeDouble(jsonObject.getDouble("pCtcvrDay"), minCtcvr);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        double pCtcvrDay = jsonObject.getDouble("pCtcvrDay");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          if (scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
 |  |          if (scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
 | 
											
												
													
														|  |              double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha2 : 0;
 |  |              double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha2 : 0;
 | 
											
												
													
														|  |              double beta = isValidViews(viewsDay, correctCpaViewDay) ? correctCpaBeta2 : 0;
 |  |              double beta = isValidViews(viewsDay, correctCpaViewDay) ? correctCpaBeta2 : 0;
 | 
											
												
													
														|  |              return (1 - alpha - beta) +
 |  |              return (1 - alpha - beta) +
 | 
											
												
													
														|  | -                    (realCtcvrHour / pCtcvrHour) * alpha +
 |  | 
 | 
											
												
													
														|  | -                    (realCtcvrDay / pCtcvrDay) * beta;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    safeDivision(realCtcvrHour, pCtcvrHour) * alpha +
 | 
											
												
													
														|  | 
 |  | +                    safeDivision(realCtcvrDay, pCtcvrDay) * beta;
 | 
											
												
													
														|  |          } else {
 |  |          } else {
 | 
											
												
													
														|  |              double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha1 : 0;
 |  |              double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha1 : 0;
 | 
											
												
													
														|  |              double beta = isValidViews(viewsDay, correctCpaViewDay) ? correctCpaBeta1 : 0;
 |  |              double beta = isValidViews(viewsDay, correctCpaViewDay) ? correctCpaBeta1 : 0;
 | 
											
												
													
														|  | -            return Math.pow(realCtcvrHour / pCtcvrHour, alpha) *
 |  | 
 | 
											
												
													
														|  | -                    Math.pow(realCtcvrDay / pCtcvrDay, beta);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            return Math.pow(safeDivision(realCtcvrHour, pCtcvrHour), alpha) *
 | 
											
												
													
														|  | 
 |  | +                    Math.pow(safeDivision(realCtcvrDay, pCtcvrDay), beta);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    private Double safeDivision(Double realCtcvr, Double pCtcvr) {
 | 
											
												
													
														|  | 
 |  | +        if (pCtcvr == null || pCtcvr == 0) {
 | 
											
												
													
														|  | 
 |  | +            return 1.0;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if (realCtcvr == null || realCtcvr == 0) {
 | 
											
												
													
														|  | 
 |  | +            return 0.0;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        return realCtcvr / pCtcvr;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      private <T> Map<T, JSONObject> getRedisData(
 |  |      private <T> Map<T, JSONObject> getRedisData(
 | 
											
												
													
														|  |              Collection<T> ids,
 |  |              Collection<T> ids,
 | 
											
												
													
														|  |              Function<T, String> hourKeyBuilder,
 |  |              Function<T, String> hourKeyBuilder,
 |