|
|
@@ -10,6 +10,7 @@ import com.izouma.zhumj.dto.ContractCheckinInfo;
|
|
|
import com.izouma.zhumj.dto.PageQuery;
|
|
|
import com.izouma.zhumj.dto.sale.StoreContractDTO;
|
|
|
import com.izouma.zhumj.enums.BillStatus;
|
|
|
+import com.izouma.zhumj.enums.BillType;
|
|
|
import com.izouma.zhumj.enums.CheckInType;
|
|
|
import com.izouma.zhumj.event.ContractUpdateEvent;
|
|
|
import com.izouma.zhumj.event.NewContractEvent;
|
|
|
@@ -34,9 +35,8 @@ import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import javax.transaction.Transactional;
|
|
|
-import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.LocalTime;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.*;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -179,6 +179,36 @@ public class ContractService {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ int idx = 1;
|
|
|
+ if (record.getCheckInType() == CheckInType.TEAM_POST_PAID) {
|
|
|
+ List<ContractBill> bills = new ArrayList<>();
|
|
|
+ LocalDate date = record.getContractBeginTime().toLocalDate();
|
|
|
+ while (YearMonth.from(date).compareTo(YearMonth.from(record.getContractEndTime())) <= 0) {
|
|
|
+ YearMonth month = YearMonth.from(date);
|
|
|
+ ContractBill contractBill = ContractBill.builder()
|
|
|
+ .startTime(month.atDay(1).atTime(LocalTime.MIN))
|
|
|
+ .endTime(month.atEndOfMonth().atTime(Constants.TIME_MAX))
|
|
|
+ .dueTime(month.atEndOfMonth().atTime(LocalTime.MIN))
|
|
|
+ .customerId(record.getCustomerId())
|
|
|
+ .saleId(record.getSaleId())
|
|
|
+ .type(BillType.POST_PAID)
|
|
|
+ .status(BillStatus.PENDING)
|
|
|
+ .idx(idx++)
|
|
|
+ .build();
|
|
|
+ bills.add(contractBill);
|
|
|
+ date = date.plusMonths(1);
|
|
|
+ }
|
|
|
+ record.setBills(bills);
|
|
|
+ } else {
|
|
|
+ for (ContractBill bill : record.getBills()) {
|
|
|
+ bill.setSaleId(record.getSaleId());
|
|
|
+ bill.setStatus(BillStatus.NOT_PAID);
|
|
|
+ bill.setType(BillType.PRE_PAID);
|
|
|
+ bill.setCustomerId(record.getCustomerId());
|
|
|
+ bill.setIdx(idx++);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
List<ContractRoomType> roomList = new ArrayList<>();
|
|
|
//设置房型信息存储
|
|
|
@@ -428,4 +458,43 @@ public class ContractService {
|
|
|
.orElse(null))
|
|
|
.build()).collect(Collectors.toList());
|
|
|
}
|
|
|
+
|
|
|
+ public static List<ContractBill> calcBills(Contract contract) {
|
|
|
+ if (contract.getCheckInType() == CheckInType.TEAM
|
|
|
+ || contract.getCheckInType() == CheckInType.SCATTERED_BEDS) {
|
|
|
+ int totalMonth = contract.getContractMonthly();
|
|
|
+ LocalDateTime dueTime = contract.getContractBeginTime().plusDays(contract.getAdvancePayment());
|
|
|
+ List<ContractBill> bills = new ArrayList<>();
|
|
|
+ int idx = 0;
|
|
|
+ while (totalMonth > 0) {
|
|
|
+ LocalDateTime startTime = contract.getContractBeginTime().plusMonths(contract.getPay() * idx);
|
|
|
+ LocalDateTime endTime = startTime.plusMonths(contract.getPay());
|
|
|
+ if (endTime.isAfter(contract.getContractEndTime())) {
|
|
|
+ endTime = contract.getContractEndTime();
|
|
|
+ } else {
|
|
|
+ endTime = endTime.plusSeconds(-1);
|
|
|
+ }
|
|
|
+ int month = totalMonth - contract.getPay() <= 0 ? totalMonth : contract.getPay();
|
|
|
+ BigDecimal money = contract.getMonthlyRent().multiply(BigDecimal.valueOf(month));
|
|
|
+ if (idx == 0) {
|
|
|
+ money = money.add(contract.getFlowBet());
|
|
|
+ }
|
|
|
+ ContractBill bill = ContractBill.builder()
|
|
|
+ .idx(++idx)
|
|
|
+ .dueTime(dueTime)
|
|
|
+ .startTime(startTime)
|
|
|
+ .endTime(endTime)
|
|
|
+ .money(money)
|
|
|
+ .build();
|
|
|
+ bills.add(bill);
|
|
|
+ totalMonth = Math.max(0, totalMonth - contract.getPay());
|
|
|
+ dueTime = dueTime.plusMonths(contract.getPay());
|
|
|
+
|
|
|
+ System.out.println(String.format("%s %s %s %s",
|
|
|
+ bill.getStartTime(), bill.getEndTime(), bill.getDueTime(), bill.getMoney()));
|
|
|
+ }
|
|
|
+ return bills;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|