From 188d1158534a811e963270bdb0afe5939dcfc049 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 03 九月 2020 18:19:06 +0800
Subject: [PATCH] 优化代码
---
service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java | 157 +++++++++++++++++++++++++++++++++++++---------------
1 files changed, 112 insertions(+), 45 deletions(-)
diff --git a/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java b/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
index 038339f..aa2a4fe 100644
--- a/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
+++ b/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
@@ -25,9 +25,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* @ClassName GenerateOwnerBillTemplate
@@ -198,34 +196,21 @@
// 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
// 鏈堜唤 * 姣忔湀鍗曚环 = 娆犺垂閲戦
+ Map<String, Object> targetEndDateAndOweMonth = getTargetEndDateAndOweMonth(feeDto);
+ Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
+ double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
+
//褰撳墠鏃堕棿
Date billEndTime = DateUtil.getCurrentDate();
- //寮�濮嬫椂闂�
- Date startDate = feeDto.getStartTime();
- //鍒版湡鏃堕棿
- Date endDate = feeDto.getEndTime();
+
//缂磋垂鍛ㄦ湡
long paymentCycle = Long.parseLong(feeConfigDto.getPaymentCycle());
- // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂� = 鏈堜唤
- double mulMonth = dayCompare(startDate, billEndTime);
- // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
- double round = 0.0;
- if ("1200".equals(feeConfigDto.getPaymentCd())) { // 棰勪粯璐�
- round = Math.floor(mulMonth / paymentCycle) + 1;
- } else { //鍚庝粯璐�
- round = Math.floor(mulMonth / paymentCycle);
- }
- // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
- Date targetEndDate = getTargetEndTime(round * paymentCycle * 30, startDate);
+
//璇存槑娌℃湁娆犺垂
- if (endDate.getTime() > targetEndDate.getTime()) {
+ if (oweMonth <= 0.0) {
return;
}
-
- // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
- double oweMonth = dayCompare(endDate, targetEndDate);
-
if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
computeFeePriceByRoom(feeDto);
@@ -255,7 +240,7 @@
billOweFeeDto.setCommunityId(feeDto.getCommunityId());
billOweFeeDto.setPayerObjType(feeDto.getPayerObjType());
billOweFeeDto.setState("1000");
-
+ billOweFeeDto.setDeadlineTime(DateUtil.getFormatTimeString(targetEndDate, DateUtil.DATE_FORMATE_STRING_A));
if ("3333".equals(feeDto.getPayerObjType())) {
getRoomInfo(billOweFeeDto, feeDto);
} else {
@@ -293,16 +278,96 @@
curReceipts = recAmount.add(curReceipts);
}
}
-
billDto.setReceipts(curReceipts.doubleValue() + "");
+ }
+ private Map getTargetEndDateAndOweMonth(FeeDto feeDto) {
+ Date targetEndDate = null;
+ double oweMonth = 0.0;
+ Map<String, Object> targetEndDateAndOweMonth = new HashMap<>();
+
+ if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
+ targetEndDate = feeDto.getEndTime();
+ targetEndDateAndOweMonth.put("oweMonth", oweMonth);
+ targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
+ return targetEndDateAndOweMonth;
+ }
+ if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+ if (feeDto.getImportFeeEndTime() == null) {
+ targetEndDate = feeDto.getConfigEndTime();
+ } else {
+ targetEndDate = feeDto.getImportFeeEndTime();
+ }
+ //鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
+ oweMonth = 1.0;
+
+ } else {
+ //褰撳墠鏃堕棿
+ Date billEndTime = DateUtil.getCurrentDate();
+ //寮�濮嬫椂闂�
+ Date startDate = feeDto.getStartTime();
+ //鍒版湡鏃堕棿
+ Date endDate = feeDto.getEndTime();
+ if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
+ OwnerCarDto ownerCarDto = new OwnerCarDto();
+ ownerCarDto.setCommunityId(feeDto.getCommunityId());
+ ownerCarDto.setCarId(feeDto.getPayerObjId());
+ List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+ if (ownerCarDtos == null || ownerCarDtos.size() != 1) {
+ targetEndDateAndOweMonth.put("oweMonth", 0);
+ targetEndDateAndOweMonth.put("targetEndDate", "");
+ return targetEndDateAndOweMonth;
+ }
+
+ targetEndDate = ownerCarDtos.get(0).getEndTime();
+ //璇存槑娌℃湁娆犺垂
+ if (endDate.getTime() < targetEndDate.getTime()) {
+ // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
+ oweMonth = dayCompare(endDate, targetEndDate);
+ }
+ targetEndDateAndOweMonth.put("oweMonth", oweMonth);
+ targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
+ return targetEndDateAndOweMonth;
+ }
+ //缂磋垂鍛ㄦ湡
+ long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
+ // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂� = 鏈堜唤
+ double mulMonth = dayCompare(startDate, billEndTime);
+ // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
+ double round = 0.0;
+ if ("1200".equals(feeDto.getPaymentCd())) { // 棰勪粯璐�
+ round = Math.floor(mulMonth / paymentCycle) + 1;
+ } else { //鍚庝粯璐�
+ round = Math.floor(mulMonth / paymentCycle);
+ }
+ // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
+ targetEndDate = getTargetEndTime(round * paymentCycle, startDate);
+ //璐圭敤 蹇粨鏉熶簡
+ if (feeDto.getConfigEndTime().getTime() < targetEndDate.getTime()) {
+ targetEndDate = feeDto.getConfigEndTime();
+ }
+ //璇存槑娌℃湁娆犺垂
+ if (endDate.getTime() < targetEndDate.getTime()) {
+ // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
+ oweMonth = dayCompare(endDate, targetEndDate);
+ }
+
+ if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) {
+ targetEndDate = feeDto.getEndTime();
+ }
+ }
+
+ targetEndDateAndOweMonth.put("oweMonth", oweMonth);
+ targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
+ return targetEndDateAndOweMonth;
}
private Date getTargetEndTime(double v, Date startDate) {
Calendar endDate = Calendar.getInstance();
endDate.setTime(startDate);
- endDate.add(Calendar.DATE, (int) v);
+ endDate.add(Calendar.MONTH, (int) v);
return endDate.getTime();
}
@@ -315,25 +380,10 @@
*/
private void getParkingSpaceInfo(BillOweFeeDto billOweFeeDto, FeeDto feeDto) {
- ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
- parkingSpaceDto.setPsId(feeDto.getPayerObjId());
- parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
- List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
- if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
- //杞︿綅鍙兘琚垹闄や簡
- billOweFeeDto.setOwnerId("1");
- billOweFeeDto.setOwnerName("鏈煡");
- billOweFeeDto.setOwnerTel("19999999999");
- billOweFeeDto.setPayerObjName("鏈煡");
- return;
- }
-
- billOweFeeDto.setPayerObjName(parkingSpaceDtos.get(0).getAreaNum() + "鍋滆溅鍦�" + parkingSpaceDtos.get(0).getNum() + "杞︿綅");
-
OwnerCarDto ownerCarDto = new OwnerCarDto();
ownerCarDto.setWithOwner(true);
- ownerCarDto.setPsId(parkingSpaceDtos.get(0).getPsId());
+ ownerCarDto.setCarId(feeDto.getPayerObjId());
ownerCarDto.setCommunityId(feeDto.getCommunityId());
List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
@@ -347,6 +397,7 @@
return;
}
+ billOweFeeDto.setPayerObjName(ownerCarDtos.get(0).getCarNum());
billOweFeeDto.setOwnerId(ownerCarDtos.get(0).getOwnerId());
billOweFeeDto.setOwnerName(ownerCarDtos.get(0).getOwnerName());
billOweFeeDto.setOwnerTel(ownerCarDtos.get(0).getLink());
@@ -465,9 +516,18 @@
* @param feeDto
*/
private void computeFeePriceByParkingSpace(FeeDto feeDto) {
+
+ OwnerCarDto ownerCarDto = new OwnerCarDto();
+ ownerCarDto.setCommunityId(feeDto.getCommunityId());
+ ownerCarDto.setCarId(feeDto.getPayerObjId());
+ List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+ if (ownerCarDtos == null || ownerCarDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
+ return;
+ }
+
ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
- parkingSpaceDto.setPsId(feeDto.getPayerObjId());
+ parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId());
List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
@@ -532,15 +592,22 @@
from.setTime(fromDate);
Calendar to = Calendar.getInstance();
to.setTime(toDate);
+ int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
+ int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
- long t1 = from.getTimeInMillis();
+ result = result + month;
+ Calendar newFrom = Calendar.getInstance();
+ newFrom.setTime(fromDate);
+ newFrom.add(Calendar.MONTH, result);
+
+ long t1 = newFrom.getTimeInMillis();
long t2 = to.getTimeInMillis();
long days = (t2 - t1) / (24 * 60 * 60 * 1000);
BigDecimal tmpDays = new BigDecimal(days);
BigDecimal monthDay = new BigDecimal(30);
- return tmpDays.divide(monthDay, 2, RoundingMode.HALF_UP).doubleValue();
+ return tmpDays.divide(monthDay, 2, RoundingMode.HALF_UP).doubleValue() + result;
}
--
Gitblit v1.8.0