package com.bonus.core.account.v3.web.vo;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.annotation.ExcelProperty;
import com.bonus.core.account.v3.constants.AccStatusEnum;
import com.bonus.core.common.encrypt.HandleType;
import com.bonus.core.common.encrypt.LeNiuDecryptDataProcess;
import com.bonus.core.common.encrypt.LeNiuDecryptField;
import com.bonus.core.common.utils.CustomNumberConverter;
import io.swagger.annotations.ApiModelProperty;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@LeNiuDecryptDataProcess
public class AccInfoPageVO {
   @ApiModelProperty("账户id")
   private Long accId;
   @ApiModelProperty("人员id")
   private Long custId;
   @ApiModelProperty("操作时间")
   @ExcelProperty(
      value = {"操作时间"},
      order = 0
   )
   private LocalDateTime uptime;
   @ApiModelProperty("用户编号")
   @ExcelProperty(
      value = {"用户编号"},
      order = 1
   )
   private String custNum;
   @ApiModelProperty("用户姓名")
   @ExcelProperty(
      value = {"用户姓名"},
      order = 2
   )
   @LeNiuDecryptField
   private String custName;
   @ApiModelProperty("用户手机号")
   @ExcelProperty(
      value = {"用户手机号"},
      order = 3
   )
   @LeNiuDecryptField(HandleType.DESENSITIZE_MOBILE_PHONE)
   private String mobile;
   @ApiModelProperty("所属组织")
   @ExcelProperty(
      value = {"所属组织"},
      order = 4
   )
   private String orgFullName;
   @ApiModelProperty("用户类别")
   private Integer psnType;
   @ApiModelProperty("用户类别(展示)")
   @ExcelProperty(
      value = {"用户类别"},
      order = 5
   )
   private String psnTypeName;
   @ApiModelProperty("账户总余额")
   @ExcelProperty(
      value = {"账户总余额"},
      order = 6,
      converter = CustomNumberConverter.class
   )
   private BigDecimal accBalTotal;
   @ApiModelProperty("账户可用总余额(不包含冻结金额)")
   private BigDecimal accAvailableBal;
   @ApiModelProperty("个人钱包余额/分")
   @ExcelProperty(
      value = {"个人钱包余额"},
      order = 7,
      converter = CustomNumberConverter.class
   )
   private BigDecimal walletBal;
   @ApiModelProperty("补贴钱包余额/分")
   @ExcelProperty(
      value = {"补贴钱包余额"},
      order = 8,
      converter = CustomNumberConverter.class
   )
   private BigDecimal subsidyBal;
   @ApiModelProperty("红包余额")
   @ExcelProperty(
      value = {"红包"},
      order = 9,
      converter = CustomNumberConverter.class
   )
   private BigDecimal redEnvelope;
   @ApiModelProperty("冻结金额")
   @ExcelProperty(
      value = {"冻结金额"},
      order = 10,
      converter = CustomNumberConverter.class
   )
   private BigDecimal accFreezeBalTotal;
   @ApiModelProperty("个人钱包允许最低余额限制")
   @ExcelProperty(
      value = {"个人钱包允许最低余额"},
      order = 11,
      converter = CustomNumberConverter.class
   )
   private BigDecimal minWalletBalLimit;
   @ApiModelProperty("补贴钱包允许最低余额限制")
   @ExcelProperty(
      value = {"补贴钱包允许最低余额"},
      order = 12,
      converter = CustomNumberConverter.class
   )
   private BigDecimal minSubBalLimit;
   @ApiModelProperty("账户状态 1正常  2冻结  3销户 4过期")
   private Integer accStatus;
   @ApiModelProperty("账户状态名称")
   @ExcelProperty(
      value = {"账户状态"},
      order = 13
   )
   private String accStatusName;
   @ApiModelProperty("账户有效期")
   @ExcelProperty(
      value = {"账户有效期"},
      order = 14
   )
   private LocalDate endDate;
   @ApiModelProperty("积分")
   private Long scope;
   @ApiModelProperty("个人钱包冻结金额")
   private BigDecimal frozenWallet;
   @ApiModelProperty("补贴冻结金额")
   private BigDecimal frozenSub;

   public String getAccStatusName() {
      return ObjectUtil.isNotNull(this.accStatus) ? AccStatusEnum.getDesc(this.accStatus) : this.accStatusName;
   }

   public Long getAccId() {
      return this.accId;
   }

   public Long getCustId() {
      return this.custId;
   }

   public LocalDateTime getUptime() {
      return this.uptime;
   }

   public String getCustNum() {
      return this.custNum;
   }

   public String getCustName() {
      return this.custName;
   }

   public String getMobile() {
      return this.mobile;
   }

   public String getOrgFullName() {
      return this.orgFullName;
   }

   public Integer getPsnType() {
      return this.psnType;
   }

   public String getPsnTypeName() {
      return this.psnTypeName;
   }

   public BigDecimal getAccBalTotal() {
      return this.accBalTotal;
   }

   public BigDecimal getAccAvailableBal() {
      return this.accAvailableBal;
   }

   public BigDecimal getWalletBal() {
      return this.walletBal;
   }

   public BigDecimal getSubsidyBal() {
      return this.subsidyBal;
   }

   public BigDecimal getRedEnvelope() {
      return this.redEnvelope;
   }

   public BigDecimal getAccFreezeBalTotal() {
      return this.accFreezeBalTotal;
   }

   public BigDecimal getMinWalletBalLimit() {
      return this.minWalletBalLimit;
   }

   public BigDecimal getMinSubBalLimit() {
      return this.minSubBalLimit;
   }

   public Integer getAccStatus() {
      return this.accStatus;
   }

   public LocalDate getEndDate() {
      return this.endDate;
   }

   public Long getScope() {
      return this.scope;
   }

   public BigDecimal getFrozenWallet() {
      return this.frozenWallet;
   }

   public BigDecimal getFrozenSub() {
      return this.frozenSub;
   }

   public void setAccId(final Long accId) {
      this.accId = accId;
   }

   public void setCustId(final Long custId) {
      this.custId = custId;
   }

   public void setUptime(final LocalDateTime uptime) {
      this.uptime = uptime;
   }

   public void setCustNum(final String custNum) {
      this.custNum = custNum;
   }

   public void setCustName(final String custName) {
      this.custName = custName;
   }

   public void setMobile(final String mobile) {
      this.mobile = mobile;
   }

   public void setOrgFullName(final String orgFullName) {
      this.orgFullName = orgFullName;
   }

   public void setPsnType(final Integer psnType) {
      this.psnType = psnType;
   }

   public void setPsnTypeName(final String psnTypeName) {
      this.psnTypeName = psnTypeName;
   }

   public void setAccBalTotal(final BigDecimal accBalTotal) {
      this.accBalTotal = accBalTotal;
   }

   public void setAccAvailableBal(final BigDecimal accAvailableBal) {
      this.accAvailableBal = accAvailableBal;
   }

   public void setWalletBal(final BigDecimal walletBal) {
      this.walletBal = walletBal;
   }

   public void setSubsidyBal(final BigDecimal subsidyBal) {
      this.subsidyBal = subsidyBal;
   }

   public void setRedEnvelope(final BigDecimal redEnvelope) {
      this.redEnvelope = redEnvelope;
   }

   public void setAccFreezeBalTotal(final BigDecimal accFreezeBalTotal) {
      this.accFreezeBalTotal = accFreezeBalTotal;
   }

   public void setMinWalletBalLimit(final BigDecimal minWalletBalLimit) {
      this.minWalletBalLimit = minWalletBalLimit;
   }

   public void setMinSubBalLimit(final BigDecimal minSubBalLimit) {
      this.minSubBalLimit = minSubBalLimit;
   }

   public void setAccStatus(final Integer accStatus) {
      this.accStatus = accStatus;
   }

   public void setAccStatusName(final String accStatusName) {
      this.accStatusName = accStatusName;
   }

   public void setEndDate(final LocalDate endDate) {
      this.endDate = endDate;
   }

   public void setScope(final Long scope) {
      this.scope = scope;
   }

   public void setFrozenWallet(final BigDecimal frozenWallet) {
      this.frozenWallet = frozenWallet;
   }

   public void setFrozenSub(final BigDecimal frozenSub) {
      this.frozenSub = frozenSub;
   }




}
