k94314517
2025-07-04 50fb58286ed3b718c39a97e0987ee7561a295651
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -40,6 +40,8 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -228,6 +230,13 @@
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
//                    .select( " ( select count(1) from apply_detail a inner join insurance_apply b on a.APPLY_ID = b.id  where a.member_id = t.id and b.company_id = "+loginUserInfo.getCompanyId()+"  and b.status in (" +
//                            " "+Constants.InsuranceApplyStatus.WTB_DONE.getKey()+","+Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()+" ) " +
//                            " and  a.end_time >= now() ) ", Member::getValidNum )
//
//                    .select( " ( select count(1) from apply_detail a inner join insurance_apply b on a.APPLY_ID = b.id  where a.member_id = t.id and b.company_id = "+loginUserInfo.getCompanyId()+"  and b.status in (" +
//                            " "+Constants.InsuranceApplyStatus.WTB_DONE.getKey()+","+Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()+" ) " +
//                            " and a.end_time < now() ) ", Member::getInvalidNum );
        }else{
            if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
                queryWrapper.in(InsuranceApply::getCompanyId, loginUserInfo.getCompanyIdList());
@@ -235,44 +244,31 @@
                queryWrapper.eq(InsuranceApply::getCompanyId, -1);
            }
            queryWrapper.eq(pageWrap.getModel().getCompanyId()!=null,InsuranceApply::getCompanyId, pageWrap.getModel().getCompanyId());
//                    .select( " ( select count(1) from apply_detail a inner join insurance_apply b on a.APPLY_ID = b.id  where a.member_id = t.id and b.status in (" +
//                            " "+Constants.InsuranceApplyStatus.WTB_DONE.getKey()+","+Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()+" ) " +
//                            " and  a.end_time >= now() ) ", Member::getValidNum )
//                    .select( " ( select count(1) from apply_detail a inner join insurance_apply b on a.APPLY_ID = b.id  where a.member_id = t.id and b.status in (" +
//                            " "+Constants.InsuranceApplyStatus.WTB_DONE.getKey()+","+Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()+" ) " +
//                            " and a.end_time < now() ) ", Member::getInvalidNum );
        }
        queryWrapper.selectAll(Member.class)
                .selectAs(DispatchUnit::getName,Member::getDuName)
                .selectAs(Worktype::getName,Member::getWorkTypeName)
                .selectAs(Solutions::getName,Member::getSolutionName)
                .selectAs(Company::getName,Member::getCompanyName)
                .select(" case when  now() between t.start_time and t.end_time then 1  else 2 end solutionsStatus ")
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,Member::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(DispatchUnit.class,DispatchUnit::getId,Member::getDuId)
                .leftJoin(Worktype.class,Worktype::getId,Member::getWorktypeId)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .and(StringUtils.isNotBlank(memberQueryDTO.getKeywords()),
                        i->i.like(Member::getName, memberQueryDTO.getKeywords()).or().like(
                                Member::getIdcardNo,memberQueryDTO.getKeywords()
                        ))
                .eq(Member::getIsdeleted, Constants.ZERO)
//                .eq(Member::getCompanyId, memberQueryDTO.getCompanyId())
                .like(StringUtils.isNotBlank(memberQueryDTO.getName()),Member::getName, memberQueryDTO.getName())
                .like(StringUtils.isNotBlank(memberQueryDTO.getIdCard()),Member::getIdcardNo, memberQueryDTO.getIdCard())
                .like(StringUtils.isNotBlank(memberQueryDTO.getIdcardNo()),Member::getIdcardNo, memberQueryDTO.getIdcardNo())
                .like(StringUtils.isNotBlank(memberQueryDTO.getDuName()),DispatchUnit::getName, memberQueryDTO.getDuName())
                .eq(!Objects.isNull(memberQueryDTO.getDuId()),Member::getDuId, memberQueryDTO.getDuId())
                .eq(!Objects.isNull(memberQueryDTO.getSolutionsId()),Solutions::getBaseId, memberQueryDTO.getSolutionsId())
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.ONE),"now() between t.start_time and t.end_time")
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsStatus())&&memberQueryDTO.getSolutionsStatus().equals(Constants.TWO),"now()  >  t.end_time")
                .apply(!Objects.isNull(memberQueryDTO.getSolutionsId())," t.id in( select a.member_id from apply_detail a inner join insurance_apply b on a.APPLY_ID = b.id  " +
                        "inner join solutions s on b.solution_id = s.id where s.base_id = '"+memberQueryDTO.getSolutionsId()+"' ) ")
        ;
         queryWrapper.orderByAsc(DispatchUnit::getName);
         queryWrapper.orderByAsc(Member::getName);
//        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
//            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
//                queryWrapper.orderByDesc(sortData.getProperty());
//            } else {
//                queryWrapper.orderByAsc(sortData.getProperty());
//            }
//        }
        PageData<Member> pageData = PageData.from(memberJoinMapper.selectJoinPage(page,Member.class, queryWrapper));
        this.getValidNum(pageData,loginUserInfo);
        Integer sn = 0;
        for (Member member:pageData.getRecords()) {
            sn = sn + 1;
@@ -280,9 +276,40 @@
            if(StringUtils.isNotBlank(member.getIdcardNo())){
                member.setAge(Constants.getAgeByIdCard(member.getIdcardNo()));
            }
            member.setTotalNum(member.getInvalidNum()+member.getValidNum());
        }
        return pageData;
    }
    public void getValidNum(PageData<Member> pageData,LoginUserInfo loginUserInfo){
        List<Integer> listId = pageData.getRecords().stream().map(i->i.getId()).collect(Collectors.toList());
        if(CollectionUtils.isNotEmpty(listId)){
            Integer companyId = null;
            if(Objects.nonNull(loginUserInfo.getType())&&Constants.equalsInteger(loginUserInfo.getType(),Constants.ONE)){
                companyId = loginUserInfo.getShowCompany().getId();
            }
            List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,
                    new MPJLambdaWrapper<ApplyDetail>()
                            .select(ApplyDetail::getMemberId,ApplyDetail::getStartTime,ApplyDetail::getEndTime,ApplyDetail::getId)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                            .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_DONE.getKey(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                            .in(ApplyDetail::getMemberId,listId)
                            .eq(Objects.nonNull(companyId)
                                    ,InsuranceApply::getCompanyId,companyId)
            );
            if(CollectionUtils.isNotEmpty(applyDetailList)){
                for (Member member:pageData.getRecords()) {
                    member.setInvalidNum(applyDetailList.stream().filter(i->Constants.equalsInteger(i.getMemberId(),member.getId())&&i.getEndTime().getTime()<System.currentTimeMillis()).collect(Collectors.toList()).size());
                    member.setValidNum(
                            applyDetailList.stream().filter(i->Constants.equalsInteger(i.getMemberId(),member.getId())&&i.getEndTime().getTime()>=System.currentTimeMillis()).collect(Collectors.toList()).size()
                    );
                }
            }
        }
    }
    @Override
    public long count(Member member) {
@@ -387,9 +414,9 @@
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择有效的方案再进行操作!");
        }
        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(),"非企业人员无法进行该操作");
//        }
        ExcelImporter ie = null;
        List<MemberReduceImport> dataList =null;
        try {
@@ -403,9 +430,9 @@
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyId);
        if (Objects.isNull(insuranceApply) || !Constants.equalsInteger(insuranceApply.getCompanyId(),loginUserInfo.getCompanyId())) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,保单信息不存在,请刷新页面重试!");
        }
//        if (Objects.isNull(insuranceApply) || !Constants.equalsInteger(insuranceApply.getCompanyId(),loginUserInfo.getCompanyId())) {
//            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,保单信息不存在,请刷新页面重试!");
//        }
        if (!(Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                ||Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey())
        )) {
@@ -445,7 +472,10 @@
                            .eq(ApplyDetail::getApplyId,insuranceApply.getId())
                            .eq(ApplyDetail::getIdcardNo,model.getIdCard())
                         /*   .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(new Date(),1))*/
                            .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(new Date(),3)));
                            .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(new Date(),3))
                            .orderByAsc(ApplyDetail::getEndTime)
                            .last(" limit 1 ")
            );
            if(detail == null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,员工【" + model.getName()+model.getIdCard() + "】非在保人员,无法进行该操作");
            }
@@ -503,9 +533,9 @@
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择有效的方案再进行操作!");
        }
        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(),"非企业人员无法进行该操作");
//        }
        if(Objects.isNull(solutionId)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"参数错误 - 方案信息");
        }
@@ -570,9 +600,15 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,保险方案下未查询到工种信息");
            }
        }
        //String pattern = "^[\\u4e00-\\u9fa5\\d·]+$";
        String pattern = "^[\\u4e00-\\u9fa5·]*$";
        Pattern r = Pattern.compile(pattern);
        index = Constants.TWO;
        for(MemberImport model : dataList){
            Matcher m = r.matcher(model.getName());
            if (!m.matches()) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,"+model.getName() + "姓名无效,请检查后重试");
            }
            //检查派遣单位和工种有效性
            dealDuAndWorktype(model,index,dispatchUnitList,solutions,solutionWorktypeList);
            index += 1;