package com.xy.dto;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xy.annotate.DictFormat;
import com.xy.consts.DictConsts;
import com.xy.convert.CustomFenToYuanConverter;
import com.xy.convert.DictConvert;
import com.xy.utils.PageBean;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 设备流量卡充值表
 * </p>
 *
 * @author lijin
 * @since 2023-10-16
 */
public class DeviceSimChargeDto {

    @Data
    @Accessors(chain = true)
    public static class Page extends Vo {

        @ApiModelProperty(value = "分页对象", required = true)
        private PageBean page;

        @ApiModelProperty(value = "创建时间-起")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime beginCreateTime;

        @ApiModelProperty(value = "创建时间-始")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime endCreateTime;
    }

    @Data
    @Accessors(chain = true)
    public static class PageExcelVo {
        @ExcelProperty("商户名称")
        @ApiModelProperty(value = "商户名称")
        private String mercName;

        @ExcelProperty("缴费单号")
        @ApiModelProperty(value = "缴费单号")
        private String orderId;

        @ExcelProperty("流量卡号")
        @ApiModelProperty(value = "流量卡id")
        private String simId;


        @ApiModelProperty(value = "金额")
        @ExcelProperty(value = "金额", converter = CustomFenToYuanConverter.class)
        @NumberFormat("#0.00")
        private Integer money;

        @ApiModelProperty(value = "佣金")
        @ExcelProperty(value = "佣金", converter = CustomFenToYuanConverter.class)
        @NumberFormat("#0.00")
        private Integer agentMoney;

        @ExcelProperty("续费时长(年)")
        @ApiModelProperty(value = "数量")
        private Integer size;

        @ExcelProperty(value = "支付方式", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_PAY_TYPE)
        @ApiModelProperty(value = "支付方式")
        private Integer payType;


        @ExcelProperty(value = "支付状态", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_MERC_MANAGE_STATUS)
        @ApiModelProperty(value = "支付状态")
        private Integer status;

        @ExcelProperty("支付时间")
        @ApiModelProperty(value = "创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;

        @ExcelProperty("过期时间")
        @ApiModelProperty(value = "过期时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime timeout;

        @ApiModelProperty(value = "状态")
        @ExcelProperty("过期状态说明")
        private String timeoutStatus;


    }

    @Data
    @Accessors(chain = true)
    public static class SpendPageExcelVo {
        @ExcelProperty("商户名称")
        @ApiModelProperty(value = "商户名称")
        private String mercName;

        @ExcelProperty("缴费单号")
        @ApiModelProperty(value = "缴费单号")
        private String orderId;

        @ExcelProperty("流量卡号")
        @ApiModelProperty(value = "流量卡id")
        private String simId;


        @ApiModelProperty(value = "金额")
        @ExcelProperty(value = "金额", converter = CustomFenToYuanConverter.class)
        @NumberFormat("#0.00")
        private Integer money;


        @ExcelProperty("续费时长(年)")
        @ApiModelProperty(value = "数量")
        private Integer size;

        @ExcelProperty(value = "支付方式", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_PAY_TYPE)
        @ApiModelProperty(value = "支付方式")
        private Integer payType;


        @ExcelProperty(value = "支付状态", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_MERC_MANAGE_STATUS)
        @ApiModelProperty(value = "支付状态")
        private Integer status;

        @ExcelProperty("支付时间")
        @ApiModelProperty(value = "创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;

        @ExcelProperty("过期时间")
        @ApiModelProperty(value = "过期时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime timeout;

        @ApiModelProperty(value = "状态")
        @ExcelProperty("过期状态说明")
        private String timeoutStatus;


    }

    @Data
    @Accessors(chain = true)
    public static class MySpendPageVO {

        @ApiModelProperty(value = "过期时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime timeout;

        @ApiModelProperty(value = "过期状态说明")
        private String timeoutStatus;


        @ApiModelProperty(value = "id")
        private Long id;

        @ApiModelProperty(value = "订单id")
        private String orderId;

        @ApiModelProperty(value = "流量卡id")
        private String simId;

        @ApiModelProperty(value = "商户id")
        private Long mercId;

        @ApiModelProperty(value = "金额")
        private Integer money;

        @ApiModelProperty(value = "代理商金额")
        private Integer agentMoney;

        @ApiModelProperty(value = "数量")
        private Integer size;

        @ApiModelProperty(value = "支付方式")
        private Integer payType;

        @ApiModelProperty(value = "状态")
        private Integer status;

        @ApiModelProperty(value = "备注")
        private String note;

        @ApiModelProperty(value = "创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;

        @ApiModelProperty(value = "更新时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime updateTime;

        @ApiModelProperty(value = "商户名称")
        private String mercName;

        @ApiModelProperty(value = "附件")
        private String files;

        @ApiModelProperty(value = "余额抵扣")
        private Integer balanceMone;
    }


    @Data
    @Accessors(chain = true)
    public static class PageByTopMercVO {

        @ApiModelProperty(value = "过期时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime timeout;

        @ApiModelProperty(value = "过期状态说明")
        private String timeoutStatus;


        @ApiModelProperty(value = "id")
        private Long id;

        @ApiModelProperty(value = "订单id")
        private String orderId;

        @ApiModelProperty(value = "流量卡id")
        private String simId;

        @ApiModelProperty(value = "商户id")
        private Long mercId;

        @ApiModelProperty(value = "金额")
        private Integer money;

        @ApiModelProperty(value = "代理商金额")
        private Integer agentMoney;

        @ApiModelProperty(value = "数量")
        private Integer size;

        @ApiModelProperty(value = "支付方式")
        private Integer payType;

        @ApiModelProperty(value = "状态")
        private Integer status;

        @ApiModelProperty(value = "备注")
        private String note;

        @ApiModelProperty(value = "创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;

        @ApiModelProperty(value = "更新时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime updateTime;

        @ApiModelProperty(value = "附件")
        private String files;

        @ApiModelProperty(value = "商户名称")
        private String mercName;


    }

    @Data
    @Accessors(chain = true)
    public static class PageByTopMerc {

        @ApiModelProperty("分页对象")
        private PageBean page;

        @ApiModelProperty("是否导出当前页")
        private Boolean exportPage = true;
        @ApiModelProperty(value = "创建时间-起")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime beginCreateTime;
        @ApiModelProperty(value = "创建时间-始")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime endCreateTime;
        @ApiModelProperty(value = "商户id")
        private Long curMercId;
        @ApiModelProperty(value = "指定商户id")
        private Long chooseMercId;
        @ApiModelProperty(value = "id")
        private Long id;
        @ApiModelProperty(value = "订单id")
        private String orderId;
        @ApiModelProperty(value = "流量卡id")
        private String simId;
        @ApiModelProperty(value = "金额")
        private Integer money;
        @ApiModelProperty(value = "数量")
        private Integer size;
        @ApiModelProperty(value = "支付方式")
        private Integer payType;
        @ApiModelProperty(value = "状态")
        private Integer status;
        @ApiModelProperty(value = "备注")
        private String note;
        @ApiModelProperty(value = "附件")
        private String files;

        // size -1 不分页
        public PageBean getPage() {
            if (!this.exportPage) {
                this.page.setSize(-1L);
            }
            return page;
        }


    }


    @Data
    @Accessors(chain = true)
    public static class Vo {

        @ApiModelProperty(value = "id")
        private Long id;

        @ApiModelProperty(value = "订单id")
        private String orderId;

        @ApiModelProperty(value = "流量卡id")
        private String simId;

        @ApiModelProperty(value = "商户id")
        private Long mercId;

        @ApiModelProperty(value = "金额")
        private Integer money;

        @ApiModelProperty(value = "数量")
        private Integer size;

        @ApiModelProperty(value = "支付方式")
        private Integer payType;

        @ApiModelProperty(value = "状态")
        private Integer status;

        @ApiModelProperty(value = "备注")
        private String note;

        @ApiModelProperty(value = "创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime createTime;

        @ApiModelProperty(value = "更新时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime updateTime;

        @ApiModelProperty(value = "附件")
        private String files;

        @ApiModelProperty(value = "商户名称")
        private String mercName;
    }

    @Data
    @Accessors(chain = true)
    public static class MoonCount {

        @ApiModelProperty(value = "商户id")
        private List<Long> mercIds;

        @ApiModelProperty(value = "统计时间-起 yyyy-MM")
        private String beginDate;

        @ApiModelProperty(value = "统计时间-始 yyyy-MM")
        private String endDate;
    }

    @Data
    @Accessors(chain = true)
    public static class MoonCountVo {

        @ApiModelProperty(value = "统计时间 yyyy-MM")
        private String date;

        @ApiModelProperty(value = "商户id")
        private Long mercId;

        @ApiModelProperty(value = "商户名称")
        private String mercName;

        @ApiModelProperty(value = "卡数")
        private Integer simSize;

        @ApiModelProperty(value = "续费金额")
        private Integer money;
    }

    @Data
    @Accessors(chain = true)
    public static class MoonCountPage {

        @ApiModelProperty(value = "分页对象")
        private PageBean page;

        @ApiModelProperty(value = "商户id")
        private List<Long> mercIds;

        @ApiModelProperty(value = "统计时间-起 yyyy-MM-dd")
        private String beginDate;

        @ApiModelProperty(value = "统计时间-始 yyyy-MM-dd")
        private String endDate;
    }
}
