package com.java110.report.bmo.reportOweFee.impl; 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.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 = null; if (count > 0) { reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto); refreshReportOwe(reportOweFeeDtos, reportOweFeeDto.getConfigIds()); } else { reportOweFeeDtos = new ArrayList<>(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reportOweFeeDto.getRow()), count, reportOweFeeDtos); ResponseEntity responseEntity = new ResponseEntity(resultVo.toString(), HttpStatus.OK); return responseEntity; } private void refreshReportOwe(List reportOweFeeDtos, String[] configIds) { List payObjIds = new ArrayList<>(); if (reportOweFeeDtos == null || reportOweFeeDtos.size() < 1) { return; } for (ReportOweFeeDto reportOweFeeDto : reportOweFeeDtos) { payObjIds.add(reportOweFeeDto.getPayerObjId()); } ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto(); reportOweFeeDto.setPayerObjIds(payObjIds.toArray(new String[payObjIds.size()])); reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto); for (ReportOweFeeDto tmpReportOweFeeDto : reportOweFeeDtos) { dealItem(tmpReportOweFeeDto, reportOweFeeDtos); } //如果费用对象上没有这个费用项时默认写零 for (ReportOweFeeDto tmpReportOweFeeDto : reportOweFeeDtos) { 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 tmpReportOweFeeDto, List reportOweFeeDtos) { List items = new ArrayList<>(); if (reportOweFeeDtos == null || reportOweFeeDtos.size() < 1) { return; } ReportOweFeeItemDto reportOweFeeItemDto = null; for (ReportOweFeeDto reportOweFeeDto : reportOweFeeDtos) { if (!tmpReportOweFeeDto.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()); 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()))); reportOweFeeItemDto.setAmountOwed(oldAmount.doubleValue() + ""); } tmpReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName()); } //计算总金额 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.getStartTime(); } totalAmount = totalAmount.add(new BigDecimal(Double.parseDouble(tempReportOweFeeItemDto.getAmountOwed()))); } tmpReportOweFeeDto.setEndTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A)); tmpReportOweFeeDto.setDeadlineTime(DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_A)); tmpReportOweFeeDto.setItems(items); tmpReportOweFeeDto.setPayerObjName(items.get(0).getPayerObjName()); tmpReportOweFeeDto.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; } }