diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java new file mode 100755 index 00000000..49d53664 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java @@ -0,0 +1,102 @@ + +package com.anjiplus.template.gaea.business.modules.accessuser.controller; + +import com.anji.plus.gaea.annotation.Permission; +import com.anji.plus.gaea.bean.ResponseBean; +import com.anji.plus.gaea.curd.controller.GaeaBaseController; +import com.anji.plus.gaea.curd.service.GaeaBaseService; +import com.anji.plus.gaea.holder.UserContentHolder; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser; +import com.anjiplus.template.gaea.business.modules.accessuser.service.AccessUserService; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.param.AccessUserParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import io.swagger.annotations.Api; + +import java.util.Map; + +/** +* @desc 用户管理 controller +* @author 木子李·De +* @date 2019-02-17 08:50:11.902 +**/ +@RestController +@Api(tags = "用户管理管理") +@RequestMapping("/accessUser") +@Permission(code = "userManage", name = "用户管理") +public class AccessUserController extends GaeaBaseController { + + @Autowired + private AccessUserService accessUserService; + + @Override + public GaeaBaseService getService() { + return accessUserService; + } + + @Override + public AccessUser getEntity() { + return new AccessUser(); + } + + @Override + public AccessUserDto getDTO() { + return new AccessUserDto(); + } + + + /** + * 获取用户的角色树 + * @return + */ + @Permission( code = "grantRole", name = "分配角色") + @GetMapping("/roleTree/{loginName}") + public ResponseBean getRoleTree(@PathVariable("loginName")String loginName){ + String operator = UserContentHolder.getContext().getUsername(); + Map map = accessUserService.getRoleTree(loginName, operator); + return responseSuccessWithData(map); + } + + /** + * 保存用户的角色树 + * @return + */ + @Permission( code = "grantRole", name = "分配角色") + @PostMapping("/saveRoleTree") + public ResponseBean saveRoleTree(@RequestBody AccessUserDto dto){ + Boolean data = accessUserService.saveRoleTree(dto); + return responseSuccessWithData(data); + } + + + /** + * 重置密码 + * @param dto + * @return + */ + @Permission( code = "resetPassword", name = "重置密码") + @PostMapping({"/resetPassword"}) + public ResponseBean resetPassword(@RequestBody @Validated GaeaUserDto dto) { + Boolean data = accessUserService.resetPassword(dto); + return responseSuccessWithData(data); + } + + /** + * 简单实现登录 + * @param dto + * @return + */ + @PostMapping({"/login"}) + public ResponseBean login(@RequestBody @Validated GaeaUserDto dto) { + return responseSuccessWithData(accessUserService.login(dto)); + } + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/dao/entity/AccessUser.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/dao/entity/AccessUser.java new file mode 100755 index 00000000..26e706a4 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/dao/entity/AccessUser.java @@ -0,0 +1,48 @@ + +package com.anjiplus.template.gaea.business.modules.accessuser.dao.entity; + +import lombok.Data; +import com.anji.plus.gaea.curd.entity.GaeaBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import javax.validation.constraints.*; +import java.util.Date; +/** +* @description 用户管理 entity +* @author 木子李·De +* @date 2019-02-17 08:50:11.902 +**/ +@TableName(value="access_user") +@Data +public class AccessUser extends GaeaBaseEntity { + + /**  登录名 */ + private String loginName; + + /** 密码 */ + private String password; + + /** 真实用户 */ + private String realName; + + /** 手机号码 */ + private String phone; + + /** 用户邮箱 */ + private String email; + + /** 备注 */ + private String remark; + + /** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */ + private Integer enableFlag; + + /** 0--未删除 1--已删除 DIC_NAME=DEL_FLAG */ + private Integer deleteFlag; + + /** 最后一次登录IP */ + private String lastLoginIp; + + /** 最后一次登陆时间 */ + private Date lastLoginTime; + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/AccessUserService.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/AccessUserService.java new file mode 100755 index 00000000..18dd2dfb --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/AccessUserService.java @@ -0,0 +1,44 @@ + +package com.anjiplus.template.gaea.business.modules.accessuser.service; + +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.param.AccessUserParam; +import com.anji.plus.gaea.curd.service.GaeaBaseService; + +import java.util.Map; + +/** +* @desc AccessUser 用户管理服务接口 +* @author 木子李·De +* @date 2019-02-17 08:50:11.902 +**/ +public interface AccessUserService extends GaeaBaseService { + + /** 获取用户的角色树 + * @param loginName 被操作的对象 + * @param operator 当前登录者 + * @return + */ + Map getRoleTree(String loginName, String operator); + + + /** 保存用户的角色树 + * @param accessUserDto + * @return + */ + Boolean saveRoleTree(AccessUserDto accessUserDto); + + /** 重置密码 + * @param gaeaUserDto + * @return + */ + Boolean resetPassword(GaeaUserDto gaeaUserDto); + + /** 用户登录 + * @param gaeaUserDto + * @return + */ + Map login(GaeaUserDto gaeaUserDto); +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/impl/AccessUserServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/impl/AccessUserServiceImpl.java new file mode 100755 index 00000000..fe531bbf --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/impl/AccessUserServiceImpl.java @@ -0,0 +1,158 @@ + +package com.anjiplus.template.gaea.business.modules.accessuser.service.impl; + +import com.anji.plus.gaea.bean.TreeNode; +import com.anji.plus.gaea.cache.CacheHelper; +import com.anji.plus.gaea.exception.BusinessExceptionBuilder; +import com.anji.plus.gaea.utils.GaeaBeanUtils; +import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; +import com.anji.plus.gaea.utils.GaeaUtils; +import com.anji.plus.gaea.utils.JwtBean; +import com.anjiplus.template.gaea.business.code.ResponseCode; +import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleMapper; +import com.anjiplus.template.gaea.business.modules.accessrole.dao.entity.AccessRole; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.AccessUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.controller.dto.GaeaUserDto; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.AccessUserRoleMapper; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUser; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.entity.AccessUserRole; +import com.anjiplus.template.gaea.business.modules.accessuser.service.AccessUserService; +import com.anjiplus.template.gaea.business.modules.accessuser.dao.AccessUserMapper; +import com.anjiplus.template.gaea.business.util.MD5Util; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** +* @desc AccessUser 用户管理服务实现 +* @author 木子李·De +* @date 2019-02-17 08:50:11.902 +**/ +@Service +public class AccessUserServiceImpl implements AccessUserService { + + @Autowired + private AccessRoleMapper accessRoleMapper; + + @Autowired + private AccessUserMapper accessUserMapper; + + @Autowired + private AccessUserRoleMapper accessUserRoleMapper; + + @Override + public GaeaBaseMapper getMapper() { + return accessUserMapper; + } + + @Autowired + private JwtBean jwtBean; + + @Autowired + private CacheHelper cacheHelper; + + @Override + public Map getRoleTree(String loginName, String operator) { + Map result = new HashMap(); + List treeData = new ArrayList<>(); + List checkedKeys = new ArrayList(); + + // 角色树 + LambdaQueryWrapper roleQuery = Wrappers.lambdaQuery(); + roleQuery.select(AccessRole::getRoleCode, AccessRole::getRoleName); + // 按operator去筛选role 后面再加where + List roleList = accessRoleMapper.selectList(roleQuery); + if(roleList == null || roleList.isEmpty()){ + result.put("treeData", treeData); + result.put("checkedKeys", checkedKeys); + return result; + } + treeData = roleList.stream().map(role -> { + TreeNode treeNode = new TreeNode(); + treeNode.setId(role.getRoleCode()); + treeNode.setLabel(role.getRoleName()); + return treeNode; + }).collect(Collectors.toList()); + + // 该用户已保存的角色 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.select(AccessUserRole::getRoleCode) + .eq(AccessUserRole::getLoginName, loginName); + checkedKeys = accessUserRoleMapper.selectObjs(queryWrapper); + + result.put("treeData", treeData); + result.put("checkedKeys", checkedKeys); + return result; + } + + @Override + public Boolean saveRoleTree(AccessUserDto accessUserDto) { + // 校验 + String loginName = accessUserDto.getLoginName(); + List roleCodeList = accessUserDto.getRoleCodeList(); + if(StringUtils.isBlank(loginName)){ + throw BusinessExceptionBuilder.build(ResponseCode.Not_Empty, loginName); + } + if(roleCodeList == null || roleCodeList.isEmpty()){ + throw BusinessExceptionBuilder.build(ResponseCode.Not_Empty, roleCodeList); + } + + // 先清除该用户已保存的角色 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AccessUserRole::getLoginName, loginName); + accessUserRoleMapper.delete(wrapper); + + // 保存勾选的角色 + roleCodeList.stream().forEach(roleCode -> { + AccessUserRole accessUserRole = new AccessUserRole(); + accessUserRole.setLoginName(loginName); + accessUserRole.setRoleCode(roleCode); + accessUserRoleMapper.insert(accessUserRole); + }); + return true; + } + + @Override + public Boolean resetPassword(GaeaUserDto gaeaUserDto) { + return false; + } + + @Override + public Map login(GaeaUserDto gaeaUserDto) { + + String loginName = gaeaUserDto.getLoginName(); + String password = gaeaUserDto.getPassword(); + //1.判断用户是否存在 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AccessUser::getLoginName, loginName); + AccessUser accessUser = accessUserMapper.selectOne(wrapper); + if (null == accessUser || !accessUser.getPassword().equals(MD5Util.encrypt(password))) { + throw BusinessExceptionBuilder.build(ResponseCode.LOGIN_ERROR); + } + + Map map = Maps.newHashMap(); + + //将登录信息缓存,默认一小时 + if (cacheHelper.exist(loginName)) { + map.put("token", cacheHelper.stringGet(loginName)); + map.put("loginName", loginName); + } else { + String uuid = GaeaUtils.UUID(); + String token = jwtBean.createToken(loginName, uuid); + cacheHelper.stringSetExpire(loginName, token, 3600); + map.put("token", token); + map.put("loginName", loginName); + } + + return map; + } +} \ No newline at end of file