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;

/**
 * <p>
 * 设备算法计费历史表
 * </p>
 *
 * @author lijin
 * @since 2023-06-29
 */
public class DeviceAlgorithmChargingHistoryDto {

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

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

    }

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


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

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

        @ApiModelProperty(value = "商户id")
        private Long mercId;
        @ApiModelProperty(value = "商户名称")
        private String mercName;
        @ApiModelProperty(value = "订单id")
        private String orderId;

        @ApiModelProperty(value = "设备id")
        private Long deviceId;

        @ApiModelProperty(value = "算法id")
        private Long algorithmId;

        @ApiModelProperty(value = "名称")
        private String name;

        @ApiModelProperty(value = "充值金额")
        private Integer chargingMoney;

        @ApiModelProperty(value = "充值数量")
        private Integer chargingSize;

        @ApiModelProperty(value = "充值方式")
        private Integer chargingType;

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

        @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 note;

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

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

    }

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


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

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

        @ApiModelProperty(value = "商户id")
        private Long mercId;
        @ApiModelProperty(value = "商户名称")
        private String mercName;
        @ApiModelProperty(value = "订单id")
        private String orderId;

        @ApiModelProperty(value = "设备id")
        private Long deviceId;

        @ApiModelProperty(value = "算法id")
        private Long algorithmId;

        @ApiModelProperty(value = "名称")
        private String name;

        @ApiModelProperty(value = "充值金额")
        private Integer chargingMoney;

        @ApiModelProperty(value = "充值数量")
        private Integer chargingSize;

        @ApiModelProperty(value = "充值方式")
        private Integer chargingType;

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

        @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 note;

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

    }

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

//        @ExcelProperty("说明")
//        @ApiModelProperty(value = "备注")
//        private String note;


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

        @ExcelProperty("缴费单号")
        @ApiModelProperty(value = "缴费单号")
        private String orderId;
        @ExcelProperty("设备编号")
        @ApiModelProperty(value = "设备id")
        private Long deviceId;

        @ExcelProperty(value = "算法类型", converter = DictConvert.class)
        @DictFormat(DictConsts.ALGORITHM_TYPES)
        @ApiModelProperty(value = "算法类型")
        private Long algorithmId;

//        @ApiModelProperty(value = "名称")
//        private String name;

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

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


        @ExcelProperty("缴费数量(笔)")
        @ApiModelProperty(value = "缴费数量")
        private Integer chargingSize;


        @ExcelProperty(value = "缴费方式", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_MERC_MANAGE_PAY_TYPE)
        @ApiModelProperty(value = "缴费方式")
        private Integer chargingType;

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


    }

    @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 Long deviceId;

        @ExcelProperty(value = "算法类型", converter = DictConvert.class)
        @DictFormat(DictConsts.ALGORITHM_TYPES)
        @ApiModelProperty(value = "算法类型")
        private Long algorithmId;

//        @ApiModelProperty(value = "名称")
//        private String name;

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


        @ExcelProperty("缴费数量(笔)")
        @ApiModelProperty(value = "缴费数量")
        private Integer chargingSize;


        @ExcelProperty(value = "缴费方式", converter = DictConvert.class)
        @DictFormat(DictConsts.ORDER_MERC_MANAGE_PAY_TYPE)
        @ApiModelProperty(value = "缴费方式")
        private Integer chargingType;

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


    }

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

        @ApiModelProperty("分页对象")
        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;


        @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 Long deviceId;

        @ApiModelProperty(value = "算法id")
        private Long algorithmId;

        @ApiModelProperty(value = "名称")
        private String name;

        @ApiModelProperty(value = "充值金额")
        private Integer chargingMoney;

        @ApiModelProperty(value = "充值数量")
        private Integer chargingSize;

        @ApiModelProperty(value = "充值方式")
        private Integer chargingType;

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


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

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


    }

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

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

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

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

        @ApiModelProperty(value = "设备id")
        private Long deviceId;

        @ApiModelProperty(value = "算法id")
        private Long algorithmId;

        @ApiModelProperty(value = "名称")
        private String name;

        @ApiModelProperty(value = "充值金额")
        private Integer chargingMoney;

        @ApiModelProperty(value = "充值数量")
        private Integer chargingSize;

        @ApiModelProperty(value = "充值方式")
        private Integer chargingType;

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

        @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 note;

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

}
