Your Name
2023-09-20 2d038449c429bc47d47d766ca297a9b81933aef1
service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java
@@ -1,7 +1,9 @@
package com.java110.report.bmo.reportOweFee.impl;
import com.java110.dto.reportOweFee.ReportOweFeeDto;
import com.java110.dto.reportOweFee.ReportOweFeeItemDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.reportFee.ReportOweFeeDto;
import com.java110.dto.reportFee.ReportOweFeeItemDto;
import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
import com.java110.intf.report.IReportOweFeeInnerServiceSMO;
import com.java110.report.bmo.reportOweFee.IGetReportOweFeeBMO;
import com.java110.utils.util.DateUtil;
@@ -14,9 +16,7 @@
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service("getReportOweFeeBMOImpl")
public class GetReportOweFeeBMOImpl implements IGetReportOweFeeBMO {
@@ -25,28 +25,79 @@
    private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl;
    @Autowired
    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
    /**
     * @param reportOweFeeDto
     * @return 订单服务能够接受的报文
     */
    public ResponseEntity<String> get(ReportOweFeeDto reportOweFeeDto) {
        reportOweFeeDto.setHasOweFee("Y");
        int count = reportOweFeeInnerServiceSMOImpl.queryReportOweFeesCount(reportOweFeeDto);
        List<ReportOweFeeDto> reportOweFeeDtos = null;
        if (count > 0) {
            reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto);
            refreshReportOwe(reportOweFeeDtos, reportOweFeeDto.getConfigIds());
            //查询大计 合计
            dealTheOweFeeSumAmount(reportOweFeeDtos, reportOweFeeDto);
        } else {
            reportOweFeeDtos = new ArrayList<>();
        }
        //按照 amountOwed 降序排列
        // reportOweFeeDtos.sort(Comparator.comparing(ReportOweFeeDto :: getAmountOwed).reversed());
        Collections.sort(reportOweFeeDtos, new Comparator<ReportOweFeeDto>() {
            @Override
            public int compare(ReportOweFeeDto o1, ReportOweFeeDto o2) {
                //降序
                return o2.getAmountOwed().compareTo(o1.getAmountOwed());
            }
        });
        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reportOweFeeDto.getRow()), count, reportOweFeeDtos);
        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
        return responseEntity;
    }
    /**
     * 查询大计 总欠费 和 各个费用项总欠费
     *
     * @param reportOweFeeDtos
     * @param reportOweFeeDto
     */
    private void dealTheOweFeeSumAmount(List<ReportOweFeeDto> reportOweFeeDtos, ReportOweFeeDto reportOweFeeDto) {
        if (reportOweFeeDtos == null || reportOweFeeDtos.size() < 1) {
            return;
        }
        //查询总计
        double totalAmount = 0.0;
        if (reportOweFeeDto.getConfigIds() == null || reportOweFeeDto.getConfigIds().length < 1) {
            totalAmount = reportOweFeeInnerServiceSMOImpl.computeReportOweFeeTotalAmount(reportOweFeeDto);
            for (ReportOweFeeDto reportOweFeeDto1 : reportOweFeeDtos) {
                reportOweFeeDto1.setTotalOweAmount(totalAmount);
            }
            return;
        }
        //计算分项的累计值
        List<ReportOweFeeItemDto> reportOweFeeItemDtos = reportOweFeeInnerServiceSMOImpl.computeReportOweFeeItemAmount(reportOweFeeDto);
        if (reportOweFeeItemDtos == null || reportOweFeeItemDtos.size() < 1) {
            return;
        }
        BigDecimal totalAmountDes = new BigDecimal(totalAmount);
        for (ReportOweFeeItemDto tmpReportOweFeeItemDto : reportOweFeeItemDtos) {
            totalAmountDes = totalAmountDes.add(new BigDecimal(tmpReportOweFeeItemDto.getTotalOweAmount())).setScale(2, BigDecimal.ROUND_HALF_UP);
        }
        for (ReportOweFeeDto reportOweFeeDto1 : reportOweFeeDtos) {
            reportOweFeeDto1.setItemTotalOweAmounts(reportOweFeeItemDtos);
            reportOweFeeDto1.setTotalOweAmount(totalAmountDes.doubleValue());
        }
    }
    /**
@@ -57,7 +108,6 @@
     */
    @Override
    public ResponseEntity<String> getAllFees(ReportOweFeeDto reportOweFeeDto) {
        //
        List<ReportOweFeeDto> allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
        if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) {
            return ResultVo.createResponseEntity(allReportOweFeeDtos);
@@ -85,6 +135,10 @@
        }
        //如果费用对象上没有这个费用项时默认写零
        FeeConfigDto feeConfigDto = null;
        feeConfigDto = new FeeConfigDto();
        feeConfigDto.setConfigIds(reportOweFeeDto.getConfigIds());
        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
        for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) {
            for (String configId : reportOweFeeDto.getConfigIds()) {
                if (hasItem(tmpReportOweFeeDto.getItems(), configId) != null) {
@@ -92,7 +146,7 @@
                }
                ReportOweFeeItemDto reportOweFeeItemDto = new ReportOweFeeItemDto();
                reportOweFeeItemDto.setConfigId(configId);
                reportOweFeeItemDto.setFeeName("");
                reportOweFeeItemDto.setConfigName(getFeeConfigName(feeConfigDtos,configId));
                reportOweFeeItemDto.setAmountOwed("0");
                reportOweFeeItemDto.setPayerObjId("");
                reportOweFeeItemDto.setPayerObjName("");
@@ -134,19 +188,27 @@
        }
        ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto();
        reportOweFeeDto.setPayerObjIds(payObjIds.toArray(new String[payObjIds.size()]));
        reportOweFeeDto.setConfigIds(configIds);
        List<ReportOweFeeDto> allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
        List<ReportOweFeeDto> reportOweFeeDtos = new ArrayList<>();
        for (ReportOweFeeDto reportOweFee : allReportOweFeeDtos) {
            ReportOweFeeDto reportOwe = new ReportOweFeeDto();
            reportOwe.setOweId(reportOweFee.getOweId());
            if (reportOweFee.getPayerObjType().equals("3333")) {
            if ("3333".equals(reportOweFee.getPayerObjType())) {
                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByRoom(reportOwe);
                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
            } else if (reportOweFee.getPayerObjType().equals("6666")) {
                reportOweFee.setOwnerTel(reportOweFees.get(0).getOwnerTel());
            } else if ("6666".equals(reportOweFee.getPayerObjType())) {
                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByCar(reportOwe);
                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
                reportOweFee.setOwnerTel(reportOweFees.get(0).getOwnerTel());
            }else if ("7777".equals(reportOweFee.getPayerObjType())) {
                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByCar(reportOwe);
                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
                reportOweFee.setOwnerTel(reportOweFees.get(0).getOwnerTel());
            }
            reportOweFeeDtos.add(reportOweFee);
        }
@@ -154,11 +216,16 @@
            dealItem(tmpReportOweFeeDto, reportOweFeeDtos);
        }
        if (configIds == null || configIds.length < 1) {
            return;
        }
        //如果费用对象上没有这个费用项时默认写零
        FeeConfigDto feeConfigDto = null;
        feeConfigDto = new FeeConfigDto();
        feeConfigDto.setConfigIds(configIds);
        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
        for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) {
            for (String configId : configIds) {
                if (hasItem(tmpReportOweFeeDto.getItems(), configId) != null) {
@@ -166,7 +233,7 @@
                }
                ReportOweFeeItemDto reportOweFeeItemDto = new ReportOweFeeItemDto();
                reportOweFeeItemDto.setConfigId(configId);
                reportOweFeeItemDto.setFeeName("");
                reportOweFeeItemDto.setConfigName(getFeeConfigName(feeConfigDtos,configId));
                reportOweFeeItemDto.setAmountOwed("0");
                reportOweFeeItemDto.setPayerObjId("");
                reportOweFeeItemDto.setPayerObjName("");
@@ -174,6 +241,21 @@
            }
        }
    }
    private String getFeeConfigName(List<FeeConfigDto> feeConfigDtos, String configId) {
        if(feeConfigDtos == null || feeConfigDtos.size()<1){
            return "无";
        }
        for(FeeConfigDto feeConfigDto:feeConfigDtos){
            if(feeConfigDto.getConfigId().equals(configId)){
                return feeConfigDto.getFeeName();
            }
        }
        return "无";
    }
    private void dealItem(ReportOweFeeDto oldReportOweFeeDto, List<ReportOweFeeDto> allReportOweFeeDtos) {
@@ -208,9 +290,12 @@
                oldAmount = oldAmount.add(new BigDecimal(Double.parseDouble(reportOweFeeDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                reportOweFeeItemDto.setAmountOwed(oldAmount.doubleValue() + "");
            }
            if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName())) {
            if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerName())) {
                oldReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName());
            }
            if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerTel()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerTel())) {
                oldReportOweFeeDto.setOwnerTel(reportOweFeeDto.getOwnerTel());
            }
            oldReportOweFeeDto.setUpdateTime(reportOweFeeDto.getUpdateTime());
            oldReportOweFeeDto.setConfigName(reportOweFeeDto.getConfigName());
        }