111
k94314517
2024-03-12 f96ade1a353653871f6ecc38e2056f836f2dfe5e
server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
@@ -7,13 +7,11 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.InsuranceMapper;
import com.doumee.dao.business.SolutionWorktypeMapper;
import com.doumee.dao.business.SolutionsMapper;
import com.doumee.dao.business.WorktypeMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.SolutionWorktypeJoinMapper;
import com.doumee.dao.business.join.SolutionsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.CompanyService;
import com.doumee.service.business.SolutionsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -25,6 +23,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
@@ -51,11 +50,25 @@
    private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper;
    @Autowired
    private InsuranceMapper insuranceMapper;
    @Autowired
    private CompanySolutionMapper companySolutionMapper;
    @Autowired
    private DuSolutionMapper duSolutionMapper;
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer create(Solutions solutions) {
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        initCreateParam(solutions);//工种数据有效性检验,去除空白行数据
        if(solutionsMapper.selectCount(new QueryWrapper<Solutions>().lambda()
                .eq(Solutions::getName,solutions.getName())
                .eq(Solutions::getIsdeleted,Constants.ZERO)
                .eq(Solutions::getDataType,Constants.ZERO)
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"保险方案名称已存在");
        }
        solutions.setIsdeleted(Constants.ZERO);
        solutions.setCreator(user.getId());
@@ -84,7 +97,7 @@
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该保险公司信息不存在,请尝试刷新页面重试~" );
        }
        if( !Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该保险公司已被,请尝试刷新页面重试~" );
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该保险公司已被禁用,请尝试刷新页面重试~" );
        }
        List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
                .eq(Worktype::getInsuranceId,solutions.getInsuranceId())
@@ -122,7 +135,7 @@
                ||solutions.getWorktypeIdList().size()==0
                ||Constants.formatIntegerNum(solutions.getMaxAge()) < 0
                ||Constants.formatIntegerNum(solutions.getMinAge()) < 0
                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
//                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycle()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycleUnit()) < 0
                || solutions.getMinAge() >solutions.getMaxAge()
@@ -153,6 +166,7 @@
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void updateById(Solutions solutions) {
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Solutions model = findById(solutions.getId());
@@ -162,15 +176,34 @@
        }
        //数据有效性校验
        initCreateParam(solutions);
        if(solutionsMapper.selectCount(new QueryWrapper<Solutions>().lambda()
                .eq(Solutions::getName,solutions.getName())
                .eq(Solutions::getIsdeleted,Constants.ZERO)
                .eq(Solutions::getDataType,Constants.ZERO)
                .ne(Solutions::getId,solutions.getId())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"保险方案名称已存在");
        }
        solutions.setEditor(user.getId());
        solutions.setVersion(UUID.randomUUID().toString());
        solutions.setEditDate(new Date());
        solutionsMapper.updateById(solutions);
        Solutions oldVersion = solutionsMapper.selectOne(new QueryWrapper<Solutions>()
                .lambda()
                .eq(Solutions::getBaseId,solutions.getId())
                .eq(Solutions::getDataType,Constants.TWO)
                .last("limit 1")
        );
        if(Objects.isNull(oldVersion)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到历史版本数据");
        }
        //如果修改,则产生一个新的历史版本 ~
        Solutions newModel = new Solutions();
        BeanUtils.copyProperties(model,newModel);
        BeanUtils.copyProperties( findById(solutions.getId()),newModel);
        newModel.setId(null);
        newModel.setVersion(solutions.getVersion());
        newModel.setCreateDate(new Date());
@@ -183,14 +216,35 @@
                .lambda()
                .eq(SolutionWorktype::getSolutionId,solutions.getId())
        );
        solutionsMapper.update(null,new UpdateWrapper<Solutions>()
                .lambda()
                .ne(Solutions::getId,newModel.getId())
                .eq(Solutions::getBaseId,solutions.getId())
                .eq(Solutions::getDataType,Constants.TWO)
                .set(Solutions::getDataType,Constants.ONE)
                .set(StringUtils.isNotBlank(solutions.getSignKeyword()),Solutions::getSignKeyword,solutions.getSignKeyword())
        );
        //处理工作信息,新增最新的,同时产生历史版本
        //处理工种信息,新增最新的,同时产生历史版本
        dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),false);
        //更新company_solution 使用新版本的数据
        companySolutionMapper.update(null,
                new UpdateWrapper<CompanySolution>()
                        .lambda()
                        .eq(CompanySolution::getStatus,Constants.ZERO)
                        .set(CompanySolution::getSolutionId,newModel.getId())
                        .eq(CompanySolution::getSolutionBaseId,solutions.getId())
        );
        //更新 du_solution 使用新版本的数据
        duSolutionMapper.update(null,
                 new UpdateWrapper<DuSolution>()
                         .lambda()
                         .eq(DuSolution::getIsdeleted, Constants.ZERO)
                         .eq(DuSolution::getStatus, Constants.ONE)
                         .set(DuSolution::getSolutionId,newModel.getId())
                         .eq(DuSolution::getSolutionId,oldVersion.getId()));
    }
    @Override
@@ -229,7 +283,12 @@
    }
    @Override
    public Solutions findById(Integer id) {
        Solutions model = solutionsMapper.selectById(id);
        MPJLambdaWrapper<Solutions> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Solutions.class);
        queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
        queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
        queryWrapper.eq(Solutions::getId,id);
        Solutions model = solutionsJoinMapper.selectJoinOne(Solutions.class,queryWrapper);
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
@@ -254,7 +313,10 @@
    @Override
    public List<Solutions> findList(Solutions solutions) {
        solutions.setIsdeleted(Constants.ZERO);
        solutions.setDataType(Constants.TWO);
        solutions.setStatus(Constants.ZERO);
        if(solutions.getDataType() == null){
            solutions.setDataType(Constants.TWO);
        }
        QueryWrapper<Solutions> wrapper = new QueryWrapper<>(solutions);
        return solutionsMapper.selectList(wrapper);
    }
@@ -262,98 +324,104 @@
    @Override
    public PageData<Solutions> findPage(PageWrap<Solutions> pageWrap) {
        IPage<Solutions> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Solutions> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setDataType(Constants.ZERO);//只选择基表数据
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        MPJLambdaWrapper<Solutions> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Solutions.class);
        queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
        queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user.getType().equals(Constants.ONE)){
            queryWrapper.exists(("select 1 from company_solution b where b.isdeleted=0 and b.company_id="+user.getCompanyId()+" and b.SOLUTION_BASE_ID = t.id"));
        }
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Solutions::getId, pageWrap.getModel().getId());
            queryWrapper.eq(Solutions::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Solutions::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(Solutions::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Solutions::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Solutions::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(Solutions::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(Solutions::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Solutions::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(Solutions::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Solutions::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Solutions::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(Solutions::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(Solutions::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Solutions::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(Solutions::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().like(Solutions::getName, pageWrap.getModel().getName());
            queryWrapper.like(Solutions::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(Solutions::getRemark, pageWrap.getModel().getRemark());
            queryWrapper.eq(Solutions::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Solutions::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(Solutions::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(Solutions::getSortnum, pageWrap.getModel().getSortnum());
            queryWrapper.eq(Solutions::getSortnum, pageWrap.getModel().getSortnum());
        }
        if (pageWrap.getModel().getInsuranceId() != null) {
            queryWrapper.lambda().eq(Solutions::getInsuranceId, pageWrap.getModel().getInsuranceId());
            queryWrapper.eq(Solutions::getInsuranceId, pageWrap.getModel().getInsuranceId());
        }
        if (pageWrap.getModel().getValidType() != null) {
            queryWrapper.lambda().eq(Solutions::getValidType, pageWrap.getModel().getValidType());
            queryWrapper.eq(Solutions::getValidType, pageWrap.getModel().getValidType());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Solutions::getType, pageWrap.getModel().getType());
            queryWrapper.eq(Solutions::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getMinAge() != null) {
            queryWrapper.lambda().eq(Solutions::getMinAge, pageWrap.getModel().getMinAge());
            queryWrapper.eq(Solutions::getMinAge, pageWrap.getModel().getMinAge());
        }
        if (pageWrap.getModel().getMaxAge() != null) {
            queryWrapper.lambda().eq(Solutions::getMaxAge, pageWrap.getModel().getMaxAge());
            queryWrapper.eq(Solutions::getMaxAge, pageWrap.getModel().getMaxAge());
        }
        if (pageWrap.getModel().getPrice() != null) {
            queryWrapper.lambda().eq(Solutions::getPrice, pageWrap.getModel().getPrice());
            queryWrapper.eq(Solutions::getPrice, pageWrap.getModel().getPrice());
        }
        if (pageWrap.getModel().getTimeUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getTimeUnit, pageWrap.getModel().getTimeUnit());
            queryWrapper.eq(Solutions::getTimeUnit, pageWrap.getModel().getTimeUnit());
        }
        if (pageWrap.getModel().getInsureCycle() != null) {
            queryWrapper.lambda().eq(Solutions::getInsureCycle, pageWrap.getModel().getInsureCycle());
            queryWrapper.eq(Solutions::getInsureCycle, pageWrap.getModel().getInsureCycle());
        }
        if (pageWrap.getModel().getInsureCycleUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getInsureCycleUnit, pageWrap.getModel().getInsureCycleUnit());
            queryWrapper.eq(Solutions::getInsureCycleUnit, pageWrap.getModel().getInsureCycleUnit());
        }
        if (pageWrap.getModel().getPriceCycleUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getPriceCycleUnit, pageWrap.getModel().getPriceCycleUnit());
            queryWrapper.eq(Solutions::getPriceCycleUnit, pageWrap.getModel().getPriceCycleUnit());
        }
        if (pageWrap.getModel().getSingleWorktype() != null) {
            queryWrapper.lambda().eq(Solutions::getSingleWorktype, pageWrap.getModel().getSingleWorktype());
            queryWrapper.eq(Solutions::getSingleWorktype, pageWrap.getModel().getSingleWorktype());
        }
        if (pageWrap.getModel().getEmail() != null) {
            queryWrapper.lambda().eq(Solutions::getEmail, pageWrap.getModel().getEmail());
            queryWrapper.eq(Solutions::getEmail, pageWrap.getModel().getEmail());
        }
        if (pageWrap.getModel().getSpecialAgreement() != null) {
            queryWrapper.lambda().eq(Solutions::getSpecialAgreement, pageWrap.getModel().getSpecialAgreement());
            queryWrapper.eq(Solutions::getSpecialAgreement, pageWrap.getModel().getSpecialAgreement());
        }
        if (pageWrap.getModel().getSpecialInfo() != null) {
            queryWrapper.lambda().eq(Solutions::getSpecialInfo, pageWrap.getModel().getSpecialInfo());
            queryWrapper.eq(Solutions::getSpecialInfo, pageWrap.getModel().getSpecialInfo());
        }
        if (pageWrap.getModel().getOrtherInfo() != null) {
            queryWrapper.lambda().eq(Solutions::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
            queryWrapper.eq(Solutions::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
        }
        if (pageWrap.getModel().getSolutionBaseId() != null) {
            queryWrapper.lambda().eq(Solutions::getSolutionBaseId, pageWrap.getModel().getSolutionBaseId());
        }
        if (pageWrap.getModel().getVersion() != null) {
            queryWrapper.lambda().eq(Solutions::getVersion, pageWrap.getModel().getVersion());
            queryWrapper.eq(Solutions::getVersion, pageWrap.getModel().getVersion());
        }
        if (pageWrap.getModel().getDataType() != null) {
            queryWrapper.lambda().eq(Solutions::getDataType, pageWrap.getModel().getDataType());
            queryWrapper.eq(Solutions::getDataType, pageWrap.getModel().getDataType());
        }
        if (pageWrap.getModel().getBaseId() != null) {
            queryWrapper.lambda().eq(Solutions::getBaseId, pageWrap.getModel().getBaseId());
            queryWrapper.eq(Solutions::getBaseId, pageWrap.getModel().getBaseId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -362,7 +430,9 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(solutionsMapper.selectPage(page, queryWrapper));
        PageData<Solutions> pageData = PageData.from(solutionsJoinMapper.selectJoinPage(page,Solutions.class, queryWrapper));
        return pageData;
    }
    @Override
    public PageData<Solutions> findPageCom(PageWrap<Solutions> pageWrap) {
@@ -393,6 +463,56 @@
        return PageData.from(solutionsMapper.selectPage(page, queryWrapper));
    }
    @Override
    public List<Solutions> findListForCompany(Integer dataType) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        List<Solutions> solutionsList = solutionsJoinMapper.selectJoinList(Solutions.class,new MPJLambdaWrapper<Solutions>()
                        .selectAll(Solutions.class)
                .leftJoin(CompanySolution.class,CompanySolution::getSolutionId,Solutions::getId)
                .leftJoin(Company.class,Company::getId,CompanySolution::getCompanyId)
                .leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId)
                .eq(Solutions::getIsdeleted,Constants.ZERO)
                .eq(Solutions::getStatus,Constants.ZERO)
                .eq(Solutions::getDataType,dataType)
                .eq(CompanySolution::getIsdeleted,Constants.ZERO)
                .eq(CompanySolution::getCompanyId,user.getCompanyId())
                .eq(Company::getIsdeleted,Constants.ZERO)
                .eq(Company::getStatus,Constants.ZERO)
                .eq(Insurance::getIsdeleted,Constants.ZERO)
                .eq(Insurance::getStatus,Constants.ZERO)
                .orderByAsc(Solutions::getSortnum)
        );
        return solutionsList;
    }
    /**
     * 根据历史版本查询当前最新启用版本
     * @param solutionId
     * @return
     */
    @Override
    public Solutions getNewVersion(Integer solutionId){
        Solutions solutions = solutionsMapper.selectById(solutionId);
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到历史方案信息");
        }
        if(solutions.getDataType().equals(Constants.TWO)){
            return solutions;
        }
        Solutions newVersion = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda()
                .eq(Solutions::getIsdeleted,Constants.ZERO)
                .eq(Solutions::getDataType,Constants.TWO)
                .eq(Solutions::getBaseId,solutions.getBaseId())
                .last("limit 1")
        );
        if(Objects.isNull(newVersion)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到最新版本数据");
        }
        return newVersion;
    }
    @Override
    public long count(Solutions solutions) {
        QueryWrapper<Solutions> wrapper = new QueryWrapper<>(solutions);