From 09da100729793848bc01b51f7b05ca3f1e7ec64f Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 20 六月 2024 14:05:35 +0800
Subject: [PATCH] 提交一把

---
 server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java |  134 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 106 insertions(+), 28 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 a2e652a..d702a41 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
@@ -80,6 +80,8 @@
 
     @Autowired
     private MemberInsuranceJoinMapper memberInsuranceJoinMapper;
+    @Autowired
+    private MemberMapper memberMapper;
     @Value("${debug_model}")
     private boolean debugModel;
 
@@ -154,14 +156,22 @@
                 .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 ");
+        queryWrapper.select("(select count(distinct(b.MEMBER_ID)) from apply_detail b where b.isdeleted=0   and b.END_TIME > now() and b.union_apply_id=t.id) as guaranteeNum ");
 
-        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 " +
-                "and b.status = "+Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey()+" and a.type = 0  ) as addApplyNum ");
+        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 " +
+                    "and a.status = "+Constants.ApplyChangeStatus.CHECHED_PASSED.getKey()+" and a.type = 0  ) as addApplyNum ");
+        }else  if(pageWrap.getModel().getQueryFlag() ==2){
+            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 " +
+                    "and a.status = "+Constants.ApplyChangeStatus.CHECHED_PASSED.getKey()+" and a.type = 1  ) as changeApplyNum ");
+        }else{
+            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 " +
+                    "and b.status = "+Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey()+" and a.type = 0  ) as addApplyNum ");
 
-        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 " +
-                "and b.status = "+Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey()+" and a.type = 1  ) as changeApplyNum ");
-
+            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 " +
+                    "and b.status = "+Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey()+" and a.type = 1  ) as changeApplyNum ");
+        }
         queryWrapper.leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId);
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(Constants.equalsInteger(user.getType(),Constants.TWO)){
@@ -237,7 +247,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()) {
@@ -307,6 +318,7 @@
                         .selectAs(Solutions::getName,UnionApply::getSolutionName)
                         .selectAs(Company::getName,UnionApply::getCompanyName)
                         .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.UNION_APPLY_ID = t.id ) as insureNum")
+                        .select("(select count(distinct(b.MEMBER_ID)) from apply_detail b where b.isdeleted=0   and b.END_TIME > now() and b.union_apply_id=t.id) as guaranteeNum ")
                         .select(" ( select group_concat(DISTINCT(cd.name)) from insurance_apply ad left join company cd on ad.company_id = cd.id where ad.UNION_APPLY_ID = t.id ) as companyNames")
                         .leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId)
                         .leftJoin(Company.class,Company::getId,UnionApply::getCompanyId)
@@ -378,7 +390,6 @@
                 }
             }
         }
-
     }
 
 
@@ -407,6 +418,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>()
@@ -441,13 +460,23 @@
 
         Integer maxDays = DateUtil.calculateBetween(saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate(),0);
 
-        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda().select(ApplyDetail::getId,ApplyDetail::getPrice)
+        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
+                .select(ApplyDetail::getId,ApplyDetail::getPrice,ApplyDetail::getStartTime,ApplyDetail::getEndTime,ApplyDetail::getFee)
                 .in(ApplyDetail::getApplyId,saveUnionApplyDTO.getApplyIds())
                 .eq(ApplyDetail::getIsdeleted,Constants.ZERO));
         if(applyDetailList.size()==0){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝瀛樺湪濮旀墭鎶曚繚鐢宠璁板綍淇℃伅鏈夎锛岃杩斿洖鏌ョ湅鐢宠浜哄憳鏄惁涓虹┖锛�");
         }
-        unionApply.setFee(applyDetailList.stream().map(i->Constants.formatBigdecimal(i.getPrice()).multiply(new BigDecimal(maxDays))).reduce(BigDecimal.ZERO,BigDecimal::add));
+        BigDecimal fee = BigDecimal.ZERO;
+        for (ApplyDetail applyDetail:applyDetailList) {
+            fee =fee.add(
+                    Constants.reduceFee(solutions,solutions.getPrice(),applyDetail.getStartTime(),applyDetail.getEndTime(),saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate())
+            );
+        }
+        unionApply.setFee(fee);
+
+//        unionApply.setFee(applyDetailList.stream()
+//                .map(i->Constants.formatBigdecimal(i.getPrice()).multiply(new BigDecimal(maxDays))).reduce(BigDecimal.ZERO,BigDecimal::add));
 
         unionApplyMapper.insert(unionApply);
 
@@ -576,6 +605,10 @@
         if(CollectionUtils.isNotEmpty(uploadMultifileDTO.getMultifileList())){
             List<Multifile> multifileList = uploadMultifileDTO.getMultifileList();
             for (Multifile multifile:multifileList) {
+                if(StringUtils.isBlank(multifile.getName())
+                || StringUtils.isBlank(multifile.getFileurl()) ){
+                    continue;
+                }
                 if(Objects.isNull(multifile.getObjId())
                     ||Objects.isNull(multifile.getName())
                     ||Objects.isNull(multifile.getFileurl())){
@@ -645,14 +678,14 @@
     public  String getSignLink(SmsCheckDTO smsCheckDTO) {
         if(Objects.isNull(smsCheckDTO)
                 || Objects.isNull(smsCheckDTO.getBusinessId())
-                || StringUtils.isBlank(smsCheckDTO.getCode())
+//                || StringUtils.isBlank(smsCheckDTO.getCode())
         ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         //楠岃瘉 楠岃瘉鐮�
-        if(!debugModel){
-            smsEmailService.validateCode(smsCheckDTO.getCode());
-        }
+//        if(!debugModel){
+//            smsEmailService.validateCode(smsCheckDTO.getCode());
+//        }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(!user.getType().equals(Constants.TWO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
@@ -731,12 +764,36 @@
         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();
 
         //鎵�鏈夋姇淇濈敵璇蜂繚鍗曟槑缁嗚
-        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
-                .select(ApplyDetail::getId,ApplyDetail::getApplyId,ApplyDetail::getPrice)
+        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>()
+                        .selectAll(ApplyDetail.class)
+                .selectAs(DispatchUnit::getName,ApplyDetail::getDuName)
+                .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
+                .selectAs(Solutions::getId,ApplyDetail::getSolutionId)
+                .selectAs(Solutions::getName,ApplyDetail::getSolutionName)
+                .selectAs(Worktype::getName,ApplyDetail::getWorkTypeName)
+                .selectAs(Member::getIdcardNo,ApplyDetail::getIdcardNo)
+                .selectAs(Member::getName,ApplyDetail::getMemberName)
+                .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId)
+                .leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId)
+                .leftJoin(Member.class,Member::getId,ApplyDetail::getMemberId)
+                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
+                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                 .in(ApplyDetail::getUnionApplyId,unionApply.getId()));
         unionApplyBXDDTO.setEndTime(DateUtil.getMontageDate(unionApplyBXDDTO.getEndTime(),2));
         //鎬诲ぉ鏁�
@@ -761,15 +818,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();
-
-                BigDecimal dayServerMoney = unionApplyBXDDetailDTO.getServerMoney().divide(new BigDecimal(maxDays),2, RoundingMode.HALF_UP);
-
-                price = Constants.formatBigdecimal(price).add(Constants.formatBigdecimal(dayServerMoney));
+                serverCost = unionApplyBXDDetailDTO.getServerMoney();
                 //涓婁紶淇濆崟淇℃伅
                 if(StringUtils.isNotBlank(unionApplyBXDDetailDTO.getFileUrl())){
                     Multifile multifile = new Multifile();
@@ -790,9 +844,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)){
@@ -800,30 +857,51 @@
                 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());
+                    memberInsurance.setBdCode(unionApplyBXDDTO.getCode());
                     memberInsurance.setRelationType(Constants.ZERO);
                     memberInsuranceList.add(memberInsurance);
+                    //鏇存柊鍛樺伐鎶曚繚鏃堕棿
+                    memberMapper.update(null,new UpdateWrapper<Member>()
+                            .lambda()
+                            .set(Member::getStartTime,memberInsurance.getStartTime())
+                            .set(Member::getEndTime,memberInsurance.getEndTime())
+                            .set(Member::getDuId,memberInsurance.getDuId())
+                            .set(Member::getWorktypeId,memberInsurance.getWorktypeId())
+                            .eq(Member::getId, memberInsurance.getMemberId())
+                    );
+
                 }
                 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())
                     .set(InsuranceApply::getEditDate,new Date())
                     .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())
@@ -831,7 +909,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())));
         }
 
@@ -883,7 +961,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