From 7958f1dddb8a7f4e70d232b07a7703955ecedae0 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期六, 26 八月 2023 12:45:33 +0800
Subject: [PATCH] 优化diamante

---
 service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java |  271 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 165 insertions(+), 106 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..f05576f 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
@@ -1,28 +1,27 @@
 package com.java110.fee.feeMonth;
 
 import com.alibaba.fastjson.JSONObject;
-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.po.payFeeDetailMonth.PayFeeDetailMonthPo;
+import com.java110.dto.payFee.PayFeeMonthOwnerDto;
+import com.java110.intf.fee.*;
+import com.java110.po.payFee.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.*;
 
 /**
  * 璐圭敤绂绘暎涓烘湀 瀹炵幇绫�
+ * V2
+ * <p>
+ * case 1 瀹氭椂浠诲姟 璋冪敤
  */
 @Service
 public class PayFeeMonthImpl implements IPayFeeMonth {
@@ -38,6 +37,9 @@
     private IPayFeeDetailMonthInnerServiceSMO payFeeDetailMonthInnerServiceSMOImpl;
 
     @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
     private IPayFeeMonthHelp payFeeMonthHelp;
 
     @Autowired
@@ -45,107 +47,19 @@
 
     public static final int DEFAULT_DEAL_COUNT = 200;
 
-
     /**
-     * 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
-     * @param feeId
+     * 1.0 瀹氭椂浠诲姟绂绘暎 灏忓尯鏁版嵁 绂绘暎涓� 鏈堟暟鎹�
+     *
      * @param communityId
      */
-    @Override
-    public void doGeneratorOrRefreshFeeMonth(String feeId, String communityId) {
-
-        // todo 鏌ヨ璐圭敤
-        FeeDto feeDto = new FeeDto();
-        feeDto.setCommunityId(communityId);
-        feeDto.setFeeId(feeId);
-        List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
-
-        Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
-
-        doGeneratorOrRefreshFeeMonth(tmpFeeDtos.get(0), communityId);
-    }
-
-    public void doGeneratorOrRefreshFeeMonth(FeeDto feeDto, String communityId) {
-
-        //todo 璁$畻姣忔湀鍗曚环
-        Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
-
-        // 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
-        PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
-
-
-        //todo 妫�鏌ヨ垂鐢ㄦ槸鍚︾鏁h繃锛屽鏋滄病鏈夌鏁h繃锛屽厛绂绘暎 start_time 鍒� end_time 鐨勬暟鎹�
-        ifHasNoMonthData(feeDto,payFeeMonthOwnerDto,feePrice);
-
-    }
-
-
-
-
-    /**
-     * 濡傛灉璐圭敤娌℃湁month 鏁版嵁锛屽垯鐩存帴绂绘暎 start_time 鍒癳nd_time 鏁版嵁
-     * @param feeDto
-     */
-    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;
-
-        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 ;
-        }
-
-        double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, feeDto.getEndTime()));
-
-        if (maxMonth < 1) {
-            return;
-        }
-
-        PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
-        String detailId = "";
-        String discountAmount = "";
-        String receivedAmount = "";
-        List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
-        for (int month = 0; month < maxMonth; month++) {
-            calendar.setTime(startTime);
-            calendar.add(Calendar.MONTH, month);
-            tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
-            tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
-            tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
-            tmpPayFeeDetailMonthPo.setDetailId(detailId);
-            tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
-            tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
-            tmpPayFeeDetailMonthPo.setDiscountAmount(discountAmount);
-            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());
-            payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
-        }
-        payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
-    }
-
+    @Async
     @Override
     public void doGeneratorOrRefreshAllFeeMonth(String communityId) {
+
+        //todo 娓呯悊 pay_fee_detail_month
+        PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+        payFeeDetailMonthPo.setCommunityId(communityId);
+        payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
 
 
         FeeDto feeDto = new FeeDto();
@@ -164,13 +78,158 @@
 
         //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);
         }
 
+
+    }
+
+    /**
+     * 2.0 鐗╀笟缂磋垂鏃剁鏁� 鎶ヨ〃鏁版嵁
+     *
+     * @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, "璐圭敤涓嶅瓨鍦�");
+        feeDto = tmpFeeDtos.get(0);
+        //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 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
+        maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
+    }
+
+    /**
+     * 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
+     *
+     * @param feeId
+     * @param communityId
+     */
+    @Override
+    public void doGeneratorOrRefreshFeeMonth(String feeId, String communityId) {
+
+        // todo 鏌ヨ璐圭敤
+        FeeDto feeDto = new FeeDto();
+        feeDto.setCommunityId(communityId);
+        feeDto.setFeeId(feeId);
+        List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+        Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
+
+        doGeneratorOrRefreshFeeMonth(tmpFeeDtos.get(0), communityId);
+    }
+
+    /**
+     * 鐢熸垚澶氫釜璐圭敤 骞� 绂绘暎鍒版湀
+     *
+     * @param feeIds
+     * @param communityId
+     */
+    @Override
+    @Async
+    public void doGeneratorFeeMonths(List<String> feeIds, String communityId) {
+        for (String feeId : feeIds) {
+            doGeneratorOrRefreshFeeMonth(feeId, communityId);
+        }
+    }
+
+
+    /**
+     * 鍒犻櫎鏈堣垂鐢�
+     *
+     * @param feeId
+     * @param communityId
+     */
+    @Override
+    public void deleteFeeMonth(String feeId, String communityId) {
+
+        PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+        payFeeDetailMonthPo.setFeeId(feeId);
+        payFeeDetailMonthPo.setCommunityId(communityId);
+        payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+    }
+
+    private 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);
+
+
+    }
+
+    /**
+     * 绂绘暎鏈�澶� 绂绘暎鏈堝埌 deadlineTime 鐨勬暟鎹�
+     * <p>
+     * 鏍稿績鏂规硶澶勭悊
+     *
+     * @param feeDto
+     * @param payFeeMonthOwnerDto
+     * @param feePrice
+     */
+    private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
+
+        //todo 澶勭悊宸茬粡浜よ繃璐圭殑璁板綍澶勭悊
+        payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto);
+
+
+        //todo 澶勭悊 endTime 鍒� deadlineTime 鐨勮垂鐢�
+        Date deadlineTime = computeFeeSMOImpl.getDeadlineTime(feeDto);
+        payFeeMonthHelp.waitDispersedOweFee(feeDto, payFeeMonthOwnerDto, feePrice, deadlineTime);
+
+    }
+
+
+    /**
+     * 鍒犻櫎缂磋垂鑼冨洿鍐呯殑鏁版嵁
+     *
+     * @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