|
|
@@ -10,8 +10,10 @@ import shop.alien.entity.store.CommonPushChannelConfig;
|
|
|
import shop.alien.entity.store.CommonPushTask;
|
|
|
import shop.alien.entity.store.CommonPushTaskNum;
|
|
|
import shop.alien.entity.store.CommonPushTaskStatus;
|
|
|
+import shop.alien.entity.store.dto.CommonPushTaskStatsDto;
|
|
|
import shop.alien.mapper.CommonPushChannelConfigMapper;
|
|
|
import shop.alien.mapper.CommonPushTaskMapper;
|
|
|
+import shop.alien.mapper.CommonPushTaskUserMapper;
|
|
|
import shop.alien.store.dto.CommonPushChannelStatsDto;
|
|
|
import shop.alien.store.service.CommonPushTaskNumService;
|
|
|
import shop.alien.store.service.CommonPushTaskStatsService;
|
|
|
@@ -34,6 +36,7 @@ public class CommonPushTaskStatsServiceImpl implements CommonPushTaskStatsServic
|
|
|
);
|
|
|
|
|
|
private final CommonPushTaskMapper commonPushTaskMapper;
|
|
|
+ private final CommonPushTaskUserMapper commonPushTaskUserMapper;
|
|
|
private final CommonPushTaskNumService commonPushTaskNumService;
|
|
|
private final CommonPushChannelConfigMapper commonPushChannelConfigMapper;
|
|
|
private final CommonPushVendorHttpClient commonPushVendorHttpClient;
|
|
|
@@ -85,7 +88,8 @@ public class CommonPushTaskStatsServiceImpl implements CommonPushTaskStatsServic
|
|
|
if (credential == null) {
|
|
|
continue;
|
|
|
}
|
|
|
- CommonPushChannelStatsDto stats = queryChannelStats(channelCode, credential, vendorTaskIds, entry.getValue());
|
|
|
+ CommonPushChannelStatsDto stats = queryChannelStats(channelCode, credential, vendorTaskIds,
|
|
|
+ entry.getValue(), task.getId(), phoneType);
|
|
|
if (stats == null) {
|
|
|
continue;
|
|
|
}
|
|
|
@@ -96,7 +100,8 @@ public class CommonPushTaskStatsServiceImpl implements CommonPushTaskStatsServic
|
|
|
}
|
|
|
|
|
|
private CommonPushChannelStatsDto queryChannelStats(String channelCode, JSONObject credential,
|
|
|
- Map<String, String> vendorTaskIds, String taskIdValue) {
|
|
|
+ Map<String, String> vendorTaskIds, String taskIdValue,
|
|
|
+ Long pushTaskId, String phoneType) {
|
|
|
if (StringUtils.isBlank(taskIdValue)) {
|
|
|
return null;
|
|
|
}
|
|
|
@@ -110,12 +115,77 @@ public class CommonPushTaskStatsServiceImpl implements CommonPushTaskStatsServic
|
|
|
return commonPushVendorHttpClient.queryVivoStatistics(credential, firstTaskId);
|
|
|
case "xiaomi":
|
|
|
return commonPushVendorHttpClient.queryXiaomiStatistics(credential, firstTaskId);
|
|
|
+ case "huawei":
|
|
|
+ return queryHuaweiStatistics(pushTaskId, phoneType);
|
|
|
+ case "honor":
|
|
|
+ return queryHonorStatistics(pushTaskId, phoneType);
|
|
|
+ case "samsung":
|
|
|
+ return querySamsungStatistics(pushTaskId, phoneType);
|
|
|
+ case "apns":
|
|
|
+ return queryApnsStatistics(pushTaskId, phoneType);
|
|
|
default:
|
|
|
log.debug("渠道暂无统计查询接口, channelCode={}, taskId={}", channelCode, firstTaskId);
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 华为无厂商侧统计拉取 API,基于 common_push_task_user 回调数据聚合。
|
|
|
+ */
|
|
|
+ private CommonPushChannelStatsDto queryHuaweiStatistics(Long pushTaskId, String phoneType) {
|
|
|
+ return aggregateCallbackStatistics(pushTaskId, phoneType, "huawei");
|
|
|
+ }
|
|
|
+
|
|
|
+ private CommonPushChannelStatsDto queryHonorStatistics(Long pushTaskId, String phoneType) {
|
|
|
+ return aggregateCallbackStatistics(pushTaskId, phoneType, "honor");
|
|
|
+ }
|
|
|
+
|
|
|
+ private CommonPushChannelStatsDto querySamsungStatistics(Long pushTaskId, String phoneType) {
|
|
|
+ return aggregateCallbackStatistics(pushTaskId, phoneType, "samsung");
|
|
|
+ }
|
|
|
+
|
|
|
+ private CommonPushChannelStatsDto queryApnsStatistics(Long pushTaskId, String phoneType) {
|
|
|
+ return aggregateCallbackStatistics(pushTaskId, phoneType, "apns");
|
|
|
+ }
|
|
|
+
|
|
|
+ private CommonPushChannelStatsDto aggregateCallbackStatistics(Long pushTaskId, String phoneType,
|
|
|
+ String channelCode) {
|
|
|
+ if (pushTaskId == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ CommonPushTaskStatsDto stats = commonPushTaskUserMapper.selectStatsByTaskAndPhoneType(pushTaskId, phoneType);
|
|
|
+ if (isZeroStats(stats) && StringUtils.isNotBlank(phoneType)) {
|
|
|
+ stats = commonPushTaskUserMapper.selectStatsByTaskAndPhoneType(pushTaskId, null);
|
|
|
+ }
|
|
|
+ if (stats == null || isZeroStats(stats)) {
|
|
|
+ log.debug("回调统计无数据, channelCode={}, pushTaskId={}, phoneType={}", channelCode, pushTaskId, phoneType);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ CommonPushChannelStatsDto result = new CommonPushChannelStatsDto();
|
|
|
+ result.setRealSend(longToString(stats.getSentCount()));
|
|
|
+ result.setRealDelivered(longToString(stats.getDeliveredCount()));
|
|
|
+ result.setShowSum(longToString(stats.getShowCount()));
|
|
|
+ result.setClickSum(longToString(stats.getClickCount()));
|
|
|
+ log.info("回调统计聚合完成, channelCode={}, pushTaskId={}, phoneType={}, stats={}",
|
|
|
+ channelCode, pushTaskId, phoneType, result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isZeroStats(CommonPushTaskStatsDto stats) {
|
|
|
+ return longValue(stats.getSentCount()) == 0
|
|
|
+ && longValue(stats.getDeliveredCount()) == 0
|
|
|
+ && longValue(stats.getShowCount()) == 0
|
|
|
+ && longValue(stats.getClickCount()) == 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private long longValue(Long value) {
|
|
|
+ return value == null ? 0L : value;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String longToString(Long value) {
|
|
|
+ return value == null ? null : String.valueOf(value);
|
|
|
+ }
|
|
|
+
|
|
|
private void upsertTaskNum(CommonPushTask task, String phoneType, CommonPushChannelStatsDto stats) {
|
|
|
CommonPushTaskNum existing = commonPushTaskNumService.getOne(new LambdaQueryWrapper<CommonPushTaskNum>()
|
|
|
.eq(CommonPushTaskNum::getPushTaskId, task.getId())
|