From 6e8c95d31d85b53857e4e3ce12ea303eb0ea42eb Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 19 八月 2021 00:47:48 +0800
Subject: [PATCH] 优化代码

---
 service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java |  214 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 214 insertions(+), 0 deletions(-)

diff --git a/service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java b/service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java
index f6e429e..289d3bb 100644
--- a/service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java
+++ b/service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java
@@ -1,15 +1,21 @@
 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.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")
@@ -17,6 +23,7 @@
 
     @Autowired
     private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl;
+
 
     /**
      * @param reportOweFeeDto
@@ -30,6 +37,7 @@
         List<ReportOweFeeDto> reportOweFeeDtos = null;
         if (count > 0) {
             reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto);
+            refreshReportOwe(reportOweFeeDtos, reportOweFeeDto.getConfigIds());
         } else {
             reportOweFeeDtos = new ArrayList<>();
         }
@@ -41,4 +49,210 @@
         return responseEntity;
     }
 
+    /**
+     * query all owe fee
+     *
+     * @param reportOweFeeDto
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> getAllFees(ReportOweFeeDto reportOweFeeDto) {
+        //
+        List<ReportOweFeeDto> allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
+        if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) {
+            return ResultVo.createResponseEntity(allReportOweFeeDtos);
+        }
+
+        //get old report owe fee
+        List<ReportOweFeeDto> 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<ReportOweFeeDto> 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<ReportOweFeeDto> oldReportOweFeeDtos, String[] configIds) {
+        List<String> 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<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")) {
+                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByRoom(reportOwe);
+                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
+                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
+            } else if (reportOweFee.getPayerObjType().equals("6666")) {
+                List<ReportOweFeeDto> 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<ReportOweFeeDto> allReportOweFeeDtos) {
+        List<ReportOweFeeItemDto> 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<ReportOweFeeItemDto> reportOweFeeItemDtos, String configId) {
+        if (reportOweFeeItemDtos == null || reportOweFeeItemDtos.size() < 1) {
+            return null;
+        }
+        for (ReportOweFeeItemDto reportOweFeeItemDto : reportOweFeeItemDtos) {
+            if (reportOweFeeItemDto.getConfigId().equals(configId)) {
+                return reportOweFeeItemDto;
+            }
+        }
+
+        return null;
+    }
+
 }

--
Gitblit v1.8.0