Bladeren bron

一键结算通道修复

LiYi 1 week geleden
bovenliggende
commit
eee72cc8bc

+ 97 - 2
src/main/java/org/jebot/handler/impl/merchant/MerchantOneClickSettlementHandler.java

@@ -184,7 +184,7 @@ public class MerchantOneClickSettlementHandler extends AbstractHandler {
                         return false;
                     }
 
-                    if (SettlementMch(message, mchGroup, payOrderList, todayMidnight, endDate)) {
+                    if (SettlementPassage(message, mchGroup, payOrderList, todayMidnight, endDate)) {
                         messageText.append(mchAccount.getPassageName()).append(": 结算成功\n");
                     } else {
                         messageText.append(mchAccount.getPassageName()).append(": 结算失败\n");
@@ -214,7 +214,7 @@ public class MerchantOneClickSettlementHandler extends AbstractHandler {
                     log.error("一键通道结算发送消息失败, 错误信息: {}", execute.description());
                 } else {
                     //记录结算记录
-                    log.info("一键通道结算发送消息成功, 群组ID: {}, 结算记录: {}", message.getMessage().chat().id(), "没有商户群组");
+                    log.info("一键通道结算发送消息成功, 群组ID: {}, 结算记录: {}", message.getMessage().chat().id(), "没有通道群组");
                 }
             }
             return true;
@@ -340,4 +340,99 @@ public class MerchantOneClickSettlementHandler extends AbstractHandler {
         }
     }
 
+
+    private boolean SettlementPassage(BotMessage message, BotGroup mchGroup, List<PayOrder> payOrderList, Date todayMidnight, Date endDate) {
+
+        StringBuilder stringBuilder = new StringBuilder();
+
+        // 计算总金额(未扣手续费)
+        BigDecimal totalAmount = payOrderList.stream()
+                .map(PayOrder::getAmount)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 成功总笔数
+        long totalOrders = payOrderList.size();
+
+        // 扣除手续费后的总跑量
+        BigDecimal totalAmountByMchRate = payOrderList.stream()
+                .map(order -> BigDecimal.ONE
+                        .subtract(order.getMchRate().movePointLeft(Constant.AMOUNT_MOVE_POINT))
+                        .multiply(order.getAmount()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        stringBuilder.append(DateUtil.formatDate(endDate)).append("账单,请核对:\n");
+        stringBuilder.append("总跑量: ").append(totalAmount.movePointLeft(Constant.AMOUNT_MOVE_POINT).doubleValue()).append("\n");
+        stringBuilder.append("成功笔数: ").append(totalOrders).append("\n");
+        stringBuilder.append("扣除手续费总跑量: ").append(totalAmountByMchRate.movePointLeft(Constant.AMOUNT_MOVE_POINT).doubleValue()).append("\n");
+
+        // 扣除金额(手续费)
+        // 下发金额 = 总跑量 - 手续费
+        BigDecimal deductionAmount = totalAmountByMchRate.movePointLeft(Constant.AMOUNT_MOVE_POINT);
+
+        // ================= 发送账单 =================
+        SendMessage sendMessage = new SendMessage(mchGroup.getGroupId(), stringBuilder.toString());
+        SendResponse execute = message.getTelegramBot().execute(sendMessage);
+        if (!execute.isOk()) {
+            log.error("一键结算发送消息失败, 错误信息: {}", execute.description());
+            return false;
+        } else {
+            // ================= 更新商户账本 =================
+            BotAccountBook accountBook = handlerManager.getAccountBookRepository()
+                    .findByBelongIdAndType(mchGroup.getDataId(), DATA_TYPE_MERCHANT);
+
+            if (accountBook == null) {
+                accountBook = new BotAccountBook();
+                accountBook.setBelongId(mchGroup.getDataId());
+                accountBook.setType(DATA_TYPE_MERCHANT);
+                accountBook.setPaymentBalance(0);
+                accountBook.setAgentBalance(0);
+                handlerManager.getAccountBookRepository().save(accountBook);
+            }
+
+            log.info("一键结算发送消息成功, 群组ID: {}, 结算记录: {}", mchGroup.getGroupId(), stringBuilder.toString());
+
+            double oldPaymentBalance = accountBook.getPaymentBalance();
+            double newPaymentBalance = BigDecimal.valueOf(oldPaymentBalance)
+                    .subtract(deductionAmount).doubleValue();
+
+            BotMessage botMessage = new BotMessage();
+            botMessage.setBotGroup(mchGroup);
+            botMessage.setBotUser(message.getBotUser());
+
+            try {
+                UpdateBalance updateMerchantPaymentBalance = new UpdateBalance();
+                updateMerchantPaymentBalance.setId(accountBook.getId());
+                updateMerchantPaymentBalance.setOldBalance(oldPaymentBalance);
+                updateMerchantPaymentBalance.setNewBalance(newPaymentBalance);
+                updateMerchantPaymentBalance.setAmount(deductionAmount.doubleValue());
+                updateMerchantPaymentBalance.setMessage(botMessage);
+
+                handlerManager.getAccountBookService()
+                        .updatePaymentBalanceByIdAndPaymentBalance(updateMerchantPaymentBalance);
+
+                sendMessage = new SendMessage(mchGroup.getGroupId(),
+                        String.format("下发提醒\n下发金额: %.2f\n下发前: %.2f\n下发后: %.2f",
+                                deductionAmount.doubleValue(), oldPaymentBalance, newPaymentBalance));
+
+            } catch (Exception e) {
+                log.error("更新商户群组账本失败,群组ID:{},群组名称:{},用户ID:{},用户名称:{},金额:{},错误信息:{}",
+                        message.getBotGroup().getDataId(),
+                        message.getBotGroup().getDataName(),
+                        message.getBotUser().getUserId(),
+                        message.getBotUser().getUserName(),
+                        deductionAmount.doubleValue(),
+                        e.getMessage());
+                e.printStackTrace();
+                sendMessage = new SendMessage(message.getMessage().chat().id(),
+                        "下发处理失败,请手动处理");
+            } finally {
+                if (sendMessage != null) {
+                    message.getTelegramBot().execute(sendMessage);
+                    log.info("一键结算发送消息成功, 群组ID: {}, 结算记录: {}", message.getMessage().chat().id(), sendMessage);
+                }
+            }
+            return true;
+        }
+    }
+
 }

+ 1 - 1
src/main/java/org/jebot/models/xxpay/PayPassage.java

@@ -26,5 +26,5 @@ public class PayPassage {
     private int status;      // 通道ID 通道状态,0-关闭,1-开启
 
     @Column(name = "Codepro")
-    private int codepro;      // 码商id
+    private Long codepro;      // 码商id
 }

+ 1 - 1
src/main/java/org/jebot/repository/jebot/BotGroupRepository.java

@@ -48,7 +48,7 @@ public interface BotGroupRepository extends JpaRepository<BotGroup, Long> {
     @Query("UPDATE bot_group g SET g.agentWarningThreshold =:agentWarningThresholdNew WHERE g.id =:id ")
     void updateAgentWarningThresholdByIdAndAgentWarningThreshold(@Param("agentWarningThresholdNew") double agentWarningThresholdNew, @Param("id") Long id);
 
-    @Query("SELECT g FROM bot_group g WHERE g.agentWarningThreshold >0 or g.paymentWarningThreshold >0")
+    @Query("SELECT g FROM bot_group g WHERE g.agentWarningThreshold >=0 or g.paymentWarningThreshold >=0")
     List<BotGroup> findAllByAgentWarningThresholdOrPaymentWarningThresholdGreaterThanZero();
 
 }