mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-19 18:45:03 +08:00
update
This commit is contained in:
@@ -225,7 +225,7 @@ public class TempController extends BaseController {
|
||||
public RestApiResponse<?> testCreateBalancePayment(@RequestBody BalancePaymentRequestDTO dto) {
|
||||
RestApiResponse<?> response = null;
|
||||
try {
|
||||
adapayMemberService.createBalancePaymentRequest(dto.getOutMemberId(), dto.getInMemberId(), dto.getTransAmt());
|
||||
adapayMemberService.createBalancePaymentRequest(dto.getOutMemberId(), dto.getInMemberId(), dto.getTransAmt(), "测试余额支付", "测试余额支付描述");
|
||||
response = new RestApiResponse<>();
|
||||
} catch (BusinessException e) {
|
||||
logger.warn("测试余额支付接口warn", e);
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.jsowell.adapay.response;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class BalancePaymentResponse {
|
||||
/**
|
||||
* 当前交易结果状态,参见 状态 说明
|
||||
*/
|
||||
private String status;
|
||||
|
||||
private String error_code;
|
||||
private String error_msg;
|
||||
private String error_type;
|
||||
|
||||
/**
|
||||
* 商户客户号
|
||||
*/
|
||||
private String mer_cust_id;
|
||||
|
||||
/**
|
||||
*
|
||||
* 应用ID
|
||||
*/
|
||||
private String app_id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String order_no;
|
||||
|
||||
/**
|
||||
* 交易金额
|
||||
*/
|
||||
private String trans_amt;
|
||||
|
||||
/**
|
||||
* 手续费
|
||||
*/
|
||||
private String fee_amt;
|
||||
|
||||
/**
|
||||
* 余额支付流水号
|
||||
*/
|
||||
private String balance_seq_id;
|
||||
|
||||
/**
|
||||
* 支付模式
|
||||
*/
|
||||
private String pay_mode;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.huifu.adapay.model.*;
|
||||
import com.jsowell.adapay.dto.SettleAccountDTO;
|
||||
import com.jsowell.adapay.dto.UpdateAccountConfigDTO;
|
||||
import com.jsowell.adapay.dto.WithdrawDTO;
|
||||
import com.jsowell.adapay.response.BalancePaymentResponse;
|
||||
import com.jsowell.adapay.response.QueryCorpMemberResponse;
|
||||
import com.jsowell.adapay.response.QueryMemberResponse;
|
||||
import com.jsowell.adapay.vo.AdapayAccountBalanceVO;
|
||||
@@ -17,6 +18,7 @@ import com.jsowell.adapay.vo.AdapayMemberInfoVO;
|
||||
import com.jsowell.adapay.vo.AdapaySettleAccountVO;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.enums.DelFlagEnum;
|
||||
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.AdapayUtil;
|
||||
@@ -453,7 +455,7 @@ public class AdapayMemberService {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_MEMBER_IS_NULL_ERROR);
|
||||
}
|
||||
|
||||
// 提现手续费 每笔固定10元
|
||||
// 提现手续费 每笔固定5元
|
||||
BigDecimal feeAmt = new BigDecimal("5");
|
||||
|
||||
// 实际提现到账金额
|
||||
@@ -484,7 +486,7 @@ public class AdapayMemberService {
|
||||
String id = (String) settleCount.get("id");
|
||||
|
||||
// 发起支付手续费请求 inMemberId为0表示本商户
|
||||
createBalancePaymentRequest(adapayAccountBalanceVO.getAdapayMemberId(), Constants.ZERO, feeAmt.toString());
|
||||
createBalancePaymentRequest(adapayAccountBalanceVO.getAdapayMemberId(), Constants.ZERO, feeAmt.toString(), "提现手续费", "提现单号:" + id);
|
||||
|
||||
// 保存提现记录
|
||||
ClearingWithdrawInfo record = new ClearingWithdrawInfo();
|
||||
@@ -538,7 +540,7 @@ public class AdapayMemberService {
|
||||
log.info("更新企业账户param:{}", memberParams);
|
||||
Map<String, Object> member = AdapayCommon.requestAdapayFile(memberParams, file);
|
||||
log.info("更新企业账户result:{}", JSON.toJSONString(member));
|
||||
if (StringUtils.equals((String) member.get("status"), "failed")) {
|
||||
if (AdapayStatusEnum.FAILED.getValue().equals((String) member.get("status"))) {
|
||||
throw new BusinessException("", (String) member.get("error_msg"));
|
||||
}
|
||||
return null;
|
||||
@@ -549,8 +551,10 @@ public class AdapayMemberService {
|
||||
* @param outMemberId 出账用户的member_id, 若为商户本身时,请传入0
|
||||
* @param inMemberId 入账用户的member_id, 若为商户本身时,请传入0
|
||||
* @param transAmt 交易金额, 必须大于0,保留两位小数点,如0.10、100.05等
|
||||
* @param title 标题
|
||||
* @param desc 描述信息
|
||||
*/
|
||||
public void createBalancePaymentRequest(String outMemberId, String inMemberId, String transAmt) throws BaseAdaPayException {
|
||||
public BalancePaymentResponse createBalancePaymentRequest(String outMemberId, String inMemberId, String transAmt, String title, String desc) throws BaseAdaPayException {
|
||||
Map<String, Object> balanceParam = Maps.newHashMap();
|
||||
balanceParam.put("app_id", ADAPAY_APP_ID);
|
||||
balanceParam.put("adapay_func_code", "settle_accounts.balancePay");
|
||||
@@ -558,10 +562,11 @@ public class AdapayMemberService {
|
||||
balanceParam.put("out_member_id", outMemberId);
|
||||
balanceParam.put("in_member_id", inMemberId);
|
||||
balanceParam.put("trans_amt", AdapayUtil.formatAmount(transAmt));
|
||||
balanceParam.put("goods_title", "测试余额支付");
|
||||
balanceParam.put("goods_desc", "该商品信息用于测试余额支付");
|
||||
balanceParam.put("goods_title", title);
|
||||
balanceParam.put("goods_desc", desc);
|
||||
Map<String, Object> paymentResult = AdapayCommon.requestAdapay(balanceParam);
|
||||
log.info("创建余额支付param:{}, result:{}", JSON.toJSONString(balanceParam), JSON.toJSONString(paymentResult));
|
||||
return JSONObject.parseObject(JSON.toJSONString(paymentResult), BalancePaymentResponse.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,7 +16,9 @@ import com.huifu.adapay.model.PaymentReverse;
|
||||
import com.huifu.adapay.model.Refund;
|
||||
import com.jsowell.adapay.common.CreateAdaPaymentParam;
|
||||
import com.jsowell.adapay.common.DivMember;
|
||||
import com.jsowell.adapay.response.BalancePaymentResponse;
|
||||
import com.jsowell.adapay.response.PaymentConfirmResponse;
|
||||
import com.jsowell.adapay.service.AdapayMemberService;
|
||||
import com.jsowell.adapay.vo.OrderSettleResult;
|
||||
import com.jsowell.common.constant.CacheConstants;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
@@ -41,10 +43,8 @@ import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.transaction.dto.ClearingBillTransactionDTO;
|
||||
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
|
||||
import com.jsowell.pile.transaction.service.TransactionService;
|
||||
import com.jsowell.pile.vo.base.MerchantOrderInfoVO;
|
||||
import com.jsowell.pile.vo.base.OrderAmountDetailVO;
|
||||
import com.jsowell.pile.vo.base.OrderPeriodAmountVO;
|
||||
import com.jsowell.pile.vo.base.PileInfoVO;
|
||||
import com.jsowell.pile.vo.base.*;
|
||||
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.*;
|
||||
import com.jsowell.pile.vo.web.*;
|
||||
@@ -167,6 +167,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
@Autowired
|
||||
private IPileStationWhitelistService pileStationWhitelistService;
|
||||
|
||||
@Autowired
|
||||
private AdapayMemberService adapayMemberService;
|
||||
|
||||
/**
|
||||
* 条件查询订单基本信息
|
||||
*
|
||||
@@ -928,11 +931,15 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// 执行分账
|
||||
for (OrderBasicInfo orderBasicInfo : orderBasicInfos) {
|
||||
try {
|
||||
OrderSettleResult orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount);
|
||||
OrderSettleResult orderSettleResult = null;
|
||||
if (PayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 余额支付的订单 只用余额支付转账
|
||||
orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount);
|
||||
} else {
|
||||
// 在线支付,进行支付确认分账
|
||||
orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount);
|
||||
}
|
||||
if (orderSettleResult != null && AdapayStatusEnum.SUCCEEDED.getValue().equals(orderSettleResult.getStatus())) {
|
||||
JSONObject jsonObject = JSON.parseObject(orderSettleResult.getDescription());
|
||||
String orderCode = (String) jsonObject.get("orderCode");
|
||||
|
||||
// 应收金额 = 订单结算金额汇总
|
||||
receivableAmount = receivableAmount.add(orderBasicInfo.getSettleAmount());
|
||||
// 应清分金额 = 订单产生的电费+服务费实际消费 汇总
|
||||
@@ -948,7 +955,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
ClearingBillDetail clearingBillDetail = ClearingBillDetail.builder()
|
||||
.clearingBillCode(clearingBillCode)
|
||||
.orderCode(orderCode)
|
||||
.orderCode(orderBasicInfo.getOrderCode())
|
||||
.createTime(DateUtils.getNowDate())
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build();
|
||||
@@ -1014,28 +1021,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 清分账单信息
|
||||
// ClearingBillInfo clearingBillInfo = new ClearingBillInfo();
|
||||
// clearingBillInfo.setBillStatus("1");
|
||||
// String clearingBillCode = "CLE" + IdUtils.getOrderCode();
|
||||
// clearingBillInfo.setClearingBillCode(clearingBillCode);
|
||||
// clearingBillInfo.setClearingTime(DateUtils.getNowDate());
|
||||
// clearingBillInfo.setMerchantId(merchantId);
|
||||
// clearingBillInfo.setOrderSource("1");
|
||||
|
||||
// 应收金额
|
||||
// BigDecimal receivableAmount = BigDecimal.ZERO;
|
||||
// // 应清分金额
|
||||
// BigDecimal shouldClearingAmount = BigDecimal.ZERO;
|
||||
// // 实际清分金额
|
||||
// BigDecimal actualClearingAmount = BigDecimal.ZERO;
|
||||
// // 手续费金额
|
||||
// BigDecimal feeAmount = BigDecimal.ZERO;
|
||||
// // 可提现金额
|
||||
// BigDecimal withdrawableAmount = BigDecimal.ZERO;
|
||||
|
||||
// 清分账单详情列表
|
||||
// List<ClearingBillDetail> billDetailList = Lists.newArrayList();
|
||||
// 执行分账
|
||||
for (OrderBasicInfo orderBasicInfo : orderBasicInfos) {
|
||||
try {
|
||||
@@ -1044,49 +1029,47 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
JSONObject jsonObject = JSON.parseObject(orderSettleResult.getDescription());
|
||||
String orderCode = (String) jsonObject.get("orderCode");
|
||||
|
||||
// 应收金额 = 订单结算金额汇总
|
||||
// receivableAmount = receivableAmount.add(orderBasicInfo.getSettleAmount());
|
||||
// // 应清分金额 = 订单产生的电费+服务费实际消费 汇总
|
||||
// shouldClearingAmount = shouldClearingAmount.add(orderBasicInfo.getSettleAmount());
|
||||
// // 实际清分金额 = 汇付清分接口返回的清分金额
|
||||
// actualClearingAmount = actualClearingAmount.add(new BigDecimal(orderSettleResult.getConfirm_amt()));
|
||||
// // 手续费金额 = 汇付清分接口返回的手续费金额
|
||||
// feeAmount = feeAmount.add(new BigDecimal(orderSettleResult.getFee_amt()));
|
||||
// // 可提现金额 = 实际清分金额 - 手续费金额
|
||||
// withdrawableAmount = withdrawableAmount
|
||||
// .add(new BigDecimal(orderSettleResult.getConfirm_amt()))
|
||||
// .subtract(new BigDecimal(orderSettleResult.getFee_amt()));
|
||||
|
||||
// ClearingBillDetail clearingBillDetail = ClearingBillDetail.builder()
|
||||
// .clearingBillCode(clearingBillCode)
|
||||
// .orderCode(orderCode)
|
||||
// .createTime(DateUtils.getNowDate())
|
||||
// .delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
// .build();
|
||||
// billDetailList.add(clearingBillDetail);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("订单交易确认失败:{}", orderBasicInfo.getOrderCode(), e);
|
||||
}
|
||||
}
|
||||
|
||||
// clearingBillInfo.setReceivableAmount(receivableAmount);
|
||||
// clearingBillInfo.setShouldClearingAmount(shouldClearingAmount);
|
||||
// clearingBillInfo.setFeeAmount(feeAmount);
|
||||
// clearingBillInfo.setWithdrawableAmount(withdrawableAmount);
|
||||
// clearingBillInfo.setActualClearingAmount(actualClearingAmount);
|
||||
// clearingBillInfo.setCreateTime(DateUtils.getNowDate());
|
||||
// clearingBillInfo.setDelFlag(DelFlagEnum.NORMAL.getValue());
|
||||
|
||||
// 保存清分账单
|
||||
// ClearingBillTransactionDTO dto = new ClearingBillTransactionDTO();
|
||||
// dto.setClearingBillInfo(clearingBillInfo);
|
||||
// dto.setBillDetailList(billDetailList);
|
||||
// transactionService.createClearingBill(dto);
|
||||
}
|
||||
logger.info("运营商:{}, 交易日期:{}, 进行分账处理end", merchantId, tradeDate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额支付订单,使用余额支付转账
|
||||
* @param orderBasicInfo
|
||||
* @param adapayMemberAccount
|
||||
* @return
|
||||
*/
|
||||
public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount) throws BaseAdaPayException {
|
||||
// 计算应该支付金额,和手续费
|
||||
SplitSettleAmountVO splitSettleAmountVO = splitSettleAmount(orderBasicInfo.getSettleAmount());
|
||||
BigDecimal feeAmount = splitSettleAmountVO.getFeeAmount();
|
||||
BigDecimal tradeAmount = splitSettleAmountVO.getTradeAmount();
|
||||
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 使用汇付余额支付功能
|
||||
String outMemberId = Constants.ZERO; // 若为商户本身时,请传入0
|
||||
String inMemberId = adapayMemberAccount.getAdapayMemberId();
|
||||
String transAmt = AdapayUtil.formatAmount(tradeAmount);
|
||||
String title = "订单结算入账";
|
||||
String desc = "订单号:" + orderCode + ", 结算金额";
|
||||
BalancePaymentResponse balancePaymentRequest = adapayMemberService.createBalancePaymentRequest(outMemberId, inMemberId, transAmt, title, desc);
|
||||
|
||||
OrderSettleResult result = new OrderSettleResult();
|
||||
result.setConfirm_amt(balancePaymentRequest.getTrans_amt());
|
||||
result.setStatus(balancePaymentRequest.getStatus());
|
||||
result.setFee_amt(feeAmount.toString());
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("orderCode", orderCode);
|
||||
result.setDescription(jsonObject.toJSONString());
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 延迟交易订单 交易确认
|
||||
* @param orderBasicInfo 订单
|
||||
@@ -2361,9 +2344,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
settleOrderReport.setTradeDate(tradeDate);
|
||||
settleOrderReport.setOrderCodes(Joiner.on(",").join(orderCodeList));
|
||||
// 计算手续费 = 结算金额 * 0.55%
|
||||
BigDecimal tradeFee = totalSettleAmount.multiply(new BigDecimal(Constants.FEE_RATES));
|
||||
settleOrderReport.setTradeFee(tradeFee);
|
||||
settleOrderReport.setTradeAmount(totalSettleAmount.subtract(tradeFee));
|
||||
SplitSettleAmountVO splitSettleAmountVO = splitSettleAmount(totalSettleAmount);
|
||||
settleOrderReport.setTradeFee(splitSettleAmountVO.getFeeAmount());
|
||||
settleOrderReport.setTradeAmount(splitSettleAmountVO.getTradeAmount());
|
||||
// 根据站点id和交易日期查询
|
||||
SettleOrderReport selectResult = settleOrderReportService.selectByStationIdAndDate(stationId, tradeDate);
|
||||
if (selectResult != null) {
|
||||
@@ -2373,6 +2356,24 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
settleOrderReportService.insertOrUpdate(settleOrderReport);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过结算金额,计算客户到账金额和手续费
|
||||
* @param settleAmount 需要拆分的结算金额
|
||||
* @return
|
||||
*/
|
||||
private SplitSettleAmountVO splitSettleAmount(BigDecimal settleAmount) {
|
||||
SplitSettleAmountVO resultVO = new SplitSettleAmountVO();
|
||||
if (settleAmount == null) {
|
||||
return resultVO;
|
||||
}
|
||||
// 计算手续费 = 结算金额 * 0.55%
|
||||
BigDecimal fee = settleAmount.multiply(new BigDecimal(Constants.FEE_RATES));
|
||||
resultVO.setSettleAmount(settleAmount);
|
||||
resultVO.setFeeAmount(fee);
|
||||
resultVO.setTradeAmount(settleAmount.subtract(fee));
|
||||
return resultVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运营商订单列表
|
||||
*
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.jsowell.pile.vo.base;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class SplitSettleAmountVO {
|
||||
// 结算金额
|
||||
private BigDecimal settleAmount;
|
||||
|
||||
// 手续费 = 结算金额 * 0.55%
|
||||
private BigDecimal feeAmount;
|
||||
|
||||
// 交易金额 = 结算金额 - 手续费
|
||||
private BigDecimal tradeAmount;
|
||||
}
|
||||
Reference in New Issue
Block a user