From af9932d1d6fe3bd56799dcd8b4d76dc993c5c1db Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期三, 19 六月 2024 09:42:36 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/1.0.1' into 1.0.1 --- server/service/src/main/java/com/doumee/core/utils/Constants.java | 149 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 146 insertions(+), 3 deletions(-) diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java index a254342..15a4398 100644 --- a/server/service/src/main/java/com/doumee/core/utils/Constants.java +++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java @@ -4,7 +4,9 @@ import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.dto.CountCyclePriceDTO; +import com.doumee.dao.business.model.ApplyDetail; import com.doumee.dao.business.model.Solutions; +import com.doumee.dao.business.vo.ChangeDealTypeVO; import com.doumee.dao.business.vo.CountCyclePriceVO; import io.swagger.models.auth.In; import org.apache.commons.collections4.CollectionUtils; @@ -229,12 +231,124 @@ return countCyclePriceVO; } + //鏌ヨ姣忎釜鎵规敼鍛ㄦ湡璐圭敤 + public static BigDecimal calculateSingleCycleFee(Solutions solutions,Date startTime){ + if(Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ + return solutions.getPrice(); + } + CountCyclePriceVO countCyclePriceVO = Constants.countPriceVO(startTime,solutions); + //鍗曡璐瑰懆鏈熺殑璐圭敤 + BigDecimal singleFee = Constants.singleCycleFee(solutions,startTime,countCyclePriceVO.getEndDate()); + return singleFee; + } + /** * 鍔犲噺淇濅笟鍔′娇鐢� - * 鏍规嵁鏂规銆佸紑濮�/缁撴潫鏃ユ湡 + * 鍒ゆ柇鏄惁澶勪簬 鍛ㄦ湡鑺傜偣 + * 缁撴潫鏃ユ湡 鍏ョ殑鏃ユ湡涓烘壒鍗曟棩鏈� 鍓嶄竴澶� 23:59:59 + * @param solutions + * @param startTime + * @param endTime + * @return 0=鏃犲懆鏈熻垂鐢紱1=鏈夊懆鏈熻垂鐢紱2鏃犲懆鏈熻垂鐢� 涓� 鏁版嵁鏍囪鏃犳晥 */ - public void calculateRetreatCost(){ + public static ChangeDealTypeVO calculateRetreatCost(Solutions solutions , Date startTime , Date endTime){ + ChangeDealTypeVO changeDealTypeVO = new ChangeDealTypeVO(); + //鏌ヨ姣忎釜鍛ㄦ湡鐨勮垂鐢� + changeDealTypeVO.setSinglePrice(Constants.calculateSingleCycleFee(solutions,startTime)); + + //鎵瑰崟鏃ユ湡涓哄紑濮嬫棩鏈熺殑绗竴澶� 鍒欐爣璁版槑缁嗚褰曚负 鏃犳晥鏁版嵁 鎴栬�� 寮�濮嬫椂闂村ぇ浜庡綋鍓嶆椂闂� 鐩存帴杩斿洖 鏁版嵁鏍囪鏃犳晥 + if(startTime.getTime()>endTime.getTime() + || startTime.getTime() > System.currentTimeMillis()){ + changeDealTypeVO.setChangeStatus(Constants.TWO); + return changeDealTypeVO; + } + //鑾峰彇鏄ㄦ棩鏃ユ湡缁撴潫 涓哄疄闄呭噺淇濈粨鏉熸棩鏈熉� + Boolean isOver = true; + if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.DAY.getValue())){ + //鏂规 璁¤垂鍛ㄦ湡鍜屾壒鏀瑰懆鏈� 鐩稿悓 鐩存帴杩斿洖 鏈夊懆鏈熻垂鐢� + changeDealTypeVO.setChangeStatus(Constants.ONE); + return changeDealTypeVO; + }else if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.HALF_MONTH.getValue())){ + //鍗婃湀鍛ㄦ湡 浠�15.5璁$畻 鐢变簬15.5 鏃犳硶鏁撮櫎 鎵�浠ラ渶瑕佺壒娈婂鐞� + //濂囨暟/鍋舵暟 鐢ㄤ簬娣诲姞澶╂暟 濡傛灉鏄鏁� + BigDecimal cycleHalfMonth = new BigDecimal(15.5); + Integer cycle = 1; + while(isOver){ + //鑾峰彇鍛ㄦ湡鍚庣殑缁撴潫鏃堕棿 甯︽椂鍒嗙 23:59:59 + Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,0, cycleHalfMonth.multiply(new BigDecimal(cycle)).setScale(2,RoundingMode.HALF_UP).intValue() + ),2); + if(cycleEndTime.getTime()>=endTime.getTime()){ + isOver = false; + //褰撹璐瑰懆鏈熺殑缁撴潫鏃ユ湡 鍒氬ソ 涓庢壒鍗曟棩鏈熺殑缁撴潫鏃ユ湡鐩哥瓑 鍒� 涓嶉渶瑕佹墸闄ゆ壒鍗曞懆鏈熻垂鐢� + if(cycleEndTime.getTime()==endTime.getTime()){ + changeDealTypeVO.setChangeStatus(Constants.ZERO); + }else{ + changeDealTypeVO.setChangeStatus(Constants.ONE); + } + return changeDealTypeVO; + } + cycle = cycle + 1; + } + }else if(solutions.getInsureCycleUnit().equals(InsureCycleUnit.MONTH.getValue())){ + //鎵h垂鍛ㄦ湡涓烘湀 + Integer cycle = 1; + while(isOver){ + //鑾峰彇鍛ㄦ湡鍚庣殑缁撴潫鏃堕棿 甯︽椂鍒嗙 23:59:59 + Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); + //褰撳墠鍛ㄦ湡 澶т簬绛変簬 鎵瑰崟缁撴潫鏃ユ湡鏃� 锛� 鍒欑粨鏉熸祦绋� + if(cycleEndTime.getTime()>=endTime.getTime()){ + isOver = false; + //褰撹璐瑰懆鏈熺殑缁撴潫鏃ユ湡 鍒氬ソ 涓庢壒鍗曟棩鏈熺殑缁撴潫鏃ユ湡鐩哥瓑 鍒� 涓嶉渶瑕佹墸闄ゆ壒鍗曞懆鏈熻垂鐢� + if(cycleEndTime.getTime()==endTime.getTime()){ + changeDealTypeVO.setChangeStatus(Constants.ZERO); + }else{ + changeDealTypeVO.setChangeStatus(Constants.ONE); + } + return changeDealTypeVO; + } + cycle = cycle + 1; + } + }else if(solutions.getTimeUnit().equals(TimeUnit.QUARTER.getValue())){ + //鎵h垂鍛ㄦ湡涓哄搴� + Integer cycle = 3; + while(isOver){ + //鑾峰彇鍛ㄦ湡鍚庣殑缁撴潫鏃堕棿 甯︽椂鍒嗙 23:59:59 + Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); + //褰撳墠鍛ㄦ湡 澶т簬绛変簬 鎵瑰崟缁撴潫鏃ユ湡鏃� 锛� 鍒欑粨鏉熸祦绋� + if(cycleEndTime.getTime()>=endTime.getTime()){ + isOver = false; + //褰撹璐瑰懆鏈熺殑缁撴潫鏃ユ湡 鍒氬ソ 涓庢壒鍗曟棩鏈熺殑缁撴潫鏃ユ湡鐩哥瓑 鍒� 涓嶉渶瑕佹墸闄ゆ壒鍗曞懆鏈熻垂鐢� + if(cycleEndTime.getTime()==endTime.getTime()){ + changeDealTypeVO.setChangeStatus(Constants.ZERO); + }else{ + changeDealTypeVO.setChangeStatus(Constants.ONE); + } + return changeDealTypeVO; + } + cycle = cycle + 3; + } + }else if(solutions.getTimeUnit().equals(TimeUnit.HALF_YEAR.getValue())){ + //鎵h垂鍛ㄦ湡涓哄崐骞� + Integer cycle = 3; + while(isOver){ + //鑾峰彇鍛ㄦ湡鍚庣殑缁撴潫鏃堕棿 甯︽椂鍒嗙 23:59:59 + Date cycleEndTime = DateUtil.getMontageDate(DateUtil.afterDateByType(startTime,1,cycle),2); + //褰撳墠鍛ㄦ湡 澶т簬绛変簬 鎵瑰崟缁撴潫鏃ユ湡鏃� 锛� 鍒欑粨鏉熸祦绋� + if(cycleEndTime.getTime()>=endTime.getTime()){ + isOver = false; + //褰撹璐瑰懆鏈熺殑缁撴潫鏃ユ湡 鍒氬ソ 涓庢壒鍗曟棩鏈熺殑缁撴潫鏃ユ湡鐩哥瓑 鍒� 涓嶉渶瑕佹墸闄ゆ壒鍗曞懆鏈熻垂鐢� + if(cycleEndTime.getTime()==endTime.getTime()){ + changeDealTypeVO.setChangeStatus(Constants.ZERO); + }else{ + changeDealTypeVO.setChangeStatus(Constants.ONE); + } + return changeDealTypeVO; + } + cycle = cycle + 3; + } + } + throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"璁$畻鎵瑰崟鍛ㄦ湡淇℃伅寮傚父"); } @@ -2234,6 +2348,35 @@ } } - + public static BigDecimal singleCycleFee(Solutions solutions,Date startTime ,Date endTime){ + Integer countDays = DateUtil.daysBetweenDates(endTime, startTime) + 1; + Constants.TimeUnit timeUnit = Constants.TimeUnit.getTimeUnit(solutions.getTimeUnit()); + BigDecimal fee = solutions.getPrice(); + if(solutions.getTimeUnit().equals(solutions.getInsureCycleUnit())){ + return fee; + }else{ + if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){ + //澶╀负鎵规敼鍗曚綅 + return fee.divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP); + }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) { + //鏍规嵁鎶曚繚鍛ㄦ湡 瀹氫箟鐨� 姣忎釜鍛ㄦ湡 = X涓� 鍗婃湀鍛ㄦ湡 杩涜璁$畻 + // 鎬婚噾棰� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� + return fee.divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); + }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) { + // 鎬婚噾棰� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 2 + return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); + }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) { + //瀛e害涓烘壒鏀瑰崟浣� + // 鎬婚噾棰� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6 + return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); + }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) { + //鍗婂勾涓烘壒鏀瑰崟浣� + // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6 + return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP); + }else { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂规閰嶇疆閿欒"); + } + } + } } -- Gitblit v1.9.3