From 44a0ef1620cad87479390900eb6ded041c7b8d7b Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 17 五月 2024 16:56:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/1.0.1' into 1.0.1

---
 server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java |   58 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
index 6f0308e..041d2e8 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
@@ -156,7 +156,7 @@
                 .selectAs(Solutions::getOrtherInfo,UnionApply::getOrtherInfo)
                 .selectAs(Solutions::getSpecialAgreement,UnionApply::getSpecialAgreement)
                 .selectAs(Solutions::getSpecialInfo,UnionApply::getSpecialInfo);
-        queryWrapper.select("(select count(b.id) from apply_detail b where b.isdeleted=0 and b.union_apply_id=t.id) as insureNum ");
+        queryWrapper.select("(select count(distinct(b.MEMBER_ID)) from apply_detail b where b.isdeleted=0 and b.union_apply_id=t.id) as insureNum ");
 
         if(pageWrap.getModel().getQueryFlag() == 1){
             queryWrapper.select("(select count(1) from apply_change a inner join insurance_apply b on a.apply_id = b.id  where b.union_apply_id=t.id " +
@@ -246,7 +246,8 @@
         }
         if (pageWrap.getModel().getSignApplyNo() != null) {
             queryWrapper.eq(UnionApply::getSignApplyNo, pageWrap.getModel().getSignApplyNo());
-        }if(pageWrap.getSorts().size() == 0){
+        }
+        if(pageWrap.getSorts().size() == 0){
             queryWrapper.orderByDesc(UnionApply::getCreateDate );
         }else {
             for(PageWrap.SortData sortData: pageWrap.getSorts()) {
@@ -416,6 +417,14 @@
         if(solutions == null){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鏂规淇℃伅鏈夎锛岃鍒锋柊椤甸潰閲嶈瘯");
         }
+        //鏍规嵁鏂规鏌ヨ瀵瑰簲鐨勭粨鏉熸棩鏈�
+        CountCyclePriceDTO countCyclePriceDTO = new CountCyclePriceDTO();
+        countCyclePriceDTO.setSolutions(solutions);
+        countCyclePriceDTO.setStartDate(saveUnionApplyDTO.getStartDate());
+        Date endTime =  Constants.getCountCyclePriceVO(countCyclePriceDTO).getEndDate();
+        if(saveUnionApplyDTO.getEndDate().getTime()>endTime.getTime()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝缁撴潫鏃ユ湡瓒呭嚭鏂规鍙厑璁告棩鏈熷懆鏈燂紝璇锋洿鏀瑰悗閲嶈瘯锛�");
+        }
         List<InsuranceApply> insuranceApplyList = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class,
                 new MPJLambdaWrapper<InsuranceApply>()
                         .selectAll(InsuranceApply.class)
@@ -458,8 +467,9 @@
         }
         BigDecimal fee = BigDecimal.ZERO;
         for (ApplyDetail applyDetail:applyDetailList) {
-            Integer oldDays = DateUtil.calculateBetween(applyDetail.getStartTime(),applyDetail.getEndTime(),0);
-            fee =fee.add(new BigDecimal(maxDays).multiply( applyDetail.getFee()).divide(new BigDecimal(oldDays),2,RoundingMode.HALF_UP));
+            fee =fee.add(
+                    Constants.reduceFee(solutions,solutions.getPrice(),applyDetail.getStartTime(),applyDetail.getEndTime(),saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate())
+            );
         }
         unionApply.setFee(fee);
 
@@ -752,6 +762,18 @@
         if(!unionApply.getStatus().equals(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey())){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ュ悎骞跺崟鐘舵�佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
         }
+        Solutions solutions = solutionsMapper.selectById(unionApply.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
+        }
+        //鏍规嵁鏂规鏌ヨ瀵瑰簲鐨勭粨鏉熸棩鏈�
+        CountCyclePriceDTO countCyclePriceDTO = new CountCyclePriceDTO();
+        countCyclePriceDTO.setSolutions(solutions);
+        countCyclePriceDTO.setStartDate(unionApplyBXDDTO.getStartTime());
+        Date endTime =  Constants.getCountCyclePriceVO(countCyclePriceDTO).getEndDate();
+        if(unionApplyBXDDTO.getEndTime().getTime()>endTime.getTime()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝缁撴潫鏃ユ湡瓒呭嚭鏂规鍙厑璁告棩鏈熷懆鏈燂紝璇锋洿鏀瑰悗閲嶈瘯锛�");
+        }
         //鍔犱环鍙傛暟
         List<UnionApplyBXDDetailDTO> unionApplyBXDDetailDTOList = unionApplyBXDDTO.getUnionApplyBXDDDetailDTOList();
 
@@ -794,16 +816,12 @@
                 continue;
             }
             BigDecimal price = Constants.formatBigdecimal(applyDetails.get(Constants.ZERO).getPrice());
-
             Optional<UnionApplyBXDDetailDTO> unionApplyBXDDDetailTO= unionApplyBXDDetailDTOList.stream().filter(
                     m->m.getApplyId().equals(insuranceApply.getId())).findFirst();
             BigDecimal serverCost = BigDecimal.ZERO;
             if(unionApplyBXDDDetailTO.isPresent()){
                 UnionApplyBXDDetailDTO unionApplyBXDDetailDTO = unionApplyBXDDDetailTO.get();
                 serverCost = unionApplyBXDDetailDTO.getServerMoney();
-                BigDecimal dayServerMoney = unionApplyBXDDetailDTO.getServerMoney().divide(new BigDecimal(maxDays),6, RoundingMode.HALF_UP);
-
-                price = Constants.formatBigdecimal(price).add(Constants.formatBigdecimal(dayServerMoney));
                 //涓婁紶淇濆崟淇℃伅
                 if(StringUtils.isNotBlank(unionApplyBXDDetailDTO.getFileUrl())){
                     Multifile multifile = new Multifile();
@@ -824,9 +842,12 @@
             //瀹為檯宸蹭骇鐢熻垂鐢紙鍗曚汉锛�
             BigDecimal currentFee = BigDecimal.ZERO;
             if(useDays==-1){
-                currentFee =  new BigDecimal(maxDays).multiply(price);
+                currentFee = solutions.getPrice().add(serverCost);
             }else if(useDays>0){
-                currentFee =  new BigDecimal(useDays).multiply(price);
+                currentFee = Constants.produceFee(solutions,solutions.getPrice().add(serverCost)
+                        ,unionApplyBXDDTO.getStartTime(),unionApplyBXDDTO.getEndTime(),
+                        unionApplyBXDDTO.getStartTime()
+                );
             }
             //鐢熸垚鎶曚繚璁板綍
             if(CollectionUtils.isNotEmpty(applyDetailList)){
@@ -834,7 +855,7 @@
                 for (ApplyDetail applyDetail:applyDetailList.stream()
                         .filter(m->Constants.equalsInteger(m.getApplyId(),(insuranceApply.getId()))).collect(Collectors.toList())) {
                     applyDetail.setPrice(price);
-                    applyDetail.setFee(price.multiply(new BigDecimal(maxDays)));
+                    applyDetail.setFee(price.multiply(new BigDecimal(maxDays)).add(serverCost));
                     applyDetail.setStartTime(unionApplyBXDDTO.getStartTime());
                     applyDetail.setEndTime(unionApplyBXDDTO.getEndTime());
                     MemberInsurance memberInsurance = new MemberInsurance(applyDetail,user.getId());
@@ -854,12 +875,18 @@
                 }
                 memberInsuranceJoinMapper.insertBatchSomeColumn(memberInsuranceList);
             }
+            BigDecimal detailFee = Constants.reduceFee(solutions,solutions.getPrice().add(serverCost),insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),
+                    unionApplyBXDDTO.getStartTime(),unionApplyBXDDTO.getEndTime());
+
+            BigDecimal applyFee =  detailFee.multiply(new BigDecimal(applyDetails.size()));
+
+            Date finalEndTime =  endTime;
 
             //鏇存柊鎶曚繚鐢宠鍗�
             insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
                     .set(InsuranceApply::getUnionApplyTbdStatus,Constants.THREE)
                     .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_DONE.getKey())
-                    .set(InsuranceApply::getFee,price.multiply(new BigDecimal(applyDetails.size())).multiply(new BigDecimal(maxDays)))
+                    .set(InsuranceApply::getFee,applyFee)
                     .set(InsuranceApply::getCurrentFee,currentFee.multiply(new BigDecimal(applyDetails.size())))
                     .set(InsuranceApply::getStartTime,unionApplyBXDDTO.getStartTime())
                     .set(InsuranceApply::getEndTime,unionApplyBXDDTO.getEndTime())
@@ -867,11 +894,12 @@
                     .set(InsuranceApply::getEditor,user.getId())
                     .set(InsuranceApply::getServerCost,serverCost)
                     .set(InsuranceApply::getCode,unionApplyBXDDTO.getCode())
+                    .set(InsuranceApply::getFinalEndTime,finalEndTime)
                     .eq(InsuranceApply::getId,insuranceApply.getId()));
             //鏇存柊鎶曚繚鍗曟槑缁嗛噾棰�
             applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
                     .set(ApplyDetail::getPrice,price)
-                    .set(ApplyDetail::getFee, price.multiply(new BigDecimal(maxDays)))
+                    .set(ApplyDetail::getFee, detailFee)
                     .set(ApplyDetail::getCurrentFee,currentFee)
                     .set(ApplyDetail::getEditDate,new Date())
                     .set(ApplyDetail::getEditor,user.getId())
@@ -879,7 +907,7 @@
                     .set(ApplyDetail::getEndTime,unionApplyBXDDTO.getEndTime())
                     .in(ApplyDetail::getId,applyDetails.stream().map(m->m.getId()).collect(Collectors.toList()))
             );
-            sumFee = sumFee.add(price.multiply(new BigDecimal(applyDetails.size())).multiply(new BigDecimal(maxDays)));
+            sumFee = sumFee.add(applyFee);
             sumCurrFee = sumCurrFee.add(currentFee.multiply(new BigDecimal(applyDetails.size())));
         }
 
@@ -931,7 +959,7 @@
         List<UnionApply> unionApplyList = unionApplyJoinMapper.selectJoinList(UnionApply.class,new MPJLambdaWrapper<UnionApply>()
                 .selectAll(UnionApply.class)
                 .eq(UnionApply::getIsdeleted,Constants.ZERO)
-                .eq(UnionApply::getStatus,Constants.UnionApplyStatus.FINISH)
+                .eq(UnionApply::getStatus,Constants.UnionApplyStatus.FINISH.getKey())
                 .eq(!Objects.isNull(id),UnionApply::getId,id)
                 .le(UnionApply::getStartTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 00:00:00")
                 .ge(UnionApply::getEndTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 23:59:59")

--
Gitblit v1.9.3