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/DateUtil.java | 1
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java | 15 ++-
server/service/src/main/java/com/doumee/core/utils/Constants.java | 149 ++++++++++++++++++++++++++++++++++++
server/service/src/main/java/com/doumee/dao/business/vo/ChangeDealTypeVO.java | 23 +++++
server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java | 2
server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java | 2
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 15 ++-
7 files changed, 191 insertions(+), 16 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(),"鏂规閰嶇疆閿欒");
+ }
+ }
+ }
}
diff --git a/server/service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/service/src/main/java/com/doumee/core/utils/DateUtil.java
index 7262f22..57536d2 100644
--- a/server/service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -3151,7 +3151,6 @@
public static void main(String[] args) {
-
}
/**
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
index 6bf85d6..2e53e7f 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
@@ -103,6 +103,8 @@
@ApiModelProperty(value = "鍗曚环(姣忔棩)", example = "1")
private BigDecimal price;
+ @ApiModelProperty(value = "鏇挎崲涓氬姟锛氬噺淇濇暟鎹噺灏戠殑閲戦", example = "1")
+ private BigDecimal reduceMoney;
@ApiModelProperty(value = "鍛樺伐鍚嶇О")
@TableField(exist = false)
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
index 7c7f991..7694fc1 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
@@ -116,7 +116,7 @@
// @ExcelColumn(name="褰撳墠璐圭敤")
private Integer reduceId;
- @ApiModelProperty(value = "鍔犲噺淇濇暟鎹姸鎬侊細0=姝e父锛�1=涓嶅彲鍑忎繚")
+ @ApiModelProperty(value = "鍔犲噺淇濇暟鎹姸鎬侊細0=姝e父锛�1=涓嶅彲鍑忎繚锛�2=鍑忎繚宸插彇娑�")
// @ExcelColumn(name="褰撳墠璐圭敤")
private Integer changeStatus;
diff --git a/server/service/src/main/java/com/doumee/dao/business/vo/ChangeDealTypeVO.java b/server/service/src/main/java/com/doumee/dao/business/vo/ChangeDealTypeVO.java
new file mode 100644
index 0000000..9670c24
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/vo/ChangeDealTypeVO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.business.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鍔犲噺淇濅笟鍔� 澶勭悊鍑忎繚鏁版嵁浣跨敤
+ * @author RenKang
+ */
+@Data
+public class ChangeDealTypeVO {
+
+ @ApiModelProperty(value = "鍗曞懆鏈熻垂鐢�", example = "1")
+ private BigDecimal singlePrice;
+
+ @ApiModelProperty(value = "鍑忎繚鏁版嵁鐘舵�侊細0=姝e父锛�1=涓嶅彲鍑忎繚锛�2=鍑忎繚宸插彇娑�")
+ private Integer changeStatus;
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
index 4a5ac91..e3e32ca 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.dao.business.dto.*;
import com.doumee.dao.business.join.*;
import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.ChangeDealTypeVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.ApplyChangeService;
@@ -685,6 +686,7 @@
.set(ApplyDetail::getEndTime, delValidTime)
.set(ApplyDetail::getEditor, update.getEditor())
.set(ApplyDetail::getEditDate, update.getEditDate())
+
.eq(ApplyDetail::getId, oldModel.getId())
);
totalFee = totalFee.add(updateFee).subtract(oldModel.getFee());
@@ -703,12 +705,6 @@
.set( ApplyChagneDetail::getEndTime, delValidTime)
.eq(ApplyChagneDetail::getId,detail.getId())
);
-
-// if(1==1){
-// throw new BusinessException(ResponseStatus.SERVER_ERROR);
-// }
-
-
}
member.setApplyId(update.getApplyId());
@@ -1219,6 +1215,7 @@
applyChagneDetail.setApplyDetailId(applyDetail.getId());
applyChagneDetail.setStartTime(applyDetail.getStartTime());
applyChagneDetail.setEndTime(endTime);
+ applyChagneDetail.setReduceMoney(BigDecimal.ZERO);
member.setApplyId(insuranceApply.getId());
member.setDuId(applyChagneDetail.getDuId());
@@ -1229,6 +1226,7 @@
//鏌ヨ鍑忎繚鏃ユ湡
// Integer delDays = DateUtil.daysBetweenDates(applyDetail.getEndTime(),endTime);
// ;
+
//鏌ヨ鍛ㄦ湡鏁伴噺
applyChagneDetail.setFee(
Constants.reduceFee(solutions,
@@ -1239,6 +1237,11 @@
applyDetail.getStartTime(),endTime)
.subtract(applyDetail.getFee()
));
+ //濡傛灉鏄噺淇濅笟鍔′负浠呮浛鎹� 涓� 鏂规鐨勬墸璐瑰懆鏈熷拰鎬诲懆鏈熺浉绛� 鍒欏鐞嗗噺淇濊垂鐢�
+ if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)
+ && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){
+ applyChagneDetail.setReduceMoney(solutions.getPrice().multiply(new BigDecimal(-1)));
+ }
applyChagneDetailJoinMapper.insert(applyChagneDetail);
}
}
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index fc48ad9..2e7eb25 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -385,11 +385,11 @@
if(dataList == null || dataList.size() ==0){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
}
- List<String> idCardList = dataList.stream().map(m->m.getIdCard()).collect(Collectors.toList());
- Set<String> set = new HashSet<>(idCardList);
- if(idCardList.size() != set.size()){
- throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁瀛樺湪韬唤璇佸彿鐩稿悓鏁版嵁锛�");
- }
+// List<String> idCardList = dataList.stream().map(m->m.getIdCard()).collect(Collectors.toList());
+// Set<String> set = new HashSet<>(idCardList);
+// if(idCardList.size() != set.size()){
+// throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁瀛樺湪韬唤璇佸彿鐩稿悓鏁版嵁锛�");
+// }
List<DispatchUnit> dispatchUnitList = new ArrayList<>();
if(!Objects.isNull(solutionId)){
dispatchUnitList = dispatchUnitJoinMapper.selectJoinList(DispatchUnit.class,
@@ -416,6 +416,7 @@
}
}
long index = Constants.TWO;
+ Map<String,String> idCardMap = new HashMap<>();
for(MemberImport model : dataList){
if(StringUtils.isBlank(model.getIdCard())||model.getIdCard().length()!=18){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉淇℃伅寮傚父锛�");
@@ -426,6 +427,10 @@
if(StringUtils.isBlank(model.getName())){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹鍚嶄俊鎭紓甯革紒");
}
+ if(Objects.nonNull(idCardMap.get(model.getIdCard()))){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉鍙枫��"+model.getIdCard()+"銆戝瓨鍦ㄧ浉鍚屾暟鎹紒");
+ }
+ idCardMap.put(model.getIdCard(), model.getIdCard());
index = index + Constants.ONE;
if(CollectionUtils.isNotEmpty(list)){
Optional<Member> memberOptional= list.stream().filter(m->m.getIdcardNo().equals(model.getIdCard())).findFirst();
--
Gitblit v1.9.3