|
|
@@ -2,6 +2,8 @@ package com.kym.service.platform.impl;
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.extra.mail.MailUtil;
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
@@ -17,6 +19,7 @@ import com.kym.entity.common.RedisKeys;
|
|
|
import com.kym.entity.miniapp.Account;
|
|
|
import com.kym.entity.miniapp.ChargeOrder;
|
|
|
import com.kym.entity.miniapp.WalletDetail;
|
|
|
+import com.kym.entity.platform.PlatformCheckChargeOrders;
|
|
|
import com.kym.entity.platform.PlatformConnectorStatusInfo;
|
|
|
import com.kym.service.admin.ConnectorInfoService;
|
|
|
import com.kym.service.admin.EquipmentInfoService;
|
|
|
@@ -37,7 +40,10 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -340,6 +346,63 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
|
|
|
return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 推送订单对账结果信息(订单对账)
|
|
|
+ *
|
|
|
+ * @param platformName
|
|
|
+ * @param json
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String handleCheckChargeOrders(String platformName, JSONObject json) {
|
|
|
+ var dataStr = PlatformAesUtil.signValidation(platformName, json);
|
|
|
+ var data = JSONObject.parseObject(dataStr, PlatformCheckChargeOrders.class);
|
|
|
+ LOGGER.info("【{}互联互通平台推送】收到订单对账结果信息推送:{},解密数据:{}", platformName, json, data);
|
|
|
+
|
|
|
+ var startChargeSeqs = data.getCheckOrders().stream().map(PlatformCheckChargeOrders.PlatformCheckOrder::getStartChargeSeq).toList();
|
|
|
+ AtomicInteger disputeCount = new AtomicInteger();
|
|
|
+ var chargeOrdersMap = chargeOrderService.lambdaQuery().in(ChargeOrder::getStartChargeSeq, startChargeSeqs).list().stream().collect(Collectors.toMap(ChargeOrder::getStartChargeSeq, Function.identity()));
|
|
|
+ // 循环和map中的chargeOrder进行对比,如果订单的totalPower或者totalMoney不一致,则记录该订单
|
|
|
+ var res = data.getCheckOrders().stream().map(platformCheckOrder -> {
|
|
|
+ var disputeOrder = new PlatformCheckChargeOrders.DisputeOrder()
|
|
|
+ .setStartChargeSeq(platformCheckOrder.getStartChargeSeq());
|
|
|
+
|
|
|
+ var chargeOrder = chargeOrdersMap.get(platformCheckOrder.getStartChargeSeq());
|
|
|
+ if (chargeOrder == null) {
|
|
|
+ // 交易不存在
|
|
|
+ disputeCount.getAndIncrement();
|
|
|
+ disputeOrder.setDisputeReason(PlatformCheckChargeOrders.DisputeOrder.DISPUTE_REASON_TRANSACTION_NOT_EXIST);
|
|
|
+ } else {
|
|
|
+ if (!Objects.equals(chargeOrder.getTotalMoney(), platformCheckOrder.getTotalOrderMoney() * 100)) {
|
|
|
+ // 交易金额错误
|
|
|
+ disputeCount.getAndIncrement();
|
|
|
+ disputeOrder.setTotalMoney(Math.round(chargeOrder.getTotalMoney() / 100.0));
|
|
|
+ disputeOrder.setTotalPower(chargeOrder.getTotalPower());
|
|
|
+ disputeOrder.setDisputeReason(PlatformCheckChargeOrders.DisputeOrder.DISPUTE_REASON_TRANSACTION_MONEY_ERROR);
|
|
|
+ }
|
|
|
+ if (!Objects.equals(chargeOrder.getTotalPower(), platformCheckOrder.getTotalOrderPower())) {
|
|
|
+ // 交易电量错误
|
|
|
+ disputeCount.getAndIncrement();
|
|
|
+ disputeOrder.setTotalMoney(Math.round(chargeOrder.getTotalMoney() / 100.0));
|
|
|
+ disputeOrder.setTotalPower(chargeOrder.getTotalPower());
|
|
|
+ disputeOrder.setDisputeReason(PlatformCheckChargeOrders.DisputeOrder.DISPUTE_REASON_TRANSACTION_POWER_ERROR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return disputeOrder;
|
|
|
+ }).toList();
|
|
|
+
|
|
|
+ var params = Map.of(
|
|
|
+ "CheckOrderSeq", data.getCheckOrderSeq(),
|
|
|
+ "StartTime", data.getStartTime(),
|
|
|
+ "EndTime", data.getEndTime(),
|
|
|
+ "TotalDisputeOrder", disputeCount.get(),
|
|
|
+ "TotalDisputePower", res.stream().collect(Collectors.summarizingDouble(PlatformCheckChargeOrders.DisputeOrder::getTotalPower)),
|
|
|
+ "TotalDisputeMoney", res.stream().collect(Collectors.summarizingDouble(PlatformCheckChargeOrders.DisputeOrder::getTotalMoney)),
|
|
|
+ "DisputeOrders", JSONArray.parseArray(JSON.toJSONString(res))
|
|
|
+ );
|
|
|
+ var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
|
|
|
+ return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), JSON.toJSONString(params));
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 扣费等资金操作
|