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 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 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 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; } }