mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 19:45:09 +08:00
处理OrderSplitRecord中值为0的数据
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user