Air
2024-11-04 a1f06d31b7b4cac569c34bdfbb68de77f2858ffe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package com.nova.sankuai.domain.api.yangqianguan.vo;
 
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.nova.sankuai.domain.api.yixin.vo.YxpkgListVo;
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.List;
 
@ApiModel(value = "还款详情")
@Data
public class RepayDetailPlanVo {
 
    @ApiModelProperty(value = "当期状态-未到期")
    public static final Integer STATUS_NORMAL = 0;
    @ApiModelProperty(value = "当期状态-已还款")
    public static final Integer STATUS_REPAID = 1;
    @ApiModelProperty(value = "当期状态-已逾期")
    public static final Integer STATUS_OVERDUE = 2;
    @ApiModelProperty(value = "当期状态-还款中")
    public static final Integer STATUS_REPAY_PROCESS = 3;
 
    @ApiModelProperty(value = "期数")
    @JsonProperty("period_no")
    private Integer periodNo;
 
    @ApiModelProperty(value = "最早还款日")
    @JsonProperty("can_repay_time")
    private Long canRepayTime;
 
    @ApiModelProperty(value = "最晚还款日")
    @JsonProperty("due_time")
    private Long dueTime;
 
    @ApiModelProperty(value = "应还金额 用户当期应还金额(若出现部分还款,则为当期应还金额总额,非剩余待还金额)")
    private Double amount;
 
    @ApiModelProperty(value = "应还本金 用户当期应还本金(若出现部分还款,则为当期应还本金总额,非剩余待还本金)")
    private Double principal;
 
    @ApiModelProperty(value = "应还利息 用户当期应还利息(若出现部分还款,则为当期应还利息总额,非剩余待还利息)")
    private Double interest;
 
    @ApiModelProperty(value = "应还服务费 用户当期应还服务费(若出现部分还款,则为当期应还服务费总额,非剩余待还服务费)")
    @JsonProperty("service_fee")
    private Double serviceFee;
 
    @ApiModelProperty(value = "应还罚息 用户当期应还罚息(若出现部分还款,则为当期应还罚息总额,非剩余待还罚息)")
    @JsonProperty("overdue_interest")
    private Double overdueInterest;
 
    @ApiModelProperty(value = "应还其他费用 用户当期应还其他费用(若出现部分还款,则为当期应还其他费用总额,非剩余待还其他费用)")
    @JsonProperty("other_fee")
    private Double otherFee;
 
    @ApiModelProperty(value = "已还金额 用户当期的已还金额")
    @JsonProperty("paid_amount")
    private Double paidAmount;
 
    @ApiModelProperty(value = "已还本金 用户当期已还本金")
    @JsonProperty("paid_principal")
    private Double paidPrincipal;
 
    @ApiModelProperty(value = "已还利息 用户当期已还利息")
    @JsonProperty("paid_interest")
    private Double paidInterest;
 
    @ApiModelProperty(value = "已还服务费 用户当期已还服务费")
    @JsonProperty("paid_service_fee")
    private Double paidServiceFee;
 
    @ApiModelProperty(value = "已还罚息 用户当期已还罚息")
    @JsonProperty("paid_overdue_interest")
    private Double paidOverdueInterest;
 
    @ApiModelProperty(value = "已还其他费用 用户当期已还其他费用")
    @JsonProperty("paid_other_fee")
    private Double paidOtherFee;
 
    @ApiModelProperty(value = "特殊情况 0:无 1:线下减免")
    private Integer tag;
 
    @ApiModelProperty(value = "减免金额 tag为1时必填")
    @JsonProperty("reduce_fee")
    private Double reduceFee;
 
    @ApiModelProperty(value = "当期状态 0:未到期(未逾期) 1:已还款 2:已逾期 3:还款中(已扣款,未出结果)")
    @JsonProperty("bill_status")
    private Integer billStatus;
 
    @ApiModelProperty(value = "当期成功还款时间 用户当期成功还款的时间 已还款下不能为空")
    @JsonProperty("success_time")
    private Long successTime;
 
    @ApiModelProperty(value = "当期还款金额组成 当期还款金额的组成,加起来为当期还款金额")
    private String remark;
 
    public Double calculateAmount() {
        Double amount = this.principal + this.interest + this.serviceFee + this.overdueInterest + this.otherFee;
        return amount;
    }
 
    public Double calculatePaidAmount() {
        Double paidAmount = this.paidPrincipal + this.paidInterest + this.paidServiceFee + this.paidOverdueInterest + this.paidOtherFee;
        return paidAmount;
    }
 
    public String parseRemark() {
        StringBuilder sb = new StringBuilder();
        sb.append("本金" + this.principal + "元");
        sb.append("利息" + this.interest + "元");
        if (this.serviceFee != null) {
            sb.append("服务费" + this.serviceFee + "元");
        }
        if (this.overdueInterest != null) {
            sb.append("罚息" + this.overdueInterest + "元");
        }
        if (this.otherFee != null) {
            sb.append("其他费用" + this.otherFee + "元");
        }
        return sb.toString();
    }
 
    public static RepayDetailPlanVo parseVo(YxpkgListVo yxpkgListVo, List<String> periodNoList) {
        RepayDetailPlanVo repayDetailPlanVo = new RepayDetailPlanVo();
        repayDetailPlanVo.setCanRepayTime(DateUtil.parse(yxpkgListVo.getRepayDate()).getTime());
        repayDetailPlanVo.setPeriodNo(Integer.valueOf(yxpkgListVo.getRepayTerm()));
        repayDetailPlanVo.setDueTime(DateUtil.parse(yxpkgListVo.getRepayDate()).getTime());
        repayDetailPlanVo.setPrincipal(ConstantsUtil.formatPrice(yxpkgListVo.getTermRetPrin()));
        repayDetailPlanVo.setInterest(ConstantsUtil.formatPrice(yxpkgListVo.getTermRetInt()));
        repayDetailPlanVo.setServiceFee(ConstantsUtil.formatPrice(yxpkgListVo.getServiceReFee()));
        repayDetailPlanVo.setOverdueInterest(ConstantsUtil.formatPrice(yxpkgListVo.getTermRetFint()));
        repayDetailPlanVo.setOtherFee(ConstantsUtil.formatPrice(yxpkgListVo.getGuarantorReAmt()) + ConstantsUtil.formatPrice(yxpkgListVo.getSpeaccountRe()));
        repayDetailPlanVo.setPaidAmount(ConstantsUtil.formatPrice(yxpkgListVo.getPrinAmt()));
        repayDetailPlanVo.setPaidPrincipal(ConstantsUtil.formatPrice(yxpkgListVo.getPrinAmt()));
        repayDetailPlanVo.setPaidInterest(ConstantsUtil.formatPrice(yxpkgListVo.getIntAmt()));
        repayDetailPlanVo.setPaidServiceFee(ConstantsUtil.formatPrice(yxpkgListVo.getServiceFee()));
        repayDetailPlanVo.setPaidOverdueInterest(ConstantsUtil.formatPrice(yxpkgListVo.getTermFintFinish()));
        repayDetailPlanVo.setPaidOtherFee(ConstantsUtil.formatPrice(yxpkgListVo.getGuarantorAmt()) + ConstantsUtil.formatPrice(yxpkgListVo.getSpeaccount()));
        repayDetailPlanVo.setTag(0);
        Integer status = yxpkgListVo.parseYqgStatus();
        if (!RepayDetailPlanVo.STATUS_REPAID.equals(status) && periodNoList.contains(yxpkgListVo.getRepayTerm())) {
            status = RepayDetailPlanVo.STATUS_REPAY_PROCESS;
        }
        repayDetailPlanVo.setBillStatus(status);
        if (StringUtils.isNotEmpty(yxpkgListVo.getDatePay())) {
            repayDetailPlanVo.setSuccessTime(DateUtil.parse(yxpkgListVo.getDatePay()).getTime());
        }
        repayDetailPlanVo.setRemark(repayDetailPlanVo.parseRemark());
        repayDetailPlanVo.setPaidAmount(repayDetailPlanVo.calculatePaidAmount());
        repayDetailPlanVo.setAmount(repayDetailPlanVo.calculateAmount());
        return repayDetailPlanVo;
    }
}