Commit 036262af by 程裕兵

feat:refund

parent ecff6b75
package com.jiejing.fitness.finance.api.merchant.request; package com.jiejing.fitness.finance.api.merchant.request;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -37,7 +38,15 @@ public class StudioMerchantRefundRequest { ...@@ -37,7 +38,15 @@ public class StudioMerchantRefundRequest {
@NotBlank(message = "退款原因不能为空") @NotBlank(message = "退款原因不能为空")
private String refundReason; private String refundReason;
@ApiModelProperty(name = "上层业务退款单号") @ApiModelProperty(name = "上层业务退款单号", required = true)
@NotBlank(message = "上层业务退款单号不能为空")
private String orderNo; private String orderNo;
@ApiModelProperty(name = "上层业务子订单号")
private String subOrderNo;
@ApiModelProperty(name = "订单类型", required = true)
@NotNull(message = "订单类型不能为空")
private PayOrderTypeEnum orderType;
} }
...@@ -3,6 +3,7 @@ package com.jiejing.fitness.finance.service.pay.convert; ...@@ -3,6 +3,7 @@ package com.jiejing.fitness.finance.service.pay.convert;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.jiejing.common.utils.convert.BeanUtil; import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum; import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum;
import com.jiejing.fitness.enums.finance.BrandCashierTransTypeEnum;
import com.jiejing.fitness.finance.api.merchant.vo.StudioMerchantRefundVO; import com.jiejing.fitness.finance.api.merchant.vo.StudioMerchantRefundVO;
import com.jiejing.fitness.finance.api.merchant.vo.StudioMerchantRefundVO.CheckRefundCodeEnum; import com.jiejing.fitness.finance.api.merchant.vo.StudioMerchantRefundVO.CheckRefundCodeEnum;
import com.jiejing.fitness.finance.repository.entity.StudioCashierRecord; import com.jiejing.fitness.finance.repository.entity.StudioCashierRecord;
...@@ -24,24 +25,41 @@ public class RefundConvert { ...@@ -24,24 +25,41 @@ public class RefundConvert {
public static StudioCashierRecord convertRefundInit(StudioMerchantRefundParams params, public static StudioCashierRecord convertRefundInit(StudioMerchantRefundParams params,
StudioCashierRecord pay, BigDecimal historyRefundActualAmount) { StudioCashierRecord pay, BigDecimal historyRefundActualAmount) {
StudioCashierRecord record = BeanUtil.map(pay, StudioCashierRecord.class); Long id = IdWorker.getId();
record.setId(IdWorker.getId()); BigDecimal fee = FeeUtil.calculateRefundFee(params.getTransAmount(), pay.getTransAmount(),
record.setTransNo(record.getId().toString()); pay.getActualAmount(), pay.getFee(), historyRefundActualAmount);
record.setOrderNo(params.getOrderNo()); BigDecimal actualAmount = MoneyUtil.subtract(params.getTransAmount(), fee);
record.setRelatedTransNo(params.getPayTransNo()); Date now = new Date();
record.setTransAmount(params.getTransAmount()); return StudioCashierRecord.builder()
record.setFeeRate(pay.getFeeRate()); .id(id)
record.setFee( .transNo(id.toString())
FeeUtil.calculateRefundFee(params.getTransAmount(), pay.getTransAmount(), pay.getActualAmount(), .orderNo(params.getOrderNo())
pay.getFee(), historyRefundActualAmount)); .businessNo(params.getBusinessNo())
record.setActualAmount(MoneyUtil.subtract(record.getTransAmount(), record.getFee())); .orderType(params.getOrderType().getCode())
record.setRemark(params.getRefundReason()); .subOrderNo(params.getSubOrderNo())
record.setStudioId(params.getStudioId()); .transType(BrandCashierTransTypeEnum.REFUND.getCode())
record.setTransState(BrandCashierTransStateEnum.REFUND_INIT.getCode()); .brandId(pay.getBrandId())
record.setTradingTime(new Date()); .studioId(pay.getStudioId())
record.setCreateTime(new Date()); .studioName(pay.getStudioName())
record.setUpdateTime(new Date()); .merchantId(pay.getMerchantId())
return record; .merchantNo(pay.getMerchantNo())
.channelNo(pay.getChannelNo())
.subChannel(pay.getSubChannel())
.transAmount(params.getTransAmount())
.feeRate(pay.getFeeRate())
.fee(fee)
.actualAmount(actualAmount)
.transState(BrandCashierTransStateEnum.REFUND_INIT.getCode())
.buyerName(pay.getBuyerName())
.buyerPhone(pay.getBuyerPhone())
.goods(pay.getGoods())
.remark(params.getRefundReason())
.existRelatedTrans(true)
.relatedTransNo(params.getPayTransNo())
.tradingTime(now)
.createTime(now)
.updateTime(now)
.build();
} }
public static RefundPayRequest convert(StudioMerchantRefundParams params, StudioCashierRecord record) { public static RefundPayRequest convert(StudioMerchantRefundParams params, StudioCashierRecord record) {
......
...@@ -34,12 +34,10 @@ import com.jiejing.paycenter.common.model.vo.RefundVO; ...@@ -34,12 +34,10 @@ import com.jiejing.paycenter.common.model.vo.RefundVO;
import com.xiaomai.event.EventAgent; import com.xiaomai.event.EventAgent;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
......
package com.jiejing.fitness.finance.service.pay.params; package com.jiejing.fitness.finance.service.pay.params;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -37,7 +38,18 @@ public class StudioMerchantRefundParams { ...@@ -37,7 +38,18 @@ public class StudioMerchantRefundParams {
@NotBlank(message = "退款原因不能为空") @NotBlank(message = "退款原因不能为空")
private String refundReason; private String refundReason;
@ApiModelProperty(name = "上层业务退款单号") @ApiModelProperty(name = "上层业务退款ID", required = true)
@NotBlank(message = "上层业务退款ID不能为空")
private String orderNo; private String orderNo;
@ApiModelProperty(name = "上层业务退款订单号")
private String businessNo;
@ApiModelProperty(name = "上层业务子订单号")
private String subOrderNo;
@ApiModelProperty(name = "订单类型", required = true)
@NotNull(message = "订单类型不能为空")
private PayOrderTypeEnum orderType;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment