wuxw
2024-09-02 732f08830fc255e23c8665c0bbe7c298f7a2e36d
一次性费用合并
4个文件已修改
136 ■■■■ 已修改文件
service-fee/src/main/java/com/java110/fee/api/FeeReceiptApi.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/feeReceipt/impl/GetFeeReceiptBMOImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/IGetFeeReceiptDetailBMO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/impl/GetFeeReceiptDetailBMOImpl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/FeeReceiptApi.java
@@ -133,6 +133,7 @@
                                                  @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 @@
                                                        @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 @@
        if (!StringUtil.isEmpty(detailIds)) {
            feeReceiptDetailDto.setDetailIds(detailIds.split(","));
        }
        return getFeeReceiptDetailBMOImpl.get(feeReceiptDetailDto);
        return getFeeReceiptDetailBMOImpl.get(feeReceiptDetailDto,mergeFee);
    }
}
service-fee/src/main/java/com/java110/fee/bmo/feeReceipt/impl/GetFeeReceiptBMOImpl.java
@@ -11,14 +11,15 @@
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 @@
        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;
    }
    /**
     * 刷入房屋信息
     *
service-fee/src/main/java/com/java110/fee/bmo/feeReceiptDetail/IGetFeeReceiptDetailBMO.java
@@ -10,7 +10,7 @@
     * @param  feeReceiptDetailDto
     * @return
     */
    ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto);
    ResponseEntity<String> get(FeeReceiptDetailDto feeReceiptDetailDto,String mergeFee);
}
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());
    }
}