소스 검색

修复计价问题

xueyiming 10 시간 전
부모
커밋
bd350ea761
1개의 변경된 파일17개의 추가작업 그리고 7개의 파일을 삭제
  1. 17 7
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

+ 17 - 7
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

@@ -286,7 +286,7 @@ public abstract class RankStrategyBasic implements RankStrategy {
         if (Objects.equals(layer, "有曝光无转化") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
             List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
             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);
             }
             log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
@@ -444,24 +444,34 @@ public abstract class RankStrategyBasic implements RankStrategy {
         Integer viewsHour = jsonObject.getInteger("viewsHour");
         Integer viewsDay = jsonObject.getInteger("viewsDay");
         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 pCtcvrDay = safeDouble(jsonObject.getDouble("pCtcvrDay"), minCtcvr);
+        double pCtcvrDay = jsonObject.getDouble("pCtcvrDay");
 
         if (scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
             double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha2 : 0;
             double beta = isValidViews(viewsDay, correctCpaViewDay) ? correctCpaBeta2 : 0;
             return (1 - alpha - beta) +
-                    (realCtcvrHour / pCtcvrHour) * alpha +
-                    (realCtcvrDay / pCtcvrDay) * beta;
+                    safeDivision(realCtcvrHour, pCtcvrHour) * alpha +
+                    safeDivision(realCtcvrDay, pCtcvrDay) * beta;
         } else {
             double alpha = isValidViews(viewsHour, correctCpaViewHour) ? correctCpaAlpha1 : 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(
             Collection<T> ids,
             Function<T, String> hourKeyBuilder,