From deb3baf0fb04c3a9f5b0d4b5bd9fb3237908d576 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 19 二月 2024 18:38:12 +0800
Subject: [PATCH] 111

---
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java |  143 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 96 insertions(+), 47 deletions(-)

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 939eb33..00a2029 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
@@ -290,63 +290,90 @@
         if(detailList ==null || detailList.size()==0){
             return;
         }
+        //瀹為檯鎵瑰崟鐢熸晥鏃ユ湡
+        Date applyStartTime = DateUtil.getMontageDate(update.getApplyStartTime(),1);
         for(ApplyChagneDetail detail : detailList){
             //鏌ヨ鍛樺伐鏄湪涓诲崟涓� 鏄惁瀛樺湪鐢熸晥涓殑鏁版嵁
             ApplyDetail oldModel = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda()
                     .eq(ApplyDetail::getApplyId, update.getApplyId())
                     .eq(ApplyDetail::getMemberId, detail.getMemberId())
+                    .le(ApplyDetail::getStartTime,applyStartTime)
+                    .ge(ApplyDetail::getEndTime,applyStartTime)
                     .orderByDesc(ApplyDetail::getCreateDate)
                     .last("limit 1"));
             if(oldModel == null  ){
-                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛銆�"+detail.getMemberName()+"銆戝師淇濆崟淇℃伅鏈夎锛屽綋鍓嶇敵璇蜂笉鏀寔鍑忎繚澶勭悊锛�");
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛銆�"+detail.getMemberName()+"銆戝師淇濆崟淇℃伅鏈夎锛屾壒鍗曟棩鏈熸湭鍦ㄤ繚鍗曟棩鏈熷唴锛�");
             }
             Date endDate = oldModel.getEndTime();
-            //褰撳墠鏃ユ湡澶т簬鎵瑰崟鏃ユ湡 闇�瑕佸洖婊氭暟鎹疄闄呮暟鎹�
-            Boolean flag = DateUtil.getMontageDate(new Date(),2).compareTo(DateUtil.getMontageDate(update.getStartTime(),2))>0;
-            //鎹㈠巶鍚庡巻鍙茶褰曠殑璐圭敤 fee
-            Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(update.getStartTime(),2),DateUtil.getMontageDate(oldModel.getStartTime(),1)) + 1;
-            BigDecimal oldFee = this.getApplyPrice(update.getApplyId(),days);
-            BigDecimal fee = oldModel.getFee();
-            BigDecimal oldCurrentFee = oldModel.getCurrentFee();
-            applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
-                    .set(ApplyDetail::getEditor,update.getEditor())
-                    .set(ApplyDetail::getEditDate,update.getEditDate())
-                    .set(ApplyDetail::getEndTime,DateUtil.getMontageDate(update.getStartTime(),2))
-                    .set(ApplyDetail::getFee,oldFee)
-                    .set(flag,ApplyDetail::getCurrentFee,oldFee)
-                    .eq(ApplyDetail::getId,oldModel.getApplyId())
-            );
 
-            //淇敼 鍛樺伐鎶曚繚鏄庣粏璁板綍 鍘嗗彶鏁版嵁
-            memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
-                    .set(MemberInsurance::getEndTime,update.getApplyStartTime())
-                            .set(MemberInsurance::getFee,oldFee)
-                    .eq(MemberInsurance::getRelationId,oldModel.getId())
-            );
+            //濡傛灉瀹為檯鎵瑰崟鏃ユ湡 鍜� 鍘熻褰曟棩鏈熺浉绛� 鍒欑洿鎺ヤ慨鏀硅褰曟淳閬e崟浣嶄笌宸ョ淇℃伅
+            if(applyStartTime.compareTo(oldModel.getStartTime())!=Constants.ZERO){
+                //褰撳墠鏃ユ湡澶т簬鎵瑰崟鏃ユ湡 闇�瑕佸洖婊氭暟鎹疄闄呮暟鎹�
+                Boolean flag = DateUtil.getMontageDate(new Date(),2).compareTo(DateUtil.getMontageDate(update.getApplyStartTime(),2))>0;
+                //鎹㈠巶鍚庡巻鍙茶褰曠殑璐圭敤 fee
+                Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(update.getApplyStartTime(),3),DateUtil.getMontageDate(oldModel.getStartTime(),1))+1;
+                BigDecimal oldFee = this.getApplyPrice(update.getApplyId(),days);
+                BigDecimal fee = oldModel.getFee();
+                BigDecimal oldCurrentFee = oldModel.getCurrentFee();
 
-            ApplyDetail applyDetail = new ApplyDetail();
-            applyDetail.setApplyId(oldModel.getApplyId());
-            applyDetail.setCreateDate(new Date());
-            applyDetail.setCreator(update.getEditor());
-            applyDetail.setMemberId(oldModel.getMemberId());
-            applyDetail.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(),1));
-            applyDetail.setEndTime(endDate);
-            applyDetail.setDuId(detail.getDuId());
-            applyDetail.setWorktypeId(detail.getWorktypeId());
-            applyDetail.setIdcardNo(oldModel.getIdcardNo());
-            applyDetail.setFee(fee.subtract(oldFee));
-            if(flag){
-                applyDetail.setCurrentFee(oldCurrentFee.multiply(oldFee));
+                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
+                        .set(ApplyDetail::getEditor,update.getEditor())
+                        .set(ApplyDetail::getEditDate,update.getEditDate())
+                        .set(ApplyDetail::getEndTime,DateUtil.getMontageDate(update.getApplyStartTime(),3))
+                        .set(ApplyDetail::getFee,oldFee)
+                        .set(flag,ApplyDetail::getCurrentFee,oldFee)
+                        .eq(ApplyDetail::getId,oldModel.getId())
+                );
+
+                //淇敼 鍛樺伐鎶曚繚鏄庣粏璁板綍 鍘嗗彶鏁版嵁
+                memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
+                        .set(MemberInsurance::getEndTime,update.getApplyStartTime())
+                        .set(MemberInsurance::getFee,oldFee)
+                        .eq(MemberInsurance::getRelationId,oldModel.getId())
+                );
+
+                ApplyDetail applyDetail = new ApplyDetail();
+                applyDetail.setApplyId(oldModel.getApplyId());
+                applyDetail.setCreateDate(new Date());
+                applyDetail.setCreator(update.getEditor());
+                applyDetail.setMemberId(oldModel.getMemberId());
+                applyDetail.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(),1));
+                applyDetail.setEndTime(endDate);
+                applyDetail.setDuId(detail.getDuId());
+                applyDetail.setWorktypeId(detail.getWorktypeId());
+                applyDetail.setIdcardNo(oldModel.getIdcardNo());
+                applyDetail.setFee(fee.subtract(oldFee));
+                if(flag){
+                    applyDetail.setCurrentFee(oldCurrentFee.multiply(oldFee));
+                }else{
+                    applyDetail.setCurrentFee(BigDecimal.ZERO);
+                }
+                applyDetail.setSex(oldModel.getSex());
+                applyDetail.setMemberName(oldModel.getMemberName());
+                applyDetail.setFromId(detail.getId());
+                applyDetailJoinMapper.insert(applyDetail);
+
+                MemberInsurance memberInsurance = new MemberInsurance(applyDetail,update.getId());
+                memberInsuranceJoinMapper.insert(memberInsurance);
             }else{
-                applyDetail.setCurrentFee(BigDecimal.ZERO);
-            }
-            applyDetail.setSex(oldModel.getSex());
-            applyDetail.setMemberName(oldModel.getMemberName());
-            applyDetail.setFromId(detail.getId());
-            applyDetailJoinMapper.insert(applyDetail);
 
-            MemberInsurance memberInsurance = new MemberInsurance(applyDetail,update.getId());
-            memberInsuranceJoinMapper.insert(memberInsurance);
+                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
+                        .set(ApplyDetail::getEditor,update.getEditor())
+                        .set(ApplyDetail::getEditDate,update.getEditDate())
+                        .set(ApplyDetail::getDuId,detail.getDuId())
+                        .set(ApplyDetail::getWorktypeId,detail.getWorktypeId())
+                        .eq(ApplyDetail::getId,oldModel.getId())
+                );
+
+                //鍛樺伐鎶曚繚鏄庣粏璁板綍 鍘嗗彶鏁版嵁
+                memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
+                        .set(MemberInsurance::getDuId,detail.getDuId())
+                        .set(MemberInsurance::getDuName,detail.getDuName())
+                        .set(MemberInsurance::getWorktypeId,detail.getWorktypeId())
+                        .set(MemberInsurance::getWorktypeName,detail.getWorkTypeName())
+                        .eq(MemberInsurance::getRelationId,oldModel.getId())
+                );
+            }
 
             Member member = memberMapper.selectById(detail.getMemberId());
             if(Objects.isNull(member)){
@@ -423,7 +450,8 @@
                 add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2));
                 add.setFee(countCyclePriceVO_add.getCyclePrice());
 
-                if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(detail.getStartTime(), 2), new Date()) >= 0) {
+
+                if(new Date().compareTo(DateUtil.getMontageDate(detail.getStartTime(), 2))>=0){
                     Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2), detail.getStartTime()) + 1;
                     //濡傛灉宸蹭骇鐢熻垂鐢紝璁$畻宸蹭骇鐢熻垂鐢�
                     add.setCurrentFee(this.getApplyPrice(update.getApplyId(), days));
@@ -619,7 +647,7 @@
         }
         CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda()
                 .eq(CompanySolution::getCompanyId,loginUserInfo.getCompanyId())
-                .eq(CompanySolution::getSolutionBaseId,solutions.getId())
+                .eq(CompanySolution::getSolutionId,solutions.getId())
                 .eq(CompanySolution::getIsdeleted,Constants.ZERO)
                 .last(" limit 1 ")
         );
@@ -631,6 +659,16 @@
                 && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢宠鏃ユ湡鏈浜庝繚鍗曟棩鏈熷唴锛屾棤娉曡繘琛岃鎿嶄綔");
         }
+        //鏌ヨ淇濆崟涓嬫槸鍚﹀瓨鍦ㄨ繘琛屼腑鐨勫姞鍑忎繚/鎹㈠巶鍗曟嵁
+        if(applyChangeMapper.selectCount(new QueryWrapper<ApplyChange>().lambda()
+                .eq(ApplyChange::getApplyId,insuranceApply.getId())
+                .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey(),Constants.ApplyChangeStatus.CLOSE.getKey())
+
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀛樺湪杩涜涓殑鍔犲噺淇�/鎹㈠巶鐢宠");
+        };
+
+
         applyChange.setCreateDate(new Date());
         applyChange.setCreator(loginUserInfo.getId());
         applyChange.setEditor(loginUserInfo.getId());
@@ -721,7 +759,14 @@
                 && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢宠鏃ユ湡鏈浜庝繚鍗曟棩鏈熷唴锛屾棤娉曡繘琛岃鎿嶄綔");
         }
-
+        //鏌ヨ淇濆崟涓嬫槸鍚﹀瓨鍦ㄨ繘琛屼腑鐨勫姞鍑忎繚/鎹㈠巶鍗曟嵁
+        if(applyChangeMapper.selectCount(new QueryWrapper<ApplyChange>().lambda()
+                .eq(ApplyChange::getApplyId,insuranceApply.getId())
+                .ne(ApplyChange::getId,applyChange.getId())
+                .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey(),Constants.ApplyChangeStatus.CLOSE.getKey())
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀛樺湪杩涜涓殑鍔犲噺淇�/鎹㈠巶鐢宠");
+        };
         applyChange.setEditDate(new Date());
         applyChange.setEditor(loginUserInfo.getId());
         applyChange.setApplyStartTime(applyChange.getValidTime());
@@ -732,7 +777,6 @@
         BigDecimal fee = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
         applyChange.setFee(fee);
         applyChangeMapper.updateById(applyChange);
-
 
         Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_UPLOAD_AGAIN;
         String info =applyLogType.getInfo();
@@ -1034,6 +1078,7 @@
                     new MPJLambdaWrapper<ApplyChagneDetail>()
                             .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                             .eq(ApplyChagneDetail::getMemberId, applyChagneDetail.getMemberId())
+                            .eq(ApplyChange::getApplyId, applyChange.getApplyId())
                             .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE)
             ) > Constants.ZERO) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄧ敵璇蜂腑鐨勫姞鍑忎繚/鎹㈠巶鍗曟嵁");
@@ -1060,6 +1105,10 @@
                     .collect(Collectors.toList()).size() <= Constants.ZERO) {
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
             }
+            if(applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId())
+            && applyChagneDetail.getOldWorktypeId().equals(applyChagneDetail.getWorktypeId())){
+                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戞崲鍘傛暟鎹浉鍚岋紒");
+            }
             applyChagneDetail.setCreateDate(new Date());
             applyChagneDetail.setCreator(loginUserInfo.getId());
             applyChagneDetail.setIsdeleted(Constants.ZERO);

--
Gitblit v1.9.3