package com.java110.report.bmo.reportOweFee.impl; import com.java110.dto.PageDto; import com.java110.dto.reportOweFee.ReportOweFeeDto; import com.java110.dto.reportOweFee.ReportOweFeeItemDto; import com.java110.intf.report.IReportOweFeeInnerServiceSMO; import com.java110.report.bmo.reportOweFee.IGetReportOweFeeBMO; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; 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.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service("getReportOweFeeBMOImpl") public class GetReportOweFeeBMOImpl implements IGetReportOweFeeBMO { @Autowired private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl; /** * @param reportOweFeeDto * @return 订单服务能够接受的报文 */ public ResponseEntity get(ReportOweFeeDto reportOweFeeDto) { int count = reportOweFeeInnerServiceSMOImpl.queryReportOweFeesCount(reportOweFeeDto); List reportOweFeeDtos = new ArrayList<>(); if (count > 0) { reportOweFeeDto.setPage(PageDto.DEFAULT_PAGE); List reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto); refreshReportOwe(reportOweFees, reportOweFeeDto.getConfigIds()); for (ReportOweFeeDto reportOweFee : reportOweFees) { //获取欠费总金额 String amountOwed = reportOweFee.getAmountOwed(); if (!StringUtil.isEmpty(amountOwed)) { double amountOwedMoney = Double.parseDouble(amountOwed); if (amountOwedMoney > 0.0) { reportOweFeeDtos.add(reportOweFee); } else { continue; } } } } else { reportOweFeeDtos = new ArrayList<>(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) reportOweFeeDtos.size() / (double) reportOweFeeDto.getRow()), reportOweFeeDtos.size(), reportOweFeeDtos); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } /** * query all owe fee * * @param reportOweFeeDto * @return */ @Override public ResponseEntity getAllFees(ReportOweFeeDto reportOweFeeDto) { List allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto); if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) { return ResultVo.createResponseEntity(allReportOweFeeDtos); } //get old report owe fee List oldReportOweFeeDtos = new ArrayList<>(); ReportOweFeeDto oldReportOweFeeDto = null; for (ReportOweFeeDto tmpReportOweFeeDto : allReportOweFeeDtos) { if (existsOweFee(oldReportOweFeeDtos, tmpReportOweFeeDto.getPayerObjId())) { continue; } oldReportOweFeeDto = new ReportOweFeeDto(); oldReportOweFeeDto.setPayerObjId(tmpReportOweFeeDto.getPayerObjId()); oldReportOweFeeDtos.add(oldReportOweFeeDto); } for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) { dealItem(tmpReportOweFeeDto, allReportOweFeeDtos); } if (reportOweFeeDto.getConfigIds() == null || reportOweFeeDto.getConfigIds().length < 1) { return ResultVo.createResponseEntity(oldReportOweFeeDtos); } //如果费用对象上没有这个费用项时默认写零 for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) { for (String configId : reportOweFeeDto.getConfigIds()) { if (hasItem(tmpReportOweFeeDto.getItems(), configId) != null) { continue; } ReportOweFeeItemDto reportOweFeeItemDto = new ReportOweFeeItemDto(); reportOweFeeItemDto.setConfigId(configId); reportOweFeeItemDto.setFeeName(""); reportOweFeeItemDto.setAmountOwed("0"); reportOweFeeItemDto.setPayerObjId(""); reportOweFeeItemDto.setPayerObjName(""); tmpReportOweFeeDto.getItems().add(reportOweFeeItemDto); } } return ResultVo.createResponseEntity(oldReportOweFeeDtos); } /** * exists owe fee in oldReportOweFeeDtos * true is exists false is not * * @param oldReportOweFeeDtos * @param payerObjId * @return */ private boolean existsOweFee(List oldReportOweFeeDtos, String payerObjId) { for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) { // if equal return true if (tmpReportOweFeeDto.getPayerObjId().equals(payerObjId)) { return true; } } //default return false return false; } private void refreshReportOwe(List oldReportOweFeeDtos, String[] configIds) { List payObjIds = new ArrayList<>(); if (oldReportOweFeeDtos == null || oldReportOweFeeDtos.size() < 1) { return; } for (ReportOweFeeDto reportOweFeeDto : oldReportOweFeeDtos) { payObjIds.add(reportOweFeeDto.getPayerObjId()); } ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto(); reportOweFeeDto.setPayerObjIds(payObjIds.toArray(new String[payObjIds.size()])); List allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto); List reportOweFeeDtos = new ArrayList<>(); for (ReportOweFeeDto reportOweFee : allReportOweFeeDtos) { ReportOweFeeDto reportOwe = new ReportOweFeeDto(); reportOwe.setOweId(reportOweFee.getOweId()); if (reportOweFee.getPayerObjType().equals("3333")) { List reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByRoom(reportOwe); reportOweFee.setOweId(reportOweFees.get(0).getOweId()); reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName()); } else if (reportOweFee.getPayerObjType().equals("6666")) { List reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByCar(reportOwe); reportOweFee.setOweId(reportOweFees.get(0).getOweId()); reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName()); } reportOweFeeDtos.add(reportOweFee); } for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) { dealItem(tmpReportOweFeeDto, reportOweFeeDtos); } if (configIds == null || configIds.length < 1) { return; } //如果费用对象上没有这个费用项时默认写零 for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) { for (String configId : configIds) { if (hasItem(tmpReportOweFeeDto.getItems(), configId) != null) { continue; } ReportOweFeeItemDto reportOweFeeItemDto = new ReportOweFeeItemDto(); reportOweFeeItemDto.setConfigId(configId); reportOweFeeItemDto.setFeeName(""); reportOweFeeItemDto.setAmountOwed("0"); reportOweFeeItemDto.setPayerObjId(""); reportOweFeeItemDto.setPayerObjName(""); tmpReportOweFeeDto.getItems().add(reportOweFeeItemDto); } } } private void dealItem(ReportOweFeeDto oldReportOweFeeDto, List allReportOweFeeDtos) { List items = new ArrayList<>(); if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) { return; } ReportOweFeeItemDto reportOweFeeItemDto = null; for (ReportOweFeeDto reportOweFeeDto : allReportOweFeeDtos) { if (!oldReportOweFeeDto.getPayerObjId().equals(reportOweFeeDto.getPayerObjId())) { continue; } reportOweFeeItemDto = hasItem(items, reportOweFeeDto.getConfigId()); if (reportOweFeeItemDto == null) { reportOweFeeItemDto = new ReportOweFeeItemDto(); reportOweFeeItemDto.setConfigId(reportOweFeeDto.getConfigId()); reportOweFeeItemDto.setFeeName(reportOweFeeDto.getFeeName()); reportOweFeeItemDto.setAmountOwed(reportOweFeeDto.getAmountOwed()); reportOweFeeItemDto.setPayerObjId(reportOweFeeDto.getPayerObjId()); reportOweFeeItemDto.setPayerObjName(reportOweFeeDto.getPayerObjName()); reportOweFeeItemDto.setConfigName(reportOweFeeDto.getConfigName()); try { reportOweFeeItemDto.setStartTime(DateUtil.getDateFromString(reportOweFeeDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A)); reportOweFeeItemDto.setEndTime(DateUtil.getDateFromString(reportOweFeeDto.getDeadlineTime(), DateUtil.DATE_FORMATE_STRING_A)); } catch (ParseException e) { e.printStackTrace(); } items.add(reportOweFeeItemDto); } else { BigDecimal oldAmount = new BigDecimal(Double.parseDouble(reportOweFeeItemDto.getAmountOwed())); oldAmount = oldAmount.add(new BigDecimal(Double.parseDouble(reportOweFeeDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN); reportOweFeeItemDto.setAmountOwed(oldAmount.doubleValue() + ""); } if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerName())) { oldReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName()); } oldReportOweFeeDto.setUpdateTime(reportOweFeeDto.getUpdateTime()); oldReportOweFeeDto.setConfigName(reportOweFeeDto.getConfigName()); } //计算总金额 BigDecimal totalAmount = new BigDecimal(0); Date startTime = null; Date endTime = null; for (ReportOweFeeItemDto tempReportOweFeeItemDto : items) { if (startTime == null) { startTime = tempReportOweFeeItemDto.getStartTime(); } if (startTime.getTime() > tempReportOweFeeItemDto.getStartTime().getTime()) { startTime = tempReportOweFeeItemDto.getStartTime(); } if (endTime == null) { endTime = tempReportOweFeeItemDto.getEndTime(); } if (endTime.getTime() < tempReportOweFeeItemDto.getEndTime().getTime()) { endTime = tempReportOweFeeItemDto.getEndTime(); } totalAmount = totalAmount.add(new BigDecimal(Double.parseDouble(tempReportOweFeeItemDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN); } oldReportOweFeeDto.setEndTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A)); oldReportOweFeeDto.setDeadlineTime(DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_A)); oldReportOweFeeDto.setItems(items); oldReportOweFeeDto.setPayerObjName(items.get(0).getPayerObjName()); oldReportOweFeeDto.setAmountOwed(totalAmount.doubleValue() + ""); } private ReportOweFeeItemDto hasItem(List reportOweFeeItemDtos, String configId) { if (reportOweFeeItemDtos == null || reportOweFeeItemDtos.size() < 1) { return null; } for (ReportOweFeeItemDto reportOweFeeItemDto : reportOweFeeItemDtos) { if (reportOweFeeItemDto.getConfigId().equals(configId)) { return reportOweFeeItemDto; } } return null; } }