处理OrderSplitRecord中值为0的数据

This commit is contained in:
Guoqs
2025-10-10 16:03:46 +08:00
parent 483e4fd40d
commit e7c780822c
7 changed files with 262 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ import com.jsowell.adapay.dto.SplitData;
import com.jsowell.adapay.response.PaymentConfirmResponse;
import com.jsowell.adapay.response.PaymentReverseResponse;
import com.jsowell.adapay.vo.OrderSplitResult;
import com.jsowell.adapay.vo.PaymentInfo;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
import com.jsowell.pile.domain.*;
@@ -215,8 +216,12 @@ public interface OrderBasicInfoService{
OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException;
List<PaymentInfo> getOrderPaymentInfoList(AfterSettleOrderDTO afterSettleOrderDTO);
PaymentConfirmResponse splittingMethod(AfterSettleOrderDTO afterSettleOrderDTO);
PaymentConfirmResponse splittingMethodTemp(AfterSettleOrderDTO afterSettleOrderDTO);
/**
* 计算分账数据
* @param stationSplitConfigList

View File

@@ -1,6 +1,7 @@
package com.jsowell.pile.service;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.jsowell.adapay.common.PaymentConfirmInfo;
import com.jsowell.adapay.dto.PaymentConfirmParam;
import com.jsowell.adapay.dto.SplitData;
import com.jsowell.adapay.response.PaymentConfirmResponse;
@@ -45,6 +46,8 @@ public interface OrderSplitRecordService {
*/
void saveOrderSplitRecord(PaymentConfirmParam param, PaymentConfirmResponse response, List<SplitData> stationSplitConfigList, OrderInfoDetailVO orderInfoDetailVO);
void saveOrderSplitRecordTemp(PaymentConfirmParam param, PaymentConfirmInfo response, List<SplitData> splitDataList, OrderInfoDetailVO orderInfoDetailVO);
List<OrderSplitRecordVO> selectByOrderCode(String orderCode);
/**

View File

@@ -2081,7 +2081,8 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
/**
* 获取订单待分账信息
*/
private List<PaymentInfo> getOrderPaymentInfoList(AfterSettleOrderDTO afterSettleOrderDTO) {
@Override
public List<PaymentInfo> getOrderPaymentInfoList(AfterSettleOrderDTO afterSettleOrderDTO) {
String orderCode = afterSettleOrderDTO.getOrderCode();
OrderBasicInfo orderBasicInfo = afterSettleOrderDTO.getOrderBasicInfo();
@@ -2193,6 +2194,102 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return paymentConfirmRequest;
}
/**
* 此方法只用来更新OrderSplitRecord
* @param afterSettleOrderDTO
* @return
*/
@Override
public PaymentConfirmResponse splittingMethodTemp(AfterSettleOrderDTO afterSettleOrderDTO) {
logger.info("处理OrderSplitRecord中值为0的数据, orderCode:{}, 分账金额:{}",
afterSettleOrderDTO.getOrderCode(), afterSettleOrderDTO.getOrderSettleAmount());
// 结算金额
BigDecimal orderSettleAmount = afterSettleOrderDTO.getOrderSettleAmount();
// 站点id
String stationId = afterSettleOrderDTO.getStationId();
// 订单编号
String orderCode = afterSettleOrderDTO.getOrderCode();
// 订单信息
OrderBasicInfo orderBasicInfo = afterSettleOrderDTO.getOrderBasicInfo();
// 保险金额(有默认值 0.00
BigDecimal insuranceAmount = orderBasicInfo.getInsuranceAmount();
// 订单是否需要分账, 结算金额必须大于0
if (orderSettleAmount == null || orderSettleAmount.compareTo(BigDecimal.ZERO) <= 0) {
logger.info("realTimeOrderSplit-订单[{}]结算金额[{}]必须大于0", afterSettleOrderDTO.getOrderCode(), orderSettleAmount);
return null;
}
// 获取订单待分账信息
List<PaymentInfo> paymentInfos = getOrderPaymentInfoList(afterSettleOrderDTO);
if (CollectionUtils.isEmpty(paymentInfos)) {
logger.info("realTimeOrderSplit-订单[{}]没有待分账的支付记录", afterSettleOrderDTO.getOrderCode());
return null;
}
// 根据站点id查询分账配置(如果未配置则初始化)
List<StationSplitConfig> stationSplitConfigList = stationSplitConfigService.queryByStationIdWithInit(stationId);
// 查字典是否开启收取平台支持服务费 1-开启; 0-关闭
String dictValue = DictUtils.getDictValue("platform_service_flag", "status");
if (StringUtils.equals(dictValue, Constants.ONE)) {
// 开启收取平台支持服务费, 更新参与分账的账户列表
updateSplitConfigList(stationId, stationSplitConfigList, orderCode);
}
// 计算每个参与分账的用户, 应分多少钱
List<SplitData> splitDataList = calculationSplitDataList(stationSplitConfigList, afterSettleOrderDTO);
List<DivMember> divMemberList = transformDivMemberList(splitDataList);
logger.info("realTimeOrderSplit-订单:{}, 分账信息:{}", orderCode, JSON.toJSONString(splitDataList));
// 执行分账
if (CollectionUtils.isEmpty(divMemberList)) {
logger.info("realTimeOrderSplit-订单[{}]分账信息为空", orderCode);
return null;
}
String paymentId = paymentInfos.get(0).getPaymentId(); // 支付id
String merchantId = afterSettleOrderDTO.getMerchantId(); // 运营商id
// 根据运营商id 查询appId
String appId = pileMerchantInfoService.queryAppIdByMerchantId(merchantId);
PaymentConfirmParam param = PaymentConfirmParam.builder()
.paymentId(paymentId)
.divMemberList(divMemberList)
.confirmAmt(orderSettleAmount.add(insuranceAmount)) // 订单结算金额 + 保险金额
.orderCode(orderCode)
.wechatAppId(appId)
.build();
// PaymentConfirmResponse paymentConfirmRequest = adapayService.createPaymentConfirmRequest(param);
// 查询支付确认id
QueryPaymentConfirmDTO queryPaymentConfirmDTO = new QueryPaymentConfirmDTO();
queryPaymentConfirmDTO.setPaymentId(paymentId);
queryPaymentConfirmDTO.setWechatAppId(Constants.DEFAULT_APP_ID);
QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(queryPaymentConfirmDTO);
String paymentConfirmId = response.getPaymentConfirms().get(0).getId();
// 查询支付确认id
QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO();
dto.setPaymentConfirmId(paymentConfirmId);
dto.setWechatAppId(Constants.DEFAULT_APP_ID);
// 查询分账信息
PaymentConfirmInfo paymentConfirmInfo = adapayService.queryPaymentConfirmDetail(dto);
// 如果之前存在订单分账记录, 则删除
// orderSplitRecordService.deleteOrderSplitRecord(orderCode);
// 保存订单分账记录
OrderInfoDetailVO orderInfoDetailVO = getOrderInfoDetailVO(orderCode);
orderSplitRecordService.saveOrderSplitRecordTemp(param, paymentConfirmInfo, splitDataList, orderInfoDetailVO);
return null;
}
/**
* 开启了收取平台支持服务费, 更新订单分账账户列表
* @param stationId

View File

@@ -6,10 +6,10 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.AdapayCommon;
import com.jsowell.adapay.common.PaymentConfirmInfo;
import com.jsowell.adapay.dto.PaymentConfirmParam;
import com.jsowell.adapay.dto.SplitData;
import com.jsowell.adapay.response.PaymentConfirmResponse;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.model.LoginUser;
import com.jsowell.common.core.page.PageResponse;
@@ -28,7 +28,6 @@ import com.jsowell.pile.dto.QueryOrderSplitDTO;
import com.jsowell.pile.dto.QueryOrderSplitRecordDTO;
import com.jsowell.pile.dto.SplitConfigStationDTO;
import com.jsowell.pile.dto.SplitOrderDTO;
import com.jsowell.pile.mapper.OrderBasicInfoMapper;
import com.jsowell.pile.mapper.OrderSplitRecordMapper;
import com.jsowell.pile.service.AdapayMemberAccountService;
import com.jsowell.pile.service.OrderSplitRecordService;
@@ -58,9 +57,6 @@ public class OrderSplitRecordServiceImpl implements OrderSplitRecordService {
@Autowired
private AdapayMemberAccountService adapayMemberAccountService;
@Autowired
private OrderBasicInfoMapper orderBasicInfoMapper;
@Override
public int batchInsert(List<OrderSplitRecord> list) {
return orderSplitRecordMapper.batchInsert(list);
@@ -115,6 +111,63 @@ public class OrderSplitRecordServiceImpl implements OrderSplitRecordService {
this.batchInsert(list);
}
/**
* 保存订单分账记录。临时保存
* @param param
* @param response
* @param splitDataList
* @param orderInfoDetailVO
*/
@Override
public void saveOrderSplitRecordTemp(PaymentConfirmParam param, PaymentConfirmInfo response, List<SplitData> splitDataList, OrderInfoDetailVO orderInfoDetailVO) {
// 判断入参
if (param == null || response == null || CollectionUtils.isEmpty(param.getDivMemberList()) || orderInfoDetailVO == null) {
return;
}
// response中status为failed 不保存
if (response.isFailed()) {
return;
}
String paymentConfirmId = response.getId(); // 支付确认id
String feeAmt = response.getFeeAmt(); // 手续费
String orderCode = param.getOrderCode(); // 订单号
BigDecimal settleAmount = param.getConfirmAmt(); // 结算金额
String paymentId = param.getPaymentId(); // 支付id
List<OrderSplitRecord> list = Lists.newArrayList(); // 订单分账记录集合
for (SplitData splitData : splitDataList) {
OrderSplitRecord orderSplitRecord = new OrderSplitRecord();
orderSplitRecord.setOrderCode(orderCode);
orderSplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue());
orderSplitRecord.setSettleAmount(settleAmount);
// orderSplitRecord.setTradeDate(DateUtils.getDate()); // 订单结算日期 yyyy-MM-dd
orderSplitRecord.setTradeDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, orderInfoDetailVO.getSettlementTime())); // 订单结算日期 yyyy-MM-dd
orderSplitRecord.setMerchantId(orderInfoDetailVO.getMerchantId());
orderSplitRecord.setStationId(orderInfoDetailVO.getStationId());
orderSplitRecord.setElectricityAmount(orderInfoDetailVO.getTotalElectricityAmount());
orderSplitRecord.setServiceAmount(orderInfoDetailVO.getTotalServiceAmount());
orderSplitRecord.setAdapayMemberId(splitData.getMemberId());
orderSplitRecord.setPaymentId(paymentId);
orderSplitRecord.setPaymentConfirmId(paymentConfirmId);
orderSplitRecord.setElectricitySplitRatio(splitData.getElecRatio() != null ? splitData.getElecRatio() : BigDecimal.ZERO);
orderSplitRecord.setElectricitySplitAmount(splitData.getElecAmount() != null ? splitData.getElecAmount() : BigDecimal.ZERO);
orderSplitRecord.setServiceSplitRatio(splitData.getServiceRatio() != null ? splitData.getServiceRatio() : BigDecimal.ZERO);
orderSplitRecord.setServiceSplitAmount(splitData.getServiceAmount() != null ? splitData.getServiceAmount() : BigDecimal.ZERO);
orderSplitRecord.setRemark("");
orderSplitRecord.setDelFlag(DelFlagEnum.NORMAL.getValue());
orderSplitRecord.setCreateBy(Constants.SYSTEM);
orderSplitRecord.setCreateTime(DateUtils.getNowDate());
// 如果是手续费承担方, 保存feeAmt, 否则保存0
if (StringUtils.equals(splitData.getFeeFlag(), Constants.Y)) {
orderSplitRecord.setFeeAmount(new BigDecimal(feeAmt));
} else {
orderSplitRecord.setFeeAmount(BigDecimal.ZERO);
}
list.add(orderSplitRecord);
}
log.info("保存:{}", list);
// this.batchInsert(list);
}
@Override
public List<OrderSplitRecordVO> selectByOrderCode(String orderCode) {
List<OrderSplitRecord> orderSplitRecords = orderSplitRecordMapper.selectByOrderCode(orderCode);