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 | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 161 insertions(+), 7 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 5393533..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
@@ -20,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;
@@ -64,6 +65,9 @@
@Autowired(required = false)
private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+ @Autowired(required = false)
+ private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
@Autowired(required = false)
private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
@@ -283,6 +287,9 @@
} 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())) {
@@ -318,7 +325,10 @@
} 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();
@@ -344,6 +354,9 @@
feeReceiptDetailPo.setArea("");
feeReceiptDetailPo.setSquarePrice("0");
} 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)) {
@@ -421,9 +434,16 @@
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 {
@@ -821,6 +841,9 @@
} else if ("1101".equals(computingFormula)) { // 绉熼噾
BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
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)) {
@@ -873,7 +896,9 @@
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())) {
@@ -1011,6 +1036,13 @@
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
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())) {
@@ -1125,7 +1157,14 @@
BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
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());
@@ -1225,6 +1264,13 @@
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_UP);
+ if (!StringUtil.isEmpty(feeDto.getCycle())) {
+ BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+ 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())) {
@@ -1472,7 +1518,9 @@
//鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
oweMonth = 1.0;
}else if(FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())){
- maxEndTime = feeDto.getDeadlineTime();
+ if(feeDto.getDeadlineTime() != null) {
+ maxEndTime = feeDto.getDeadlineTime();
+ }
Date billEndTime = DateUtil.getCurrentDate();
//寤鸿处鏃堕棿
Date startDate = feeDto.getStartTime();
@@ -1820,4 +1868,110 @@
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