|
|
@@ -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;
|
|
|
}
|
|
|
|