|
@@ -8,6 +8,7 @@ import org.jebot.handler.AbstractHandler;
|
|
|
import org.jebot.handler.dto.BotMessage;
|
|
|
import org.jebot.models.xxpay.PayOrder;
|
|
|
import org.jebot.models.xxpay.PayPassage;
|
|
|
+import org.jebot.models.xxpay.PayProduct;
|
|
|
import org.jebot.repository.xxpay.PayOrderRepository;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -38,15 +39,17 @@ public class MerchantSuccessRateHandler extends AbstractHandler {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- List<Long> passageIds = new ArrayList<>(payOrderList.stream()
|
|
|
- .filter(order -> order.getPassageId() != null)
|
|
|
+ List<Long> productIds = new ArrayList<>(payOrderList.stream()
|
|
|
+ .filter(order -> order.getProductId() != null)
|
|
|
.collect(Collectors.toMap(
|
|
|
- PayOrder::getPassageId,
|
|
|
- PayOrder::getPassageId,
|
|
|
+ PayOrder::getProductId,
|
|
|
+ PayOrder::getProductId,
|
|
|
(existing, replacement) -> existing))
|
|
|
.values());
|
|
|
|
|
|
- List<PayPassage> passages = handlerManager.getPassageRepository().findByPassageIds(passageIds);
|
|
|
+ List<PayProduct> products = handlerManager.getProductRepository().findByProductIds(productIds);
|
|
|
+ ;
|
|
|
+// List<PayPassage> passages = handlerManager.getPassageRepository().findByPassageIds(passageIds);
|
|
|
StringBuilder result = new StringBuilder();
|
|
|
|
|
|
// 总单数和总金额
|
|
@@ -65,28 +68,45 @@ public class MerchantSuccessRateHandler extends AbstractHandler {
|
|
|
// result.append("有效单数: ").append(validOrderCount).append("\n");
|
|
|
// result.append("总金额: ").append(totalAmount.movePointLeft(Constant.AMOUNT_MOVE_POINT)).append("\n");
|
|
|
// result.append("有效金额: ").append(validAmount.movePointLeft(Constant.AMOUNT_MOVE_POINT)).append("\n");
|
|
|
-
|
|
|
+ // 按通道统计
|
|
|
+// for (PayPassage passage : passages) {
|
|
|
+// List<PayOrder> passageOrders = payOrderList.stream().filter(order -> passage.getId().equals(order.getPassageId())).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// // 统计不同时间段的成功率
|
|
|
+// double halfHourSuccessRate = calculateSuccessRate(passageOrders, halfHourAgo, currentTime);
|
|
|
+// double oneHourSuccessRate = calculateSuccessRate(passageOrders, oneHourAgo, currentTime);
|
|
|
+// double threeHourSuccessRate = calculateSuccessRate(passageOrders, threeHoursAgo, currentTime);
|
|
|
+// double dailySuccessRate = calculateSuccessRate(passageOrders, DateUtil.beginOfDay(currentTime), currentTime);
|
|
|
+//
|
|
|
+// result.append(passage.getPassageName()).append(":\n");
|
|
|
+// result.append(" 30分钟成功率: ").append(String.format("%.2f", halfHourSuccessRate)).append("%\n");
|
|
|
+// result.append(" 1小时成功率: ").append(String.format("%.2f", oneHourSuccessRate)).append("%\n");
|
|
|
+// result.append(" 3小时成功率: ").append(String.format("%.2f", threeHourSuccessRate)).append("%\n");
|
|
|
+// result.append(" 当日成功率: ").append(String.format("%.2f", dailySuccessRate)).append("%\n");
|
|
|
+// }
|
|
|
// 时间段
|
|
|
- Date halfHourAgo = DateUtil.offsetMinute(currentTime, -30);
|
|
|
+ Date fifteenMinutesAgo = DateUtil.offsetMinute(currentTime, -15);
|
|
|
+ Date thirtyMinutesAgo = DateUtil.offsetMinute(currentTime, -30);
|
|
|
Date oneHourAgo = DateUtil.offsetMinute(currentTime, -60);
|
|
|
- Date threeHoursAgo = DateUtil.offsetMinute(currentTime, -180);
|
|
|
|
|
|
- // 按通道统计
|
|
|
- for (PayPassage passage : passages) {
|
|
|
- List<PayOrder> passageOrders = payOrderList.stream().filter(order -> passage.getId().equals(order.getPassageId())).collect(Collectors.toList());
|
|
|
+ for (PayProduct product : products) {
|
|
|
+ List<PayOrder> productOrders = payOrderList.stream()
|
|
|
+ .filter(order -> product.getId().equals(order.getProductId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
// 统计不同时间段的成功率
|
|
|
- double halfHourSuccessRate = calculateSuccessRate(passageOrders, halfHourAgo, currentTime);
|
|
|
- double oneHourSuccessRate = calculateSuccessRate(passageOrders, oneHourAgo, currentTime);
|
|
|
- double threeHourSuccessRate = calculateSuccessRate(passageOrders, threeHoursAgo, currentTime);
|
|
|
- double dailySuccessRate = calculateSuccessRate(passageOrders, DateUtil.beginOfDay(currentTime), currentTime);
|
|
|
-
|
|
|
- result.append(passage.getPassageName()).append(":\n");
|
|
|
- result.append(" 30分钟成功率: ").append(String.format("%.2f", halfHourSuccessRate)).append("%\n");
|
|
|
+ double fifteenMinuteSuccessRate = calculateSuccessRate(productOrders, fifteenMinutesAgo, currentTime);
|
|
|
+ double thirtyMinuteSuccessRate = calculateSuccessRate(productOrders, thirtyMinutesAgo, currentTime);
|
|
|
+ double oneHourSuccessRate = calculateSuccessRate(productOrders, oneHourAgo, currentTime);
|
|
|
+ double dailySuccessRate = calculateSuccessRate(productOrders, DateUtil.beginOfDay(currentTime), currentTime);
|
|
|
+
|
|
|
+ result.append(product.getId() + "-" + product.getProductName()).append(":\n");
|
|
|
+ result.append(" 15分钟成功率: ").append(String.format("%.2f", fifteenMinuteSuccessRate)).append("%\n");
|
|
|
+ result.append(" 30分钟成功率: ").append(String.format("%.2f", thirtyMinuteSuccessRate)).append("%\n");
|
|
|
result.append(" 1小时成功率: ").append(String.format("%.2f", oneHourSuccessRate)).append("%\n");
|
|
|
- result.append(" 3小时成功率: ").append(String.format("%.2f", threeHourSuccessRate)).append("%\n");
|
|
|
result.append(" 当日成功率: ").append(String.format("%.2f", dailySuccessRate)).append("%\n");
|
|
|
}
|
|
|
+
|
|
|
botMessage.getTelegramBot().execute(new SendMessage(botMessage.getMessage().chat().id(), result.toString()));
|
|
|
return true;
|
|
|
}
|