package com.ym.mec.biz.dal.dto;

import com.ym.mec.biz.dal.entity.Goods;
import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
import com.ym.mec.common.enums.BaseEnum;
import io.swagger.annotations.ApiModelProperty;

import java.math.BigDecimal;
import java.util.List;

public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
    @ApiModelProperty(value = "分部",required = true)
    private String organName;

    @ApiModelProperty(value = "零星费用",required = true)
    private BigDecimal sporadicAmount;

    //零星费用类型
    @ApiModelProperty(value = "零星费用类型",required = true)
    private String sporadicType;

    //乐器费用
    @ApiModelProperty(value = "乐器费用",required = true)
    private BigDecimal musicalFee = BigDecimal.ZERO;

    //押金费用
    @ApiModelProperty(value = "押金费用",required = true)
    private BigDecimal leaseFee = BigDecimal.ZERO;

    //教辅费用
    @ApiModelProperty(value = "教辅费用",required = true)
    private BigDecimal teachingFee = BigDecimal.ZERO;

    //维修费用
    @ApiModelProperty(value = "维修费用",required = true)
    private BigDecimal repairFee = BigDecimal.ZERO;

    //汇付手续费
    @ApiModelProperty(value = "汇付手续费",required = true)
    private BigDecimal transferFee = BigDecimal.ZERO;
    
    //平台手续费
    @ApiModelProperty(value = "平台手续费",required = true)
    private BigDecimal platformFee = BigDecimal.ZERO;

    //乐团家长采买课程费用
    @ApiModelProperty(value = "乐团课程费用",required = true)
    private BigDecimal musicGroupCourseFee = BigDecimal.ZERO;

    //乐团课程费用
    @ApiModelProperty(value = "乐团学校采买课程费用",required = true)
    private BigDecimal courseSchoolBuyAmount = BigDecimal.ZERO;

    //网络基础训练课程费用
    @ApiModelProperty(value = "网络基础训练课程费用",required = true)
    private BigDecimal highCourseFee = BigDecimal.ZERO;

    //VIP课程费用
    @ApiModelProperty(value = "VIP课程费用",required = true)
    private BigDecimal vipCourseFee = BigDecimal.ZERO;

    //网管课程费用
    @ApiModelProperty(value = "网管课程费用",required = true)
    private BigDecimal practiceCourseFee = BigDecimal.ZERO;

    //乐理课程费用
    @ApiModelProperty(value = "乐理课程费用",required = true)
    private BigDecimal theoryCourseFee = BigDecimal.ZERO;

    //考级费用
    @ApiModelProperty(value = "考级费用",required = true)
    private BigDecimal degreeFee = BigDecimal.ZERO;

    //其它费用
    @ApiModelProperty(value = "其它费用",required = true)
    private BigDecimal otherFee = BigDecimal.ZERO;

    //乐保费用
    @ApiModelProperty(value = "乐保费用",required = true)
    private BigDecimal maintenanceFee = BigDecimal.ZERO;

    @ApiModelProperty(value = "零售乐器费用",required = true)
    private BigDecimal retailGoodsFee = BigDecimal.ZERO;

    @ApiModelProperty(value = "大件乐器费用",required = true)
    private BigDecimal largeMusicalFee = BigDecimal.ZERO;

    //商品乐保
    @ApiModelProperty(value = "商品乐保",required = true)
    private BigDecimal maintenanceProductFee = BigDecimal.ZERO;

    //云教练费用
    @ApiModelProperty(value = "云教练费用",required = true)
    private BigDecimal cloudTeacherFee = BigDecimal.ZERO;

    //上门费费用
    @ApiModelProperty(value = "上门费费用",required = true)
    private BigDecimal visitFee = BigDecimal.ZERO;

    //账户充值
    @ApiModelProperty(value = "账户充值",required = true)
    private BigDecimal rechargeFee = BigDecimal.ZERO;

    @ApiModelProperty(value = "专业",required = true)
    private String subjectName;

    @ApiModelProperty(value = "合作单位",required = true)
    private String cooperationOrganName;

    //乐团主管
    @ApiModelProperty(value = "乐团主管",required = true)
    private String eduTeacher;

    @ApiModelProperty(value = "收费类型",required = true)
    private Integer chargeType;

    @ApiModelProperty(value = "订单详情",required = true)
    private List<StudentPaymentOrderDetail> orderDetailList;

    @ApiModelProperty(value = "商品列表",required = true)
    private List<Goods> goodsList;

    //收款账户
    @ApiModelProperty(value = "收款账户",required = true)
    private String routeMerNo;

    //分润金额
    @ApiModelProperty(value = "分润金额",required = true)
    private BigDecimal routeAmount;

    //分润余额
    @ApiModelProperty(value = "分润余额",required = true)
    private BigDecimal routeBalance;

    //分润中的销售费用
    @ApiModelProperty(value = "分润中的销售费用",required = true)
    private BigDecimal saleAmount = BigDecimal.ZERO;

    //分润中的服务费用
    @ApiModelProperty(value = "分润中的服务费用",required = true)
    private BigDecimal serviceAmount = BigDecimal.ZERO;

    @ApiModelProperty(value = "服务费",required = true)
    private BigDecimal serviceFee = BigDecimal.ZERO;

    @ApiModelProperty(value = "分部",required = true)
    private String feeFlag;

    @ApiModelProperty(value = "支付状态",required = true)
    private Integer payingStatus;

    //订单金额
    @ApiModelProperty(value = "订单金额",required = true)
    private BigDecimal orderAmount = BigDecimal.ZERO;
    
    //内部库存商品销售转化的收入
    private BigDecimal translatedIncome = BigDecimal.ZERO;

    public enum TypeDesc implements BaseEnum<String, StudentPaymentOrderExportDto.TypeDesc> {

        NEW_VIP("NEW_VIP", "VIP课新增"),
        RENEW_VIP("RENEW_VIP", "VIP课续费"),
        NEW_MUSIC("NEW_MUSIC", "乐团新开"),
        ADD_MUSIC("ADD_MUSIC", "乐团扩招"),
        RENEW_MUSIC("RENEW_MUSIC", "乐团续费"),
        MUSIC_CONVERT("MUSIC_CONVERT", "乐团转化"),
        NEW_PRACTICE("NEW_PRACTICE", "网管课新增"),
        RENEW_PRACTICE("RENEW_PRACTICE", "网管课续费"),
        DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级费用"),
        REPAIR("REPAIR", "乐器维修"),
        RETAIL_GOODS("RETAIL_GOODS", "零售乐器/辅件/乐保"),
        COURSE_SCHOOL_BUY("COURSE_SCHOOL_BUY", "课程学校采买"),
        COURSE_STUDENT_BUY("COURSE_STUDENT_BUY", "课程家长采买"),
        LARGE_MUSICAL("LARGE_MUSICAL", "大件乐器"),
        LEVEL("LEVEL","考级"),
        SUBJECT_CHARGE("SUBJECT_CHARGE","声部更改"),
        MUSIC_CHARGE("MUSIC_CHARGE","乐器更换"),
        PARTS_SELL("PARTS_SELL","配件销售"),
        SERVICE_FEE("SERVICE_FEE","维修费"),
        LUCKY_BAG_ACTIVE("LUCKY_BAG_ACTIVE","福袋活动"),
        VISITING_FEE("VISITING_FEE","上门费"),
        VIP_BUY("VIP_BUY","VIP课购买"),
        RECHARGE("RECHARGE","账户充值"),
        MUSIC_UPKEEP("MUSIC_UPKEEP","乐保服务"),
        DOUBLE_ELEVEN2020("DOUBLE_ELEVEN2020","2020双十一活动"),
        HIGH_ONLINE_ACTIVITY("HIGH_ONLINE_ACTIVITY","网基课活动"),
        PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY","加油包"),
        CLOUD_TEACHER_BUY("CLOUD_TEACHER_BUY","系统购买"),
        OTHER("OTHER", "其他");

        private String code;

        private String msg;

        TypeDesc(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        @Override
        public String getCode() {
            return code;
        }

        public String getMsg() {
            return msg;
        }
    }

    //课程形态描述
    //学员没有历史VIP课程则导出为【VIP课新增】
    //学员有历史VIP课程到导出为【VIP课续费】……
    @ApiModelProperty(value = "课程形态描述",required = true)
    private String typeDesc;

    //该笔订单为乐团订单则导出该乐团的【乐团名称】
    //该笔订单非乐团订单时，查询学员是否有在读乐团，无则导出为空，有则导出该学员【进行中】【暂停】乐团名称，进行中>暂停，多个进行中则导出加入乐团时间最近的乐团名称
    @ApiModelProperty(value = "所在乐团",required = true)
    private String feeMusicGroupId;

    @ApiModelProperty(value = "所在乐团",required = true)
    private String feeMusicGroupName;

    @ApiModelProperty(value = "教学点",required = true)
    private String schoolName;

    public BigDecimal getCourseSchoolBuyAmount() {
        return courseSchoolBuyAmount;
    }

    public void setCourseSchoolBuyAmount(BigDecimal courseSchoolBuyAmount) {
        this.courseSchoolBuyAmount = courseSchoolBuyAmount;
    }

    public BigDecimal getRetailGoodsFee() {
        return retailGoodsFee;
    }

    public void setRetailGoodsFee(BigDecimal retailGoodsFee) {
        this.retailGoodsFee = retailGoodsFee;
    }

    public BigDecimal getLargeMusicalFee() {
        return largeMusicalFee;
    }

    public void setLargeMusicalFee(BigDecimal largeMusicalFee) {
        this.largeMusicalFee = largeMusicalFee;
    }

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }

    public String getFeeMusicGroupName() {
        return feeMusicGroupName;
    }

    public void setFeeMusicGroupName(String feeMusicGroupName) {
        this.feeMusicGroupName = feeMusicGroupName;
    }

    public String getFeeMusicGroupId() {
        return feeMusicGroupId;
    }

    public void setFeeMusicGroupId(String feeMusicGroupId) {
        this.feeMusicGroupId = feeMusicGroupId;
    }

    public String getTypeDesc() {
        return typeDesc;
    }

    public void setTypeDesc(String typeDesc) {
        this.typeDesc = typeDesc;
    }

    public BigDecimal getOrderAmount() {
        return orderAmount;
    }

    public void setOrderAmount(BigDecimal orderAmount) {
        this.orderAmount = orderAmount;
    }

    public BigDecimal getSporadicAmount() {
        return sporadicAmount;
    }

    public void setSporadicAmount(BigDecimal sporadicAmount) {
        this.sporadicAmount = sporadicAmount;
    }

    public BigDecimal getMusicalFee() {
        return musicalFee;
    }

    public void setMusicalFee(BigDecimal musicalFee) {
        this.musicalFee = musicalFee;
    }

    public BigDecimal getTeachingFee() {
        return teachingFee;
    }

    public void setTeachingFee(BigDecimal teachingFee) {
        this.teachingFee = teachingFee;
    }

    public BigDecimal getTransferFee() {
        return transferFee;
    }

    public void setTransferFee(BigDecimal transferFee) {
        this.transferFee = transferFee;
    }

    public BigDecimal getPlatformFee() {
		return platformFee;
	}

	public void setPlatformFee(BigDecimal platformFee) {
		this.platformFee = platformFee;
	}

	public String getOrganName() {
        return organName;
    }

    public void setOrganName(String organName) {
        this.organName = organName;
    }

    public String getSubjectName() {
        return subjectName;
    }

    public void setSubjectName(String subjectName) {
        this.subjectName = subjectName;
    }

    public String getSporadicType() {
        return sporadicType;
    }

    public void setSporadicType(String sporadicType) {
        this.sporadicType = sporadicType;
    }

    public BigDecimal getLeaseFee() {
        return leaseFee;
    }

    public void setLeaseFee(BigDecimal leaseFee) {
        this.leaseFee = leaseFee;
    }

    public List<StudentPaymentOrderDetail> getOrderDetailList() {
        return orderDetailList;
    }

    public void setOrderDetailList(List<StudentPaymentOrderDetail> orderDetailList) {
        this.orderDetailList = orderDetailList;
    }

    public Integer getChargeType() {
        return chargeType;
    }

    public void setChargeType(Integer chargeType) {
        this.chargeType = chargeType;
    }

    public List<Goods> getGoodsList() {
        return goodsList;
    }

    public void setGoodsList(List<Goods> goodsList) {
        this.goodsList = goodsList;
    }

    public String getCooperationOrganName() {
        return cooperationOrganName;
    }

    public void setCooperationOrganName(String cooperationOrganName) {
        this.cooperationOrganName = cooperationOrganName;
    }

    public String getRouteMerNo() {
        return routeMerNo;
    }

    public void setRouteMerNo(String routeMerNo) {
        this.routeMerNo = routeMerNo;
    }

    public BigDecimal getRouteAmount() {
        return routeAmount;
    }

    public void setRouteAmount(BigDecimal routeAmount) {
        this.routeAmount = routeAmount;
    }

    public BigDecimal getRouteBalance() {
        return routeBalance;
    }

    public void setRouteBalance(BigDecimal routeBalance) {
        this.routeBalance = routeBalance;
    }

    public BigDecimal getRepairFee() {
        return repairFee;
    }

    public void setRepairFee(BigDecimal repairFee) {
        this.repairFee = repairFee;
    }

    public BigDecimal getMusicGroupCourseFee() {
        return musicGroupCourseFee;
    }

    public void setMusicGroupCourseFee(BigDecimal musicGroupCourseFee) {
        this.musicGroupCourseFee = musicGroupCourseFee;
    }

    public BigDecimal getHighCourseFee() {
        return highCourseFee;
    }

    public void setHighCourseFee(BigDecimal highCourseFee) {
        this.highCourseFee = highCourseFee;
    }

    public BigDecimal getVipCourseFee() {
        return vipCourseFee;
    }

    public void setVipCourseFee(BigDecimal vipCourseFee) {
        this.vipCourseFee = vipCourseFee;
    }

    public BigDecimal getPracticeCourseFee() {
        return practiceCourseFee;
    }

    public void setPracticeCourseFee(BigDecimal practiceCourseFee) {
        this.practiceCourseFee = practiceCourseFee;
    }

    public BigDecimal getTheoryCourseFee() {
        return theoryCourseFee;
    }

    public void setTheoryCourseFee(BigDecimal theoryCourseFee) {
        this.theoryCourseFee = theoryCourseFee;
    }

    public BigDecimal getDegreeFee() {
        return degreeFee;
    }

    public void setDegreeFee(BigDecimal degreeFee) {
        this.degreeFee = degreeFee;
    }

    public BigDecimal getOtherFee() {
        return otherFee;
    }

    public void setOtherFee(BigDecimal otherFee) {
        this.otherFee = otherFee;
    }

    public String getFeeFlag() {
        return feeFlag;
    }

    public void setFeeFlag(String feeFlag) {
        this.feeFlag = feeFlag;
    }

    public BigDecimal getSaleAmount() {
        return saleAmount;
    }

    public void setSaleAmount(BigDecimal saleAmount) {
        this.saleAmount = saleAmount;
    }

    public BigDecimal getServiceAmount() {
        return serviceAmount;
    }

    public void setServiceAmount(BigDecimal serviceAmount) {
        this.serviceAmount = serviceAmount;
    }

    public BigDecimal getServiceFee() {
		return serviceFee;
	}

	public void setServiceFee(BigDecimal serviceFee) {
		this.serviceFee = serviceFee;
	}

	public BigDecimal getMaintenanceFee() {
        return maintenanceFee;
    }

    public void setMaintenanceFee(BigDecimal maintenanceFee) {
        this.maintenanceFee = maintenanceFee;
    }

    public BigDecimal getMaintenanceProductFee() {
        return maintenanceProductFee;
    }

    public void setMaintenanceProductFee(BigDecimal maintenanceProductFee) {
        this.maintenanceProductFee = maintenanceProductFee;
    }

    public String getEduTeacher() {
        return eduTeacher;
    }

    public void setEduTeacher(String eduTeacher) {
        this.eduTeacher = eduTeacher;
    }

    public BigDecimal getCloudTeacherFee() {
        return cloudTeacherFee;
    }

    public void setCloudTeacherFee(BigDecimal cloudTeacherFee) {
        this.cloudTeacherFee = cloudTeacherFee;
    }

    public BigDecimal getVisitFee() {
        return visitFee;
    }

    public void setVisitFee(BigDecimal visitFee) {
        this.visitFee = visitFee;
    }

    public BigDecimal getRechargeFee() {
        return rechargeFee;
    }

    public void setRechargeFee(BigDecimal rechargeFee) {
        this.rechargeFee = rechargeFee;
    }

    public Integer getPayingStatus() {
        return payingStatus;
    }

    public void setPayingStatus(Integer payingStatus) {
        this.payingStatus = payingStatus;
    }

	public BigDecimal getTranslatedIncome() {
		return translatedIncome;
	}

	public void setTranslatedIncome(BigDecimal translatedIncome) {
		this.translatedIncome = translatedIncome;
	}
}
