package com.ruoyi.web.modules.industryservice.domain;

import java.math.BigDecimal;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 养殖大户数据填报实体，对应表 {@code biz_large_livestock_farmer}。
 * <p>
 * 业务粒度：某一自然年、某一自然月、某一行政村下的某一企业（养殖大户）快照。<br>
 * 唯一键：{@code (stat_year, stat_month, village_dept_id, enterprise_name)}。<br>
 * 乡镇由所选村在 {@code sys_dept} 中的上级反推写入，前端一般只需传村 ID。<br>
 * 派生字段（存栏小计、草场面积小计、利润、是否草畜平衡户）在保存校验时由
 * {@link com.ruoyi.web.modules.industryservice.support.LargeLivestockFarmerDerivedSupport} 计算后落库。
 * </p>
 */
public class BizLargeLivestockFarmer extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private Long id;

    /** 所属年份（与导入/导出表单选择的年份一致，非从 Excel 标题解析） */
    @NotNull(message = "所属年份不能为空")
    private Integer statYear;

    /** 所属月份 1～12（不可填报未来月） */
    @NotNull(message = "所属月份不能为空")
    private Integer statMonth;

    /** 所属乡镇 dept_id（由村 parentId 反推） */
    private Long townDeptId;

    /** 乡镇名称（冗余展示，随村反推写入） */
    private String townName;

    /** 所属村 dept_id（必填；唯一键组成部分） */
    @NotNull(message = "所属村不能为空")
    private Long villageDeptId;

    /** 村名称（冗余展示） */
    private String villageName;

    /** 企业名称（必填；唯一键组成部分；同村同月不可重复） */
    @NotBlank(message = "企业名称不能为空")
    private String enterpriseName;

    /** 法定代表人 */
    private String legalRepresentative;

    /** 企业类型：个体工商户/个人独资企业/有限责任公司/合伙企业/其他；空则默认个体工商户 */
    private String enterpriseType;

    /** 注册资本（万元） */
    private BigDecimal registeredCapital;

    /** 成立时间，建议 yyyy-MM-dd；Excel 日期单元格会格式化为此串 */
    private String establishDate;

    /** 从事畜牧业生产经营劳力人员（人） */
    private Integer livestockLaborCount;

    /** 年底牲畜存栏小计（头只）= 牛年底存栏 + 羊年底存栏（派生落库） */
    private Integer stockSubtotal;

    /** 牛年底存栏（头） */
    private Integer cattleYearEndStock;

    /** 牛能繁母畜（头） */
    private Integer cattleBreedingFemaleStock;

    /** 羊年底存栏（只） */
    private Integer sheepYearEndStock;

    /** 羊能繁母畜（只） */
    private Integer sheepBreedingFemaleStock;

    /** 牛出栏（头） */
    private Integer cattleOutbound;

    /** 羊出栏（只） */
    private Integer sheepOutbound;

    /** 草场面积小计（亩）= 草畜平衡面积 + 流转经营草地面积（派生落库） */
    private BigDecimal grasslandAreaSubtotal;

    /** 草畜平衡面积（亩） */
    private BigDecimal grassBalanceArea;

    /** 流转经营草地面积（亩） */
    private BigDecimal transferGrassArea;

    /** 核定年末草畜平衡载畜量（绵羊单位） */
    private BigDecimal approvedCarryingCapacity;

    /** 年底牲畜存栏（绵羊单位） */
    private BigDecimal yearEndStockSheepUnit;

    /**
     * 是否草畜平衡户（是/否，派生落库）。
     * 核定载畜量 ≥ 年底存栏绵羊单位 →「是」；否则「否」；缺一则空。
     */
    private String isGrassBalanced;

    /** 年度经营总收入（万元） */
    private BigDecimal income;

    /** 年度经营总支出（万元） */
    private BigDecimal expense;

    /** 利润（万元）= 收入 − 支出（派生落库；收入或支出为空则利润为空） */
    private BigDecimal profit;

    /** 补助资金年份（选择「是」享受补助时可填） */
    private Integer subsidyYear;

    /** 是否享受补助（是/否） */
    private String hasSubsidy;

    /** 补贴资金（万元） */
    private BigDecimal subsidyAmount;

    /** 是否有注册商标（是/否） */
    private String hasTrademark;

    /** 是否通过农产品质量认证（是/否） */
    private String hasQualityCert;

    /** 产品销售渠道：其他/线上销售/线下集市/企事业单位/商超门店；空则默认其他 */
    private String salesChannel;

    /** 带动人数（人） */
    private Integer drivenPopulation;

    /** 发放工资（万元） */
    private BigDecimal wagePaid;

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public Integer getStatYear()
    {
        return statYear;
    }

    public void setStatYear(Integer statYear)
    {
        this.statYear = statYear;
    }

    public Integer getStatMonth()
    {
        return statMonth;
    }

    public void setStatMonth(Integer statMonth)
    {
        this.statMonth = statMonth;
    }

    public Long getTownDeptId()
    {
        return townDeptId;
    }

    public void setTownDeptId(Long townDeptId)
    {
        this.townDeptId = townDeptId;
    }

    public String getTownName()
    {
        return townName;
    }

    public void setTownName(String townName)
    {
        this.townName = townName;
    }

    public Long getVillageDeptId()
    {
        return villageDeptId;
    }

    public void setVillageDeptId(Long villageDeptId)
    {
        this.villageDeptId = villageDeptId;
    }

    public String getVillageName()
    {
        return villageName;
    }

    public void setVillageName(String villageName)
    {
        this.villageName = villageName;
    }

    public String getEnterpriseName()
    {
        return enterpriseName;
    }

    public void setEnterpriseName(String enterpriseName)
    {
        this.enterpriseName = enterpriseName;
    }

    public String getLegalRepresentative()
    {
        return legalRepresentative;
    }

    public void setLegalRepresentative(String legalRepresentative)
    {
        this.legalRepresentative = legalRepresentative;
    }

    public String getEnterpriseType()
    {
        return enterpriseType;
    }

    public void setEnterpriseType(String enterpriseType)
    {
        this.enterpriseType = enterpriseType;
    }

    public BigDecimal getRegisteredCapital()
    {
        return registeredCapital;
    }

    public void setRegisteredCapital(BigDecimal registeredCapital)
    {
        this.registeredCapital = registeredCapital;
    }

    public String getEstablishDate()
    {
        return establishDate;
    }

    public void setEstablishDate(String establishDate)
    {
        this.establishDate = establishDate;
    }

    public Integer getLivestockLaborCount()
    {
        return livestockLaborCount;
    }

    public void setLivestockLaborCount(Integer livestockLaborCount)
    {
        this.livestockLaborCount = livestockLaborCount;
    }

    public Integer getStockSubtotal()
    {
        return stockSubtotal;
    }

    public void setStockSubtotal(Integer stockSubtotal)
    {
        this.stockSubtotal = stockSubtotal;
    }

    public Integer getCattleYearEndStock()
    {
        return cattleYearEndStock;
    }

    public void setCattleYearEndStock(Integer cattleYearEndStock)
    {
        this.cattleYearEndStock = cattleYearEndStock;
    }

    public Integer getCattleBreedingFemaleStock()
    {
        return cattleBreedingFemaleStock;
    }

    public void setCattleBreedingFemaleStock(Integer cattleBreedingFemaleStock)
    {
        this.cattleBreedingFemaleStock = cattleBreedingFemaleStock;
    }

    public Integer getSheepYearEndStock()
    {
        return sheepYearEndStock;
    }

    public void setSheepYearEndStock(Integer sheepYearEndStock)
    {
        this.sheepYearEndStock = sheepYearEndStock;
    }

    public Integer getSheepBreedingFemaleStock()
    {
        return sheepBreedingFemaleStock;
    }

    public void setSheepBreedingFemaleStock(Integer sheepBreedingFemaleStock)
    {
        this.sheepBreedingFemaleStock = sheepBreedingFemaleStock;
    }

    public Integer getCattleOutbound()
    {
        return cattleOutbound;
    }

    public void setCattleOutbound(Integer cattleOutbound)
    {
        this.cattleOutbound = cattleOutbound;
    }

    public Integer getSheepOutbound()
    {
        return sheepOutbound;
    }

    public void setSheepOutbound(Integer sheepOutbound)
    {
        this.sheepOutbound = sheepOutbound;
    }

    public BigDecimal getGrasslandAreaSubtotal()
    {
        return grasslandAreaSubtotal;
    }

    public void setGrasslandAreaSubtotal(BigDecimal grasslandAreaSubtotal)
    {
        this.grasslandAreaSubtotal = grasslandAreaSubtotal;
    }

    public BigDecimal getGrassBalanceArea()
    {
        return grassBalanceArea;
    }

    public void setGrassBalanceArea(BigDecimal grassBalanceArea)
    {
        this.grassBalanceArea = grassBalanceArea;
    }

    public BigDecimal getTransferGrassArea()
    {
        return transferGrassArea;
    }

    public void setTransferGrassArea(BigDecimal transferGrassArea)
    {
        this.transferGrassArea = transferGrassArea;
    }

    public BigDecimal getApprovedCarryingCapacity()
    {
        return approvedCarryingCapacity;
    }

    public void setApprovedCarryingCapacity(BigDecimal approvedCarryingCapacity)
    {
        this.approvedCarryingCapacity = approvedCarryingCapacity;
    }

    public BigDecimal getYearEndStockSheepUnit()
    {
        return yearEndStockSheepUnit;
    }

    public void setYearEndStockSheepUnit(BigDecimal yearEndStockSheepUnit)
    {
        this.yearEndStockSheepUnit = yearEndStockSheepUnit;
    }

    public String getIsGrassBalanced()
    {
        return isGrassBalanced;
    }

    public void setIsGrassBalanced(String isGrassBalanced)
    {
        this.isGrassBalanced = isGrassBalanced;
    }

    public BigDecimal getIncome()
    {
        return income;
    }

    public void setIncome(BigDecimal income)
    {
        this.income = income;
    }

    public BigDecimal getExpense()
    {
        return expense;
    }

    public void setExpense(BigDecimal expense)
    {
        this.expense = expense;
    }

    public BigDecimal getProfit()
    {
        return profit;
    }

    public void setProfit(BigDecimal profit)
    {
        this.profit = profit;
    }

    public Integer getSubsidyYear()
    {
        return subsidyYear;
    }

    public void setSubsidyYear(Integer subsidyYear)
    {
        this.subsidyYear = subsidyYear;
    }

    public String getHasSubsidy()
    {
        return hasSubsidy;
    }

    public void setHasSubsidy(String hasSubsidy)
    {
        this.hasSubsidy = hasSubsidy;
    }

    public BigDecimal getSubsidyAmount()
    {
        return subsidyAmount;
    }

    public void setSubsidyAmount(BigDecimal subsidyAmount)
    {
        this.subsidyAmount = subsidyAmount;
    }

    public String getHasTrademark()
    {
        return hasTrademark;
    }

    public void setHasTrademark(String hasTrademark)
    {
        this.hasTrademark = hasTrademark;
    }

    public String getHasQualityCert()
    {
        return hasQualityCert;
    }

    public void setHasQualityCert(String hasQualityCert)
    {
        this.hasQualityCert = hasQualityCert;
    }

    public String getSalesChannel()
    {
        return salesChannel;
    }

    public void setSalesChannel(String salesChannel)
    {
        this.salesChannel = salesChannel;
    }

    public Integer getDrivenPopulation()
    {
        return drivenPopulation;
    }

    public void setDrivenPopulation(Integer drivenPopulation)
    {
        this.drivenPopulation = drivenPopulation;
    }

    public BigDecimal getWagePaid()
    {
        return wagePaid;
    }

    public void setWagePaid(BigDecimal wagePaid)
    {
        this.wagePaid = wagePaid;
    }
}
