From 9b966b43aeb3dc75130791fd98a67946eb21ec19 Mon Sep 17 00:00:00 2001 From: Lemon Date: Fri, 4 Jul 2025 13:55:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 19 +++++ .../java/com/jsowell/service/TempService.java | 41 ++++++++++ .../pile/mapper/OrderBasicInfoMapper.java | 9 +++ .../pile/service/OrderBasicInfoService.java | 4 + .../impl/OrderBasicInfoServiceImpl.java | 74 +++++++++++++++++++ .../mapper/pile/OrderBasicInfoMapper.xml | 11 +++ .../thirdparty/platform/dto/PushOrderDTO.java | 26 +++++++ 7 files changed, 184 insertions(+) create mode 100644 jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 806a71c43..f8d840cda 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -25,6 +25,7 @@ import com.jsowell.pile.vo.uniapp.customer.MemberBalanceVO; import com.jsowell.pile.vo.web.PileStationVO; import com.jsowell.service.OrderService; import com.jsowell.service.TempService; +import com.jsowell.thirdparty.platform.dto.PushOrderDTO; import org.apache.commons.collections4.CollectionUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; @@ -890,4 +891,22 @@ public class TempController extends BaseController { } return response; } + + /** + * 根据时间区间批量推送订单 + * @param dto + * @return + */ + @PostMapping("/pushOrderInfoBatch") + public RestApiResponse pushOrderInfoBatch(@RequestBody PushOrderDTO dto) { + RestApiResponse response = null; + try { + tempService.pushOrderInfoBatch(dto); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("青海平台推送订单信息 error", e); + } + logger.info("青海平台推送订单信息 result:{}", response); + return response; + } } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index 91ff8786b..e6f79d192 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -22,6 +22,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; +import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; @@ -34,7 +35,13 @@ import com.jsowell.pile.service.programlogic.AbstractProgramLogic; import com.jsowell.pile.service.programlogic.ProgramLogicFactory; import com.jsowell.pile.transaction.dto.OrderTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; +import com.jsowell.pile.vo.ThirdPartySecretInfoVO; +import com.jsowell.pile.vo.base.StationInfoVO; +import com.jsowell.pile.vo.uniapp.business.BusinessOrderDetailInfoVO; import com.jsowell.pile.vo.web.*; +import com.jsowell.thirdparty.common.CommonService; +import com.jsowell.thirdparty.platform.dto.PushOrderDTO; +import com.jsowell.thirdparty.service.ThirdpartySecretInfoService; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -117,6 +124,15 @@ public class TempService { @Autowired private OrderUnsplitRecordService orderUnsplitRecordService; + @Autowired + private ThirdpartySecretInfoService thirdpartySecretInfoService; + + @Autowired + private ThirdPartyStationRelationService thirdPartyStationRelationService; + + @Autowired + private CommonService commonService; + /** * 计算订单耗电量 * 内蒙古站点 @@ -1212,5 +1228,30 @@ public class TempService { rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); } + + /** + * 根据时间区间批量推送订单 + * @param dto + * @return + */ + public void pushOrderInfoBatch(PushOrderDTO dto) { + // 根据type查出对接的stationIds + List stationInfoVOS = thirdPartyStationRelationService.selectStationList(dto.getThirdPartyType()); + + List stationIds = stationInfoVOS.stream() + .map(StationInfoVO::getStationId) + .collect(Collectors.toList()); + + // 批量查询需要推送的订单 + List orderInfos = orderBasicInfoService.getOrderBasicInfoByTimeInterval(stationIds, dto.getStartTime(), dto.getEndTime()); + + if (CollectionUtils.isEmpty(orderInfos)) { + return; + } + orderInfos.forEach(orderBasicInfo -> { + // 推送第三方平台 + commonService.commonPushOrderInfoV2(orderBasicInfo); + }); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index ffe3dc643..09ae7ba91 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -405,4 +405,13 @@ public interface OrderBasicInfoMapper { List selectThirdPartyOrderList(@Param("dto") QueryStartChargeDTO dto); LocalDateTime queryOrderCreateTimeByStationId(String id); + + /** + * 根据参数查询订单基本信息 + * @param stationIds + * @param startTime + * @param endTime + * @return + */ + List getOrderBasicInfoByTimeInterval(@Param("stationIds") List stationIds, @Param("startTime") String startTime, @Param("endTime") String endTime); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index ae7f93b07..3f03c2afb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -231,6 +231,8 @@ public interface OrderBasicInfoService{ OrderSplitResult verifyOrderConfirmAmount(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; + OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException; + /** * 批量查询订单 * @param orderCodeList @@ -573,4 +575,6 @@ public interface OrderBasicInfoService{ * @return */ Map verifyMergeChargeOrder(VerifyMergeChargeOrderDTO dto) throws Exception; + + List getOrderBasicInfoByTimeInterval(List stationIds, String startTime, String endTime); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 89dfdc78d..fe14725b5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -2439,6 +2439,75 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return result; } + /** + * 校验订单分账金额(其他部分与上面方法一致,此方法仅加了撤销分账部分,只给临时接口用) + * + * @param paymentIds 支付id集合 + * @param orderCode 订单编号 + * @param settleAmount 结算金额 + */ + @Override + public OrderSplitResult verifyOrderConfirmAmountWithCancelSplit(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException { + // 分账金额 + BigDecimal totalConfirmAmt = BigDecimal.ZERO; + // 手续费 + BigDecimal feeAmt = BigDecimal.ZERO; + // 通过支付id查询分账情况 + for (String paymentId : paymentIds) { + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setPaymentId(paymentId); + dto.setWechatAppId(wechatAppId); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + if (response != null) { + List confirms = response.getPaymentConfirms(); + if (CollectionUtils.isNotEmpty(confirms)) { + for (PaymentConfirmInfo confirm : confirms) { + // 校验分账是否撤销 + if (queryConfirmReverseStatus(confirm.getId(), wechatAppId)) { + logger.info("支付确认id:" + confirm.getId() + "撤销了。。。"); + continue; + } + // 如果没有撤销,先撤销分账,再重新进行分账 + adapayService.createConfirmReverse(confirm.getId(), wechatAppId); + + JSONObject jsonObject = JSON.parseObject(confirm.getDescription()); + if (StringUtils.equals(jsonObject.getString("orderCode"), orderCode)) { + // 订单号对的上,累计分账金额 + BigDecimal confirmAmt = new BigDecimal(confirm.getConfirmAmt()); + BigDecimal confirmedAmt = new BigDecimal(confirm.getConfirmedAmt()); + BigDecimal orderConfirmedAmt = confirmedAmt.compareTo(BigDecimal.ZERO) == 0 + ? confirmedAmt + : confirmAmt; + totalConfirmAmt = totalConfirmAmt.add(orderConfirmedAmt); + feeAmt = feeAmt.add(new BigDecimal(confirm.getFeeAmt())); + } + } + } + } + } + + OrderSplitResult result = new OrderSplitResult(); + result.setOrderCode(orderCode); + result.setSettleAmt(settleAmount.toString()); + result.setConfirmAmt(totalConfirmAmt.toString()); + if (totalConfirmAmt.compareTo(BigDecimal.ZERO) == 0) { + feeAmt = BigDecimal.ZERO; + } + result.setFeeAmt(feeAmt.toString()); + String status; + // 如果确认金额和结算金额相等,返回succeeded,其他情况返回PENDING + if (settleAmount.compareTo(totalConfirmAmt) == 0) { + // 返回succeeded 标识该笔订单已经完成了分账,不要再次执行分账 + status = AdapayStatusEnum.SUCCEEDED.getValue(); + } else { + status = AdapayStatusEnum.PENDING.getValue(); + } + result.setStatus(status); + logger.info("校验订单分账金额-orderCode:{}, 分账结果:{}", orderCode, JSON.toJSONString(result)); + return result; + } + + /** * 查询分账撤销状态 */ @@ -5240,5 +5309,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return map; } + + @Override + public List getOrderBasicInfoByTimeInterval(List stationIds, String startTime, String endTime) { + return orderBasicInfoMapper.getOrderBasicInfoByTimeInterval(stationIds, startTime, endTime); + } } diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index ba628b96c..4a677e0ee 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3291,4 +3291,15 @@ LIMIT 1; + diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java new file mode 100644 index 000000000..235406240 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/PushOrderDTO.java @@ -0,0 +1,26 @@ +package com.jsowell.thirdparty.platform.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 推送订单DTO + * + * @author Lemon + * @Date 2025/7/4 13:31:28 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PushOrderDTO { + private String thirdPartyType; + + private String orderCodeList; + + private String startTime; + + private String endTime; +}