From 05683f2b2bdbdbe21cf17ad523c21ab338bd1c54 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 19 七月 2022 21:49:55 +0800
Subject: [PATCH] 优化添加设备 功能
---
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java | 540 +++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 442 insertions(+), 98 deletions(-)
diff --git a/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java b/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
index 0918722..f331270 100755
--- a/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
+++ b/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -2,6 +2,7 @@
import com.java110.config.properties.code.Java110Properties;
import com.java110.core.context.Environment;
+import com.java110.core.log.LoggerFactory;
import com.java110.core.smo.IComputeFeeSMO;
import com.java110.dto.RoomDto;
import com.java110.dto.community.CommunityDto;
@@ -19,6 +20,7 @@
import com.java110.intf.community.ICommunityInnerServiceSMO;
import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
import com.java110.intf.fee.IFeeInnerServiceSMO;
import com.java110.intf.fee.ITempCarFeeConfigAttrInnerServiceSMO;
import com.java110.intf.fee.ITempCarFeeConfigInnerServiceSMO;
@@ -34,14 +36,18 @@
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.math.BigDecimal;
+import java.text.DateFormat;
import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -59,6 +65,9 @@
@Autowired(required = false)
private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+ @Autowired(required = false)
+ private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
@Autowired(required = false)
private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
@@ -179,7 +188,7 @@
feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
BigDecimal price = new BigDecimal(feeDto.getFeePrice());
price = price.multiply(new BigDecimal(oweMonth));
- feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
feeDto.setDeadlineTime(targetEndDate);
//鍔ㄦ�佽垂鐢�
@@ -208,7 +217,7 @@
//double month = dayCompare(feeDto.getEndTime(), DateUtil.getCurrentDate());
BigDecimal price = new BigDecimal(feeDto.getFeePrice());
price = price.multiply(new BigDecimal(oweMonth));
- feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
feeDto.setDeadlineTime(targetEndDate);
//鍔ㄦ�佽垂鐢�
@@ -236,7 +245,7 @@
//double month = dayCompare(feeDto.getEndTime(), DateUtil.getCurrentDate());
BigDecimal price = new BigDecimal(feeDto.getFeePrice());
price = price.multiply(new BigDecimal(oweMonth));
- feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
feeDto.setDeadlineTime(targetEndDate);
//鍔ㄦ�佽垂鐢�
@@ -278,13 +287,16 @@
} else if ("1101".equals(computingFormula)) { // 绉熼噾
feeReceiptDetailPo.setArea("");
feeReceiptDetailPo.setSquarePrice(roomDto.getRoomRent());
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾
+ feeReceiptDetailPo.setArea("");
+ feeReceiptDetailPo.setSquarePrice(roomDto.getRoomRent());
} else if ("4004".equals(computingFormula)) {
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
}
@@ -306,14 +318,17 @@
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
}
} else if ("1101".equals(computingFormula)) { //绉熼噾
feeReceiptDetailPo.setArea(roomDtos.get(0).getBuiltUpArea());
feeReceiptDetailPo.setSquarePrice(roomDtos.get(0).getRoomRent());
- } else {
+ } else if ("1102".equals(computingFormula)) { //绉熼噾
+ feeReceiptDetailPo.setArea(roomDtos.get(0).getBuiltUpArea());
+ feeReceiptDetailPo.setSquarePrice(roomDtos.get(0).getRoomRent());
+ }else {
}
} else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {//杞︿綅鐩稿叧
String computingFormula = feeDto.getComputingFormula();
@@ -341,13 +356,16 @@
} else if ("1101".equals(computingFormula)) { // 绉熼噾
feeReceiptDetailPo.setArea("");
feeReceiptDetailPo.setSquarePrice("0");
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾锛堥�掑锛�
+ feeReceiptDetailPo.setArea("");
+ feeReceiptDetailPo.setSquarePrice("0");
} else if ("4004".equals(computingFormula)) {
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
}
@@ -376,7 +394,7 @@
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
}
@@ -416,15 +434,22 @@
for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomRent())));
}
- feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
- feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
- } else if ("4004".equals(computingFormula)) {
+ feeReceiptDetailPo.setArea("");
+ feeReceiptDetailPo.setSquarePrice(builtUpArea.doubleValue() + "");
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾
+ BigDecimal builtUpArea = new BigDecimal(0);
+ for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+ builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomRent())));
+ }
+ feeReceiptDetailPo.setArea("");
+ feeReceiptDetailPo.setSquarePrice(builtUpArea.doubleValue() + "");
+ }else if ("4004".equals(computingFormula)) {
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
}
@@ -450,7 +475,7 @@
} else {
BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
- BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
feeReceiptDetailPo.setArea(sub.doubleValue() + "");
feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
}
@@ -738,6 +763,10 @@
endCalender.add(Calendar.HOUR, hours);
if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
return FeeDto.STATE_FINISH;
+ } else if(FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())){
+ if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
+ return FeeDto.STATE_FINISH;
+ }
} else {
if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
return FeeDto.STATE_FINISH;
@@ -769,6 +798,10 @@
} else {
endCalender.setTime(feeDto.getImportFeeEndTime());
}
+ } else if(FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())){
+ if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
+ endCalender.setTime(feeDto.getDeadlineTime());
+ }
} else {
if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
endCalender.setTime(feeDto.getConfigEndTime());
@@ -795,19 +828,22 @@
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(reportRoomDto.getBuiltUpArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
} else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
} else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
} else if ("1101".equals(computingFormula)) { // 绉熼噾
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾
+ BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
} else if ("4004".equals(computingFormula)) {
feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
} else if ("5005".equals(computingFormula)) {
@@ -821,7 +857,7 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
}
} else if ("6006".equals(computingFormula)) {
feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
@@ -838,7 +874,7 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
}
} else {
throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
@@ -850,17 +886,19 @@
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble("0"));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
} else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
} else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
feePrice = new BigDecimal(0);
} else if ("1101".equals(computingFormula)) { // 绉熼噾
feePrice = new BigDecimal(0);
- } else if ("4004".equals(computingFormula)) {
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾
+ feePrice = new BigDecimal(0);
+ }else if ("4004".equals(computingFormula)) {
feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(tmpReportFeeDto.getCurDegrees())) {
@@ -873,7 +911,7 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
}
} else if ("6006".equals(computingFormula)) {
feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
@@ -890,13 +928,13 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
}
} else {
throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
}
}
- return feePrice.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+ return feePrice.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
@Override
@@ -909,7 +947,7 @@
BigDecimal feePrice = new BigDecimal("0.0");
BigDecimal feeTotalPrice = new BigDecimal(0.0);
Map<String, Object> feeAmount = new HashMap<>();
- if(Environment.isOwnerPhone(java110Properties)){
+ if (Environment.isOwnerPhone(java110Properties)) {
return getOwnerPhoneFee(feeAmount);
}
if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //鎴垮眿鐩稿叧
@@ -929,41 +967,88 @@
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getBuiltUpArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
- if (!StringUtil.isEmpty(feeDto.getCycle())) {
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
+ if (!StringUtil.isEmpty(feeDto.getCycle()) && !"0".equals(feeDto.getCycle())) {
BigDecimal cycle = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ if (!StringUtil.isEmpty(feeDto.getCycle()) && "0".equals(feeDto.getCycle()) && !StringUtil.isEmpty(feeDto.getCustEndTime())) {
+ //璁$畻鍛ㄦ湡
+ Map<String, Object> cycleResults = dateDiff(feeDto.getEndTime(), feeDto.getCustEndTime());
+ //鏈堜唤澶т簬0
+ Integer months = Integer.valueOf(cycleResults.get("months").toString());
+ Integer days = Integer.valueOf(cycleResults.get("days").toString());
+ Integer startMonthDays = Integer.valueOf(cycleResults.get("startMonthDays").toString());
+ Integer endMonthDays = Integer.valueOf(cycleResults.get("endMonthDays").toString());
+ String isOneMonth = cycleResults.get("isOneMonth").toString();
+ //鏁存暟鏈�
+ if (months > 0 && days == 0) {
+ BigDecimal cycle = new BigDecimal(months);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ //鍑犱釜鏈堝嚑澶� 锛堝崟浠�*闈㈢Н+闄勫姞璐癸級*鏈堜唤+((鍗曚环*闈㈢Н+闄勫姞璐�)/鎬诲ぉ鏁�)*瀹為檯澶╂暟
+ if (months > 0 && days > 0) {
+ BigDecimal cycle = new BigDecimal(months);
+ BigDecimal endMonthDayss = new BigDecimal(endMonthDays);
+ BigDecimal dayss = new BigDecimal(days);
+ BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
+ feeTotalPrice = (monthPrice).multiply(cycle).add(monthPrice.divide(endMonthDayss).multiply(dayss)).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ //璺ㄦ湀浠� 涓嶈冻涓�鏈� ((鍗曚环*闈㈢Н+闄勫姞璐�)/寮�濮嬫湀浠芥�诲ぉ鏁�)*瀹為檯澶╂暟+((鍗曚环*闈㈢Н+闄勫姞璐�)/缁撴潫鏈堜唤鎬诲ぉ鏁�)*瀹為檯澶╂暟
+ if (months == 0 && days > 0 && "true".equals(isOneMonth)) {
+ BigDecimal startEndOfMonth = new BigDecimal(cycleResults.get("startEndOfMonth").toString());
+ BigDecimal endBeginningOfMonth = new BigDecimal(cycleResults.get("endBeginningOfMonth").toString());
+ BigDecimal endMonthDayss = new BigDecimal(endMonthDays);
+ BigDecimal startMonthDayss = new BigDecimal(startMonthDays);
+ BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
+ feeTotalPrice = monthPrice.divide(startMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(startEndOfMonth).add(monthPrice.divide(endMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(endBeginningOfMonth)).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ //涓嶈法鏈堜唤 涓嶈冻涓�鏈� (鍗曚环*闈㈢Н+闄勫姞璐�/寮�濮嬫湀浠芥�诲ぉ鏁�)*瀹為檯澶╂暟
+ if (months == 0 && days > 0 && "false".equals(isOneMonth)) {
+ BigDecimal cycle = new BigDecimal(days);
+ BigDecimal startMonthDayss = new BigDecimal(startMonthDays);
+ BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
+ feeTotalPrice = monthPrice.divide(startMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+
}
} else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getRoomArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("1101".equals(computingFormula)) { // 绉熼噾
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ }else if ("1102".equals(computingFormula)) { // 绉熼噾
+ BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
+ if (!StringUtil.isEmpty(feeDto.getCycle())) {
+ BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("4004".equals(computingFormula)) { //鍔ㄦ�佽垂鐢�
feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("5005".equals(computingFormula)) { //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -976,11 +1061,11 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else if ("6006".equals(computingFormula)) {
@@ -988,20 +1073,20 @@
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
feePrice = computeRoomCustomizeFormula(feeDto, roomDto);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("8008".equals(computingFormula)) { //鎵嬪姩鍔ㄦ�佽垂鐢�
feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("9009".equals(computingFormula)) { //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1014,10 +1099,10 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else {
@@ -1043,41 +1128,48 @@
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(parkingSpaceDtos.get(0).getArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getRoomArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("1101".equals(computingFormula)) { // 绉熼噾
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
- } else if ("4004".equals(computingFormula)) {
+ } else if ("1102".equals(computingFormula)) { // 绉熼噾
+ BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
+ if (!StringUtil.isEmpty(feeDto.getCycle())) {
+ BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ }else if ("4004".equals(computingFormula)) {
feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1090,10 +1182,10 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else if ("6006".equals(computingFormula)) {
@@ -1101,13 +1193,13 @@
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
feePrice = computeCarCustomizeFormula(feeDto, ownerCarDtos.get(0));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("9009".equals(computingFormula)) { //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1120,10 +1212,10 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else {
@@ -1147,43 +1239,50 @@
}
feeDto.setBuiltUpArea(builtUpArea.doubleValue() + "");
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
//feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
// BigDecimal roomDount = new BigDecimal(contractRoomDtos.size());
// additionalAmount = additionalAmount.multiply(roomDount);
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getRoomArea()));
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("1101".equals(computingFormula)) { // 绉熼噾
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
- feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
+ }
+ }else if ("1102".equals(computingFormula)) { // 绉熼噾
+ BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+ feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_UP);
+ if (!StringUtil.isEmpty(feeDto.getCycle())) {
+ BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+ feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("4004".equals(computingFormula)) { //鍔ㄦ�佽垂鐢�
feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("5005".equals(computingFormula)) { //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1196,10 +1295,10 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else if ("6006".equals(computingFormula)) {
@@ -1207,20 +1306,20 @@
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
feePrice = computeContractCustomizeFormula(feeDto, contractRoomDtos);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("8008".equals(computingFormula)) { //鎵嬪姩鍔ㄦ�佽垂鐢�
feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
BigDecimal amount = new BigDecimal(feeDto.getAmount());
- feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
} else if ("9009".equals(computingFormula)) { //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1233,10 +1332,10 @@
BigDecimal sub = curDegree.subtract(preDegree);
feePrice = sub.multiply(squarePrice)
.add(additionalAmount)
- .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ .setScale(2, BigDecimal.ROUND_HALF_UP);
if (!StringUtil.isEmpty(feeDto.getCycle())) {
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
- feeTotalPrice = sub.multiply(squarePrice).add(additionalAmount).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+ feeTotalPrice = sub.multiply(squarePrice).add(additionalAmount).multiply(cycle1).setScale(3, BigDecimal.ROUND_HALF_UP);
}
}
} else {
@@ -1244,7 +1343,7 @@
}
}
- feePrice.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+ feePrice.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
feeAmount.put("feePrice", feePrice);
feeAmount.put("feeTotalPrice", feeTotalPrice);
return feeAmount;
@@ -1404,6 +1503,7 @@
return targetEndDateAndOweMonth;
}
//褰撳墠璐圭敤涓轰竴娆℃�ц垂鐢�
+ Date maxEndTime = feeDto.getConfigEndTime();
if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
//鍏堝彇 deadlineTime
if (feeDto.getDeadlineTime() != null) {
@@ -1411,12 +1511,49 @@
} else if (!StringUtil.isEmpty(feeDto.getCurDegrees())) {
targetEndDate = feeDto.getCurReadingTime();
} else if (feeDto.getImportFeeEndTime() == null) {
- targetEndDate = feeDto.getConfigEndTime();
+ targetEndDate = maxEndTime;
} else {
targetEndDate = feeDto.getImportFeeEndTime();
}
//鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
oweMonth = 1.0;
+ }else if(FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())){
+ if(feeDto.getDeadlineTime() != null) {
+ maxEndTime = feeDto.getDeadlineTime();
+ }
+ Date billEndTime = DateUtil.getCurrentDate();
+ //寤鸿处鏃堕棿
+ Date startDate = feeDto.getStartTime();
+ //璁¤垂璧峰鏃堕棿
+ Date endDate = feeDto.getEndTime();
+ //缂磋垂鍛ㄦ湡
+ long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
+ // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂� = 鏈堜唤
+ double mulMonth = 0.0;
+ mulMonth = dayCompare(startDate, billEndTime);
+
+ // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
+ double round = 0.0;
+ if ("1200".equals(feeDto.getPaymentCd())) { // 1200棰勪粯璐�
+ round = Math.floor(mulMonth / paymentCycle) + 1;
+ } else { //2100鍚庝粯璐�
+ round = Math.floor(mulMonth / paymentCycle);
+ }
+ // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
+ targetEndDate = getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+ //璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂� 璐圭敤蹇粨鏉熶簡 鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
+ if (maxEndTime.getTime() < targetEndDate.getTime()) {
+ targetEndDate = maxEndTime;
+ }
+ //璇存槑娆犺垂
+ if (endDate.getTime() < targetEndDate.getTime()) {
+ // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
+ oweMonth = dayCompare(endDate, targetEndDate);
+ }
+
+ if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) {
+ targetEndDate = feeDto.getEndTime();
+ }
} else { //鍛ㄦ湡鎬ц垂鐢�
//褰撳墠鏃堕棿
Date billEndTime = DateUtil.getCurrentDate();
@@ -1440,8 +1577,8 @@
// 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
targetEndDate = getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
//璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂� 璐圭敤蹇粨鏉熶簡 鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
- if (feeDto.getConfigEndTime().getTime() < targetEndDate.getTime()) {
- targetEndDate = feeDto.getConfigEndTime();
+ if (maxEndTime.getTime() < targetEndDate.getTime()) {
+ targetEndDate = maxEndTime;
}
//璇存槑娆犺垂
if (endDate.getTime() < targetEndDate.getTime()) {
@@ -1535,11 +1672,10 @@
}
- public Map getOwnerPhoneFee(Map feeAmount){
- if(Environment.testEnv()){
- feeAmount.put("feePrice",new BigDecimal("0.01"));
- feeAmount.put("feeTotalPrice", new BigDecimal("0.01"));
- }
+ //鎵嬫満绔即璐瑰鐞�
+ public Map getOwnerPhoneFee(Map feeAmount) {
+ feeAmount.put("feePrice", new BigDecimal(1.00 / 100));
+ feeAmount.put("feeTotalPrice", new BigDecimal(1.00 / 100));
return feeAmount;
}
@@ -1604,20 +1740,16 @@
}
- public static void main(String[] args) {
- ComputeFeeSMOImpl computeFeeSMO = new ComputeFeeSMOImpl();
- try {
- double month = computeFeeSMO.dayCompare(
- DateUtil.getDateFromString("2021-09-30 14:20:02", DateUtil.DATE_FORMATE_STRING_A),
- DateUtil.getDateFromString("2021-11-03 14:20:02", DateUtil.DATE_FORMATE_STRING_A)
- );
- System.out.println(Math.ceil(month));
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
-
// public static void main(String[] args) {
+// BigDecimal squarePrice = new BigDecimal(Double.parseDouble("4.50"));
+// BigDecimal builtUpArea = new BigDecimal(Double.parseDouble("52.69"));
+// BigDecimal additionalAmount = new BigDecimal(Double.parseDouble("0"));
+// BigDecimal cycle = new BigDecimal(Double.parseDouble("3"));
+// BigDecimal feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_DOWN);
+// System.out.println(feeTotalPrice.doubleValue());
+// }
+
+ // public static void main(String[] args) {
// ComputeFeeSMOImpl computeFeeSMO = new ComputeFeeSMOImpl();
// try {
// Date startTime = DateUtil.getDateFromString("2020-12-31 00:00:00", DateUtil.DATE_FORMATE_STRING_A);
@@ -1630,4 +1762,216 @@
// e.printStackTrace();
// }
// }
+ static int[] getDiff(LocalDate start, LocalDate end) {
+
+ if (!start.isBefore(end)) {
+ throw new IllegalArgumentException("Start must not be before end.");
+ }
+
+ int year1 = start.getYear();
+ int month1 = start.getMonthValue();
+ int day1 = start.getDayOfMonth();
+
+ int year2 = end.getYear();
+ int month2 = end.getMonthValue();
+ int day2 = end.getDayOfMonth();
+
+ int yearDiff = year2 - year1; // yearDiff >= 0
+ int monthDiff = month2 - month1;
+
+ int dayDiff = day2 - day1;
+
+ if (dayDiff < 0) {
+ LocalDate endMinusOneMonth = end.minusMonths(1); // end 鐨勪笂涓�涓湀
+ int monthDays = endMinusOneMonth.lengthOfMonth(); // 璇ユ湀鐨勫ぉ鏁�
+
+ dayDiff += monthDays; // 鐢ㄤ笂涓�涓湀鐨勫ぉ鏁拌ˉ涓婅繖涓湀宸帀鐨勬棩瀛�
+
+ if (monthDiff > 0) { // eg. start is 2018-04-03, end is 2018-08-01
+ monthDiff--;
+
+ } else { // eg. start is 2018-04-03, end is 2019-02-01
+ monthDiff += 11;
+ yearDiff--;
+
+ }
+ }
+
+ int[] diff = new int[2];
+
+ diff[0] = yearDiff * 12 + monthDiff;
+ diff[1] = dayDiff;
+
+ return diff;
+ }
+
+ /**
+ * 璁$畻涓や釜鏃ユ湡鐨勬椂闂村樊
+ *
+ * @param startDate
+ * @param endDate
+ * @return
+ */
+ public Map<String, Object> dateDiff(Date startDate, String endDate) {
+ Map<String, Object> cycle = new HashMap<>();
+
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date endDates = null;
+ try {
+ endDates = format.parse(endDate);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(endDates);
+ calendar.add(calendar.DATE, 1);
+ Date date = calendar.getTime();
+ LocalDate end = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ int[] diff = getDiff(start, end);
+ cycle.put("months", diff[0]);//鍑犱釜鏈�
+ cycle.put("days", diff[1]);//鍑犲ぉ
+ String startDateString = format.format(startDate);
+ String endDateString = format.format(endDates);
+ cycle.put("startMonthDays", getDayOfMonth(startDateString));//寮�濮嬫湀浠藉ぉ鏁�
+ cycle.put("endMonthDays", getDayOfMonth(endDateString));//缁撴潫鏈堜唤澶╂暟
+ cycle.put("isOneMonth", false);// false 涓嶈法鏈� true鏈堜唤
+ if (diff[0] == 0) {
+ //鍒ゆ柇鏄惁鍚屼竴涓湀
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+ String date1 = sdf.format(startDate);
+ String date2 = sdf.format(endDates);
+ if (!date1.equals(date2)) {
+ cycle.put("isOneMonth", true);
+ //璁$畻澶告湀鍒嗕袱涓湀鍒嗗埆鏄灏戝ぉ
+ SimpleDateFormat sdfday = new SimpleDateFormat("dd");
+ Integer startDate1 = Integer.valueOf(sdfday.format(startDate));
+ String endDates2 = sdfday.format(endDates);
+ cycle.put("startEndOfMonth", getDayOfMonth(startDateString) - startDate1 + 1);//寮�濮嬫湀浠藉ぉ鏁�
+ cycle.put("endBeginningOfMonth", Integer.valueOf(endDates2));//缁撴潫鏈堜唤澶╂暟
+ }
+ }
+ return cycle;
+
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鍐呯殑澶╂暟
+ *
+ * @param dateStr
+ * @return
+ */
+ public int getDayOfMonth(String dateStr) {
+ int year = Integer.parseInt(dateStr.substring(0, 4));
+ int month = Integer.parseInt(dateStr.substring(5, 7));
+ Calendar c = Calendar.getInstance();
+ c.set(year, month, 0); //杈撳叆绫诲瀷涓篿nt绫诲瀷
+ return c.get(Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ *
+ * @param feeDto
+ * @param cycle
+ */
+ public void dealRentRateCycle(FeeDto feeDto,double cycle){
+ Date endTime = feeDto.getEndTime();
+ Date date = getTargetEndTime(cycle,endTime);
+ feeDto.setDeadlineTime(date);
+ dealRentRate(feeDto);
+
+ }
+
+ /**
+ * 绉熼噾澶勭悊
+ *
+ * @param feeDto
+ */
+ public void dealRentRate(FeeDto feeDto) {
+ if (!FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeDto.getComputingFormula())) {
+ return;
+ }
+
+ //鏌ヨ閫掑淇℃伅
+ FeeAttrDto feeAttrDto = new FeeAttrDto();
+ feeAttrDto.setFeeId(feeDto.getFeeId());
+ feeAttrDto.setCommunityId(feeDto.getCommunityId());
+ List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
+
+ if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+ return;
+ }
+ int rateCycle = 0;
+ double rate = 0.0;
+ Date rateStartTime = null;
+ try {
+ for (FeeAttrDto tmpFeeAttrDto : feeAttrDtos) {
+ if (FeeAttrDto.SPEC_CD_RATE.equals(tmpFeeAttrDto.getSpecCd())) {
+ feeDto.setRate(tmpFeeAttrDto.getValue());
+ rate = Double.parseDouble(tmpFeeAttrDto.getValue());
+ }
+ if (FeeAttrDto.SPEC_CD_RATE_CYCLE.equals(tmpFeeAttrDto.getSpecCd())) {
+ feeDto.setRateCycle(tmpFeeAttrDto.getValue());
+ rateCycle = Integer.parseInt(tmpFeeAttrDto.getValue());
+ }
+ if (FeeAttrDto.SPEC_CD_RATE_START_TIME.equals(tmpFeeAttrDto.getSpecCd())) {
+ feeDto.setRateStartTime(tmpFeeAttrDto.getValue());
+ rateStartTime = DateUtil.getDateFromString(tmpFeeAttrDto.getValue(), DateUtil.DATE_FORMATE_STRING_B);
+ }
+ }
+ } catch (Exception e) {
+ logger.error("绉熼噾閫掑寮傚父", e);
+ return;
+ }
+
+ if (!FeeDto.STATE_DOING.equals(feeDto.getState())) {
+ return;
+ }
+
+ if (rateCycle == 0 || rate == 0) {
+ return;
+ }
+
+ if (feeDto.getDeadlineTime().getTime() <= rateStartTime.getTime()) {
+ return;
+ }
+
+ BigDecimal oweAmountDec = new BigDecimal(0);
+ //璁$畻 璁¤垂璧峰鏃堕棿 鍒� rateStartTime 鏃剁殑璐圭敤
+ double curOweMonth = 0;
+ BigDecimal curFeePrice = new BigDecimal(feeDto.getFeePrice());
+ if (feeDto.getEndTime().getTime() < rateStartTime.getTime()) {
+ curOweMonth = dayCompare(feeDto.getEndTime(), rateStartTime);
+ oweAmountDec = curFeePrice.multiply(new BigDecimal(curOweMonth)).setScale(2, BigDecimal.ROUND_HALF_UP);
+ }
+
+ curOweMonth = dayCompare(rateStartTime, feeDto.getDeadlineTime());
+
+ double maxCycle = Math.floor(curOweMonth / rateCycle);
+
+ //鍩哄噯
+ BigDecimal firstAmount = curFeePrice.multiply(new BigDecimal(rateCycle));
+ BigDecimal preCycleAmount = firstAmount;
+ BigDecimal rateDec = null; //閫掑鍛ㄦ湡鎵�鏀惰垂鐢�
+ BigDecimal lastRateAmountDec = null;
+ double curCycle = 0;
+ for (int cycleIndex = 0; cycleIndex < maxCycle; maxCycle++) {
+ rateDec = preCycleAmount.multiply(new BigDecimal(rate)).setScale(2, BigDecimal.ROUND_HALF_UP);
+ //澧為暱鍛ㄦ湡鐨勫�嶆暟
+ curCycle = (cycleIndex + 1) * rateCycle;
+ if (curCycle > curOweMonth) {
+ rateDec = new BigDecimal(curOweMonth / rateCycle - Math.ceil(curOweMonth / rateCycle)).multiply(rateDec).setScale(2, BigDecimal.ROUND_HALF_UP);
+ lastRateAmountDec = new BigDecimal(curOweMonth / rateCycle - Math.ceil(curOweMonth / rateCycle)).multiply(preCycleAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+ firstAmount = firstAmount.add(rateDec).add(lastRateAmountDec);
+ continue;
+ }
+ firstAmount = firstAmount.add(rateDec).add(preCycleAmount);
+ preCycleAmount = preCycleAmount.add(rateDec);
+ }
+
+ firstAmount = firstAmount.add(oweAmountDec);
+ feeDto.setAmountOwed(firstAmount.doubleValue() + "");
+ feeDto.setFeeTotalPrice(firstAmount.doubleValue());
+ }
}
+
--
Gitblit v1.8.0