|
@@ -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) {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|