Bladeren bron

补充优化企业健康检查逻辑

ximinghao 1 maand geleden
bovenliggende
commit
32550df8d9

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

@@ -47,6 +47,8 @@ public class Enterprise implements FromJSON ,DateInterval {
     private String cQyfx;
     private String cLawsuits;
     private String cOperationalRisks;
+    @JSONField(deserializeUsing = LocalDateFromTimestampDeserializer.class)
+    private LocalDate cQyfxZlgqsj;
     @Override
     public LocalDate getStartDate() {
         return Optional.ofNullable(cCertificateDate).orElse(LocalDate.MIN);

+ 39 - 25
src/main/java/com/skyversation/xjcy/computer/EnterpriseHealthComputerV2.java

@@ -23,10 +23,12 @@ public class EnterpriseHealthComputerV2 {
         private final Enterprise enterprise;
         private final List<LeaseDetail> leases;
         public Set<HealthItem> healthItems;
+        private final LocalDate nearestLeaseExpiryDate;
 
-        private Result(Enterprise enterprise, List<LeaseDetail> leases) {
+        private Result(Enterprise enterprise, List<LeaseDetail> leases, LocalDate nearestLeaseExpiryDate) {
             this.enterprise = enterprise;
             this.leases = leases;
+            this.nearestLeaseExpiryDate = nearestLeaseExpiryDate;
         }
     }
 
@@ -97,10 +99,27 @@ public class EnterpriseHealthComputerV2 {
             String sourceCQyfx = result.enterprise.getCQyfx();
             Set<HealthItem> sourceHealth = HealthItem.fromDmsData(sourceCQyfx);
             Set<HealthItem> targetHealth = result.healthItems;
-            if (!sourceHealth.equals(targetHealth)) {
+
+            boolean healthChanged = !sourceHealth.equals(targetHealth);
+
+            LocalDate expectedLeaseExpiryDate = targetHealth.contains(HealthItem.ORANGE_MEDIUM_RISK_LEASE_EXPIRED)
+                    ? result.getNearestLeaseExpiryDate()
+                    : null;
+            LocalDate sourceLeaseExpiryDate = result.enterprise.getCQyfxZlgqsj();
+            boolean leaseExpiryChanged = !Objects.equals(expectedLeaseExpiryDate, sourceLeaseExpiryDate);
+
+            if (healthChanged || leaseExpiryChanged) {
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put("id", result.enterprise.getId());
-                jsonObject.put("c_qyfx", HealthItem.toDmsData(targetHealth));
+
+                if (healthChanged) {
+                    jsonObject.put("c_qyfx", HealthItem.toDmsData(targetHealth));
+                }
+
+                if (leaseExpiryChanged) {
+                    jsonObject.put("c_qyfx_zlgqsj", expectedLeaseExpiryDate);
+                }
+
                 updateJSON.add(jsonObject);
             }
         }
@@ -120,7 +139,18 @@ public class EnterpriseHealthComputerV2 {
     private void readData() {
         Map<String, List<LeaseDetail>> leaseMap = leases.stream().collect(Collectors.groupingBy(LeaseDetail::getCEnterpriseCode));
         for (Enterprise enterprise : enterprises) {
-            Result result = new Result(enterprise, leaseMap.get(enterprise.getCUnifiedSocialCreditCode()));
+            List<LeaseDetail> enterpriseLeases = leaseMap.get(enterprise.getCUnifiedSocialCreditCode());
+
+            LocalDate nearestLeaseExpiryDate = null;
+            if (enterpriseLeases != null && !enterpriseLeases.isEmpty()) {
+                nearestLeaseExpiryDate = enterpriseLeases.stream()
+                        .filter(lease -> lease.getCEndDate() != null)
+                        .map(LeaseDetail::getCEndDate)
+                        .min(Comparator.naturalOrder())
+                        .orElse(null);
+            }
+
+            Result result = new Result(enterprise, enterpriseLeases, nearestLeaseExpiryDate);
             results.add(result);
         }
     }
@@ -146,35 +176,19 @@ public class EnterpriseHealthComputerV2 {
     }
 
     private Set<HealthItem> checkLeases(Result result) {
-        List<LeaseDetail> leases = result.getLeases();
         Set<HealthItem> healthItems = new HashSet<>();
-        if (leases == null || leases.isEmpty()) {
-            return healthItems;
-        }
+
         boolean isLevelBetterThanB = Arrays.asList(
                         EnterpriseLevel.LEVEL_A_PLUS,
                         EnterpriseLevel.LEVEL_A,
                         EnterpriseLevel.LEVEL_B)
                 .contains(EnterpriseLevel.codeOf(result.getEnterprise().getCompanyLevel()));
 
-        if (isLevelBetterThanB) {
-            Map<String, LocalDate> endTimes = leases.stream()
-                    .filter(lease -> lease.getCEndDate() != null)
-                    .collect(Collectors.groupingBy(
-                            LeaseDetail::getCRoomCode,
-                            Collectors.collectingAndThen(
-                                    Collectors.maxBy(Comparator.comparing(LeaseDetail::getCEndDate)),
-                                    optionalLease -> optionalLease.map(LeaseDetail::getCEndDate).orElse(null)
-                            )
-                    ));
-            //租约过期或即将过期(30天)
-            if (endTimes.values()
-                    .stream()
-                    .anyMatch(endTime -> endTime.isBefore(LocalDate.now().plusDays(30)))
-            ) {
-                healthItems.add(HealthItem.ORANGE_MEDIUM_RISK_LEASE_EXPIRED);
-            }
+        if (isLevelBetterThanB && result.getNearestLeaseExpiryDate() != null &&
+                result.getNearestLeaseExpiryDate().isBefore(LocalDate.now().plusDays(30))) {
+            healthItems.add(HealthItem.ORANGE_MEDIUM_RISK_LEASE_EXPIRED);
         }
+
         return healthItems;
     }