ZQN
2024-08-14 f6a1bf1d9b19dd8b3750034048f3876d086db1f1
project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java
@@ -1,22 +1,31 @@
package com.project.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import cn.hutool.core.convert.Convert;
import com.project.common.utils.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.transaction.annotation.Transactional;
import com.project.system.domain.vo.SysCompanyVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.project.common.constant.UserConstants;
import com.project.common.core.domain.entity.SysUser;
import com.project.common.core.domain.model.ImportError;
import com.project.common.exception.base.BaseException;
import com.project.common.utils.SecurityUtils;
import com.project.common.utils.StringUtils;
import com.project.common.utils.file.ImageUtils;
import com.project.system.domain.SysCompany;
import com.project.system.domain.bo.editBo.SysCompanyBo;
import com.project.system.domain.bo.queryBo.SysCompanyQueryBo;
import com.project.system.domain.SysCompany;
import com.project.system.domain.vo.SysCompanyResultVo;
import com.project.system.domain.vo.SysCompanyVo;
import com.project.system.mapper.SysCompanyMapper;
import com.project.system.service.ISysCompanyService;
import com.project.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -29,7 +38,7 @@
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysCompanyServiceImpl extends ServiceImpl<SysCompanyMapper, SysCompany> implements ISysCompanyService {
    private final ISysUserService userService;
    @Override//列表查询
    public List<SysCompanyVo> queryList(SysCompanyQueryBo bo)
@@ -43,6 +52,11 @@
    public SysCompanyVo queryById(Long companyId)
    {
        SysCompany db = this.baseMapper.selectById(companyId);
        if (StringUtils.isEmpty(db.getQrcodeImg())){
            String qrcode = ImageUtils.createQrcode(db.getCompanyCode(), db.getCompanyName(), "2");
            db.setQrcodeImg(qrcode);
            this.updateById(db);
        }
        return Convert.convert(SysCompanyVo.class , db);
    }
@@ -52,39 +66,267 @@
    public Boolean insertByBo(SysCompanyBo bo)
    {
        SysCompany add = Convert.convert(SysCompany.class, bo);
        add.setCompanyStatus(1);
        validEntityBeforeSave(add);
        return this.save(add);
        String qrcode = ImageUtils.createQrcode(add.getCompanyCode(), add.getCompanyName(), "2");
        add.setQrcodeImg(qrcode);
        boolean save = this.save(add);
        if (isAddUser(bo.getCompanyPhone())){
            addCompanyUser(add, 0);
        }
        return save;
    }
    @Override//修改
    @Transactional
    public Boolean updateByBo(SysCompanyBo bo)
    {
        SysCompany old = this.getById(bo.getCompanyId());
        SysCompany update = Convert.convert(SysCompany.class, bo);
        validEntityBeforeSave(update);
        if (!old.getCompanyPhone().equals(update.getCompanyPhone())){
            if (this.count(SysCompany::getCompanyPhone, old.getCompanyPhone())==1){
                boolean delUser = delCompanyUser(old.getCompanyPhone());
                if (!delUser) {
                    throw new BaseException("原企业用户清除失败,请联系管理员!");
                }
            }
            if (isAddUser(update.getCompanyPhone())){
                addCompanyUser(update, update.getCompanyStatus()==0 ? 1 : 0);
            }
        }
        return this.updateById(update);
    }
    @Override//状态开关
    @Transactional
    public Boolean updStatus(SysCompanyBo bo)
    {
        if (bo.getCompanyId()==null || bo.getCompanyStatus()==null) {
            throw new BaseException("参数有误,状态修改失败!");
        }
        SysCompany company = this.getById(bo.getCompanyId());
        company.setCompanyStatus(bo.getCompanyStatus());
        updCompanyUserStatus(company.getCompanyPhone(), bo.getCompanyStatus());
        return this.updateById(company);
    }
    @Override//删除
    @Transactional
    public Boolean deleteByIds(Collection<Long> ids)
    {
        //做一些业务上的校验,判断是否需要校验
        for (Long id : ids) {
            boolean b = delCompanyUser(this.getById(id).getCompanyPhone());
            if (!b) {
                throw new BaseException(String.format("原企业 %1$s 用户清除失败,请联系管理员!", id));
            }
        }
        return this.removeByIds(ids);
    }
    @Override
    public SysCompanyResultVo doImport(List<SysCompanyVo> list)
    {
        if (list==null || list.size()<1){
            throw new BaseException("未获取到导入信息!");
        }
        SysCompanyResultVo resultVo = new SysCompanyResultVo();
        resultVo.setVoList(list);
        return this.checkImport(resultVo);
    }
    @Override
    public SysCompanyResultVo checkImport(SysCompanyResultVo resultVo)
    {
        if (resultVo==null || StringUtils.isEmpty(resultVo.getVoList())){
            throw new BaseException("未获取到导入信息!");
        }
        for (SysCompanyVo vo : resultVo.getVoList()) {
            List<ImportError> errors = new ArrayList<>();
            validEntityBeforeImport(vo, errors);
            vo.setErrorList(errors);
        }
        return  resultVo;
    }
    @Override
    @Transactional
    public Boolean saveImport(SysCompanyResultVo resultVo)
    {
        if (resultVo==null || StringUtils.isEmpty(resultVo.getVoList())){
            throw new BaseException("未获取到导入信息!");
        }
        resultVo.getVoList().forEach(e-> {
            if (StringUtils.isNotEmpty(e.getErrorList())) {
                throw new BaseException("还有未处理错误信息!");
            }
        });
        List<SysCompany> companies = Convert.toList(SysCompany.class, resultVo.getVoList());
        companies.forEach(e->{
            String qrcode = ImageUtils.createQrcode(e.getCompanyCode(), e.getCompanyName(), "2");
            e.setQrcodeImg(qrcode);
        });
        boolean b = this.saveOrUpdateBatch(companies);
        for (SysCompany company : companies) {
            if (isAddUser(company.getCompanyPhone())){
                addCompanyUser(company,1);
            }
        }
        return b;
    }
//-------------------------------------------------------------------------------------
    //保存前校验
    /**
     * 保存前校验
     * @param entity    参数
     */
    private void validEntityBeforeSave(SysCompany entity)
    {
        //做一些数据校验,如唯一约束
        entity.setIsImport(0);
        if (StringUtils.isEmpty(entity.getCompanyImg())){
            throw new BaseException(String.format("%1$s,请上传营业执照", entity.getCompanyName()));
        }
        if (StringUtils.isEmpty(entity.getCompanyCode())){
            throw new BaseException(String.format("%1$s,请填写企业社会编码!", entity.getCompanyName()));
        }
        if (StringUtils.isEmpty(entity.getCompanyUser())){
            throw new BaseException(String.format("%1$s,请填写企业联系人!", entity.getCompanyName()));
        }
        if (StringUtils.isEmpty(entity.getCompanyPhone())){
            throw new BaseException(String.format("%1$s,请填写企业联系人电话!", entity.getCompanyName()));
        }
        if (StringUtils.isEmpty(entity.getCompanyAddress())){
            throw new BaseException(String.format("%1$s,请填写企业地址!", entity.getCompanyName()));
        }
        if (StringUtils.isEmpty(entity.getCompanyName())){
            throw new BaseException("请填写企业名!");
        }
        if (entity.getCompanyId()==null){ //新增
            int codeCount = this.count(lq().eq(SysCompany::getCompanyCode, entity.getCompanyCode()));
            if (codeCount>0){
                throw new BaseException(String.format("%1$s,企业社会编码已存在!", entity.getCompanyName()));
            }
            int nameCount = this.count(lq().eq(SysCompany::getCompanyName, entity.getCompanyName()));
            if (nameCount>0){
                throw new BaseException(String.format("%1$s,企业名已存在!", entity.getCompanyName()));
            }
            SysUser user = new SysUser();
            user.setPhonenumber(entity.getCompanyPhone());
        } else {
            int codeCount = this.count(lq().eq(SysCompany::getCompanyCode, entity.getCompanyCode()).ne(SysCompany::getCompanyId,entity.getCompanyId()));
            if (codeCount>0){
                throw new BaseException(String.format("%1$s,企业社会编码已存在!", entity.getCompanyName()));
            }
            int nameCount = this.count(lq().eq(SysCompany::getCompanyName, entity.getCompanyName()).ne(SysCompany::getCompanyId,entity.getCompanyId()));
            if (nameCount>0){
                throw new BaseException(String.format("%1$s,企业名已存在!", entity.getCompanyName()));
            }
        }
    }
    //获取查询参数
    private void validEntityBeforeImport(SysCompanyVo entity, List<ImportError> errorList)
    {
        entity.setIsImport(1);
        if (StringUtils.isEmpty(entity.getCompanyName())){
            errorList.add(new ImportError(0, "请填写企业名!"));
        }
        if (StringUtils.isEmpty(entity.getCompanyCode())){
            errorList.add(new ImportError(1, "请填写企业社会编码!"));
        }
        if (StringUtils.isEmpty(entity.getCompanyUser())){
            errorList.add(new ImportError(2, "请填写企业联系人!"));
        }
        if (StringUtils.isEmpty(entity.getCompanyPhone())){
            errorList.add(new ImportError(3, "请填写企业联系人电话!"));
        } else {
            if (entity.getCompanyPhone().length()!=11){
                errorList.add(new ImportError(3, "请填写正确手机号!"));
            }
        }
        if (StringUtils.isEmpty(entity.getCompanyAddress())){
            errorList.add(new ImportError(4, "请填写企业地址!"));
        }
        int codeCount = this.count(lq().eq(SysCompany::getCompanyCode, entity.getCompanyCode()));
        if (codeCount>0){
            errorList.add(new ImportError(1, "企业社会编码已存在!"));
        }
        int nameCount = this.count(lq().eq(SysCompany::getCompanyName, entity.getCompanyName()));
        if (nameCount>0){
            errorList.add(new ImportError(0, "企业名已存在!"));
        }
        entity.setCheckStatus(2);
    }
    /**
     * 添加企业用户
     * @param entity    企业信息
     */
    @Async
    @Override
    public void addCompanyUser(SysCompany entity, Integer isImport)
    {
        SysUser user = new SysUser();
        if (isImport==1){
            user.setStatus("0");
        } else {
            user.setStatus("1");
        }
        SysCompany one = this.getOne(lq().eq(SysCompany::getCompanyCode, entity.getCompanyCode()));
        String phone = entity.getCompanyPhone();
        user.setPhonenumber(phone);
        user.setUserName(phone);
        user.setNickName(entity.getCompanyUser());
        user.setPassword(phone);
        user.setDeptId(one.getCompanyId());
        user.setUserType("02");
        user.setRecommendUser(user.getPassword());
        if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user)))
        {
            return;
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber())
                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
        {
            return;
        }
        else if (StringUtils.isNotEmpty(user.getEmail())
                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
        {
            return;
        }
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
        userService.insertUser(user);
    }
    @Async
    protected void updCompanyUserStatus(String phone, Integer status)
    {
        userService.update(userService.lu().set(SysUser::getStatus,status).eq(SysUser::getPhonenumber, phone));
    }
    /**
     * 删除企业用户
     * @param companyPhone    企业id
     */
    protected boolean delCompanyUser(String companyPhone)
    {
        return userService.deleteUserByCompanyPhone(companyPhone)>0;
    }
    /**
     * 获取查询参数
     * @param bo    参数
     * @return  查询参数
     */
    private QueryWrapper<SysCompany> getQw(SysCompanyQueryBo bo)
    {
        QueryWrapper<SysCompany> qw = Wrappers.query();
@@ -95,6 +337,8 @@
            qw.eq(StringUtils.isNotEmpty(bo.getCompanyPhone()), "company_phone", bo.getCompanyPhone());
            qw.eq(StringUtils.isNotEmpty(bo.getCompanyAddress()), "company_address", bo.getCompanyAddress());
            qw.eq(StringUtils.isNotEmpty(bo.getCompanyImg()), "company_img", bo.getCompanyImg());
            qw.eq(StringUtils.isNotEmpty(bo.getCompanyType()), "company_type", bo.getCompanyType());
            qw.eq(bo.getIsImport() != null, "is_import", bo.getIsImport());
            qw.eq(bo.getCompanyStatus() != null, "company_status", bo.getCompanyStatus());
            qw.eq(StringUtils.isNotEmpty(bo.getRegionCode()), "region_code", bo.getRegionCode());
            qw.like(StringUtils.isNotEmpty(bo.getRegionName()), "region_name", bo.getRegionName());
@@ -109,4 +353,9 @@
        }
        return qw;
    }
    private Boolean isAddUser(String phone)
    {
       return userService.count(userService.lq().eq(SysUser::getUserName, phone).eq(SysUser::getDelFlag,0))==0;
    }
}