MrShi
2024-04-02 22271e641e4505ba906c3770905b7e84e3ad8d85
server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -25,14 +26,18 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URI;
import java.net.URLEncoder;
import java.util.*;
/**
@@ -43,6 +48,8 @@
@Service
public class CompanyServiceImpl implements CompanyService {
    @Value("${debug_model}")
    private boolean debugModel;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
@@ -69,9 +76,10 @@
        if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                .eq(Company::getCode,company.getCode())
               .or().eq(Company::getPhone,company.getPhone())
               .or().eq(Company::getEmail,company.getEmail())
               .or().eq(Company::getUsername,company.getUsername())
                .or().eq(Company::getName,company.getName()))>0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该企业【名称】【统一信用代码或者【手机号】已存在,请确认后重新提交!");
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该企业【名称】【统一信用代码】【邮箱】或者【手机号】已存在,请确认后重新提交!");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        company.setCreator(user.getId());
@@ -107,6 +115,48 @@
        companySolutionJoinMapper.delete(new UpdateWrapper<CompanySolution>().lambda().eq(CompanySolution::getCompanyId,company.getId()));
        //处理关联方案
        dealSolutionsData(company);
    }
    @Override
    @Transactional
    public void exportFiles(Integer id, HttpServletResponse response){
        try {
            Company model = companyMapper.selectById(id);
            if(model == null){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            List<File> fileList = new ArrayList<>();
            List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                    .eq(Multifile::getObjId,id)
                    .isNotNull(Multifile::getFileurl)
                    .in(Multifile::getObjType, Arrays.asList(new Integer[]{
                            Constants.MultiFile.COM_BUSINESS_LICENSE.getKey(),
                            Constants.MultiFile.COM_IDCARD_IMG.getKey(),
                    }))
            );
            if(multifileList== null || multifileList.size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.COMPANY_FILE).getCode();
            for(Multifile l : multifileList){
                File f = Constants.getFileByNetFile(path + l.getFileurl(),StringUtils.defaultString(l.getName(),"未命名"));
                if(f !=null && f.isFile()){
                    fileList.add(f);
                }
            }
            if(fileList == null || fileList.size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            String fileName =  model.getName() +"_企业证件_"+System.currentTimeMillis()+".zip" ;
            String encodeFileName = URLEncoder.encode(fileName);
            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
            response.setContentType("application/octet-stream");
            response.setHeader("eva-opera-type", "download");
            response.setHeader("eva-download-filename", encodeFileName);
            Constants.packFilesToZip(fileList,response.getOutputStream());
        } catch (IOException e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
    }
    private void dealSystemUserData(Company company) {
@@ -177,10 +227,18 @@
        List<CompanySolution> list = new ArrayList<>();
        int num =0;
        for(CompanySolution s :company.getSolutionList()){
            if(s.getSolutionBaseId() == null){
            if(Objects.isNull(s.getSolution())){
                continue;
            }
            sIds.add(s.getSolutionBaseId());
            if(s.getSolution().getBaseId() == null){
                continue;
            }
            Solutions newVersion = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,s.getSolution().getBaseId())
                    .eq(Solutions::getDataType,Constants.TWO).last("limit 1"));
            if(Objects.isNull(newVersion)){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请添加有效的保险方案信息!");
            }
            sIds.add(s.getSolution().getBaseId());
            s.setCompanyId(company.getId());
            s.setIsdeleted(Constants.ZERO);
            s.setCanAdd(Constants.formatIntegerNum(s.getCanAdd()));
@@ -188,6 +246,8 @@
            s.setCreateDate(company.getCreateDate());
            s.setCreator(company.getCreator());
            s.setSortnum(num++);
            s.setSolutionBaseId( s.getSolution().getBaseId() );
            s.setSolutionId( newVersion.getId() );
            s.setStatus(Constants.ZERO);
            list.add(s);
        }
@@ -208,6 +268,45 @@
        companySolutionJoinMapper.insertBatchSomeColumn(list);
    }
   /* private void dealSolutionsData(Company company) {
        List<Integer> sIds = new ArrayList<>();
        List<CompanySolution> list = new ArrayList<>();
        int num =0;
        for(CompanySolution s :company.getSolutionList()){
            if(s.getSolution() == null || s.getSolution().getBaseId() == null ||s.getSolution().getId()==null){
                continue;
            }
            sIds.add(s.getSolution().getId() );
            s.setCompanyId(company.getId());
            s.setIsdeleted(Constants.ZERO);
            s.setCanAdd(Constants.formatIntegerNum(s.getCanAdd()));
            s.setCanReduce(Constants.formatIntegerNum(s.getCanReduce()));
            s.setCreateDate(company.getCreateDate());
            s.setCreator(company.getCreator());
            s.setSortnum(num++);
            s.setSolutionBaseId( s.getSolution().getId() );
            s.setSolutionId( s.getSolution().getBaseId() );
            s.setStatus(Constants.ZERO);
            list.add(s);
        }
        if(list.size() ==0){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请添加有效的保险方案信息!");
        }
        List<Solutions> solutionsList = solutionsMapper.selectList(new QueryWrapper<Solutions>().lambda()
                .in(Solutions::getId,sIds)
                .eq(Solutions::getIsdeleted,Constants.ZERO));
        if(solutionsList.size()!= list.size()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请添加有效的保险方案信息哦");
        }
        for(Solutions s:solutionsList){
            if(Constants.equalsInteger(s.getStatus(),Constants.ONE)){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"保险方案【"+s.getName()+"】已被禁用,不能进行该操作");
            }
        }
        companySolutionJoinMapper.insertBatchSomeColumn(list);
    }*/
    private void isValidCreateParam(Company company) {
        if(StringUtils.isBlank(company.getPhone())
            ||StringUtils.isBlank(company.getName())
@@ -221,8 +320,11 @@
            ||StringUtils.isBlank(company.getEmail())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //手机验证码校验
        SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,company.getPhone(),company.getCaptche());
        if(!debugModel){
            //手机验证码校验
            SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,company.getPhone(),company.getCaptche());
        }
    }
@@ -252,22 +354,31 @@
        List<Multifile> multifileList = new ArrayList<>();
        List<Integer> objList = new ArrayList<>();
        if(company.getBusinessImg()!=null && StringUtils.isNotBlank(company.getBusinessImg().getFileurl())){
        if(company.getBusinessImg()!=null && company.getBusinessImg().getId() ==null && StringUtils.isNotBlank(company.getBusinessImg().getFileurl())){
            multifileList.add(initMultiFileByCompay(company,company.getBusinessImg(),Constants.MultiFile.COM_BUSINESS_LICENSE.getKey()));
            objList.add(Constants.MultiFile.COM_BUSINESS_LICENSE.getKey());
        }else  {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请上传营业执照!");
        }
        if(company.getSignImg()!=null && StringUtils.isNotBlank(company.getSignImg().getFileurl())){
        if(company.getSignImg()!=null&& company.getSignImg().getId() ==null && StringUtils.isNotBlank(company.getSignImg().getFileurl())){
            multifileList.add(initMultiFileByCompay(company,company.getSignImg(),Constants.MultiFile.COM_SING_IMG.getKey()));
            objList.add(Constants.MultiFile.COM_SING_IMG.getKey());
            company.setSignIdStatus(Constants.ZERO);//标记电子签章未上传
            if(StringUtils.isNotBlank(company.getSignId())){
                //删除现有的签章
                signService.deleteEntSign(company.getSignId());
            }
            company.setSignId("");
        }
        if(company.getIdcardImgList()!=null && company.getIdcardImgList()!=null){
            boolean isNew = false;
            for(Multifile f : company.getIdcardImgList()){
                if(f.getId() !=null){
                    continue;
                }
                isNew = true;
                multifileList.add(initMultiFileByCompay(company,f,Constants.MultiFile.COM_IDCARD_IMG.getKey()));
            }
            objList.add(Constants.MultiFile.COM_IDCARD_IMG.getKey());
            if(isNew)
              objList.add(Constants.MultiFile.COM_IDCARD_IMG.getKey());
        }
        if(objList.size()>0){
            multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
@@ -329,7 +440,9 @@
                || StringUtils.isBlank(company.getCaptche())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST );
        }
        SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,company.getPhone(),company.getCaptche());
        if(!debugModel){
            SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,company.getPhone(),company.getCaptche());
        }
        Company model = companyMapper.selectById(company.getId());
        if(model == null  || StringUtils.equals(model.getPhone(),company.getPhone()) ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"手机号未发生改变~" );
@@ -367,9 +480,8 @@
    }
    private void isValidUpdateParam(Company company) {
        if( StringUtils.isBlank(company.getName())
                ||StringUtils.isBlank(company.getUsername())
//                ||StringUtils.isBlank(company.getUsername())
                ||StringUtils.isBlank(company.getCode())
                ||StringUtils.isBlank(company.getCaptche())
                ||StringUtils.isBlank(company.getLegalName())
                ||StringUtils.isBlank(company.getEmail()) ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -393,17 +505,19 @@
        if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                .ne(Company::getId,company.getId())
                .and(w->w.eq(Company::getCode,company.getCode())
                    .or().eq(Company::getEmail,company.getEmail())
                    .or().eq(Company::getUsername,company.getUsername())
                    .or().eq(Company::getName,company.getName()))
                )>0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该企业【名称】【统一信用代码或者【企业账号】已存在,请确认后重新提交!");
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该企业【名称】【统一信用代码】【邮箱】或者【企业账号】已存在,请确认后重新提交!");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(Constants.equalsInteger(model.getSignIdStatus(),Constants.ONE)){
            company.setSignId(model.getSignId());
        }
        dealFileDataForUpdate(company);
        Company update = new Company();
        update.setIsdeleted(company.getId());
        update.setName(company.getName());
        update.setCode(company.getCode());
        update.setEditDate(new Date());
@@ -414,14 +528,19 @@
        update.setTaxCode(company.getTaxCode());
        update.setTaxBank(company.getTaxBank());
        update.setEmail(company.getEmail());
        update.setId(model.getId());
        update.setLegalName(company.getLegalName());
        update.setInvoiceAddr(company.getInvoiceAddr());
        update.setSignIdStatus(company.getSignIdStatus());
        update.setInvoiceEmail(company.getInvoiceEmail());
        if(StringUtils.isNotBlank(company.getEmail())){
        if(StringUtils.isNotBlank(company.getEmail())
            ||!StringUtils.equals(company.getName(),model.getName())
            ||!StringUtils.equals(company.getLegalName(),model.getLegalName())
            ||!StringUtils.equals(company.getCode(),model.getCode()) ){
            //如果邮箱发生改变
            update.setSignStatus(Constants.ZERO);
        }
        companyMapper.updateById(company);
        companyMapper.updateById(update);
        company.setCreator(update.getEditor());
        company.setCreateDate(update.getEditDate());
        if(StringUtils.isNotBlank(company.getUsername())){
@@ -444,7 +563,7 @@
    @Override
    public Company findById(Integer id) {
        Company model = findById(id);
        Company model = companyMapper.selectById(id);
        if(model == null ||Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
@@ -499,6 +618,7 @@
     *   public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,File  businessimg,String notifyUrl){
     */
    @Override
    @Async
    public   void startSignAuth(Integer id){
        Company company = companyMapper.selectById(id);
        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
@@ -518,6 +638,33 @@
        //更新认证状态
        companyMapper.updateById(update);
    }
    @Override
    public   void startSignAuthAuto( ){
        List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
                .eq(Company::getIsdeleted,Constants.ZERO)
                .eq(Company::getSignStatus,Constants.ZERO));
        if(companyList!=null && companyList.size()>0) {
            for (Company company : companyList) {
                Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                        .eq(Multifile::getIsdeleted,Constants.ZERO)
                        .eq(Multifile::getObjType,Constants.MultiFile.COM_BUSINESS_LICENSE.getKey())
                        .eq(Multifile::getObjId,company.getId())
                        .last("limit 1"));
                if(f == null){
                    return;
                }
                String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.COMPANY_FILE).getCode();
                boolean status = signService.organizationCreate(company.getName(),company.getCode(),company.getLegalName(),company.getEmail(), path + f.getFileurl(),null);
                Company update = new Company();
                update.setId(company.getId());
                update.setSignStatus(status?Constants.ONE:Constants.TWO);
                update.setSignDate(new Date());
                //更新认证状态
                companyMapper.updateById(update);
            }
        }
    }
    /**
     * 电子签认证
     *   public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,File  businessimg,String notifyUrl){
@@ -530,8 +677,11 @@
                .eq(Company::getSignStatus,Constants.ONE));
        if(companyList!=null && companyList.size()>0){
            for(Company company :companyList){
                //查询企业签约状态 审批状态,0正在申请1通过2驳回
                //查询企业签约状态 审核状态,0正在申请1通过2驳回
                int status = signService.organizationAuditStatus(company.getEmail());
                if(status == 0){
                    continue;
                }
                if(status == 1){
                    Company update = new Company();
                    update.setId(company.getId());
@@ -547,7 +697,6 @@
                    //更新认证状态
                    companyMapper.updateById(update);
                }
            }
        }
@@ -561,11 +710,11 @@
    public void dealSignIdStatus(){
        List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
                .eq(Company::getIsdeleted,Constants.ZERO)
                .eq(Company::getSignStatus,Constants.ONE)
                .eq(Company::getSignStatus,Constants.THREE)
                .eq(Company::getSignIdStatus,Constants.ZERO));
        if(companyList!=null && companyList.size()>0){
            for(Company company :companyList){
                //查询企业签约状态 审批状态,0正在申请1通过2驳回
                //查询企业签约状态 审核状态,0正在申请1通过2驳回
                Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                        .eq(Multifile::getIsdeleted,Constants.ZERO)
                        .eq(Multifile::getObjType,Constants.MultiFile.COM_SING_IMG.getKey())
@@ -586,20 +735,36 @@
                        //更新认证状态
                        companyMapper.updateById(update);
                    }
                }
            }
        }
    }
//    @Override
//    public List<Company> findList(Company company) {
//        QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
//        return companyMapper.selectList(wrapper);
//    }
//
    @Override
    public List<Company> findList(Company company) {
        QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
        company.setIsdeleted(Constants.ZERO);
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(company.getQueryFlag() == 0){
            //只能看权限范围内
            if(user.getCompanyIdList() == null || user.getCompanyIdList().size() == 0){
                wrapper.lambda().eq(Company::getId,-1);//设置无效访问
            }else {
                wrapper.lambda().in(Company::getId, user.getCompanyIdList());
            }
        } else if (company.getQueryFlag() == 1 && company.getUserId()!=null) {
            //查詢是否有查看權限
            wrapper.select("*,(select count(1) from company_permission b where b.user_id="+company.getUserId()+" and b.isdeleted=0 and b.company_id=company.id) as hasPerimission");
        }
        return companyMapper.selectList(wrapper);
    }
    @Override
    public PageData<Company> findPage(PageWrap<Company> pageWrap) {
        IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -609,7 +774,12 @@
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(pageWrap.getModel().getQueryFlag() == 0){
            //只能看权限范围内
            queryWrapper.exists("select b.id from company_permission b where b.user_id="+user.getId()+" and b.isdeleted=0 and b.company_id=company.id");
            if(user.getCompanyIdList() == null || user.getCompanyIdList().size() == 0){
                queryWrapper.lambda().eq(Company::getId,-1);//设置无效访问
            }else {
                queryWrapper.lambda().in(Company::getId, user.getCompanyIdList());
            }
//            queryWrapper.exists("select b.id from company_permission b where b.user_id="+user.getId()+" and b.isdeleted=0 and b.company_id=company.id");
        } else if (pageWrap.getModel().getQueryFlag() == 1) {
            //查詢是否有查看權限
            queryWrapper.select("*,(select count(1) from company_permission b where b.user_id="+user.getId()+" and b.isdeleted=0 and b.company_id=company.id) as hasPerimission");