From 3835848b28f3cf605aa1fbda443024ee11740493 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期一, 10 五月 2021 11:54:14 +0800
Subject: [PATCH] 优化代码

---
 service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java |   91 +++++++++++++++++++++++++++++++--------------
 1 files changed, 62 insertions(+), 29 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java b/service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
old mode 100644
new mode 100755
index 5fffa68..658c9b7
--- a/service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
@@ -1,6 +1,7 @@
 package com.java110.fee.bmo.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.java110.core.factory.Java110ThreadPoolFactory;
 import com.java110.core.smo.IComputeFeeSMO;
 import com.java110.dto.RoomDto;
 import com.java110.dto.fee.FeeConfigDto;
@@ -30,7 +31,12 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 public class QueryOweFeeImpl implements IQueryOweFee {
@@ -176,41 +182,66 @@
             return ResultVo.createResponseEntity(ResultVo.CODE_OK, "鎴愬姛", new JSONArray());
         }
         //鏌ヨ璐圭敤淇℃伅arrearsEndTime
-        FeeDto tmpFeeDto = null;
         List<RoomDto> tmpRoomDtos = new ArrayList<>();
-        for (RoomDto tmpRoomDto : roomDtos) {
-            tmpFeeDto = new FeeDto();
-            tmpFeeDto.setArrearsEndTime(DateUtil.getCurrentDate());
-            tmpFeeDto.setState(FeeDto.STATE_DOING);
-            tmpFeeDto.setPayerObjId(tmpRoomDto.getRoomId());
-            tmpFeeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
-            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+        List<RoomDto> tempRooms = new ArrayList<>();
+        int threadNum = Java110ThreadPoolFactory.JAVA110_DEFAULT_THREAD_NUM;
 
-            if (feeDtos == null || feeDtos.size() < 1) {
-                feeDtos = new ArrayList<>();
-                return ResultVo.createResponseEntity(feeDtos);
-            }
-
-            List<FeeDto> tmpFeeDtos = new ArrayList<>();
-            for (FeeDto tempFeeDto : feeDtos) {
-                List<RoomDto> tmpCacheRoomDtos = new ArrayList<>();
-                tmpCacheRoomDtos.add(tmpRoomDto);
-                tempFeeDto.setCacheRooms(tmpCacheRoomDtos);
-                computeFeeSMOImpl.computeEveryOweFee(tempFeeDto);//璁$畻娆犺垂閲戦
-                //濡傛灉閲戦涓�0 灏辨帓闄�
-                if (tempFeeDto.getFeePrice() > 0 && tempFeeDto.getEndTime().getTime() <= DateUtil.getCurrentDate().getTime()) {
-                    tmpFeeDtos.add(tempFeeDto);
-                }
-            }
-
-            if (tmpFeeDtos.size() < 1) {
+        tempRooms.addAll(doGetTmpRoomDto(roomDtos, feeDto, threadNum));
+        for(RoomDto tmpRoomDto:tempRooms){
+            if(tmpRoomDto == null){
                 continue;
             }
-            tmpRoomDto.setFees(tmpFeeDtos);
             tmpRoomDtos.add(tmpRoomDto);
         }
 
         return ResultVo.createResponseEntity(tmpRoomDtos);
+    }
+
+    private List<RoomDto> doGetTmpRoomDto(List<RoomDto> roomDtos, FeeDto feeDto, int threadNum) {
+        Java110ThreadPoolFactory java110ThreadPoolFactory = null;
+        try {
+            java110ThreadPoolFactory = Java110ThreadPoolFactory.getInstance().createThreadPool(threadNum);
+            for (RoomDto roomDto1 : roomDtos) {
+                java110ThreadPoolFactory.submit(() -> {
+                    return getTmpRoomDtos(roomDto1, feeDto);
+                });
+            }
+            return java110ThreadPoolFactory.get();
+        } finally {
+            if (java110ThreadPoolFactory != null) {
+                java110ThreadPoolFactory.stop();
+            }
+        }
+    }
+
+    private RoomDto getTmpRoomDtos(RoomDto tmpRoomDto, FeeDto feeDto) {
+        FeeDto tmpFeeDto = null;
+        tmpFeeDto = new FeeDto();
+        tmpFeeDto.setArrearsEndTime(DateUtil.getCurrentDate());
+        tmpFeeDto.setState(FeeDto.STATE_DOING);
+        tmpFeeDto.setPayerObjId(tmpRoomDto.getRoomId());
+        tmpFeeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.querySimpleFees(tmpFeeDto);
+
+        if (feeDtos == null || feeDtos.size() < 1) {
+            return null;
+        }
+
+        List<FeeDto> tmpFeeDtos = new ArrayList<>();
+        for (FeeDto tempFeeDto : feeDtos) {
+
+            computeFeeSMOImpl.computeEveryOweFee(tempFeeDto, tmpRoomDto);//璁$畻娆犺垂閲戦
+            //濡傛灉閲戦涓�0 灏辨帓闄�
+            if (tempFeeDto.getFeePrice() > 0 && tempFeeDto.getEndTime().getTime() <= DateUtil.getCurrentDate().getTime()) {
+                tmpFeeDtos.add(tempFeeDto);
+            }
+        }
+
+        if (tmpFeeDtos.size() < 1) {
+            return null;
+        }
+        tmpRoomDto.setFees(tmpFeeDtos);
+        return tmpRoomDto;
     }
 
     private boolean freshFeeDtoParam(FeeDto feeDto) {
@@ -548,7 +579,9 @@
             return targetEndDateAndOweMonth;
         }
         if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
-            if (!StringUtil.isEmpty(feeDto.getCurDegrees())) {
+            if(feeDto.getDeadlineTime() != null){
+                targetEndDate = feeDto.getDeadlineTime();
+            }else if(!StringUtil.isEmpty(feeDto.getCurDegrees())) {
                 targetEndDate = feeDto.getCurReadingTime();
             } else if (feeDto.getImportFeeEndTime() == null) {
                 targetEndDate = feeDto.getConfigEndTime();

--
Gitblit v1.8.0