From c3db9b920176cda3c506ae59c4fb1a3760bbdbbc Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 15:07:50 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E6=9B=B4=E6=96=B0adapayUnsplitRecor?= =?UTF-8?q?d=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/AdapayUnsplitRecordMapper.java | 5 +- .../pile/mapper/OrderBasicInfoMapper.java | 3 + .../service/AdapayUnsplitRecordService.java | 1 + .../pile/service/OrderBasicInfoService.java | 4 + .../impl/OrderBasicInfoServiceImpl.java | 7 +- .../pile/AdapayUnsplitRecordServiceImpl.java | 14 +- .../mapper/pile/AdapayUnsplitRecordMapper.xml | 7 + .../mapper/pile/OrderBasicInfoMapper.xml | 9 + .../com/jsowell/quartz/task/JsowellTask.java | 185 ++++++++++-------- 9 files changed, 144 insertions(+), 91 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java index 7e014ea21..50e148b84 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -1,9 +1,10 @@ package com.jsowell.pile.mapper; import com.jsowell.pile.domain.AdapayUnsplitRecord; -import java.util.List; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface AdapayUnsplitRecordMapper { int deleteByPrimaryKey(Integer id); @@ -26,4 +27,6 @@ public interface AdapayUnsplitRecordMapper { int updateBatchSelective(@Param("list") List list); int batchInsert(@Param("list") List list); + + List queryUnsplitOrders(@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/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 81a334f07..6bafa7a82 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 @@ -19,6 +19,7 @@ import org.springframework.stereotype.Repository; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; @Repository public interface OrderBasicInfoMapper { @@ -440,4 +441,6 @@ public interface OrderBasicInfoMapper { * @return List */ List selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto); + + List selectOrderTemp(@Param("orderCodes") Set orderCodes); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java index 8c9a42fcd..af3738bfb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java @@ -26,4 +26,5 @@ public interface AdapayUnsplitRecordService{ int batchInsert(List list); + List queryUnsplitOrders(String startTime, String endTime); } 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 aa85d1122..566a1d13a 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 @@ -32,6 +32,7 @@ import java.text.ParseException; import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.Set; public interface OrderBasicInfoService{ @@ -641,4 +642,7 @@ public interface OrderBasicInfoService{ OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto); + + // 临时接口, 查询订单信息 + List selectOrderTemp(Set orderCodes); } 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 54c55dab6..2baa39856 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 @@ -77,9 +77,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; @@ -6039,5 +6037,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return vo; } + + @Override + public List selectOrderTemp(Set orderCodes) { + return orderBasicInfoMapper.selectOrderTemp(orderCodes); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java index 08cabddd4..363164f25 100644 --- a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java @@ -1,13 +1,12 @@ package com.jsowell.web.controller.pile; -import org.springframework.stereotype.Service; - -import org.springframework.beans.factory.annotation.Autowired; - import com.jsowell.pile.domain.AdapayUnsplitRecord; -import java.util.List; import com.jsowell.pile.mapper.AdapayUnsplitRecordMapper; import com.jsowell.pile.service.AdapayUnsplitRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordService{ @@ -69,4 +68,9 @@ public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordServic return adapayUnsplitRecordMapper.batchInsert(list); } + @Override + public List queryUnsplitOrders(String startTime, String endTime) { + return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime); + } + } diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index acd84bb0f..767f9fae2 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -698,4 +698,11 @@ + + \ No newline at end of file diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index ea2b20d2a..1070f9d8d 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3495,4 +3495,13 @@ ORDER BY month ASC + diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index e7fba61ae..41af9a519 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -1,24 +1,18 @@ package com.jsowell.quartz.task; import com.google.common.collect.Lists; -import com.huifu.adapay.core.exception.BaseAdaPayException; -import com.jsowell.adapay.common.DivMember; -import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.dto.WithdrawDTO; -import com.jsowell.adapay.response.PaymentConfirmResponse; import com.jsowell.adapay.service.AdapayService; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; -import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; -import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.PageUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.spring.SpringUtils; +import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.OrderUnsplitRecord; import com.jsowell.pile.domain.PileMerchantInfo; import com.jsowell.pile.domain.PileStationInfo; import com.jsowell.pile.domain.ykcCommond.PublishPileBillingTemplateCommand; @@ -38,9 +32,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Component("jsowellTask") @@ -81,8 +73,11 @@ public class JsowellTask { @Autowired private ThirdPartyStationRelationService thirdPartyStationRelationService; + // @Autowired + // private OrderUnsplitRecordService orderUnsplitRecordService; + @Autowired - private OrderUnsplitRecordService orderUnsplitRecordService; + private AdapayUnsplitRecordService adapayUnsplitRecordService; /** * 设置挡板, PRE环境不执行 @@ -422,84 +417,108 @@ public class JsowellTask { // 查询未分帐订单 PageUtils.startPage(1, 1000); - List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); - } - - private void processUnSettledOrderOld() { - String startTime = "2023-01-01 00:00:00"; - String endTime = "2024-12-31 23:59:59"; - - // 使用redis控制请求api - Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65); - if (!setnx) { + List list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + if (CollectionUtils.isEmpty(list)) { return; } + // 转为map, key:orderCode, value:AdapayUnsplitRecord + Map map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v)); - // 查询未分帐订单 - PageUtils.startPage(1, 10); - List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + // 取keySet + Set orderCodes = map.keySet(); - log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size()); - int count = 0; - for (OrderUnsplitRecord orderUnsplitRecord : list) { - String paymentId = orderUnsplitRecord.getPaymentId(); - String orderCode = orderUnsplitRecord.getOrderCode(); - BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount(); + // 查询订单的退款金额与结算金额 + List orderList = orderBasicInfoService.selectOrderTemp(orderCodes); + // 转为map, key:orderCode, value:OrderBasicInfo + Map orderMap = orderList.stream().collect(Collectors.toMap(OrderBasicInfo::getOrderCode, v -> v)); - DivMember divMember = new DivMember(); - divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 - divMember.setAmount(AdapayUtil.formatAmount(confirmAmt)); - divMember.setFeeFlag(Constants.Y); - - PaymentConfirmParam param = PaymentConfirmParam.builder() - .paymentId(paymentId) - .divMemberList(Lists.newArrayList(divMember)) - .confirmAmt(confirmAmt) - .orderCode(orderCode) - .wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId - .build(); - // 延时分账,使用确认交易API - PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param); - - // 如果确认交易成功,则更新订单状态为已分账 - if (paymentConfirmResponse.isSuccess()) { - count++; - orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); - orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); - log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); - } else { - // error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额 - if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) { - // 查询paymentId的总分账金额 - BigDecimal totalSplitAmount; - try { - totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId); - } catch (BaseAdaPayException e) { - throw new RuntimeException(e); - } - if (totalSplitAmount.compareTo(confirmAmt) == 0) { - // 如果总分账金额等于当前分账金额,则更新订单状态为已分账 - orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); - orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); - log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); - } else { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - } - } - - // error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试 - if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - break; - } - // error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁 - if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - break; - } - } + List updateList = new ArrayList<>(); + //更新map + for (String orderCode : orderCodes) { + OrderBasicInfo orderBasicInfo = orderMap.get(orderCode); + AdapayUnsplitRecord adapayUnsplitRecord = map.get(orderCode); + adapayUnsplitRecord.setDueRefundAmount(orderBasicInfo.getRefundAmount()); + adapayUnsplitRecord.setSettleAmount(orderBasicInfo.getSettleAmount()); + updateList.add(adapayUnsplitRecord); } - log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count); + adapayUnsplitRecordService.updateBatchSelective(updateList); } + // private void processUnSettledOrderOld() { + // String startTime = "2023-01-01 00:00:00"; + // String endTime = "2024-12-31 23:59:59"; + // + // // 使用redis控制请求api + // Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65); + // if (!setnx) { + // return; + // } + // + // // 查询未分帐订单 + // PageUtils.startPage(1, 10); + // List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + // + // log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size()); + // int count = 0; + // for (OrderUnsplitRecord orderUnsplitRecord : list) { + // String paymentId = orderUnsplitRecord.getPaymentId(); + // String orderCode = orderUnsplitRecord.getOrderCode(); + // BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount(); + // + // DivMember divMember = new DivMember(); + // divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 + // divMember.setAmount(AdapayUtil.formatAmount(confirmAmt)); + // divMember.setFeeFlag(Constants.Y); + // + // PaymentConfirmParam param = PaymentConfirmParam.builder() + // .paymentId(paymentId) + // .divMemberList(Lists.newArrayList(divMember)) + // .confirmAmt(confirmAmt) + // .orderCode(orderCode) + // .wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId + // .build(); + // // 延时分账,使用确认交易API + // PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param); + // + // // 如果确认交易成功,则更新订单状态为已分账 + // if (paymentConfirmResponse.isSuccess()) { + // count++; + // orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); + // orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); + // log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); + // } else { + // // error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额 + // if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) { + // // 查询paymentId的总分账金额 + // BigDecimal totalSplitAmount; + // try { + // totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId); + // } catch (BaseAdaPayException e) { + // throw new RuntimeException(e); + // } + // if (totalSplitAmount.compareTo(confirmAmt) == 0) { + // // 如果总分账金额等于当前分账金额,则更新订单状态为已分账 + // orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); + // orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); + // log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); + // } else { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // } + // } + // + // // error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试 + // if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // break; + // } + // // error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁 + // if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // break; + // } + // } + // } + // log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count); + // } + }