From a2b9ff0d1bd4184515306a3578b11997c44611f5 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 01 七月 2021 13:17:28 +0800
Subject: [PATCH] 优化定时任务
---
service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java | 290 +++++++++------------------------------------------------
1 files changed, 47 insertions(+), 243 deletions(-)
diff --git a/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java b/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
old mode 100644
new mode 100755
index e0ab369..84be14d
--- a/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
+++ b/service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java
@@ -1,12 +1,13 @@
package com.java110.job.task.fee;
import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.smo.IComputeFeeSMO;
import com.java110.dto.RoomDto;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.fee.*;
+import com.java110.dto.logSystemError.LogSystemErrorDto;
import com.java110.dto.owner.OwnerCarDto;
import com.java110.dto.owner.OwnerRoomRelDto;
-import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.dto.task.TaskDto;
import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
@@ -16,16 +17,21 @@
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
import com.java110.job.quartz.TaskSystemQuartz;
+import com.java110.po.logSystemError.LogSystemErrorPo;
+import com.java110.service.smo.ISaveSystemErrorSMO;
import com.java110.utils.constant.ResponseConstant;
import com.java110.utils.exception.TaskTemplateException;
import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ExceptionUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
/**
* @ClassName GenerateOwnerBillTemplate
@@ -68,6 +74,12 @@
@Autowired
private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+ @Autowired
+ private IComputeFeeSMO computeFeeSMOImpl;
+
+ @Autowired
+ private ISaveSystemErrorSMO saveSystemErrorSMOImpl;
+
@Override
protected void process(TaskDto taskDto) throws Exception {
@@ -76,7 +88,17 @@
List<CommunityDto> communityDtos = getAllCommunity();
for (CommunityDto communityDto : communityDtos) {
- GenerateBill(taskDto, communityDto);
+ try {
+ GenerateBill(taskDto, communityDto);
+ }catch (Throwable e){
+
+ LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+ logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+ logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_JOB);
+ logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+ saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+ logger.error("璐圭敤鍑鸿处澶辫触" + communityDto.getCommunityId(), e);
+ }
}
}
@@ -101,7 +123,12 @@
for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
try {
GenerateBillByFeeConfig(taskDto, tmpFeeConfigDto);
- } catch (Exception e) {
+ } catch (Throwable e) {
+ LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+ logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+ logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_JOB);
+ logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+ saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
logger.error("璐圭敤鍑鸿处澶辫触" + tmpFeeConfigDto.getConfigId(), e);
}
}
@@ -165,6 +192,11 @@
try {
generateFee(startTime, tmpFeeDto, billDto, feeConfigDto);
} catch (Exception e) {
+ LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+ logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+ logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_JOB);
+ logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+ saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
logger.error("鐢熸垚璐圭敤澶辫触", e);
}
}
@@ -185,7 +217,7 @@
*/
private void generateFee(Date startTime, FeeDto feeDto, BillDto billDto, FeeConfigDto feeConfigDto) {
- if ("2009001".equals(feeDto.getState())) { //鍒ゆ柇鏄惁缂磋垂缁撴潫
+ if (FeeDto.STATE_FINISH.equals(feeDto.getState())) { //鍒ゆ柇鏄惁缂磋垂缁撴潫
return;
}
@@ -196,7 +228,7 @@
// 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
// 鏈堜唤 * 姣忔湀鍗曚环 = 娆犺垂閲戦
- Map<String, Object> targetEndDateAndOweMonth = getTargetEndDateAndOweMonth(feeDto);
+ Map<String, Object> targetEndDateAndOweMonth = computeFeeSMOImpl.getTargetEndDateAndOweMonth(feeDto);
Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
@@ -211,16 +243,8 @@
if (oweMonth <= 0.0) {
return;
}
-
- if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
- computeFeePriceByRoom(feeDto);
- } else if (FeeDto.PAYER_OBJ_TYPE_PARKING_SPACE.equals(feeDto.getPayerObjType())) {
- computeFeePriceByParkingSpace(feeDto);
- } else {
- return;//杩欎釜娌℃湁娆犺垂鍙畻
- //throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍨嬪嚭璐�" + feeDto.getFeeId());
- }
-
+ double tmpFeePrice = computeFeeSMOImpl.getFeePrice(feeDto);
+ feeDto.setFeePrice(tmpFeePrice);
if (feeDto.getFeePrice() <= 0) {
return;//杩欎釜娌℃湁娆犺垂鍙畻
}
@@ -241,7 +265,7 @@
billOweFeeDto.setPayerObjType(feeDto.getPayerObjType());
billOweFeeDto.setState("1000");
billOweFeeDto.setDeadlineTime(DateUtil.getFormatTimeString(targetEndDate, DateUtil.DATE_FORMATE_STRING_A));
- if ("3333".equals(feeDto.getPayerObjType())) {
+ if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
getRoomInfo(billOweFeeDto, feeDto);
} else {
getParkingSpaceInfo(billOweFeeDto, feeDto);
@@ -280,93 +304,6 @@
}
billDto.setReceipts(curReceipts.doubleValue() + "");
}
-
- private Map getTargetEndDateAndOweMonth(FeeDto feeDto) {
- Date targetEndDate = null;
- double oweMonth = 0.0;
-
- Map<String, Object> targetEndDateAndOweMonth = new HashMap<>();
-
- if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
- targetEndDate = feeDto.getEndTime();
- targetEndDateAndOweMonth.put("oweMonth", oweMonth);
- targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
- return targetEndDateAndOweMonth;
- }
- if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
- if (feeDto.getImportFeeEndTime() == null) {
- targetEndDate = feeDto.getConfigEndTime();
- } else {
- targetEndDate = feeDto.getImportFeeEndTime();
- }
- //鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
- oweMonth = 1.0;
-
- } else {
- //褰撳墠鏃堕棿
- Date billEndTime = DateUtil.getCurrentDate();
- //寮�濮嬫椂闂�
- Date startDate = feeDto.getStartTime();
- //鍒版湡鏃堕棿
- Date endDate = feeDto.getEndTime();
- if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
- OwnerCarDto ownerCarDto = new OwnerCarDto();
- ownerCarDto.setCommunityId(feeDto.getCommunityId());
- ownerCarDto.setCarId(feeDto.getPayerObjId());
- List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-
- if (ownerCarDtos == null || ownerCarDtos.size() != 1) {
- targetEndDateAndOweMonth.put("oweMonth", 0);
- targetEndDateAndOweMonth.put("targetEndDate", "");
- return targetEndDateAndOweMonth;
- }
-
- targetEndDate = ownerCarDtos.get(0).getEndTime();
- //璇存槑娌℃湁娆犺垂
- if (endDate.getTime() < targetEndDate.getTime()) {
- // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
- oweMonth = dayCompare(endDate, targetEndDate);
- }
- targetEndDateAndOweMonth.put("oweMonth", oweMonth);
- targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
- return targetEndDateAndOweMonth;
- }
- //缂磋垂鍛ㄦ湡
- long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
- // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂� = 鏈堜唤
- double mulMonth = dayCompare(startDate, billEndTime);
- // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
- double round = 0.0;
- if ("1200".equals(feeDto.getPaymentCd())) { // 棰勪粯璐�
- round = Math.floor(mulMonth / paymentCycle) + 1;
- } else { //鍚庝粯璐�
- round = Math.floor(mulMonth / paymentCycle);
- }
- // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
- targetEndDate = getTargetEndTime(round * paymentCycle, startDate);
- //璐圭敤 蹇粨鏉熶簡
- if (feeDto.getConfigEndTime().getTime() < targetEndDate.getTime()) {
- targetEndDate = feeDto.getConfigEndTime();
- }
- //璇存槑娌℃湁娆犺垂
- if (endDate.getTime() < targetEndDate.getTime()) {
- // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
- oweMonth = dayCompare(endDate, targetEndDate);
- }
- }
-
- targetEndDateAndOweMonth.put("oweMonth", oweMonth);
- targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
- return targetEndDateAndOweMonth;
- }
-
- private Date getTargetEndTime(double v, Date startDate) {
- Calendar endDate = Calendar.getInstance();
- endDate.setTime(startDate);
- endDate.add(Calendar.MONTH, (int) v);
- return endDate.getTime();
- }
-
/**
* 鏌ヨ杞︿綅淇℃伅
@@ -421,8 +358,11 @@
}
RoomDto tmpRoomDto = roomDtos.get(0);
-
- billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "鏍�" + tmpRoomDto.getUnitNum() + "鍗曞厓" + tmpRoomDto.getRoomNum() + "瀹�");
+ if (RoomDto.ROOM_TYPE_ROOM.equals(tmpRoomDto.getRoomType())) {
+ billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "鏍�" + tmpRoomDto.getUnitNum() + "鍗曞厓" + tmpRoomDto.getRoomNum() + "瀹�");
+ } else {
+ billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "鏍�" + tmpRoomDto.getRoomNum() + "瀹�");
+ }
OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
ownerRoomRelDto.setByOwnerInfo(true);
@@ -468,142 +408,6 @@
return calendar.getTime();
- }
-
- /**
- * 鏍规嵁鎴垮眿鏉ョ畻鍗曚环
- *
- * @param feeDto
- */
- private void computeFeePriceByRoom(FeeDto feeDto) {
- RoomDto roomDto = new RoomDto();
- roomDto.setCommunityId(feeDto.getCommunityId());
- roomDto.setRoomId(feeDto.getPayerObjId());
- List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-
- if (roomDtos == null || roomDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
- return;
- }
-
- String computingFormula = feeDto.getComputingFormula();
- double feePrice = 0.00;
- if ("1001".equals(computingFormula)) { //闈㈢Н*鍗曚环+闄勫姞璐�
- BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
- BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDtos.get(0).getBuiltUpArea()));
- BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
- BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- } else {
- feePrice = -1.00;
- }
-
- feeDto.setFeePrice(feePrice);
-
- //鏌ヨ涓氫富淇℃伅
-
-
- }
-
- /**
- * 鏍规嵁杞︿綅鏉ョ畻鍗曚环
- *
- * @param feeDto
- */
- private void computeFeePriceByParkingSpace(FeeDto feeDto) {
-
- OwnerCarDto ownerCarDto = new OwnerCarDto();
- ownerCarDto.setCommunityId(feeDto.getCommunityId());
- ownerCarDto.setCarId(feeDto.getPayerObjId());
- List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
- if (ownerCarDtos == null || ownerCarDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
- return;
- }
-
- ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
- parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
- parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId());
- List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-
- if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
- return;
- }
-
- String computingFormula = feeDto.getComputingFormula();
- double feePrice = 0.00;
- if ("1001".equals(computingFormula)) { //闈㈢Н*鍗曚环+闄勫姞璐�
- BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
- BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(parkingSpaceDtos.get(0).getArea()));
- BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
- BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
- feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- } else {
- feePrice = -1.00;
- }
-
- feeDto.setFeePrice(feePrice);
- }
-
- /**
- * 璁$畻2涓棩鏈熶箣闂寸浉宸殑 浠ュ勾銆佹湀銆佹棩涓哄崟浣嶏紝鍚勮嚜璁$畻缁撴灉鏄灏�
- * 姣斿锛�2011-02-02 鍒� 2017-03-02
- * 浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
- * 浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
- * 浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
- *
- * @param fromDate
- * @param toDate
- * @return
- */
- public static int monthCompare(Date fromDate, Date toDate) {
- Calendar from = Calendar.getInstance();
- from.setTime(fromDate);
- Calendar to = Calendar.getInstance();
- to.setTime(toDate);
- //鍙骞存湀
- int fromYear = from.get(Calendar.YEAR);
- int fromMonth = from.get(Calendar.MONTH);
- int toYear = to.get(Calendar.YEAR);
- int toMonth = to.get(Calendar.MONTH);
- int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth);
- return month;
- }
-
- /**
- * 璁$畻2涓棩鏈熶箣闂寸浉宸殑 浠ュ勾銆佹湀銆佹棩涓哄崟浣嶏紝鍚勮嚜璁$畻缁撴灉鏄灏�
- * 姣斿锛�2011-02-02 鍒� 2017-03-02
- * 浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
- * 浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
- * 浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
- *
- * @param fromDate
- * @param toDate
- * @return
- */
- public static double dayCompare(Date fromDate, Date toDate) {
- Calendar from = Calendar.getInstance();
- from.setTime(fromDate);
- Calendar to = Calendar.getInstance();
- to.setTime(toDate);
- int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
- int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
-
- result = result + month;
- Calendar newFrom = Calendar.getInstance();
- newFrom.setTime(fromDate);
- newFrom.add(Calendar.MONTH, result);
-
- long t1 = newFrom.getTimeInMillis();
- long t2 = to.getTimeInMillis();
- long days = (t2 - t1) / (24 * 60 * 60 * 1000);
-
- BigDecimal tmpDays = new BigDecimal(days);
- BigDecimal monthDay = new BigDecimal(30);
-
- return tmpDays.divide(monthDay, 2, RoundingMode.HALF_UP).doubleValue() + result;
}
--
Gitblit v1.8.0