k94314517
2025-05-20 142bcc9b22f48a8a2098a66b2964fe10c97c6fe8
server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -2,14 +2,17 @@
import cn.emay.sdk.core.dto.sms.response.SmsResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CompanyDepartmentMapper;
import com.doumee.dao.business.SmsEmailMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyDepartment;
import com.doumee.dao.system.dto.*;
import com.doumee.dao.system.model.SystemDepartment;
import com.doumee.dao.system.model.SystemDepartmentUser;
@@ -42,7 +45,12 @@
    private SmsEmailMapper smsEmailMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private CompanyService companyService;
    @Autowired
    private CompanyDepartmentMapper companyDepartmentMapper;
    @Value("${debug_model}")
    private boolean debugModel;
@@ -120,14 +128,14 @@
        if(StringUtils.isBlank(systemUser.getMobile()) || StringUtils.isBlank(systemUser.getCaptcha())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(!debugModel){
        String  phoneAtuh = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_PHONE_AUTH).getCode();
        if(!debugModel && !StringUtils.equals(phoneAtuh,Constants.ONE+"")){
            SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,systemUser.getMobile(),systemUser.getCaptcha());
        }
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(systemUser.getUsername());
        queryUserDto.setDeleted(Boolean.FALSE);
        queryUserDto.setType(Constants.ZERO);
//        queryUserDto.setType(Constants.ZERO);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "登录账号已存在");
@@ -136,7 +144,7 @@
       if (StringUtils.isNotBlank(systemUser.getMobile())) {
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setEmpNo(systemUser.getMobile());
            queryUserDto.setMobile(systemUser.getMobile());
            user = systemUserService.findOne(queryUserDto);
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号已存在");
@@ -145,7 +153,8 @@
        // 生成密码盐
        String salt = RandomStringUtils.randomAlphabetic(6);
        // 生成密码
        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getPassword(), salt));
//        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getPassword(), salt));
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD).getCode(), salt));
        systemUser.setSalt(salt);
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        systemUser.setType(loginUserInfo.getType());
@@ -173,6 +182,86 @@
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void createCompany(CreateSystemUserDTO systemUser) {
        // 验证用户名
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.UserType.SYSTEM.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
        }
//        systemUser.setUsername(systemUser.getMobile());
        if(StringUtils.isBlank(systemUser.getMobile()) || StringUtils.isBlank(systemUser.getCaptcha())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if( systemUser.getCompanyId() == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String  phoneAtuh = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_PHONE_AUTH).getCode();
        if(!debugModel && !StringUtils.equals(phoneAtuh,Constants.ONE+"")){
            SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,systemUser.getMobile(),systemUser.getCaptcha());
        }
        Company company = companyService.findById(systemUser.getCompanyId());
        if(company == null ||Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,当前企业信息不正确!");
        }
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(systemUser.getUsername());
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "登录账号已存在");
        }
        // 验证手机号
       if (StringUtils.isNotBlank(systemUser.getMobile())) {
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setMobile(systemUser.getMobile());
            user = systemUserService.findOne(queryUserDto);
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号已存在");
            }
        }
        // 生成密码盐
        String salt = RandomStringUtils.randomAlphabetic(6);
        // 生成密码
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD).getCode(), salt));
        systemUser.setSalt(salt);
        systemUser.setType(Constants.equalsInteger(company.getType(),Constants.ONE)?Constants.UserType.ZHUBO.getKey():Constants.UserType.COMPANY.getKey());
        systemUser.setType(loginUserInfo.getType());
        systemUser.setStatus(Constants.ZERO);
        //如果是企业用户 必须填写email
        if(Constants.equalsInteger(systemUser.getType(),Constants.ONE)){
            if( systemUser.getEmail() == null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
        }
        this.dealCompanyDepartmentData(systemUser);
        Integer userId = systemUserService.create(systemUser);
        /*// 设置部门
        if (systemUser.getDepartmentId() != null) {
            SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser();
            systemDepartmentUser.setDepartmentId(systemUser.getDepartmentId());
            systemDepartmentUser.setUserId(userId);
            systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
            systemDepartmentUser.setOperaTime(new Date());
            systemDepartmentUserService.create(systemDepartmentUser);
        }else {
            SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser();
            QueryWrapper<SystemDepartment> wrapper = new QueryWrapper<>();
            wrapper.lambda().isNull(SystemDepartment::getParentId).last("limit 1");
            SystemDepartment systemDepartment = systemDepartmentService.findOne(wrapper);
            systemDepartmentUser.setDepartmentId(systemDepartment.getId());
            systemDepartmentUser.setUserId(userId);
            systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
            systemDepartmentUser.setOperaTime(new Date());
            systemDepartmentUserService.create(systemDepartmentUser);
        }*/
    }
    @Override
    public void updateById(CreateSystemUserDTO systemUser) {
@@ -180,7 +269,6 @@
        SystemUser queryUserDto = new SystemUser();
        SystemUser user = null;
        if (StringUtils.isNotBlank(systemUser.getUsername())){
            queryUserDto.setUsername(systemUser.getUsername());
            queryUserDto.setDeleted(Boolean.FALSE);
            user = systemUserService.findOne(queryUserDto);
@@ -207,17 +295,17 @@
                if(StringUtils.isBlank(systemUser.getMobile()) || StringUtils.isBlank(systemUser.getCaptcha())){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"短信验证码不能为空!");
                }
                if(!debugModel){
                String  phoneAtuh = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_PHONE_AUTH).getCode();
                if(!debugModel && !StringUtils.equals(phoneAtuh,Constants.ONE+"")){
                    SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,systemUser.getMobile(),systemUser.getCaptcha());
                }
            }
        }
        systemUser.setType(null);//不支持修改
        systemUser.setCompanyId(null);//不支持修改
        // 修改用户
        systemUserService.updateById(systemUser);
        // 设置部门
        SystemDepartmentUser deleteDepartmentDto = new SystemDepartmentUser();
        /*SystemDepartmentUser deleteDepartmentDto = new SystemDepartmentUser();
        deleteDepartmentDto.setUserId(systemUser.getId());
        systemDepartmentUserService.delete(deleteDepartmentDto);
        if (systemUser.getDepartmentId() != null) {
@@ -227,7 +315,23 @@
            systemDepartmentUser.setOperaUser(systemUser.getUpdateUser());
            systemDepartmentUser.setOperaTime(new Date());
            systemDepartmentUserService.create(systemDepartmentUser);
        }*/
    }
    public void dealCompanyDepartmentData(CreateSystemUserDTO systemUser){
        if(Objects.isNull(systemUser.getDepartmentId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //处理组织数据
        CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(systemUser.getDepartmentId());
        if(Objects.isNull(companyDepartment)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到组织数据");
        }
        if(Constants.equalsInteger(companyDepartment.getType(),systemUser.getType())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"组织匹配失败,非同类型组织");
        }
        systemUser.setDepartmentId(companyDepartment.getId());
    }
@@ -243,76 +347,6 @@
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(dto.getUserId());
            newUserRole.setRoleId(roleId);
            systemUserRoleService.create(newUserRole);
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void companyCreateUser(CreateCompanyUserDTO createCompanyUserDTO) {
        if(Objects.isNull(createCompanyUserDTO)
                ||StringUtils.isBlank(createCompanyUserDTO.getUserName())
                ||StringUtils.isBlank(createCompanyUserDTO.getRealName())
                ||StringUtils.isBlank(createCompanyUserDTO.getPassword()) ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(createCompanyUserDTO.getUserName());
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "登录账号已存在");
        }
        if(createCompanyUserDTO.getType().equals(Constants.UserType.ZHUBO.getKey())){
            Company company = companyService.findById(loginUserInfo.getCompanyId());
            SystemUser zbUserNum = new SystemUser();
            zbUserNum.setCompanyId(loginUserInfo.getCompanyId());
            zbUserNum.setDeleted(Boolean.FALSE);
            zbUserNum.setType(Constants.UserType.ZHUBO.getKey());
        }
        SystemUser systemUser  = new SystemUser();
        BeanUtils.copyProperties(createCompanyUserDTO,systemUser);
        systemUser.setCompanyId(loginUserInfo.getCompanyId());
        systemUser.setRealname(createCompanyUserDTO.getRealName());
        systemUser.setUsername(createCompanyUserDTO.getUserName());
        // 生成密码盐
        String salt = RandomStringUtils.randomAlphabetic(6);
        // 生成密码
        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getPassword(), salt));
        systemUser.setSalt(salt);
        Integer userId = systemUserService.create(systemUser);
        if(systemUser.getType().equals(Constants.UserType.COMPANY.getKey())){
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(userId);
            newUserRole.setRoleId(createCompanyUserDTO.getRoleId());
            systemUserRoleService.create(newUserRole);
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void companyUpdUser(CreateCompanyUserDTO updCreateCompanyUserDTO) {
        if(Objects.isNull(updCreateCompanyUserDTO)
                ||Objects.isNull(updCreateCompanyUserDTO.getId())
                ||StringUtils.isBlank(updCreateCompanyUserDTO.getRealName())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemUser systemUser  = systemUserService.findById(updCreateCompanyUserDTO.getId());
        if(Objects.isNull(systemUser)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        systemUser.setRealname(updCreateCompanyUserDTO.getRealName());
        systemUser.setMobile(updCreateCompanyUserDTO.getMobile());
        systemUserService.updateById(systemUser);
        if(systemUser.getType().equals(Constants.UserType.COMPANY.getKey())){
            // 删除关联角色
            SystemUserRole deleteDto = new SystemUserRole();
            deleteDto.setUserId(systemUser.getId());
            systemUserRoleService.delete(deleteDto);
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(systemUser.getId());
            newUserRole.setRoleId(updCreateCompanyUserDTO.getRoleId());
            systemUserRoleService.create(newUserRole);
        }
    }