update 添加临时方法,更新adapayUnsplitRecord数据

This commit is contained in:
Guoqs
2025-11-14 15:07:50 +08:00
parent 2b33a7a845
commit c3db9b9201
9 changed files with 144 additions and 91 deletions

View File

@@ -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<AdapayUnsplitRecord> list);
int batchInsert(@Param("list") List<AdapayUnsplitRecord> list);
List<AdapayUnsplitRecord> queryUnsplitOrders(@Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -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<OrderMonthStatVO>
*/
List<OrderMonthStatVO> selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto);
List<OrderBasicInfo> selectOrderTemp(@Param("orderCodes") Set<String> orderCodes);
}

View File

@@ -26,4 +26,5 @@ public interface AdapayUnsplitRecordService{
int batchInsert(List<AdapayUnsplitRecord> list);
List<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime);
}

View File

@@ -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<OrderBasicInfo> selectOrderTemp(Set<String> orderCodes);
}

View File

@@ -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<OrderBasicInfo> selectOrderTemp(Set<String> orderCodes) {
return orderBasicInfoMapper.selectOrderTemp(orderCodes);
}
}

View File

@@ -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<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime) {
return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime);
}
}

View File

@@ -698,4 +698,11 @@
</if>
</trim>
</insert>
<select id="queryUnsplitOrders" resultMap="BaseResultMap">
select * from adapay_unsplit_record
where pay_time >= #{startTime} and pay_time &lt;= #{endTime}
and due_refund_amount is null
and settle_amount is null
</select>
</mapper>

View File

@@ -3495,4 +3495,13 @@
ORDER BY month ASC
</select>
<select id="selectOrderTemp" resultMap="BaseResultMap">
select
order_code, refund_amount, settle_amount
from order_basic_info
where order_code in
<foreach item="item" collection="orderCodes" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View File

@@ -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<OrderUnsplitRecord> 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<AdapayUnsplitRecord> list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
if (CollectionUtils.isEmpty(list)) {
return;
}
// 转为map, key:orderCode, value:AdapayUnsplitRecord
Map<String, AdapayUnsplitRecord> map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v));
// 查询未分帐订单
PageUtils.startPage(1, 10);
List<OrderUnsplitRecord> list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
// 取keySet
Set<String> 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<OrderBasicInfo> orderList = orderBasicInfoService.selectOrderTemp(orderCodes);
// 转为map, key:orderCode, value:OrderBasicInfo
Map<String, OrderBasicInfo> 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<AdapayUnsplitRecord> 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<OrderUnsplitRecord> 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);
// }
}