From 6543cd42661e2f55b28bdc354022a57885d549de Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 04 三月 2021 09:19:49 +0800
Subject: [PATCH] 优化公摊问题
---
service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java | 85 +++++++++++++++++++++++++++++-------------
1 files changed, 59 insertions(+), 26 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
index 01ada56..b99f8ac 100644
--- 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,68 @@
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) {
-
- 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) {
if (StringUtil.isEmpty(feeDto.getPayerObjId())) {
--
Gitblit v1.8.0