jiangping
2024-01-31 31a2a1e82c6d1a80b62ef65bcfba46e084e372aa
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -12,12 +12,16 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
import com.doumee.dao.business.dto.ApplyChangeOptDTO;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
import com.doumee.dao.business.join.ApplyChagneDetailJoinMapper;
import com.doumee.dao.business.join.ApplyChangeJoinMapper;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.DuSolutionJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.service.business.ApplyChangeService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -50,6 +54,8 @@
    @Autowired
    private ApplyChangeMapper applyChangeMapper;
    @Autowired
    private DuSolutionJoinMapper duSolutionJoinMapper;
    @Autowired
    private InsuranceApplyMapper insuranceApplyMapper;
@@ -440,7 +446,7 @@
                || Objects.isNull(applyChange.getApplyId())
                || Objects.isNull(applyChange.getValidTime())
                || Objects.isNull(applyChange.getType())
                || !(applyChange.getType().equals(Constants.ZERO) || applyChange.getType().equals(Constants.TWO))
                || !(applyChange.getType().equals(Constants.ZERO) || applyChange.getType().equals(Constants.ONE))
        ) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -452,10 +458,11 @@
        if (Objects.isNull(insuranceApply)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if (insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())) {
        System.out.println(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
        if (!Constants.equalsInteger(insuranceApply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())) {
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "保单状态错误");
        }
        if (DateUtil.compareDate(new Date(), insuranceApply.getEndTime()) >= Constants.ZERO
        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO
        ) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作");
        }
@@ -473,18 +480,24 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到企业分配保险方案信息");
        }
        //申请时间必须处于保单的时间范围内
        if (!(DateUtil.compareDate(applyChange.getValidTime(), insuranceApply.getStartTime()) >= Constants.ZERO
                && DateUtil.compareDate(insuranceApply.getEndTime(), applyChange.getValidTime()) >= Constants.ZERO)) {
        if (!(DateUtil.compareDate( insuranceApply.getStartTime(),applyChange.getValidTime()) >= Constants.ZERO
                && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "申请日期未处于保单日期内,无法进行该操作");
        }
        applyChange.setCreateDate(new Date());
        applyChange.setCreator(loginUserInfo.getId());
        applyChange.setIsdeleted(Constants.ZERO);
        applyChange.setApplyStartTime(applyChange.getValidTime());
        applyChange.setStatus(Constants.ZERO);
        applyChangeMapper.insert(applyChange);
        List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
        //查询保险方案下的所有派遣单位
        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, insuranceApply.getSolutionId()));
@@ -501,6 +514,7 @@
        if (!CollectionUtils.isNotEmpty(duWorktypeList)) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "数据异常:保险方案下未查询到工种信息");
        }
        BigDecimal fee = BigDecimal.ZERO;
        //加保数据
        List<ApplyChagneDetail> addDetailList = applyChange.getAddDetailList();
        if (CollectionUtils.isNotEmpty(addDetailList)) {
@@ -508,16 +522,25 @@
               throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
           }
            this.addChangeDetail(applyChange,addDetailList,duWorktypeList,duSolutionList,insuranceApply,solutions,loginUserInfo);
            fee = addDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add);
        }
        //减保数据
        List<ApplyChagneDetail> delDetailList = applyChange.getDelDetailList();
        if (CollectionUtils.isNotEmpty(delDetailList)) {
            if(companySolution.getCanReduce().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行减保");
            }
            this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo);
            fee = fee.add(delDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        }
        ApplyChange applyChangeFee = new ApplyChange();
        applyChangeFee.setId(applyChange.getId());
        applyChangeFee.setFee(fee);
        applyChangeMapper.updateById(applyChangeFee);
        //换厂业务
        List<ApplyChagneDetail> changeDetailList = applyChange.getChangeDetailList();
        if (CollectionUtils.isNotEmpty(changeDetailList)) {
@@ -537,7 +560,11 @@
        applyLog.setIsdeleted(Constants.ZERO);
        applyLog.setApplyId(applyChange.getApplyId());
        applyLog.setTitle(applyChangeLogStatus.getName());
        if(StringUtils.isNotBlank(content)){
        applyLog.setContent(applyChangeLogStatus.getInfo().replace("${param}",content));
        }else{
            applyLog.setContent(applyChangeLogStatus.getInfo());
        }
        applyLog.setObjType(applyChangeLogStatus.getKey());
        applyLog.setObjId( applyChange.getId());
        applyLog.setStatus(applyChange.getStatus());
@@ -578,7 +605,7 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if (applyChange.getValidTime().compareTo(applyDetail.getEndTime()) <= 0) {
            if (applyChange.getValidTime().compareTo(applyDetail.getEndTime()) > 0) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【" + applyDetail.getEndTime() + "】无法通过本次申请");
            }
            applyChagneDetail.setCreateDate(new Date());
@@ -586,9 +613,17 @@
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.ONE);
            System.out.println(DateUtil.dateToString(applyDetail.getEndTime(),"yyyy-MM-dd"));
            System.out.println(DateUtil.dateToString(applyDetail.getStartTime(),"yyyy-MM-dd"));
            System.out.println(DateUtil.dateToString(applyChange.getValidTime(),"yyyy-MM-dd"));
            BigDecimal sumFee = Constants.countDetailFee(solutions, applyDetail.getEndTime(),applyDetail.getStartTime());
            BigDecimal useFee = Constants.countDetailFee(solutions, applyChange.getValidTime(),applyDetail.getStartTime());
            applyChagneDetail.setFee(
                    Constants.countDetailFee(solutions, applyDetail.getEndTime(),applyDetail.getStartTime())
                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(), applyDetail.getStartTime()))
                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(), applyDetail.getStartTime())).multiply(new BigDecimal(-1))
            );
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
        }
@@ -606,15 +641,51 @@
     */
    public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo){
        for (ApplyChagneDetail applyChagneDetail : addDetailList) {
            if (Objects.isNull(applyChagneDetail.getMemberId())
                    || Objects.isNull(applyChagneDetail.getDuId())
            if (    Objects.isNull(applyChagneDetail.getDuId())
                    || Objects.isNull(applyChagneDetail.getWorktypeId())
                    || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            Member member = memberMapper.selectById(applyChagneDetail.getMemberId());
            Member member = new Member();
            if(Objects.isNull(applyChagneDetail.getMemberId())){
                //查询是否存在该用户
                member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getCompanyId,insuranceApply.getCompanyId())
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .eq(Member::getIdcardNo,applyChagneDetail.getIdcardNo())
                        .last(" limit 1")
                );
                if(Objects.isNull(member)){
                    member = new Member();
                    member.setCreateDate(new Date());
                    member.setCreator(loginUserInfo.getId());
                    member.setIsdeleted(Constants.ZERO);
                    member.setName(applyChagneDetail.getMemberName());
                    member.setCompanyId(insuranceApply.getCompanyId());
                    member.setSex(Constants.getSexByIdCard(applyChagneDetail.getIdcardNo()));
                    member.setIdcardNo(applyChagneDetail.getIdcardNo());
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    memberMapper.insert(member);
                }else{
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    memberMapper.updateById(member);
                }
            }else{
                member = memberMapper.selectById(applyChagneDetail.getMemberId());
            if (Objects.isNull(member)) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】未查询到系统人员信息");
                }
                member.setApplyId(insuranceApply.getId());
                member.setDuId(applyChagneDetail.getDuId());
                member.setWorktypeId(applyChagneDetail.getWorktypeId());
                memberMapper.updateById(member);
            }
            //查询员工是否存在  0待签署 1已签章 的此类业务保数据 同一主单下
            if (applyChagneDetailJoinMapper.selectJoinCount(
@@ -626,6 +697,7 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在申请中的加减保/换厂单据");
            }
            //查询员工是在主单下 是否存在生效中的数据
            if(!Objects.isNull(applyChagneDetail.getMemberId())){
            if (applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
@@ -634,22 +706,22 @@
            ) > Constants.ZERO) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在保障中的保单信息,无法进行加保");
            }
            }
            //验证派遣单位信息 与工种信息 是否存在
            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.getDuSolutionId().equals(applyChagneDetail.getDuId()) && d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
            applyChagneDetail.setMemberId(member.getId());
            applyChagneDetail.setCreateDate(new Date());
            applyChagneDetail.setCreator(loginUserInfo.getId());
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.ZERO);
            applyChagneDetail.setFee(
                    Constants.countDetailFee(solutions,insuranceApply.getEndTime(),applyChange.getValidTime())
            );
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
@@ -692,20 +764,20 @@
            List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .le(ApplyDetail::getStartTime, "now()")
                    .ge(ApplyDetail::getEndTime, "now()"));
                    .le(ApplyDetail::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss"))
                    .ge(ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss")));
            if(applyDetailList.size()>Constants.ONE){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())<=0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单保障日期至:【"+applyDetail.getEndTime()+"】无法通过本次申请");
            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 (duWorktypeList.stream().filter(d -> d.getDuSolutionId().equals(applyChagneDetail.getDuId()) && d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
@@ -1116,4 +1188,29 @@
    }
    @Override
    public CountCyclePriceVO getChangeCountCyclePriceVO(ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO){
        if(Objects.isNull(applyChangeCyclePriceDTO)
            || Objects.isNull(applyChangeCyclePriceDTO.getApplyId())
            || Objects.isNull(applyChangeCyclePriceDTO.getValidTime())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChangeCyclePriceDTO.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(),"未查询方案信息");
        }
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,insuranceApply.getEndTime(),applyChangeCyclePriceDTO.getValidTime()));
        return countCyclePriceVO;
    }
}