Procházet zdrojové kódy

一次性费用合并

wuxw před 1 rokem
rodič
revize
732f08830f

+ 3 - 1
service-fee/src/main/java/com/java110/fee/api/FeeReceiptApi.java

@@ -133,6 +133,7 @@ public class FeeReceiptApi {
                                                   @RequestParam(value = "qendTime", required = false) String qendTime,
                                                   @RequestParam(value = "feeId", required = false) String feeId,
                                                   @RequestParam(value = "receiptCode", required = false) String receiptCode,
+
                                                   @RequestParam(value = "page") int page,
                                                   @RequestParam(value = "row") int row,
                                                   @RequestHeader(value = "user_id") String userId) {
@@ -275,6 +276,7 @@ public class FeeReceiptApi {
                                                         @RequestParam(value = "receiptIds", required = false) String receiptIds,
                                                         @RequestParam(value = "detailIds", required = false) String detailIds,
                                                         @RequestParam(value = "orderBy", required = false) String orderBy,
+                                                        @RequestParam(value = "mergeFee", required = false) String mergeFee,
                                                         @RequestParam(value = "page") int page,
                                                         @RequestParam(value = "row") int row) {
         FeeReceiptDetailDto feeReceiptDetailDto = new FeeReceiptDetailDto();
@@ -289,7 +291,7 @@ public class FeeReceiptApi {
         if (!StringUtil.isEmpty(detailIds)) {
             feeReceiptDetailDto.setDetailIds(detailIds.split(","));
         }
-        return getFeeReceiptDetailBMOImpl.get(feeReceiptDetailDto);
+        return getFeeReceiptDetailBMOImpl.get(feeReceiptDetailDto,mergeFee);
     }
 
 }

+ 7 - 6
service-fee/src/main/java/com/java110/fee/bmo/feeReceipt/impl/GetFeeReceiptBMOImpl.java

@@ -11,14 +11,15 @@ import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.IFeeReceiptInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
+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("getFeeReceiptBMOImpl")
 public class GetFeeReceiptBMOImpl implements IGetFeeReceiptBMO {
@@ -45,27 +46,27 @@ public class GetFeeReceiptBMOImpl implements IGetFeeReceiptBMO {
         int count = feeReceiptInnerServiceSMOImpl.queryFeeReceiptsCount(feeReceiptDto);
 
         List<FeeReceiptDto> feeReceiptDtos = null;
-        List<FeeReceiptDto> feeReceiptList = new ArrayList<>();
         if (count > 0) {
             feeReceiptDtos = feeReceiptInnerServiceSMOImpl.queryFeeReceipts(feeReceiptDto);
             for (FeeReceiptDto feeReceipt : feeReceiptDtos) {
                 feeReceipt.setStoreName(feeReceiptDto.getStoreName());
-                feeReceiptList.add(feeReceipt);
             }
             //输入房屋信息
             freshRoomInfo(feeReceiptDtos);
         } else {
             feeReceiptDtos = new ArrayList<>();
-            feeReceiptList.addAll(feeReceiptDtos);
         }
 
-        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) feeReceiptDto.getRow()), count, feeReceiptList);
+
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) feeReceiptDto.getRow()), count, feeReceiptDtos);
 
         ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
 
         return responseEntity;
     }
 
+
     /**
      * 刷入房屋信息
      *

+ 1 - 1
service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/IGetFeeReceiptDetailBMO.java

@@ -10,7 +10,7 @@ public interface IGetFeeReceiptDetailBMO {
      * @param  feeReceiptDetailDto
      * @return
      */
-    ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto);
+    ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto,String mergeFee);
 
 
 }

+ 108 - 9
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 @@ public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
      * @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 @@ public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
         //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 @@ public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
 
     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 @@ public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
 
         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 @@ public class GetFeeReceiptDetailBMOImpl implements IGetFeeReceiptDetailBMO {
         }
     }
 
+
+    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());
+
+    }
+
 }