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