瀏覽代碼

基本信息评分修改版

xufei 5 年之前
父節點
當前提交
2ab43f0b0b

+ 2 - 0
.gitignore

@@ -23,3 +23,5 @@ metastore_db/
 derby.log
 log4j.properties
 dependency-reduced-pom.xml
+*.log
+appstatus

+ 6 - 0
pom.xml

@@ -105,6 +105,12 @@
             <artifactId>hbase-spark</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 283 - 0
src/main/java/com/winhc/bigdata/calc/DimScoreV2.java

@@ -0,0 +1,283 @@
+package com.winhc.bigdata.calc;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.winhc.bigdata.calc.bean.EciScoreDetail;
+import com.winhc.bigdata.calc.enums.Dict;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Date;
+import java.util.HashMap;
+
+/**
+ * 交易评估评分
+ */
+public class DimScoreV2 {
+
+    static final Log log = LogFactory.getLog(DimScoreV2.class);
+
+    // 计算注册资本得分
+    public static EciScoreDetail registCapiScore(String registCapiStr) {
+
+        if (StrUtil.isBlank(registCapiStr)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册资本", "<50万元", 5, 25);
+        }
+        double registCapi = 0;
+        String registType = null;
+        float registScore = 5;
+        try {
+            registCapi = MoneyConversion.convert(registCapiStr, MoneyConversion.MoneyUnit.万元);
+            if (registCapi < 50) {
+                registType = "<50万元";
+                registScore = 5;
+            } else if (registCapi >= 50 && registCapi < 500) {
+                registType = "≥50万元,<500万元";
+                registScore = 10;
+            } else if (registCapi >= 500 && registCapi < 1000) {
+                registType = "≥500万元,<1000万元";
+                registScore = 15;
+            } else if (registCapi >= 1000 && registCapi < 5000) {
+                registType = "≥1000万元,<5000万元";
+                registScore = 20;
+            } else if (registCapi >= 5000) {
+                registType = "≥5000万元";
+                registScore = 25;
+            }
+        } catch (Exception e) {
+            log.error(e.toString());
+        }
+        return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册资本", registType, registScore, 25);
+    }
+
+    // 计算实缴资本比例得分
+    public static EciScoreDetail recCapScore(String recCapStr, String registCapiStr) {
+        if (StrUtil.isBlank(recCapStr) || StrUtil.isBlank(registCapiStr)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "未公示", 3f, 5);
+        }
+        try {
+            double registCapi = MoneyConversion.convert(registCapiStr, MoneyConversion.MoneyUnit.万元);
+            double recCap = MoneyConversion.convert(recCapStr, MoneyConversion.MoneyUnit.万元);
+            if (registCapi <= 0) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:0", 1f, 5);
+            }
+            double rate = NumberUtil.div(recCap, registCapi, 4);
+            if (rate == 0) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:0", 1f, 5);
+            } else if (rate > 0 && rate < NumberUtil.div(1, 5, 4)) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:>0,<1/5", 2f, 5);
+            } else if (rate >= NumberUtil.div(1, 5, 4) && rate < NumberUtil.div(1, 3, 4)) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:≥1/5,<1/3", 3f, 5);
+            } else if (rate >= NumberUtil.div(1, 3, 4) && rate < NumberUtil.div(2, 3, 4)) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:≥1/3,≤2/3", 4f, 5);
+            } else if (rate >= NumberUtil.div(2, 3, 4) && rate <= 1) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "实缴/注册:≥2/3,≤1", 5f, 5);
+            }
+        } catch (Exception e) {
+            log.error(e.toString());
+        }
+        return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "实缴资本", "未公示", 3f, 5);
+    }
+
+    // 所属行业得分
+    public static EciScoreDetail industryScore(String industry) {
+        if (StrUtil.isEmpty(industry)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "所属行业", "其他", 6, 10);
+        }
+        float score = 0;
+        switch (industry) {
+            case "批发和零售业":
+                score = 4;
+                break;
+            case "农、林、牧、渔业":
+                score = 5;
+                break;
+            case "居民服务、修理和其他服务业":
+            case "信息传输、软件和信息科技服务业":
+                score = 7;
+                break;
+            case "科学研究和技术服务业":
+            case "住宿和餐饮业":
+            case "教育":
+            case "金融业":
+            case "采矿业":
+            case "公共管理、社会保障和社会组织":
+                score = 8;
+                break;
+            case "文化、教育和娱乐业":
+            case "房地产业":
+                score = 9;
+                break;
+            case "制造业":
+            case "建筑业":
+            case "交通运输、仓储和邮政业":
+            case "水利、环境和公共设置管理业":
+            case "卫生和社会工作":
+            case "电力、热力、燃气及谁生产和供应业":
+            case "国际组织":
+                score = 10;
+                break;
+            default:
+                score = 6;
+                break;
+        }
+        return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "所属行业", industry, score, 10);
+    }
+
+    // 企业类型得分
+    public static EciScoreDetail econKindScore(String econKind, String isOnStock) {
+        if (StrUtil.isAllBlank(econKind)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", econKind, 9, 15);
+        }
+        float score = 6;
+        float extScore = 0;
+        if (StrUtil.isBlank(econKind)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业类型", econKind, score, 15);
+        }
+        if (StrUtil.containsAny(econKind, "国资委", "国家机构", "国有资产")) {
+            extScore = 15;
+        }
+        if ("1".equals(isOnStock) || (econKind.contains("非上市") && econKind.contains("上市"))) {
+            extScore = 8;
+        }
+        if (StrUtil.isBlank(econKind)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业类型", econKind, score, 15);
+        } else if (StrUtil.containsAny(econKind, "普通合伙")) {
+            score = 6;
+        } else if (StrUtil.containsAny(econKind, "个体工商户", "有限合伙", "联营企业")) {
+            score = 7;
+        } else if (econKind.contains("集体所有制")) {
+            score = 8;
+        } else if (StrUtil.containsAny(econKind, "独资企业")) {
+            score = 10;
+        } else if (StrUtil.containsAny(econKind, "外商投资企业")) {
+            score = 12;
+        } else if (StrUtil.containsAny(econKind, "国有", "国企", "国有独资", "国有控股")) {
+            score = 13;
+        } else if (econKind.contains("股份有限公司")) {
+            score = 15;
+        } else if (econKind.contains("有限责任公司")) {
+            score = 10;
+        } else {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业类型", "其他", 9, 15);
+        }
+        EciScoreDetail detail = new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业类型", econKind, score, 15);
+        detail.setExtraScore(extScore);
+        return detail;
+    }
+
+    // 企业状态得分
+    public static EciScoreDetail eciStatusScore(String status) {
+//        String memo = StrUtil.format("1、出现该情况整体或按比例降低;2、该企业已经经营异常,目前是 {} 状态," +
+//                "企业已经不具备独立主体资格,无法独立对外偿债,风险巨大。",status);
+        if (StrUtil.isAllBlank(status)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 10f, 25);
+        }
+        String memo = "";
+        if (StrUtil.containsAny(status, "在业", "存续", "迁入", "迁出", "在营", "开业")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 25f, 25);
+        } else if (StrUtil.containsAny(status, "停业")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 5f, 25);
+        } else if (StrUtil.containsAny(status, "吊销", "清算")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 0f, memo, Dict.ECI_WARN.严重.getCode(), 25);
+        } else if (StrUtil.equals(status, "注销")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 0f, memo, Dict.ECI_WARN.严重.getCode(), 25);
+        }
+        return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "企业状态", status, 10f, 25);
+    }
+
+    // 企业成立日期得分
+    public static EciScoreDetail startDateScore(String startDate) {
+        if (StrUtil.isAllBlank(startDate)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "", 2f, 8);
+        }
+        try {
+            Date start = DateUtil.parse(startDate);
+            Date now = new Date();
+            long dis = DateUtil.betweenYear(start, now, true);
+            if (dis < 1) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "【当年年月】-成立年月:<1年", 2f, 8);
+            } else if (dis < 3) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "【当年年月】-成立年月:≥1年,<3年", 5f, 8);
+            } else if (dis < 6) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "【当年年月】-成立年月:≥3年,<6年", 6f, 8);
+            } else if (dis < 10) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "【当年年月】-成立年月:≥6年,<10年", 7f, 8);
+            } else {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "【当年年月】-成立年月:≥10年", 8f, 8);
+            }
+        } catch (Exception var) {
+            log.error("", var);
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "成立日期", "", 2f, 8);
+        }
+    }
+
+    // 企业营业期限得分
+    public static EciScoreDetail termScore(String termEnd) {
+        if (StrUtil.isAllBlank(termEnd)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "营业期限", "", 2f, 5);
+        }
+        try {
+            Date end = DateUtil.parse(termEnd);
+            Date start = new Date();
+            if (StrUtil.isNotBlank(termEnd)) {
+                end = DateUtil.parse(termEnd);
+            }
+            long dis = DateUtil.betweenYear(start, end, true);
+            if (dis < 1) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "营业期限", "营业期限截止日-【当年年月】<1年", 2f, 5);
+            } else if (dis < 5) {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "营业期限", "营业期限截止日-【当年年月】<5年,≥1年", 4f, 5);
+            } else {
+                return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "营业期限", "营业期限截止日-【当年年月】≥5年", 5f, 5);
+            }
+        } catch (Exception var) {
+            log.error("", var);
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "营业期限", "", 2f, 5);
+        }
+    }
+
+
+    // 企业注册地址得分
+    public static EciScoreDetail addressScore(String province) {
+        if (StrUtil.isBlank(province)) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", province, 2f, 7);
+        }
+        if (province.contains("北京") || province.contains("上海") || province.contains("广东") || province.contains("江苏")
+                || province.contains("浙江")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", "北上广、江苏、浙江", 7f, 7);
+        } else if (province.contains("山东") || province.contains("四川") || province.contains("河南") ||
+                province.contains("安徽") || province.contains("河北") || province.contains("重庆") || province.contains("湖南") ||
+                province.contains("湖北") || province.contains("天津") || province.contains("贵州")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", "山东、四川、河南、安徽、河北、重庆、湖南、湖北、天津、贵州", 5f, 7);
+        } else if (province.contains("黑龙江") || province.contains("吉林") || province.contains("辽宁") || province.contains("宁夏") ||
+                province.contains("内蒙古") || province.contains("西藏") || province.contains("新疆") || province.contains("青海") ||
+                province.contains("海南")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", "黑龙江、吉林、辽宁、宁夏、内蒙古、西藏、新疆、青海、海南", 4f, 7);
+        } else if (province.contains("山西") || province.contains("陕西") || province.contains("云南") || province.contains("广西")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", "山西、陕西、云南、广西", 3f, 7);
+        } else if (province.contains("香港") || province.contains("澳门") || province.contains("台湾")) {
+            return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", "港澳台", 1f, 7);
+        }
+        return new EciScoreDetail(Dict.ECI_KIND.基本情况.getCode(), "注册地址", province, 2f, 7);
+    }
+
+    public static HashMap<String, String> bean2Map(EciScoreDetail s) {
+
+        HashMap<String, String> m = new HashMap<>();
+        m.put("kind", s.getKind().toString());
+        m.put("project", s.getProject());
+        m.put("type", s.getType());
+        m.put("score", String.valueOf(s.getScore()));
+        m.put("total", String.valueOf(s.getTotal()));
+        m.put("extraScore", String.valueOf(s.getExtraScore()));
+        return m;
+    }
+
+    public static void main(String[] args) {
+
+    }
+}

+ 84 - 0
src/main/java/com/winhc/bigdata/calc/bean/EciScoreDetail.java

@@ -0,0 +1,84 @@
+package com.winhc.bigdata.calc.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Set;
+import java.util.TreeSet;
+
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class EciScoreDetail {
+    // 得分大类
+    private Integer kind;
+    // 得分项目
+    private String project;
+    // 得分描述
+    private String type;
+    // 得分
+    private float score;
+    // 总分
+    private double total;
+    // 备注
+    private String memo;
+    // 评级
+    private Integer warn;
+    // 附加分
+    private float extraScore = 0f;
+
+    // 措施
+    private Set<Integer> measureIds;
+
+    public EciScoreDetail(Integer kind,String project, String type, float score, double total) {
+        this.kind = kind;
+        this.project = project;
+        this.type = type;
+        this.score = score;
+        this.total = total;
+    }
+
+    public EciScoreDetail(Integer kind,String project, String type, float score, String memo, Integer warn, double total) {
+        this.kind = kind;
+        this.project = project;
+        this.type = type;
+        this.score = score;
+        this.memo = memo;
+        this.warn = warn;
+        this.total = total;
+    }
+
+
+    /**
+     * 设置措施ID
+     * @param measureId
+     */
+    public EciScoreDetail setMeasureId(Integer measureId) {
+        if (measureId == null) {
+            return this;
+        }
+        if (this.measureIds == null) {
+            this.measureIds = new TreeSet<>();
+        }
+        this.measureIds.add(measureId);
+        return this;
+    }
+
+    @Override
+    public String toString() {
+        return "EciScoreDetail{" +
+                "kind=" + kind +
+                ", project='" + project + '\'' +
+                ", type='" + type + '\'' +
+                ", score=" + score +
+                ", total=" + total +
+                ", memo='" + memo + '\'' +
+                ", warn=" + warn +
+                ", extraScore=" + extraScore +
+                '}';
+    }
+}

+ 479 - 0
src/main/java/com/winhc/bigdata/calc/enums/Dict.java

@@ -0,0 +1,479 @@
+package com.winhc.bigdata.calc.enums;
+
+public class Dict {
+
+    public enum Source {
+        app, WX_GZH
+    }
+
+    public enum YesOrNo {
+        YES("Y"), No("N");
+
+        public final String code;
+
+        YesOrNo(String code) {
+            this.code = code;
+        }
+    }
+
+    public enum VersionCode {
+        老版本(1), 新版本(2);
+
+        public final Integer code;
+
+        VersionCode(Integer code) {
+            this.code = code;
+        }
+    }
+
+    public static enum JudgeQueryType {
+        被告("defendants"), 原告("plaintiffs"), 全部案件("party_info");
+        private String code;
+
+        JudgeQueryType(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+
+        public static String getDescByCode(String code) {
+            for (JudgeQueryType e : JudgeQueryType.values()) {
+                if (e.getCode().equals(code)) {
+                    return e.name();
+                }
+            }
+            return null;
+        }
+    }
+
+    public enum LitigantType {
+        当事人("0"), 企业("1");
+
+        public final String code;
+
+        LitigantType(String code) {
+            this.code = code;
+        }
+    }
+
+    public enum GudongRole {
+        法人代表(1), 股东(2), 高管(3);
+
+        public final Integer code;
+
+        GudongRole(Integer code) {
+            this.code = code;
+        }
+    }
+
+    public enum ContractResource {
+        lawyerUpdate, vcAgent, risk
+
+    }
+
+    /**
+     * 文书企业查询状态
+     */
+    public enum WenshuCompanyStatus {
+        未处理("0"),已处理("1"),查询出错("2"), 插入出错("3");
+        private String code;
+
+        WenshuCompanyStatus(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return this.code;
+        }
+
+    }
+
+
+    /**
+     * 企业动态变更方式
+     */
+    public enum CHANGE_WAY {
+        更新("0"),新增("1"),删除("2");
+        private String code;
+
+        CHANGE_WAY(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 企业动态变更类型
+     */
+    public enum CHANGE_CATEGORY {
+        工商信息("edi"), 失信人信息("sx"), 被执行人信息("zx"), 裁判文书("jdc"), 法院公告("ca"), 经营异常("ex"),
+        股权出质("ep"), 行政处罚("ap"), 抽查检查("sc"), 动产抵押("cm"), 清算信息("ld"), 对外投资("iv"), 开庭公告("cn"), 司法拍卖("js"),
+        严重违反("sv"), 环保处罚("ev"), 大股东变更("ms"), 实际控制人变更("ac"), 股权冻结("ef"), 送达报告("dn"), 融资动态("fd"),
+        税收违法("ti"), 土地抵押("lm"), 欠税公告("ta");
+
+        private String code;
+
+        CHANGE_CATEGORY(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 企业评分等级
+     */
+    public enum ECI_WARN {
+        严重(-2),警告(-1),正常(0),良好(1),优秀(2) ;
+        private Integer code;
+        ECI_WARN(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+
+    /**
+     * 企业评分大类
+     */
+    public enum ECI_KIND {
+        // 资信报告
+        基本情况(1), 经营情况(2), 资产权益(3), 经营风险(4), 法律风险(5),
+        // 实际控制人权益和风险报告
+        担任法定代表人(10),存续的对外投资(11),在外任职(12),被执行人(13),失信被执行人(14),
+        关联企业(15),对外债权(16),限制高消费(17),
+        // 智能风控报告
+        被告基本情况(20), 背景情况(21), 被告资产权益(22), 被告企业风险(23), 被告法律风险(24);
+        private Integer code;
+
+        ECI_KIND(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 专利详情大类
+     */
+    public enum ECI_ZSCQ {
+        全国商标(1), 著作权(2), 软件著作权(3), 公司网站(4), 公司专利(5);
+        private Integer code;
+
+        ECI_ZSCQ(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 专利状态
+     */
+    public enum ECI_LEGAL_STATUS {
+        有效(1),无效(2);
+        private Integer code;
+
+        ECI_LEGAL_STATUS(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 企查查企业类型枚举
+     */
+    public enum ECI_ENT_TYPE {
+        企业("0"),
+        社会组织("1"), 香港公司("3"), 政府机构("4"), 台湾公司("5"), 基金会("6"), 医院("7"),
+        海外公司("8"), 律师事务所("9"), 学校("10"), 其他("-1");
+        private String code;
+
+        ECI_ENT_TYPE(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 新闻舆情查询类型
+     */
+    public enum EMOTION_QUERY_TYPE {
+        消极("1"),
+        中立("2"), 积极("3");
+        private String code;
+
+        EMOTION_QUERY_TYPE(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 热点新闻结果类型
+     */
+    public enum EMOTION_RESULT_TYPE {
+        消极("negative"),
+        中立("none"), 积极("positive");
+        private String code;
+        EMOTION_RESULT_TYPE(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 评分状态
+     */
+    public enum GradeStatus {
+        待评分(0), 评分完成(1), 评分失败(3);
+        private Integer code;
+        GradeStatus(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 企查查 企业信息总数量记录类型
+     */
+    public enum ECI_DATA_COUNT_TYPE {
+        特殊资质, 招聘信息, 融资信息, 债券信息, 舆情信息, 控股企业, 股权出质, 对外投资, 公司专利,软件著作权,公司网站,著作权,全国商标,
+        简易注销, 严重违法, 司法拍卖, 动产抵押, 经营异常, 环保处罚, 税收违法, 欠税公告, 公示催告,历史失信, 开庭公告, 股权冻结, 立案信息,
+        裁判文书, 法院公告, 土地公示, 土地购买, 土地转让, 土地抵押, 企业新闻, 历史被执
+    }
+
+
+
+    /**
+     * 个人对外角色枚举
+     */
+    public enum FOREIGN_ROLE_ENUM {
+        对外法人(0), 对外投资(1), 对外任职(2);
+        private Integer code;
+
+        FOREIGN_ROLE_ENUM(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 法人对外类型
+     */
+    public enum Relation_type {
+        担任法定代表人的公司("0"), 投资的公司("1"), 任职的公司("2");
+        private String code;
+
+        Relation_type(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+//    /**
+//     * 评分类型
+//     */
+//    public enum ECI_CREDIT_SCORE_TYPE {
+//        资信(1), 控制人权益和风险(2);
+//        private Integer code;
+//        ECI_CREDIT_SCORE_TYPE(Integer code) {
+//            this.code = code;
+//        }
+//
+//        public Integer getCode() {
+//            return code;
+//        }
+//    }
+
+    public enum PERSON_RISK_TYPE {
+        失信("1"),被执行("2"),限制消费("3");
+        private String code;
+
+        PERSON_RISK_TYPE(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 智能风控状态
+     */
+    public enum INTELLIGENT_RISK_STATUS {
+        成功("0"), 失败("1");
+        private String code;
+
+        INTELLIGENT_RISK_STATUS(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 智能风控 企业/自然人类型
+     */
+    public enum LITIGANT_TYPE {
+        自然人("0"),企业("1"),自然人无关联企业("3");
+        private String code;
+
+        LITIGANT_TYPE(String code) {
+            this.code = code;
+        }
+
+        public String getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 企业维度类型
+     */
+    public enum DIMENSION_TYPE {
+        基本信息(1), 经营风险(2), 法律风险(3);
+        private Integer code;
+
+        DIMENSION_TYPE(Integer code) {
+            this.code = code;
+        }
+
+        public static DIMENSION_TYPE getEnumByCode(Integer code) {
+            for (DIMENSION_TYPE e : DIMENSION_TYPE.values()) {
+                if (e.getCode().equals(code)) {
+                    return e;
+                }
+            }
+            return 基本信息;
+        }
+        public Integer getCode() {
+            return code;
+        }
+    }
+
+    /**
+     * 股东类型,该枚举不全,暂时用这两个
+     */
+    public enum STOCK_TYPE {
+        自然人股东,外籍自然人
+    }
+//
+//    /**
+//     * 土地转让
+//     */
+//    public enum LAND_TRANSFER_CON {
+//        土地转让方(0), 土地受让方(1);
+//        private Integer code;
+//
+//        LAND_TRANSFER_CON(Integer code) {
+//            this.code = code;
+//        }
+//    }
+    /**
+     * 报告类型
+     */
+    public enum ReportTypeEnum {
+
+        资信的调查报告(0), 案件动态报告(1), 债权穿透报告(2), 债权监测报告(3), 律师匹配报告(4),
+        简易资信报告(5), 实际控制人权益及风险报告(6),律师数据分析报告(7),智能风险评估报告(8), 旧案托管报告(9),
+        财产信息分析报告(10) ,履债评估报告(11),交易评估(12);
+        private Integer code;
+
+        ReportTypeEnum(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+
+        public static String getDescByCode(Integer code) {
+            for (ReportTypeEnum e : ReportTypeEnum.values()) {
+                if (e.getCode().equals(code)) {
+                    return e.name();
+                }
+            }
+            return null;
+        }
+
+    }
+    /**
+     * mq业务类型
+     */
+    public enum MQBizTypeEnum {
+
+        资信的调查报告(0), 案件进展报告(1),债权穿透分析报告(2), 公司动态监测报告(3), 律师匹配报告(4),
+        简易资信报告(5), 权益及风险分析报(6), 律师分析报告(7), 可执行诊断报告(8), 案件托管报告(9),
+        财产信息分析报告(10), 履债评估报告(11), 交易风险评估报告(12), 飞天系统风控(13);
+        private Integer code;
+
+        MQBizTypeEnum(Integer code) {
+            this.code = code;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+
+        public static String getDescByCode(Integer code) {
+            for (MQBizTypeEnum e : MQBizTypeEnum.values()) {
+                if (e.getCode().equals(code)) {
+                    return e.name();
+                }
+            }
+            return null;
+        }
+
+    }
+
+
+    public enum QueryStatusEnum {
+        成功(0),失败(1);
+
+        public final Integer code;
+
+        QueryStatusEnum(Integer code) {
+            this.code = code;
+        }
+    }
+}
+

+ 125 - 0
src/main/scala/com/winhc/bigdata/spark/jobs/CompanyInfoCalculatorV2.scala

@@ -0,0 +1,125 @@
+package com.winhc.bigdata.spark.jobs
+
+import java.util.Date
+
+import com.winhc.bigdata.calc.{DimScore, DimScoreV2}
+import com.winhc.bigdata.spark.utils.SparkUtils
+import org.apache.commons.logging.LogFactory
+import org.apache.spark.broadcast.Broadcast
+import org.apache.spark.sql.{Row, SparkSession}
+
+import scala.collection.mutable
+
+object CompanyInfoCalculatorV2 {
+
+  private val LOG = LogFactory.getLog(this.getClass)
+
+  def main(args: Array[String]): Unit = {
+
+    if (args.length != 3) {
+      println("请配置计算资源: instances, cores, memory .")
+      System.exit(-1)
+    }
+
+    var config = mutable.Map.empty[String, String]
+    val Array(instances, cores, memory) = args;
+
+    println(
+      s"""
+         |instances : $instances,
+         |cores : $cores,
+         |memory : $memory
+         |""".stripMargin)
+
+    config = mutable.Map("spark.executor.instances" -> instances,
+      "spark.executor.cores" -> cores,
+      "spark.executor.memory" -> memory
+    )
+
+    val spark: SparkSession = SparkUtils.InitEnv(this.getClass.getSimpleName, config)
+
+    import spark.implicits._
+    import spark._
+
+    println("company calc start! " + new Date().toString)
+
+    val tableName = "ads_company"
+    val resultTable = "ads_company_score_v2"
+    val ds = "20200526"
+
+    //所属行业
+    val code2Name: Broadcast[Map[String, String]] = spark.sparkContext.broadcast(sql(
+      """
+        |select category_code,category_str_big
+        |from const_company_category_code
+      """.stripMargin).collect().map(r => {
+      (r.getString(0), r.getString(1))
+    }).toMap)
+
+    val df = sql(
+      s"""
+         |SELECT  id
+         |        ,company_name
+         |        ,legal_person_name
+         |        ,reg_capital
+         |        ,reg_capital_num
+         |        ,actual_capital
+         |        ,category_code
+         |        ,company_type
+         |        ,company_org_type
+         |        ,reg_status
+         |        ,cast(estiblish_time as string) estiblish_time
+         |        ,cast(from_time as string) from_time
+         |        ,cast(to_time as string) to_time
+         |        ,reg_location
+         |FROM    ${tableName}
+         |""".stripMargin).flatMap(r => {
+      trans(code2Name, r)
+    }).toDF("id", "company_name", "kind", "project", "type", "score", "total", "extraScore")
+
+    // 写 分区表
+    df.createOrReplaceTempView(s"${tableName}_tmp_view")
+    sql(s"insert overwrite table ${resultTable} partition (ds=$ds) select * from ${tableName}_tmp_view")
+
+    df.printSchema()
+    df.show(100)
+    println("company calc end! " + new Date().toString)
+
+    spark.stop();
+  }
+
+
+  private def trans(code2Name: Broadcast[Map[String, String]], r: Row) = {
+
+    val id = r.getAs[Long]("id")
+    val company_name = r.getAs[String]("company_name")
+    val reg_capital = r.getAs[String]("reg_capital")
+    val actual_capital = r.getAs[String]("actual_capital")
+    val category_code = r.getAs[String]("category_code")
+    val company_org_type = r.getAs[String]("company_org_type")
+    val reg_status = r.getAs[String]("reg_status")
+    val estiblish_time = r.getAs[String]("estiblish_time")
+    val to_time = r.getAs[String]("to_time")
+    val reg_location = r.getAs[String]("reg_location")
+
+    val r1 = DimScoreV2.bean2Map(DimScoreV2.registCapiScore(reg_capital))
+    val r2 = DimScoreV2.bean2Map(DimScoreV2.recCapScore(actual_capital, reg_capital))
+    val r3 = DimScoreV2.bean2Map(DimScoreV2.industryScore(code2Name.value.getOrElse(category_code, null)))
+    val r4 = DimScoreV2.bean2Map(DimScoreV2.econKindScore(company_org_type, "")) //注意解决是否上市
+    val r5 = DimScoreV2.bean2Map(DimScoreV2.eciStatusScore(reg_status))
+    val r6 = DimScoreV2.bean2Map(DimScoreV2.startDateScore(estiblish_time))
+    val r7 = DimScoreV2.bean2Map(DimScoreV2.termScore(to_time))
+    val r8 = DimScoreV2.bean2Map(DimScoreV2.addressScore(reg_location))
+
+    Seq(
+      (id, company_name, r1.get("kind"), r1.get("project"), r1.get("type"), r1.get("score"), r1.get("total"), r1.get("extraScore")),
+      (id, company_name, r2.get("kind"), r2.get("project"), r2.get("type"), r2.get("score"), r2.get("total"), r2.get("extraScore")),
+      (id, company_name, r3.get("kind"), r3.get("project"), r3.get("type"), r3.get("score"), r3.get("total"), r3.get("extraScore")),
+      (id, company_name, r4.get("kind"), r4.get("project"), r4.get("type"), r4.get("score"), r4.get("total"), r4.get("extraScore")),
+      (id, company_name, r5.get("kind"), r5.get("project"), r5.get("type"), r5.get("score"), r5.get("total"), r5.get("extraScore")),
+      (id, company_name, r6.get("kind"), r6.get("project"), r6.get("type"), r6.get("score"), r6.get("total"), r6.get("extraScore")),
+      (id, company_name, r7.get("kind"), r7.get("project"), r7.get("type"), r7.get("score"), r7.get("total"), r7.get("extraScore")),
+      (id, company_name, r8.get("kind"), r8.get("project"), r8.get("type"), r8.get("score"), r8.get("total"), r8.get("extraScore"))
+    )
+  }
+}