package com.doumee.service.system.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.core.annotation.excel.ExcelImporter;
|
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.Constants.UserType;
|
import com.doumee.core.utils.Utils;
|
import com.doumee.dao.business.AreasMapper;
|
import com.doumee.dao.business.CompanyMapper;
|
import com.doumee.dao.business.model.Areas;
|
import com.doumee.dao.business.model.Company;
|
import com.doumee.dao.business.model.Multifile;
|
import com.doumee.dao.business.model.QuestionnaireProblem;
|
import com.doumee.dao.system.dto.CompanyUserDTO;
|
import com.doumee.dao.system.dto.CreateExportSystemUserDTO;
|
import com.doumee.dao.system.dto.CreateSystemUserDTO;
|
import com.doumee.dao.system.model.SystemDictData;
|
import com.doumee.dao.system.model.SystemUserRole;
|
import com.doumee.dao.system.vo.SystemUserDetailVO;
|
import com.doumee.service.business.AreasService;
|
import com.doumee.service.business.CompanyService;
|
import com.doumee.service.business.MultifileService;
|
import com.doumee.service.system.*;
|
import com.github.pagehelper.IPage;
|
import com.github.pagehelper.Page;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.doumee.core.model.PageData;
|
import com.doumee.core.model.PageWrap;
|
import com.doumee.dao.system.SystemUserMapper;
|
import com.doumee.dao.system.dto.QuerySystemUserDTO;
|
import com.doumee.dao.system.model.SystemUser;
|
import com.doumee.dao.system.vo.SystemUserListVO;
|
import com.doumee.dao.system.vo.SystemDepartmentListVO;
|
import com.doumee.service.aware.DepartmentDataPermissionAware;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.catalina.User;
|
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.validation.Valid;
|
import java.util.*;
|
import java.util.regex.Pattern;
|
import java.util.stream.Collectors;
|
|
/**
|
* 系统用户Service实现
|
* @author Eva.Caesar Liu
|
* @date 2023/02/14 11:14
|
*/
|
@Service
|
@Slf4j
|
public class SystemUserServiceImpl implements SystemUserService {
|
|
@Autowired
|
private SystemUserMapper systemUserMapper;
|
|
@Autowired
|
private SystemRoleService systemRoleService;
|
@Autowired
|
private SystemUserRoleService systemUserRoleService;
|
|
@Autowired
|
private SystemDepartmentService systemDepartmentService;
|
|
@Autowired
|
private SystemPositionService systemPositionService;
|
|
@Autowired
|
private DepartmentDataPermissionAware departmentDataPermissionAware;
|
|
@Autowired
|
private AreasMapper areasMapper;
|
|
@Autowired
|
private CompanyMapper companyMapper;
|
|
@Autowired
|
private AreasService areasService;
|
|
@Lazy
|
@Autowired
|
CompanyService companyService;
|
|
@Lazy
|
@Autowired
|
SystemDictDataBiz systemDictDataBiz;
|
|
@Autowired
|
private MultifileService multifileService;
|
|
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
|
@Override
|
public Integer create(SystemUser systemUser) {
|
SystemUser user = new SystemUser();
|
user.setUsername(systemUser.getUsername());
|
SystemUser exists = systemUserMapper.selectOne(new QueryWrapper<>(user).last("limit 1"));
|
if (Objects.nonNull(exists)){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"登录账号已存在");
|
}
|
systemUserMapper.insert(systemUser);
|
return systemUser.getId();
|
}
|
|
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
|
@Override
|
public void createSystemUSer(SystemUser systemUser) {
|
|
LoginUserInfo principals = (LoginUserInfo) SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();
|
|
SystemUser query = new SystemUser();
|
query.setUsername(systemUser.getUsername());
|
|
SystemUser one1 = findOne(query);
|
if (Objects.nonNull(one1)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"登录账号已存在");
|
}
|
|
if ((StringUtils.isBlank(systemUser.getUsername()))){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
// 市局校验
|
if ((Constants.equalsInteger(UserType.SJ.getKey(),systemUser.getType()) ||
|
(Constants.equalsInteger(UserType.EXPERT.getKey(),systemUser.getType())))
|
&&
|
Objects.isNull(systemUser.getCityId())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
//区县校验
|
if ((Constants.equalsInteger(UserType.AREA.getKey(),systemUser.getType()))
|
&&
|
(Objects.isNull(systemUser.getAreaId()))){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
//父级账号
|
if(Objects.nonNull(systemUser.getParentId())){
|
SystemUser user = systemUserMapper.selectById(systemUser.getParentId());
|
systemUser.setCityId(Optional.ofNullable(user).map(s->s.getCityId()).orElse(null));
|
}
|
|
// SystemDictData systemDictData = new SystemDictData();
|
// systemDictData.setLabel("DEFAULT_PASSWORD");
|
SystemDictData one = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD);
|
|
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
Date now = new Date();
|
SystemUser insertUser = new SystemUser();
|
insertUser.setUsername(systemUser.getUsername());
|
insertUser.setRealname(StringUtils.isNotEmpty(systemUser.getRealname()) ? systemUser.getRealname() : systemUser.getUsername());
|
insertUser.setMobile(systemUser.getMobile());
|
insertUser.setCreateTime(now);
|
insertUser.setUpdateTime(now);
|
insertUser.setCreateUser(principal.getId());
|
insertUser.setUpdateUser(principal.getId());
|
insertUser.setDeleted(Boolean.FALSE);
|
insertUser.setAreaId(systemUser.getAreaId());
|
insertUser.setCityId(systemUser.getCityId());
|
insertUser.setType(systemUser.getType());
|
insertUser.setStatus(Constants.ZERO);
|
|
Integer companyId = null;
|
if (Constants.UserType.getHasCompanyType().contains(systemUser.getType())){
|
Company insertCompany = new Company();
|
insertCompany.setOrigin(Constants.ONE);
|
insertCompany.setName(systemUser.getCompanyName());
|
insertCompany.setCreditCode(systemUser.getCreditCode());
|
insertCompany.setLegalPerson(systemUser.getLegalPerson());
|
insertCompany.setLinkName(systemUser.getLinkName());
|
insertCompany.setLinkPhone(systemUser.getLinkPhone());
|
insertCompany.setCityId(systemUser.getCityId());
|
insertCompany.setAreaId(systemUser.getAreaId());
|
insertCompany.setCreator(principal.getId());
|
insertCompany.setCreateDate(now);
|
insertCompany.setEditor(principal.getId());
|
insertCompany.setEditDate(now);
|
insertCompany.setLinkPhone(insertUser.getMobile());
|
insertCompany.setIsdeleted(Constants.ZERO);
|
systemUser.convertCompanyType();
|
insertCompany.setType(systemUser.getCompanyType());
|
insertUser.setCompanyType(systemUser.getCompanyType());
|
|
QueryWrapper<Company> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.eq(Company::getType,insertCompany.getType())
|
.and(s->{s.eq(Company::getCreditCode,insertCompany.getCreditCode())
|
.or()
|
.eq(Company::getName,insertCompany.getName());});
|
Integer count = companyMapper.selectCount(wrapper);
|
|
if (count > Constants.ZERO){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业名称或社会信用代码有重复");
|
}
|
|
companyId = companyService.create(insertCompany);
|
}
|
|
if ((Constants.equalsInteger(UserType.SJ.getKey(),principals.getType()) ||
|
Constants.equalsInteger(UserType.SYSTEM.getKey(),principals.getType())
|
) || Constants.equalsInteger(UserType.AREA.getKey(),systemUser.getType())){
|
|
insertUser.setParentId(systemUser.getParentId());
|
}
|
// 生成密码盐
|
String salt = RandomStringUtils.randomAlphabetic(6);
|
// 生成密码
|
insertUser.setPassword(Utils.Secure.encryptPassword(one.getCode(), salt));
|
insertUser.setSalt(salt);
|
insertUser.setCompanyId(companyId);
|
|
create(insertUser);
|
//内置不同的角色
|
dealSystemRoleRel(insertUser);
|
}
|
|
private void dealSystemRoleRel(SystemUser insertUser) {
|
Integer roleId = null;
|
try {
|
if(Constants.equalsInteger(insertUser.getType(), UserType.COMPANY.getKey())){
|
//企业
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SO_ADMIN.getKey())){
|
//服务结构管理员
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SO_ADMIN_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SO_CHILD.getKey())){
|
//服务结构子账号
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SO_CHILD_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SD_ADMIN.getKey())){
|
//综合服务单位管理员
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SD_ADMIN_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SD_CHILD.getKey())){
|
//综合服务单位子账号
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SD_CHILD_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.EXPERT.getKey())){
|
//专家
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.EXPERT_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SJ.getKey())){
|
//市局
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CITY_ROLE).getCode());
|
}else if(Constants.equalsInteger(insertUser.getType(), UserType.SJ_CHILD.getKey())){
|
//市局子账号
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CITY_CHILD_ROLE).getCode());
|
} else if(Constants.equalsInteger(insertUser.getType(), UserType.AREA.getKey())){
|
//县区
|
roleId = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AREA_ROLE).getCode());
|
}
|
}catch (Exception e){
|
|
}
|
if(roleId!=null){
|
SystemUserRole ur = new SystemUserRole();
|
ur.setCreateUser(insertUser.getCreateUser());
|
ur.setCreateTime(insertUser.getCreateTime());
|
ur.setDeleted(false);
|
ur.setRoleId(roleId);
|
ur.setUserId(insertUser.getId());
|
systemUserRoleService.create(ur);
|
}
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
SystemUser systemUser = new SystemUser();
|
systemUser.setId(id);
|
systemUser.setDeleted(Boolean.TRUE);
|
this.updateById(systemUser);
|
}
|
|
@Override
|
public void changeStatusById(Integer id, Integer value) {
|
|
if (!Constants.Status.getValues().contains(value) || Objects.isNull(id)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "修改状态参数错误");
|
}
|
SystemUser systemUser = new SystemUser();
|
systemUser.setId(id);
|
systemUser.setStatus(value);
|
systemUserMapper.updateById(systemUser);
|
}
|
|
@Override
|
@Transactional
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) return;
|
for (Integer id : ids) {
|
this.deleteById(id);
|
}
|
}
|
|
@Override
|
public void updateById(SystemUser systemUser) {
|
systemUserMapper.updateById(systemUser);
|
}
|
|
@Override
|
public void updateSystemUser(SystemUser systemUser) {
|
|
// 企业已拦截抛出异常
|
SystemUser user = findById(systemUser.getId());
|
if(user == null){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY);
|
}
|
// checkSystemUser(systemUser);
|
if (Constants.UserType.getHasCompanyType().contains(systemUser.getType())){
|
|
systemUser.convertCompanyType();
|
Integer companyType = systemUser.getCompanyType();
|
|
QueryWrapper<Company> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(Company::getType,companyType)
|
.eq(Company::getName,systemUser.getCompanyName());
|
Company exit = companyMapper.selectOne(wrapper);
|
|
if (Objects.nonNull(exit) && !Constants.equalsInteger(exit.getId(),user.getCompanyId())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业名称重复");
|
}
|
|
wrapper.clear();
|
wrapper.lambda().eq(Company::getType,companyType)
|
.eq(Company::getCreditCode,systemUser.getCreditCode());
|
exit = companyMapper.selectOne(wrapper);
|
if (Objects.nonNull(exit) && !Constants.equalsInteger(exit.getId(),user.getCompanyId())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"统一社会信用代码重复");
|
}
|
Integer companyId = user.getCompanyId();
|
Company company = new Company();
|
company.setId(companyId);
|
company.setCityId(systemUser.getCityId());
|
company.setAreaId(systemUser.getAreaId());
|
company.setLegalPerson(systemUser.getLegalPerson());
|
company.setLinkPhone(systemUser.getMobile());
|
company.setLinkName(systemUser.getLinkName());
|
company.setName(systemUser.getCompanyName());
|
company.setCreditCode(systemUser.getCreditCode());
|
companyMapper.updateById(company);
|
}
|
SystemUser user1 = new SystemUser();
|
user1.setUsername(systemUser.getUsername());
|
SystemUser one = findOne(user1);
|
if ( Objects.nonNull(one) && !one.getId().equals(systemUser.getId())){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"登录账号已存在");
|
}
|
|
SystemUser updateUser = new SystemUser();
|
updateUser.setId(systemUser.getId());
|
updateUser.setUsername(systemUser.getUsername());
|
updateUser.setRealname(systemUser.getRealname());
|
updateUser.setMobile(systemUser.getMobile());
|
updateUser.setCityId(systemUser.getCityId());
|
updateUser.setAreaId(systemUser.getAreaId());
|
updateUser.setStatus(systemUser.getStatus());
|
updateUser.setParentId(systemUser.getParentId());
|
updateById(updateUser);
|
}
|
|
@Override
|
@Transactional
|
public void updateByIdInBatch(List<SystemUser> systemUsers) {
|
if (CollectionUtils.isEmpty(systemUsers)) return;
|
for (SystemUser systemUser: systemUsers) {
|
this.updateById(systemUser);
|
}
|
}
|
|
@Override
|
public SystemUser findById(Integer id) {
|
return systemUserMapper.selectById(id);
|
}
|
|
@Override
|
public SystemUser findOne(SystemUser systemUser) {
|
Wrapper<SystemUser> wrapper = new QueryWrapper<>(systemUser);
|
return systemUserMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<SystemUser> findList(SystemUser systemUser) {
|
Wrapper<SystemUser> wrapper = new QueryWrapper<>(systemUser);
|
return systemUserMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<SystemUserListVO> findPage(PageWrap<QuerySystemUserDTO> pageWrap) {
|
// 根部门条件处理(需查询根部门下所有部门的用户)
|
/* if (pageWrap.getModel().getRootDeptId() != null) {
|
pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(pageWrap.getModel().getRootDeptId()));
|
} else {
|
pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(null));
|
}*/
|
// 执行查询
|
pageWrap.getModel().setTypeList(new ArrayList<>());
|
pageWrap.getModel().getTypeList().add(UserType.SYSTEM.getKey());
|
LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
// initUserRole(user,pageWrap);
|
PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
|
|
List<SystemUserListVO> userList = systemUserMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause());
|
for (SystemUserListVO u : userList) {
|
// 查询用户角色列表
|
u.setRoles(systemRoleService.findByUserId(u.getId()));
|
// 查询用户岗位列表
|
u.setPositions(systemPositionService.findByUserId(u.getId()));
|
}
|
return PageData.from(new PageInfo<>(userList));
|
}
|
|
@Override
|
public PageData<SystemUserDetailVO> findAllPage(PageWrap<QuerySystemUserDTO> pageWrap) {
|
// 根部门条件处理(需查询根部门下所有部门的用户)
|
if (pageWrap.getModel().getRootDeptId() != null) {
|
pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(pageWrap.getModel().getRootDeptId()));
|
} else {
|
pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(null));
|
}
|
// 执行查询
|
PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
|
|
LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();
|
|
initUserRole(user,pageWrap);
|
|
List<SystemUserDetailVO> userList = systemUserMapper.selectAllManagerList(pageWrap.getModel(), pageWrap.getOrderByClause());
|
|
userList.stream().forEach(s-> {
|
String belongAddress ="";
|
if(s.getAreaId() !=null && s.getAreaId().intValue()!=0){
|
Areas area = areasService.findById(s.getAreaId(), Constants.TWO);
|
if(area != null){
|
belongAddress = Optional.ofNullable(area)
|
.map(item -> item.getProvinceName() + item.getCityName() + item.getName())
|
.orElse("");
|
s.setCityId(area.getCityId());
|
s.setProvinceId(area.getProvinceId());
|
}
|
}else if(s.getCityId() !=null){
|
Areas area = areasService.findById(s.getCityId(), Constants.ONE);
|
if(area!=null){
|
belongAddress = Optional.ofNullable(area)
|
.map(item -> item.getProvinceName() + item.getName())
|
.orElse("");
|
s.setProvinceId(area.getProvinceId());
|
}
|
}
|
s.setAddress(belongAddress);
|
});
|
return PageData.from(new PageInfo<>(userList));
|
}
|
|
|
@Override
|
public PageData<SystemUserDetailVO> findSystemUserSon(PageWrap<SystemUser> user) {
|
|
LoginUserInfo principals = (LoginUserInfo)SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();
|
|
QueryWrapper<SystemUser> wrapper = new QueryWrapper<>();
|
|
if (Constants.equalsInteger(principals.getType(),UserType.SYSTEM.getKey())){
|
wrapper.lambda()
|
.eq(SystemUser::getCompanyId,user.getModel().getCompanyId());
|
}else {
|
wrapper.lambda()
|
.eq(SystemUser::getCompanyId,principals.getCompanyId());
|
}
|
wrapper.lambda().like(StringUtils.isNotBlank(user.getModel().getUsername())
|
,SystemUser::getUsername,user.getModel().getUsername())
|
.in(SystemUser::getType,Constants.UserType.getSonUserType())
|
.eq(SystemUser::getDeleted,Boolean.FALSE);
|
|
PageHelper.startPage(user.getPage(), user.getCapacity());
|
List<SystemUser> systemUsers = systemUserMapper.selectList(wrapper);
|
|
List<SystemUserDetailVO> collect = systemUsers.stream()
|
.map(s -> {
|
SystemUserDetailVO vo = new SystemUserDetailVO();
|
vo.setId(s.getId());
|
vo.setUsername(s.getUsername());
|
vo.setRealname(s.getRealname());
|
vo.setMobile(s.getMobile());
|
vo.setType(s.getType());
|
vo.setCreateTime(s.getCreateTime());
|
vo.setStatus(s.getStatus());
|
return vo;
|
}).collect(Collectors.toList());
|
return PageData.from(new PageInfo<>(collect));
|
}
|
|
@Override
|
public PageData<SystemUserDetailVO> findSystemSjSon(PageWrap<SystemUser> user) {
|
|
LoginUserInfo principals = (LoginUserInfo)SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();
|
|
QueryWrapper<SystemUser> wrapper = new QueryWrapper<>();
|
|
if (Constants.equalsInteger(principals.getType(),UserType.SYSTEM.getKey())){
|
wrapper.lambda()
|
.eq(SystemUser::getParentId,user.getModel().getParentId());
|
}else {
|
wrapper.lambda()
|
.eq(SystemUser::getParentId,principals.getId());
|
}
|
wrapper.lambda().like(StringUtils.isNotBlank(user.getModel().getUsername())
|
,SystemUser::getUsername,user.getModel().getUsername())
|
.eq(SystemUser::getType,Constants.UserType.SJ_CHILD.getKey())
|
.eq(SystemUser::getDeleted,Boolean.FALSE);
|
|
PageHelper.startPage(user.getPage(), user.getCapacity());
|
List<SystemUser> systemUsers = systemUserMapper.selectList(wrapper);
|
|
List<SystemUserDetailVO> collect = systemUsers.stream()
|
.map(s -> {
|
SystemUserDetailVO vo = new SystemUserDetailVO();
|
vo.setId(s.getId());
|
vo.setUsername(s.getUsername());
|
vo.setRealname(s.getRealname());
|
vo.setMobile(s.getMobile());
|
vo.setType(s.getType());
|
vo.setCreateTime(s.getCreateTime());
|
vo.setStatus(s.getStatus());
|
return vo;
|
}).collect(Collectors.toList());
|
return PageData.from(new PageInfo<>(collect));
|
}
|
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
@Override
|
public Integer importCompanyBatch(MultipartFile file) {
|
|
try {
|
|
ExcelImporter ie = new ExcelImporter(file,0,0);
|
List<CompanyUserDTO> dataList = ie.getDataList(CompanyUserDTO.class,null);
|
if(dataList == null || dataList.size() ==0){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!");
|
}
|
List<String> comNameList = dataList.stream().map(s -> s.getCompanyName().trim()).distinct().collect(Collectors.toList());
|
long creditCodeCount = dataList.stream().map(s -> s.getCreditCode().trim()).distinct().count();
|
List<String> userNameList = dataList.stream().map(s -> s.getUserName().trim()).distinct().collect(Collectors.toList());
|
|
if (!(dataList.size() == comNameList.size())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业名称有已存在");
|
}
|
|
if (!(dataList.size() == creditCodeCount)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"统一社会信用代码已存在");
|
}
|
|
if ( !(creditCodeCount == userNameList.size())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"登录账号已存在");
|
}
|
|
insertCompanyUser(dataList);
|
}catch (Exception e) {
|
log.error(String.format("批量插入异常%s ",e.getMessage()));
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),e.getMessage());
|
}finally {
|
|
}
|
return null;
|
}
|
|
|
/**
|
* 保存企业用户
|
* @param dataList
|
*/
|
private void insertCompanyUser(@Validated List<CompanyUserDTO> dataList){
|
|
LoginUserInfo principals = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
SystemDictData one = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD);
|
|
for (CompanyUserDTO companyUserDTO : dataList) {
|
|
Areas area = areasService.findByCityAndArea(companyUserDTO.getCityName(),companyUserDTO.getAreasName());
|
|
if (area == null){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"地区名称有误");
|
}
|
|
QueryWrapper<Company> wrapper = new QueryWrapper<>();
|
if(StringUtils.isNotBlank(companyUserDTO.getCreditCode())){
|
Pattern creditCodeRegex = Pattern.compile(Constants.CREDIT_CODE_REGEX);
|
if (!creditCodeRegex.matcher(companyUserDTO.getCreditCode()).matches()){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"信用代码格式不正确");
|
}
|
wrapper.lambda().eq(Company::getName,companyUserDTO.getCompanyName())
|
.and (s->{s.eq(Company::getCreditCode,companyUserDTO.getCreditCode())
|
.or()
|
.eq(Company::getName,companyUserDTO.getCompanyName());});
|
}
|
Integer integer = companyMapper.selectCount(wrapper);
|
if (integer > Constants.ZERO){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业名称或信用代码存在重复");
|
}
|
Company company = new Company();
|
company.setOrigin(Constants.ONE);
|
company.setName(companyUserDTO.getCompanyName());
|
company.setUserName(companyUserDTO.getUserName());
|
company.setCreditCode(companyUserDTO.getCreditCode());
|
company.setPassword(StringUtils.isNotBlank(companyUserDTO.getPassword()) ? companyUserDTO.getPassword() : one.getCode());
|
company.setCityId(area.getCityId());
|
company.setAreaId(area.getId());
|
company.setAddress(area.getProvinceName()+area.getCityName()+area.getName());
|
company.setCreator(principals.getId());
|
company.setCreateDate(new Date());
|
company.setEditor(principals.getId());
|
company.setEditDate(new Date());
|
company.setType(Constants.ZERO);
|
|
companyService.createSystemUser(company);
|
|
|
|
}
|
|
}
|
|
|
private void initUserRole(LoginUserInfo user, PageWrap<QuerySystemUserDTO> pageWrap) {
|
|
// if (Constants.formatIntegerNum(user.getType()) ==UserType.COMPANY.getKey()){
|
// pageWrap.getModel().setCompanyId(user.getCompanyId());
|
//
|
// }else if(Constants.formatIntegerNum(user.getType()) == UserType.SD_ADMIN.getKey()
|
// ||Constants.formatIntegerNum(user.getType()) == UserType.SD_CHILD.getKey() ){
|
// //如果是综合服务单位, 只能看到user同company_id下的账号
|
// pageWrap.getModel().setCompanyId(user.getCompanyId());
|
// }else if(Constants.formatIntegerNum(user.getType()) == UserType.SO_ADMIN.getKey()
|
// ||Constants.formatIntegerNum(user.getType()) == UserType.SO_CHILD.getKey() ){
|
// //如果是服务机构, 只能看到user同company_id下的账号
|
// pageWrap.getModel().setCompanyId(user.getCompanyId());
|
// }else if(Constants.formatIntegerNum(user.getType()) == UserType.SYSTEM.getKey() ){
|
//如果是系统管理员
|
QuerySystemUserDTO model = pageWrap.getModel();
|
|
if (Constants.formatIntegerNum(model.getType()) ==UserType.COMPANY.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.COMPANY.getKey());
|
}else if (Constants.formatIntegerNum(model.getType()) == UserType.SD_ADMIN.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.SD_ADMIN.getKey());
|
// model.getTypeList().add(UserType.SD_CHILD.getKey());
|
} else if (Constants.formatIntegerNum(model.getType()) == UserType.SO_ADMIN.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.SO_ADMIN.getKey());
|
// model.getTypeList().add(UserType.SD_CHILD.getKey());
|
}else if (Constants.formatIntegerNum(model.getType()) == UserType.AREA.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.AREA.getKey());
|
}else if (Constants.formatIntegerNum(model.getType()) == UserType.SJ.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.SJ.getKey());
|
}else if (Constants.formatIntegerNum(model.getType()) == UserType.EXPERT.getKey()){
|
model.setTypeList(new ArrayList<>());
|
model.getTypeList().add(UserType.EXPERT.getKey());
|
}else{
|
log.info("pageWrap : ", JSON.toJSONString(pageWrap));
|
//其他类型查询全部企业报名数量
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,参数不正确");
|
}
|
|
// }else if(Constants.formatIntegerNum(user.getType()) == UserType.AREA.getKey()){
|
// //如果是县区账号,只能看到user同area_id下的账号
|
// pageWrap.getModel().setAreaId(user.getAreaId());
|
// pageWrap.getModel().setType(user.getType());
|
// }else if(Constants.formatIntegerNum(user.getType()) == UserType.SJ.getKey()){
|
// //如果是市局账号,只能看到user同city_id下的账号
|
// pageWrap.getModel().setType(user.getType());
|
// pageWrap.getModel().setCityIds(Arrays.asList(user.getCityId()));
|
// }else{
|
// //其他类型查询全部企业报名数量
|
// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,不允许查询该数据!");
|
// }
|
}
|
|
@Override
|
public long count(SystemUser systemUser) {
|
Wrapper<SystemUser> wrapper = new QueryWrapper<>(systemUser);
|
return systemUserMapper.selectCount(wrapper);
|
}
|
|
/**
|
* 获取用户权限内允许查询的部门ID
|
*/
|
private List<Integer> getAllowedDeptIds(Integer rootDeptId) {
|
List<SystemDepartmentListVO> allowedDepartments = departmentDataPermissionAware.execute();
|
List<Integer> allowedDeptIds = new ArrayList<>();
|
for (SystemDepartmentListVO listVO : allowedDepartments) {
|
injectIds(allowedDeptIds, listVO);
|
}
|
// 没有允许的部门
|
if (allowedDeptIds.size() == 0) {
|
allowedDeptIds.add(-1);
|
return allowedDeptIds;
|
}
|
if (rootDeptId == null) {
|
return allowedDeptIds;
|
}
|
List<Integer> departmentIds = systemDepartmentService.findChildren(rootDeptId);
|
departmentIds.add(rootDeptId);
|
departmentIds.removeIf(deptId -> !allowedDeptIds.contains(deptId));
|
return departmentIds;
|
}
|
|
/**
|
* 递归注入用户权限内的部门ID
|
*/
|
private void injectIds (List<Integer> pool, SystemDepartmentListVO listVO) {
|
pool.add(listVO.getId());
|
if (CollectionUtils.isEmpty(listVO.getChildren())) {
|
return;
|
}
|
for (SystemDepartmentListVO child : listVO.getChildren()) {
|
injectIds(pool, child);
|
}
|
}
|
|
@Override
|
public void updateZFServiceById(CreateSystemUserDTO systemUser) {
|
|
SystemUser user = systemUserMapper.selectById(systemUser.getId());
|
Integer type = user.getType();
|
List<Integer> noCheckUserChange = Constants.UserType.getNoCheckUserChange();
|
|
if (noCheckUserChange.contains(type)){
|
CreateSystemUserDTO dto = new CreateSystemUserDTO();
|
dto.setId(systemUser.getId());
|
dto.setRealname(systemUser.getRealname());
|
dto.setMobile(systemUser.getMobile());
|
dto.setUpdateTime(new Date());
|
dto.setUpdateUser(systemUser.getUpdateUser());
|
systemUserMapper.updateById(dto);
|
|
}else {
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"暂无权限");
|
}
|
|
}
|
|
@Override
|
public void updateZFServiceSonById(CreateSystemUserDTO systemUser) {
|
// SystemUser user = systemUserMapper.selectById(systemUser.getId());
|
Integer type = systemUser.getType();
|
|
//修改子账号
|
if ((Constants.UserType.SD_ADMIN.getKey() == type
|
|| Constants.UserType.SO_ADMIN.getKey() == type)
|
&&
|
(StringUtils.isNoneEmpty(systemUser.getSonUserId()))){
|
UpdateWrapper<SystemUser> wrapper = new UpdateWrapper<>();
|
wrapper.lambda()
|
.eq(SystemUser::getId,systemUser.getSonUserId())
|
.eq(SystemUser::getCompanyId,systemUser.getCompanyId());
|
|
SystemUser updateUser = new SystemUser();
|
updateUser.setUsername(systemUser.getUsername());
|
updateUser.setRealname(systemUser.getRealname());
|
updateUser.setMobile(systemUser.getMobile());
|
updateUser.setUpdateUser(systemUser.getUpdateUser());
|
updateUser.setUpdateTime(new Date());
|
systemUserMapper.update(updateUser,wrapper);
|
}
|
}
|
|
@Override
|
public void createOrUpdateZFServiceSonById(CreateSystemUserDTO systemUser) {
|
|
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
|
if ( Constants.UserType.SO_ADMIN.getKey() != Constants.formatIntegerNum(principal.getType())
|
&& Constants.UserType.SD_ADMIN.getKey() != Constants.formatIntegerNum(principal.getType())
|
&& UserType.SYSTEM.getKey() != Constants.formatIntegerNum(principal.getType())){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"无权限操作");
|
}
|
//校验 用户名称是否存在
|
checkSystemUser(systemUser);
|
|
if (Objects.isNull(systemUser.getId())){
|
Integer type = systemUser.getType();
|
Integer companyId = Objects.nonNull(systemUser.getCompanyId()) ? systemUser.getCompanyId() : principal.getCompanyId();
|
|
if (Objects.isNull(companyId)){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业id为空请传递正确参数");
|
}
|
if (Constants.equalsInteger(principal.getType(),UserType.SO_ADMIN.getKey())){
|
type = UserType.SO_CHILD.getKey();
|
}else if (Constants.equalsInteger(principal.getType(),UserType.SD_ADMIN.getKey())){
|
type = UserType.SD_CHILD.getKey();
|
}
|
|
SystemDictData one = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD);
|
SystemUser insertUser = new SystemUser();
|
// 生成密码盐
|
String salt = RandomStringUtils.randomAlphabetic(6);
|
// 生成密码
|
insertUser.setPassword(Utils.Secure.encryptPassword(one.getCode(), salt));
|
insertUser.setSalt(salt);
|
insertUser.setCreateTime(new Date());
|
insertUser.setUpdateTime(new Date());
|
insertUser.setCreateUser(principal.getId());
|
insertUser.setUpdateUser(principal.getId());
|
insertUser.setCompanyId(companyId);
|
insertUser.setAreaId(principal.getAreaId());
|
insertUser.setCityId(principal.getCityId());
|
insertUser.setType(type);
|
insertUser.setStatus(Constants.Status.ENABLE.getValue());
|
insertUser.setUsername(systemUser.getUsername());
|
insertUser.setRealname(StringUtils.isNotEmpty(systemUser.getRealname()) ? systemUser.getRealname() : systemUser.getUsername());
|
insertUser.setMobile(systemUser.getMobile());
|
systemUserMapper.insert(insertUser);
|
dealSystemRoleRel(insertUser);
|
} else {
|
|
SystemUser existUser = findById(systemUser.getId());
|
if (Objects.isNull(existUser)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"用户不存在");
|
}
|
SystemUser updateUser = new SystemUser();
|
updateUser.setId(systemUser.getId());
|
updateUser.setUpdateTime(new Date());
|
updateUser.setUpdateUser(principal.getId());
|
updateUser.setUsername(systemUser.getUsername());
|
updateUser.setRealname(systemUser.getRealname());
|
updateUser.setMobile(systemUser.getMobile());
|
systemUserMapper.updateById(updateUser);
|
}
|
}
|
|
@Override
|
public void createOrUpdateSJSonById(CreateSystemUserDTO systemUser) {
|
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
|
if ( Constants.UserType.SJ.getKey() != Constants.formatIntegerNum(principal.getType())
|
&& UserType.SYSTEM.getKey() != Constants.formatIntegerNum(principal.getType())){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"无权限操作");
|
}
|
//校验 用户名称是否存在
|
checkSystemUser(systemUser);
|
|
if (Objects.isNull(systemUser.getId())){
|
|
SystemDictData one = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD);
|
SystemUser insertUser = new SystemUser();
|
// 生成密码盐
|
String salt = RandomStringUtils.randomAlphabetic(6);
|
// 生成密码
|
insertUser.setPassword(Utils.Secure.encryptPassword(one.getCode(), salt));
|
insertUser.setSalt(salt);
|
insertUser.setCreateTime(new Date());
|
insertUser.setUpdateTime(new Date());
|
insertUser.setCreateUser(principal.getId());
|
insertUser.setUpdateUser(principal.getId());
|
insertUser.setAreaId(principal.getAreaId());
|
insertUser.setCityId(principal.getCityId());
|
insertUser.setType(UserType.SJ_CHILD.getKey());
|
insertUser.setStatus(Constants.Status.ENABLE.getValue());
|
insertUser.setUsername(systemUser.getUsername());
|
insertUser.setRealname(StringUtils.isNotEmpty(systemUser.getRealname()) ? systemUser.getRealname() : systemUser.getUsername());
|
insertUser.setMobile(systemUser.getMobile());
|
insertUser.setParentId(systemUser.getParentId());
|
systemUserMapper.insert(insertUser);
|
dealSystemRoleRel(insertUser);
|
} else {
|
|
SystemUser existUser = findById(systemUser.getId());
|
if (Objects.isNull(existUser)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"用户不存在");
|
}
|
SystemUser updateUser = new SystemUser();
|
updateUser.setId(systemUser.getId());
|
updateUser.setUpdateTime(new Date());
|
updateUser.setUpdateUser(principal.getId());
|
updateUser.setUsername(systemUser.getUsername());
|
updateUser.setRealname(systemUser.getRealname());
|
updateUser.setMobile(systemUser.getMobile());
|
systemUserMapper.updateById(updateUser);
|
}
|
|
}
|
|
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
@Override
|
public Integer registerExportUser(CreateExportSystemUserDTO createExportSystemUserDTO) {
|
|
SystemUser user = new SystemUser();
|
user.setUsername(createExportSystemUserDTO.getUserName());
|
SystemUser exists = systemUserMapper.selectOne(new QueryWrapper<>(user).last("limit 1"));
|
if (Objects.nonNull(exists)){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"登录账号已存在");
|
}
|
SystemUser insertUser = new SystemUser();
|
insertUser.setUsername(createExportSystemUserDTO.getUserName());
|
insertUser.setRealname(createExportSystemUserDTO.getRealname());
|
insertUser.setEmpNo(createExportSystemUserDTO.getEmpNo());
|
insertUser.setMobile(createExportSystemUserDTO.getMobile());
|
// 生成密码盐
|
String salt = RandomStringUtils.randomAlphabetic(6);
|
// 生成密码
|
insertUser.setPassword(Utils.Secure.encryptPassword(createExportSystemUserDTO.getPassword(), salt));
|
insertUser.setSalt(salt);
|
insertUser.setCreateTime(new Date());
|
insertUser.setUpdateTime(new Date());
|
insertUser.setAreaId(createExportSystemUserDTO.getAreaId());
|
insertUser.setCityId(createExportSystemUserDTO.getCityId());
|
insertUser.setType(UserType.EXPERT.getKey());
|
insertUser.setStatus(Constants.ZERO);
|
insertUser.setIdCard(createExportSystemUserDTO.getIdCard());
|
insertUser.setProfession(createExportSystemUserDTO.getProfession());
|
systemUserMapper.insert(insertUser);
|
insertUser.setCreateUser(insertUser.getId());
|
dealSystemRoleRel(insertUser);
|
if (Objects.isNull(createExportSystemUserDTO.getIdCardFrontFile())
|
||Objects.isNull(createExportSystemUserDTO.getIdCardReverseFile())
|
|| CollectionUtils.isEmpty(createExportSystemUserDTO.getProfessionFileList())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证照片,职称照片 参数缺失");
|
|
}
|
|
Multifile idCardFrontFile = createExportSystemUserDTO.getIdCardFrontFile();
|
idCardFrontFile.setObjType(Constants.MultiFile.IDCARD_FRONT_USER.getKey());
|
idCardFrontFile.setObjId(insertUser.getId());
|
multifileService.create(idCardFrontFile);
|
|
Multifile idCardReverseFile = createExportSystemUserDTO.getIdCardReverseFile();
|
idCardReverseFile.setObjType(Constants.MultiFile.IDCARD_REVERSE_USER.getKey());
|
idCardFrontFile.setObjId(insertUser.getId());
|
multifileService.create(idCardReverseFile);
|
|
createExportSystemUserDTO.getProfessionFileList().forEach(s->{
|
s.setObjId(insertUser.getId());
|
s.setObjType(Constants.MultiFile.PROFESSION_USER.getKey());
|
multifileService.create(s);
|
});
|
|
return null;
|
}
|
|
private void checkSystemUser(SystemUser systemUser){
|
if (StringUtils.isBlank(systemUser.getUsername())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户名不允许为空");
|
}
|
SystemUser user = new SystemUser();
|
user.setUsername(systemUser.getUsername());
|
SystemUser existUser = findOne(user);
|
|
if (Objects.nonNull(existUser) && !existUser.getId().equals(systemUser.getId())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户名登录名存在重复");
|
}
|
}
|
}
|