diff --git a/common/src/main/java/com/canvas/web/base/BaseMapper.java b/common/src/main/java/com/canvas/web/base/BaseMapper.java new file mode 100644 index 0000000..950ecf3 --- /dev/null +++ b/common/src/main/java/com/canvas/web/base/BaseMapper.java @@ -0,0 +1,34 @@ +package com.canvas.web.base; + +import java.util.List; + +public interface BaseMapper { + + /** + * DTO转Entity + * @param dto / + * @return / + */ + E toEntity(D dto); + + /** + * Entity转DTO + * @param entity / + * @return / + */ + D toDto(E entity); + + /** + * DTO集合转Entity集合 + * @param dtoList / + * @return / + */ + List toEntity(List dtoList); + + /** + * Entity集合转DTO集合 + * @param entityList / + * @return / + */ + List toDto(List entityList); +} diff --git a/system/src/main/java/com/canvas/web/modules/system/domain/Org.java b/system/src/main/java/com/canvas/web/modules/system/domain/Org.java index caa4dda..cc74fc7 100644 --- a/system/src/main/java/com/canvas/web/modules/system/domain/Org.java +++ b/system/src/main/java/com/canvas/web/modules/system/domain/Org.java @@ -1,14 +1,17 @@ package com.canvas.web.modules.system.domain; import com.canvas.web.base.BaseEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import javax.persistence.*; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Objects; +import java.util.Set; @Entity @Getter @@ -22,8 +25,30 @@ public class Org extends BaseEntity implements Serializable { @ApiModelProperty(value = "ID", hidden = true) private Long id; + @JsonIgnore + @ManyToMany(mappedBy = "org") + @ApiModelProperty(value = "角色") + private Set roles; + + @NotBlank + @ApiModelProperty(value = "机构名称") private String name; + @ApiModelProperty(value = "机构排序") + private Integer orgSort; + + @ApiModelProperty(value = "上级机构") + private Long pid; + + @ApiModelProperty(value = "子节点数目", hidden = true) + private Integer subCount = 0; + + @NotNull + @ApiModelProperty(value = "是否启用") + private Boolean enabled; + + @NotBlank + @ApiModelProperty(value = "软件版本") private String version; @Override diff --git a/system/src/main/java/com/canvas/web/modules/system/domain/Role.java b/system/src/main/java/com/canvas/web/modules/system/domain/Role.java index 99438b1..8aa2df4 100644 --- a/system/src/main/java/com/canvas/web/modules/system/domain/Role.java +++ b/system/src/main/java/com/canvas/web/modules/system/domain/Role.java @@ -40,12 +40,12 @@ public class Role extends BaseEntity implements Serializable { @ApiModelProperty(value = "菜单", hidden = true) private Set menus; -// @ManyToMany -// @JoinTable(name = "sys_roles_depts", -// joinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "role_id")}, -// inverseJoinColumns = {@JoinColumn(name = "dept_id",referencedColumnName = "dept_id")}) -// @ApiModelProperty(value = "部门", hidden = true) -// private Set depts; + @ManyToMany + @JoinTable(name = "sys_roles_org", + joinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "id")}, + inverseJoinColumns = {@JoinColumn(name = "org_id",referencedColumnName = "id")}) + @ApiModelProperty(value = "部门", hidden = true) + private Set org; @NotBlank @ApiModelProperty(value = "名称", hidden = true) diff --git a/system/src/main/java/com/canvas/web/modules/system/domain/User.java b/system/src/main/java/com/canvas/web/modules/system/domain/User.java index ab72224..976ddc6 100644 --- a/system/src/main/java/com/canvas/web/modules/system/domain/User.java +++ b/system/src/main/java/com/canvas/web/modules/system/domain/User.java @@ -38,10 +38,10 @@ public class User extends BaseEntity implements Serializable { -// @OneToOne -// @JoinColumn(name = "dept_id") -// @ApiModelProperty(value = "用户部门") -// private Org dept; + @OneToOne + @JoinColumn(name = "id") + @ApiModelProperty(value = "用户部门") + private Org dept; @NotBlank @Column(unique = true) diff --git a/system/src/main/java/com/canvas/web/modules/system/repository/UserRepository.java b/system/src/main/java/com/canvas/web/modules/system/repository/UserRepository.java index 5fd2c03..6d32134 100644 --- a/system/src/main/java/com/canvas/web/modules/system/repository/UserRepository.java +++ b/system/src/main/java/com/canvas/web/modules/system/repository/UserRepository.java @@ -3,6 +3,81 @@ package com.canvas.web.modules.system.repository; import com.canvas.web.modules.system.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import java.util.Date; +import java.util.List; +import java.util.Set; public interface UserRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 根据用户名查询 + * @param username 用户名 + * @return / + */ + User findByUsername(String username); + + /** + * 根据手机号查询 + * @param phone 手机号 + * @return / + */ + User findByPhone(String phone); + + @Modifying + @Query(value = "update sys_user set password = ?2 , pwd_reset_time = ?3 where username = ?1",nativeQuery = true) + void updatePass(String username, String pass, Date lastPasswordResetTime); + + + /** + * 根据角色查询用户 + * @param roleId / + * @return / + */ + @Query(value = "SELECT u.* FROM sys_user u, sys_users_roles r WHERE" + + " u.user_id = r.user_id AND r.role_id = ?1", nativeQuery = true) + List findByRoleId(Long roleId); + + /** + * 根据角色中的部门查询 + * @param id / + * @return / + */ + @Query(value = "SELECT u.* FROM sys_user u, sys_users_roles r, sys_roles_depts d WHERE " + + "u.user_id = r.user_id AND r.role_id = d.role_id AND r.role_id = ?1 group by u.user_id", nativeQuery = true) + List findByDeptRoleId(Long id); + + /** + * 根据菜单查询 + * @param id 菜单ID + * @return / + */ + @Query(value = "SELECT u.* FROM sys_user u, sys_users_roles ur, sys_roles_menus rm WHERE\n" + + "u.user_id = ur.user_id AND ur.role_id = rm.role_id AND rm.menu_id = ?1 group by u.user_id", nativeQuery = true) + List findByMenuId(Long id); + + /** + * 根据Id删除 + * @param ids / + */ + void deleteAllByIdIn(Set ids); + + /** + * 根据部门查询 + * @param deptIds / + * @return / + */ + @Query(value = "SELECT count(1) FROM sys_user u WHERE u.dept_id IN ?1", nativeQuery = true) + int countByDepts(Set deptIds); + + /** + * 根据角色查询 + * @param ids / + * @return / + */ + @Query(value = "SELECT count(1) FROM sys_user u, sys_users_roles r WHERE " + + "u.user_id = r.user_id AND r.role_id in ?1", nativeQuery = true) + int countByRoles(Set ids); } diff --git a/system/src/main/java/com/canvas/web/modules/system/service/dto/OrgDto.java b/system/src/main/java/com/canvas/web/modules/system/service/dto/OrgDto.java new file mode 100644 index 0000000..d640993 --- /dev/null +++ b/system/src/main/java/com/canvas/web/modules/system/service/dto/OrgDto.java @@ -0,0 +1,49 @@ +package com.canvas.web.modules.system.service.dto; + +import com.canvas.web.base.BaseDTO; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +@Getter +@Setter +public class OrgDto extends BaseDTO implements Serializable { + + private Long id; + + private String name; + + private Boolean enabled; + + private Integer orgSort; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + private Long pid; + + private Integer subCount; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + OrgDto orgDto = (OrgDto) o; + return Objects.equals(id, orgDto.id) && + Objects.equals(name, orgDto.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + +} diff --git a/system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java b/system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java index 408ecf4..35fd0a6 100644 --- a/system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java +++ b/system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java @@ -1,8 +1,13 @@ package com.canvas.web.modules.system.service.impl; +import com.canvas.web.config.FileProperties; +import com.canvas.web.modules.security.service.UserCacheClean; +import com.canvas.web.modules.system.repository.UserRepository; import com.canvas.web.modules.system.service.UserService; import com.canvas.web.modules.system.service.dto.UserDto; import com.canvas.web.modules.system.service.dto.UserQueryCriteria; +import com.canvas.web.modules.system.service.mapstruct.UserMapper; +import com.canvas.web.utils.RedisUtils; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheConfig; import org.springframework.data.domain.Pageable; @@ -19,6 +24,15 @@ import java.util.Set; @RequiredArgsConstructor @CacheConfig(cacheNames = "user") public class UserServiceImpl implements UserService{ + + + private final UserRepository userRepository; + private final UserMapper userMapper; + private final FileProperties properties; + private final RedisUtils redisUtils; + private final UserCacheClean userCacheClean; + + @Override public UserDto findById(long id) { return null; diff --git a/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/MenuMapper.java b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/MenuMapper.java new file mode 100644 index 0000000..2cdfd82 --- /dev/null +++ b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/MenuMapper.java @@ -0,0 +1,11 @@ +package com.canvas.web.modules.system.service.mapstruct; + +import com.canvas.web.base.BaseMapper; +import com.canvas.web.modules.system.domain.Menu; +import com.canvas.web.modules.system.service.dto.MenuDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface MenuMapper extends BaseMapper { +} diff --git a/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/OrgMapper.java b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/OrgMapper.java new file mode 100644 index 0000000..7ce66a1 --- /dev/null +++ b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/OrgMapper.java @@ -0,0 +1,11 @@ +package com.canvas.web.modules.system.service.mapstruct; + +import com.canvas.web.base.BaseMapper; +import com.canvas.web.modules.system.domain.Org; +import com.canvas.web.modules.system.service.dto.OrgDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface OrgMapper extends BaseMapper { +} diff --git a/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/RoleMapper.java b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/RoleMapper.java new file mode 100644 index 0000000..3f2fcaf --- /dev/null +++ b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/RoleMapper.java @@ -0,0 +1,9 @@ +package com.canvas.web.modules.system.service.mapstruct; + + +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring", uses = {MenuMapper.class, OrgMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface RoleMapper { +} diff --git a/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/UserMapper.java b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/UserMapper.java new file mode 100644 index 0000000..104be57 --- /dev/null +++ b/system/src/main/java/com/canvas/web/modules/system/service/mapstruct/UserMapper.java @@ -0,0 +1,12 @@ +package com.canvas.web.modules.system.service.mapstruct; + + +import com.canvas.web.base.BaseMapper; +import com.canvas.web.modules.system.domain.User; +import com.canvas.web.modules.system.service.dto.UserDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",uses = {RoleMapper.class, OrgMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface UserMapper extends BaseMapper { +} diff --git a/system/src/main/java/com/canvas/web/modules/utils/HttpServletUtil.java b/system/src/main/java/com/canvas/web/modules/utils/HttpServletUtil.java index 9320e80..cd9acee 100644 --- a/system/src/main/java/com/canvas/web/modules/utils/HttpServletUtil.java +++ b/system/src/main/java/com/canvas/web/modules/utils/HttpServletUtil.java @@ -1,7 +1,7 @@ package com.canvas.web.modules.utils; -import org.springframework.util.StringUtils; +import com.canvas.web.utils.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;