From 05683f2b2bdbdbe21cf17ad523c21ab338bd1c54 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 19 七月 2022 21:49:55 +0800
Subject: [PATCH] 优化添加设备 功能

---
 service-report/src/main/java/com/java110/report/bmo/reportOweFee/impl/GetReportOweFeeBMOImpl.java |  197 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 171 insertions(+), 26 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 2a22256..d341301 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
@@ -5,6 +5,7 @@
 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;
@@ -13,9 +14,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 {
@@ -30,17 +29,27 @@
      */
     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);
@@ -48,26 +57,156 @@
         return responseEntity;
     }
 
-    private void refreshReportOwe(List<ReportOweFeeDto> reportOweFeeDtos, String[] configIds) {
-        List<String> payObjIds = new ArrayList<>();
-
+    /**
+     * 鏌ヨ澶ц 鎬绘瑺璐� 鍜� 鍚勪釜璐圭敤椤规�绘瑺璐�
+     *
+     * @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;
+        }
 
-        for (ReportOweFeeDto reportOweFeeDto : reportOweFeeDtos) {
+        //璁$畻鍒嗛」鐨勭疮璁″��
+        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());
+        }
+    }
+
+    /**
+     * 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()]));
-        reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
-
-        for (ReportOweFeeDto tmpReportOweFeeDto : reportOweFeeDtos) {
+        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());
+                reportOweFee.setOwnerTel(reportOweFees.get(0).getOwnerTel());
+            } else if (reportOweFee.getPayerObjType().equals("6666")) {
+                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);
+        }
+        for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) {
             dealItem(tmpReportOweFeeDto, reportOweFeeDtos);
         }
 
+
+        if (configIds == null || configIds.length < 1) {
+            return;
+        }
+
         //濡傛灉璐圭敤瀵硅薄涓婃病鏈夎繖涓垂鐢ㄩ」鏃堕粯璁ゅ啓闆�
-        for (ReportOweFeeDto tmpReportOweFeeDto : reportOweFeeDtos) {
+        for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) {
             for (String configId : configIds) {
                 if (hasItem(tmpReportOweFeeDto.getItems(), configId) != null) {
                     continue;
@@ -84,15 +223,15 @@
 
     }
 
-    private void dealItem(ReportOweFeeDto tmpReportOweFeeDto, List<ReportOweFeeDto> reportOweFeeDtos) {
+    private void dealItem(ReportOweFeeDto oldReportOweFeeDto, List<ReportOweFeeDto> allReportOweFeeDtos) {
         List<ReportOweFeeItemDto> items = new ArrayList<>();
-        if (reportOweFeeDtos == null || reportOweFeeDtos.size() < 1) {
+        if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) {
             return;
         }
 
         ReportOweFeeItemDto reportOweFeeItemDto = null;
-        for (ReportOweFeeDto reportOweFeeDto : reportOweFeeDtos) {
-            if (!tmpReportOweFeeDto.getPayerObjId().equals(reportOweFeeDto.getPayerObjId())) {
+        for (ReportOweFeeDto reportOweFeeDto : allReportOweFeeDtos) {
+            if (!oldReportOweFeeDto.getPayerObjId().equals(reportOweFeeDto.getPayerObjId())) {
                 continue;
             }
             reportOweFeeItemDto = hasItem(items, reportOweFeeDto.getConfigId());
@@ -103,6 +242,7 @@
                 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));
@@ -112,10 +252,14 @@
                 items.add(reportOweFeeItemDto);
             } else {
                 BigDecimal oldAmount = new BigDecimal(Double.parseDouble(reportOweFeeItemDto.getAmountOwed()));
-                oldAmount = oldAmount.add(new BigDecimal(Double.parseDouble(reportOweFeeDto.getAmountOwed())));
+                oldAmount = oldAmount.add(new BigDecimal(Double.parseDouble(reportOweFeeDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                 reportOweFeeItemDto.setAmountOwed(oldAmount.doubleValue() + "");
             }
-            tmpReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName());
+            if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerName())) {
+                oldReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName());
+            }
+            oldReportOweFeeDto.setUpdateTime(reportOweFeeDto.getUpdateTime());
+            oldReportOweFeeDto.setConfigName(reportOweFeeDto.getConfigName());
         }
 
         //璁$畻鎬婚噾棰�
@@ -133,15 +277,16 @@
                 endTime = tempReportOweFeeItemDto.getEndTime();
             }
             if (endTime.getTime() < tempReportOweFeeItemDto.getEndTime().getTime()) {
-                endTime = tempReportOweFeeItemDto.getStartTime();
+                endTime = tempReportOweFeeItemDto.getEndTime();
             }
-            totalAmount = totalAmount.add(new BigDecimal(Double.parseDouble(tempReportOweFeeItemDto.getAmountOwed())));
+            totalAmount = totalAmount.add(new BigDecimal(Double.parseDouble(tempReportOweFeeItemDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
         }
-        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() + "");
+        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) {

--
Gitblit v1.8.0