From e8b49b7e925eecd7fc8415dfdbcf1fd4a8c9648f Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期四, 18 五月 2023 02:19:50 +0800
Subject: [PATCH] 优化 离散月
---
java110-db/src/main/resources/mapper/fee/PayFeeDetailMonthServiceDaoImplMapper.xml | 55 +++
java110-interface/src/main/java/com/java110/intf/fee/IPayFeeDetailMonthInnerServiceSMO.java | 9
service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeDetailMonthInnerServiceSMOImpl.java | 23 +
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java | 195 ++++--------
service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeDetailMonthServiceDaoImpl.java | 14
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java | 12
service-fee/src/main/java/com/java110/fee/dao/IPayFeeDetailMonthServiceDao.java | 9
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java | 237 +++++++++++++++
service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java | 3
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImplV1.txt | 288 +++++++++++++++++++
10 files changed, 712 insertions(+), 133 deletions(-)
diff --git a/java110-db/src/main/resources/mapper/fee/PayFeeDetailMonthServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/PayFeeDetailMonthServiceDaoImplMapper.xml
index 530e718..1917132 100644
--- a/java110-db/src/main/resources/mapper/fee/PayFeeDetailMonthServiceDaoImplMapper.xml
+++ b/java110-db/src/main/resources/mapper/fee/PayFeeDetailMonthServiceDaoImplMapper.xml
@@ -12,7 +12,8 @@
fee_name,config_id
) values (
#{detailMonth},#{detailYear},#{detailId},#{receivableAmount},#{discountAmount},#{remark},#{receivedAmount},#{communityId},#{feeId},#{monthId},
- #{objName},#{objId},#{ownerName},#{ownerId},#{link},#{state},#{payFeeTime},#{curMonthTime}, #{feeName},#{configId}
+ #{objName},#{objId},#{ownerName},#{ownerId},#{link},#{state},#{payFeeTime},#{curMonthTime},
+ #{feeName},#{configId}
)
</insert>
@@ -39,7 +40,8 @@
detailId,t.receivable_amount,t.receivable_amount receivableAmount,t.discount_amount,t.discount_amount
discountAmount,t.remark,t.status_cd,t.status_cd statusCd,t.received_amount,t.received_amount
receivedAmount,t.community_id,t.community_id communityId,t.fee_id,t.fee_id feeId,t.month_id,t.month_id monthId,
- t.obj_name objName,t.obj_id objId,t.owner_name ownerName,t.owner_id ownerId,t.link,t.state,t.pay_fee_time payFeeTime,
+ t.obj_name objName,t.obj_id objId,t.owner_name ownerName,t.owner_id ownerId,t.link,t.state,t.pay_fee_time
+ payFeeTime,
t.cur_month_time curMonthTime
from pay_fee_detail_month t
where 1 =1
@@ -163,6 +165,22 @@
</if>
</update>
+ <!-- 鍒犻櫎绂绘暎鏁版嵁 -->
+ <update id="deletePayFeeDetailMonthInfo" parameterType="Map">
+ delete from pay_fee_detail_month
+ where 1=1
+ and community_id= #{communityId}
+ <if test="monthId !=null and monthId != ''">
+ and month_id= #{monthId}
+ </if>
+ <if test="feeId !=null and feeId != ''">
+ and fee_id= #{feeId}
+ </if>
+ <if test="detailId !=null and detailId != ''">
+ and detail_id= #{detailId}
+ </if>
+ </update>
+
<!-- 鏌ヨ鏈堢即璐硅〃鏁伴噺 add by wuxw 2018-07-03 -->
<select id="queryPayFeeDetailMonthsCount" parameterType="Map" resultType="Map">
select count(1) count
@@ -226,7 +244,8 @@
detailId,t.receivable_amount,t.receivable_amount receivableAmount,t.discount_amount,t.discount_amount
discountAmount,t.remark,t.status_cd,t.status_cd statusCd,t.received_amount,t.received_amount
receivedAmount,t.community_id,t.community_id communityId,t.fee_id,t.fee_id feeId,t.month_id,t.month_id monthId,
- t.obj_name objName,t.obj_id objId,t.owner_name ownerName,t.owner_id ownerId,t.link,t.state,t.pay_fee_time payFeeTime,
+ t.obj_name objName,t.obj_id objId,t.owner_name ownerName,t.owner_id ownerId,t.link,t.state,t.pay_fee_time
+ payFeeTime,
t.cur_month_time curMonthTime
from pay_fee_detail_month t
where 1 =1
@@ -288,4 +307,34 @@
</select>
+ <!-- 鏌ヨ闇�瑕佺鏁g殑缂磋垂璁板綍 -->
+ <select id="getWaitDispersedFeeDetail" parameterType="Map" resultType="Map">
+ select t.prime_rate,t.prime_rate primeRate,
+ t.detail_id,t.detail_id detailId,
+ t.receivable_amount,t.receivable_amount receivableAmount,
+ t.cycles,t.remark,t.status_cd,t.status_cd statusCd,t.received_amount,t.received_amount receivedAmount,
+ t.community_id,t.community_id communityId,t.b_id,t.b_id bId,t.fee_id,t.fee_id feeId ,t.create_time createTime,
+ t.state,d.name stateName,t.start_time,t.end_time,t.start_time startTime,t.end_time endTime,pfa.`value`
+ importFeeName,pfc.fee_name feeName,t.payable_amount,t.payable_amount payableAmount,
+ mw.cur_degrees curDegrees,mw.pre_degrees preDegrees, mw.pre_reading_time preReadingTime,mw.cur_reading_time
+ curReadingTime,t.pay_order_id payOrderId,pfc.config_id configId,td.`name` primeRateName,pfao1.`value`
+ payerObjName,
+ t.cashier_id cashierId,t.cashier_name cashierName
+ from pay_fee_detail t
+ left join pay_fee_detail_month pfdm on t.fee_id = pfdm.fee_id and pfdm.detail_id = t.detail_id and
+ pfdm.status_cd = '0' and t.community_id = pfdm.community_id
+ left join pay_fee_attrs pfa on t.fee_id = pfa.fee_id and pfa.spec_cd = '390002'
+ left join pay_fee pf on t.fee_id = pf.fee_id and pf.status_cd = '0'
+ left join pay_fee_config pfc on pf.config_id = pfc.config_id and pfc.status_cd = '0'
+ LEFT JOIN meter_water mw on t.fee_id = mw.fee_id and mw.status_cd = '0' and mw.community_id = t.community_id
+ left join pay_fee_attrs pfao1 on pfao1.fee_id = t.fee_id and pfao1.spec_cd = '390012' and pfao1.status_cd = '0'
+ left join t_dict d on t.state = d.status_cd and d.table_name = 'pay_fee_detail' and d.table_columns = 'state'
+ left join t_dict td on t.prime_rate = td.status_cd and td.table_name = 'pay_fee_detail' and td.table_columns =
+ 'prime_rate'
+ where t.status_cd = '0'
+ and t.state in ('1000','1400')
+ and t.community_id = #{communityId}
+ and t.fee_id = #{feeId}
+ and pfdm.detail_id is null
+ </select>
</mapper>
diff --git a/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeDetailMonthInnerServiceSMO.java b/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeDetailMonthInnerServiceSMO.java
index edec2ed..6b1c5b5 100644
--- a/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeDetailMonthInnerServiceSMO.java
+++ b/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeDetailMonthInnerServiceSMO.java
@@ -1,6 +1,7 @@
package com.java110.intf.fee;
import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
import org.springframework.cloud.openfeign.FeignClient;
@@ -57,4 +58,12 @@
@RequestMapping(value = "/queryPayFeeDetailMaxMonths", method = RequestMethod.POST)
List<PayFeeDetailMonthDto> queryPayFeeDetailMaxMonths(@RequestBody PayFeeDetailMonthDto payFeeDetailMonthDto);
+
+ /**
+ * 澶勭悊闇�瑕佺鏁g殑缂磋垂璁板綍
+ * @param payFeeDetailMonthDto
+ * @return
+ */
+ @RequestMapping(value = "/getWaitDispersedFeeDetail", method = RequestMethod.POST)
+ List<FeeDetailDto> getWaitDispersedFeeDetail(@RequestBody PayFeeDetailMonthDto payFeeDetailMonthDto);
}
diff --git a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
index a2345bb..acf070f 100755
--- a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
+++ b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -756,4 +756,16 @@
return list;
}
+ /**
+ * 闄ゅ幓 灏忔椂 鍒� 绉�
+ * @param time
+ * @return
+ */
+ public static Date timeToDate(Date time){
+ Calendar calendar =Calendar.getInstance();
+ calendar.setTime(time);
+ setTimeToMidnight(calendar);
+ return calendar.getTime();
+ }
+
}
diff --git a/service-fee/src/main/java/com/java110/fee/dao/IPayFeeDetailMonthServiceDao.java b/service-fee/src/main/java/com/java110/fee/dao/IPayFeeDetailMonthServiceDao.java
index e3f0443..7b3315f 100644
--- a/service-fee/src/main/java/com/java110/fee/dao/IPayFeeDetailMonthServiceDao.java
+++ b/service-fee/src/main/java/com/java110/fee/dao/IPayFeeDetailMonthServiceDao.java
@@ -62,4 +62,13 @@
List<Map> queryPayFeeDetailMaxMonths(Map info);
+
+ /**
+ * 澶勭悊闇�瑕佺鏁g殑 缂磋垂璁板綍
+ * @param info
+ * @return
+ */
+ List<Map> getWaitDispersedFeeDetail(Map info);
+
+ void deletePayFeeDetailMonthInfo(Map info);
}
diff --git a/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeDetailMonthServiceDaoImpl.java b/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeDetailMonthServiceDaoImpl.java
index b0848d9..04867bd 100644
--- a/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeDetailMonthServiceDaoImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeDetailMonthServiceDaoImpl.java
@@ -111,5 +111,19 @@
return businessPayFeeDetailMonthInfos;
}
+ @Override
+ public List<Map> getWaitDispersedFeeDetail(Map info) {
+ logger.debug("鏌ヨgetWaitDispersedFeeDetail淇℃伅 鍏ュ弬 info : {}", info);
+
+ List<Map> businessPayFeeDetailMonthInfos = sqlSessionTemplate.selectList("payFeeDetailMonthServiceDaoImpl.getWaitDispersedFeeDetail", info);
+
+ return businessPayFeeDetailMonthInfos;
+ }
+
+ @Override
+ public void deletePayFeeDetailMonthInfo(Map info) {
+ sqlSessionTemplate.update("payFeeDetailMonthServiceDaoImpl.deletePayFeeDetailMonthInfo", info);
+ }
+
}
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java b/service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java
index fb9ed97..16327b0 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java
@@ -45,4 +45,7 @@
String getFeeFeeTime(List<FeeDetailDto> feeDetailDtos, String detailId);
+ void waitDispersedFeeDetail(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto);
+
+ void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime);
}
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
index 16a4483..be4bddb 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -1,11 +1,15 @@
package com.java110.fee.feeMonth;
+import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.smo.IComputeFeeSMO;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.fee.FeeDto;
+import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
import com.java110.dto.payFeeDetailMonth.PayFeeMonthOwnerDto;
import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
+import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import org.springframework.beans.BeanUtils;
@@ -13,10 +17,7 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Service
public class PayFeeMonthHelp implements IPayFeeMonthHelp {
@@ -26,6 +27,9 @@
@Autowired
private IComputeFeeSMO computeFeeSMOImpl;
+
+ @Autowired
+ private IPayFeeDetailMonthInnerServiceSMO payFeeDetailMonthInnerServiceSMOImpl;
public PayFeeMonthOwnerDto generatorOwnerRoom(FeeDto feeDto) {
@@ -144,6 +148,231 @@
}
/**
+ * 澶勭悊宸茬粡浜よ繃璐圭殑璁板綍澶勭悊
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ */
+ @Autowired
+ public void waitDispersedFeeDetail(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto) {
+ PayFeeDetailMonthDto payFeeDetailMonthDto = new PayFeeDetailMonthDto();
+ payFeeDetailMonthDto.setCommunityId(feeDto.getCommunityId());
+ payFeeDetailMonthDto.setFeeId(feeDto.getFeeId());
+ List<FeeDetailDto> feeDetailDtos = payFeeDetailMonthInnerServiceSMOImpl.getWaitDispersedFeeDetail(payFeeDetailMonthDto);
+
+ if (feeDetailDtos == null || feeDetailDtos.size() < 1) {
+ return;
+ }
+
+ for (FeeDetailDto feeDetailDto : feeDetailDtos) {
+ // todo 閫愭潯鍘荤鏁�
+ doDispersedFeeDetail(feeDetailDto, feeDto, payFeeMonthOwnerDto);
+ }
+ }
+
+
+ /**
+ * 澶勭悊 娆犺垂 绂绘暎
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param feePrice
+ * @param deadlineTime
+ */
+ @Autowired
+ public void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime) {
+ // todo 璐圭敤宸茬粡缁撴潫
+ if(FeeDto.STATE_FINISH.equals(feeDto.getState())){
+ return ;
+ }
+
+ // todo 娓呯悊 detailId 涓�-1 鐨勬暟鎹�
+ PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ payFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
+ payFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ payFeeDetailMonthPo.setDetailId("-1");
+ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+
+ List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
+ // todo 澶勭悊 寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+ Date startTime = DateUtil.timeToDate(feeDto.getEndTime());
+ Date endTime = DateUtil.timeToDate(deadlineTime);
+
+ BigDecimal receivableAmount = new BigDecimal(feePrice);
+
+ // todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
+ Calendar firstMonthDayCal = Calendar.getInstance();
+ firstMonthDayCal.setTime(startTime);
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayCal.set(Calendar.DAY_OF_MONTH, 1);
+ Date firstMonthDayTime = firstMonthDayCal.getTime();
+
+ Date startMonthDayTime = startTime;
+ // todo 寰幆锛屽彧鍒� firstMonthDayTime 澶т簬 endTime
+ int curDay = 0;
+ int curMonthMaxDay = 30;
+ BigDecimal curMonthReceivableAmount = null;
+ BigDecimal dayReceivableAmount = null;
+ while (firstMonthDayTime.getTime() > endTime.getTime()) {
+ curDay = DateUtil.daysBetween(firstMonthDayTime, startMonthDayTime);
+
+ // todo 璁$畻褰撴湀澶╂暟
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(startMonthDayTime);
+ curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+ dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto,payFeeDetailMonthPos,startMonthDayTime);
+
+ // todo 灏唖tartTime 淇敼涓� 涓嬫湀1鏃ユ椂闂�
+ startMonthDayTime = firstMonthDayTime;
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayTime = firstMonthDayCal.getTime();
+ }
+
+ //todo 鏈�鍚庡鐞� 鏈�鍚� startMonthDayTime 鍒癳ndTime 鐨�
+ if (startMonthDayTime.getTime() >= endTime.getTime()) {
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ return;
+ }
+
+ curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
+
+ // todo 璁$畻褰撴湀澶╂暟
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(startMonthDayTime);
+ curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+ dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto,payFeeDetailMonthPos,startMonthDayTime);
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+
+ }
+
+ private void doDispersedFeeDetail(FeeDetailDto feeDetailDto, FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto) {
+ List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
+
+ // todo 鍘婚櫎 寮�濮嬫椂闂村拰 缁撴潫鏃堕棿鐨� 灏忔椂 鍒嗛挓 绉�
+ Date startTime = DateUtil.timeToDate(feeDetailDto.getStartTime());
+ Date endTime = DateUtil.timeToDate(feeDetailDto.getEndTime());
+
+ int day = DateUtil.daysBetween(endTime, startTime);
+ if (day < 1) {
+ day = 1;
+ }
+
+ BigDecimal receivableAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivableAmount()));
+ BigDecimal receivedAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivedAmount()));
+
+ BigDecimal dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
+ BigDecimal dayReceivedAmount = receivedAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+
+ // todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
+ Calendar firstMonthDayCal = Calendar.getInstance();
+ firstMonthDayCal.setTime(startTime);
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayCal.set(Calendar.DAY_OF_MONTH, 1);
+ Date firstMonthDayTime = firstMonthDayCal.getTime();
+
+ Date startMonthDayTime = startTime;
+ // todo 寰幆锛屽彧鍒� firstMonthDayTime 澶т簬 endTime
+ int curDay = 0;
+ BigDecimal curMonthReceivableAmount = null;
+ BigDecimal curMonthReceivedAmount = null;
+ while (firstMonthDayTime.getTime() > endTime.getTime()) {
+ curDay = DateUtil.daysBetween(firstMonthDayTime, startMonthDayTime);
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+ // todo 璁$畻 瀹炴敹
+ curMonthReceivedAmount = new BigDecimal(curDay).multiply(dayReceivedAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto,payFeeDetailMonthPos,startMonthDayTime);
+
+ // todo 灏唖tartTime 淇敼涓� 涓嬫湀1鏃ユ椂闂�
+ startMonthDayTime = firstMonthDayTime;
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayTime = firstMonthDayCal.getTime();
+ }
+
+ //todo 鏈�鍚庡鐞� 鏈�鍚� startMonthDayTime 鍒癳ndTime 鐨�
+ if (startMonthDayTime.getTime() >= endTime.getTime()) {
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ return;
+ }
+
+ curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+ // todo 璁$畻 瀹炴敹
+ curMonthReceivedAmount = new BigDecimal(curDay).multiply(dayReceivedAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto,payFeeDetailMonthPos,startMonthDayTime);
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+
+ }
+
+ /**
+ * 淇濆瓨鏁版嵁
+ *
+ * @param receivableAmount
+ * @param receivedAmount
+ * @param feeDetailDto
+ * @param feeDto
+ */
+ private void toSavePayFeeDetailMonth(double receivableAmount,
+ double receivedAmount,
+ FeeDetailDto feeDetailDto,
+ FeeDto feeDto,
+ PayFeeMonthOwnerDto payFeeMonthOwnerDto,
+ List<PayFeeDetailMonthPo> payFeeDetailMonthPos,
+ Date curTime) {
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(curTime);
+ PayFeeDetailMonthPo tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
+ if(feeDetailDto == null){
+ tmpPayFeeDetailMonthPo.setDetailId("-1");
+ }else{ // todo 浜よ垂璁板綍 淇濆瓨鏃�
+ tmpPayFeeDetailMonthPo.setDetailId(feeDetailDto.getDetailId());
+ }
+ tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
+ tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
+
+ tmpPayFeeDetailMonthPo.setReceivableAmount(receivableAmount + "");
+ tmpPayFeeDetailMonthPo.setReceivedAmount(receivedAmount + "");
+ tmpPayFeeDetailMonthPo.setDiscountAmount(
+ getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
+ Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
+ calendar.getTime(), feeDto) + "");
+ tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
+ tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
+ tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
+ tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
+ tmpPayFeeDetailMonthPo.setOwnerId(payFeeMonthOwnerDto.getOwnerId());
+ tmpPayFeeDetailMonthPo.setOwnerName(payFeeMonthOwnerDto.getOwnerName());
+ tmpPayFeeDetailMonthPo.setLink(payFeeMonthOwnerDto.getLink());
+ tmpPayFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+ if(feeDetailDto == null){
+ tmpPayFeeDetailMonthPo.setPayFeeTime(null);
+ }else{ // todo 浜よ垂璁板綍 淇濆瓨鏃�
+ tmpPayFeeDetailMonthPo.setPayFeeTime(DateUtil.getFormatTimeStringA(feeDetailDto.getCreateTime()));
+ }
+ tmpPayFeeDetailMonthPo.setState("W"); // todo 杩欓噷鏆傛椂鍐欐锛岀洰鍓嶇敤涓嶅埌锛岀畻鏄鐣欏瓧娈�
+ tmpPayFeeDetailMonthPo.setFeeName(feeDto.getFeeName());
+ tmpPayFeeDetailMonthPo.setConfigId(feeDto.getConfigId());
+ payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
+
+ }
+
+ /**
* 鑾峰彇褰撳墠缂磋垂璁板綍
*
* @param feeDetailDtos
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
index 24ad362..8cf7019 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
@@ -17,10 +17,14 @@
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
import java.util.*;
/**
* 璐圭敤绂绘暎涓烘湀 瀹炵幇绫�
+ * V2
+ * <p>
+ * case 1 瀹氭椂浠诲姟 璋冪敤
*/
@Service
public class PayFeeMonthImpl implements IPayFeeMonth {
@@ -46,128 +50,8 @@
public static final int DEFAULT_DEAL_COUNT = 200;
-
/**
- * 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
- *
- * @param feeId
- * @param communityId
- */
- @Override
- public void doGeneratorOrRefreshFeeMonth(String feeId, String communityId) {
-
- // todo 鏌ヨ璐圭敤
- FeeDto feeDto = new FeeDto();
- feeDto.setCommunityId(communityId);
- feeDto.setFeeId(feeId);
- List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
-
- Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
-
- doGeneratorOrRefreshFeeMonth(tmpFeeDtos.get(0), communityId);
- }
-
- public void doGeneratorOrRefreshFeeMonth(FeeDto feeDto, String communityId) {
-
-
- //todo 璁$畻姣忔湀鍗曚环
- Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
-
- // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
- PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
-
- //todo 绂绘暎start_time 鎴栬�� pay_fee_detail_month 鏈�澶ф湀浠� 鍒� deadlineTime 鐨勬暟鎹�
- maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
-
-
- }
-
- /**
- * 绂绘暎鏈�澶� 绂绘暎鏈堝埌 deadlineTime 鐨勬暟鎹�
- *
- * @param feeDto
- * @param payFeeMonthOwnerDto
- * @param feePrice
- */
- private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
- PayFeeDetailMonthDto payFeeDetailMonthDto = new PayFeeDetailMonthDto();
- payFeeDetailMonthDto.setCommunityId(feeDto.getCommunityId());
- payFeeDetailMonthDto.setFeeId(feeDto.getFeeId());
- List<PayFeeDetailMonthDto> payFeeDetailMonthDtos = payFeeDetailMonthInnerServiceSMOImpl.queryPayFeeDetailMaxMonths(payFeeDetailMonthDto);
- Date startTime = null;
- Date deadlineTime = computeFeeSMOImpl.getDeadlineTime(feeDto);
- if (payFeeDetailMonthDtos == null || payFeeDetailMonthDtos.size() < 1) {
- startTime = feeDto.getStartTime();
- } else {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(DateUtil.getDateFromStringA(payFeeDetailMonthDtos.get(0).getCurMonthTime()));
- calendar.add(Calendar.MONTH, 1);
- startTime = calendar.getTime();
- }
-
- // todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
- doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, startTime, deadlineTime);
-
- }
-
- private void doGeneratorTimeMonthData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date startTime, Date endTime) {
- double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, endTime));
-
- if (maxMonth < 1) {
- return;
- }
- //todo 鏌ヨ 缂磋垂鏄庣粏
- FeeDetailDto feeDetailDto = new FeeDetailDto();
- feeDetailDto.setCommunityId(feeDto.getCommunityId());
- feeDetailDto.setFeeId(feeDto.getFeeId());
- feeDetailDto.setStates(new String[]{FeeDetailDto.STATE_NORMAL,FeeDetailDto.STATE_RETURNING});
- List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
-
- //todo 鐢熸垚 鏈堢鏁f暟鎹�
- PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
- List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
- double receivableAmount = 0.0;
- for (int month = 0; month < maxMonth; month++) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(startTime);
- calendar.add(Calendar.MONTH, month);
- //calendar.set(Calendar.DAY_OF_MONTH, 1);
- tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
- tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
- tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
- tmpPayFeeDetailMonthPo.setDetailId(payFeeMonthHelp.getFeeDetailId(feeDetailDtos, calendar.getTime()));
- tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
- tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
- receivableAmount = payFeeMonthHelp.getReceivableAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto);
- //todo 搴旀敹灏忎簬绛変簬0 涓嶇粺璁�
- if(receivableAmount <=0){
- continue;
- }
- tmpPayFeeDetailMonthPo.setReceivableAmount( receivableAmount + "");
- tmpPayFeeDetailMonthPo.setReceivedAmount(payFeeMonthHelp.getReceivedAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto) + "");
- tmpPayFeeDetailMonthPo.setDiscountAmount(
- payFeeMonthHelp.getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
- Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
- calendar.getTime(), feeDto) + "");
- tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
- tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
- tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
- tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
- tmpPayFeeDetailMonthPo.setOwnerId(payFeeMonthOwnerDto.getOwnerId());
- tmpPayFeeDetailMonthPo.setOwnerName(payFeeMonthOwnerDto.getOwnerName());
- tmpPayFeeDetailMonthPo.setLink(payFeeMonthOwnerDto.getLink());
- tmpPayFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
- tmpPayFeeDetailMonthPo.setPayFeeTime(payFeeMonthHelp.getFeeFeeTime(feeDetailDtos, tmpPayFeeDetailMonthPo.getDetailId()));
- tmpPayFeeDetailMonthPo.setState("W"); // todo 杩欓噷鏆傛椂鍐欐锛岀洰鍓嶇敤涓嶅埌锛岀畻鏄鐣欏瓧娈�
- tmpPayFeeDetailMonthPo.setFeeName(feeDto.getFeeName());
- tmpPayFeeDetailMonthPo.setConfigId(feeDto.getConfigId());
- payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
- }
- payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
- }
-
- /**
- * 灏忓尯鏁版嵁 绂绘暎涓� 鏈堟暟鎹�
+ * 1.0 瀹氭椂浠诲姟绂绘暎 灏忓尯鏁版嵁 绂绘暎涓� 鏈堟暟鎹�
*
* @param communityId
*/
@@ -203,7 +87,7 @@
}
/**
- * 鐗╀笟缂磋垂鏃剁鏁� 鎶ヨ〃鏁版嵁
+ * 2.0 鐗╀笟缂磋垂鏃剁鏁� 鎶ヨ〃鏁版嵁
*
* @param feeId
* @param detailId
@@ -239,9 +123,38 @@
doDeletePayFeeDetailInMonth(feeDto, feeDetailDtos.get(0));
// todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
- doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, feeDetailDtos.get(0).getStartTime(), feeDetailDtos.get(0).getEndTime());
+ maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
}
+ /**
+ * 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
+ *
+ * @param feeId
+ * @param communityId
+ */
+ @Override
+ public void doGeneratorOrRefreshFeeMonth(String feeId, String communityId) {
+
+ // todo 鏌ヨ璐圭敤
+ FeeDto feeDto = new FeeDto();
+ feeDto.setCommunityId(communityId);
+ feeDto.setFeeId(feeId);
+ List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+ Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
+
+ doGeneratorOrRefreshFeeMonth(tmpFeeDtos.get(0), communityId);
+ }
+
+
+
+
+ /**
+ * 鍒犻櫎鏈堣垂鐢�
+ *
+ * @param feeId
+ * @param communityId
+ */
@Override
public void deleteFeeMonth(String feeId, String communityId) {
@@ -251,6 +164,42 @@
payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
}
+ private void doGeneratorOrRefreshFeeMonth(FeeDto feeDto, String communityId) {
+
+ //todo 璁$畻姣忔湀鍗曚环
+ Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
+
+ // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
+ PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
+
+ //todo 绂绘暎start_time 鎴栬�� pay_fee_detail_month 鏈�澶ф湀浠� 鍒� deadlineTime 鐨勬暟鎹�
+ maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
+
+
+ }
+
+ /**
+ * 绂绘暎鏈�澶� 绂绘暎鏈堝埌 deadlineTime 鐨勬暟鎹�
+ * <p>
+ * 鏍稿績鏂规硶澶勭悊
+ *
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param feePrice
+ */
+ private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
+
+ //todo 澶勭悊宸茬粡浜よ繃璐圭殑璁板綍澶勭悊
+ payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto);
+
+
+ //todo 澶勭悊 endTime 鍒� deadlineTime 鐨勮垂鐢�
+ Date deadlineTime = computeFeeSMOImpl.getDeadlineTime(feeDto);
+ payFeeMonthHelp.waitDispersedOweFee(feeDto,payFeeMonthOwnerDto,feePrice,deadlineTime);
+
+ }
+
+
/**
* 鍒犻櫎缂磋垂鑼冨洿鍐呯殑鏁版嵁
*
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImplV1.txt b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImplV1.txt
new file mode 100644
index 0000000..6277391
--- /dev/null
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImplV1.txt
@@ -0,0 +1,288 @@
+package com.java110.fee.feeMonth;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.core.smo.IComputeFeeSMO;
+import com.java110.dto.fee.FeeDetailDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
+import com.java110.dto.payFeeDetailMonth.PayFeeMonthOwnerDto;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
+import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
+import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璐圭敤绂绘暎涓烘湀 瀹炵幇绫�
+ */
+//@Service
+public class PayFeeMonthImplV1 implements IPayFeeMonth {
+ private static Logger logger = LoggerFactory.getLogger(PayFeeMonthImplV1.class);
+
+ @Autowired
+ private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+ @Autowired
+ private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IPayFeeDetailMonthInnerServiceSMO payFeeDetailMonthInnerServiceSMOImpl;
+
+ @Autowired
+ private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+ @Autowired
+ private IPayFeeMonthHelp payFeeMonthHelp;
+
+ @Autowired
+ private IComputeFeeSMO computeFeeSMOImpl;
+
+ public static final int DEFAULT_DEAL_COUNT = 200;
+
+
+ /**
+ * 鐢熸垚鍗曚釜璐圭敤 骞� 绂绘暎鍒版湀
+ *
+ * @param feeId
+ * @param communityId
+ */
+ @Override
+ public void doGeneratorOrRefreshFeeMonth(String feeId, String communityId) {
+
+ // todo 鏌ヨ璐圭敤
+ FeeDto feeDto = new FeeDto();
+ feeDto.setCommunityId(communityId);
+ feeDto.setFeeId(feeId);
+ List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+ Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
+
+ doGeneratorOrRefreshFeeMonth(tmpFeeDtos.get(0), communityId);
+ }
+
+ public void doGeneratorOrRefreshFeeMonth(FeeDto feeDto, String communityId) {
+
+
+ //todo 璁$畻姣忔湀鍗曚环
+ Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
+
+ // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
+ PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
+
+ //todo 绂绘暎start_time 鎴栬�� pay_fee_detail_month 鏈�澶ф湀浠� 鍒� deadlineTime 鐨勬暟鎹�
+ maxMonthDateToDeadlineTimeData(feeDto, payFeeMonthOwnerDto, feePrice);
+
+
+ }
+
+ /**
+ * 绂绘暎鏈�澶� 绂绘暎鏈堝埌 deadlineTime 鐨勬暟鎹�
+ *
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param feePrice
+ */
+ private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
+ PayFeeDetailMonthDto payFeeDetailMonthDto = new PayFeeDetailMonthDto();
+ payFeeDetailMonthDto.setCommunityId(feeDto.getCommunityId());
+ payFeeDetailMonthDto.setFeeId(feeDto.getFeeId());
+ List<PayFeeDetailMonthDto> payFeeDetailMonthDtos = payFeeDetailMonthInnerServiceSMOImpl.queryPayFeeDetailMaxMonths(payFeeDetailMonthDto);
+ Date startTime = null;
+ Date deadlineTime = computeFeeSMOImpl.getDeadlineTime(feeDto);
+ if (payFeeDetailMonthDtos == null || payFeeDetailMonthDtos.size() < 1) {
+ startTime = feeDto.getStartTime();
+ } else {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(DateUtil.getDateFromStringA(payFeeDetailMonthDtos.get(0).getCurMonthTime()));
+ calendar.add(Calendar.MONTH, 1);
+ startTime = calendar.getTime();
+ }
+
+ // todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
+ doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, startTime, deadlineTime);
+
+ }
+
+ private void doGeneratorTimeMonthData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date startTime, Date endTime) {
+ double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(startTime, endTime));
+
+ if (maxMonth < 1) {
+ return;
+ }
+ //todo 鏌ヨ 缂磋垂鏄庣粏
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setCommunityId(feeDto.getCommunityId());
+ feeDetailDto.setFeeId(feeDto.getFeeId());
+ feeDetailDto.setStates(new String[]{FeeDetailDto.STATE_NORMAL,FeeDetailDto.STATE_RETURNING});
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+
+ //todo 鐢熸垚 鏈堢鏁f暟鎹�
+ PayFeeDetailMonthPo tmpPayFeeDetailMonthPo;
+ List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
+ double receivableAmount = 0.0;
+ for (int month = 0; month < maxMonth; month++) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(startTime);
+ calendar.add(Calendar.MONTH, month);
+ //calendar.set(Calendar.DAY_OF_MONTH, 1);
+ tmpPayFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ tmpPayFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ tmpPayFeeDetailMonthPo.setCommunityId(feeDto.getCommunityId());
+ tmpPayFeeDetailMonthPo.setDetailId(payFeeMonthHelp.getFeeDetailId(feeDetailDtos, calendar.getTime()));
+ tmpPayFeeDetailMonthPo.setDetailYear(calendar.get(Calendar.YEAR) + "");
+ tmpPayFeeDetailMonthPo.setDetailMonth((calendar.get(Calendar.MONTH) + 1) + "");
+ receivableAmount = payFeeMonthHelp.getReceivableAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto);
+ //todo 搴旀敹灏忎簬绛変簬0 涓嶇粺璁�
+ if(receivableAmount <=0){
+ continue;
+ }
+ tmpPayFeeDetailMonthPo.setReceivableAmount( receivableAmount + "");
+ tmpPayFeeDetailMonthPo.setReceivedAmount(payFeeMonthHelp.getReceivedAmount(feeDetailDtos, feePrice, calendar.getTime(), feeDto) + "");
+ tmpPayFeeDetailMonthPo.setDiscountAmount(
+ payFeeMonthHelp.getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
+ Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
+ calendar.getTime(), feeDto) + "");
+ tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
+ tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
+ tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
+ tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
+ tmpPayFeeDetailMonthPo.setOwnerId(payFeeMonthOwnerDto.getOwnerId());
+ tmpPayFeeDetailMonthPo.setOwnerName(payFeeMonthOwnerDto.getOwnerName());
+ tmpPayFeeDetailMonthPo.setLink(payFeeMonthOwnerDto.getLink());
+ tmpPayFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+ tmpPayFeeDetailMonthPo.setPayFeeTime(payFeeMonthHelp.getFeeFeeTime(feeDetailDtos, tmpPayFeeDetailMonthPo.getDetailId()));
+ tmpPayFeeDetailMonthPo.setState("W"); // todo 杩欓噷鏆傛椂鍐欐锛岀洰鍓嶇敤涓嶅埌锛岀畻鏄鐣欏瓧娈�
+ tmpPayFeeDetailMonthPo.setFeeName(feeDto.getFeeName());
+ tmpPayFeeDetailMonthPo.setConfigId(feeDto.getConfigId());
+ payFeeDetailMonthPos.add(tmpPayFeeDetailMonthPo);
+ }
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ }
+
+ /**
+ * 灏忓尯鏁版嵁 绂绘暎涓� 鏈堟暟鎹�
+ *
+ * @param communityId
+ */
+ @Async
+ @Override
+ public void doGeneratorOrRefreshAllFeeMonth(String communityId) {
+
+
+ FeeDto feeDto = new FeeDto();
+ feeDto.setCommunityId(communityId);
+ int count = feeInnerServiceSMOImpl.queryFeesCount(feeDto);
+
+ int page = 1;
+ int max = 15;
+ if (count < DEFAULT_DEAL_COUNT) {
+ page = 1;
+ max = count;
+ } else {
+ page = (int) Math.ceil((double) count / (double) DEFAULT_DEAL_COUNT);
+ max = DEFAULT_DEAL_COUNT;
+ }
+
+ //todo 姣忔鎸�200鏉″鐞�
+ for (int pageIndex = 0; pageIndex < page; pageIndex++) {
+ feeDto.setPage(pageIndex + 1);
+ feeDto.setRow(max);
+ List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+ // 绂绘暎璐圭敤
+ doTmpFeeDtoMonths(communityId, tmpFeeDtos);
+ }
+
+
+ }
+
+ /**
+ * 鐗╀笟缂磋垂鏃剁鏁� 鎶ヨ〃鏁版嵁
+ *
+ * @param feeId
+ * @param detailId
+ * @param communityId
+ */
+ @Async
+ @Override
+ public void payFeeDetailRefreshFeeMonth(String feeId, String detailId, String communityId) {
+ // todo 鏌ヨ璐圭敤
+ FeeDto feeDto = new FeeDto();
+ feeDto.setCommunityId(communityId);
+ feeDto.setFeeId(feeId);
+ List<FeeDto> tmpFeeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+ Assert.listOnlyOne(tmpFeeDtos, "璐圭敤涓嶅瓨鍦�");
+
+ //todo 鏌ヨ 缂磋垂鏄庣粏
+ FeeDetailDto feeDetailDto = new FeeDetailDto();
+ feeDetailDto.setCommunityId(feeDto.getCommunityId());
+ feeDetailDto.setFeeId(feeDto.getFeeId());
+ feeDetailDto.setDetailId(detailId);
+ List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+
+ Assert.listOnlyOne(feeDetailDtos, "缂磋垂璁板綍涓嶅瓨鍦�");
+
+ //todo 璁$畻姣忔湀鍗曚环
+ Double feePrice = payFeeMonthHelp.getMonthFeePrice(feeDto);
+
+ // todo 鍑嗗绂绘暎鐨勫熀纭�鏁版嵁
+ PayFeeMonthOwnerDto payFeeMonthOwnerDto = payFeeMonthHelp.generatorOwnerRoom(feeDto);
+
+ // todo 鍒犻櫎缂磋垂鏃堕棿鑼冨洿鍐呯殑鏁版嵁
+ doDeletePayFeeDetailInMonth(feeDto, feeDetailDtos.get(0));
+
+ // todo 鐢熸垚涓�娈垫椂闂村唴鐨勬暟鎹�
+ doGeneratorTimeMonthData(feeDto, payFeeMonthOwnerDto, feePrice, feeDetailDtos.get(0).getStartTime(), feeDetailDtos.get(0).getEndTime());
+ }
+
+ @Override
+ public void deleteFeeMonth(String feeId, String communityId) {
+
+ PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ payFeeDetailMonthPo.setFeeId(feeId);
+ payFeeDetailMonthPo.setCommunityId(communityId);
+ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+ }
+
+ /**
+ * 鍒犻櫎缂磋垂鑼冨洿鍐呯殑鏁版嵁
+ *
+ * @param feeDto
+ * @param feeDetailDto
+ */
+ private void doDeletePayFeeDetailInMonth(FeeDto feeDto, FeeDetailDto feeDetailDto) {
+
+ PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
+ payFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(feeDetailDto.getStartTime());
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
+ payFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+ payFeeDetailMonthPo.setCurMonthEndTime(DateUtil.getFormatTimeStringB(feeDetailDto.getEndTime()));
+ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+ }
+
+ private void doTmpFeeDtoMonths(String communityId, List<FeeDto> tmpFeeDtos) {
+ for (FeeDto tmpFeeDto : tmpFeeDtos) {
+ try {
+ doGeneratorOrRefreshFeeMonth(tmpFeeDto, communityId);
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.error("鐢熸垚璐圭敤鎶ヨ〃澶辫触" + JSONObject.toJSONString(tmpFeeDto), e);
+ }
+ }
+ }
+}
diff --git a/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeDetailMonthInnerServiceSMOImpl.java b/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeDetailMonthInnerServiceSMOImpl.java
index 3511863..3c9cbd2 100644
--- a/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeDetailMonthInnerServiceSMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeDetailMonthInnerServiceSMOImpl.java
@@ -3,6 +3,7 @@
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.PageDto;
+import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
import com.java110.fee.dao.IPayFeeDetailMonthServiceDao;
import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
@@ -41,8 +42,12 @@
@Override
public int savePayFeeDetailMonths(@RequestBody List<PayFeeDetailMonthPo> payFeeDetailMonthPos) {
int saveFlag = 1;
+ if (payFeeDetailMonthPos == null || payFeeDetailMonthPos.size() < 1) {
+ return saveFlag;
+ }
+
Map info = new HashMap();
- info.put("payFeeDetailMonthPos",payFeeDetailMonthPos);
+ info.put("payFeeDetailMonthPos", payFeeDetailMonthPos);
payFeeDetailMonthServiceDaoImpl.savePayFeeDetailMonthInfos(info);
return saveFlag;
}
@@ -57,8 +62,7 @@
@Override
public int deletePayFeeDetailMonth(@RequestBody PayFeeDetailMonthPo payFeeDetailMonthPo) {
int saveFlag = 1;
- payFeeDetailMonthPo.setStatusCd("1");
- payFeeDetailMonthServiceDaoImpl.updatePayFeeDetailMonthInfo(BeanConvertUtil.beanCovertMap(payFeeDetailMonthPo));
+ payFeeDetailMonthServiceDaoImpl.deletePayFeeDetailMonthInfo(BeanConvertUtil.beanCovertMap(payFeeDetailMonthPo));
return saveFlag;
}
@@ -97,6 +101,19 @@
return payFeeDetailMonths;
}
+ /**
+ * 鏌ヨ闇�瑕佺鏁g殑 缂磋垂璁板綍
+ *
+ * @param payFeeDetailMonthDto
+ * @return
+ */
+ @Override
+ public List<FeeDetailDto> getWaitDispersedFeeDetail(@RequestBody PayFeeDetailMonthDto payFeeDetailMonthDto) {
+ List<FeeDetailDto> payFeeDetailMonths = BeanConvertUtil.covertBeanList(payFeeDetailMonthServiceDaoImpl.getWaitDispersedFeeDetail(BeanConvertUtil.beanCovertMap(payFeeDetailMonthDto)), FeeDetailDto.class);
+
+ return payFeeDetailMonths;
+ }
+
public IPayFeeDetailMonthServiceDao getPayFeeDetailMonthServiceDaoImpl() {
return payFeeDetailMonthServiceDaoImpl;
}
--
Gitblit v1.8.0