package com.nova.sankuai.domain.api.yangqianguan.dto;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.nova.sankuai.domain.api.yangqianguan.YqgUtil;
|
import com.nova.sankuai.domain.api.yangqianguan.vo.RepayDetailVo;
|
import com.nova.sankuai.domain.api.yixin.response.YxRepaymentPlanQueryResponse;
|
import com.nova.sankuai.domain.api.yixin.vo.YxpkgListVo;
|
import com.nova.sankuai.domain.entity.YqgRepayOrder;
|
import com.nova.sankuai.infra.utils.ConstantsUtil;
|
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModelProperty;
|
import lombok.Data;
|
import org.apache.commons.lang.StringUtils;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 还款结果反馈Dto
|
*/
|
@Data
|
@ApiModel(value = "还款结果Dto")
|
public class RepayResultReturnDto {
|
|
@JsonProperty("order_no")
|
@ApiModelProperty(value = "订单编号")
|
private String orderNo;
|
|
@ApiModelProperty(value = "还款编号")
|
@JsonProperty("repay_no")
|
private String repayNo;
|
|
@ApiModelProperty(value = "还款状态")
|
private Integer status;
|
|
@ApiModelProperty(value = "机构还款编号")
|
@JsonProperty("agency_repay_no")
|
private String agencyRepayNo;
|
|
@ApiModelProperty(value = "还款方式 参照YqgRepayOrder的type字段取值")
|
private Integer type;
|
|
@ApiModelProperty(value = "还款金额")
|
private Double amount;
|
|
@ApiModelProperty(value = "本金")
|
private Double principal;
|
|
@ApiModelProperty(value = "利息")
|
private Double interest;
|
|
@ApiModelProperty(value = "罚息")
|
@JsonProperty("overdue_interest")
|
private Double overdueInterest;
|
|
@ApiModelProperty(value = "服务费")
|
@JsonProperty("service_fee")
|
private Double serviceFee;
|
|
@ApiModelProperty(value = "其他费用")
|
@JsonProperty("other_fee")
|
private Double otherFee;
|
|
@ApiModelProperty(value = "特殊情况 0:无 1:线下减免")
|
private Integer tag;
|
|
@ApiModelProperty(value = "减免金额 tag为1时非空")
|
@JsonProperty("reduce_fee")
|
private Double reduceFee;
|
|
@ApiModelProperty(value = "银行卡号")
|
@JsonProperty("bank_card")
|
private String bankCard;
|
|
@ApiModelProperty(value = "还款成功时间")
|
@JsonProperty("success_time")
|
private Long successTime;
|
|
@ApiModelProperty(value = "还款明细")
|
@JsonProperty("repay_details")
|
private List<RepayDetailVo> repayDetails;
|
|
@ApiModelProperty(value = "备注")
|
private String remark;
|
|
public static RepayResultReturnDto parseDto(YqgRepayOrder yqgRepayOrder, YxRepaymentPlanQueryResponse planQuery) {
|
RepayResultReturnDto feedBackDto = new RepayResultReturnDto();
|
feedBackDto.setOrderNo(yqgRepayOrder.getOrderNo());
|
feedBackDto.setRepayNo(yqgRepayOrder.getRepayNo());
|
feedBackDto.setStatus(yqgRepayOrder.getStatus());
|
feedBackDto.setAgencyRepayNo(yqgRepayOrder.getRepayApplyNo());
|
feedBackDto.setType(yqgRepayOrder.getType());
|
feedBackDto.setRemark("");
|
if (YqgRepayOrder.STATUS_SUCCESS.equals(yqgRepayOrder.getStatus())) {
|
if (planQuery != null && planQuery.isSuccess()) {
|
List<YxpkgListVo> pkgListVos = planQuery.getPkgList();
|
if (pkgListVos != null && pkgListVos.size() > 0) {
|
String periodNos = yqgRepayOrder.getPeriodNos();
|
String[] split = periodNos.split(",");
|
pkgListVos = pkgListVos.stream().filter(i -> Arrays.asList(split).contains(i.getRepayTerm()))
|
.collect(Collectors.toList());
|
feedBackDto.setTag(0);
|
Double amount = 0.00d;
|
Double principal = 0.00d;
|
Double interest = 0.00d;
|
Double overdueInterest = 0.00d;
|
Double serviceFee = 0.00d;
|
Double otherFee = 0.00d;
|
if (StringUtils.isNotEmpty(yqgRepayOrder.getRepayTime())) {
|
feedBackDto.setSuccessTime(DateUtil.parse(yqgRepayOrder.getRepayTime()).getTime());
|
} else {
|
feedBackDto.setSuccessTime(new Date().getTime());
|
}
|
List<RepayDetailVo> repayDetailVos = new ArrayList<>();
|
for (YxpkgListVo yxpkgListVo : pkgListVos) {
|
RepayDetailVo repayDetailVo = RepayDetailVo.parseVo(yxpkgListVo);
|
serviceFee = serviceFee + repayDetailVo.getServiceFee();
|
otherFee = otherFee + repayDetailVo.getOtherFee();
|
amount = amount + repayDetailVo.getAmount();
|
principal = principal + repayDetailVo.getPrincipal();
|
interest = interest + repayDetailVo.getInterest();
|
overdueInterest = overdueInterest + repayDetailVo.getOverdueInterest();
|
repayDetailVos.add(repayDetailVo);
|
}
|
feedBackDto.setBankCard(yqgRepayOrder.getBankCard());
|
feedBackDto.setRepayDetails(repayDetailVos);
|
feedBackDto.setAmount(ConstantsUtil.formatPrice(amount.toString()));
|
feedBackDto.setPrincipal(ConstantsUtil.formatPrice(principal.toString()));
|
feedBackDto.setInterest(ConstantsUtil.formatPrice(interest.toString()));
|
feedBackDto.setOverdueInterest(ConstantsUtil.formatPrice(overdueInterest.toString()));
|
feedBackDto.setServiceFee(ConstantsUtil.formatPrice(serviceFee.toString()));
|
feedBackDto.setOtherFee(ConstantsUtil.formatPrice(otherFee.toString()));
|
String remark = YqgUtil.parseRemark(principal, interest, serviceFee, overdueInterest, otherFee);
|
feedBackDto.setRemark(remark);
|
return feedBackDto;
|
}
|
}
|
return null;
|
} else if (YqgRepayOrder.STATUS_FAIL.equals(yqgRepayOrder.getStatus())) {
|
feedBackDto.setRemark(yqgRepayOrder.getRemark());
|
}
|
return feedBackDto;
|
}
|
}
|