From 3a45da15c947c2d478a44a51bd0f926647b1b841 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 11 四月 2025 16:33:17 +0800
Subject: [PATCH] 提交

---
 server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java |   92 +++++++++++++++++++++++++++++-----------------
 1 files changed, 58 insertions(+), 34 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
index 68bcfb6..db28ae9 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
@@ -156,7 +156,8 @@
                  .selectAs(UnionApply::getCode,UnionChange::getApplyCode)
                 .selectAs(Solutions::getName,UnionChange::getSolutionsName)
                 .selectAs(UnionApply::getStartTime,UnionChange::getStartTime)
-                .selectAs(UnionApply::getEndTime,UnionChange::getEndTime) 
+                .selectAs(UnionApply::getEndTime,UnionChange::getEndTime)
+                .selectAs(Solutions::getDelOnlyReplace,UnionChange::getDelOnlyReplace)
                 .selectAs(Company::getName,UnionChange::getShopName)
                 .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 0  )",UnionChange::getAddNum)
                 .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 1  )",UnionChange::getDelNum)
@@ -398,10 +399,17 @@
                     || saveUnionChangeDTO.getAddValidDate().getTime()> unionApply.getEndTime().getTime()){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎵瑰崟鍔犱繚鐢熸晥鏈熼敊璇�");
             }
-            if(saveUnionChangeDTO.getDelValidDate().getTime()<unionApply.getStartTime().getTime()
-                    || saveUnionChangeDTO.getDelValidDate().getTime()> unionApply.getEndTime().getTime()){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎵瑰崟鍔犱繚鐢熸晥鏈熼敊璇�");
-            }
+            
+            //鍔犲叆 鏌ヨ鏄惁瀛樺湪鍑忎繚鐨勬暟鎹�  濡傛灉瀛樺湪鍑忎繚鏁版嵁 杩涜璇ユ棩鏈熺殑鍒ゆ柇 2024骞�7鏈�30鏃�16:38:18
+            if(applyChagneDetailJoinMapper.selectCount(new QueryWrapper<ApplyChagneDetail>().lambda()
+                            .eq(ApplyChagneDetail::getType,Constants.ONE)
+                    .in(ApplyChagneDetail::getApplyChangeId,saveUnionChangeDTO.getApplyIds()))>Constants.ZERO){
+                if(saveUnionChangeDTO.getDelValidDate().getTime()<unionApply.getStartTime().getTime()
+                        || saveUnionChangeDTO.getDelValidDate().getTime()> unionApply.getEndTime().getTime()){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎵瑰崟鍑忎繚鐢熸晥鏈熼敊璇�");
+                }
+            };
+
         }else{
             if(saveUnionChangeDTO.getApplyDate().getTime()<DateUtil.afterDateByType(unionApply.getStartTime(),0,1).getTime()
                     || saveUnionChangeDTO.getApplyDate().getTime()> unionApply.getEndTime().getTime()){
@@ -409,7 +417,6 @@
             }
             saveUnionChangeDTO.setAddValidDate(saveUnionChangeDTO.getApplyDate());
         }
-
 
         List<ApplyChange> applyChangeList = applyChangeJoinMapper.selectJoinList(ApplyChange.class,
                 new MPJLambdaWrapper<ApplyChange>()
@@ -420,12 +427,14 @@
                         .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.CHECHED_PASSED.getKey())
                         .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                         .eq(ApplyChange::getType,saveUnionChangeDTO.getBusinessType())
+//                        .le(InsuranceApply::getStartTime,DateUtil.getCurrDateTime())
                         .in(ApplyChange::getId,saveUnionChangeDTO.getApplyIds())
                         .isNull(ApplyChange::getUnionChangeId)
         );
+
         //鏌ヨ鏁版嵁鏄惁瀛樺湪鏈浜庡鎵归�氳繃鐨勬暟鎹�
         if(applyChangeList.size()!=saveUnionChangeDTO.getApplyIds().size()){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鏁版嵁宸插鐞嗭紝璇峰埛鏂伴噸璇�");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇锋鏌ユ墍鏈夌敵璇峰崟鐨勭姸鎬佸強鏈熸湜鐢熸晥鏃堕棿鏄惁婊¤冻褰撳墠娴佽浆鎿嶄綔锛岃杩斿洖鍒锋柊閲嶈瘯锛�");
         }
 
         UnionChange unionChange = new UnionChange();
@@ -453,6 +462,8 @@
         applyChagneDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda()
                 .set(ApplyChagneDetail::getUnionChangeId,unionChange.getId())
                 .in(ApplyChagneDetail::getApplyChangeId,saveUnionChangeDTO.getApplyIds()));
+
+
 
         Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_HBD_UPLOAD;
         ApplyLog log = new ApplyLog(unionChange,applyLogType.getName(), null
@@ -786,6 +797,7 @@
                                 .selectAs(DispatchUnit::getName, ApplyChagneDetail::getDuName)
                                 .selectAs(Member::getName, ApplyChagneDetail::getMemberName)
                                 .selectAs(Solutions::getName,ApplyChagneDetail::getSolutionsName)
+                                .selectAs(Solutions::getId,ApplyChagneDetail::getSolutionId)
                                 .selectAs(InsuranceApply::getCode,ApplyChagneDetail::getApplyCode)
                                 .selectAs(InsuranceApply::getServerCost,ApplyChagneDetail::getServerCost)
                                 .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
@@ -827,9 +839,6 @@
                 ,unionChange.getId(),applyLogType.getKey(),null, JSONObject.toJSONString(unionChange));
         applyLogMapper.insert(log);
 
-        if(true){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
-        }
     }
 
 
@@ -845,6 +854,7 @@
         List<ApplyChagneDetail> reduceList = applyChagneDetailList.stream().filter(f->Constants.equalsInteger(f.getType(),Constants.ONE)).collect(Collectors.toList());
         List<ApplyChagneDetail> changeList = applyChagneDetailList.stream().filter(f->Constants.equalsInteger(f.getType(),Constants.TWO)).collect(Collectors.toList());
         for (ApplyChagneDetail detail:reduceList) {
+            solutions = solutionsMapper.selectById(detail.getSolutionId());
             Member member = memberMapper.selectById(detail.getMemberId());
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍛樺伐鏁版嵁");
@@ -858,6 +868,7 @@
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍛樺伐鏁版嵁");
             }
+            solutions = solutionsMapper.selectById(detail.getSolutionId());
             this.addChangeDetailData(applyChange,detail,insuranceApply,solutions,bigDecimalVO,reduceList,i);
         }
 
@@ -889,7 +900,7 @@
     public void addChangeDetailData(ApplyChange applyChange, ApplyChagneDetail detail,InsuranceApply insuranceApply,Solutions solutions
             , BigDecimalVO bigDecimalVO,List<ApplyChagneDetail> reduceList,Integer i){
         //鏌ヨ浜哄憳淇℃伅鏄惁瀛樺湪鐩稿悓鐨勬柟妗堜笅鏄惁瀛樺湪 鍐茬獊鏁版嵁
-        InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getId(),
+        InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getBaseId(),
                 detail.getIdcardNo(),detail.getMemberName(),DateUtil.getMontageDate(applyChange.getApplyStartTime(),1),DateUtil.getMontageDate(detail.getEndTime(),2),
                 applyDetailJoinMapper);
 
@@ -960,10 +971,9 @@
                 .set(Member::getWorktypeId,memberInsurance.getWorktypeId())
                 .eq(Member::getId, memberInsurance.getMemberId())
         );
-
-//        if(1==1){
-//            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
-//        }
+//      if(1==1){
+//          throw new BusinessException(ResponseStatus.NOT_ALLOWED);
+//      }
     }
 
     /**
@@ -985,29 +995,40 @@
         if(oldModel.getStartTime().getTime()>applyChange.getDelValidTime().getTime()||oldModel.getEndTime().getTime()<applyChange.getDelValidTime().getTime()){
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鎵瑰噺鏃ユ湡鏈湪鐢ㄦ埛銆�" + detail.getMemberName() + "銆戠殑淇濆崟鏃ユ湡鍐咃紒");
         }
+
         BigDecimal fee = Objects.isNull(insuranceApply.getServerCost())?
                 solutions.getPrice():
                 solutions.getPrice().add(insuranceApply.getServerCost());
 
-        Date reduceDate = oldModel.getStartTime().compareTo(applyChange.getDelValidTime())!=0?
-                DateUtil.getMontageDate(applyChange.getDelValidTime(), 3):
-                DateUtil.getMontageDate(applyChange.getDelValidTime(), 2);
-        //鍑忎繚璁板綍鎿嶄綔鍚庣殑鎬昏垂鐢�
-        BigDecimal reduceFee = Constants.reduceFee(
-                solutions,fee,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),reduceDate) ;
+        // 鍑忎繚鍚� 鎵瑰崟鏃ユ湡  榛樿涓� 鎵瑰崟鍑忎繚鏃ユ湡  00:00:00
+        Date reduceDate = applyChange.getDelValidTime();
+
+        // 鍑忎繚鍚� 鎬昏垂鐢� 榛樿涓哄噺淇濆悗涓� 0
+        BigDecimal reduceFee = BigDecimal.ZERO;
+
+        //濡傛灉鎵瑰崟鏃ユ湡 澶т簬 鍛樺伐淇濆崟鐨勫紑濮嬫棩鏈�
+        if(applyChange.getDelValidTime().getTime() > oldModel.getStartTime().getTime()){
+            reduceDate = DateUtil.getMontageDate(applyChange.getDelValidTime(), 3);
+            //鍑忎繚璁板綍鎿嶄綔鍚庣殑鎬昏垂鐢�
+            reduceFee = Constants.reduceFee(
+                    solutions,fee,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),reduceDate) ;
+        }
+
         BigDecimal pullFee = BigDecimal.ZERO;
-        if (DateUtil.getMontageDate(new Date(), 2).getTime()>oldModel.getStartTime().getTime()) {
-            //// 2024骞�5鏈�8鏃�17:37:23 淇敼 璁$畻浜х敓璐圭敤
+        if (oldModel.getStartTime().getTime() < System.currentTimeMillis()) {
+            //璁$畻浜х敓璐圭敤
             pullFee =  Constants.produceFee(solutions,fee,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime());
             if(pullFee.compareTo(reduceFee)>0){
                 pullFee = reduceFee;
             }
         }
+
         UpdateWrapper<ApplyDetail> updateWrapper = new UpdateWrapper<ApplyDetail>();
         updateWrapper.lambda()
                 .setSql(" fee = " + reduceFee)
                 .setSql(" current_fee = " + pullFee)
                 .set(ApplyDetail::getEndTime, reduceDate)
+                .set(applyChange.getDelValidTime().getTime() <= oldModel.getStartTime().getTime(),ApplyDetail::getChangeStatus,Constants.TWO)
                 .set(ApplyDetail::getEditor, applyChange.getEditor())
                 .set(ApplyDetail::getEditDate, applyChange.getEditDate())
                 .eq(ApplyDetail::getId, oldModel.getId());
@@ -1028,18 +1049,22 @@
         }
         bigDecimalVO.setTotalFee(bigDecimalVO.getTotalFee().add(reduceFee).subtract(oldModel.getFee()).add(reduceMoney));
         bigDecimalVO.setCurrentFee(bigDecimalVO.getCurrentFee().add(pullFee).subtract(oldModel.getCurrentFee()));
-//        //濡傛灉鍑忎繚鐨勬暟鎹� 宸茬粡缁撴潫 鍒欐鏁版嵁瑕佸幓鎺� 鍑忛櫎鐨勫疄闄呭樊鍊� reduceMoney
-//        if(System.currentTimeMillis()>detail.getEndTime().getTime()){
-//            bigDecimalVO.setCurrentFee(bigDecimalVO.getCurrentFee().add(reduceMoney));
-//        }
 
         applyDetailJoinMapper.update(null, updateWrapper);
-        //淇敼 鍛樺伐鎶曚繚鏄庣粏璁板綍 鍘嗗彶鏁版嵁
-        memberInsuranceJoinMapper.update(null, new UpdateWrapper<MemberInsurance>().lambda()
-                .setSql(" fee = " + reduceFee)
-                .set(MemberInsurance::getEndTime,reduceDate)
-                .eq(MemberInsurance::getRelationId, oldModel.getId())
-        );
+
+        List<MemberInsurance> oldMemberInsurance =   memberInsuranceJoinMapper.selectList(new QueryWrapper<MemberInsurance>().lambda().eq(MemberInsurance::getRelationId,oldModel.getId()));
+        for (MemberInsurance memberInsurance:oldMemberInsurance) {
+            //璁板綍鏁版嵁鏃╀簬鎵瑰崟鏃ユ湡
+            if(memberInsurance.getStartTime().getTime()>reduceDate.getTime()){
+                memberInsurance.setIsValid(Constants.ONE);
+            }else if(memberInsurance.getEndTime().getTime()>=reduceDate.getTime()
+                    && memberInsurance.getStartTime().getTime()<=reduceDate.getTime()){
+                memberInsurance.setFee(reduceFee);
+                memberInsurance.setEndTime(reduceDate);
+            }
+            memberInsuranceJoinMapper.updateById(memberInsurance);
+        }
+
 
         memberMapper.update(null,new UpdateWrapper<Member>()
                 .lambda()
@@ -1052,7 +1077,6 @@
 
         //淇敼涓氬姟鏄庣粏琛屾暟鎹疄闄呮壒鍗曟棩鏈�
         applyChagneDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda()
-//                .setSql(" fee = ifnull(fee,0)+" + reduceFee)
                 .set(ApplyChagneDetail::getFee,reduceFee.subtract(oldModel.getFee()))
                 .set(ApplyChagneDetail::getEndTime,reduceDate)
                 .eq(ApplyChagneDetail::getId,detail.getId())

--
Gitblit v1.9.3