Преглед изворни кода

完成统计接口所需新功能,引入高级查询降低企业表的性能影响

ximinghao пре 1 недеља
родитељ
комит
14fb0f3593

+ 2 - 0
src/main/java/com/skyversation/xjcy/bean/Enterprise.java

@@ -35,6 +35,8 @@ public class Enterprise implements FromJSON ,DateInterval {
     private String cIsKeyProjectQp;
     @JSONField(deserializeUsing = LocalDateFromTimestampDeserializer.class)
     private LocalDate gsqyTime;
+    private String cNationalIndustryCode;
+    private String cNationalIndustry;
     @Override
     public LocalDate getStartDate() {
         return Optional.ofNullable(cCertificateDate).orElse(LocalDate.MIN);

+ 78 - 5
src/main/java/com/skyversation/xjcy/dms/DMSService.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.skyversation.xjcy.bean.*;
+import com.skyversation.xjcy.dms.complex.DMSComplexQueryRequest;
+import com.skyversation.xjcy.dms.complex.selectItem.SelectItem;
 import com.skyversation.xjcy.util.HttpUtil;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.Resource;
@@ -17,6 +19,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class DMSService {
@@ -187,11 +190,12 @@ public class DMSService {
         headers.put("token", token);
         HttpUtil.requestPost(path + "/content/updateContentByJson", params, headers);
     }
+
     public void updateToDms(Collection<JSONObject> objs, String token, String column) {
-        updateToDms(objs,token,dMSColumnConfig.getDMSColumn( column));
+        updateToDms(objs, token, dMSColumnConfig.getDMSColumn(column));
     }
 
-        public String importToDms(Resource resource, String token, DMSImport importType) {
+    public String importToDms(Resource resource, String token, DMSImport importType) {
         MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
         params.add("columnId", dMSColumnConfig.getDMSColumn(importType.getColumn()).getId());
         params.add("contentParam", importType.getContent());
@@ -224,11 +228,12 @@ public class DMSService {
             throw new RuntimeException("上传失败");
         }
     }
+
     public String uploadFile(Resource resource, String token, String column, String paramName, FileType fileType) {
         return uploadFile(resource, token, dMSColumnConfig.getDMSColumn(column), paramName, fileType);
     }
 
-        public boolean insertToDms(Object objs, String token, DMSColumn column) {
+    public boolean insertToDms(Object objs, String token, DMSColumn column) {
 
         MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
         params.add("modelId", column.getModelId());
@@ -240,11 +245,12 @@ public class DMSService {
         JSONObject jsonObject = JSON.parseObject(json);
         return jsonObject.getString("code").equals("200");
     }
+
     public boolean insertToDms(Object objs, String token, String column) {
-        return insertToDms(objs, token, dMSColumnConfig.getDMSColumn( column));
+        return insertToDms(objs, token, dMSColumnConfig.getDMSColumn(column));
     }
 
-        public List<JSONObject> queryBeautifiedClue(String token, String cClueName, String cEnterpriseName, String constructionMethod, String timeStart, String timeEnd) {
+    public List<JSONObject> queryBeautifiedClue(String token, String cClueName, String cEnterpriseName, String constructionMethod, String timeStart, String timeEnd) {
         DMSQueryRequest request = new DMSQueryRequest();
         request.type = DMSQueryRequest.DMSRequestType.Beautified;
         if (cClueName != null) request.addWhere("c_clue_name", "2", cClueName);
@@ -294,4 +300,71 @@ public class DMSService {
         DMSQueryRequest request = new DMSQueryRequest();
         return queryDmsList(request, token, dMSColumnConfig.getDMSColumn(DMSColumn.INVESTMENT_TARGET).getId());
     }
+
+    public JSONObject queryByComplex(DMSComplexQueryRequest request,String token){
+        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(request));
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+            params.add(entry.getKey(), entry.getValue());
+        }
+        Map<String, String> headers = new HashMap<>();
+        headers.put("token", token);
+        String json = HttpUtil.requestPost(path + "/content/multipleFormsOfJointInvestigation", params, headers);
+        JSONObject result = JSON.parseObject(json);
+        if (result.getString("code").equals("200")) {
+            return result.getJSONObject("content");
+        }else {
+            throw new RuntimeException(result.getString("message"));
+        }
+    }
+    public JSONArray queryAllByComplex(DMSComplexQueryRequest request,String token){
+        int page = 1;
+        int allDataCount =-1;
+        int pageSize = 10000;
+        request.setPageSize(pageSize);
+        request.setOrderBy("main", "id", true);
+        JSONArray data = new JSONArray();
+        do {
+            request.setPage(page++);
+
+            JSONObject obj = queryByComplex(request, token);
+
+            allDataCount = obj.getInteger("count");
+            data.addAll(obj.getJSONArray("data"));
+
+        }while (allDataCount>page*pageSize);
+        return  data;
+
+    }
+    public List<Enterprise> queryEnterpriseByComplex(String token){
+        DMSComplexQueryRequest request = new DMSComplexQueryRequest();
+        request.setMainColumn(dMSColumnConfig.getDMSColumn(DMSColumn.ENTERPRISE).getId(), "main");
+        request.setSelectItem(Arrays.asList(
+                SelectItem.of("c_unified_social_credit_code"),
+                SelectItem.of("c_enterprise_name"),
+                SelectItem.of("reg_type"),
+                SelectItem.of("household_unit_id"),
+                SelectItem.of("c_ssxq_code"),
+                SelectItem.of("is_gsqy"),
+                SelectItem.of("operation_status"),
+                SelectItem.of("industry"),
+                SelectItem.of("company_level"),
+                SelectItem.of("c_investment_unit_id"),
+                SelectItem.of("c_certificate_date"),
+                SelectItem.of("c_move_out_date"),
+                SelectItem.of("revocation_time"),
+                SelectItem.of("cancellation_time"),
+                SelectItem.of("risk_exempt"),
+                SelectItem.of("c_is_key_project_qp"),
+                SelectItem.of("gsqy_time"),
+                SelectItem.of("c_national_industry_code"),
+                SelectItem.of("c_national_industry")
+        ));
+        JSONArray data = queryAllByComplex(request, token);
+        List<Enterprise> result = new ArrayList<>();
+        for (int i = 0; i < data.size(); i++){
+            result.add( data.getJSONObject(i).toJavaObject(Enterprise.class));
+        }
+        return result;
+    }
 }

+ 124 - 0
src/main/java/com/skyversation/xjcy/dms/complex/DMSComplexQueryRequest.java

@@ -0,0 +1,124 @@
+package com.skyversation.xjcy.dms.complex;
+
+import com.alibaba.fastjson.JSON;
+import com.skyversation.xjcy.dms.complex.condition.ConditionList;
+import com.skyversation.xjcy.dms.complex.groupBy.GroupByItem;
+import com.skyversation.xjcy.dms.complex.join.JoinColumn;
+import com.skyversation.xjcy.dms.complex.selectItem.SelectItem;
+import com.skyversation.xjcy.dms.complex.subQuery.SubQuery;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Collection;
+
+@Getter
+public class DMSComplexQueryRequest {
+    String columnId;
+    String columnAlias;
+    String orderBy;
+    String distinctOn;
+    @Setter
+    boolean autoSelectItem =true;
+    @Setter
+    int page = 1;
+    @Setter
+    int pageSize =200;
+
+    String conditionsList;
+    String subQuery;
+    String joinColumn;
+    String selectItem;
+    String groupBy;
+
+    public void setMainColumn(String columnId, String columnAlias) {
+        this.columnId = columnId;
+        this.columnAlias = columnAlias;
+    }
+
+    public void setOrderBy(String table, String field, boolean asc) {
+        orderBy = String.format("%s,%s,%s", table, field, asc ? "asc" : "desc");
+    }
+
+    public void setDistinctOn(String table, String field) {
+        distinctOn = String.format("%s,%s", table, field);
+    }
+
+    public void setConditionsList(ConditionList conditionsList) {
+        this.conditionsList = conditionsList.toJSONString();
+    }
+
+    public void setSubQuery(Collection<SubQuery> subQuery) {
+        this.subQuery = JSON.toJSONString(subQuery);
+    }
+
+    public void setJoinColumn(Collection<JoinColumn> joinColumn) {
+        this.joinColumn = JSON.toJSONString(joinColumn);
+    }
+
+    public void setSelectItem(Collection<SelectItem> selectItem) {
+        this.selectItem = JSON.toJSONString(selectItem);
+    }
+
+    public void setGroupBy(Collection<GroupByItem> groupBy) {
+        this.groupBy = JSON.toJSONString(groupBy);
+    }
+//
+//    public static void main(String[] args) {
+//        DMSComplexQueryRequest request = new DMSComplexQueryRequest();
+//        request.setMainColumn("123", "main");
+//        request.setOrderBy("main", "id", true);
+//        request.setDistinctOn("main", "name");
+//
+//        ConditionItem conditionItem = new ConditionItem();
+//        conditionItem.setColumnId("main");
+//        conditionItem.setCondition("=");
+//        conditionItem.setColumnName("type");
+//        conditionItem.pushValue("3");
+//
+//        ConditionItem conditionItem2 = new ConditionItem();
+//        conditionItem2.setColumnId("main");
+//        conditionItem2.setCondition("between");
+//        conditionItem2.setColumnName("time");
+//        conditionItem2.pushValue("sub", "start");
+//        conditionItem2.pushValue("sub", "end");
+//
+//        ConditionList conditionsList1 = new ConditionList();
+//        conditionsList1.setLink("and");
+//        conditionsList1.push(conditionItem);
+//
+//        ConditionList conditionList2 = new ConditionList();
+//        conditionList2.setLink("or");
+//        conditionList2.push(conditionItem2);
+//        conditionList2.push(conditionsList1);
+//
+//        request.setConditionsList(conditionList2);
+//
+//        SubQuery subQuery = new SubQuery();
+//        subQuery.setAlias("main");
+//        subQuery.setColumn("a123");
+//
+//        request.setSubQuery(Collections.singleton(subQuery));
+//
+//        JoinColumn joinColumn = new JoinColumn();
+//        joinColumn.setColumnAlias("sub");
+//        joinColumn.setConditionSop(conditionsList1);
+//
+//        request.setJoinColumn(Collections.singleton(joinColumn));
+//
+//        SelectItem selectItem = new SelectItem();
+//        selectItem.setAlias("awd");
+//
+//        request.setSelectItem(Collections.singleton(selectItem));
+//
+//        GroupByItem groupByItem = new GroupByItem();
+//        groupByItem.setColumn("awdawd");
+//
+//        request.setGroupBy(Collections.singleton(groupByItem));
+//
+//        request.setPage(15);
+//
+//        request.setAutoSelectItem(true);
+//
+//        System.out.println(JSON.toJSONString(request));
+//    }
+}

+ 63 - 0
src/main/java/com/skyversation/xjcy/dms/complex/condition/ConditionItem.java

@@ -0,0 +1,63 @@
+package com.skyversation.xjcy.dms.complex.condition;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class ConditionItem {
+    @Getter
+    List<Object> value =new ArrayList<>();
+    @Setter @Getter
+    String columnId;
+    @Setter @Getter
+    String columnName;
+    @Setter @Getter
+    String condition;
+
+    public void pushValue(Integer value) {
+        this.value.add(value);
+    }
+
+    public void pushValue(String value) {
+        this.value.add(value);
+    }
+
+    public void pushValue(Boolean value) {
+        this.value.add(value);
+    }
+
+    public void pushValue(Double value) {this.value.add(value);}
+
+    public void pushValue(String columnName, String field) {
+        FieldValue fv = new FieldValue();
+        fv.setColumnId(columnName);
+        fv.setColumnName(field);
+        pushValue(fv);
+    }
+
+    public void pushValue(FieldValue fieldValue) {
+        this.value.add(fieldValue);
+    }
+
+    public void pushFieldValue(FieldValue value) {this.value.add(value);}
+
+    public void pushIntValues(Collection<Integer> value) {
+        this.value.addAll(value);
+    }
+
+    public void pushStringValues(Collection<String> value) {
+        this.value.addAll(value);
+    }
+
+    public void pushBoolValues(Collection<Boolean> value) {
+        this.value.addAll(value);
+    }
+
+    public void pushDoubleValues(Collection<Double> value) {
+        this.value.addAll(value);
+    }
+
+}

+ 38 - 0
src/main/java/com/skyversation/xjcy/dms/complex/condition/ConditionList.java

@@ -0,0 +1,38 @@
+package com.skyversation.xjcy.dms.complex.condition;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class ConditionList {
+    List<Object> items = new ArrayList<>();
+    @Setter
+    String link;
+
+    public ConditionList(Collection<ConditionItem> items, String link) {
+        this.link = link;
+        this.items.addAll(items);
+    }
+    public ConditionList(Collection<ConditionItem> items) {
+        this(items,"and");
+    }
+    public void push(ConditionItem item) {
+        this.items.add(item);
+    }
+    public void push(ConditionList item) {
+        this.items.add(item.getItems());
+    }
+    public String toJSONString(){
+        JSONArray jsonArray = new JSONArray(items);
+        jsonArray.add(link);
+        return jsonArray.toJSONString();
+    }
+    public List<Object> getItems(){
+        List<Object> list = new ArrayList<>(items);
+        list.add(link);
+        return list;
+    }
+}

+ 12 - 0
src/main/java/com/skyversation/xjcy/dms/complex/condition/Conditions.java

@@ -0,0 +1,12 @@
+package com.skyversation.xjcy.dms.complex.condition;
+
+public class Conditions {
+    public static ConditionItem equalField(String table1,String field1,String table2,String field2){
+        ConditionItem item = new ConditionItem();
+        item.setColumnId(table1);
+        item.setColumnName(field1);
+        item.pushValue(table2,field2);
+        item.setCondition("=");
+        return item;
+    }
+}

+ 10 - 0
src/main/java/com/skyversation/xjcy/dms/complex/condition/FieldValue.java

@@ -0,0 +1,10 @@
+package com.skyversation.xjcy.dms.complex.condition;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter @Getter
+public class FieldValue {
+    String columnName;
+    String columnId;
+}

+ 9 - 0
src/main/java/com/skyversation/xjcy/dms/complex/groupBy/GroupByItem.java

@@ -0,0 +1,9 @@
+package com.skyversation.xjcy.dms.complex.groupBy;
+
+import lombok.Data;
+
+@Data
+public class GroupByItem {
+   private String table;
+   private String column;
+}

+ 22 - 0
src/main/java/com/skyversation/xjcy/dms/complex/join/JoinColumn.java

@@ -0,0 +1,22 @@
+package com.skyversation.xjcy.dms.complex.join;
+
+import com.skyversation.xjcy.dms.complex.condition.ConditionList;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+public class JoinColumn {
+    @Getter @Setter
+    private String columnId;
+    @Getter @Setter
+    private String columnAlias;
+    @Getter @Setter
+    private String type;
+    @Getter
+    private List<Object> conditionSop;
+
+    public void setConditionSop(ConditionList conditionSop) {
+        this.conditionSop = conditionSop.getItems();
+    }
+}

+ 4 - 0
src/main/java/com/skyversation/xjcy/dms/complex/join/JoinColumns.java

@@ -0,0 +1,4 @@
+package com.skyversation.xjcy.dms.complex.join;
+
+public class JoinColumns {
+}

+ 19 - 0
src/main/java/com/skyversation/xjcy/dms/complex/selectItem/SelectItem.java

@@ -0,0 +1,19 @@
+package com.skyversation.xjcy.dms.complex.selectItem;
+
+import lombok.Data;
+
+@Data
+public class SelectItem {
+   private String table;
+   private String column;
+   private String function;
+   private String distinct;
+   private String alias;
+   public static SelectItem of(String column) {
+      SelectItem selectItem = new SelectItem();
+      selectItem.setTable("main");
+      selectItem.setColumn(column);
+      selectItem.setAlias(column);
+      return selectItem;
+   }
+}

+ 19 - 0
src/main/java/com/skyversation/xjcy/dms/complex/subQuery/SubQuery.java

@@ -0,0 +1,19 @@
+package com.skyversation.xjcy.dms.complex.subQuery;
+
+import lombok.Data;
+
+@Data
+public class SubQuery {
+    private String mainTableId;
+    private String subTableId;
+    private String subTableAlias;
+    private String joinColumn;
+    private String function;
+    private String column;
+    private String columnFrom;
+    private String mainTableColumn;
+    private String subTableColumn;
+    private boolean distinct;
+    private String conditions;
+    private String alias;
+}

+ 120 - 34
src/main/java/com/skyversation/xjcy/service/DataCountService.java

@@ -48,6 +48,62 @@ public class DataCountService {
     MultiValueMap<String, IndustrialPark> buildMap = new LinkedMultiValueMap<>();
     List<IndustrialPark> allPark = new ArrayList<>();
 
+    private Map<String,String> nationalIndustryToMerged = new HashMap<>();
+    private Map<String,String> nationalIndustryMap = new HashMap<>();
+    private Map<String,String> regTypeMap = new HashMap<>();
+
+    @PostConstruct
+    public void init() {
+        initNationalIndustryToMerged();
+        initRegType();
+        initNationalIndustry();
+    }
+    private void initNationalIndustryToMerged () {
+        Map<String,String> map = new HashMap<>();
+        map.put("F", "批发和零售业");
+        map.put("I", "信息传输、软件和信息技术服务业");
+        map.put("L", "租赁和商务服务业");
+        map.put("M", "科学研究和技术服务业");
+        map.put("C", "制造业");
+        map.put("R", "文化、体育和娱乐业");
+        nationalIndustryToMerged = map;
+    }
+
+    private void initRegType(){
+        Map<String,String> map = new HashMap<>();
+        map.put("1", "注册实体型");
+        map.put("2", "注册非实体型");
+        map.put("3", "实体非注册型");
+        map.put("4", "临时流动");
+        regTypeMap = map;
+    }
+
+
+    private void initNationalIndustry() {
+        Map<String,String> map = new HashMap<>();
+        map.put("A", "农、林、牧、渔业");
+        map.put("B", "采矿业");
+        map.put("C", "制造业");
+        map.put("D", "电力、热力、燃气及水生产和供应业");
+        map.put("E", "建筑业");
+        map.put("F", "批发和零售业");
+        map.put("G", "交通运输、仓储和邮政业");
+        map.put("H", "住宿和餐饮业");
+        map.put("I", "信息传输、软件和信息技术服务业");
+        map.put("J", "金融业");
+        map.put("K", "房地产业");
+        map.put("L", "租赁和商务服务业");
+        map.put("M", "科学研究和技术服务业");
+        map.put("N", "水利、环境和公共设施管理业");
+        map.put("O", "居民服务、修理和其他服务业");
+        map.put("P", "教育");
+        map.put("Q", "卫生和社会工作");
+        map.put("R", "文化、体育和娱乐业");
+        map.put("S", "公共管理、社会保障和社会组织");
+        map.put("T", "国际组织");
+        nationalIndustryMap = map;
+    }
+
     //简单限制统计频率
     @Value("${app.count-cache-length}")
     private long INTERVAL_MILLIS ;
@@ -118,7 +174,7 @@ public class DataCountService {
 
         //数据量大不了所以不做流式
         List<IndustrialPark> allIndustrialPark = dmsService.query(authService.getTokenOfServiceAccount(), DMSQuery.INDUSTRIAL_PARK, IndustrialPark.class, now);
-        List<Enterprise> allEnterprise = dmsService.query(authService.getTokenOfServiceAccount(), DMSQuery.ENTERPRISE, Enterprise.class, now);
+        List<Enterprise> allEnterprise = dmsService.queryEnterpriseByComplex(authService.getTokenOfServiceAccount());
         List<EnterpriseEconomic> inDateEnterpriseEconomic = dmsService.query(authService.getTokenOfServiceAccount(), DMSQuery.ECONOMIC_ALL_INDEED, EnterpriseEconomic.class, now);
         List<Order> allOrder = dmsService.query(authService.getTokenOfServiceAccount(), DMSQuery.ORDER, Order.class, now);
         List<LeaseDetail> lastLeaseDetail = dmsService.query(authService.getTokenOfServiceAccount(), DMSQuery.LAST_LEASE_DETAIL, LeaseDetail.class, now);
@@ -252,7 +308,6 @@ public class DataCountService {
 
             int enterPriceCount = 0;
             int enterPriceGsCount = 0;
-            Map<String, Integer> industryCount = new HashMap<>();
             Set<String> inParkEnterpriseCode = new HashSet<>();
             List<String> aliveEnterprise = new ArrayList<>();
             int usedRoomCount = 0;
@@ -267,8 +322,6 @@ public class DataCountService {
 
                 Set<String> buildEnterpriseCode = new HashSet<>();
                 JSONObject buildData = new JSONObject();
-                int buildEnterpriseCount = 0;
-                int buildGsEnterpriseCount = 0;
                 int buildRoomCount = 0;
                 int buildUsedRoomCount = 0;
 
@@ -312,14 +365,20 @@ public class DataCountService {
                     floorData.put("floorName", floor.getCResourceName());
                     floors.add(floorData);
                 }
+                int buildEnterpriseCount = 0;
+                int buildGsEnterpriseCount = 0;
                 for (String enterpriseCode : buildEnterpriseCode) {
+                    boolean isGsqy = false;
                     if (aliveEnterpriseMap.containsKey(enterpriseCode)) {
                         Enterprise enterprise = aliveEnterpriseMap.get(enterpriseCode);
-                        buildEnterpriseCount++;
                         if ("2".equals(enterprise.getIsGsqy())) {
-                            buildGsEnterpriseCount++;
+                            isGsqy = true;
                         }
                     }
+                    buildEnterpriseCount++;
+                    if (isGsqy) {
+                        buildGsEnterpriseCount++;
+                    }
                 }
                 buildData.put("enterpriseCount", buildEnterpriseCount);
                 buildData.put("gsEnterpriseCount", buildGsEnterpriseCount);
@@ -335,10 +394,16 @@ public class DataCountService {
             for (EnterpriseLevel value : EnterpriseLevel.values()) {
                 enterPriceLevelCountByPark.get(value).put(industrialPark.getCResourceName(), 0);
             }
+            Map<String, Integer> enterPriceIndustryCount = new HashMap<>();
             for (String enterpriseCode : inParkEnterpriseCode) {
+                boolean isGsqy = false;
+                String nationalIndustry = null;
                 if (aliveEnterpriseMap.containsKey(enterpriseCode)) {
                     Enterprise enterprise = aliveEnterpriseMap.get(enterpriseCode);
 
+                    isGsqy = "2".equals(enterprise.getIsGsqy());
+                    nationalIndustry = enterprise.getCNationalIndustry();
+
                     EnterpriseLevel.ofJsonValue(enterprise.getCompanyLevel()).ifPresent(level -> {
                         Map<String, Integer> map = enterPriceLevelCountByPark.get(level);
                         map.put(industrialPark.getCResourceName(), map.get(industrialPark.getCResourceName()) + 1);
@@ -349,24 +414,31 @@ public class DataCountService {
                     allTaxByYtdThisYear = allTaxByYtdThisYear.add(ytdThisYear.tax);
                     allTaxByYtdLastYear = allTaxByYtdLastYear.add(ytdLastYear.tax);
 
-                    if ("2".equals(enterprise.getIsGsqy())) {
+                    if (isGsqy) {
                         allGsProductByYtdThisYear = allGsProductByYtdThisYear.add(ytdThisYear.product);
                         allGsProductByYtdLastYear = allGsProductByYtdLastYear.add(ytdLastYear.product);
-                        enterPriceGsCount++;
+
                     }
 
-                    enterPriceCount++;
                     aliveEnterprise.add(enterpriseCode);
+                    enterPriceCount++;
+                    if (isGsqy) {
+                        enterPriceGsCount++;
+                    }
 
-                    String industry = enterprise.getIndustry();
-                    if (industry != null) {
-                        if (industryCount.containsKey(industry)) {
-                            industryCount.put(industry, industryCount.get(industry) + 1);
-                        } else {
-                            industryCount.put(industry, 1);
-                        }
+                }
+                enterPriceCount++;
+                if (isGsqy) {
+                    enterPriceGsCount++;
+                }
+                if (nationalIndustry != null) {
+                    if (enterPriceIndustryCount.containsKey(nationalIndustry)) {
+                        enterPriceIndustryCount.put(nationalIndustry, enterPriceIndustryCount.get(nationalIndustry) + 1);
+                    } else {
+                        enterPriceIndustryCount.put(nationalIndustry, 1);
                     }
                 }
+
             }
             List<String> sortedEnterprise = aliveEnterprise.stream().sorted((a, b) -> {
                 BigDecimal ar = economicCountBy12Month.get(a).revenue;
@@ -385,7 +457,7 @@ public class DataCountService {
             parkDataCount.put("enterpriseCount", enterPriceCount);
             parkDataCount.put("enterpriseGsCount", enterPriceGsCount);
             parkDataCount.put("parkVacantArea", industrialPark.getCVacantArea());
-            parkDataCount.put("enterPriseIndustry", industryCount);
+            parkDataCount.put("enterPriseIndustry", enterPriceIndustryCount);
 
             JSONArray topRevenue = new JSONArray();
             for (String enterPriseCode : sortedEnterprise) {
@@ -423,9 +495,6 @@ public class DataCountService {
 
     private void simpleCountPark(List<IndustrialPark> allIndustrialPark) {
         int parkCount = 0;
-        BigDecimal totalFloorArea = BigDecimal.ZERO;
-        BigDecimal totalBuildArea = BigDecimal.ZERO;
-        BigDecimal totalVacantArea = BigDecimal.ZERO;
 
         Map<String, Integer> parkTypeCount = new HashMap<>();
         for (IndustrialPark industrialPark : allIndustrialPark) {
@@ -455,18 +524,6 @@ public class DataCountService {
                         } else {
                             parkTypeCount.put(industrialPark.getCLandUse(), 1);
                         }
-                        try {
-                            totalFloorArea = totalFloorArea.add(industrialPark.getCFloorArea());
-                        } catch (NumberFormatException ignore) {
-                        }
-                        try {
-                            totalBuildArea = totalBuildArea.add(industrialPark.getCBuildingArea());
-                        } catch (NumberFormatException ignore) {
-                        }
-                        try {
-                            totalVacantArea = totalVacantArea.add(industrialPark.getCVacantArea());
-                        } catch (NumberFormatException ignore) {
-                        }
                     }
                     default: {
                         //do nothing
@@ -477,6 +534,10 @@ public class DataCountService {
             }
         }
 
+        BigDecimal totalFloorArea = allPark.stream().map(IndustrialPark::getCFloorArea).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+        BigDecimal totalBuildArea = allPark.stream().map(IndustrialPark::getCBuildingArea).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+        BigDecimal totalVacantArea = allPark.stream().map(IndustrialPark::getCVacantArea).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
+
         tempCacheTownData.put("parkCount", parkCount);
         tempCacheTownData.put("parkType", parkTypeCount);
         tempCacheTownData.put("areaBuild", totalBuildArea);
@@ -490,6 +551,8 @@ public class DataCountService {
         int gsqyCount = 0;
         int aliveCount = 0;
         Map<String, Integer> industryCount = new HashMap<>();
+        Map<String, Integer> nationalIndustryCount = new HashMap<>();
+        Map<String, Integer> regTypeCount = new HashMap<>();
 
         for (Enterprise enterPrise : allEnterprise) {
             boolean isInTown =Arrays.asList("1","3","4").contains(Optional.ofNullable(enterPrise.getRegType()).orElse("1"));
@@ -505,13 +568,34 @@ public class DataCountService {
                     gsqyCount++;
                 }
 
-                String industry = enterPrise.getIndustry();
-                if (industry != null) {
+                String nationalIndustryCode = enterPrise.getCNationalIndustryCode();
+                String mergedNationalIndustry = null;
+                if (nationalIndustryCode!=null&& !nationalIndustryCode.isEmpty()) {
+                    String prefix = nationalIndustryCode.substring(0, 1);
+                    String industry = nationalIndustryMap.get(prefix);
                     if (industryCount.containsKey(industry)) {
                         industryCount.put(industry, industryCount.get(industry) + 1);
                     } else {
                         industryCount.put(industry, 1);
                     }
+                    mergedNationalIndustry = nationalIndustryToMerged.get(prefix);
+                }
+                if (mergedNationalIndustry==null)mergedNationalIndustry = "其他";
+                if (nationalIndustryCount.containsKey(mergedNationalIndustry)) {
+                    nationalIndustryCount.put(mergedNationalIndustry, nationalIndustryCount.get(mergedNationalIndustry) + 1);
+                } else {
+                    nationalIndustryCount.put(mergedNationalIndustry, 1);
+                }
+                String regType = enterPrise.getRegType();
+                String regTypeChinese = null;
+                if (regType!=null&& !regType.isEmpty()){
+                    regTypeChinese = regTypeMap.get(regType);
+                }
+                if (regTypeChinese == null) regTypeChinese = "其他";
+                if (regTypeCount.containsKey(regTypeChinese)) {
+                    regTypeCount.put(regTypeChinese, regTypeCount.get(regTypeChinese) + 1);
+                } else {
+                    regTypeCount.put(regTypeChinese, 1);
                 }
 
                 String enterPriceCode = enterPrise.getCUnifiedSocialCreditCode();
@@ -551,6 +635,8 @@ public class DataCountService {
         tempCacheTownData.put("enterPriseGsCount", gsqyCount);
 
         tempCacheTownData.put("enterPriseIndustry", industryCount);
+        tempCacheTownData.put("mergedEnterPriseIndustry", nationalIndustryCount);
+        tempCacheTownData.put("enterPriseRegType", regTypeCount);
     }
 
     private void countOrder(List<Order> allOrder) {