|
@@ -1,33 +1,36 @@
|
|
|
package com.xy.service.impl;
|
|
|
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.crypto.SecureUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.xy.dto.SysWorkUser.AddDto;
|
|
|
-import com.xy.dto.SysWorkUser.PageDto;
|
|
|
-import com.xy.dto.SysWorkUser.UpdateDto;
|
|
|
+import com.xy.config.SaTokenAuthorizeConfig;
|
|
|
+import com.xy.dto.SysWorkUser.*;
|
|
|
import com.xy.entity.SysDeptRelation;
|
|
|
import com.xy.entity.SysUserDept;
|
|
|
import com.xy.entity.SysUserRole;
|
|
|
import com.xy.entity.SysWorkUser;
|
|
|
import com.xy.mapper.SysWorkUserMapper;
|
|
|
+import com.xy.redis.RedisCache;
|
|
|
import com.xy.service.SysDeptRelationService;
|
|
|
import com.xy.service.SysUserDeptService;
|
|
|
import com.xy.service.SysUserRoleService;
|
|
|
import com.xy.service.SysWorkUserService;
|
|
|
-import com.xy.utils.Beans;
|
|
|
-import com.xy.utils.PageBean;
|
|
|
-import com.xy.utils.R;
|
|
|
-import com.xy.utils.SaTokenUtils;
|
|
|
+import com.xy.utils.*;
|
|
|
import com.xy.vo.SysWorkUserVo;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -53,11 +56,27 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
|
|
|
private final SysUserDeptService sysUserDeptService;
|
|
|
private final SysDeptRelationService sysDeptRelationService;
|
|
|
|
|
|
+ private final HttpServletRequest request;
|
|
|
+
|
|
|
+ private final SaTokenAuthorizeConfig saTokenAuthorizeConfig;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public R<Boolean> add(AddDto addDto) {
|
|
|
- SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, addDto).create(Long.parseLong(SaTokenUtils.getId().toString()));
|
|
|
+ public R<Long> register(AddDto addDto) {
|
|
|
+ long longId = Long.parseLong(SaTokenUtils.getId().toString());
|
|
|
+ //校验
|
|
|
+ long count = count(new LambdaQueryWrapper<SysWorkUser>()
|
|
|
+ .eq(SysWorkUser::getAccount, addDto.getAccount())
|
|
|
+ .eq(SysWorkUser::getSysUserId, longId)
|
|
|
+ );
|
|
|
+ if (count > 0) {
|
|
|
+ return R.fail("账号已存在");
|
|
|
+ }
|
|
|
//新增业务用户
|
|
|
+ SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, addDto)
|
|
|
+ .create(Long.parseLong(SaTokenUtils.getId().toString()))
|
|
|
+ .setSysUserId(longId)
|
|
|
+ .setPassword(SecureUtil.md5(addDto.getPassword()));
|
|
|
save(sysWorkUser);
|
|
|
List<Long> roleIds = addDto.getRoleIds();
|
|
|
if (CollUtil.isNotEmpty(roleIds)) {
|
|
@@ -75,13 +94,18 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
|
|
|
//保存用户部门 绑定信息
|
|
|
sysUserDeptService.saveBatch(sysUserDeptList);
|
|
|
}
|
|
|
- return R.ok(Boolean.TRUE);
|
|
|
+ return R.ok(sysWorkUser.getId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public R<Boolean> update(UpdateDto updateDto) {
|
|
|
- SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, updateDto).update(Long.parseLong(SaTokenUtils.getId().toString()));
|
|
|
+ //更新用户信息
|
|
|
+ SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, updateDto)
|
|
|
+ .update(Long.parseLong(SaTokenUtils.getId().toString()))
|
|
|
+ .setPassword(StringUtils.isNotEmpty(updateDto.getPassword()) ? SecureUtil.md5(updateDto.getPassword()) : null);
|
|
|
+ updateById(sysWorkUser);
|
|
|
+ //更新角色信息
|
|
|
List<Long> roleIds = updateDto.getRoleIds();
|
|
|
if (CollUtil.isNotEmpty(roleIds)) {
|
|
|
List<SysUserRole> surList = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
|
|
@@ -95,11 +119,8 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
|
|
|
//保存用户角色绑定信息
|
|
|
sysUserRoleService.saveBatch(sysUserRoleList);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
- //更新用户信息
|
|
|
- updateById(sysWorkUser);
|
|
|
+ //更新部门信息
|
|
|
List<Long> deptIds = updateDto.getDeptIds();
|
|
|
if (CollUtil.isNotEmpty(deptIds)) {
|
|
|
List<SysUserDept> sysUserDeptList = sysUserDeptService.list(Wrappers.<SysUserDept>lambdaQuery()
|
|
@@ -117,6 +138,7 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
|
|
|
|
|
|
@Override
|
|
|
public R<PageBean<SysWorkUserVo>> page(PageDto dto) {
|
|
|
+ long longId = Long.parseLong(SaTokenUtils.getId().toString());
|
|
|
Long deptId = dto.getDeptId();
|
|
|
List<SysDeptRelation> deptRelations = sysDeptRelationService.list(Wrappers.<SysDeptRelation>lambdaQuery()
|
|
|
.eq(SysDeptRelation::getAncestor, deptId));
|
|
@@ -130,15 +152,96 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
|
|
|
if (CollUtil.isNotEmpty(sysUserDeptList)) {
|
|
|
userIds = sysUserDeptList.stream().map(SysUserDept::getWorkUserId).collect(Collectors.toList());
|
|
|
}
|
|
|
- IPage<SysWorkUser> page = page(toIPage(dto.getPage()), Wrappers.<SysWorkUser>lambdaQuery()
|
|
|
+ LambdaQueryWrapper<SysWorkUser> lambdaQueryWrapper = Wrappers.<SysWorkUser>lambdaQuery()
|
|
|
.eq(SysWorkUser::getSysId, dto.getSysId())
|
|
|
.eq(StrUtil.isNotBlank(dto.getAccount()), SysWorkUser::getAccount, dto.getAccount())
|
|
|
.eq(StrUtil.isNotBlank(dto.getEmail()), SysWorkUser::getEmail, dto.getEmail())
|
|
|
.eq(ObjectUtil.isNotEmpty(dto.getStatus()), SysWorkUser::getStatus, dto.getStatus())
|
|
|
- .in(CollUtil.isNotEmpty(userIds), SysWorkUser::getId, userIds)
|
|
|
- );
|
|
|
+ .in(CollUtil.isNotEmpty(userIds), SysWorkUser::getId, userIds);
|
|
|
+ //判断数据查询权限
|
|
|
+ RedisCache.getDataAuth(longId, lambdaQueryWrapper, SysWorkUser::getSysUserId);
|
|
|
+ IPage<SysWorkUser> page = page(toIPage(dto.getPage()), lambdaQueryWrapper);
|
|
|
return R.ok(toPageBean(SysWorkUserVo.class, page));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R<String> login(LoginDto loginDto) {
|
|
|
+ long longId = Long.parseLong(SaTokenUtils.getId().toString());
|
|
|
+ //手机短信登录
|
|
|
+ if (!StringUtils.isEmpty(loginDto.getCode())) {
|
|
|
+
|
|
|
+ }
|
|
|
+ //账号、邮箱、手机、密码登录
|
|
|
+ LambdaQueryWrapper<SysWorkUser> lambdaQueryWrapper = new LambdaQueryWrapper<SysWorkUser>()
|
|
|
+ .and(sysWorkUserLambdaQueryWrapper -> sysWorkUserLambdaQueryWrapper
|
|
|
+ .eq(SysWorkUser::getAccount, loginDto.getLoginName())
|
|
|
+ .or()
|
|
|
+ .eq(SysWorkUser::getEmail, loginDto.getLoginName())
|
|
|
+ .or()
|
|
|
+ .eq(SysWorkUser::getPhone, loginDto.getLoginName()))
|
|
|
+ .eq(SysWorkUser::getPassword, SecureUtil.md5(loginDto.getPassword()))
|
|
|
+ .eq(SysWorkUser::getSysUserId, longId);
|
|
|
+ SysWorkUser sysWorkUser = getOne(lambdaQueryWrapper);
|
|
|
+ if (sysWorkUser == null) {
|
|
|
+ return R.fail("账号或密码错误");
|
|
|
+ }
|
|
|
+ if (!sysWorkUser.getStatus()) {
|
|
|
+ return R.fail("账号已被封禁");
|
|
|
+ }
|
|
|
+ //生成token
|
|
|
+ StpUtil.login(sysWorkUser.getId());
|
|
|
+ //更新登录信息
|
|
|
+ SysWorkUser workUser = new SysWorkUser()
|
|
|
+ .setId(sysWorkUser.getId())
|
|
|
+ .setLastLoginId(loginDto.getLoginName())
|
|
|
+ .setLastLoginTime(LocalDateTime.now())
|
|
|
+ .setLoginNum(sysWorkUser.getLoginNum() + 1);
|
|
|
+ updateById(workUser);
|
|
|
+ //缓存权限相关到redis
|
|
|
+ RedisCache.workCache(sysWorkUser.getId());
|
|
|
+ return R.ok(StpUtil.getTokenValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R logout() {
|
|
|
+ StpUtil.logout(SaTokenUtils.getId());
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> authByLogin() {
|
|
|
+ String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
|
|
|
+ if (!Emptys.check(satoken)) {
|
|
|
+ return R.ok(false);
|
|
|
+ }
|
|
|
+ Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
|
|
|
+ if (loginIdByToken == null) {
|
|
|
+ return R.ok(false);
|
|
|
+ }
|
|
|
+ return R.ok(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> authByInterface(AuthByInterface authByInterface) {
|
|
|
+ //登录鉴权
|
|
|
+ Boolean data = authByLogin().getData();
|
|
|
+ if (!data) {
|
|
|
+ return R.ok(false);
|
|
|
+ }
|
|
|
+ //接口鉴权
|
|
|
+ List<String> menuInterfaceUri = RedisCache.getMenuInterfaceUri(Long.parseLong(SaTokenUtils.getId().toString()), authByInterface.getSystemId());
|
|
|
+ if (!menuInterfaceUri.contains(authByInterface.getUri())) {
|
|
|
+ return R.ok(false);
|
|
|
+ }
|
|
|
+ return R.ok(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> authByData(AuthByInterface authByInterface) {
|
|
|
+ long longId = Long.parseLong(SaTokenUtils.getId().toString());
|
|
|
+ boolean dataAuth = RedisCache.getDataAuth(longId, authByInterface.getSystemId(), authByInterface.getUri());
|
|
|
+ return R.ok(dataAuth);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|