From ca1e1982c1b6cf275b45ceb6d952465f84ed3830 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期二, 10 六月 2025 14:59:25 +0800
Subject: [PATCH] git ch

---
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java |  200 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 198 insertions(+), 2 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 1dd9e0a..3edb558 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
@@ -1416,8 +1416,6 @@
         }
     }
 
-
-
     /**
      * 鍔犱繚鏁版嵁澶勭悊
      * @param applyChange 鍔犲噺淇濅繚鍗曟暟鎹�
@@ -1426,6 +1424,202 @@
      * @param loginUserInfo 鎿嶄綔浜�
      */
     public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
+                                List<DuSolution> duSolutionList,
+                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize,
+                                List<Integer> worktypeIdList){
+        if(applyChange.getApplyStartTime().getTime()>insuranceApply.getEndTime().getTime()){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚鐢熸晥鏈熶笉鑳藉ぇ浜庝繚鍗曠粨鏉熸棩鏈�");
+        }
+        //鏌ヨ鏈鍔犱繚鎵�鏈変汉鍛樹俊鎭�
+        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIsdeleted,Constants.ZERO)
+                .in(Member::getIdcardNo,addDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList()))
+        );
+        //鏌ヨ鏈鍔犱繚鎵�鏈変汉鍛樼殑鍘嗗彶淇濆崟璁板綍
+        List<ApplyDetail> applyDetailAllList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,
+                new MPJLambdaWrapper<ApplyDetail>()
+                        .selectAll(ApplyDetail.class)
+                        .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
+                        .selectAs(InsuranceApply::getStatus,ApplyDetail::getApplyStatus)
+                        .selectAs(Company::getName,ApplyDetail::getCompanyName)
+                        .selectAs(Solutions::getBaseId,ApplyDetail::getSolutionBaseId)
+                        .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
+                        .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                        .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
+                        .in(ApplyDetail::getMemberId,memberList.stream().map(i->i.getId()).collect(Collectors.toList()))
+                        .eq(ApplyDetail::getIsdeleted,Constants.ZERO));
+
+        List<ApplyChagneDetail> applyChangeDetailAllList = applyChagneDetailJoinMapper.selectJoinList(ApplyChagneDetail.class,
+                new MPJLambdaWrapper<ApplyChagneDetail>()
+                        .selectAll(ApplyChagneDetail.class)
+                        .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
+                        .leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId)
+                        .eq(ApplyChange::getApplyId,applyChange.getApplyId())
+                        .in(Member::getIdcardNo,memberList.stream().map(i->i.getId()).collect(Collectors.toList()))
+                        .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE));
+
+        for (int i = 0; i < addDetailList.size(); i++) {
+            ApplyChagneDetail applyChagneDetail = addDetailList.get(i);
+            if (
+                    Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && Objects.isNull(applyChagneDetail.getDuId())
+                            || Objects.isNull(applyChagneDetail.getWorktypeId())
+                            || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
+            ) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝繀濉」缂哄け");
+            }
+
+            //鏍规嵁鍛樺伐韬唤璇佽繘琛屽垽鏂勾榫�
+            long age = Constants.getAgeByIdCard(applyChagneDetail.getIdcardNo());
+            if(Objects.isNull(age)
+                    || age > solutions.getMaxAge()
+                    || age < solutions.getMinAge()){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"銆�"+applyChagneDetail.getMemberName()+"銆戝憳宸ュ勾榫勮秴鍑烘柟妗堥厤缃� 鏂规閰嶇疆銆�"+solutions.getMinAge()+" - "+solutions.getMaxAge()+"銆戝瓨鍦ㄥ紓甯告暟鎹紒");
+            }
+
+            //鏌ヨ褰撳墠澶勭悊鐨勪汉鍛樹俊鎭�
+            List<Member> optMembers = memberList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())).collect(Collectors.toList());
+            Member member = new Member();
+            if(CollectionUtils.isEmpty(optMembers)){
+                member = new Member();
+                member.setCreateDate(new Date());
+                member.setCreator(loginUserInfo.getId());
+                member.setIsdeleted(Constants.ZERO);
+                member.setName(applyChagneDetail.getMemberName());
+                member.setCompanyId(insuranceApply.getCompanyId());
+                member.setSex(Constants.getSexByIdCard(applyChagneDetail.getIdcardNo()));
+                if(!IdcardUtil.isValidCard(applyChagneDetail.getIdcardNo())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍔犱繚鍛樺伐淇℃伅韬唤璇佷俊鎭敊璇痆"+member.getName()+"]");
+                }
+                member.setIdcardNo(applyChagneDetail.getIdcardNo());
+                member.setApplyId(insuranceApply.getId());
+                member.setDuId(applyChagneDetail.getDuId());
+                member.setWorktypeId(applyChagneDetail.getWorktypeId());
+                memberMapper.insert(member);
+                applyChagneDetail.setMemberId(member.getId());
+            }else{
+                member = optMembers.get(Constants.ZERO);
+                member.setApplyId(insuranceApply.getId());
+                member.setDuId(applyChagneDetail.getDuId());
+                member.setWorktypeId(applyChagneDetail.getWorktypeId());
+                member.setStartTime(applyChagneDetail.getStartTime());
+                member.setEndTime(applyChagneDetail.getEndTime());
+                memberMapper.updateById(member);
+                applyChagneDetail.setMemberId(member.getId());
+                
+                if(applyChangeDetailAllList.stream().filter(
+                        j->Constants.equalsInteger(j.getMemberId(),applyChagneDetail.getMemberId())
+                ).collect(Collectors.toList()).size()>Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄧ敵璇蜂腑鐨勫姞鍑忎繚/鎹㈠巶鍗曟嵁");
+                }
+
+            }
+            List<ApplyDetail> memberApplyDetailList = new ArrayList<>();
+            if(CollectionUtils.isNotEmpty(applyDetailAllList)){
+                memberApplyDetailList = applyDetailAllList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())).collect(Collectors.toList());
+            }
+            if(CollectionUtils.isEmpty(memberApplyDetailList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "淇濆崟涓湭瀛樺湪鏄庣粏璁板綍");
+            }
+
+            if(memberApplyDetailList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())&&Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
+                    && j.getStartTime().getTime() <= DateUtil.getMontageDate(applyChange.getApplyStartTime(),1).getTime()
+                    && j.getEndTime().getTime() >= DateUtil.getMontageDate(insuranceApply.getEndTime(),2).getTime()
+            ).collect(Collectors.toList()).size()>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠淇濆崟涓嬶紝鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄦ棩鏈熷啿绐佺殑鏁版嵁");
+            };
+
+            if(memberApplyDetailList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())
+                    &&Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
+                    && j.getStartTime().getTime() <= System.currentTimeMillis()
+                    && j.getEndTime().getTime() >= System.currentTimeMillis()
+            ).collect(Collectors.toList()).size()>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄤ繚闅滀腑鐨勪繚鍗曚俊鎭紝鏃犳硶杩涜鍔犱繚");
+            };
+
+
+            List<ApplyDetail> optApplyDetailList = applyDetailAllList.stream()
+                    .filter(j->Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
+            ).collect(Collectors.toList());
+
+            if(CollectionUtils.isEmpty(optApplyDetailList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "淇濆崟涓湭瀛樺湪鏄庣粏璁板綍");
+            }
+
+            ApplyDetail applyDetail = optApplyDetailList.get(Constants.ZERO);
+            applyChagneDetail.setPrice(applyDetail.getPrice());
+            applyChagneDetail.setCreateDate(new Date());
+            applyChagneDetail.setCreator(loginUserInfo.getId());
+            applyChagneDetail.setIsdeleted(Constants.ZERO);
+            applyChagneDetail.setApplyChangeId(applyChange.getId());
+            applyChagneDetail.setStartTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),1));
+            applyChagneDetail.setEndTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2));
+            applyChagneDetail.setType(Constants.ZERO);
+
+
+            List<ApplyDetail> checkStaticMemberSolutionList = memberApplyDetailList.stream()
+                            .filter(j->Constants.equalsInteger(j.getSolutionBaseId(),solutions.getBaseId())
+                            && !( j.getApplyStatus() == Constants.InsuranceApplyStatus.CLOSE.getKey() || j.getApplyStatus() == Constants.InsuranceApplyStatus.WTB_CLOSED.getKey() )
+                            && (
+                                ( applyChange.getApplyStartTime().getTime()<= j.getStartTime().getTime() && j.getStartTime().getTime() <  insuranceApply.getEndTime().getTime() )
+                                    ||
+                                ( applyChange.getApplyStartTime().getTime()< j.getEndTime().getTime() && j.getEndTime().getTime() <  insuranceApply.getEndTime().getTime() )
+                                    ||
+                                ( applyChange.getApplyStartTime().getTime()> j.getStartTime().getTime() &&   insuranceApply.getEndTime().getTime() < j.getEndTime().getTime() )
+                                            )
+                            ).collect(Collectors.toList());
+
+            if(checkStaticMemberSolutionList.size() >Constants.ZERO){
+                String companyName = checkStaticMemberSolutionList.get(Constants.ZERO).getCompanyName();
+                String idCode = checkStaticMemberSolutionList.get(Constants.ZERO).getIdcardNo();
+                if(StringUtils.isNotBlank(companyName)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+applyChagneDetail.getMemberName()+" "+idCode+"銆戝凡鍦ㄣ��"+companyName+"銆戝瓨鍦ㄤ繚闄�,璇疯仈绯诲鏈嶇‘璁�");
+                }else{
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+applyChagneDetail.getMemberName()+" "+idCode+"銆戝湪璇ヤ繚闄╂柟妗堜笅宸插瓨鍦ㄦ姇淇濊褰曪紝鏃犳硶杩涜璇ユ搷浣�");
+                }
+            };
+
+            //鏌ヨ鍛樺伐鏄湪涓诲崟涓� 鏄惁瀛樺湪鐢熸晥涓殑鏁版嵁
+            if(!Objects.isNull(applyChagneDetail.getMemberId())){
+                if (applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>().lambda()
+                        .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
+                        .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
+                        .le(ApplyDetail::getStartTime, "now()")
+                        .ge(ApplyDetail::getEndTime, "now()")
+                ) > Constants.ZERO) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄤ繚闅滀腑鐨勪繚鍗曚俊鎭紝鏃犳硶杩涜鍔犱繚");
+                }
+            }
+
+            //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪
+            if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+                if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                }
+            }
+            if (worktypeIdList.stream().filter(d ->  Constants.equalsInteger(d,applyChagneDetail.getWorktypeId()))
+                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
+                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
+            }
+            applyChagneDetail.setMemberId(member.getId());
+            //濡傛灉鏄噺淇濅笟鍔′负浠呮浛鎹� 涓� 鏂规鐨勬墸璐瑰懆鏈熷拰鎬诲懆鏈熺浉绛� 鍒欏鐞嗗噺淇濊垂鐢�
+            if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)
+                    && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit()) && delSize> i){
+                applyChagneDetail.setFee(BigDecimal.ZERO);
+            }else{
+                applyChagneDetail.setFee(detailFee);
+            }
+            applyChagneDetailJoinMapper.insert(applyChagneDetail);
+        }
+    }
+
+    /**
+     * 鍔犱繚鏁版嵁澶勭悊
+     * @param applyChange 鍔犲噺淇濅繚鍗曟暟鎹�
+     * @param addDetailList  鍔犱繚浜哄憳
+     * @param duSolutionList  娲鹃仯鍗曚綅鏂规鏁版嵁
+     * @param loginUserInfo 鎿嶄綔浜�
+     */
+    public void addChangeDetailOld(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
                                 List<DuSolution> duSolutionList,
                                 InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize,
                                 List<Integer> worktypeIdList){
@@ -1456,6 +1650,7 @@
             ApplyDetail applyDetail = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>()
                             .lambda()
                             .eq(ApplyDetail::getApplyId,applyChange.getApplyId()).last("limit 1"));
+
             if(Objects.isNull(applyDetail)){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "淇濆崟涓湭瀛樺湪鏄庣粏璁板綍");
             }
@@ -1548,6 +1743,7 @@
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝瓨鍦ㄤ繚闅滀腑鐨勪繚鍗曚俊鎭紝鏃犳硶杩涜鍔犱繚");
                 }
             }
+
             //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪
             if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
                 if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {

--
Gitblit v1.9.3