k94314517
2025-07-04 50fb58286ed3b718c39a97e0987ee7561a295651
server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -8,8 +9,13 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.InsuranceMapper;
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.WorktypeMapper;
import com.doumee.dao.business.join.DuWorkTypeJoinMapper;
import com.doumee.dao.business.join.WorktypeJoinMapper;
import com.doumee.dao.business.model.Insurance;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.business.model.Solutions;
import com.doumee.dao.business.model.Worktype;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.InsuranceService;
@@ -17,18 +23,19 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.corba.se.spi.orbutil.threadpool.Work;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.A;
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.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 保险公司信息表Service实现
@@ -42,6 +49,12 @@
    private InsuranceMapper insuranceMapper;
    @Autowired
    private WorktypeMapper worktypeMapper;
    @Autowired
    private WorktypeJoinMapper worktypeJoinMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MultifileMapper multifileMapper;
    @Override
    @Transactional
@@ -49,6 +62,13 @@
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        initCreateParam(insurance);//工种数据有效性检验,去除空白行数据
        if(insuranceMapper.selectCount(new QueryWrapper<Insurance>().lambda().eq(Insurance::getName,insurance.getName())
                .eq(Insurance::getIsdeleted,Constants.ZERO)
                .eq(Insurance::getDataType,Constants.ZERO)
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"保险公司名称已存在");
        }
        insurance.setIsdeleted(Constants.ZERO);
        insurance.setCreator(user.getId());
@@ -72,17 +92,36 @@
    }
    private void dealWorkTypeData(Insurance insurance, Insurance newModel, List<Worktype> worktypeList,boolean isNew) {
       int num=0;
        List<String> workTypeName = worktypeList.stream().map(m->m.getName()).collect(Collectors.toList());
        Set<String> set = new HashSet<>(workTypeName);
        if(workTypeName.size() != set.size()){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起,工种录入数据存在相同数据!");
        }
        List<Worktype> saveList = new ArrayList<>();
        for(Worktype w : worktypeList) {
            if(!isNew){
                //查询保险公司下是否已存在该工种
                if(worktypeMapper.selectCount(new QueryWrapper<Worktype>().lambda().eq(Worktype::getInsuranceId,insurance.getId())
                        .eq(Worktype::getIsdeleted,Constants.ZERO)
                        .eq(Worktype::getDataType,Constants.ZERO)
                        .eq(Worktype::getName,w.getName())
                )>Constants.ZERO){
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"当前保险公司下存在【"+w.getName()+"】该工种信息");
                }
            }
            //基础版本
            w.setInsuranceId(insurance.getId());
            w.setIsdeleted(Constants.ZERO);
            w.setCreator(newModel.getCreator());
            w.setCreateDate(insurance.getCreateDate());
            w.setCreateDate(new Date());
            w.setDataType(insurance.getDataType());
            w.setStatus(Constants.ZERO);
            w.setVersion(insurance.getVersion());
            w.setSortnum(num++);
            worktypeMapper.insert(w);
            saveList.add(w);
//            worktypeMapper.insert(w);
            //历史版本的工种信息
            Worktype newType = new Worktype();
@@ -92,8 +131,15 @@
            newType.setDataType(Constants.TWO);
            newType.setVersion(newModel.getVersion());
            w.setSortnum(num++);
            worktypeMapper.insert(newType);
            saveList.add(newType);
//            worktypeMapper.insert(newType);
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(saveList)){
            worktypeJoinMapper.insert(saveList);
        }
    }
    private void initCreateParam(Insurance insurance) {
@@ -110,6 +156,15 @@
        }
        if(worktypeList.size()==0){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,工种不能为空!");
        }
        if(StringUtils.isNotBlank(insurance.getEnglishName()) && insurance.getEnglishName().length()>100){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,英文名超长!");
        }
        if(StringUtils.isNotBlank(insurance.getLinkName()) && insurance.getLinkName().length()>10){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,联系人名称超长!");
        }
        if(StringUtils.isNotBlank(insurance.getLinkPhone()) && insurance.getLinkPhone().length()!=11){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请输入正确的手机号!");
        }
        insurance.setWorktypeList(worktypeList);
    }
@@ -160,7 +215,7 @@
        insuranceMapper.deleteBatchIds(ids);
    }
    @Override
    /*@Override
    public void updateById(Insurance insurance) {
        Insurance model = findById(insurance.getId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
@@ -169,6 +224,14 @@
        }
        //数据有效性校验
        initCreateParam(insurance);
        if(insuranceMapper.selectCount(new QueryWrapper<Insurance>().lambda().eq(Insurance::getName,insurance.getName())
                .eq(Insurance::getIsdeleted,Constants.ZERO)
                .eq(Insurance::getDataType,Constants.ZERO)
                .ne(Insurance::getId,insurance.getId())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"保险公司名称已存在");
        }
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Insurance updateModel = new Insurance();
        updateModel.setEditor(user.getId());
@@ -178,6 +241,112 @@
        updateModel.setEditDate(new Date());
        updateModel.setRemark(insurance.getRemark());
        updateModel.setSortnum(insurance.getSortnum());
        updateModel.setLogo(insurance.getLogo());
        updateModel.setEnglishName(insurance.getEnglishName());
        updateModel.setLinkName(insurance.getLinkName());
        updateModel.setLinkPhone(insurance.getLinkPhone());
        updateModel.setPolicy(insurance.getPolicy());
        updateModel.setAgreement(insurance.getAgreement());
        updateModel.setClaimsInformation(insurance.getClaimsInformation());
        insuranceMapper.updateById(updateModel);
        //如果修改,则产生一个新的历史版本 ~
//        Insurance newModel = new Insurance();
//        BeanUtils.copyProperties(model,newModel);
//        newModel.setId(null);
//        newModel.setVersion(updateModel.getVersion());
//        newModel.setCreateDate(new Date());
//        newModel.setName(updateModel.getName());
//        newModel.setBaseId(insurance.getId());
//        newModel.setDataType(Constants.TWO);
//        newModel.setLogo(insurance.getLogo());
//        newModel.setEnglishName(insurance.getEnglishName());
//        newModel.setLinkName(insurance.getLinkName());
//        newModel.setLinkPhone(insurance.getLinkPhone());
//        newModel.setPolicy(insurance.getPolicy());
//        newModel.setAgreement(insurance.getAgreement());
//        newModel.setClaimsInformation(insurance.getClaimsInformation());
//        insuranceMapper.insert(newModel);
        Insurance useVersion = insuranceMapper.selectOne(new QueryWrapper<Insurance>().lambda()
                .eq(Insurance::getBaseId,insurance.getId())
                .eq(Insurance::getDataType,Constants.TWO)
                .last(" limit 1")
        );
        Insurance updateUsrModel = new Insurance();
        updateUsrModel.setEditor(user.getId());
        updateUsrModel.setName(insurance.getName());
        updateUsrModel.setId(useVersion.getId());
        updateUsrModel.setVersion(UUID.randomUUID().toString());
        updateUsrModel.setEditDate(new Date());
        updateUsrModel.setRemark(insurance.getRemark());
        updateUsrModel.setSortnum(insurance.getSortnum());
        updateUsrModel.setLogo(insurance.getLogo());
        updateUsrModel.setEnglishName(insurance.getEnglishName());
        updateUsrModel.setLinkName(insurance.getLinkName());
        updateUsrModel.setLinkPhone(insurance.getLinkPhone());
        updateUsrModel.setPolicy(insurance.getPolicy());
        updateUsrModel.setAgreement(insurance.getAgreement());
        updateUsrModel.setClaimsInformation(insurance.getClaimsInformation());
        //删除所有工种数据
        worktypeMapper.delete(new UpdateWrapper<Worktype>()
                .lambda()
                .in(Worktype::getInsuranceId,insurance.getId())
        );
//        insuranceMapper.update(null,new UpdateWrapper<Insurance>()
//                .lambda()
//                .eq(Insurance::getBaseId,insurance.getId())
//                .eq(Insurance::getDataType,Constants.TWO)
//                .ne(Insurance::getId,newModel.getId())
//                .set(Insurance::getDataType,Constants.ONE)
//        );
        worktypeMapper.update(null,new UpdateWrapper<Worktype>()
                .lambda()
                .eq(Worktype::getInsuranceId,useVersion.getId())
                .eq(Worktype::getDataType,Constants.TWO)
                .set(Worktype::getDataType,Constants.ONE)
        );
        //处理工作信息,新增最新的,同时产生历史版本
        dealWorkTypeData(updateModel,useVersion,insurance.getWorktypeList(),false);
    }*/
    @Override
    public void updateById(Insurance insurance) {
        Insurance model = findById(insurance.getId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        //数据有效性校验
        initCreateParam(insurance);
        if(insuranceMapper.selectCount(new QueryWrapper<Insurance>().lambda().eq(Insurance::getName,insurance.getName())
                .eq(Insurance::getIsdeleted,Constants.ZERO)
                .eq(Insurance::getDataType,Constants.ZERO)
                .ne(Insurance::getId,insurance.getId())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"保险公司名称已存在");
        }
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Insurance updateModel = new Insurance();
        updateModel.setEditor(user.getId());
        updateModel.setName(insurance.getName());
        updateModel.setId(model.getId());
        updateModel.setVersion(UUID.randomUUID().toString());
        updateModel.setEditDate(new Date());
        updateModel.setRemark(insurance.getRemark());
        updateModel.setSortnum(insurance.getSortnum());
        updateModel.setLogo(insurance.getLogo());
        updateModel.setEnglishName(insurance.getEnglishName());
        updateModel.setLinkName(insurance.getLinkName());
        updateModel.setLinkPhone(insurance.getLinkPhone());
        updateModel.setPolicy(insurance.getPolicy());
        updateModel.setAgreement(insurance.getAgreement());
        updateModel.setClaimsInformation(insurance.getClaimsInformation());
        insuranceMapper.updateById(updateModel);
        //如果修改,则产生一个新的历史版本 ~
@@ -189,6 +358,13 @@
        newModel.setName(updateModel.getName());
        newModel.setBaseId(insurance.getId());
        newModel.setDataType(Constants.TWO);
        newModel.setLogo(insurance.getLogo());
        newModel.setEnglishName(insurance.getEnglishName());
        newModel.setLinkName(insurance.getLinkName());
        newModel.setLinkPhone(insurance.getLinkPhone());
        newModel.setPolicy(insurance.getPolicy());
        newModel.setAgreement(insurance.getAgreement());
        newModel.setClaimsInformation(insurance.getClaimsInformation());
        insuranceMapper.insert(newModel);
        //删除所有工种数据
@@ -251,10 +427,29 @@
    }
    @Override
    public Insurance findById(Integer id) {
    public Insurance findByIdAndType(Integer id,Integer type) {
        Insurance model = insuranceMapper.selectById(id);
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.INSURANCE).getCode();
        //附件信息
        Multifile lpStampTempFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.LP_STAMP_FILE.getKey()).last("limit 1"));
        if(Objects.nonNull(lpStampTempFile)){
            lpStampTempFile.setFileurlFull(path + lpStampTempFile.getFileurl());
            model.setLpStampTempFile(lpStampTempFile);
        }
        Multifile lpFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.LP_FILE.getKey()).last("limit 1"));
        if(Objects.nonNull(lpFile)){
            lpFile.setFileurlFull(path + lpFile.getFileurl());
            model.setLpFile(lpFile);
        }
        if(Objects.nonNull(type)&&Constants.equalsInteger(type,Constants.ONE)){
            return  model;
        }
        List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
                .eq(Worktype::getInsuranceId,id)
@@ -262,6 +457,37 @@
                .orderByAsc(Worktype::getSortnum));
        model.setWorktypeList(worktypeList);
        return model;
    }
    @Override
    public Insurance findById(Integer id) {
        return this.findByIdAndType(id,null);
//        Insurance model = insuranceMapper.selectById(id);
//        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
//            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
//        }
//        List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
//                .eq(Worktype::getInsuranceId,id)
//                .eq(Worktype::getIsdeleted,Constants.ZERO)
//                .orderByAsc(Worktype::getSortnum));
//        model.setWorktypeList(worktypeList);
//        String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.INSURANCE).getCode();
//        //附件信息
//        Multifile lpStampTempFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
//                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.LP_STAMP_FILE.getKey()).last("limit 1"));
//        if(Objects.nonNull(lpStampTempFile)){
//            lpStampTempFile.setFileurlFull(path + lpStampTempFile.getFileurl());
//            model.setLpStampTempFile(lpStampTempFile);
//        }
//
//        Multifile lpFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
//                .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.LP_FILE.getKey()).last("limit 1"));
//        if(Objects.nonNull(lpFile)){
//            lpFile.setFileurlFull(path + lpFile.getFileurl());
//            model.setLpFile(lpFile);
//        }
    }
    @Override
@@ -325,16 +551,19 @@
        if (pageWrap.getModel().getBaseId() != null) {
            queryWrapper.lambda().eq(Insurance::getBaseId, pageWrap.getModel().getBaseId());
        }
 /*       for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }*/
        queryWrapper.lambda().orderByAsc(Insurance::getSortnum);
        return PageData.from(insuranceMapper.selectPage(page, queryWrapper));
        PageData<Insurance> pageData = PageData.from(insuranceMapper.selectPage(page, queryWrapper));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(pageData.getRecords())){
            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.INSURANCE).getCode();
            for (Insurance insurance:pageData.getRecords()) {
                if (StringUtils.isNotBlank(insurance.getLogo())) {
                    insurance.setLogoFullUrl(path + insurance.getLogo() );
                }
            }
        }
        return pageData;
    }
    @Override
@@ -342,4 +571,52 @@
        QueryWrapper<Insurance> wrapper = new QueryWrapper<>(insurance);
        return insuranceMapper.selectCount(wrapper);
    }
    @Override
    public void saveLpInfo(Insurance insurance){
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        if(Objects.isNull(insurance)
                || Objects.isNull(insurance.getId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,insurance.getId())
                .in(Multifile::getObjType,Constants.MultiFile.LP_STAMP_FILE.getKey(),Constants.MultiFile.LP_FILE.getKey())
        );
        Insurance model = new Insurance();
        model.setEditDate(new Date());
        model.setEditor(user.getId());
        if(Objects.nonNull(insurance.getLpStampTempFile())){
            Multifile multifile = insurance.getLpStampTempFile();
            multifile.setCreateDate(model.getEditDate());
            multifile.setCreator(model.getEditor());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.LP_STAMP_FILE.getKey());
            multifile.setObjId(insurance.getId());
            multifileMapper.insert(multifile);
        }
        if(Objects.nonNull(insurance.getLpFile())){
            Multifile multifile = insurance.getLpFile();
            multifile.setCreateDate(model.getEditDate());
            multifile.setCreator(model.getEditor());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.LP_FILE.getKey());
            multifile.setObjId(insurance.getId());
            multifileMapper.insert(multifile);
        }
        model.setId(insurance.getId());
        model.setLpYggxFileInfo(insurance.getLpYggxFileInfo());
        model.setLpMzFileInfo(insurance.getLpMzFileInfo());
        model.setLpZyFileInfo(insurance.getLpZyFileInfo());
        model.setLpScFileInfo(insurance.getLpScFileInfo());
        model.setLpOtherFileInfo(insurance.getLpOtherFileInfo());
        model.setLpFileStatus(Constants.ONE);
        insuranceMapper.updateById(model);
    }
}