package cn.cecep.talroad.vo;

import cn.cecep.talroad.common.core.annotation.Excel;
import cn.cecep.talroad.common.core.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@ApiModel(value = "企业基本信息")
@EqualsAndHashCode(callSuper = false)
@Data
public class PcFactoryVo
{

    @ApiModelProperty(value = "主键id")
    /** 主键id */
    private String id;

    @ApiModelProperty(value = "排污单位名称")
    @Excel(name = "排污单位名称")
    private String factoryName;

    @ApiModelProperty(value = "市编码")
    /** 市编码 */
    private String cityCode;

    @ApiModelProperty(value = "市名称")
    /** 市名称 */
    private String cityName;

    @ApiModelProperty(value = "县编码")
    /** 县编码 */
    private String countryCode;

    @ApiModelProperty(value = "县名称")
    /** 县名称 */
    private String countryName;

    @ApiModelProperty(value = "所在流域")
    private String riverBasin;

    @ApiModelProperty(value = "是否重点排污单位")
    /** 是否重点排污单位 */
    private String wipollunit;

    @ApiModelProperty(value = "许可管理类别")
    /** 许可管理类别 */
    private String licenseManType;

    @ApiModelProperty(value = "许可是否整改")
    /** 许可是否整改 */
    private String licenseWabarbeitung;

    @ApiModelProperty(value = "绩效管控级别")
    /** 绩效管控级别 */
    private String preConLevel;

    @ApiModelProperty(value = "排污许可证编码")
    @Excel(name = "排污许可证编码")
    private String pollDisLicenseCode;

    @ApiModelProperty(value = "排污许可证有效期限")
    /** 排污许可证有效期限 */
    private String pollDisLicenseDeadline;

    @ApiModelProperty(value = "排污许可证发证机关")
    /** 排污许可证发证机关 */
    private String pollDisLicenseIssuing;

    @ApiModelProperty(value = "统一社会信用代码")
    /** 统一社会信用代码 */
    private String uscCode;

    @ApiModelProperty(value = "组织机构代码")
    /** 组织机构代码 */
    private String insFramCode;

    @ApiModelProperty(value = "注册地址")
    /** 注册地址 */
    private String address;

    @Excel(name = "生产经营场所地址")
    @ApiModelProperty(value = "生产经营场所地址")
    /** 生产经营场所地址 */
    private String prodBusiOperation;

    @ApiModelProperty(value = "邮政编码")
    /** 邮政编码 */
    private String postalCode;

    @ApiModelProperty(value = "行业类别编码")
    private String industryCategory;

    @Excel(name = "行业类别")
    @ApiModelProperty(value = "行业类别名称")
    private String industryCategoryName;

    @ApiModelProperty(value = "其他行业类别")
    /** 其他行业类别 */
    private String industryCategoryOther;

    @ApiModelProperty(value = "是否投产")
    /** 是否投产 */
    private String whetherProduction;

    @ApiModelProperty(value = "投产日期")
    /** 投产日期 */
    private String productionDate;

    @ApiModelProperty(value = "生产经营场所中心经度")
    /** 生产经营场所中心经度 */
    private String productionLon;

    @ApiModelProperty(value = "生产经营场所中心纬度")
    /** 生产经营场所中心纬度 */
    private String productionLat;

    @Excel(name = "联系人")
    @ApiModelProperty(value = "法定代表人（主要负责人）")
    /** 法定代表人（主要负责人） */
    private String principalMan;

    @ApiModelProperty(value = "技术负责人")
    /** 技术负责人 */
    private String technicalMan;

    @ApiModelProperty(value = "固定电话")
    /** 固定电话 */
    private String tel;

    @ApiModelProperty(value = "移动电话")
    /** 移动电话 */
    @Excel(name = "联系方式")
    private String mobileTelephone;

    @ApiModelProperty(value = "所在地是否属于大气重点控制区")
    /** 所在地是否属于大气重点控制区 */
    private String whetherLocalKeyAri;

    @ApiModelProperty(value = "所在地是否属于总磷控制区")
    /** 所在地是否属于总磷控制区 */
    private String whetherLocalKeyPho;

    @ApiModelProperty(value = "所在地是否属于总氮控制区")
    /** 所在地是否属于总氮控制区 */
    private String whetherLocalKeyNitrogen;

    @ApiModelProperty(value = "所在地是否属于重金属污染物特别排放限值实施区域")
    /** 所在地是否属于重金属污染物特别排放限值实施区域 */
    private String whetherLocalKeyPollArea;

    @ApiModelProperty(value = "是否位于工业园区")
    /** 是否位于工业园区 */
    private String whetherLocalPark;

    @ApiModelProperty(value = "是否有环评审批文件")
    /** 是否有环评审批文件 */
    private String whetherReviewFile;

    @ApiModelProperty(value = "是否有地方政府对违规项目的认定或备案文件")
    /** 是否有地方政府对违规项目的认定或备案文件 */
    private String whetherGovProFile;

    @ApiModelProperty(value = "环境影响评价审批文件文号或备案编号")
    /** 环境影响评价审批文件文号或备案编号 */
    private String environmentalCode;

    @ApiModelProperty(value = "地方政府对违规项目的认定或备案文件文号")
    /** 地方政府对违规项目的认定或备案文件文号 */
    private String govProIdentFile;

    @ApiModelProperty(value = "主要污染物总量分配计划文件文号")
    /** 主要污染物总量分配计划文件文号 */
    private String majorPollutantsCode;

    @ApiModelProperty(value = "主要污染物类别")
    private String majorPollutantCategories;

    @ApiModelProperty(value = "主要污染物类别名称")
    private String majorPollutantCategoriesName;
    @ApiModelProperty(value = "大气主要污染物种类")
    /** 大气主要污染物种类 */
    private String airMainPollutants;
    @ApiModelProperty(value = "大气污染物排放规律")
    /** 大气污染物排放规律 */
    private String airEmissionPollutants;
    @ApiModelProperty(value = "大气污染物排放执行标准")
    /** 大气污染物排放执行标准 */
    private String airDischargePollutants;
    @ApiModelProperty(value = "废水主要污染物种类")
    /** 废水主要污染物种类 */
    private String waterMainPollutants;
    @ApiModelProperty(value = "废水污染物排放规律")
    /** 废水污染物排放规律 */
    private String waterEmissionPollutants;
    @ApiModelProperty(value = "废水污染物排放执行标准")
    /** 废水污染物排放执行标准 */
    private String waterDischargePollutants;
    @ApiModelProperty(value = "排污权使用和交易信息")
    /** 排污权使用和交易信息 */
    private String useTradingEmission;
    @ApiModelProperty(value = "委托贮存/利用/处置环节污染防控技术要求")
    /** 委托贮存/利用/处置环节污染防控技术要求 */
    private String sudLinksPollutionPrevention;
    @ApiModelProperty(value = "工业园区名称")
    /** 工业园区名称 */
    private String industrialParkName;
    @ApiModelProperty(value = "工业园区编码")
    /** 工业园区编码 */
    private String industrialParkCode;
    @ApiModelProperty(value = "是否有主要污染物总量分配计划文件")
    /** 是否有主要污染物总量分配计划文件 */
    private String pollutantTotalFileWhere;
    @ApiModelProperty(value = "生态环境信用类别")
    private String ecoEnvCreditLevel;
    @ApiModelProperty(value = "重点标签")
    private List<String> labels;
    @ApiModelProperty(value = "非重点标签")
    private List<String> nonMajorLabels;
    @Excel(name = "标签")
    private String labelStr;
    @Excel(name = "所在区县")
    private String regionStr;
    @ApiModelProperty("许可证二维码地址")
    private String qrCodeUrl;
    @ApiModelProperty("实际排放量")
    private BigDecimal emissionsActual;
    @ApiModelProperty(name = "排污许可行业名称")
    private String industryPermissionName;

    @ApiModelProperty(name = "是否包含指定标签值 1:是, 0:否")
    private Boolean labelChecked;

    public String getMajorPollutantCategoriesName() {
        if (StringUtils.isNotEmpty(majorPollutantCategories)) {
            Map<String, String> majorMap = new HashMap<>();
            majorMap.put("1", "大气环境");
            majorMap.put("2", "水环境");
            majorMap.put("3", "土壤环境");
            majorMap.put("4", "噪声环境");

            String[] split = majorPollutantCategories.split(",");
            List<String> names = new ArrayList<>();

            for (String s : split) {
                String name = majorMap.get(s);
                if (name != null) {
                    names.add(name);
                }
            }
            return String.join("，", names);
        }
        return null;
    }

    @ApiModel(value = "高级搜索地图点位vo")
    @Data
    public static class MapPointVo {
        @ApiModelProperty(value = "主键id")
        private String id;

        @ApiModelProperty(value = "排污单位名称")
        private String factoryName;

        @ApiModelProperty(value = "生产经营场所中心经度")
        private String productionLon;

        @ApiModelProperty(value = "生产经营场所中心纬度")
        private String productionLat;

        @ApiModelProperty("实际排放量")
        private BigDecimal emissionsActual;

        @ApiModelProperty(value = "许可管理类别")
        private String licenseManType;

        @ApiModelProperty(value = "许可是否整改")
        private String licenseWabarbeitung;

        @ApiModelProperty(value = "县编码")
        /** 县编码 */
        private String countryCode;

        @ApiModelProperty(value = "行业类别名称")
        private String industryCategoryName;
    }

    @ApiModel(value = "分表计电大屏-报警企业排名vo")
    @Data
    public static class WarningRank {
        @ApiModelProperty(value = "企业名称")
        private String factoryName;

        @ApiModelProperty(value = "报警数量")
        private Long waringCount;

        public WarningRank() {
        }

        public WarningRank(String factoryName, Long waringCount) {
            this.factoryName = factoryName;
            this.waringCount = waringCount;
        }
    }

}
