From f44187822ea6217070c0f6fc585c3feadea03cb1 Mon Sep 17 00:00:00 2001
From: chengf <2156125618@qq.com>
Date: 星期三, 13 八月 2025 09:30:18 +0800
Subject: [PATCH] 折扣逻辑修改2025/08/13
---
service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java | 242 ++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 222 insertions(+), 20 deletions(-)
diff --git a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
index 7a9e62d..469e383 100755
--- a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
@@ -256,6 +256,136 @@
return computeDiscountDtoList;
}
+
+ public List<ComputeDiscountDto> computeDiscount(@RequestBody FeeDetailDto feeDetailDto,double useCycle) {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar c = Calendar.getInstance();
+ List<ComputeDiscountDto> computeDiscountDtos = new ArrayList<>();
+ FeeDto feeDto = new FeeDto();
+ feeDto.setFeeId(feeDetailDto.getFeeId());
+ feeDto.setCommunityId(feeDetailDto.getCommunityId());
+ feeDto.setState(FeeDto.STATE_DOING);
+ List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+ Assert.listOnlyOne(feeDtos, "璐圭敤涓嶅瓨鍦�");
+ PayFeeConfigDiscountDto payFeeConfigDiscountDto = new PayFeeConfigDiscountDto();
+ payFeeConfigDiscountDto.setConfigId(feeDtos.get(0).getConfigId());
+ payFeeConfigDiscountDto.setRow(feeDetailDto.getRow());
+ payFeeConfigDiscountDto.setPage(feeDetailDto.getPage());
+ payFeeConfigDiscountDto.setCommunityId(feeDetailDto.getCommunityId());
+ payFeeConfigDiscountDto.setStatusCd("0");
+ Date currentTime = new Date();
+ payFeeConfigDiscountDto.setCurrentTime(currentTime);
+ //鏍规嵁鎴垮眿ID,鍘绘姌鎵g敵璇疯〃鏌ヨ鏄惁鏈夋姌鎵�
+ ApplyRoomDiscountDto applyRoomDiscountDto = new ApplyRoomDiscountDto();
+ //瀹℃牳宸查�氳繃
+ applyRoomDiscountDto.setState("4");
+ //鏄惁鍙敤鐘舵�佹爣璇�(0琛ㄧず鍦ㄧ敤锛�1琛ㄧず涓嶅彲鐢�)
+ applyRoomDiscountDto.setInUse("0");
+ //灏忓尯ID
+ applyRoomDiscountDto.setCommunityId(feeDetailDto.getCommunityId());
+ //鎴垮眿id
+ applyRoomDiscountDto.setRoomId(feeDetailDto.getPayerObjId());
+
+ applyRoomDiscountDto.setFeeId(feeDetailDto.getFeeId());
+ List<ApplyRoomDiscountDto> applyRoomDiscountDtos = applyRoomDiscountInnerServiceSMOImpl.queryApplyRoomDiscounts(applyRoomDiscountDto);
+
+ if (!ListUtil.isNull(applyRoomDiscountDtos)) {
+ computeApplyRoomDiscount(feeDetailDto, simpleDateFormat, c, computeDiscountDtos,useCycle);
+ //鍙栧嚭寮�鍏虫槧灏勭殑鍊�
+ String value = MappingCache.getValue(DOMAIN_COMMON, DISCOUNT_MODE);
+ List<ComputeDiscountDto> computeDiscountDtoList = new ArrayList<>();
+ for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) {
+ computeDiscountDto.setValue(value);
+
+ computeDiscountDto.setDiscountPrice(
+ MoneyUtil.computePriceScale(
+ computeDiscountDto.getDiscountPrice(),
+ feeDtos.get(0).getScale(),
+ Integer.parseInt(feeDtos.get(0).getDecimalPlace())
+ )
+ );
+ if (!StringUtil.isEmpty(computeDiscountDto.getDiscountType()) && "3003".equals(computeDiscountDto.getDiscountType())) {
+ computeDiscountDto.setArdId(feeDetailDto.getArdId());
+ }
+ computeDiscountDtoList.add(computeDiscountDto);
+ }
+ return computeDiscountDtos;
+ }
+ //鏍规嵁璐圭敤椤规煡璇㈡姌鎵o紙璇ヨ垂鐢ㄩ」涓嬬殑鎵�鏈夋姌鎵d俊鎭級
+ List<PayFeeConfigDiscountDto> payFeeConfigDiscountDtos =
+ payFeeConfigDiscountInnerServiceSMOImpl.queryPayFeeConfigDiscounts(payFeeConfigDiscountDto);
+ c.setTime(feeDetailDto.getStartTime());
+ feeDetailDto.setCycles(useCycle+"");
+ double mon = Double.parseDouble(feeDetailDto.getCycles());
+ c.add(Calendar.MONTH, (int) mon);
+ //鑾峰彇缂磋垂缁撴潫鏃堕棿
+ Date finishTime = feeDetailDto.getEndTime();
+ for (PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto : payFeeConfigDiscountDtos) {
+ //鑾峰彇缂磋垂鏈�澶ф埅姝㈡椂闂�
+ Date payMaxEndTime = tmpPayFeeConfigDiscountDto.getPayMaxEndTime();
+ FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
+ feeDiscountDto.setDiscountId(tmpPayFeeConfigDiscountDto.getDiscountId());
+ //鏌ヨ鎵撴姌琛�
+ List<FeeDiscountDto> feeDiscountInfo = BeanConvertUtil.covertBeanList(feeDiscountServiceDaoImpl.getFeeDiscountInfo(BeanConvertUtil.beanCovertMap(feeDiscountDto)), FeeDiscountDto.class);
+ //Assert.listOnlyOne(feeDiscountInfo, "鏌ヨ鎵撴姌琛ㄩ敊璇紒");
+ if(ListUtil.isNull(feeDiscountInfo)){
+ continue;
+ }
+ FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
+ feeDiscountRuleDto.setRuleId(feeDiscountInfo.get(0).getRuleId());
+ //鏌ヨ鎵撴姌瑙勫垯琛�
+ List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
+ //Assert.listOnlyOne(feeDiscountRuleDtos, "鏌ヨ鎵撴姌瑙勫垯琛ㄩ敊璇紒");
+ if(ListUtil.isNull(feeDiscountRuleDtos)){
+ continue;
+ }
+ if (!StringUtil.isEmpty(feeDiscountRuleDtos.get(0).getBeanImpl()) && feeDiscountRuleDtos.get(0).getBeanImpl().equals("reductionMonthFeeRule")) { //璧犻�佽鍒�
+ FeeDiscountSpecDto feeDiscountSpecDto = new FeeDiscountSpecDto();
+ feeDiscountSpecDto.setDiscountId(tmpPayFeeConfigDiscountDto.getDiscountId());
+ feeDiscountSpecDto.setSpecId(SPEC_RATE);
+ //鏌ヨ鎵撴姌瑙勬牸
+ List<FeeDiscountSpecDto> feeDiscountSpecDtos = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpecDto);
+ //Assert.listOnlyOne(feeDiscountSpecDtos, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
+ if(ListUtil.isNull(feeDiscountSpecDtos)){
+ continue;
+ }
+ //鑾峰彇璧犻�佹湀浠�
+ String specValue = feeDiscountSpecDtos.get(0).getSpecValue();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(finishTime);
+ cal.add(Calendar.MONTH, Integer.parseInt(specValue));
+ finishTime = cal.getTime();
+ }
+ if (payMaxEndTime == null) {
+ doCompute(tmpPayFeeConfigDiscountDto, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+ } else if (payMaxEndTime.getTime() >= finishTime.getTime()) {
+ doCompute(tmpPayFeeConfigDiscountDto, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+ } else {
+ continue;
+ }
+ finishTime = c.getTime();
+ }
+ computeApplyRoomDiscount(feeDetailDto, simpleDateFormat, c, computeDiscountDtos);
+ //鍙栧嚭寮�鍏虫槧灏勭殑鍊�
+ String value = MappingCache.getValue(DOMAIN_COMMON, DISCOUNT_MODE);
+ List<ComputeDiscountDto> computeDiscountDtoList = new ArrayList<>();
+ for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) {
+ computeDiscountDto.setValue(value);
+ computeDiscountDto.setDiscountPrice(
+ MoneyUtil.computePriceScale(
+ computeDiscountDto.getDiscountPrice(),
+ feeDtos.get(0).getScale(),
+ Integer.parseInt(feeDtos.get(0).getDecimalPlace())
+ )
+ );
+ if (!StringUtil.isEmpty(computeDiscountDto.getDiscountType()) && "3003".equals(computeDiscountDto.getDiscountType())) {
+ computeDiscountDto.setArdId(feeDetailDto.getArdId());
+ }
+ computeDiscountDtoList.add(computeDiscountDto);
+ }
+ return computeDiscountDtoList;
+ }
+
private void computeApplyRoomDiscount(@RequestBody FeeDetailDto feeDetailDto, SimpleDateFormat simpleDateFormat, Calendar c, List<ComputeDiscountDto> computeDiscountDtos) {
if (!StringUtil.isEmpty(feeDetailDto.getPayerObjType()) && FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDetailDto.getPayerObjType())) {
//鏍规嵁鎴垮眿ID,鍘绘姌鎵g敵璇疯〃鏌ヨ鏄惁鏈夋姌鎵�
@@ -297,31 +427,102 @@
PayFeeConfigDiscountDto payFeeConfigDiscount = new PayFeeConfigDiscountDto();
payFeeConfigDiscount.setCommunityId(applyRoomDiscountDtos.get(0).getCommunityId());
payFeeConfigDiscount.setDiscountId(discountId);
- if(applyRoomDiscountDtos.get(0).getStartTime() == null){
- payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
- }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()).before(feeDetailDto.getStartTime())){
- payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
- }else{
- payFeeConfigDiscount.setStartTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()));
+ if(month == 105){
+ if(applyRoomDiscountDtos.get(0).getStartTime() == null){
+ payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+ }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()).before(feeDetailDto.getStartTime())){
+ payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+ }else{
+ payFeeConfigDiscount.setStartTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()));
+ }
+ if(applyRoomDiscountDtos.get(0).getEndTime() == null){
+ payFeeConfigDiscount.setEndTime(endTime);
+ }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()).after(feeDetailDto.getEndTime())){
+ payFeeConfigDiscount.setEndTime(feeDetailDto.getEndTime());
+ }else{
+ payFeeConfigDiscount.setEndTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()));
+ }
+ month =
+ DateUtil.dayCompare(
+ payFeeConfigDiscount.getStartTime(),
+ payFeeConfigDiscount.getEndTime()
+ );
}
- if(applyRoomDiscountDtos.get(0).getEndTime() == null){
- payFeeConfigDiscount.setEndTime(endTime);
- }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()).after(feeDetailDto.getEndTime())){
- payFeeConfigDiscount.setEndTime(feeDetailDto.getEndTime());
- }else{
- payFeeConfigDiscount.setEndTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()));
- }
- double cycle =
- DateUtil.dayCompare(
- payFeeConfigDiscount.getStartTime(),
- payFeeConfigDiscount.getEndTime()
- );
- doComputeB(payFeeConfigDiscount, cycle, computeDiscountDtos, feeDetailDto.getFeeId());
+ doComputeB(payFeeConfigDiscount, month, computeDiscountDtos, feeDetailDto.getFeeId(),month);
}
}
}
- private void doComputeB(PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto, double cycles, List<ComputeDiscountDto> computeDiscountDtos, String feeId) {
+
+
+ private void computeApplyRoomDiscount(@RequestBody FeeDetailDto feeDetailDto, SimpleDateFormat simpleDateFormat, Calendar c, List<ComputeDiscountDto> computeDiscountDtos,double useCycle) {
+ if (!StringUtil.isEmpty(feeDetailDto.getPayerObjType()) && FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDetailDto.getPayerObjType())) {
+ //鏍规嵁鎴垮眿ID,鍘绘姌鎵g敵璇疯〃鏌ヨ鏄惁鏈夋姌鎵�
+ ApplyRoomDiscountDto applyRoomDiscountDto = new ApplyRoomDiscountDto();
+ //瀹℃牳宸查�氳繃
+ applyRoomDiscountDto.setState("4");
+ //鏄惁鍙敤鐘舵�佹爣璇�(0琛ㄧず鍦ㄧ敤锛�1琛ㄧず涓嶅彲鐢�)
+ applyRoomDiscountDto.setInUse("0");
+ //灏忓尯ID
+ applyRoomDiscountDto.setCommunityId(feeDetailDto.getCommunityId());
+ //鎴垮眿id
+ applyRoomDiscountDto.setRoomId(feeDetailDto.getPayerObjId());
+ //寮�濮嬫椂闂�
+// applyRoomDiscountDto.setStartTime(simpleDateFormat.format(feeDetailDto.getStartTime()));
+ //缁撴潫鏃堕棿
+ c.setTime(feeDetailDto.getStartTime());
+// c.add(Calendar.DAY_OF_MONTH, 2);//寮�濮嬫椂闂达紝娣诲姞1锛�2澶╃殑鍐椾綑锛屽彧瑕佹瘮5灏忓嵆鍙�
+// applyRoomDiscountDto.setStartTime(simpleDateFormat.format(c.getTime()));//閲嶆柊璁剧疆寮�濮嬫椂闂�
+ double month = useCycle;
+// if(month == 105){
+// return;
+// }
+ c.add(Calendar.MONTH, (int) month);
+// c.add(Calendar.DAY_OF_MONTH, -5);//杩欓噷鏍规嵁璁剧疆鏃堕棿鑽h獕5澶�
+ Date endTime = c.getTime();
+// applyRoomDiscountDto.setEndTime(simpleDateFormat.format(endTime));
+ applyRoomDiscountDto.setFeeId(feeDetailDto.getFeeId());
+ //鏌ヨ鎶樻墸鐢宠琛�
+ List<ApplyRoomDiscountDto> applyRoomDiscountDtos = applyRoomDiscountInnerServiceSMOImpl.queryApplyRoomDiscounts(applyRoomDiscountDto);
+
+
+
+ //鍒ゆ柇鏌ヨ鐨勬姌鎵g敵璇疯〃鏄惁鏈夋暟鎹�
+ if (applyRoomDiscountDtos != null && applyRoomDiscountDtos.size() > 0) {
+ //鑾峰彇浼樻儬id
+ String discountId = applyRoomDiscountDtos.get(0).getDiscountId();
+ String ardId = applyRoomDiscountDtos.get(0).getArdId();
+ feeDetailDto.setArdId(ardId);
+ PayFeeConfigDiscountDto payFeeConfigDiscount = new PayFeeConfigDiscountDto();
+ payFeeConfigDiscount.setCommunityId(applyRoomDiscountDtos.get(0).getCommunityId());
+ payFeeConfigDiscount.setDiscountId(discountId);
+ if(feeDetailDto.getCycles().equals("105.0") ){
+ if(applyRoomDiscountDtos.get(0).getStartTime() == null){
+ payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+ }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()).before(feeDetailDto.getStartTime()) || DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()).equals(feeDetailDto.getStartTime())){
+ payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+ }else{
+ payFeeConfigDiscount.setStartTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()));
+ }
+ if(applyRoomDiscountDtos.get(0).getEndTime() == null){
+ payFeeConfigDiscount.setEndTime(endTime);
+ }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()).after(feeDetailDto.getEndTime()) || DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()).equals(feeDetailDto.getEndTime())){
+ payFeeConfigDiscount.setEndTime(feeDetailDto.getEndTime());
+ }else{
+ payFeeConfigDiscount.setEndTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()));
+ }
+ month =
+ DateUtil.dayCompare(
+ payFeeConfigDiscount.getStartTime(),
+ payFeeConfigDiscount.getEndTime()
+ );
+ }
+ doComputeB(payFeeConfigDiscount, month, computeDiscountDtos, feeDetailDto.getFeeId(),useCycle);
+ }
+ }
+ }
+
+ private void doComputeB(PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto, double cycles, List<ComputeDiscountDto> computeDiscountDtos, String feeId, double useCycle) {
FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
feeDiscountDto.setCommunityId(tmpPayFeeConfigDiscountDto.getCommunityId());
feeDiscountDto.setDiscountId(tmpPayFeeConfigDiscountDto.getDiscountId());
@@ -335,6 +536,7 @@
tmpFeeDiscountDto.setCycles(cycles);
}
IComputeDiscount computeDiscount = (IComputeDiscount) ApplicationContextFactory.getBean(feeDiscountDtos.get(0).getBeanImpl());
+ feeDiscountDtos.get(0).setDiscountDesc(useCycle+"");
ComputeDiscountDto computeDiscountDto = computeDiscount.compute(feeDiscountDtos.get(0));
if (computeDiscountDto == null) {
return;
--
Gitblit v1.8.0