package com.bonus.canteen.core.report.statistics.order.analysis.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.bonus.canteen.core.common.utils.CustomNumberConverter;
import com.bonus.canteen.core.report.statistics.util.SalesTypeConverter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

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

@ContentRowHeight(25)
@HeadRowHeight(25)
@ColumnWidth(25)
@ApiModel("菜品销售排行")
public class ReportAnalysisDishesSaleVO {
   @ApiModelProperty("统计日期")
   private LocalDate statisticDate;
   @ApiModelProperty("食堂id")
   private Long canteenId;
   @ApiModelProperty("档口id")
   private Long stallId;
   @ApiModelProperty("食堂名称")
   private String canteenName;
   @ApiModelProperty("档口名称")
   private String stallName;
   @ExcelProperty(
      value = {"食堂/档口名称"},
      order = 1
   )
   @ApiModelProperty("食堂/档口名称")
   private String canteenStallName;
   @ApiModelProperty("区域id")
   private Long areaId;
   @ExcelProperty(
      value = {"区域"},
      order = 2
   )
   @ApiModelProperty("当前区域名称")
   private String areaName;
   @ApiModelProperty("菜品/商品id")
   private Long goodsDishesId;
   @ExcelProperty(
      value = {"菜品/商品名称"},
      order = 5
   )
   @ApiModelProperty("菜品/商品名称")
   private String goodsDishesName;
   @ExcelProperty(
      value = {"菜品/商品编号"},
      order = 4
   )
   @ApiModelProperty("菜品/商品编号")
   private String goodsDishesNum;
   @ExcelProperty(
      value = {"购买人数"},
      order = 9
   )
   @ApiModelProperty("购买人数")
   private Integer custNum;
   @ExcelProperty(
      value = {"购买率"},
      order = 9
   )
   @ApiModelProperty("购买率")
   private BigDecimal purchaseRate;
   @ExcelProperty(
      value = {"复购率"},
      order = 9
   )
   @ApiModelProperty("复购率")
   private Integer repurchaseRate;
   @ApiModelProperty("类别:1 菜品 2 套餐 3 商品 4 按键 5 补扣 6 报餐")
   private Integer detailType;
   @ExcelProperty(
      value = {"菜品类别"},
      order = 6
   )
   @ApiModelProperty("类别:1 菜品 2 套餐 3 商品 4 按键 5 补扣 6 报餐")
   private String detailTypeName;
   @ApiModelProperty("菜品类型ID")
   private Long typeId;
   @ExcelProperty(
      value = {"菜品类型"},
      order = 6
   )
   @ApiModelProperty("菜品类型")
   private String typeName;
   @ExcelProperty(
      value = {"销售数量"},
      order = 8
   )
   @ApiModelProperty("数量/重量（称重按照计量单位换算成份）")
   private Double quantity;
   @ExcelProperty(
      value = {"销售方式"},
      order = 7,
      converter = SalesTypeConverter.class
   )
   @ApiModelProperty("销售方式 1 按份 2 称重")
   private Integer salesMode;
   @ExcelProperty(
      value = {"销售金额"},
      order = 10,
      converter = CustomNumberConverter.class
   )
   @ApiModelProperty("实际付款金额 分")
   private Integer realAmount;
   @ExcelProperty(
      value = {"平均售价"},
      order = 11,
      converter = CustomNumberConverter.class
   )
   @ApiModelProperty("平均售价 分")
   private Integer avgAmount;
   @ExcelProperty(
      value = {"计价单位"},
      order = 9
   )
   @ApiModelProperty("计价单位：100g、份、瓶、公斤...")
   private String unitName;
   @ExcelProperty(
      value = {"用户评分"},
      order = 12
   )
   @ApiModelProperty("菜品评分")
   private BigDecimal dishesStarLevel;

   public LocalDate getStatisticDate() {
      return this.statisticDate;
   }

   public Long getCanteenId() {
      return this.canteenId;
   }

   public Long getStallId() {
      return this.stallId;
   }

   public String getCanteenName() {
      return this.canteenName;
   }

   public String getStallName() {
      return this.stallName;
   }

   public String getCanteenStallName() {
      return this.canteenStallName;
   }

   public Long getAreaId() {
      return this.areaId;
   }

   public String getAreaName() {
      return this.areaName;
   }

   public Long getGoodsDishesId() {
      return this.goodsDishesId;
   }

   public String getGoodsDishesName() {
      return this.goodsDishesName;
   }

   public String getGoodsDishesNum() {
      return this.goodsDishesNum;
   }

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

   public BigDecimal getPurchaseRate() {
      return this.purchaseRate;
   }

   public Integer getRepurchaseRate() {
      return this.repurchaseRate;
   }

   public Integer getDetailType() {
      return this.detailType;
   }

   public String getDetailTypeName() {
      return this.detailTypeName;
   }

   public Long getTypeId() {
      return this.typeId;
   }

   public String getTypeName() {
      return this.typeName;
   }

   public Double getQuantity() {
      return this.quantity;
   }

   public Integer getSalesMode() {
      return this.salesMode;
   }

   public Integer getRealAmount() {
      return this.realAmount;
   }

   public Integer getAvgAmount() {
      return this.avgAmount;
   }

   public String getUnitName() {
      return this.unitName;
   }

   public BigDecimal getDishesStarLevel() {
      return this.dishesStarLevel;
   }

   public ReportAnalysisDishesSaleVO setStatisticDate(final LocalDate statisticDate) {
      this.statisticDate = statisticDate;
      return this;
   }

   public ReportAnalysisDishesSaleVO setCanteenId(final Long canteenId) {
      this.canteenId = canteenId;
      return this;
   }

   public ReportAnalysisDishesSaleVO setStallId(final Long stallId) {
      this.stallId = stallId;
      return this;
   }

   public ReportAnalysisDishesSaleVO setCanteenName(final String canteenName) {
      this.canteenName = canteenName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setStallName(final String stallName) {
      this.stallName = stallName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setCanteenStallName(final String canteenStallName) {
      this.canteenStallName = canteenStallName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setAreaId(final Long areaId) {
      this.areaId = areaId;
      return this;
   }

   public ReportAnalysisDishesSaleVO setAreaName(final String areaName) {
      this.areaName = areaName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setGoodsDishesId(final Long goodsDishesId) {
      this.goodsDishesId = goodsDishesId;
      return this;
   }

   public ReportAnalysisDishesSaleVO setGoodsDishesName(final String goodsDishesName) {
      this.goodsDishesName = goodsDishesName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setGoodsDishesNum(final String goodsDishesNum) {
      this.goodsDishesNum = goodsDishesNum;
      return this;
   }

   public ReportAnalysisDishesSaleVO setCustNum(final Integer custNum) {
      this.custNum = custNum;
      return this;
   }

   public ReportAnalysisDishesSaleVO setPurchaseRate(final BigDecimal purchaseRate) {
      this.purchaseRate = purchaseRate;
      return this;
   }

   public ReportAnalysisDishesSaleVO setRepurchaseRate(final Integer repurchaseRate) {
      this.repurchaseRate = repurchaseRate;
      return this;
   }

   public ReportAnalysisDishesSaleVO setDetailType(final Integer detailType) {
      this.detailType = detailType;
      return this;
   }

   public ReportAnalysisDishesSaleVO setDetailTypeName(final String detailTypeName) {
      this.detailTypeName = detailTypeName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setTypeId(final Long typeId) {
      this.typeId = typeId;
      return this;
   }

   public ReportAnalysisDishesSaleVO setTypeName(final String typeName) {
      this.typeName = typeName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setQuantity(final Double quantity) {
      this.quantity = quantity;
      return this;
   }

   public ReportAnalysisDishesSaleVO setSalesMode(final Integer salesMode) {
      this.salesMode = salesMode;
      return this;
   }

   public ReportAnalysisDishesSaleVO setRealAmount(final Integer realAmount) {
      this.realAmount = realAmount;
      return this;
   }

   public ReportAnalysisDishesSaleVO setAvgAmount(final Integer avgAmount) {
      this.avgAmount = avgAmount;
      return this;
   }

   public ReportAnalysisDishesSaleVO setUnitName(final String unitName) {
      this.unitName = unitName;
      return this;
   }

   public ReportAnalysisDishesSaleVO setDishesStarLevel(final BigDecimal dishesStarLevel) {
      this.dishesStarLevel = dishesStarLevel;
      return this;
   }

}
