|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cn.hutool.core.util.IdcardUtil; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.api.R; | 
|---|
|  |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
|---|
|  |  |  | import com.doumee.core.annotation.excel.ExcelExporter; | 
|---|
|  |  |  | import com.doumee.core.annotation.excel.Reflections; | 
|---|
|  |  |  | import com.doumee.core.constants.ResponseStatus; | 
|---|
|  |  |  | import com.doumee.core.exception.BusinessException; | 
|---|
|  |  |  | import com.doumee.core.model.LoginUserInfo; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.apache.shiro.SecurityUtils; | 
|---|
|  |  |  | import org.checkerframework.checker.units.qual.A; | 
|---|
|  |  |  | import org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | 
|---|
|  |  |  | private ApplyDetailJoinMapper applyDetailJoinMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SettleClaimsMapper settleClaimsMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MemberInsuranceJoinMapper memberInsuranceJoinMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MemberMapper memberMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MultifileMapper multifileMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private NoticesMapper noticesMapper; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 平台退回投保 | 
|---|
|  |  |  | * 平台退回申请 | 
|---|
|  |  |  | * @param param | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | if(param.getId() == null | 
|---|
|  |  |  | || param.getValidCode() == null | 
|---|
|  |  |  | || param.getApplyStartTime() == null | 
|---|
|  |  |  | || param.getPidanFile() == null | 
|---|
|  |  |  | ||StringUtils.isBlank( param.getPidanFile().getFileurl()) | 
|---|
|  |  |  | ||StringUtils.isBlank( param.getPidanFile() .getName())){ | 
|---|
|  |  |  | || CollectionUtils.isEmpty(param.getPidanFileList()) | 
|---|
|  |  |  | //                || param.getPidanFile() == null | 
|---|
|  |  |  | //                ||StringUtils.isBlank( param.getPidanFile().getFileurl()) | 
|---|
|  |  |  | //                ||StringUtils.isBlank( param.getPidanFile() .getName()) | 
|---|
|  |  |  | ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if(param.getDelValidTime() == null){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(param.getApplyStartTime().getTime()>insuranceApply.getStartTime().getTime()&¶m.getApplyStartTime().getTime()<=insuranceApply.getEndTime().getTime())){ | 
|---|
|  |  |  | if(!(param.getApplyStartTime().getTime()>=insuranceApply.getStartTime().getTime()&¶m.getApplyStartTime().getTime()<=insuranceApply.getEndTime().getTime())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"批增日期必须处于保单申请日期内"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(!(param.getDelValidTime().getTime()>insuranceApply.getStartTime().getTime()&¶m.getDelValidTime().getTime()<=insuranceApply.getEndTime().getTime())){ | 
|---|
|  |  |  | if(!(param.getDelValidTime().getTime()>=insuranceApply.getStartTime().getTime()&¶m.getDelValidTime().getTime()<=insuranceApply.getEndTime().getTime())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"批减日期必须处于保单申请日期内"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | 
|---|
|  |  |  | update.setApplyStartTime(param.getApplyStartTime()); | 
|---|
|  |  |  | update.setDelValidTime(param.getDelValidTime()); | 
|---|
|  |  |  | update.setCode(model.getCode()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | param.getPidanFile().setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | param.getPidanFile().setCreator(user.getId()); | 
|---|
|  |  |  | param.getPidanFile().setObjId(update.getId()); | 
|---|
|  |  |  | param.getPidanFile().setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey()); | 
|---|
|  |  |  | param.getPidanFile().setType(Constants.TWO); | 
|---|
|  |  |  | multifileMapper.insert(param.getPidanFile()); | 
|---|
|  |  |  | List<Multifile> pidanFileList = param.getPidanFileList(); | 
|---|
|  |  |  | for (Multifile pidanFile:pidanFileList) { | 
|---|
|  |  |  | if(StringUtils.isBlank( pidanFile.getFileurl()) | 
|---|
|  |  |  | ||StringUtils.isBlank( pidanFile .getName())) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"批单文件参数错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pidanFile.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | pidanFile.setCreator(user.getId()); | 
|---|
|  |  |  | pidanFile.setObjId(update.getId()); | 
|---|
|  |  |  | pidanFile.setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | pidanFile.setObjType(Constants.MultiFile.CA_PD_PDF.getKey()); | 
|---|
|  |  |  | pidanFile.setType(Constants.TWO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | multifileMapper.insertBatchSomeColumn(pidanFileList); | 
|---|
|  |  |  | update.setApplyId(model.getApplyId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyChangeMapper.updateById(update); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        if(1==1){ | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE; | 
|---|
|  |  |  | 
|---|
|  |  |  | public     Integer editPidan(ApplyChange param) { | 
|---|
|  |  |  | if(param.getId() == null | 
|---|
|  |  |  | || param.getValidCode() == null | 
|---|
|  |  |  | || param.getPidanFile() == null | 
|---|
|  |  |  | || param.getCheckInfo() == null | 
|---|
|  |  |  | ||StringUtils.isBlank( param.getPidanFile().getFileurl()) | 
|---|
|  |  |  | ||StringUtils.isBlank( param.getPidanFile() .getName())){ | 
|---|
|  |  |  | || CollectionUtils.isEmpty(param.getPidanFileList()) | 
|---|
|  |  |  | //                || param.getPidanFile() == null | 
|---|
|  |  |  | //                ||StringUtils.isBlank( param.getPidanFile().getFileurl()) | 
|---|
|  |  |  | //                ||StringUtils.isBlank( param.getPidanFile() .getName()) | 
|---|
|  |  |  | ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(Multifile::getObjId,update.getId()) | 
|---|
|  |  |  | .eq(Multifile::getObjType,Constants.MultiFile.CA_PD_PDF.getKey()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | param.getPidanFile().setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | param.getPidanFile().setObjId(update.getId()); | 
|---|
|  |  |  | param.getPidanFile().setCreator(user.getId()); | 
|---|
|  |  |  | param.getPidanFile().setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey()); | 
|---|
|  |  |  | param.getPidanFile().setType(Constants.TWO); | 
|---|
|  |  |  | multifileMapper.insert(param.getPidanFile()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Multifile> pidanFileList = param.getPidanFileList(); | 
|---|
|  |  |  | for (Multifile pidanFile:pidanFileList) { | 
|---|
|  |  |  | if(StringUtils.isBlank( pidanFile.getFileurl()) | 
|---|
|  |  |  | ||StringUtils.isBlank( pidanFile .getName())) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"批单文件参数错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pidanFile.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | pidanFile.setCreator(user.getId()); | 
|---|
|  |  |  | pidanFile.setObjId(update.getId()); | 
|---|
|  |  |  | pidanFile.setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | pidanFile.setObjType(Constants.MultiFile.CA_PD_PDF.getKey()); | 
|---|
|  |  |  | pidanFile.setType(Constants.TWO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | multifileMapper.insertBatchSomeColumn(param.getPidanFileList()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        param.getPidanFile().setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | //        param.getPidanFile().setObjId(update.getId()); | 
|---|
|  |  |  | //        param.getPidanFile().setCreator(user.getId()); | 
|---|
|  |  |  | //        param.getPidanFile().setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | //        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey()); | 
|---|
|  |  |  | //        param.getPidanFile().setType(Constants.TWO); | 
|---|
|  |  |  | //        multifileMapper.insert(param.getPidanFile()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PALTFORM_EDIT_PIDAN; | 
|---|
|  |  |  | String info =  applyLogType.getInfo(); | 
|---|
|  |  |  | 
|---|
|  |  |  | memberInsurance.setRelationType(Constants.ONE); | 
|---|
|  |  |  | memberInsurance.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(),1)); | 
|---|
|  |  |  | memberInsurance.setRelationId(oldModel.getId()); | 
|---|
|  |  |  | memberInsurance.setIsValid(Constants.ZERO); | 
|---|
|  |  |  | memberInsuranceJoinMapper.insert(memberInsurance); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda() | 
|---|
|  |  |  | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到保险方案"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if(solutions.getDataType().equals(Constants.ONE)){ | 
|---|
|  |  |  | //            solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1")); | 
|---|
|  |  |  | //            if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | //                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到方案最新版本信息"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | List<ApplyChagneDetail> addList = detailList.stream().filter(f->Constants.equalsInteger(f.getType(),Constants.ZERO)).collect(Collectors.toList()); | 
|---|
|  |  |  | List<ApplyChagneDetail> reduceList = detailList.stream().filter(f->Constants.equalsInteger(f.getType(),Constants.ONE)).collect(Collectors.toList()); | 
|---|
|  |  |  | //减保业务 | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(ApplyDetail::getMemberId, detail.getMemberId()) | 
|---|
|  |  |  | .orderByDesc(ApplyDetail::getCreateDate) | 
|---|
|  |  |  | .last("limit 1")); | 
|---|
|  |  |  | if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) { | 
|---|
|  |  |  | //            if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) { | 
|---|
|  |  |  | //                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】原保单信息有误,当前申请不支持减保处理!"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            if(!(oldModel.getStartTime().getTime()<=update.getDelValidTime().getTime()&& oldModel.getEndTime().getTime()>=update.getDelValidTime().getTime())){ | 
|---|
|  |  |  | //                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】减保日期未在保单记录日期中!"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | if (oldModel == null || oldModel.getEndTime() == null || oldModel.getEndTime().getTime() < update.getDelValidTime().getTime()) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】原保单信息有误,当前申请不支持减保处理!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(oldModel.getStartTime().getTime()<update.getDelValidTime().getTime()&& oldModel.getEndTime().getTime()>=update.getDelValidTime().getTime())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】减保日期未在保单记录日期中!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date delValidTime = oldModel.getStartTime().compareTo(update.getDelValidTime())!=0? | 
|---|
|  |  |  | DateUtil.getMontageDate(update.getDelValidTime(), 3): | 
|---|
|  |  |  | DateUtil.getMontageDate(update.getDelValidTime(), 2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BigDecimal sumFee = Objects.isNull(insuranceApply.getServerCost())? | 
|---|
|  |  |  | solutions.getPrice(): | 
|---|
|  |  |  | solutions.getPrice().add(insuranceApply.getServerCost()); | 
|---|
|  |  |  | // 减保后 总费用 | 
|---|
|  |  |  | BigDecimal updateFee =  Constants.reduceFee( | 
|---|
|  |  |  | solutions, | 
|---|
|  |  |  | sumFee | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),delValidTime | 
|---|
|  |  |  | ) ; | 
|---|
|  |  |  | // 减保后 总费用 默认为减保后为 0 | 
|---|
|  |  |  | BigDecimal updateFee = BigDecimal.ZERO; | 
|---|
|  |  |  | // 减保后 批单日期  默认为 批单减保日期  00:00:00 | 
|---|
|  |  |  | Date delValidTime = update.getDelValidTime(); | 
|---|
|  |  |  | //当审批时间 大于 申请的时间时 计算实际减少金额 因为已扣金额会大于 应扣金额 | 
|---|
|  |  |  | BigDecimal updateCurrentFee = BigDecimal.ZERO; | 
|---|
|  |  |  | if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2),oldModel.getStartTime()) > 0) { | 
|---|
|  |  |  | //如果批单日期 大于 员工保单的开始日期 | 
|---|
|  |  |  | if(update.getDelValidTime().getTime() > oldModel.getStartTime().getTime()){ | 
|---|
|  |  |  | //批单日期 大于 保单开日期  获取实际的批单结束日期 计算实际减保后总费用 | 
|---|
|  |  |  | delValidTime = DateUtil.getMontageDate(update.getDelValidTime(), 3); | 
|---|
|  |  |  | updateFee =  Constants.reduceFee( | 
|---|
|  |  |  | solutions, | 
|---|
|  |  |  | sumFee | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),delValidTime | 
|---|
|  |  |  | ) ; | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | delValidTime  = oldModel.getStartTime(); | 
|---|
|  |  |  | updateFee = BigDecimal.ZERO; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (oldModel.getStartTime().getTime() < System.currentTimeMillis()) { | 
|---|
|  |  |  | //// 2024年5月8日17:37:23 修改 计算产生费用 | 
|---|
|  |  |  | updateCurrentFee = Constants.produceFee(solutions,sumFee,insuranceApply.getStartTime(),insuranceApply.getEndTime(), | 
|---|
|  |  |  | oldModel.getStartTime() | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | UpdateWrapper<ApplyDetail> updateWrapper = new UpdateWrapper<ApplyDetail>(); | 
|---|
|  |  |  | updateWrapper.lambda() | 
|---|
|  |  |  | .setSql(" fee = " + updateFee) | 
|---|
|  |  |  | .setSql(" current_fee = " + updateCurrentFee) | 
|---|
|  |  |  | .set(ApplyDetail::getEndTime, delValidTime) | 
|---|
|  |  |  | .set(update.getDelValidTime().getTime() <= oldModel.getStartTime().getTime(),ApplyDetail::getChangeStatus,Constants.TWO) | 
|---|
|  |  |  | .set(ApplyDetail::getEditor, update.getEditor()) | 
|---|
|  |  |  | .set(ApplyDetail::getEditDate, update.getEditDate()) | 
|---|
|  |  |  | .eq(ApplyDetail::getId, oldModel.getId()); | 
|---|
|  |  |  | BigDecimal reduceMoney = BigDecimal.ZERO; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE) | 
|---|
|  |  |  | && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ | 
|---|
|  |  |  | 
|---|
|  |  |  | updateWrapper.lambda().set(ApplyDetail::getFee,updateFee) | 
|---|
|  |  |  | .set(ApplyDetail::getChangeStatus,Constants.TWO); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | reduceMoney = solutions.getPrice().multiply(new BigDecimal(-1)); | 
|---|
|  |  |  | //标记数据已被替换 | 
|---|
|  |  |  | updateWrapper.lambda().set(ApplyDetail::getReduceMoney,solutions.getPrice().multiply(new BigDecimal(-1))) | 
|---|
|  |  |  | updateWrapper.lambda().set(ApplyDetail::getReduceMoney,reduceMoney) | 
|---|
|  |  |  | .set(ApplyDetail::getChangeStatus,Constants.ONE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | detail.setApplyDetailId(oldModel.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyDetailJoinMapper.update(null, updateWrapper); | 
|---|
|  |  |  | totalFee = totalFee.add(updateFee).subtract(oldModel.getFee()); | 
|---|
|  |  |  | totalFee = totalFee.add(updateFee).subtract(oldModel.getFee()).add(reduceMoney); | 
|---|
|  |  |  | currentFee = currentFee.add(updateCurrentFee); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<MemberInsurance> oldMemberInsurance =   memberInsuranceJoinMapper.selectList( | 
|---|
|  |  |  | new QueryWrapper<MemberInsurance>().lambda() | 
|---|
|  |  |  | .eq(MemberInsurance::getIsValid,Constants.ZERO) | 
|---|
|  |  |  | .eq(MemberInsurance::getRelationId,oldModel.getId())); | 
|---|
|  |  |  | for (MemberInsurance memberInsurance:oldMemberInsurance) { | 
|---|
|  |  |  | //记录数据早于批单日期 | 
|---|
|  |  |  | if(memberInsurance.getStartTime().getTime()>delValidTime.getTime()){ | 
|---|
|  |  |  | memberInsurance.setIsValid(Constants.ONE); | 
|---|
|  |  |  | }else if(memberInsurance.getEndTime().getTime()>=delValidTime.getTime() | 
|---|
|  |  |  | && memberInsurance.getStartTime().getTime()<=delValidTime.getTime()){ | 
|---|
|  |  |  | memberInsurance.setFee(updateFee); | 
|---|
|  |  |  | memberInsurance.setEndTime(delValidTime); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | memberInsuranceJoinMapper.updateById(memberInsurance); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改 员工投保明细记录 历史数据 | 
|---|
|  |  |  | memberInsuranceJoinMapper.update(null, new UpdateWrapper<MemberInsurance>().lambda() | 
|---|
|  |  |  | .setSql(" fee = " + updateFee) | 
|---|
|  |  |  | .set(MemberInsurance::getEndTime, delValidTime) | 
|---|
|  |  |  | .eq(MemberInsurance::getRelationId, oldModel.getId()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | //            memberInsuranceJoinMapper.update(null, new UpdateWrapper<MemberInsurance>().lambda() | 
|---|
|  |  |  | //                    .setSql(" fee = " + updateFee) | 
|---|
|  |  |  | //                    .set(MemberInsurance::getEndTime, delValidTime) | 
|---|
|  |  |  | //                    .eq(MemberInsurance::getRelationId, oldModel.getId()) | 
|---|
|  |  |  | //            ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改业务明细行数据实际批单日期 | 
|---|
|  |  |  | applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda() | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "未查询到员工数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询人员信息是否存在相同的方案下是否存在 冲突数据 | 
|---|
|  |  |  | InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getId(), | 
|---|
|  |  |  | member.getIdcardNo(),member.getName(),detail.getStartTime(),detail.getEndTime(), | 
|---|
|  |  |  | InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getBaseId(), | 
|---|
|  |  |  | member.getId(),member.getIdcardNo(),member.getName(),detail.getStartTime(),detail.getEndTime(), | 
|---|
|  |  |  | applyDetailJoinMapper); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询加保人员是否存在 冲突的 保单明细数据 | 
|---|
|  |  |  | 
|---|
|  |  |  | add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2)); | 
|---|
|  |  |  | add.setFee(Constants.addFee(solutions,solutions.getPrice(),insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),update.getApplyStartTime(),insuranceApply.getEndTime())); | 
|---|
|  |  |  | add.setChangeStatus(Constants.ZERO); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE) | 
|---|
|  |  |  | && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ | 
|---|
|  |  |  | && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit()) && i < reduceList.size()){ | 
|---|
|  |  |  | add.setReduceId(reduceList.get(i).getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(new Date().compareTo(DateUtil.getMontageDate(detail.getStartTime(), 2))>=0){ | 
|---|
|  |  |  | 
|---|
|  |  |  | add.setCurrentFee(BigDecimal.ZERO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyDetailJoinMapper.insert(add); | 
|---|
|  |  |  | //如果不是替换业务的加保数据 则添加实际产生费用 | 
|---|
|  |  |  | detail.setFee(Objects.isNull(add.getReduceId())?add.getFee():BigDecimal.ZERO); | 
|---|
|  |  |  | totalFee = totalFee.add(add.getFee()); | 
|---|
|  |  |  | currentFee = currentFee.add(add.getCurrentFee()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Objects.isNull(add.getReduceId())){ | 
|---|
|  |  |  | currentFee = currentFee.add(add.getCurrentFee()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | MemberInsurance memberInsurance = new MemberInsurance(detail, update, update.getEditor(), add.getId(),solutions.getId()); | 
|---|
|  |  |  | memberInsurance.setStartTime(add.getStartTime()); | 
|---|
|  |  |  | memberInsurance.setEndTime(add.getEndTime()); | 
|---|
|  |  |  | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /*for (ApplyChagneDetail detail : detailList) { | 
|---|
|  |  |  | Member member = memberMapper.selectById(detail.getMemberId()); | 
|---|
|  |  |  | if(Objects.isNull(member)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到员工数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Constants.equalsInteger(detail.getType(), Constants.ZERO)) { | 
|---|
|  |  |  | //查询加保人员是否存在 冲突的 保单明细数据 | 
|---|
|  |  |  | if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>() | 
|---|
|  |  |  | .lambda() | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId,update.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyDetail::getIdcardNo,detail.getIdcardNo()) | 
|---|
|  |  |  | .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(update.getApplyStartTime(),1)) | 
|---|
|  |  |  | .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(detail.getEndTime(),2)) | 
|---|
|  |  |  | )>Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,加保人员【" + detail.getMemberName() + "】存在日期冲突的数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //加保 | 
|---|
|  |  |  | ApplyDetail add = new ApplyDetail(); | 
|---|
|  |  |  | add.setApplyId(update.getApplyId()); | 
|---|
|  |  |  | add.setValidCode(update.getValidCode()); | 
|---|
|  |  |  | add.setFee(detail.getFee()); | 
|---|
|  |  |  | add.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | add.setCreator(update.getEditor()); | 
|---|
|  |  |  | add.setCreateDate(update.getEditDate()); | 
|---|
|  |  |  | add.setMemberId(detail.getMemberId()); | 
|---|
|  |  |  | add.setMemberName(detail.getMemberName()); | 
|---|
|  |  |  | add.setWorktypeId(detail.getWorktypeId()); | 
|---|
|  |  |  | add.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | add.setIdcardNo(detail.getIdcardNo()); | 
|---|
|  |  |  | add.setSex(Constants.getSexByIdCard(detail.getIdcardNo())); | 
|---|
|  |  |  | add.setMemberName(detail.getMemberName()); | 
|---|
|  |  |  | add.setRemark(detail.getRemark()); | 
|---|
|  |  |  | add.setDuId(detail.getDuId()); | 
|---|
|  |  |  | add.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(), 1)); | 
|---|
|  |  |  | add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2)); | 
|---|
|  |  |  | add.setFee(Constants.addFee(solutions,solutions.getPrice(),insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),update.getApplyStartTime(),insuranceApply.getEndTime())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(new Date().compareTo(DateUtil.getMontageDate(detail.getStartTime(), 2))>=0){ | 
|---|
|  |  |  | //2024年5月8日17:37:23 修改 计算产生费用 | 
|---|
|  |  |  | add.setCurrentFee( | 
|---|
|  |  |  | Constants.produceFee(solutions,add.getFee(),add.getStartTime(),add.getEndTime(),add.getStartTime()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | add.setCurrentFee(BigDecimal.ZERO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyDetailJoinMapper.insert(add); | 
|---|
|  |  |  | totalFee = totalFee.add(add.getFee()); | 
|---|
|  |  |  | currentFee = currentFee.add(add.getCurrentFee()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MemberInsurance memberInsurance = new MemberInsurance(detail, update, update.getEditor(), add.getId(),solutions.getId()); | 
|---|
|  |  |  | memberInsurance.setStartTime(add.getStartTime()); | 
|---|
|  |  |  | memberInsurance.setEndTime(add.getEndTime()); | 
|---|
|  |  |  | memberInsurance.setRelationType(Constants.ONE); | 
|---|
|  |  |  | memberInsuranceList.add(memberInsurance); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda() | 
|---|
|  |  |  | .set(ApplyChagneDetail::getFee,add.getFee()) | 
|---|
|  |  |  | .set(ApplyChagneDetail::getStartTime,DateUtil.getMontageDate(update.getApplyStartTime(), 1)) | 
|---|
|  |  |  | .eq(ApplyChagneDetail::getId,detail.getId()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //减保操作 | 
|---|
|  |  |  | //查询员工是在主单下 是否存在生效中的数据 | 
|---|
|  |  |  | ApplyDetail oldModel = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda() | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId, update.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyDetail::getMemberId, detail.getMemberId()) | 
|---|
|  |  |  | .orderByDesc(ApplyDetail::getCreateDate) | 
|---|
|  |  |  | .last("limit 1")); | 
|---|
|  |  |  | if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】原保单信息有误,当前申请不支持减保处理!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(oldModel.getStartTime().getTime()<update.getDelValidTime().getTime()&& oldModel.getEndTime().getTime()>=update.getDelValidTime().getTime())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】减保日期未在保单记录日期中!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date delValidTime = oldModel.getStartTime().compareTo(update.getDelValidTime())!=0? | 
|---|
|  |  |  | DateUtil.getMontageDate(update.getDelValidTime(), 3): | 
|---|
|  |  |  | DateUtil.getMontageDate(update.getDelValidTime(), 2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BigDecimal sumFee = Objects.isNull(insuranceApply.getServerCost())? | 
|---|
|  |  |  | solutions.getPrice(): | 
|---|
|  |  |  | solutions.getPrice().add(insuranceApply.getServerCost()); | 
|---|
|  |  |  | // 减保后 总费用 | 
|---|
|  |  |  | BigDecimal updateFee =  Constants.reduceFee( | 
|---|
|  |  |  | solutions, | 
|---|
|  |  |  | sumFee | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),delValidTime | 
|---|
|  |  |  | ) ; | 
|---|
|  |  |  | //当审批时间 大于 申请的时间时 计算实际减少金额 因为已扣金额会大于 应扣金额 | 
|---|
|  |  |  | BigDecimal updateCurrentFee = BigDecimal.ZERO; | 
|---|
|  |  |  | if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2),oldModel.getStartTime()) > 0) { | 
|---|
|  |  |  | //// 2024年5月8日17:37:23 修改 计算产生费用 | 
|---|
|  |  |  | updateCurrentFee = Constants.produceFee(solutions,sumFee,insuranceApply.getStartTime(),insuranceApply.getEndTime(), | 
|---|
|  |  |  | oldModel.getStartTime() | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | UpdateWrapper<ApplyDetail> updateWrapper = new UpdateWrapper<ApplyDetail>(); | 
|---|
|  |  |  | updateWrapper.lambda() | 
|---|
|  |  |  | .setSql(" fee = " + updateFee) | 
|---|
|  |  |  | .setSql(" current_fee = " + updateCurrentFee) | 
|---|
|  |  |  | .set(ApplyDetail::getEndTime, delValidTime) | 
|---|
|  |  |  | .set(ApplyDetail::getEditor, update.getEditor()) | 
|---|
|  |  |  | .set(ApplyDetail::getEditDate, update.getEditDate()) | 
|---|
|  |  |  | .eq(ApplyDetail::getId, oldModel.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE) | 
|---|
|  |  |  | && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ | 
|---|
|  |  |  | if(delValidTime.getTime()<=oldModel.getStartTime().getTime()){ | 
|---|
|  |  |  | updateFee  = BigDecimal.ZERO; | 
|---|
|  |  |  | updateWrapper.lambda().set(ApplyDetail::getFee,updateFee) | 
|---|
|  |  |  | .set(ApplyDetail::getChangeStatus,Constants.TWO); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //标记数据已被替换 | 
|---|
|  |  |  | updateWrapper.lambda().set(ApplyDetail::getReduceMoney,solutions.getPrice().multiply(new BigDecimal(-1))) | 
|---|
|  |  |  | .set(ApplyDetail::getChangeStatus,Constants.ONE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyDetailJoinMapper.update(null, updateWrapper); | 
|---|
|  |  |  | totalFee = totalFee.add(updateFee).subtract(oldModel.getFee()); | 
|---|
|  |  |  | currentFee = currentFee.add(updateCurrentFee); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改 员工投保明细记录 历史数据 | 
|---|
|  |  |  | memberInsuranceJoinMapper.update(null, new UpdateWrapper<MemberInsurance>().lambda() | 
|---|
|  |  |  | .setSql(" fee = " + updateFee) | 
|---|
|  |  |  | .set(MemberInsurance::getEndTime, delValidTime) | 
|---|
|  |  |  | .eq(MemberInsurance::getRelationId, oldModel.getId()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改业务明细行数据实际批单日期 | 
|---|
|  |  |  | applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda() | 
|---|
|  |  |  | .set(ApplyChagneDetail::getFee,updateFee.subtract(oldModel.getFee())) | 
|---|
|  |  |  | .set( ApplyChagneDetail::getEndTime, delValidTime) | 
|---|
|  |  |  | .eq(ApplyChagneDetail::getId,detail.getId()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | member.setApplyId(update.getApplyId()); | 
|---|
|  |  |  | member.setDuId(detail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(detail.getWorktypeId()); | 
|---|
|  |  |  | member.setStartTime(detail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(detail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }*/ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (memberInsuranceList != null && memberInsuranceList.size() > 0) { | 
|---|
|  |  |  | memberInsuranceJoinMapper.insertBatchSomeColumn(memberInsuranceList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | .set(InsuranceApply::getEditDate, update.getEditDate()) | 
|---|
|  |  |  | .eq(InsuranceApply::getId, update.getApplyId()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | update.setFee(totalFee); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | update.setFee(totalFee); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 平台退回投保 | 
|---|
|  |  |  | * 平台退回申请 | 
|---|
|  |  |  | * @param param | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(), "用户类型错误:非企业用户无法进行该操作"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if (!loginUserInfo.getType().equals(Constants.ONE)) { | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "用户类型错误:非企业用户无法进行该操作"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChange.getApplyId()); | 
|---|
|  |  |  | if (Objects.isNull(insuranceApply)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!(Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()) | 
|---|
|  |  |  | ||Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey()) | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | )) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "保单状态错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO ) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId()); | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到保险方案"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if(solutions.getDataType().equals(Constants.ONE)){ | 
|---|
|  |  |  | //            solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1")); | 
|---|
|  |  |  | //            if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | //                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到方案最新版本信息"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda() | 
|---|
|  |  |  | .eq(CompanySolution::getCompanyId,loginUserInfo.getCompanyId()) | 
|---|
|  |  |  | .eq(CompanySolution::getCompanyId,insuranceApply.getCompanyId()) | 
|---|
|  |  |  | .eq(CompanySolution::getSolutionBaseId,solutions.getBaseId()) | 
|---|
|  |  |  | .eq(CompanySolution::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .last(" limit 1 ") | 
|---|
|  |  |  | 
|---|
|  |  |  | if(Objects.isNull(companySolution)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到企业分配保险方案信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //申请时间必须处于保单的时间范围内 | 
|---|
|  |  |  | //        if (!(DateUtil.compareDate( insuranceApply.getStartTime(),applyChange.getValidTime()) >= Constants.ZERO | 
|---|
|  |  |  | //                && 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.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | //根据申请日期 处理加减保的 实际生效日期 | 
|---|
|  |  |  | if(applyChange.getType().equals(Constants.ZERO)){ | 
|---|
|  |  |  | if(Objects.nonNull(solutions.getAddValidDays())){ | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setApplyStartTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Objects.nonNull(solutions.getDelValidDays())){ | 
|---|
|  |  |  | applyChange.setDelValidTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setDelValidTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //仅支持替换  保证加减保日期为同一天 | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){ | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | applyChange.getDelValidTime() | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | initJJBValidTime(applyChange,insuranceApply,solutions); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setApplyStartTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyChange.setStatus(Constants.ZERO); | 
|---|
|  |  |  | applyChangeMapper.insert(applyChange); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_COMPANY_COMMIT; | 
|---|
|  |  |  | ApplyLog log = new ApplyLog(applyChange,applyLogType.getName(),"",applyChange.getId(),applyLogType.getKey(), null, null); | 
|---|
|  |  |  | applyLogMapper.insert(log); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        if(1==1){ | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "存在进行中的加减保/换厂申请"); | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.DATA_EMPTY ); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return applyChange.getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(), "用户类型错误:非企业用户无法进行该操作"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        /*if (!loginUserInfo.getType().equals(Constants.ONE)) { | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "用户类型错误:非企业用户无法进行该操作"); | 
|---|
|  |  |  | //        }*/ | 
|---|
|  |  |  | ApplyChange dbApplyChange = applyChangeMapper.selectById(applyChange.getId()); | 
|---|
|  |  |  | if(Objects.isNull(dbApplyChange)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|---|
|  |  |  | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if (DateUtil.compareDate(applyChange.getValidTime(),insuranceApply.getStartTime()) > Constants.ZERO) { | 
|---|
|  |  |  | //            applyChange.setValidTime(insuranceApply.getStartTime()); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId()); | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到保险方案"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(solutions.getDataType().equals(Constants.ONE)){ | 
|---|
|  |  |  | solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1")); | 
|---|
|  |  |  | solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda() | 
|---|
|  |  |  | .eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1")); | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到方案最新版本信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(applyChange.getType().equals(Constants.ZERO)){ | 
|---|
|  |  |  | if(Objects.nonNull(solutions.getAddValidDays())){ | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setApplyStartTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Objects.nonNull(solutions.getDelValidDays())){ | 
|---|
|  |  |  | applyChange.setDelValidTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setDelValidTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //仅支持替换  保证加减保日期为同一天 | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){ | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | applyChange.getDelValidTime() | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //处理期望生效日期 | 
|---|
|  |  |  | initJJBValidTime(applyChange,insuranceApply,solutions); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setApplyStartTime(applyChange.getValidTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | return applyChange.getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void initJJBValidTime(ApplyChange applyChange, InsuranceApply insuranceApply, Solutions solutions) { | 
|---|
|  |  |  | if( applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime() | 
|---|
|  |  |  | && Objects.nonNull(solutions.getAddValidDays())){ | 
|---|
|  |  |  | //如果保单已生效,按照t+n的规则 | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //如果保单未生或者没有配置生效天数,设置期望生效日期为保单生效开始时间 | 
|---|
|  |  |  | applyChange.setApplyStartTime(applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime()?applyChange.getValidTime():insuranceApply.getStartTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime() | 
|---|
|  |  |  | &&Objects.nonNull(solutions.getDelValidDays())){ | 
|---|
|  |  |  | applyChange.setDelValidTime( | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChange.setDelValidTime(applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime()?applyChange.getValidTime():insuranceApply.getStartTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //仅支持替换  保证加减保日期为同一天 | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){ | 
|---|
|  |  |  | applyChange.setApplyStartTime( | 
|---|
|  |  |  | applyChange.getDelValidTime() | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static Logger logger = LoggerFactory.getLogger(ApplyChangeServiceImpl.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public BigDecimal dealApplyChangeData(ApplyChange applyChange,InsuranceApply insuranceApply | 
|---|
|  |  |  | ,CompanySolution companySolution,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal fee){ | 
|---|
|  |  |  | Long start = System.currentTimeMillis(); | 
|---|
|  |  |  | logger.error("处理加减保保单数据开始时间:=========================>"+start); | 
|---|
|  |  |  | if(Constants.equalsInteger(applyChange.getType(),Constants.ZERO)){ | 
|---|
|  |  |  | if(Objects.nonNull(solutions.getDelOnlyReplace())&& solutions.getDelOnlyReplace().equals(Constants.ONE)){ | 
|---|
|  |  |  | if(applyChange.getDelDetailList().size() > applyChange.getAddDetailList().size()){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询保险方案下的所有派遣单位 | 
|---|
|  |  |  | List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>() | 
|---|
|  |  |  | .selectAll(DuSolution.class) | 
|---|
|  |  |  | .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId) | 
|---|
|  |  |  | .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId()) | 
|---|
|  |  |  | .eq(DispatchUnit::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DispatchUnit::getUnitStatus,Constants.ONE) | 
|---|
|  |  |  | .eq(DuSolution::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DuSolution::getStatus,Constants.ONE) | 
|---|
|  |  |  | .eq(DuSolution::getSolutionId,companySolution.getSolutionId())); | 
|---|
|  |  |  | if(!CollectionUtils.isNotEmpty(duSolutionList)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"数据异常:保险方案下未查询到派遣单位"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询所有派遣单位下的工种 | 
|---|
|  |  |  | List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList()); | 
|---|
|  |  |  | List<DuWorktype> duWorktypeList = duWorktypeMapper.selectList(new QueryWrapper<DuWorktype>().lambda() | 
|---|
|  |  |  | .eq(DuWorktype::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DuWorktype::getStatus,Constants.ONE) | 
|---|
|  |  |  | .in(DuWorktype::getDuSolutionId,duSolutionIdList)); | 
|---|
|  |  |  | if (!CollectionUtils.isNotEmpty(duWorktypeList)) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "数据异常:保险方案下未查询到工种信息"); | 
|---|
|  |  |  | List<DuSolution>  duSolutionList = new ArrayList<>(); | 
|---|
|  |  |  | List<DuWorktype> duWorktypeList = new ArrayList<>(); | 
|---|
|  |  |  | List<Integer> worktypeIdList = new ArrayList<>(); | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){ | 
|---|
|  |  |  | //查询保险方案下的所有派遣单位 | 
|---|
|  |  |  | duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>() | 
|---|
|  |  |  | .selectAll(DuSolution.class) | 
|---|
|  |  |  | .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId) | 
|---|
|  |  |  | .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId()) | 
|---|
|  |  |  | .eq(DispatchUnit::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DispatchUnit::getUnitStatus,Constants.ONE) | 
|---|
|  |  |  | .eq(DuSolution::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DuSolution::getStatus,Constants.ONE) | 
|---|
|  |  |  | .eq(DuSolution::getSolutionId,companySolution.getSolutionId())); | 
|---|
|  |  |  | if(!CollectionUtils.isNotEmpty(duSolutionList)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"数据异常:保险方案下未查询到派遣单位"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询所有派遣单位下的工种 | 
|---|
|  |  |  | List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList()); | 
|---|
|  |  |  | duWorktypeList = duWorktypeMapper.selectList(new QueryWrapper<DuWorktype>().lambda() | 
|---|
|  |  |  | .eq(DuWorktype::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(DuWorktype::getStatus,Constants.ONE) | 
|---|
|  |  |  | .in(DuWorktype::getDuSolutionId,duSolutionIdList)); | 
|---|
|  |  |  | if (!CollectionUtils.isNotEmpty(duWorktypeList)) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "数据异常:保险方案下未查询到工种信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | worktypeIdList = duWorktypeList.stream().map(i->i.getWorkTypeId()).collect(Collectors.toList()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //查询方案下所有工种数据 | 
|---|
|  |  |  | List<SolutionWorktype> solutionWorktypeList = solutionWorktypeJoinMapper.selectList(new QueryWrapper<SolutionWorktype>().lambda().eq(SolutionWorktype::getSolutionId,solutions.getId())); | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(solutionWorktypeList)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,保险方案下未查询到工种信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | worktypeIdList = solutionWorktypeList.stream().map(i->i.getWorktypeId()).collect(Collectors.toList()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO = new ApplyChangeCyclePriceDTO(); | 
|---|
|  |  |  | 
|---|
|  |  |  | List<ApplyChagneDetail> delDetailList = applyChange.getDelDetailList(); | 
|---|
|  |  |  | //加保数据 | 
|---|
|  |  |  | List<ApplyChagneDetail> addDetailList = applyChange.getAddDetailList(); | 
|---|
|  |  |  | //换厂业务 | 
|---|
|  |  |  | List<ApplyChagneDetail> changeDetailList = applyChange.getChangeDetailList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(delDetailList) | 
|---|
|  |  |  | && CollectionUtils.isEmpty(addDetailList) | 
|---|
|  |  |  | && CollectionUtils.isEmpty(changeDetailList)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,未添加人员数据无法进行提交"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (CollectionUtils.isNotEmpty(addDetailList)) { | 
|---|
|  |  |  | if(Objects.isNull(solutions.getCanAdd()) || solutions.getCanAdd().equals(Constants.ZERO)){ | 
|---|
|  |  |  | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(), | 
|---|
|  |  |  | applyChange.getApplyStartTime(),insuranceApply.getEndTime()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.addChangeDetail(applyChange,addDetailList,duWorktypeList,duSolutionList,insuranceApply,solutions,loginUserInfo,detailFee,delDetailList.size()); | 
|---|
|  |  |  | this.addChangeDetail(applyChange,addDetailList,duSolutionList,insuranceApply,solutions,loginUserInfo,detailFee,delDetailList.size(),worktypeIdList); | 
|---|
|  |  |  | fee = addDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo, BigDecimal.ZERO, | 
|---|
|  |  |  | DateUtil.getMontageDate(applyChange.getDelValidTime(),3)); | 
|---|
|  |  |  | fee = fee.add(delDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add)); | 
|---|
|  |  |  | //            fee = fee.add(delDetailList.stream().map(ApplyChagneDetail::getReduceMoney).reduce(BigDecimal.ZERO,BigDecimal::add)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //换厂业务 | 
|---|
|  |  |  | List<ApplyChagneDetail> changeDetailList = applyChange.getChangeDetailList(); | 
|---|
|  |  |  | if (CollectionUtils.isNotEmpty(changeDetailList)) { | 
|---|
|  |  |  | if(Objects.isNull(solutions.getCanChangeUnit()) || solutions.getCanChangeUnit().equals(Constants.ZERO)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该保险方案无法进行换厂操作"); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起,人员录入数据存在相同数据!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.changeDetail(applyChange,changeDetailList,duWorktypeList,duSolutionList,loginUserInfo); | 
|---|
|  |  |  | this.changeDetail(applyChange,changeDetailList,duSolutionList,loginUserInfo,solutions,worktypeIdList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Long end = System.currentTimeMillis(); | 
|---|
|  |  |  | logger.error("处理加减保保单数据结束时间:=========================>"+end +";单条耗时:====》"+(end-start)); | 
|---|
|  |  |  | return fee; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void delChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> delDetailList,InsuranceApply insuranceApply,Solutions solutions, | 
|---|
|  |  |  | LoginUserInfo loginUserInfo,BigDecimal detailFee,Date endTime){ | 
|---|
|  |  |  | if(DateUtil.getMontageDate(applyChange.getDelValidTime(),3).getTime()>insuranceApply.getEndTime().getTime()){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保生效期不能晚于保单结束日期"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (ApplyChagneDetail applyChagneDetail : delDetailList) { | 
|---|
|  |  |  | if (Objects.isNull(applyChagneDetail.getMemberId())) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //2024-10-29 15:17:54 查询是否已出险 已出险无法进行投保 | 
|---|
|  |  |  | if(settleClaimsMapper.selectCount(new QueryWrapper<SettleClaims>().lambda() | 
|---|
|  |  |  | .eq(SettleClaims::getInsuranceApplyId,applyChange.getApplyId()) | 
|---|
|  |  |  | .eq(SettleClaims::getMemberId,applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | .in(SettleClaims::getStatus,Constants.SettleClaimsStatus.DEAL_ING.getKey() | 
|---|
|  |  |  | ,Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey() | 
|---|
|  |  |  | ,Constants.SettleClaimsStatus.FINISH_ACCEPTANCE.getKey()) | 
|---|
|  |  |  | )>Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】已出险无法进行减保"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | //2024-10-29 15:17:54 查询人员是否已减保 已减保后无法再次减保 | 
|---|
|  |  |  | //            if(applyChangeDetailJoinMapper.selectJoinCount(new MPJLambdaWrapper<ApplyChagneDetail>() | 
|---|
|  |  |  | //                    .leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId) | 
|---|
|  |  |  | //                    .eq(ApplyChagneDetail::getType,Constants.ONE) | 
|---|
|  |  |  | //                    .eq(ApplyChange::getApplyId,applyChange.getApplyId()) | 
|---|
|  |  |  | //                            .eq(ApplyChagneDetail::getMemberId,applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | //                    .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.CLOSE.getKey() | 
|---|
|  |  |  | //                            ,Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey() | 
|---|
|  |  |  | //                    ) | 
|---|
|  |  |  | //            )>Constants.ZERO){ | 
|---|
|  |  |  | //                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】已减保无法再次进行减保"); | 
|---|
|  |  |  | //            }; | 
|---|
|  |  |  | //2025-1-16 09:11:14 根据查询当前人员最后一次的加减保记录 如果最后一条记录是加保进入 则可以减保 如果最后一条记录是减保记录 则不可以减保 如果为空 这可以进行操作 | 
|---|
|  |  |  | ApplyChagneDetail lastApplyChagneDetail = applyChangeDetailJoinMapper.selectJoinOne(ApplyChagneDetail.class, | 
|---|
|  |  |  | new MPJLambdaWrapper<ApplyChagneDetail>() | 
|---|
|  |  |  | .leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId) | 
|---|
|  |  |  | .ne(ApplyChagneDetail::getType,Constants.TWO) | 
|---|
|  |  |  | .eq(ApplyChange::getApplyId,applyChange.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyChagneDetail::getMemberId,applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.CLOSE.getKey() | 
|---|
|  |  |  | ,Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey() | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | .orderByDesc(ApplyChagneDetail::getId) | 
|---|
|  |  |  | .last(" limit 1 ") | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if(Objects.nonNull(lastApplyChagneDetail)){ | 
|---|
|  |  |  | if(Constants.equalsInteger(lastApplyChagneDetail.getType(),Constants.ONE)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】已减保无法再次进行减保"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询减保人员是否存在 冲突的 保单明细数据 | 
|---|
|  |  |  | if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>() | 
|---|
|  |  |  | .lambda() | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询员工是在主单下 是否存在生效中的数据 | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda() | 
|---|
|  |  |  | .eq(ApplyDetail::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId, applyChange.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | //                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),1)) | 
|---|
|  |  |  | 
|---|
|  |  |  | if(!Constants.equalsInteger(applyDetail.getChangeStatus(),Constants.ZERO)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"减保人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,数据已被减保无法再次减保"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyChagneDetail.setPrice(applyDetail.getPrice()); | 
|---|
|  |  |  | applyChagneDetail.setCreateDate(new Date()); | 
|---|
|  |  |  | applyChagneDetail.setCreator(loginUserInfo.getId()); | 
|---|
|  |  |  | applyChagneDetail.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | 
|---|
|  |  |  | applyChagneDetail.setType(Constants.ONE); | 
|---|
|  |  |  | applyChagneDetail.setApplyDetailId(applyDetail.getId()); | 
|---|
|  |  |  | applyChagneDetail.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | applyChagneDetail.setEndTime(endTime); | 
|---|
|  |  |  | if(endTime.getTime()<applyChagneDetail.getStartTime().getTime()){ | 
|---|
|  |  |  | applyChagneDetail.setEndTime(applyChagneDetail.getStartTime()); | 
|---|
|  |  |  | applyChagneDetail.setFee(applyDetail.getFee().multiply(BigDecimal.valueOf(-1))); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | applyChagneDetail.setEndTime(endTime); | 
|---|
|  |  |  | applyChagneDetail.setFee( | 
|---|
|  |  |  | Constants.reduceFee(solutions, | 
|---|
|  |  |  | Objects.isNull(insuranceApply.getServerCost())? | 
|---|
|  |  |  | solutions.getPrice():solutions.getPrice().add(insuranceApply.getServerCost()), | 
|---|
|  |  |  | insuranceApply.getStartTime(), | 
|---|
|  |  |  | insuranceApply.getFinalEndTime(), | 
|---|
|  |  |  | applyDetail.getStartTime(),endTime) | 
|---|
|  |  |  | .subtract(applyDetail.getFee() | 
|---|
|  |  |  | )); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyChagneDetail.setReduceMoney(BigDecimal.ZERO); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | member.setApplyId(insuranceApply.getId()); | 
|---|
|  |  |  | member.setDuId(applyChagneDetail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(applyChagneDetail.getWorktypeId()); | 
|---|
|  |  |  | member.setStartTime(applyChagneDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  | //查询减保日期 | 
|---|
|  |  |  | //            Integer delDays = DateUtil.daysBetweenDates(applyDetail.getEndTime(),endTime); | 
|---|
|  |  |  | //            ; | 
|---|
|  |  |  | //减保金额 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询周期数量 | 
|---|
|  |  |  | applyChagneDetail.setFee( | 
|---|
|  |  |  | Constants.reduceFee(solutions, | 
|---|
|  |  |  | Objects.isNull(insuranceApply.getServerCost())? | 
|---|
|  |  |  | solutions.getPrice():solutions.getPrice().add(insuranceApply.getServerCost()), | 
|---|
|  |  |  | insuranceApply.getStartTime(), | 
|---|
|  |  |  | insuranceApply.getFinalEndTime(), | 
|---|
|  |  |  | applyDetail.getStartTime(),endTime) | 
|---|
|  |  |  | .subtract(applyDetail.getFee() | 
|---|
|  |  |  | )); | 
|---|
|  |  |  | //如果是减保业务为仅替换 且 方案的扣费周期和总周期相等 则处理减保费用 | 
|---|
|  |  |  | if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE) | 
|---|
|  |  |  | && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit())){ | 
|---|
|  |  |  | applyChagneDetail.setReduceMoney(solutions.getPrice().multiply(new BigDecimal(-1))); | 
|---|
|  |  |  | applyChagneDetail.setFee(BigDecimal.ZERO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyChagneDetail.setId(null); | 
|---|
|  |  |  | applyChagneDetailJoinMapper.insert(applyChagneDetail); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 加保数据处理 | 
|---|
|  |  |  | * @param applyChange | 
|---|
|  |  |  | * @param addDetailList | 
|---|
|  |  |  | * @param duWorktypeList | 
|---|
|  |  |  | * @param duSolutionList | 
|---|
|  |  |  | * @param loginUserInfo | 
|---|
|  |  |  | * @param applyChange 加减保保单数据 | 
|---|
|  |  |  | * @param addDetailList  加保人员 | 
|---|
|  |  |  | * @param duSolutionList  派遣单位方案数据 | 
|---|
|  |  |  | * @param loginUserInfo 操作人 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList, | 
|---|
|  |  |  | List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList, | 
|---|
|  |  |  | InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize){ | 
|---|
|  |  |  | 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(), "加保生效期不能大于保单结束日期"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (int i = 0; i < addDetailList.size(); i++) { | 
|---|
|  |  |  | ApplyChagneDetail applyChagneDetail = addDetailList.get(i); | 
|---|
|  |  |  | if (    Objects.isNull(applyChagneDetail.getDuId()) | 
|---|
|  |  |  | 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() + "】必填项缺失"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询人员信息是否存在相同的方案下是否存在 冲突数据 | 
|---|
|  |  |  | InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getId(), | 
|---|
|  |  |  | applyChagneDetail.getMemberIdcardNo(),applyChagneDetail.getMemberName(),insuranceApply.getStartTime(),insuranceApply.getEndTime(), | 
|---|
|  |  |  | applyDetailJoinMapper); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询加保人员是否存在 冲突的 保单明细数据 | 
|---|
|  |  |  | if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>() | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId,applyChange.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo()) | 
|---|
|  |  |  | .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1)) | 
|---|
|  |  |  | .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(insuranceApply.getEndTime(),2)) | 
|---|
|  |  |  | //.ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),3)) | 
|---|
|  |  |  | .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(insuranceApply.getEndTime(),2)) | 
|---|
|  |  |  | )>Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,加保人员【" + applyChagneDetail.getMemberName() + "】存在日期冲突的数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setName(applyChagneDetail.getMemberName()); | 
|---|
|  |  |  | member.setCompanyId(insuranceApply.getCompanyId()); | 
|---|
|  |  |  | member.setSex(Constants.getSexByIdCard(applyChagneDetail.getIdcardNo())); | 
|---|
|  |  |  | if(!IdcardUtil.isValidCard(applyDetail.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()); | 
|---|
|  |  |  | member.setStartTime(applyChagneDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyChagneDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.insert(member); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | member = memberMapper.selectById(applyChagneDetail.getMemberId()); | 
|---|
|  |  |  | if(Objects.isNull(member)){ | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setEndTime(applyChagneDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询人员信息是否存在相同的方案下是否存在 冲突数据 | 
|---|
|  |  |  | InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getBaseId(), | 
|---|
|  |  |  | applyChagneDetail.getMemberId(),applyChagneDetail.getIdcardNo(),applyChagneDetail.getMemberName(),applyChange.getApplyStartTime(),insuranceApply.getEndTime(), | 
|---|
|  |  |  | applyDetailJoinMapper); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据员工身份证进行判断年龄 | 
|---|
|  |  |  | long age = Constants.getAgeByIdCard(member.getIdcardNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //验证派遣单位信息 与工种信息 是否存在 | 
|---|
|  |  |  | 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() + "】员工派遣单位未查询到!"); | 
|---|
|  |  |  | 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() + "】员工派遣单位未查询到!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId())) | 
|---|
|  |  |  | 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() + "】员工工种信息未查询到!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 换厂业务 | 
|---|
|  |  |  | * @param applyChange | 
|---|
|  |  |  | * @param duWorktypeList | 
|---|
|  |  |  | * @param duSolutionList | 
|---|
|  |  |  | * @param changeDetailList | 
|---|
|  |  |  | * @param loginUserInfo | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void changeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> changeDetailList,List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,LoginUserInfo loginUserInfo){ | 
|---|
|  |  |  | public void changeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> changeDetailList | 
|---|
|  |  |  | ,List<DuSolution> duSolutionList,LoginUserInfo loginUserInfo,Solutions solutions ,List<Integer> worktypeIdList){ | 
|---|
|  |  |  | for (ApplyChagneDetail applyChagneDetail : changeDetailList) { | 
|---|
|  |  |  | if (Objects.isNull(applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | || Objects.isNull(applyChagneDetail.getOldDuId()) | 
|---|
|  |  |  | || (Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && Objects.isNull(applyChagneDetail.getOldDuId())) | 
|---|
|  |  |  | || Objects.isNull(applyChagneDetail.getOldWorktypeId()) | 
|---|
|  |  |  | || Objects.isNull(applyChagneDetail.getDuId()) | 
|---|
|  |  |  | || (Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) &&  Objects.isNull(applyChagneDetail.getDuId())) | 
|---|
|  |  |  | || Objects.isNull(applyChagneDetail.getWorktypeId()) | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】必填项缺失"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询员工是在主单下 是否存在生效中的数据 | 
|---|
|  |  |  | List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda() | 
|---|
|  |  |  | .eq(ApplyDetail::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId, applyChange.getApplyId()) | 
|---|
|  |  |  | .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId()) | 
|---|
|  |  |  | .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1)) | 
|---|
|  |  |  | 
|---|
|  |  |  | if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())>0){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【"+DateUtil.getDate(applyDetail.getEndTime(),"yyyy-MM-dd HH:mm:ss")+"】无法通过本次申请"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //验证派遣单位信息 与工种信息 是否存在 | 
|---|
|  |  |  | 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() + "】员工派遣单位未查询到!"); | 
|---|
|  |  |  | 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() + "】员工派遣单位未查询到!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId())) | 
|---|
|  |  |  | 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() + "】员工工种信息未查询到!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if((Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId())) | 
|---|
|  |  |  | && applyChagneDetail.getOldWorktypeId().equals(applyChagneDetail.getWorktypeId())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】换厂数据相同!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setApplyId(applyChange.getApplyId()); | 
|---|
|  |  |  | member.setDuId(applyChagneDetail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(applyChagneDetail.getWorktypeId()); | 
|---|
|  |  |  | member.setStartTime(applyChagneDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyChagneDetail.getEndTime()); | 
|---|
|  |  |  | //            member.setStartTime(applyChagneDetail.getStartTime()); | 
|---|
|  |  |  | //            member.setEndTime(applyChagneDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | QueryWrapper<ApplyChange> wrapper = new QueryWrapper<>(applyChange); | 
|---|
|  |  |  | return applyChangeMapper.selectList(wrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<ApplyChange> findListByApplyId(Integer applyId,Integer type) { | 
|---|
|  |  |  | List<ApplyChange> applyChangeList = applyChangeMapper.selectList(new QueryWrapper<ApplyChange>() | 
|---|
|  |  |  | .lambda().eq(ApplyChange::getApplyId,applyId) | 
|---|
|  |  |  | .eq(Objects.nonNull(type),ApplyChange::getType,type) | 
|---|
|  |  |  | .in(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey()) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | return applyChangeList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public PageData<ApplyChange> findPage(PageWrap<ApplyChange> pageWrap) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId) | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getType()),ApplyChange::getType,model.getType()) | 
|---|
|  |  |  | .eq(ApplyChange::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getStatus())&&!model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,model.getStatus()) | 
|---|
|  |  |  | .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus, | 
|---|
|  |  |  | Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey(), | 
|---|
|  |  |  | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getType()),ApplyChange::getType,model.getType()) | 
|---|
|  |  |  | .eq(ApplyChange::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getStatus())&&!model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,model.getStatus()) | 
|---|
|  |  |  | .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus, | 
|---|
|  |  |  | Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey(), | 
|---|
|  |  |  | 
|---|
|  |  |  | queryWrapper.orderByDesc(ApplyDetail::getCreateDate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PageData<ApplyChange> pageData = PageData.from(applyChangeJoinMapper.selectJoinPage(page,ApplyChange.class, queryWrapper)); | 
|---|
|  |  |  | for (ApplyChange applyChange:pageData.getRecords()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyChange.setChangeMoney(Constants.getTwoPoint(applyChange.getChangeMoney())); | 
|---|
|  |  |  | applyChange.setFee(Constants.getTwoPoint(applyChange.getFee())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return pageData; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public  List<ApplyChange> monthTotalList(ApplyChange model){ | 
|---|
|  |  |  | if(model.getApplyId() ==null || model.getYear() == null){ | 
|---|
|  |  |  | return  new ArrayList<>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | MPJLambdaWrapper<ApplyChange> queryWrapper = new MPJLambdaWrapper<>(); | 
|---|
|  |  |  | queryWrapper | 
|---|
|  |  |  | .select("count(t.id)",ApplyChange::getCountNum) | 
|---|
|  |  |  | .select("sum(t.fee)",ApplyChange::getFee) | 
|---|
|  |  |  | .select("DATE_FORMAT(t.create_date, '%Y-%m')",ApplyChange::getMonth) | 
|---|
|  |  |  | .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId) | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getType()),ApplyChange::getType,model.getType()) | 
|---|
|  |  |  | .eq(ApplyChange::getApplyId,model.getApplyId()) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getStatus())&&!model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,model.getStatus()) | 
|---|
|  |  |  | .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()), | 
|---|
|  |  |  | ApplyChange::getStatus, | 
|---|
|  |  |  | Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey(), | 
|---|
|  |  |  | Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey()) | 
|---|
|  |  |  | .eq(ApplyChange::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getSolutionType()),Solutions::getType,model.getSolutionType()) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getBaseSolutionsId()),Solutions::getBaseId,model.getBaseSolutionsId()) | 
|---|
|  |  |  | .like(StringUtils.isNotBlank(model.getSolutionsName()),Solutions::getName,model.getSolutionsName()) | 
|---|
|  |  |  | .ge( ApplyChange::getCreateDate, model.getYear()+"-01-01 00:00:00" ) | 
|---|
|  |  |  | .lt(ApplyChange::getCreateDate, (model.getYear()+1)+"-01-01 00:00:00") | 
|---|
|  |  |  | .groupBy("month"  ); | 
|---|
|  |  |  | /*     LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | //企业人员查看本企业数据 | 
|---|
|  |  |  | if(loginUserInfo.getType().equals(Constants.ONE)){ | 
|---|
|  |  |  | queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId()); | 
|---|
|  |  |  | }else if(loginUserInfo.getType().equals(Constants.TWO)){ | 
|---|
|  |  |  | //如果是商户查看 | 
|---|
|  |  |  | if(model.getSolutionType()!=null && model.getSolutionType() ==0){ | 
|---|
|  |  |  | queryWrapper.exists("select cs.id from company_solution cs where cs.isdeleted=0 and cs.company_id=t1.company_id and cs.shop_id="+loginUserInfo.getCompanyId()); | 
|---|
|  |  |  | }else if(model.getSolutionType()!=null && model.getSolutionType() ==1){ | 
|---|
|  |  |  | queryWrapper.eq(Solutions::getShopId,loginUserInfo.getCompanyId()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | queryWrapper.apply("((t2.type=0 and exists(select cs.id from company_solution cs where cs.isdeleted=0 and cs.company_id=t1.company_id and cs.shop_id="+loginUserInfo.getCompanyId()+")) or (" + | 
|---|
|  |  |  | "t2.type=1 and t2.shop_id="+loginUserInfo.getCompanyId()+"))") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){ | 
|---|
|  |  |  | queryWrapper.in(InsuranceApply::getCompanyId, loginUserInfo.getCompanyIdList()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | queryWrapper.eq(InsuranceApply::getCompanyId, -1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | queryWrapper.eq(model.getCompanyId()!=null,InsuranceApply::getCompanyId, model.getCompanyId()); | 
|---|
|  |  |  | }*/ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<ApplyChange> list =applyChangeJoinMapper.selectJoinList(ApplyChange.class,queryWrapper); | 
|---|
|  |  |  | for (ApplyChange applyChange:list) { | 
|---|
|  |  |  | applyChange.setFee(Constants.getTwoPoint(applyChange.getFee())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<ApplyChange> result = new ArrayList<>(); | 
|---|
|  |  |  | for (int i = 1; i <= 12; i++) { | 
|---|
|  |  |  | if(i<10){ | 
|---|
|  |  |  | result.add(getMonthDayFromList(model.getYear() +"-0"+i,list)); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | result.add(getMonthDayFromList(model.getYear() +"-"+i,list)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private ApplyChange getMonthDayFromList(String s, List<ApplyChange> list) { | 
|---|
|  |  |  | for(ApplyChange d : list){ | 
|---|
|  |  |  | if(StringUtils.equals(s,d.getMonth())){ | 
|---|
|  |  |  | return d; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ApplyChange d =  new ApplyChange(); | 
|---|
|  |  |  | d.setMonth(s); | 
|---|
|  |  |  | d.setFee(new BigDecimal(0)); | 
|---|
|  |  |  | d.setCountNum(0); | 
|---|
|  |  |  | return d; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | .selectAs(InsuranceApply::getEndTime,ApplyChange::getEndTime) | 
|---|
|  |  |  | .selectAs(Solutions::getName,ApplyChange::getSolutionsName) | 
|---|
|  |  |  | .selectAs(Solutions::getType,ApplyChange::getSolutionType) | 
|---|
|  |  |  | .selectAs(Solutions::getHasDispatchUnit,ApplyChange::getHasDispatchUnit) | 
|---|
|  |  |  | .selectAs(Company::getName,ApplyChange::getCompanyName) | 
|---|
|  |  |  | .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 0  )",ApplyChange::getAddNum) | 
|---|
|  |  |  | .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 1  )",ApplyChange::getDelNum) | 
|---|
|  |  |  | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getType()),ApplyChange::getType,model.getType()) | 
|---|
|  |  |  | .eq(ApplyChange::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(!Objects.isNull(model.getStatus())&&!model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,model.getStatus()) | 
|---|
|  |  |  | .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()), | 
|---|
|  |  |  | ApplyChange::getStatus, | 
|---|
|  |  |  | 
|---|
|  |  |  | String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() | 
|---|
|  |  |  | +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode(); | 
|---|
|  |  |  | for(ApplyChange model : list){ | 
|---|
|  |  |  | for(Multifile f : multifiles) { | 
|---|
|  |  |  | if (StringUtils.isBlank(f.getFileurl())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | List<Multifile> multifileList = multifiles.stream().filter(m->Constants.equalsInteger(m.getObjId(), model.getId())&& | 
|---|
|  |  |  | Constants.equalsInteger(m.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())).collect(Collectors.toList()); | 
|---|
|  |  |  | if(CollectionUtils.isNotEmpty(multifileList)){ | 
|---|
|  |  |  | for (Multifile multifile:multifileList) { | 
|---|
|  |  |  | multifile.setFileurlFull(path + multifile.getFileurl()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | f.setFileurlFull(path+f.getFileurl()); | 
|---|
|  |  |  | if(Constants.equalsInteger(f.getObjId(), model.getId()) ){ | 
|---|
|  |  |  | if (Constants.equalsInteger(f.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())) { | 
|---|
|  |  |  | //签署前的投保单 | 
|---|
|  |  |  | model.setPidanFile(f); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | model.setPidanFileList(multifileList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | .selectAs(Solutions::getName,ApplyChange::getSolutionsName) | 
|---|
|  |  |  | .selectAs(Solutions::getType,ApplyChange::getSolutionType) | 
|---|
|  |  |  | .selectAs(Solutions::getId,ApplyChange::getSolutionsId) | 
|---|
|  |  |  | .selectAs(Solutions::getDelOnlyReplace,ApplyChange::getDelOnlyReplace) | 
|---|
|  |  |  | .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 0  )",ApplyChange::getAddNum) | 
|---|
|  |  |  | .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 1  )",ApplyChange::getDelNum) | 
|---|
|  |  |  | .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 2  )",ApplyChange::getChangeNum) | 
|---|
|  |  |  | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | applyChange.setApplyLogList(applyLogList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyChange.setFee(Constants.getTwoPoint(applyChange.getFee())); | 
|---|
|  |  |  | List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() | 
|---|
|  |  |  | .eq(Multifile::getObjId, applyChange.getId() ) | 
|---|
|  |  |  | //                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey() | 
|---|
|  |  |  | 
|---|
|  |  |  | }else    if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey())){ | 
|---|
|  |  |  | //签署后申请单 | 
|---|
|  |  |  | applyChange.setApplyUnitFile(f); | 
|---|
|  |  |  | }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_PD_PDF.getKey())){ | 
|---|
|  |  |  | //签署后的投保单 | 
|---|
|  |  |  | applyChange.setPidanFile(f); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_PD_PDF.getKey())){ | 
|---|
|  |  |  | //                    //签署后的投保单 | 
|---|
|  |  |  | //                    applyChange.setPidanFile(f); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Multifile> multifileList = multifiles.stream().filter(m->Constants.equalsInteger(m.getObjId(), applyChange.getId())&& | 
|---|
|  |  |  | Constants.equalsInteger(m.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())).collect(Collectors.toList()); | 
|---|
|  |  |  | if(CollectionUtils.isNotEmpty(multifileList)){ | 
|---|
|  |  |  | for (Multifile multifile:multifileList) { | 
|---|
|  |  |  | multifile.setFileurlFull(path + multifile.getFileurl()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | applyChange.setPidanFileList(multifileList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该申请状态已流转,当前不支持签章操作!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | Company company = user.getCompany(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId()); | 
|---|
|  |  |  | if(Objects.isNull(insuranceApply)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询保单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Company company = companyMapper.selectById(insuranceApply.getCompanyId()); | 
|---|
|  |  |  | if(Objects.isNull(company)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到企业信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String companyName = company.getName(); | 
|---|
|  |  |  | String creditCode = company.getCode(); | 
|---|
|  |  |  | String email = company.getEmail(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /*if(debugModel){ | 
|---|
|  |  |  | company = companyMapper.selectById(model.getCompanyId()); | 
|---|
|  |  |  | }*/ | 
|---|
|  |  |  | if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId()); | 
|---|
|  |  |  | if(Objects.isNull(insuranceApply)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询保单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId()); | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode(); | 
|---|
|  |  |  | notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString()); | 
|---|
|  |  |  | String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"投保企业签章",company.getSignId(),notifyUrl); | 
|---|
|  |  |  | String applyNo = signService.applySignLocalFileByParam(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"投保企业签章",company.getSignId(),notifyUrl,new Float(0.7)); | 
|---|
|  |  |  | //临时使用 | 
|---|
|  |  |  | //        fileUrl = | 
|---|
|  |  |  | //                "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241120/1c80f0d7-ab35-4355-b9fe-944464643115.pdf"; | 
|---|
|  |  |  | //        String applyNo = signService.applySign(companyName,fileUrl,companyName,creditCode,email,"人员名单签章",null,notifyUrl); | 
|---|
|  |  |  | if(StringUtils.isBlank(applyNo) ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | BigDecimal sumPrice = Objects.isNull(insuranceApply.getServerCost())?solutions.getPrice():solutions.getPrice().add(insuranceApply.getServerCost()); | 
|---|
|  |  |  | CountCyclePriceVO returnCountCyclePriceVO = new CountCyclePriceVO(); | 
|---|
|  |  |  | returnCountCyclePriceVO.setCyclePrice(Constants.addFee(solutions, | 
|---|
|  |  |  | sumPrice | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(), | 
|---|
|  |  |  | DateUtil.afterDateByType(applyChangeCyclePriceDTO.getValidTime(),0,solutions.getAddValidDays()),insuranceApply.getEndTime())); | 
|---|
|  |  |  | Date addStartTime = DateUtil.afterDateByType(applyChangeCyclePriceDTO.getValidTime(),0,solutions.getAddValidDays()); | 
|---|
|  |  |  | if(addStartTime.getTime()<insuranceApply.getStartTime().getTime()){ | 
|---|
|  |  |  | returnCountCyclePriceVO.setCyclePrice(solutions.getPrice()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | returnCountCyclePriceVO.setCyclePrice(Constants.addFee(solutions, | 
|---|
|  |  |  | sumPrice | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),addStartTime | 
|---|
|  |  |  | ,insuranceApply.getEndTime())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BigDecimal reducePrice =  solutions.getPrice().subtract(Constants.reduceFee(solutions, | 
|---|
|  |  |  | sumPrice | 
|---|
|  |  |  | ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime() | 
|---|
|  |  |  | 
|---|
|  |  |  | ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //验证 验证码 | 
|---|
|  |  |  | //        if(!debugModel){ | 
|---|
|  |  |  | //            smsEmailService.validateCode(smsCheckDTO.getCode()); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | ApplyChange model = this.queryApplyChangeData(smsCheckDTO.getBusinessId()); | 
|---|
|  |  |  | if(Objects.isNull(model)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询加减保/换厂信息"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode(); | 
|---|
|  |  |  | notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString()); | 
|---|
|  |  |  | String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"人员名单签章",company.getSignId(),notifyUrl); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //临时使用 | 
|---|
|  |  |  | //            fileUrl =  "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241230/a0d128f2-ba6c-4ad4-b86b-b2610a513d41.pdf"; | 
|---|
|  |  |  | //            String applyNo = signService.applySignDoByParam(company.getName(),fileUrl,company.getName(),company.getCode(),company.getEmail(),"人员名单签章",company.getSignId(),notifyUrl,new Float(0.7)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String applyNo = signService.applySignLocalFileByParam(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"人员名单签章",company.getSignId(),notifyUrl,new Float(0.7)); | 
|---|
|  |  |  | if(StringUtils.isBlank(applyNo) ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = {Exception.class,BusinessException.class}) | 
|---|
|  |  |  | public Integer check(ApplyChange applyChange) { | 
|---|
|  |  |  | public Integer check(ApplyChange applyChange,UnionChangeServiceImpl unionChangeService) { | 
|---|
|  |  |  | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | if(!user.getType().equals(Constants.TWO)){ | 
|---|
|  |  |  | if(!(Constants.equalsInteger(user.getType(),Constants.ZERO) || Constants.equalsInteger(user.getType(),Constants.TWO))){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非商户端无法进行该操作"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(applyChange.getId() == null){ | 
|---|
|  |  |  | 
|---|
|  |  |  | if(Constants.equalsInteger(model.getType(),Constants.ONE)){ | 
|---|
|  |  |  | noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //删除全部待办 | 
|---|
|  |  |  | //删除全部待办 | 
|---|
|  |  |  | noticesMapper.delete(new QueryWrapper<Notices>().lambda() | 
|---|
|  |  |  | .eq(Notices::getObjType, noticeObjectType.getKey()) | 
|---|
|  |  |  | .eq(Notices::getObjId, model.getId())); | 
|---|
|  |  |  | if(Constants.equalsInteger(applyChange.getDealBackApply(),Constants.ZERO)){ | 
|---|
|  |  |  | InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId()); | 
|---|
|  |  |  | if(Objects.isNull(insuranceApply)||Objects.isNull(insuranceApply.getUnionApplyId())){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到保单数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | SaveUnionChangeDTO saveUnionChangeDTO = new SaveUnionChangeDTO(); | 
|---|
|  |  |  | saveUnionChangeDTO.setApplyDate(model.getValidTime()); | 
|---|
|  |  |  | List<Integer> applyIds = new ArrayList<>(); | 
|---|
|  |  |  | applyIds.add(model.getId()); | 
|---|
|  |  |  | saveUnionChangeDTO.setApplyIds(applyIds); | 
|---|
|  |  |  | saveUnionChangeDTO.setApplyChange(model); | 
|---|
|  |  |  | saveUnionChangeDTO.setUnionApplyId(insuranceApply.getUnionApplyId()); | 
|---|
|  |  |  | saveUnionChangeDTO.setBusinessType(model.getType()); | 
|---|
|  |  |  | if(Constants.equalsInteger(user.getType(),Constants.TWO)){ | 
|---|
|  |  |  | saveUnionChangeDTO.setShopId(user.getCompanyId()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>() | 
|---|
|  |  |  | .lambda().eq(CompanySolution::getSolutionBaseId,solutions.getBaseId()) | 
|---|
|  |  |  | .eq(CompanySolution::getCompanyId,insuranceApply.getCompanyId()).last(" limit 1 ")); | 
|---|
|  |  |  | if(Objects.isNull(companySolution)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到企业方案信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | saveUnionChangeDTO.setShopId(companySolution.getShopId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | unionChangeService.merge(saveUnionChangeDTO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return  1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|