From c9df4cfec262ca54af52715af60a1276c37d08c5 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 29 一月 2024 20:12:24 +0800
Subject: [PATCH] 111

---
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java |  215 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 181 insertions(+), 34 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
index 70ba94a..072eaa4 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -12,12 +12,14 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
 import com.doumee.dao.business.join.ApplyDetailJoinMapper;
 import com.doumee.dao.business.join.ApplyLogJoinMapper;
 import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.InsuranceApplyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -606,16 +608,11 @@
         if(!loginUserInfo.getType().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
         }
-        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
-        if(Objects.isNull(solutions)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
-        }
-
         List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
         //鍒ゆ柇鏄惁瀛樺湪閲嶅淇℃伅
-        List<Integer> memberIdList = applyDetailList.stream().map(i->i.getMemberId()).collect(Collectors.toList());
-        Set<Integer> set = new HashSet<>(memberIdList);
-        if(memberIdList.size() != set.size()){
+        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
+        Set<String> set = new HashSet<>(idCardList);
+        if(idCardList.size() != set.size()){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鍛樺伐淇℃伅瀛樺湪閲嶅淇℃伅");
         }
         Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
@@ -624,14 +621,92 @@
         insuranceApply.setIsdeleted(Constants.ZERO);
         insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
         insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
+        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
+        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
         insuranceApply.setCheckDate(new Date());
+        insuranceApply.setCurrentFee(BigDecimal.ZERO);
         insuranceApply.setCheckUserId(loginUserInfo.getId());
         insuranceApply.setStatus(insuranceApplyStatus.getKey());
         insuranceApplyMapper.insert(insuranceApply);
+        //澶勭悊涓嬬骇鏁版嵁
+        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
+        InsuranceApply updBean = new InsuranceApply();
+        updBean.setId(insuranceApply.getId());
+        updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
+        insuranceApplyMapper.updateById(updBean);
+        //瀛樺偍鏃ュ織鏁版嵁
+        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
+        return insuranceApply.getId();
+    }
+
+
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer updateData(InsuranceApply insuranceApply) {
+        if (Objects.isNull(insuranceApply)
+                || Objects.isNull(insuranceApply.getId())
+                || Objects.isNull(insuranceApply.getSolutionId())
+                || Objects.isNull(insuranceApply.getApplyStartTime())
+                || Objects.isNull(insuranceApply.getApplyEndTime())
+                || !CollectionUtils.isNotEmpty(insuranceApply.getApplyDetailList())
+        ) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!loginUserInfo.getType().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        InsuranceApply dbInsuranceApply = insuranceApplyMapper.selectById(insuranceApply.getId());
+        if(Objects.isNull(dbInsuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇敼瀵硅薄淇℃伅");
+        }
+        if(!(dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey())
+                    || dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.FAIL_RETURN.getKey()))
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐘舵�侀敊璇紝褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
+        }
+        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
+        //鍒ゆ柇鏄惁瀛樺湪閲嶅淇℃伅
+        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
+        Set<String> set = new HashSet<>(idCardList);
+        if(idCardList.size() != set.size()){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鍛樺伐淇℃伅瀛樺湪閲嶅淇℃伅");
+        }
+        Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
+        insuranceApply.setEditDate(new Date());
+        insuranceApply.setEditor(loginUserInfo.getId());
+        insuranceApply.setIsdeleted(Constants.ZERO);
+        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
+        insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
+        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
+        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
+        insuranceApply.setCheckDate(new Date());
+        insuranceApply.setCurrentFee(BigDecimal.ZERO);
+        insuranceApply.setCheckUserId(loginUserInfo.getId());
+        insuranceApply.setStatus(insuranceApplyStatus.getKey());
+        applyDetailMapper.delete(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId()));
+        //澶勭悊涓嬬骇鏁版嵁
+        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
+        insuranceApply.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
+        insuranceApplyMapper.updateById(insuranceApply);
+        //瀛樺偍鏃ュ織鏁版嵁
+        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
+        return insuranceApply.getId();
+    }
+
+
+
+    public void dealApplyDetailData(InsuranceApply insuranceApply,List<ApplyDetail> applyDetailList,LoginUserInfo loginUserInfo){
+        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
+        }
         //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
         List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
-                        .eq(DuSolution::getIsdeleted,Constants.ZERO)
-                        .eq(DuSolution::getStatus,Constants.ONE)
+                .eq(DuSolution::getIsdeleted,Constants.ZERO)
+                .eq(DuSolution::getStatus,Constants.ONE)
                 .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId()));
         if(!CollectionUtils.isNotEmpty(duSolutionList)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌娲鹃仯鍗曚綅");
@@ -645,11 +720,13 @@
         if(!CollectionUtils.isNotEmpty(duWorktypeList)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌宸ョ淇℃伅");
         }
+
         if(CollectionUtils.isNotEmpty(applyDetailList)){
             for (int i = 0; i < applyDetailList.size(); i++) {
                 ApplyDetail applyDetail = applyDetailList.get(i);
                 if(Objects.isNull(applyDetail)
-                        ||Objects.isNull(applyDetail.getMemberId())
+                        ||StringUtils.isBlank(applyDetail.getIdcardNo())
+                        ||StringUtils.isBlank(applyDetail.getMemberName())
                         ||Objects.isNull(applyDetail.getDuId())
                         ||Objects.isNull(applyDetail.getWorktypeId())
                 ){
@@ -658,15 +735,49 @@
                 applyDetail.setCreateDate(new Date());
                 applyDetail.setCreator(loginUserInfo.getId());
                 applyDetail.setIsdeleted(Constants.ZERO);
+                applyDetail.setStartTime(insuranceApply.getApplyStartTime());
+                applyDetail.setEndTime(insuranceApply.getApplyEndTime());
                 applyDetail.setSortnum(i);
                 applyDetail.setApplyId(insuranceApply.getId());
+                Member member = new Member();
                 if(Objects.isNull(applyDetail.getMemberId())){
-                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ヤ俊鎭瓨鍦ㄥ紓甯告暟鎹紒");
+                    //鏌ヨ鏄惁瀛樺湪璇ョ敤鎴�
+                    member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                            .eq(Member::getCompanyId,insuranceApply.getCompanyId())
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                            .eq(Member::getIdcardNo,applyDetail.getIdcardNo())
+                            .last(" limit 1")
+                    );
+                    if(Objects.isNull(member)){
+                        member = new Member();
+                        member.setCreateDate(new Date());
+                        member.setCreator(loginUserInfo.getId());
+                        member.setIsdeleted(Constants.ZERO);
+                        member.setName(applyDetail.getMemberName());
+                        member.setCompanyId(insuranceApply.getCompanyId());
+                        member.setSex(Constants.getSexByIdCard(applyDetail.getIdcardNo()));
+                        member.setIdcardNo(applyDetail.getIdcardNo());
+                        member.setApplyId(insuranceApply.getId());
+                        member.setDuId(applyDetail.getDuId());
+                        member.setWorktypeId(applyDetail.getWorktypeId());
+                        memberMapper.insert(member);
+                    }else{
+                        member.setApplyId(insuranceApply.getId());
+                        member.setDuId(applyDetail.getDuId());
+                        member.setWorktypeId(applyDetail.getWorktypeId());
+                        memberMapper.updateById(member);
+                    }
+                }else{
+                    member = memberMapper.selectById(applyDetail.getMemberId());
+                    if(Objects.isNull(member)){
+                        throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ヤ俊鎭瓨鍦ㄥ紓甯告暟鎹紒");
+                    }
+                    member.setApplyId(insuranceApply.getId());
+                    member.setDuId(applyDetail.getDuId());
+                    member.setWorktypeId(applyDetail.getWorktypeId());
+                    memberMapper.updateById(member);
                 }
-                Member member = memberMapper.selectById(applyDetail.getMemberId());
-                if(Objects.isNull(member)){
-                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ヤ俊鎭瓨鍦ㄥ紓甯告暟鎹紒");
-                }
+                applyDetail.setMemberId(member.getId());
                 applyDetail.setIdcardNo(member.getIdcardNo());
                 applyDetail.setSex(member.getSex());
                 applyDetail.setFee(Constants.countDetailFee(solutions,insuranceApply.getApplyEndTime(),insuranceApply.getApplyStartTime()));
@@ -674,18 +785,15 @@
                 if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
                     throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
                 }
-                if(duWorktypeList.stream().filter(d->d.getDuSolutionId().equals(applyDetail.getDuId())&&d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
+                if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
                         .collect(Collectors.toList()).size()<=Constants.ZERO){
                     throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
                 }
             }
             applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
         }
-
-        //瀛樺偍鏃ュ織鏁版嵁
-        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
-        return insuranceApply.getId();
     }
+
 
     public void saveApplyLog(InsuranceApply insuranceApply,Constants.InsuranceApplyStatus insuranceApplyStatus,String content){
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -834,13 +942,18 @@
         if (pageWrap.getModel().getStatus() != null) {
             queryWrapper.eq(InsuranceApply::getStatus, pageWrap.getModel().getStatus());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(CollectionUtils.isNotEmpty(pageWrap.getSorts())){
+            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                    queryWrapper.orderByDesc(sortData.getProperty());
+                } else {
+                    queryWrapper.orderByAsc(sortData.getProperty());
+                }
             }
+        }else{
+            queryWrapper.orderByDesc(InsuranceApply::getCreateDate);
         }
+
         PageData<InsuranceApply> pageData = PageData.from(insuranceApplyJoinMapper.selectJoinPage(page,InsuranceApply.class, queryWrapper));
         if(pageData.getRecords()!=null){
             for (InsuranceApply apply : pageData.getRecords()){
@@ -952,10 +1065,10 @@
         List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
                 new MPJLambdaWrapper<ApplyLog>()
                         .selectAll(ApplyLog.class)
-                        .selectAs(Member::getName,ApplyLog::getCreatorName)
+                        .selectAs(SystemUser::getRealname,ApplyLog::getCreatorName)
                         .selectAs(Company::getName,ApplyLog::getCompanyName)
-                        .leftJoin(Member.class,Member::getId,ApplyLog::getCreator)
-                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .leftJoin(SystemUser.class,SystemUser::getId,ApplyLog::getCreator)
+                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                         .eq(ApplyLog::getApplyId,insuranceApply.getId())
                         .orderByAsc(ApplyLog::getCreateDate)
         );
@@ -1003,6 +1116,18 @@
                 }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_DONE_PDF.getKey())){
                     //鏈�绲備繚闄╁崟
                     model.setBaoxiandanFile(f);
+                }
+
+                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+                    //濡傛灉褰撳墠鏃堕棿澶т簬缁撴潫鏃ユ湡 鍒欎娇鐢ㄧ粨鏉熸棩鏈熷姣斿紑濮嬫棩鏈�
+                    if(DateUtil.compareDate(new Date(),model.getEndTime())>=Constants.ZERO){
+                        model.setServiceDays(DateUtil.daysBetweenDates(model.getEndTime(),model.getStartTime()));
+                    }else if(DateUtil.compareDate(model.getStartTime(),new Date())>=Constants.ZERO){
+                        //鏈紑濮�
+                        model.setServiceDays(Constants.ZERO);
+                    }else{
+                        model.setServiceDays(DateUtil.daysBetweenDates(new Date(),model.getStartTime()));
+                    }
                 }
             }
         }
@@ -1134,15 +1259,37 @@
             }
         }
 
-
-
-
-
-
     }
 
 
 
+    @Override
+    public CountCyclePriceVO getCountCyclePriceVO(CountCyclePriceDTO countCyclePriceDTO){
+        if(Objects.isNull(countCyclePriceDTO)
+            || Objects.isNull(countCyclePriceDTO.getSolutionsId())
+            || Objects.isNull(countCyclePriceDTO.getStartDate())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Solutions solutions = solutionsMapper.selectById(countCyclePriceDTO.getSolutionsId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
+        }
+        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
+        if(solutions.getInsureCycleUnit().equals(Constants.ZERO)){
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,solutions.getInsureCycle()));
+        }else if(solutions.getInsureCycleUnit().equals(Constants.TWO)){
+            Integer monthDays = DateUtil.monthDays(countCyclePriceDTO.getStartDate());
+            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,monthDays);
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
+        }else if(solutions.getInsureCycleUnit().equals(Constants.THREE)){
+            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),2,solutions.getInsureCycle());
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
+        }
+        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,countCyclePriceVO.getEndDate(),countCyclePriceDTO.getStartDate()));
+        return countCyclePriceVO;
+    }
+
 
 
 }

--
Gitblit v1.9.3