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 | 122 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 117 insertions(+), 5 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 6c10a4b..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;
@@ -430,15 +434,15 @@
for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomRent())));
}
- feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
- feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+ 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(builtUpArea.doubleValue() + "");
- feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+ feeReceiptDetailPo.setArea("");
+ feeReceiptDetailPo.setSquarePrice(builtUpArea.doubleValue() + "");
}else if ("4004".equals(computingFormula)) {
} else if ("5005".equals(computingFormula)) {
if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -1514,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();
@@ -1862,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