From 0e0e1f080d4a986ca75cde7cf5d23b2f8539fb10 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期三, 17 五月 2023 12:25:35 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
---
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java | 177 +++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 136 insertions(+), 41 deletions(-)
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
index ea64b65..8c3cc54 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
@@ -4,21 +4,19 @@
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.core.smo.IComputeFeeSMO;
+import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
import com.java110.dto.payFeeDetailMonth.PayFeeMonthOwnerDto;
-import com.java110.dto.report.ReportRoomDto;
-import com.java110.intf.fee.IFeeInnerServiceSMO;
-import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
-import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
+import com.java110.intf.fee.*;
import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
-import java.math.BigDecimal;
import java.util.*;
/**
@@ -38,6 +36,9 @@
private IPayFeeDetailMonthInnerServiceSMO payFeeDetailMonthInnerServiceSMOImpl;
@Autowired
+ private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+ @Autowired
private IPayFeeMonthHelp payFeeMonthHelp;
@Autowired
@@ -48,6 +49,7 @@
/**
* 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
+ *
* @param feeId
* @param communityId
*/
@@ -67,83 +69,108 @@
public void doGeneratorOrRefreshFeeMonth(FeeDto feeDto, String communityId) {
+
//todo 璁$畻姣忔湀鍗曚环
Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
- // 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
+ // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
+ //todo 绂绘暎start_time 鎴栬�� pay_fee_detail_month 鏈�澶ф湀浠� 鍒� deadlineTime 鐨勬暟鎹�
+ maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
- //todo 妫�鏌ヨ垂鐢ㄦ槸鍚︾鏁h繃锛屽鏋滄病鏈夌鏁h繃锛屽厛绂绘暎 start_time 鍒� end_time 鐨勬暟鎹�
- ifHasNoMonthData(feeDto,payFeeMonthOwnerDto,feePrice);
}
-
-
-
/**
- * 濡傛灉璐圭敤娌℃湁month 鏁版嵁锛屽垯鐩存帴绂绘暎 start_time 鍒癳nd_time 鏁版嵁
+ * 绂绘暎鏈�澶� 绂绘暎鏈堝埌 deadlineTime 鐨勬暟鎹�
+ *
* @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param feePrice
*/
- private void ifHasNoMonthData(FeeDto feeDto,PayFeeMonthOwnerDto payFeeMonthOwnerDto,Double feePrice) {
-
- //todo 鍒嗘瀽寤鸿处鏃堕棿 鍜屽紑濮嬫椂闂�
- Date startTime = feeDto.getStartTime();
- if(startTime == null){
- throw new IllegalArgumentException("鏁版嵁閿欒锛屾湭鍖呭惈寮�濮嬫椂闂�");
- }
-
- Calendar calendar = Calendar.getInstance();
- int startYear = calendar.get(Calendar.YEAR);
- int startMonth = calendar.get(Calendar.MONTH)+1;
-
+ private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
PayFeeDetailMonthDto payFeeDetailMonthDto = new PayFeeDetailMonthDto();
payFeeDetailMonthDto.setCommunityId(feeDto.getCommunityId());
payFeeDetailMonthDto.setFeeId(feeDto.getFeeId());
- payFeeDetailMonthDto.setDetailYear(startYear+"");
- payFeeDetailMonthDto.setDetailMonth(startMonth+"");
- int count = payFeeDetailMonthInnerServiceSMOImpl.queryPayFeeDetailMonthsCount(payFeeDetailMonthDto);
-
- // todo 璇存槑杩欎釜璐圭敤宸茬粡绗竴娆$鏁h繃
- if(count > 0){
- return ;
+ List<PayFeeDetailMonthDto> payFeeDetailMonthDtos = payFeeDetailMonthInnerServiceSMOImpl.queryPayFeeDetailMaxMonths(payFeeDetailMonthDto);
+ Date startTime = null;
+ Date deadlineTime = computeFeeSMOImpl.getDeadlineTime(feeDto);
+ if (payFeeDetailMonthDtos == null || payFeeDetailMonthDtos.size() < 1) {
+ startTime = feeDto.getStartTime();
+ } else {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(DateUtil.getDateFromStringA(payFeeDetailMonthDtos.get(0).getCurMonthTime()));
+ calendar.add(Calendar.MONTH, 1);
+ startTime = calendar.getTime();
}
- double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, feeDto.getEndTime()));
+ // todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
+ doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, startTime, deadlineTime);
+
+ }
+
+ private void doGeneratorTimeMonthData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date startTime, Date endTime) {
+ double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, endTime));
if (maxMonth < 1) {
return;
}
+ //todo 鏌ヨ 缂磋垂鏄庣粏
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setCommunityId(feeDto.getCommunityId());
+ feeDetailDto.setFeeId(feeDto.getFeeId());
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+ //todo 鐢熸垚 鏈堢鏁f暟鎹�
PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
- String detailId = "";
- String discountAmount = "";
- String receivedAmount = "";
List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
+ double receivableAmount = 0.0;
for (int month = 0; month < maxMonth; month++) {
+ Calendar calendar = Calendar.getInstance();
calendar.setTime(startTime);
calendar.add(Calendar.MONTH, month);
+ //calendar.set(Calendar.DAY_OF_MONTH, 1);
tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
- tmpPayFeeDetailMonthPo.setDetailId(detailId);
- tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
+ tmpPayFeeDetailMonthPo.setDetailId(payFeeMonthHelp.getFeeDetailId(feeDetailDtos, calendar.getTime()));
tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
- tmpPayFeeDetailMonthPo.setDiscountAmount(discountAmount);
+ tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
+ receivableAmount = payFeeMonthHelp.getReceivableAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto);
+ //todo 搴旀敹灏忎簬绛変簬0 涓嶇粺璁�
+ if(receivableAmount <=0){
+ continue;
+ }
+ tmpPayFeeDetailMonthPo.setReceivableAmount( receivableAmount + "");
+ tmpPayFeeDetailMonthPo.setReceivedAmount(payFeeMonthHelp.getReceivedAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto) + "");
+ tmpPayFeeDetailMonthPo.setDiscountAmount(
+ payFeeMonthHelp.getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
+ Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
+ calendar.getTime(), feeDto) + "");
tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
- tmpPayFeeDetailMonthPo.setReceivableAmount(feePrice + "");
- tmpPayFeeDetailMonthPo.setReceivedAmount(receivedAmount);
tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
tmpPayFeeDetailMonthPo.setOwnerId(payFeeMonthOwnerDto.getOwnerId());
tmpPayFeeDetailMonthPo.setOwnerName(payFeeMonthOwnerDto.getOwnerName());
+ tmpPayFeeDetailMonthPo.setLink(payFeeMonthOwnerDto.getLink());
+ tmpPayFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+ tmpPayFeeDetailMonthPo.setPayFeeTime(payFeeMonthHelp.getFeeFeeTime(feeDetailDtos, tmpPayFeeDetailMonthPo.getDetailId()));
+ tmpPayFeeDetailMonthPo.setState("W"); // todo 杩欓噷鏆傛椂鍐欐锛岀洰鍓嶇敤涓嶅埌锛岀畻鏄鐣欏瓧娈�
+ tmpPayFeeDetailMonthPo.setFeeName(feeDto.getFeeName());
+ tmpPayFeeDetailMonthPo.setConfigId(feeDto.getConfigId());
payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
}
payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
}
+ /**
+ * 灏忓尯鏁版嵁 绂绘暎涓� 鏈堟暟鎹�
+ *
+ * @param communityId
+ */
+ @Async
@Override
public void doGeneratorOrRefreshAllFeeMonth(String communityId) {
@@ -164,13 +191,81 @@
//todo 姣忔鎸�200鏉″鐞�
for (int pageIndex = 0; pageIndex < page; pageIndex++) {
- feeDto.setPage(pageIndex * max);
+ feeDto.setPage(pageIndex + 1);
feeDto.setRow(max);
List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
// 绂绘暎璐圭敤
doTmpFeeDtoMonths(communityId, tmpFeeDtos);
}
+
+ }
+
+ /**
+ * 鐗╀笟缂磋垂鏃剁鏁� 鎶ヨ〃鏁版嵁
+ *
+ * @param feeId
+ * @param detailId
+ * @param communityId
+ */
+ @Async
+ @Override
+ public void payFeeDetailRefreshFeeMonth(String feeId, String detailId, String communityId) {
+ // todo 鏌ヨ璐圭敤
+ FeeDto feeDto = new FeeDto();
+ feeDto.setCommunityId(communityId);
+ feeDto.setFeeId(feeId);
+ List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+ Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
+
+ //todo 鏌ヨ 缂磋垂鏄庣粏
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setCommunityId(feeDto.getCommunityId());
+ feeDetailDto.setFeeId(feeDto.getFeeId());
+ feeDetailDto.setDetailId(detailId);
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+
+ Assert.listOnlyOne(feeDetailDtos, "缂磋垂璁板綍涓嶅瓨鍦�");
+
+ //todo 璁$畻姣忔湀鍗曚环
+ Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
+
+ // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
+ PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
+
+ // todo 鍒犻櫎缂磋垂鏃堕棿鑼冨洿鍐呯殑鏁版嵁
+ doDeletePayFeeDetailInMonth(feeDto, feeDetailDtos.get(0));
+
+ // todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
+ doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, feeDetailDtos.get(0).getStartTime(), feeDetailDtos.get(0).getEndTime());
+ }
+
+ @Override
+ public void deleteFeeMonth(String feeId, String communityId) {
+
+ PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ payFeeDetailMonthPo.setFeeId(feeId);
+ payFeeDetailMonthPo.setCommunityId(communityId);
+ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+ }
+
+ /**
+ * 鍒犻櫎缂磋垂鑼冨洿鍐呯殑鏁版嵁
+ *
+ * @param feeDto
+ * @param feeDetailDto
+ */
+ private void doDeletePayFeeDetailInMonth(FeeDto feeDto, FeeDetailDto feeDetailDto) {
+
+ PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ payFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(feeDetailDto.getStartTime());
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
+ payFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+ payFeeDetailMonthPo.setCurMonthEndTime(DateUtil.getFormatTimeStringB(feeDetailDto.getEndTime()));
+ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
}
private void doTmpFeeDtoMonths(String communityId, List<FeeDto> tmpFeeDtos) {
--
Gitblit v1.8.0