Przeglądaj źródła

feat:离线广告保存统计红包余额

hidewnd 3 tygodni temu
rodzic
commit
030f99f224

+ 13 - 3
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/service/impl/AdServiceImpl.java

@@ -133,6 +133,9 @@ public class AdServiceImpl implements AdService {
             List<String> filter = new ArrayList<>();
             List<YtDyzAdRecord> saveList = new ArrayList<>();
             BigDecimal totalRevenue = BigDecimal.ZERO;
+            BigDecimal redPackRevenue = BigDecimal.ZERO; // 用户红包收益
+            BigDecimal userRevenueRate = appUserService.getUserRevenueRate(user.getAppId()); // 用户红包收益比例
+            boolean isLoginAfter = param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus());
             for (DyzAdRecordParam adParam : param.getAdRecords()) {
                 handleTimeNull(adParam);
                 String takuAdId = null;
@@ -163,14 +166,21 @@ public class AdServiceImpl implements AdService {
                 }
                 if (insertEntity.getRevenue() != null) {
                     totalRevenue = totalRevenue.add(insertEntity.getRevenue());
+                    if (isLoginAfter ) {
+                        redPackRevenue = redPackRevenue.add(insertEntity.getRevenue().multiply(userRevenueRate));
+                    }
                 }
             }
             if (CollUtil.isNotEmpty(saveList)) {
-                log.info("[delaySaveRecord] saveCount:{}, {}", saveList.size(), saveList.stream().map(YtDyzAdRecord::getRecordId).collect(Collectors.joining(",")));
-                if (param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())) {
+                log.info("[delaySaveRecord] saveCount:{}, {}", saveList.size(), saveList.stream()
+                        .map(YtDyzAdRecord::getRecordId).collect(Collectors.joining(",")));
+                if (isLoginAfter) {
                     adRecordMapper.batchAddVisitor(saveList);
                 } else {
                     adRecordMapper.batchAdd(saveList);
+                    if (redPackRevenue.compareTo(BigDecimal.ZERO) > 0) {
+                        appUserMapper.updateUserRedPacket(user.getUserId(), redPackRevenue.setScale(5, RoundingMode.HALF_UP));
+                    }
                 }
                 appUserMapper.updateTotal(user.getUserId(), saveList.size(), totalRevenue);
             }
@@ -187,7 +197,7 @@ public class AdServiceImpl implements AdService {
     }
 
     private String verifyTimeParam(String fieldName, String value, String defaultValue) {
-        if (Objects.isNull(value) || "null".equals(value)) {
+        if (StrUtil.isEmpty(value) || "null".equals(value)) {
             if ("null".equals(value)) {
                 log.warn("param[{}] value '{}' is null !", fieldName, value);
             }

+ 29 - 3
yt-question/yt-question-service/src/main/java/com/ytpm/question/service/impl/AdServiceImpl.java

@@ -32,6 +32,7 @@ import com.ytpm.middle.view.UserRankingListVO;
 import com.ytpm.question.dao.AdRecordMapper;
 import com.ytpm.question.dao.AppUserMapper;
 import com.ytpm.question.service.AdService;
+import com.ytpm.question.service.AppUserService;
 import com.ytpm.question.view.AgentNetworkAgg;
 import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -42,6 +43,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
@@ -63,6 +65,8 @@ public class AdServiceImpl implements AdService {
     private AdRecordMapper adRecordMapper;
     @Autowired
     private AppUserMapper appUserMapper;
+    @Resource
+    private AppUserService appUserService;
     @Autowired
     private RiskFeign riskFeign;
 
@@ -128,6 +132,9 @@ public class AdServiceImpl implements AdService {
             List<String> filter = new ArrayList<>();
             List<YtDyzAdRecord> saveList = new ArrayList<>();
             BigDecimal totalRevenue = BigDecimal.ZERO;
+            BigDecimal redPackRevenue = BigDecimal.ZERO; // 用户红包收益
+            BigDecimal userRevenueRate = appUserService.getUserRevenueRate(user.getAppId()); // 用户红包收益比例
+            boolean isLoginAfter = param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus());
             for (DyzAdRecordParam adParam : param.getAdRecords()) {
                 handleTimeNull(adParam);
                 String takuAdId = null;
@@ -158,14 +165,21 @@ public class AdServiceImpl implements AdService {
                 }
                 if (insertEntity.getRevenue() != null) {
                     totalRevenue = totalRevenue.add(insertEntity.getRevenue());
+                    if (isLoginAfter ) {
+                        redPackRevenue = redPackRevenue.add(insertEntity.getRevenue().multiply(userRevenueRate));
+                    }
                 }
             }
             if (CollUtil.isNotEmpty(saveList)) {
-                log.info("[delaySaveRecord] saveCount:{}, {}", saveList.size(), saveList.stream().map(YtDyzAdRecord::getRecordId).collect(Collectors.joining(",")));
-                if (param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())) {
+                log.info("[delaySaveRecord] saveCount:{}, {}", saveList.size(), saveList.stream()
+                        .map(YtDyzAdRecord::getRecordId).collect(Collectors.joining(",")));
+                if (isLoginAfter) {
                     adRecordMapper.batchAddVisitor(saveList);
                 } else {
                     adRecordMapper.batchAdd(saveList);
+                    if (redPackRevenue.compareTo(BigDecimal.ZERO) > 0) {
+                        appUserMapper.updateUserRedPacket(user.getUserId(), redPackRevenue.setScale(5, RoundingMode.HALF_UP));
+                    }
                 }
                 appUserMapper.updateTotal(user.getUserId(), saveList.size(), totalRevenue);
             }
@@ -182,7 +196,7 @@ public class AdServiceImpl implements AdService {
     }
 
     private String verifyTimeParam(String fieldName, String value, String defaultValue) {
-        if (Objects.isNull(value) || "null".equals(value)) {
+        if (StrUtil.isEmpty(value) || "null".equals(value)) {
             if ("null".equals(value)) {
                 log.warn("param[{}] value '{}' is null !", fieldName, value);
             }
@@ -391,7 +405,19 @@ public class AdServiceImpl implements AdService {
         if (param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())) {
             adRecordMapper.addOneVisitor(adRecord);
         } else {
+            BigDecimal redPackRevenue = BigDecimal.ZERO;
+            BigDecimal userRevenueRate = appUserService.getUserRevenueRate(user.getAppId());
+            if (userRevenueRate != null) {
+                adRecord.setRevenueRate(userRevenueRate.toPlainString());
+                if(adRecord.getRevenue() != null && adRecord.getRevenue().compareTo(BigDecimal.ZERO) > 0){
+                    redPackRevenue = adRecord.getRevenue().multiply(userRevenueRate).setScale(5, RoundingMode.HALF_UP);
+                }
+            }
             adRecordMapper.addOne(adRecord);
+            // 更新用户红包余额
+            if (redPackRevenue.compareTo(BigDecimal.ZERO) > 0) {
+                appUserMapper.updateUserRedPacket(user.getUserId(), redPackRevenue);
+            }
         }
         boolean updateUserTotal = !AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())
                 || AdSourceTypeEnum.rewarded_video.getAdSourceType() != param.getAdSourceType();

+ 0 - 17
yt-question/yt-question-service/src/main/java/com/ytpm/question/service/impl/QuestionServiceImpl.java

@@ -15,14 +15,11 @@ import com.ytpm.general.ResultTable;
 import com.ytpm.general.StatusCode;
 import com.ytpm.question.dao.AppUserMapper;
 import com.ytpm.question.dao.QuestionMapper;
-import com.ytpm.question.service.AppUserService;
 import com.ytpm.question.service.QuestionService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.Date;
 import java.util.Objects;
 
@@ -33,8 +30,6 @@ public class QuestionServiceImpl implements QuestionService {
     private QuestionMapper questionMapper;
     @Resource
     private AppUserMapper appUserMapper;
-    @Resource
-    private AppUserService appUserService;
 
     /**
      * 获取题库
@@ -62,14 +57,6 @@ public class QuestionServiceImpl implements QuestionService {
         BeanUtil.copyProperties(param, record);
         record.setRecordId(IdUtil.fastSimpleUUID());
         record.setAnswerTime(new Date());
-        BigDecimal redPackRevenue = BigDecimal.ZERO;
-        BigDecimal userRevenueRate = appUserService.getUserRevenueRate(user.getAppId());
-        if (userRevenueRate != null) {
-            record.setRevenueRate(userRevenueRate.toPlainString());
-            if(record.getRevenue() != null && record.getRevenue().compareTo(BigDecimal.ZERO) > 0){
-                redPackRevenue = record.getRevenue().multiply(userRevenueRate).setScale(5, RoundingMode.HALF_UP);
-            }
-        }
         questionMapper.saveAnswerRecord(record);
         // 扣减体力 记录体积消耗记录
         appUserMapper.subOnePower(param.getUserId());
@@ -80,10 +67,6 @@ public class QuestionServiceImpl implements QuestionService {
         powerRecord.setType(1);
         powerRecord.setRemark("减少体力");
         appUserMapper.addPowerRecord(powerRecord);
-        // 更新用户红包余额
-        if (redPackRevenue.compareTo(BigDecimal.ZERO) > 0) {
-            appUserMapper.updateUserRedPacket(user.getUserId(), redPackRevenue);
-        }
         return Result.resultOk(RepMessage.SAVE_SUCCESS);
     }
 }