|
|
@@ -76,6 +76,7 @@ public class ReportService {
|
|
|
private final IndividualRentRepo individualRentRepo;
|
|
|
private final EntryRecordRepo entryRecordRepo;
|
|
|
private final StoreProxyFeeRepo storeProxyFeeRepo;
|
|
|
+ private final SuspendInfoRepo suspendInfoRepo;
|
|
|
|
|
|
public List<DepositDetailDTO> allDepositDetail(Long storeId, LocalDateTime start, LocalDateTime end, DepositStatus depositStatus) {
|
|
|
List<CheckinInfo> checkinInfoList = checkinInfoRepo
|
|
|
@@ -3041,4 +3042,108 @@ public class ReportService {
|
|
|
});
|
|
|
return storeIndividualReports;
|
|
|
}
|
|
|
+
|
|
|
+ public List<List<String>> suspendFeeReport(LocalDate start, LocalDate end) {
|
|
|
+ List<List<String>> suspendFeeReport = Collections.synchronizedList(new ArrayList<>());
|
|
|
+ List<StoreInfo> storeInfos = storeInfoRepo.findAll();
|
|
|
+ storeInfos.removeIf(storeInfo -> !storeInfo.getStoreStatus().equals(StoreStatus.BUSINESS));
|
|
|
+ List<String> feeNames = feeNameRepo.findAll((Specification<FeeName>) (root, criteriaQuery, criteriaBuilder) ->
|
|
|
+ criteriaBuilder.notLike(root.get("name"), "%" + "押金" + "%")
|
|
|
+ ).stream().map(FeeName::getName).collect(Collectors.toList());
|
|
|
+ feeNames.add("押金");
|
|
|
+ feeNames.add("房费");
|
|
|
+ List<String> head = new ArrayList<>(Collections.singletonList("门店名称"));
|
|
|
+ head.addAll(feeNames);
|
|
|
+// head.add("总收入");
|
|
|
+ suspendFeeReport.add(head);
|
|
|
+ storeInfos.stream().parallel().forEach(storeInfo -> {
|
|
|
+ List<String> list = Collections.synchronizedList(new ArrayList<>());
|
|
|
+ list.add(storeInfo.getStoreName());
|
|
|
+ BigDecimal total = BigDecimal.ZERO;
|
|
|
+ List<String> suspendIdNo = suspendInfoRepo
|
|
|
+ .findAllByStoreIdAndCreatedAtBetween(storeInfo.getId(), start.atStartOfDay(), end
|
|
|
+ .atTime(LocalTime.MAX)).stream().map(SuspendInfo::getIdNo).collect(Collectors.toList());
|
|
|
+ List<Long> checkinInfoList = checkinInfoRepo.findAllByIdNoIn(suspendIdNo).stream().map(CheckinInfo::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<PersonalFeeType> personalFeeTypes = personalFeeTypeRepo
|
|
|
+ .findAll((Specification<PersonalFeeType>) (root, criteriaQuery, criteriaBuilder) ->
|
|
|
+ criteriaQuery.where(
|
|
|
+ root.get("name").in(feeNames),
|
|
|
+ criteriaBuilder.equal(root.get("storeId"), storeInfo.getId())
|
|
|
+ ).getRestriction());
|
|
|
+ //本门店的个人押金费用
|
|
|
+ List<PersonalFee> personalFees = personalFeeRepo
|
|
|
+ .findByStoreIdAndSettleTimeBetweenAndEnabledAndCheckinIdIn(storeInfo.getId(), start
|
|
|
+ .atStartOfDay(), end.atTime(23, 59, 59, 99), true, checkinInfoList);
|
|
|
+ for (String feeTypeName : feeNames) {
|
|
|
+ Set<Long> personalFeeTypeSet = personalFeeTypes.stream()
|
|
|
+ .filter(personalFeeType -> personalFeeType.getName().equals(feeTypeName))
|
|
|
+ .map(PersonalFeeType::getId).collect(Collectors.toSet());
|
|
|
+ BigDecimal fee = personalFees.stream()
|
|
|
+ .filter(personalFee -> personalFeeTypeSet.stream().anyMatch(longVal ->
|
|
|
+ longVal.equals(personalFee.getPersonalFeeTypeId())))
|
|
|
+ .map(PersonalFee::getMoney).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
+ list.add(fee.toString());
|
|
|
+ total = total.add(fee);
|
|
|
+ }
|
|
|
+ list.add(depositRecordRepo.findAllByCheckinInfoIdIn(checkinInfoList).stream().map(DepositRecord::getRest)
|
|
|
+ .reduce(BigDecimal::add).orElse(BigDecimal.ZERO).toString());
|
|
|
+ list.add(roomRateRepo.findAllByCheckinIdInAndDateBetween(checkinInfoList, start, end).stream()
|
|
|
+ .map(RoomRate::getDayRate).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).toString());
|
|
|
+ suspendFeeReport.add(list);
|
|
|
+ });
|
|
|
+ return suspendFeeReport;
|
|
|
+ }
|
|
|
+
|
|
|
+// public List<List<String>> suspendFeeReport(LocalDate start, LocalDate end) {
|
|
|
+// List<List<String>> suspendFeeReport = Collections.synchronizedList(new ArrayList<>());
|
|
|
+// List<StoreInfo> storeInfos = storeInfoRepo.findAll();
|
|
|
+// storeInfos.removeIf(storeInfo -> !storeInfo.getStoreStatus().equals(StoreStatus.BUSINESS));
|
|
|
+// List<String> feeNames = feeNameRepo.findAll((Specification<FeeName>) (root, criteriaQuery, criteriaBuilder) ->
|
|
|
+// criteriaBuilder.notLike(root.get("name"), "%" + "押金" + "%")
|
|
|
+// ).stream().map(FeeName::getName).collect(Collectors.toList());
|
|
|
+// feeNames.add("押金");
|
|
|
+// feeNames.add("房费");
|
|
|
+// List<String> head = new ArrayList<>(Collections.singletonList("门店名称"));
|
|
|
+// head.addAll(feeNames);
|
|
|
+//// head.add("总收入");
|
|
|
+// suspendFeeReport.add(head);
|
|
|
+// storeInfos.stream().parallel().forEach(storeInfo -> {
|
|
|
+// List<String> list = Collections.synchronizedList(new ArrayList<>());
|
|
|
+// list.add(storeInfo.getStoreName());
|
|
|
+// BigDecimal total = BigDecimal.ZERO;
|
|
|
+// List<String> suspendIdNo = suspendInfoRepo
|
|
|
+// .findAllByStoreIdAndCreatedAtBetween(storeInfo.getId(), start.atStartOfDay(), end
|
|
|
+// .atTime(LocalTime.MAX)).stream().map(SuspendInfo::getIdNo).collect(Collectors.toList());
|
|
|
+// List<Long> checkinInfoList = checkinInfoRepo.findAllByIdNoIn(suspendIdNo).stream().map(CheckinInfo::getId)
|
|
|
+// .collect(Collectors.toList());
|
|
|
+// List<PersonalFeeType> personalFeeTypes = personalFeeTypeRepo
|
|
|
+// .findAll((Specification<PersonalFeeType>) (root, criteriaQuery, criteriaBuilder) ->
|
|
|
+// criteriaQuery.where(
|
|
|
+// root.get("name").in(feeNames),
|
|
|
+// criteriaBuilder.equal(root.get("storeId"), storeInfo.getId())
|
|
|
+// ).getRestriction());
|
|
|
+// //本门店的个人押金费用
|
|
|
+// List<PersonalFee> personalFees = personalFeeRepo
|
|
|
+// .findByStoreIdAndSettleTimeBetweenAndEnabledAndCheckinIdIn(storeInfo.getId(), start
|
|
|
+// .atStartOfDay(), end.atTime(23, 59, 59, 99), true, checkinInfoList);
|
|
|
+// for (String feeTypeName : feeNames) {
|
|
|
+// Set<Long> personalFeeTypeSet = personalFeeTypes.stream()
|
|
|
+// .filter(personalFeeType -> personalFeeType.getName().equals(feeTypeName))
|
|
|
+// .map(PersonalFeeType::getId).collect(Collectors.toSet());
|
|
|
+// BigDecimal fee = personalFees.stream()
|
|
|
+// .filter(personalFee -> personalFeeTypeSet.stream().anyMatch(longVal ->
|
|
|
+// longVal.equals(personalFee.getPersonalFeeTypeId())))
|
|
|
+// .map(PersonalFee::getMoney).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
|
|
|
+// list.add(fee.toString());
|
|
|
+// total = total.add(fee);
|
|
|
+// }
|
|
|
+// list.add(depositRecordRepo.findAllByCheckinInfoIdIn(checkinInfoList).stream().map(DepositRecord::getRest)
|
|
|
+// .reduce(BigDecimal::add).orElse(BigDecimal.ZERO).toString());
|
|
|
+// list.add(roomRateRepo.findAllByCheckinIdInAndDateBetween(checkinInfoList, start, end).stream()
|
|
|
+// .map(RoomRate::getDayRate).reduce(BigDecimal::add).orElse(BigDecimal.ZERO).toString());
|
|
|
+// suspendFeeReport.add(list);
|
|
|
+// });
|
|
|
+// return suspendFeeReport;
|
|
|
+// }
|
|
|
}
|