|
@@ -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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|