From 0fea532b07be89978343cb4aede3693af99f5656 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期二, 25 七月 2023 23:04:41 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
---
service-job/src/main/java/com/java110/job/adapt/fee/asyn/impl/PayFeeDetailToMonthIImpl.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 152 insertions(+), 22 deletions(-)
diff --git a/service-job/src/main/java/com/java110/job/adapt/fee/asyn/impl/PayFeeDetailToMonthIImpl.java b/service-job/src/main/java/com/java110/job/adapt/fee/asyn/impl/PayFeeDetailToMonthIImpl.java
index 0d09f44..b423516 100644
--- a/service-job/src/main/java/com/java110/job/adapt/fee/asyn/impl/PayFeeDetailToMonthIImpl.java
+++ b/service-job/src/main/java/com/java110/job/adapt/fee/asyn/impl/PayFeeDetailToMonthIImpl.java
@@ -3,13 +3,20 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.smo.IComputeFeeSMO;
+import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDto;
-import com.java110.entity.order.Business;
+import com.java110.dto.owner.OwnerRoomRelDto;
+import com.java110.dto.payFee.PayFeeDetailRefreshFeeMonthDto;
+import com.java110.dto.system.Business;
import com.java110.intf.fee.IFeeInnerServiceSMO;
import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeMonthInnerServiceSMO;
+import com.java110.intf.report.IGeneratorOweFeeInnerServiceSMO;
+import com.java110.intf.user.IOwnerRoomRelV1InnerServiceSMO;
import com.java110.job.adapt.fee.asyn.IPayFeeDetailToMonth;
import com.java110.po.fee.PayFeeDetailPo;
-import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
+import com.java110.po.owner.OwnerRoomRelPo;
+import com.java110.po.payFee.PayFeeDetailMonthPo;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
@@ -18,15 +25,14 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+/**
+ * 涓昏鐢ㄤ簬澶勭悊璐圭敤绂绘暎鏈� 閫傞厤鍣�
+ * add by wuxw 2023-05-11
+ */
@Service
public class PayFeeDetailToMonthIImpl implements IPayFeeDetailToMonth {
-
@Autowired
private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
@@ -34,9 +40,17 @@
@Autowired
private IComputeFeeSMO computeFeeSMOImpl;
-
@Autowired
private IPayFeeDetailMonthInnerServiceSMO payFeeDetailMonthInnerServiceSMOImpl;
+
+ @Autowired
+ private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IGeneratorOweFeeInnerServiceSMO generatorOweFeeInnerServiceSMOImpl;
+
+ @Autowired
+ private IPayFeeMonthInnerServiceSMO payFeeMonthInnerServiceSMOImpl;
@Override
@Async
@@ -50,22 +64,91 @@
Assert.listOnlyOne(feeDtos, "鏈煡璇㈠埌璐圭敤淇℃伅");
feeDto = feeDtos.get(0);
- Date startTime = null;
- Date endTime = null;
- try {
- startTime = DateUtil.getDateFromString(businessPayFeeDetail.getString("startTime"), DateUtil.DATE_FORMATE_STRING_A);
- endTime = DateUtil.getDateFromString(businessPayFeeDetail.getString("endTime"), DateUtil.DATE_FORMATE_STRING_A);
- } catch (ParseException e) {
- throw new IllegalArgumentException("鏃堕棿鏍煎紡閿欒");
+ Date endTime = DateUtil.getDateFromStringB(businessPayFeeDetail.getString("endTime"));
+
+ //todo 杞崲涓烘湀锛堜紭鍖栫増锛�
+ toPayFeeDetailMonth(businessPayFeeDetail, feeDto);
+
+ // 杞崲涓烘湀
+ //toMonth(businessPayFeeDetail, feeDto, startTime, endTime, createTime);
+
+ //todo 濡傛灉鏄閲� 鍒欏欢闀挎埧灞嬬鏈�
+ toAddRoomRentTime(feeDtos.get(0), endTime);
+
+ //todo 淇敼娆犺垂
+ toDeleteOweFee(feeDtos.get(0));
+
+ }
+
+ /**
+ * 璋冪敤fee 妯″潡 澶勭悊 绂绘暎
+ * @param businessPayFeeDetail
+ * @param feeDto
+ */
+ private void toPayFeeDetailMonth(JSONObject businessPayFeeDetail, FeeDto feeDto) {
+ PayFeeDetailRefreshFeeMonthDto payFeeDetailRefreshFeeMonthDto = new PayFeeDetailRefreshFeeMonthDto();
+ payFeeDetailRefreshFeeMonthDto.setCommunityId(feeDto.getCommunityId());
+ payFeeDetailRefreshFeeMonthDto.setDetailId(businessPayFeeDetail.getString("detailId"));
+ payFeeDetailRefreshFeeMonthDto.setFeeId(feeDto.getFeeId());
+ //todo 璋冪敤璐圭敤妯″潡 澶勭悊
+ payFeeMonthInnerServiceSMOImpl.payFeeDetailRefreshFeeMonth(payFeeDetailRefreshFeeMonthDto);
+ }
+
+ /**
+ * 澶勭悊娆犺垂
+ *
+ * @param feeDto
+ */
+ private void toDeleteOweFee(FeeDto feeDto) {
+ generatorOweFeeInnerServiceSMOImpl.computeOweFee(feeDto);
+ }
+
+ private void toAddRoomRentTime(FeeDto feeDto, Date endTime) {
+
+ //todo 涓嶆槸绉熼噾鐩存帴杩斿洖
+ if (!FeeConfigDto.FEE_TYPE_CD_RENT.equals(feeDto.getFeeTypeCd())) {
+ return;
+ }
+ //todo 涓嶆槸鎴垮眿鐩存帴杩斿洖
+ if (!FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
+ return;
}
- double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, endTime));
+ OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
+ ownerRoomRelDto.setRoomId(feeDto.getPayerObjId());
+ ownerRoomRelDto.setCommunityId(feeDto.getCommunityId());
+ List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelV1InnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+
+ if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) {
+ return;
+ }
+
+ Date rentEndDate = ownerRoomRelDtos.get(0).getEndTime();
+
+ if (endTime.getTime() < rentEndDate.getTime()) {
+ return;
+ }
+
+ OwnerRoomRelPo ownerRoomRelPo = new OwnerRoomRelPo();
+ ownerRoomRelPo.setEndTime(DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_B));
+ ownerRoomRelPo.setRelId(ownerRoomRelDtos.get(0).getRelId());
+
+ ownerRoomRelV1InnerServiceSMOImpl.updateOwnerRoomRel(ownerRoomRelPo);
+ }
+
+ private void toMonth(JSONObject businessPayFeeDetail, FeeDto feeDto, Date startTime, Date endTime, Date createTime) {
+ double maxMonth = 1;
+ if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+ maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, endTime));
+ }
if (maxMonth < 1) {
return;
}
- double feePrice = computeFeeSMOImpl.getFeePrice(feeDto);
+ Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto);
+
+ Double feePrice = Double.parseDouble(feePriceAll.get("feePrice").toString());
BigDecimal totalRecDec = new BigDecimal(businessPayFeeDetail.getDouble("receivedAmount"));
//姣忔湀骞冲潎鍊�
@@ -73,13 +156,21 @@
List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
- PayFeeDetailMonthPo tmpPayFeeDetailMonthPo = null;
- BigDecimal discountAmount = new BigDecimal(0.0);
+
+ commonPropertyCode(businessPayFeeDetail, feeDto, startTime, createTime, maxMonth, feePrice, priRecDec, payFeeDetailMonthPos, calendar);
+
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ }
+
+ private void commonPropertyCode(JSONObject businessPayFeeDetail, FeeDto feeDto, Date startTime, Date createTime, double maxMonth, Double feePrice, BigDecimal priRecDec, List<PayFeeDetailMonthPo> payFeeDetailMonthPos, Calendar calendar) {
+ BigDecimal discountAmount;
+ PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
+
+
for (int month = 0; month < maxMonth; month++) {
calendar.setTime(startTime);
calendar.add(Calendar.MONTH, month);
discountAmount = new BigDecimal(feePrice).subtract(priRecDec).setScale(2, BigDecimal.ROUND_HALF_EVEN);
-
tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
@@ -93,9 +184,48 @@
tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
}
+ }
- payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ private void bailefuPropertyCode(JSONObject businessPayFeeDetail, FeeDto feeDto, Date startTime, Date createTime, double maxMonth, Double feePrice, BigDecimal priRecDec, List<PayFeeDetailMonthPo> payFeeDetailMonthPos, Calendar calendar) {
+ BigDecimal discountAmount;
+ PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
+ Calendar startTimeCal = Calendar.getInstance();
+ startTimeCal.setTime(startTime);
+ startTimeCal.set(Calendar.DAY_OF_MONTH, 1);
+ startTime = startTimeCal.getTime();
+ Calendar createTimeCal = Calendar.getInstance();
+ createTimeCal.setTime(createTime);
+ createTimeCal.set(Calendar.DAY_OF_MONTH, 1);
+ createTime = createTimeCal.getTime();
+
+ BigDecimal oweFee = new BigDecimal(0);
+
+ for (int month = 0; month < maxMonth; month++) {
+ calendar.setTime(startTime);
+ calendar.add(Calendar.MONTH, month);
+ discountAmount = new BigDecimal(feePrice).subtract(priRecDec).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
+ tmpPayFeeDetailMonthPo.setDetailId(businessPayFeeDetail.getString("detailId"));
+ tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
+ tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
+ tmpPayFeeDetailMonthPo.setDiscountAmount(discountAmount.doubleValue() + "");
+ tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
+ tmpPayFeeDetailMonthPo.setReceivableAmount(feePrice + "");
+ if (calendar.getTime().getTime() < createTime.getTime()) {
+ tmpPayFeeDetailMonthPo.setReceivedAmount("0");
+ oweFee = oweFee.add(priRecDec);
+ } else if (calendar.getTime().getTime() == createTime.getTime()) {
+ oweFee = oweFee.add(priRecDec);
+ tmpPayFeeDetailMonthPo.setReceivedAmount(oweFee.doubleValue() + "");
+ } else {
+ tmpPayFeeDetailMonthPo.setReceivedAmount(priRecDec.doubleValue() + "");
+ }
+ tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
+ payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
+ }
}
}
--
Gitblit v1.8.0