From 732f08830fc255e23c8665c0bbe7c298f7a2e36d Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期一, 02 九月 2024 19:19:36 +0800
Subject: [PATCH] 一次性费用合并

---
 service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java |  117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 108 insertions(+), 9 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java b/service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java
index 9313e11..2cd80c5 100755
--- a/service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java
@@ -1,18 +1,21 @@
 package com.java110.fee.bmo.feeReceiptDetail.impl;
 
+import com.java110.dto.fee.FeeDto;
 import com.java110.dto.fee.FeeReceiptDetailDto;
+import com.java110.dto.fee.FeeReceiptDto;
 import com.java110.dto.payFee.PayFeeDetailDiscountDto;
 import com.java110.fee.bmo.feeReceiptDetail.IGetFeeReceiptDetailBMO;
 import com.java110.intf.fee.IFeeReceiptDetailInnerServiceSMO;
 import com.java110.intf.fee.IPayFeeDetailDiscountInnerServiceSMO;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ListUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Service("getFeeReceiptDetailBMOImpl")
 public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
@@ -27,7 +30,7 @@
      * @param feeReceiptDetailDto
      * @return 璁㈠崟鏈嶅姟鑳藉鎺ュ彈鐨勬姤鏂�
      */
-    public ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto) {
+    public ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto, String mergeFee) {
 
 
         int count = feeReceiptDetailInnerServiceSMOImpl.queryFeeReceiptDetailsCount(feeReceiptDetailDto);
@@ -43,6 +46,9 @@
         //todo 璁$畻浼樻儬閲戦
         computeDiscountFee(feeReceiptDetailDtos);
 
+        //todo 鍚堝苟涓�娆℃�ц垂鐢紝鎸夎垂鐢ㄩ」鍚嶇О鍜屽崟浠峰悎骞�
+        feeReceiptDetailDtos = mergeOnceFee(feeReceiptDetailDtos, mergeFee);
+
         ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) feeReceiptDetailDto.getRow()), count, feeReceiptDetailDtos);
 
         ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
@@ -52,12 +58,12 @@
 
     private void computeDiscountFee(List<FeeReceiptDetailDto> feeReceiptDetailDtos) {
 
-        if(feeReceiptDetailDtos == null || feeReceiptDetailDtos.size() < 1){
-            return ;
+        if (feeReceiptDetailDtos == null || feeReceiptDetailDtos.size() < 1) {
+            return;
         }
 
         List<String> detailIds = new ArrayList<>();
-        for(FeeReceiptDetailDto feeReceiptDetailDto:feeReceiptDetailDtos){
+        for (FeeReceiptDetailDto feeReceiptDetailDto : feeReceiptDetailDtos) {
             detailIds.add(feeReceiptDetailDto.getDetailId());
         }
 
@@ -67,9 +73,9 @@
 
         List<PayFeeDetailDiscountDto> payFeeDetailDiscountDtos = payFeeDetailDiscountInnerServiceSMOImpl.computeDiscountFee(payFeeDetailDiscountDto);
 
-        for(FeeReceiptDetailDto feeReceiptDetailDto:feeReceiptDetailDtos){
-            for(PayFeeDetailDiscountDto tmpPayFeeDetailDiscountDto:payFeeDetailDiscountDtos){
-                if(!feeReceiptDetailDto.getDetailId().equals(tmpPayFeeDetailDiscountDto.getDetailId())){
+        for (FeeReceiptDetailDto feeReceiptDetailDto : feeReceiptDetailDtos) {
+            for (PayFeeDetailDiscountDto tmpPayFeeDetailDiscountDto : payFeeDetailDiscountDtos) {
+                if (!feeReceiptDetailDto.getDetailId().equals(tmpPayFeeDetailDiscountDto.getDetailId())) {
                     continue;
                 }
                 feeReceiptDetailDto.setDiscountPrice(tmpPayFeeDetailDiscountDto.getDiscountPrice());
@@ -77,4 +83,97 @@
         }
     }
 
+
+    private List<FeeReceiptDetailDto> mergeOnceFee(List<FeeReceiptDetailDto> feeReceiptDetailDtos, String mergeFee) {
+        if (ListUtil.isNull(feeReceiptDetailDtos)) {
+            return feeReceiptDetailDtos;
+        }
+
+        if (!"ON".equals(mergeFee)) {
+            return feeReceiptDetailDtos;
+        }
+
+
+        //todo cycle fee
+        List<FeeReceiptDetailDto> cycleFeeReceiptDetailDtos = new ArrayList<>();
+        List<FeeReceiptDetailDto> onceFeeReceiptDetailDtos = new ArrayList<>();
+
+        for (FeeReceiptDetailDto feeReceiptDetailDto : feeReceiptDetailDtos) {
+            if (FeeDto.FEE_FLAG_ONCE.equals(feeReceiptDetailDto.getFeeFlag())) {
+                onceFeeReceiptDetailDtos.add(feeReceiptDetailDto);
+                continue;
+            }
+            cycleFeeReceiptDetailDtos.add(feeReceiptDetailDto);
+        }
+        // todo not exists once fee
+        if (ListUtil.isNull(onceFeeReceiptDetailDtos)) {
+            return feeReceiptDetailDtos;
+        }
+
+        //todo order by endTime asc
+        Collections.sort(onceFeeReceiptDetailDtos, new Comparator<FeeReceiptDetailDto>() {
+            @Override
+            public int compare(FeeReceiptDetailDto receiptDto1, FeeReceiptDetailDto receiptDto2) {
+                Date endTime1 = DateUtil.getDateFromStringA(receiptDto1.getEndTime());
+                Date endTime2 = DateUtil.getDateFromStringA(receiptDto2.getEndTime());
+                return Long.compare(endTime1.getTime(), endTime2.getTime());
+            }
+        });
+        List<FeeReceiptDetailDto> nOnceFeeReceiptDetailDtos = new ArrayList<>();
+
+        for (FeeReceiptDetailDto feeReceiptDetailDto : onceFeeReceiptDetailDtos) {
+            doMergeOnceFee(nOnceFeeReceiptDetailDtos, feeReceiptDetailDto);
+        }
+
+
+        cycleFeeReceiptDetailDtos.addAll(nOnceFeeReceiptDetailDtos);
+
+        return cycleFeeReceiptDetailDtos;
+
+    }
+
+    /**
+     * 鍚堝苟涓�娆℃�ц垂鐢�
+     * @param nOnceFeeReceiptDetailDtos
+     * @param feeReceiptDetailDto
+     */
+    private void doMergeOnceFee(List<FeeReceiptDetailDto> nOnceFeeReceiptDetailDtos, FeeReceiptDetailDto feeReceiptDetailDto) {
+        if (ListUtil.isNull(nOnceFeeReceiptDetailDtos)) {
+            nOnceFeeReceiptDetailDtos.add(feeReceiptDetailDto);
+            return;
+        }
+        FeeReceiptDetailDto nOnceFeeReceiptDetailDto = null;
+        for (FeeReceiptDetailDto nFeeReceiptDetailDto : nOnceFeeReceiptDetailDtos) {
+            //todo 濡傛灉鍚嶇О涓嶄竴鏍�
+            if (!nFeeReceiptDetailDto.getFeeName().equals(feeReceiptDetailDto.getFeeName())) {
+                continue;
+            }
+
+            if (!nFeeReceiptDetailDto.getSquarePrice().equals(feeReceiptDetailDto.getSquarePrice())) {
+                continue;
+            }
+
+            if (!nFeeReceiptDetailDto.getPayOrderId().equals(feeReceiptDetailDto.getPayOrderId())) {
+                continue;
+            }
+
+
+            Date endTime = DateUtil.getDateFromStringB(nFeeReceiptDetailDto.getEndTime());
+            Date startTime = DateUtil.getDateFromStringB(feeReceiptDetailDto.getStartTime());
+            if (endTime.getTime() != startTime.getTime()) {
+                continue;
+            }
+
+            nOnceFeeReceiptDetailDto = nFeeReceiptDetailDto;
+        }
+
+        if (nOnceFeeReceiptDetailDto == null) {
+            nOnceFeeReceiptDetailDtos.add(feeReceiptDetailDto);
+            return;
+        }
+
+        nOnceFeeReceiptDetailDto.setEndTime(feeReceiptDetailDto.getEndTime());
+
+    }
+
 }

--
Gitblit v1.8.0