Pārlūkot izejas kodu

预统计实际招商

ximinghao 3 mēneši atpakaļ
vecāks
revīzija
bb8f0dde79

+ 18 - 0
src/main/java/com/skyversation/xjcy/Timer.java

@@ -0,0 +1,18 @@
+package com.skyversation.xjcy;
+
+import com.skyversation.xjcy.service.ParkPreCountService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+//放一些定时器的简单类
+public class Timer {
+    @Resource
+    ParkPreCountService parkPreCountService;
+
+    //@Scheduled(fixedRate = 5000)
+    public void countPark(){
+        parkPreCountService.updateAllRoom();
+    }
+}

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

@@ -22,6 +22,7 @@ public class Enterprise implements FromJSON ,DateInterval {
     private String operationStatus;
     private String industry;
     private String companyLevel;
+    private String cInvestmentUnitId;
     @JSONField(deserializeUsing = LocalDateFromTimestampDeserializer.class)
     private LocalDate cCertificateDate;
     @JSONField(deserializeUsing = LocalDateFromTimestampDeserializer.class)

+ 13 - 5
src/main/java/com/skyversation/xjcy/controller/CountController.java

@@ -1,9 +1,10 @@
 package com.skyversation.xjcy.controller;
 
+import com.skyversation.xjcy.counter.InvestmentPreCounter;
 import com.skyversation.xjcy.oauth.LoginService;
 import com.skyversation.xjcy.service.DataCountService;
-import com.skyversation.xjcy.service.DataImportService;
-import com.skyversation.xjcy.service.DataPreCountService;
+import com.skyversation.xjcy.service.InvestmentPreCountService;
+import com.skyversation.xjcy.service.ParkPreCountService;
 import com.skyversation.xjcy.service.OWSService;
 import com.skyversation.xjcy.util.MessageManage;
 import lombok.extern.slf4j.Slf4j;
@@ -29,7 +30,9 @@ public class CountController {
     @Resource
     OWSService owsService;
     @Resource
-    DataPreCountService dataPreCountService;
+    ParkPreCountService parkPreCountService;
+    @Resource
+    InvestmentPreCountService investmentPreCountService;
     @Resource
     LoginService loginService;
 
@@ -100,7 +103,7 @@ public class CountController {
             return MessageManage.getInstance().getResultContent(-1,"未提供有效token","未提供有效token");
         }
         String[] roomCodes = roomCode.split(",");
-        dataPreCountService.updateLimitInRooms(lyCode, Arrays.asList(roomCodes),token);
+        parkPreCountService.updateLimitInRooms(lyCode, Arrays.asList(roomCodes),token);
         return MessageManage.getInstance().getResultContent(200, "统计完成", "统计完成");
     }
     @RequestMapping(value = "/preCountParkStructure")
@@ -113,7 +116,12 @@ public class CountController {
         if (!loginService.checkToken(token)) {
             return MessageManage.getInstance().getResultContent(-1,"未提供有效token","未提供有效token");
         }
-        dataPreCountService.updateStructure(lyCode, token);
+        parkPreCountService.updateStructure(lyCode, token);
+        return MessageManage.getInstance().getResultContent(200, "统计完成", "统计完成");
+    }
+    @RequestMapping(value = "preCountInvestmentTarget")
+    public String preCountInvestmentTarget(HttpServletRequest request){
+        investmentPreCountService.updateAllTarget();
         return MessageManage.getInstance().getResultContent(200, "统计完成", "统计完成");
     }
 }

+ 66 - 0
src/main/java/com/skyversation/xjcy/counter/InvestmentPreCounter.java

@@ -0,0 +1,66 @@
+package com.skyversation.xjcy.counter;
+
+import com.alibaba.fastjson.JSONObject;
+import com.skyversation.xjcy.bean.Enterprise;
+import com.skyversation.xjcy.util.JSONDataTool;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class InvestmentPreCounter {
+
+    public static final Object LOCK = new Object();
+
+
+    private enum targetKey {
+        id,c_unit_name,c_unit_id,c_target_year,c_target_amount,c_actual_amount
+    }
+
+    @Getter
+    private final Set<String> targetNeedUploadId;
+    private final List<JSONObject> allTarget;
+    private final List<Enterprise> allEnterprise;
+
+    public Collection<JSONObject> getTargetNeedUpload() {
+        return allTarget.stream().filter(v -> targetNeedUploadId.contains(v.getString("id"))).collect(Collectors.toList());
+    }
+    /**
+     * 注意输入的数据有副作用
+     *
+     * @param allTarget  所有参与的目标数据
+     * @param allEnterprise 所有企业数据,请直接提供完整企业数据以确保完整性
+     */
+    public InvestmentPreCounter(List<JSONObject> allTarget,  List<Enterprise> allEnterprise) {
+        this.targetNeedUploadId = new HashSet<>();
+        this.allTarget = allTarget;
+        this.allEnterprise = allEnterprise;
+    }
+
+    public void run(){
+        Map<String, Map<Integer, List<Enterprise>>> enterpriseMap = allEnterprise.stream()
+                .filter(enterprise -> enterprise.getCInvestmentUnitId()!=null)
+                .filter(enterprise -> enterprise.getCCertificateDate()!=null)
+                .collect(Collectors.groupingBy(
+                        Enterprise::getCInvestmentUnitId,
+                        Collectors.groupingBy(enterprise -> enterprise.getCCertificateDate().getYear())
+                ));
+        for (JSONObject target : allTarget) {
+            String yearStr = target.getString(String.valueOf(targetKey.c_target_year));
+            try {
+                int year = Integer.parseInt(yearStr);
+                String unitId = target.getString(String.valueOf(targetKey.c_unit_id));
+                List<Enterprise> catchEnterprise = enterpriseMap
+                        .getOrDefault(unitId, Collections.emptyMap())
+                        .getOrDefault(year, Collections.emptyList());
+                int count  = catchEnterprise.size();
+                JSONDataTool.updateIntValue(target,String.valueOf(targetKey.c_actual_amount),count,targetNeedUploadId);
+            }catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 88 - 102
src/main/java/com/skyversation/xjcy/counter/DataPreCounter.java → src/main/java/com/skyversation/xjcy/counter/ParkPreCounter.java

@@ -1,6 +1,7 @@
 package com.skyversation.xjcy.counter;
 
 import com.alibaba.fastjson.JSONObject;
+import com.skyversation.xjcy.util.JSONDataTool;
 import lombok.AllArgsConstructor;
 
 import java.math.BigDecimal;
@@ -18,68 +19,10 @@ import java.util.stream.Stream;
  * 线程不安全,请在调用时使用这个类下的LOCK做全局锁<br/>
  * 将多个楼宇放进一个对象会影响速度,请一个楼宇一个对象
  */
-public class DataPreCounter {
+public class ParkPreCounter {
 
     public static final Object LOCK = new Object();
 
-    /**
-     * 注意输入的数据有副作用
-     *
-     * @param allPark  所有参与的park数据,为避免数据不完整,请提供整个产业园的数据
-     * @param allLease 所有参与的租赁,提供所有涉及的房间的所有数据即可,如果数据出现房间级的不完整,就会导致结果有误
-     */
-    public DataPreCounter(List<JSONObject> allPark, List<JSONObject> allLease, LocalDate now) {
-        this.now = now;
-        this.parkNeedUploadId = new HashSet<>();
-        this.leaseNeedUploadId = new HashSet<>();
-        this.allPark = allPark;
-        this.allLease = allLease;
-        allLy = new ArrayList<>();
-        allLd = new ArrayList<>();
-        allLc = new ArrayList<>();
-        allRoom = new ArrayList<>();
-        allPark.stream().filter(Objects::nonNull).forEach(park -> {
-            switch (park.getString(String.valueOf(ParkKey.c_resource_type))) {
-                case "1":
-                    allRoom.add(park);
-                    break;
-                case "2":
-                    allLc.add(park);
-                    break;
-                case "3":
-                    allLd.add(park);
-                    break;
-                case "4":
-                    allLy.add(park);
-                    break;
-                default:
-                    //doNothing
-                    break;
-            }
-        });
-    }
-
-    public Set<JSONObject> getRoomsWithCode(Collection<String> roomCodes, List<JSONObject> range) {
-        if (roomCodes == null || roomCodes.isEmpty() || range == null || range.isEmpty()) {
-            return Collections.emptySet();
-        }
-        return range.stream()
-                .filter(v -> roomCodes.contains(v.getString(String.valueOf(ParkKey.c_park_code))))
-                .collect(Collectors.toSet());
-    }
-
-    public Set<JSONObject> getRoomsWithCode(Collection<String> roomCodes) {
-        return getRoomsWithCode(roomCodes, allRoom);
-    }
-
-    public List<JSONObject> getParkNeedUpload() {
-        return allPark.stream().filter(v -> parkNeedUploadId.contains(v.getString("id"))).collect(Collectors.toList());
-    }
-
-    public List<JSONObject> getLeaseNeedUpload() {
-        return allLease.stream().filter(v -> leaseNeedUploadId.contains(v.getString("id"))).collect(Collectors.toList());
-    }
-
     private enum LeaseKey {
         c_room_code, c_enterprise_code, c_start_date, c_end_date, c_lease_purpose, c_is_latest_lease, c_lease_status, update_time, c_enterprise_name
     }
@@ -144,6 +87,65 @@ public class DataPreCounter {
 
     private final LocalDate now;
 
+
+    /**
+     * 注意输入的数据有副作用
+     *
+     * @param allPark  所有参与的park数据,为避免数据不完整,请提供整个产业园的数据
+     * @param allLease 所有参与的租赁,提供所有涉及的房间的所有数据即可,如果数据出现房间级的不完整,就会导致结果有误
+     */
+    public ParkPreCounter(List<JSONObject> allPark, List<JSONObject> allLease, LocalDate now) {
+        this.now = now;
+        this.parkNeedUploadId = new HashSet<>();
+        this.leaseNeedUploadId = new HashSet<>();
+        this.allPark = allPark;
+        this.allLease = allLease;
+        allLy = new ArrayList<>();
+        allLd = new ArrayList<>();
+        allLc = new ArrayList<>();
+        allRoom = new ArrayList<>();
+        allPark.stream().filter(Objects::nonNull).forEach(park -> {
+            switch (park.getString(String.valueOf(ParkKey.c_resource_type))) {
+                case "1":
+                    allRoom.add(park);
+                    break;
+                case "2":
+                    allLc.add(park);
+                    break;
+                case "3":
+                    allLd.add(park);
+                    break;
+                case "4":
+                    allLy.add(park);
+                    break;
+                default:
+                    //doNothing
+                    break;
+            }
+        });
+    }
+
+    public Set<JSONObject> getRoomsWithCode(Collection<String> roomCodes, List<JSONObject> range) {
+        if (roomCodes == null || roomCodes.isEmpty() || range == null || range.isEmpty()) {
+            return Collections.emptySet();
+        }
+        return range.stream()
+                .filter(v -> roomCodes.contains(v.getString(String.valueOf(ParkKey.c_park_code))))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<JSONObject> getRoomsWithCode(Collection<String> roomCodes) {
+        return getRoomsWithCode(roomCodes, allRoom);
+    }
+
+    public List<JSONObject> getParkNeedUpload() {
+        return allPark.stream().filter(v -> parkNeedUploadId.contains(v.getString("id"))).collect(Collectors.toList());
+    }
+
+    public List<JSONObject> getLeaseNeedUpload() {
+        return allLease.stream().filter(v -> leaseNeedUploadId.contains(v.getString("id"))).collect(Collectors.toList());
+    }
+
     /**
      * 运行预统计,有副作用,注意只能运行提供了租赁数据的房间,你可以从parkNeedUpload和leaseNeedUpload中获取所有更新过的数据
      *
@@ -245,35 +247,35 @@ public class DataPreCounter {
     private void updateRoomLease(JSONObject room, JSONObject lease) {
         if (lease == null || !checkLeaseWorking(lease)) {
             //绑定企业信息
-            updateStringValue(room,
+            JSONDataTool.updateStringValue(room,
                     String.valueOf(ParkKey.c_zlqymc),
                     null,
                     parkNeedUploadId);
-            updateStringValue(room,
+            JSONDataTool.updateStringValue(room,
                     String.valueOf(ParkKey.c_zlqydm),
                     null,
                     parkNeedUploadId);
             //更新房间状态
-            updateStringValue(room, String.valueOf(ParkKey.c_room_status), "1", parkNeedUploadId);
+            JSONDataTool.updateStringValue(room, String.valueOf(ParkKey.c_room_status), "1", parkNeedUploadId);
             //更新面积数据
             String roomSaleType = room.getString(String.valueOf(ParkKey.c_room_sale_type));
             boolean isForSale = "3".equals(roomSaleType);
             boolean isForRent = "1".equals(roomSaleType);
             Double BuildArea = room.getDouble(String.valueOf(ParkKey.c_building_area));
 
-            updateDoubleValue(room, String.valueOf(ParkKey.c_self_used_area), 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_sellable_area), isForSale ? BuildArea : 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_sold_area), 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_rentable_area), isForRent ? BuildArea : 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_rented_area), 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_vacant_area), isForRent || isForSale ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_self_used_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_sellable_area), isForSale ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_sold_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_rentable_area), isForRent ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_rented_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_vacant_area), isForRent || isForSale ? BuildArea : 0d, parkNeedUploadId);
         } else {
             //绑定企业信息
-            updateStringValue(room,
+            JSONDataTool.updateStringValue(room,
                     String.valueOf(ParkKey.c_zlqydm),
                     lease.getString(String.valueOf(LeaseKey.c_enterprise_code)),
                     parkNeedUploadId);
-            updateStringValue(room,
+            JSONDataTool.updateStringValue(room,
                     String.valueOf(ParkKey.c_zlqymc),
                     lease.getString(String.valueOf(LeaseKey.c_enterprise_name)),
                     parkNeedUploadId);
@@ -293,26 +295,26 @@ public class DataPreCounter {
             } else {
                 state = null; // 如果房间缺失用途数据,则默许缺失蔓延到状态数据
             }
-            updateStringValue(room, String.valueOf(ParkKey.c_room_status), state, parkNeedUploadId);
+            JSONDataTool.updateStringValue(room, String.valueOf(ParkKey.c_room_status), state, parkNeedUploadId);
 
             //更新面积数据
 
             Double BuildArea = room.getDouble(String.valueOf(ParkKey.c_building_area));
 
-            updateDoubleValue(room, String.valueOf(ParkKey.c_self_used_area), isForSelfUsed ? BuildArea : 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_sellable_area), 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_sold_area), isForSale ? BuildArea : 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_rentable_area), 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_rented_area), isForRent ? BuildArea : 0d, parkNeedUploadId);
-            updateDoubleValue(room, String.valueOf(ParkKey.c_vacant_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_self_used_area), isForSelfUsed ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_sellable_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_sold_area), isForSale ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_rentable_area), 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_rented_area), isForRent ? BuildArea : 0d, parkNeedUploadId);
+            JSONDataTool.updateDoubleValue(room, String.valueOf(ParkKey.c_vacant_area), 0d, parkNeedUploadId);
         }
 
     }
 
     private void updateLeaseLast(JSONObject newWorkingLease, List<JSONObject> oldWorkingLeases) {
-        oldWorkingLeases.forEach(v -> updateStringValue(v, String.valueOf(LeaseKey.c_is_latest_lease),
+        oldWorkingLeases.forEach(v -> JSONDataTool.updateStringValue(v, String.valueOf(LeaseKey.c_is_latest_lease),
                 "1", leaseNeedUploadId));
-        updateStringValue(newWorkingLease, String.valueOf(LeaseKey.c_is_latest_lease), "2", leaseNeedUploadId);
+        JSONDataTool.updateStringValue(newWorkingLease, String.valueOf(LeaseKey.c_is_latest_lease), "2", leaseNeedUploadId);
     }
 
     private boolean shouldLeaseUpdate(List<JSONObject> allLastWorkingLease, JSONObject workingLease) {
@@ -416,13 +418,13 @@ public class DataPreCounter {
                 .map(parkDataCount::new)
                 .reduce(new parkDataCount(), parkDataCount::add, parkDataCount::add);
 
-        updateDoubleValue(father, String.valueOf(ParkKey.c_building_area), countResult.buildArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_sellable_area), countResult.sellableArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_sold_area), countResult.soldArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_rentable_area), countResult.rentableArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_rented_area), countResult.rentedArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_self_used_area), countResult.selfUseArea.doubleValue(), parkNeedUploadId);
-        updateDoubleValue(father, String.valueOf(ParkKey.c_vacant_area), countResult.vacantArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_building_area), countResult.buildArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_sellable_area), countResult.sellableArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_sold_area), countResult.soldArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_rentable_area), countResult.rentableArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_rented_area), countResult.rentedArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_self_used_area), countResult.selfUseArea.doubleValue(), parkNeedUploadId);
+        JSONDataTool.updateDoubleValue(father, String.valueOf(ParkKey.c_vacant_area), countResult.vacantArea.doubleValue(), parkNeedUploadId);
     }
 
     private static BigDecimal nullToZero(BigDecimal v) {
@@ -449,20 +451,4 @@ public class DataPreCounter {
         return getKeyAndPackToTime(lease, String.valueOf(LeaseKey.c_end_date));
     }
 
-    private void updateStringValue(JSONObject obj, String key, String value, Set<String> uploadList) {
-        String oldValue = obj.getString(key);
-        if (!Objects.equals(oldValue, value)) {
-            obj.put(key, value);
-            uploadList.add(obj.getString("id"));
-        }
-    }
-
-    private void updateDoubleValue(JSONObject obj, String key, Double value, Set<String> uploadList) {
-        Double oldValue = obj.getDouble(key);
-
-        if (!Objects.equals(oldValue, value)) {
-            obj.put(key, value);
-            uploadList.add(obj.getString("id"));
-        }
-    }
 }

+ 2 - 1
src/main/java/com/skyversation/xjcy/dms/DMSColumn.java

@@ -7,7 +7,8 @@ public enum DMSColumn {
     ENTERPRISE("1593","1537"),
     ENTERPRISE_ECONOMIC("1594","1538"),
     ORDER("1587","1531"),
-    LEASE_DETAIL("1574","1520");
+    LEASE_DETAIL("1574","1520"),
+    INVESTMENT_TARGET("1578","1523");
     @Getter
     private final String id;
     @Getter

+ 31 - 1
src/main/java/com/skyversation/xjcy/dms/DMSService.java

@@ -11,7 +11,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 
+import java.time.Duration;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -20,6 +22,15 @@ public class DMSService {
     @Value("${app.dms.path}")
     private String path;
 
+    private static final class QueryResult {
+        final LocalDateTime time = LocalDateTime.now();
+        final List<JSONObject> dmsResult;
+        private QueryResult(List<JSONObject> dmsResult) {
+            this.dmsResult = dmsResult;
+        }
+    }
+    private Map<DMSQuery, QueryResult> queryCache = new HashMap<>();
+
     private JSONObject sendQueryToDms(DMSRequest request) {
         JSONObject jsonObject;
         MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
@@ -138,11 +149,25 @@ public class DMSService {
         return max;
     }
 
+    private List<JSONObject> getQueryCache(DMSQuery query){
+        QueryResult queryResult = queryCache.get(query);
+        if (queryResult!=null&&Duration.between(queryResult.time,LocalDateTime.now()).compareTo(Duration.ofSeconds(15)) <= 0) {
+            return queryResult.dmsResult;
+        }
+        return null;
+    }
+
     public <T extends FromJSON> List<T> query(String token, DMSQuery query, Class<T> clazz, LocalDate now) {
         if (query.getResultType() != clazz) {
             throw new RuntimeException("类型与枚举提供的类型不符,请确认枚举中的类型");
         }
-        List<JSONObject> dmsResult = queryDmsList(query.preRequest(now), token, query.getColumnId());
+
+        List<JSONObject> dmsResult;
+        dmsResult = getQueryCache(query);
+        if (dmsResult == null) {
+            dmsResult = queryDmsList(query.preRequest(now), token, query.getColumnId());
+            queryCache.put(query,new QueryResult(dmsResult));
+        }
 
         return dmsResult.stream().map(jsonObject -> JSON.toJavaObject(jsonObject, clazz)).collect(Collectors.toList());
     }
@@ -173,4 +198,9 @@ public class DMSService {
         DMSRequest request = new DMSRequest();
         return queryDmsList(request,token,DMSColumn.LEASE_DETAIL.getId());
     }
+
+    public List<JSONObject> getAllInvestmentTarget(String token){
+        DMSRequest request = new DMSRequest();
+        return queryDmsList(request,token,DMSColumn.INVESTMENT_TARGET.getId());
+    }
 }

+ 33 - 0
src/main/java/com/skyversation/xjcy/service/InvestmentPreCountService.java

@@ -0,0 +1,33 @@
+package com.skyversation.xjcy.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.skyversation.xjcy.bean.Enterprise;
+import com.skyversation.xjcy.counter.InvestmentPreCounter;
+import com.skyversation.xjcy.dms.DMSColumn;
+import com.skyversation.xjcy.dms.DMSQuery;
+import com.skyversation.xjcy.dms.DMSService;
+import com.skyversation.xjcy.oauth.LoginService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.List;
+
+@Service
+public class InvestmentPreCountService {
+    @Resource
+    DMSService dmsService;
+    @Resource
+    LoginService loginService;
+    public List<JSONObject> updateAllTarget() {
+        synchronized (InvestmentPreCounter.LOCK) {
+            LocalDate now = LocalDate.now();
+            List<JSONObject> allTarget = dmsService.getAllInvestmentTarget(loginService.getToken());
+            List<Enterprise> allEnterprise = dmsService.query(loginService.getToken(), DMSQuery.ENTERPRISE,Enterprise.class,now);
+            InvestmentPreCounter preCounter = new InvestmentPreCounter(allTarget, allEnterprise);
+            preCounter.run();
+            dmsService.updateToDms(preCounter.getTargetNeedUpload(), loginService.getToken(), DMSColumn.INVESTMENT_TARGET);
+            return allTarget;
+        }
+    }
+}

+ 17 - 19
src/main/java/com/skyversation/xjcy/service/DataPreCountService.java → src/main/java/com/skyversation/xjcy/service/ParkPreCountService.java

@@ -1,7 +1,7 @@
 package com.skyversation.xjcy.service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.skyversation.xjcy.counter.DataPreCounter;
+import com.skyversation.xjcy.counter.ParkPreCounter;
 import com.skyversation.xjcy.dms.DMSColumn;
 import com.skyversation.xjcy.dms.DMSService;
 import com.skyversation.xjcy.oauth.LoginService;
@@ -9,55 +9,53 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 对数据进行预统计的服务,统计的结果直接写入数据库
  */
 @Service
-public class DataPreCountService {
+public class ParkPreCountService {
     @Resource
     DMSService dmsService;
     @Resource
     LoginService loginService;
 
     public void updateLimitInRooms(String LyCode, Collection<String> roomCodes, String token) {
-        synchronized (DataPreCounter.LOCK) {
+        synchronized (ParkPreCounter.LOCK) {
             List<JSONObject> allParkByLy = dmsService.getAllParkByLy(LyCode, token);
             List<JSONObject> allLeaseByRooms = dmsService.getAllLeaseByRooms(new HashSet<>(roomCodes), token);
             LocalDate now = LocalDate.now();
-            DataPreCounter dataPreCounter = new DataPreCounter(allParkByLy, allLeaseByRooms, now);
-            dataPreCounter.run(dataPreCounter.getRoomsWithCode(roomCodes));
-            dmsService.updateToDms(dataPreCounter.getParkNeedUpload(), token, DMSColumn.INDUSTRIAL_PARK);
-            dmsService.updateToDms(dataPreCounter.getLeaseNeedUpload(), token, DMSColumn.LEASE_DETAIL);
+            ParkPreCounter parkPreCounter = new ParkPreCounter(allParkByLy, allLeaseByRooms, now);
+            parkPreCounter.run(parkPreCounter.getRoomsWithCode(roomCodes));
+            dmsService.updateToDms(parkPreCounter.getParkNeedUpload(), token, DMSColumn.INDUSTRIAL_PARK);
+            dmsService.updateToDms(parkPreCounter.getLeaseNeedUpload(), token, DMSColumn.LEASE_DETAIL);
         }
     }
 
     public void updateAllRoom() {
-        synchronized (DataPreCounter.LOCK) {
+        synchronized (ParkPreCounter.LOCK) {
             List<JSONObject> allPark = dmsService.getAllPark(loginService.getToken());
             List<JSONObject> allLeaseByRooms = dmsService.getAllLease(loginService.getToken());
             LocalDate now = LocalDate.now();
-            DataPreCounter dataPreCounter = new DataPreCounter(allPark, allLeaseByRooms, now);
-            dataPreCounter.run();
-            dmsService.updateToDms(dataPreCounter.getParkNeedUpload(), loginService.getToken(), DMSColumn.INDUSTRIAL_PARK);
-            dmsService.updateToDms(dataPreCounter.getLeaseNeedUpload(), loginService.getToken(), DMSColumn.LEASE_DETAIL);
+            ParkPreCounter parkPreCounter = new ParkPreCounter(allPark, allLeaseByRooms, now);
+            parkPreCounter.run();
+            dmsService.updateToDms(parkPreCounter.getParkNeedUpload(), loginService.getToken(), DMSColumn.INDUSTRIAL_PARK);
+            dmsService.updateToDms(parkPreCounter.getLeaseNeedUpload(), loginService.getToken(), DMSColumn.LEASE_DETAIL);
         }
     }
 
     public void updateStructure(String lyCode, String token) {
-        synchronized (DataPreCounter.LOCK) {
+        synchronized (ParkPreCounter.LOCK) {
             List<JSONObject> allPark = dmsService.getAllPark(loginService.getToken());
             LocalDate now = LocalDate.now();
-            DataPreCounter dataPreCounter = new DataPreCounter(allPark, new ArrayList<>(), now);
-            dataPreCounter.runWithOutLease();
-            dmsService.updateToDms(dataPreCounter.getParkNeedUpload(), loginService.getToken(), DMSColumn.INDUSTRIAL_PARK);
-            dmsService.updateToDms(dataPreCounter.getLeaseNeedUpload(), loginService.getToken(), DMSColumn.LEASE_DETAIL);
+            ParkPreCounter parkPreCounter = new ParkPreCounter(allPark, new ArrayList<>(), now);
+            parkPreCounter.runWithOutLease();
+            dmsService.updateToDms(parkPreCounter.getParkNeedUpload(), loginService.getToken(), DMSColumn.INDUSTRIAL_PARK);
+            dmsService.updateToDms(parkPreCounter.getLeaseNeedUpload(), loginService.getToken(), DMSColumn.LEASE_DETAIL);
         }
     }
 }

+ 32 - 0
src/main/java/com/skyversation/xjcy/util/JSONDataTool.java

@@ -0,0 +1,32 @@
+package com.skyversation.xjcy.util;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Objects;
+import java.util.Set;
+
+public class JSONDataTool {
+    public static void updateStringValue(JSONObject obj, String key, String value, Set<String> uploadList) {
+        String oldValue = obj.getString(key);
+        if (!Objects.equals(oldValue, value)) {
+            obj.put(key, value);
+            uploadList.add(obj.getString("id"));
+        }
+    }
+
+    public static void updateDoubleValue(JSONObject obj, String key, Double value, Set<String> uploadList) {
+        Double oldValue = obj.getDouble(key);
+        if (!Objects.equals(oldValue, value)) {
+            obj.put(key, value);
+            uploadList.add(obj.getString("id"));
+        }
+    }
+
+    public static void updateIntValue(JSONObject obj, String key, Integer value, Set<String> uploadList) {
+        Integer oldValue = obj.getInteger(key);
+        if (!Objects.equals(oldValue, value)) {
+            obj.put(key, value);
+            uploadList.add(obj.getString("id"));
+        }
+    }
+}