diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..761596a1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM registry.cn-hangzhou.aliyuncs.com/axzo-k8s/jdk1.8-fc:v1 +COPY tyr-server/target/tyr.jar ./tyr.jar +ENTRYPOINT [{ENTRYPOINT}] diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index e3169709..b6d3ff30 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -35,15 +35,15 @@ public interface SaasBasicDictApi { ApiResult> getBasicDictNodeList(@RequestBody @Validated BasicDictQueryReq req); /** - * 获取字典树,需要单测树时才传type + * 获取字典树,需要单侧树时才传type * * @param type * @return */ @PostMapping("api/dict/node-tree") - ApiResult getBasicDictNodeTree(@RequestBody - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") - DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree( + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + DictTypeFiledEnum type); /** * 获取字典节点详情 @@ -83,4 +83,5 @@ public interface SaasBasicDictApi { @GetMapping("api/dict/get") ApiResult get(@RequestParam Long id); + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 1a5221c8..5ebc745e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam; /** * 权限集 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGoup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGoup}") public interface SaasPermissionGroupApi { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java index 8152f66c..09c48e37 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java @@ -5,7 +5,7 @@ import org.springframework.cloud.openfeign.FeignClient; /** * 权限集作用范围 TODO */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGroup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGroup}") public interface SaasPermissionGroupScopeApi { diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 62332481..51314ede 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import org.springframework.cloud.openfeign.FeignClient; @@ -10,11 +11,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; /** * 角色 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface SaasRoleApi { /** @@ -39,10 +41,20 @@ public interface SaasRoleApi { ApiResult> query(@RequestBody QuerySaasRoleReq req); /** - * 根据身份id 身份类型查询权限列表 + * 根据身份id身份类型查询权限列表(批量) + * @param identityType 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 * @return */ @GetMapping("/api/saasRole/queryByIdentityIdType") - ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); + ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType,@RequestParam(required = true) Long workspaceId,@RequestParam(required = true) Long ouId); + + /** + * 根据身份id身份类型查询权限列表(批量) + * @return + */ + @GetMapping("/api/saasRole/queryBatchByIdentityIdType") + ApiResult>> queryBatchByIdentityIdType(@RequestBody List req); + + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java similarity index 88% rename from tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index ba7c016e..174cb817 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -12,8 +12,8 @@ import org.springframework.web.bind.annotation.RequestParam; /** * 角色分组 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRoleGroup}") -public interface SaasRoleGoupApi { +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasRoleGroup}") +public interface SaasRoleGroupApi { /** * 保存/更新 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java index 17aaa9fc..dc255fb6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -4,6 +4,8 @@ import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * @author: chenwenjian * @date: 2023/9/6 15:46 @@ -17,9 +19,11 @@ public class BasicDictNodeReq { /** * 类型 */ + @NotNull(message = "type不能为空") @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; + @NotNull(message = "code不能为空") private String code; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 5d559efd..f4a56deb 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -3,7 +3,12 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; /** * @author: chenwenjian @@ -13,20 +18,25 @@ import lombok.Data; * @version: 1.0 */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class BasicDictQueryReq { + private List ids; + private Long parentId; /** * workspace */ - @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") +// @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") private DictWorkSpaceTypeEnum workspaceType; /** * type */ - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") +// @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java index a5a6f1a5..9197b020 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java @@ -16,6 +16,8 @@ public class BasicDictTreeResp { private Long id; + private Long parentId; + /** * 字典名称 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java new file mode 100644 index 00000000..e5f04f63 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.*; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@EqualsAndHashCode +public class QueryByIdentityIdTypeReq { + + Long identityId; + + /** + * 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 + */ + Integer identityType; + + Long workspaceId; + + Long ouId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 25d393a3..2f44645a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -38,7 +38,7 @@ public class SaasRoleGroupVO { /** * 角色 */ - private List role; + private List roleIds; /** * 排序 diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 65236a4f..4ed2013e 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -70,6 +70,13 @@ cn.axzo.basics basics-common - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java new file mode 100644 index 00000000..8d57707b --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.server.config.exception; + + +import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.autoconfigure.web.exception.RespErrorCodeMappingProperties; +import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionApiResultHandler; +import cn.axzo.framework.domain.web.code.IRespCode; +import cn.axzo.framework.domain.web.code.RespCode; +import org.springframework.stereotype.Component; + +/** + * 目前整体框架中 ServiceException 有多种,而常用的 {@link cn.axzo.basics.common.util.AssertUtil} 抛出的是 {@link cn.axzo.basics.common.exception.ServiceException} + * 与框架默认的异常处理器不兼容,所以新增加一个处理该异常的处理器 + * + * @author wangli + * @since 2023/9/11 11:39 + */ +@Component +public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHandler { + public ServiceExceptionResultHandler(RespErrorCodeMappingProperties properties) { + super(properties); + } + + @Override + protected IRespCode decode(ServiceException error, IRespCode fallbackCode) { + return new RespCode(String.valueOf(error.getErrorCode()), error.getMessage()); + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index a24ae21a..c8715a08 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -16,7 +16,7 @@ import java.util.List; /** * @author: chenwenjian * @date: 2023/9/8 14:32 - * @description: + * @description: 字典controller * @modifiedBy: * @version: 1.0 */ @@ -33,32 +33,33 @@ public class SaasBasicDictController implements SaasBasicDictApi { } @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { return saasBasicDictService.getBasicDictNodeTree(type); } @Override public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return null; + return saasBasicDictService.getBasicDictNode(req); } @Override public ApiResult create(BasicDictCreateReq req) { - return null; + return saasBasicDictService.create(req); } @Override public ApiResult update(BasicDictUpdateReq req) { - return null; + return saasBasicDictService.update(req); } @Override public ApiResult updateStatus(BasicDictUpdateStatusReq req) { - return null; + return saasBasicDictService.updateStauts(req); } @Override public ApiResult get(Long id) { return saasBasicDictService.getById(id); } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 6a6c8ee7..e030d5d9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.role; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleApi; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.service.RoleService; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; /** * 权限 @@ -43,7 +45,13 @@ public class SaasRoleController implements SaasRoleApi { } @Override - public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType) { - return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType)); + public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { + return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType,workspaceId,ouId)); } + + @Override + public ApiResult>> queryBatchByIdentityIdType(List req) { + return ApiResult.ok(roleService.queryBatchByIdentityIdType(req)); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java new file mode 100644 index 00000000..e25896c0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.controller.role; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.SaasRoleGroupApi; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequiredArgsConstructor +public class SaasRoleGroupController implements SaasRoleGroupApi { + private final SaasRoleGroupService saasRoleGroupService; + + @Override + public ApiResult saveOrUpdate(SaasRoleGroupVO req) { + return null; + } + + @Override + public ApiListResult getList(QuerySaasRoleGroupReq req) { + return ApiListResult.ok(saasRoleGroupService.getList(req)); + } + + @Override + public ApiResult delete(Long id) { + return null; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index f28f79a5..5f71b90c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,9 +1,18 @@ package cn.axzo.tyr.server.repository; +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Objects; /** * @author: chenwenjian @@ -15,4 +24,26 @@ import org.springframework.stereotype.Service; @Service public class SaasBasicDictDao extends ServiceImpl { + public List getBasicDictNodeList(BasicDictQueryReq req) { + LambdaQueryChainWrapper queryChainWrapper = lambdaQuery(); + if (Objects.nonNull(req)) { + queryChainWrapper + .in(!CollectionUtils.isEmpty(req.getIds()), SaasBasicDict::getId, req.getIds()) + .eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "") + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "") + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) + .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()); + } + List basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); + return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + } + + public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) { + SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .one(); + return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java index 2b21746f..3866cbf8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,10 +12,13 @@ import java.util.List; @Repository public class SaasRoleUserRelationDao extends ServiceImpl { - public List queryByIdentityIdType(Long identityId, Integer identityType) { + public List query(Long identityId, Integer identityType, Long workspaceId, Long ouId) { return this.lambdaQuery() .eq(SaasRoleUserRelation::getIdentityId,identityId) .eq(SaasRoleUserRelation::getIdentityType,identityType) + .eq(SaasRoleUserRelation::getWorkspaceId,workspaceId) + .eq(SaasRoleUserRelation::getOuId,ouId) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index a6da59e3..b8df6dd9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -1,10 +1,11 @@ package cn.axzo.tyr.server.service; -import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import java.util.List; +import java.util.Map; /** * 角色 @@ -16,7 +17,9 @@ import java.util.List; public interface RoleService { - List queryByIdentityIdType(Long identityId, Integer identityType); + List queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId); List query(QuerySaasRoleReq req); + + Map> queryBatchByIdentityIdType(List req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 492b8bf2..397658b6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -2,15 +2,12 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import java.util.List; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; - /** * @author: chenwenjian * @date: 2023/9/7 17:54 @@ -21,6 +18,15 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); - ApiResult getBasicDictNodeTree(DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type); ApiResult getById(Long id); + + ApiResult getBasicDictNode(BasicDictNodeReq req); + + ApiResult create(BasicDictCreateReq req); + + ApiResult update(BasicDictUpdateReq req); + + ApiResult updateStauts(BasicDictUpdateStatusReq req); + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java new file mode 100644 index 00000000..d50e03d2 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -0,0 +1,10 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; + +import java.util.List; + +public interface SaasRoleGroupService { + List getList(QuerySaasRoleGroupReq req); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 11f67059..4d0b0caa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -71,7 +71,7 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult update(ProductUpdateReq req) { ProductModule productModule = productModuleDao.getById(req.getId()); - BeanMapper.copyBeanIgnoreNull(req, ()-> productModule); + BeanMapper.copyBeanIgnoreNull(req, () -> productModule); productModuleDao.updateById(productModule); return ApiResult.ok(BeanMapper.copyBeanIgnoreNull(productModule, ProductVO.class)); } @@ -80,8 +80,10 @@ public class ProductServiceImpl implements ProductService { public ApiResult delete(Long id) { ProductModule productModule = productModuleDao.getById(id); AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在"); - productModule.setIsDelete(id); - productModuleDao.updateById(productModule); + productModuleDao.lambdaUpdate() + .eq(ProductModule::getId, id) + .set(ProductModule::getIsDelete, id) + .update(); return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 6c884c60..40a33130 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; @@ -13,7 +13,6 @@ import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.RoleService; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -36,118 +35,131 @@ import java.util.stream.Collectors; @Service public class RoleServiceImpl implements RoleService { - @Autowired - SaasRoleUserRelationDao roleUserRelationDao; - @Autowired - SaasRoleDao saasRoleDao; - @Autowired - PermissionGroupService permissionGroupService; - @Autowired - SaasPgroupRoleRelationDao permissionGroupRelation; - @Autowired - SaasRoleGroupDao saasRoleGroupDao; - @Autowired - SaasRoleGroupRelationDao roleGroupRelationDao; + @Autowired + SaasRoleUserRelationDao roleUserRelationDao; + @Autowired + SaasRoleDao saasRoleDao; + @Autowired + PermissionGroupService permissionGroupService; + @Autowired + SaasPgroupRoleRelationDao permissionGroupRelation; + @Autowired + SaasRoleGroupDao saasRoleGroupDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; - @Override - public List queryByIdentityIdType(Long identityId, Integer identityType) { - // 查询人关联的角色id - List roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(roleIds)) { - return new ArrayList<>(); - } - return getByIds(roleIds); - } + @Override + public List queryByIdentityIdType(Long identityId, Integer identityType, Long workspaceId, Long ouId) { + // 查询人关联的角色id + List roleIds = roleUserRelationDao.query(identityId, identityType, workspaceId, ouId).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + return getByIds(roleIds); + } - /** - * 根据id查询权限详情包含权限组合权限集(底层基础方法) - * @return - */ - public List getByIds(List roleIds) { - if (CollectionUtils.isEmpty(roleIds)) { - return new ArrayList<>(); - } - // 查询角色信息 - List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); - // 查询权限集关联关系 - List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); - // 查询权限集 - Map> pgrouRelationMap = null; - Map> pGroupMap = null; - if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { - // 转map - pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); - // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() - .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) - .build()) - // 转map - .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); - } - Map> finalPgrouRelationMap = pgrouRelationMap; - Map> finalPGroupMap = pGroupMap; - return roles.stream().map(role -> { - // 获取对应的权限集 - List pGroup = new ArrayList<>(); - if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { - pGroup = finalPgrouRelationMap.get(role.getId()) - .stream() - .map(SaasPgroupRoleRelation::getGroupId) - .map(finalPGroupMap::get) - .filter(Objects::nonNull) - .flatMap(List::stream) - .collect(Collectors.toList()); - } - SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class); - saasRoleVO.setPermissionGroup(pGroup); - return saasRoleVO; - }).collect(Collectors.toList()); - } + /** + * 根据id查询权限详情包含权限组合权限集(底层基础方法) + * + * @return + */ + public List getByIds(List roleIds) { + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + // 查询角色信息 + List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); + // 查询权限集关联关系 + List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); + // 查询权限集 + Map> pgrouRelationMap = null; + Map> pGroupMap = null; + if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { + // 转map + pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); + // 查询权限集 + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) + .build()) + // 转map + .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); + } + Map> finalPgrouRelationMap = pgrouRelationMap; + Map> finalPGroupMap = pGroupMap; + return roles.stream().map(role -> { + // 获取对应的权限集 + List pGroup = new ArrayList<>(); + if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { + pGroup = finalPgrouRelationMap.get(role.getId()) + .stream() + .map(SaasPgroupRoleRelation::getGroupId) + .map(finalPGroupMap::get) + .filter(Objects::nonNull) + .flatMap(List::stream) + .collect(Collectors.toList()); + } + SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class); + saasRoleVO.setPermissionGroup(pGroup); + return saasRoleVO; + }).collect(Collectors.toList()); + } - /** - * 通用查询 - * - * @param req - * @return - */ - @Override - public List query(QuerySaasRoleReq req) { - // 根据工作台类型和单位类型查询角色分组 - List roleGroup = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { - roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() - .ids(req.getSassRoleGroupIds()) - .workspaceTypeCode(req.getWorkspaceTypeCode()) - .ouTypeCode(req.getOuTypeCode()) - .build()); - if (CollectionUtils.isEmpty(roleGroup)) { + /** + * 通用查询 + * + * @param req + * @return + */ + @Override + public List query(QuerySaasRoleReq req) { + // 根据工作台类型和单位类型查询角色分组 + List roleGroup = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() + .ids(req.getSassRoleGroupIds()) + .workspaceTypeCode(req.getWorkspaceTypeCode()) + .ouTypeCode(req.getOuTypeCode()) + .build()); + if (CollectionUtils.isEmpty(roleGroup)) { + return new ArrayList<>(); + } + } + // 根据角色分组查询角色分组关联表 + List groupRelation = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(roleGroup)) { + groupRelation = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .list(); + if (CollectionUtils.isEmpty(groupRelation)) { return new ArrayList<>(); } - } - // 根据角色分组查询角色分组关联表 - List groupRelation = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(roleGroup)) { - groupRelation = roleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) - .list(); - } - // 查询角色 - List list = saasRoleDao.lambdaQuery() - .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) - .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) - .eq(StringUtils.isNotBlank(req.getRoleType()),SaasRole::getRoleType,req.getRoleType()) - .orderByDesc(BaseEntity::getId) - .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); - } + } + // 查询角色 + List list = saasRoleDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) + .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) + .orderByDesc(BaseEntity::getId) + .list(); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + } - /** - * 根据角色id查询权限集关联关系 - */ - public List queryPermissionGroupRelation(List roleIds) { - return permissionGroupRelation.lambdaQuery() - .in(SaasPgroupRoleRelation::getRoleId, roleIds) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - } + @Override + public Map> queryBatchByIdentityIdType(List req) { + HashMap> result = new HashMap<>(); + req.forEach(e -> { + result.put(e,queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())); + }); + return result; + } + + /** + * 根据角色id查询权限集关联关系 + */ + public List queryPermissionGroupRelation(List roleIds) { + return permissionGroupRelation.lambdaQuery() + .in(SaasPgroupRoleRelation::getRoleId, roleIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 124b7374..9644a1bf 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -3,16 +3,21 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.service.SaasBasicDictService; +import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * @author: chenwenjian @@ -30,16 +35,90 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { + return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req)); + } + /** + * 获取节点树 + * @param type + * @return + */ + @Override + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { + // 获取所有节点 + List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); + // 单侧树 + if (Objects.nonNull(type)){ + List unilateralTreeNodeList = basicDictNodeList.stream() + .filter(b -> b.getType().equals(type.getValue()) || b.getType().equals(DictTypeFiledEnum.WORKSPACE.getValue())) + .collect(Collectors.toList()); + return ApiResult.ok(constructDictTree(unilateralTreeNodeList)); + } + return ApiResult.ok(constructDictTree(basicDictNodeList)); + } + + /** + * 根据节点列表构建节点树 + * @param nodeList 节点列表 + * @return 节点树 + */ + public List constructDictTree(List nodeList) { + if (CollectionUtil.isEmpty(nodeList)) { + return null; + } + + ArrayList root = new ArrayList<>(); + LinkedHashMap map = new LinkedHashMap<>(); + + nodeList.forEach(node -> { + BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class); + map.put(node.getId(), treeNode); + if (node.getParentId() == 0){ + root.add(treeNode); + } + }); + map.values().forEach(treeNode -> { + BasicDictTreeResp parent = map.get(treeNode.getParentId()); + if (Objects.nonNull(parent)){ + if (Objects.isNull(parent.getChildren())){ + parent.setChildren(new ArrayList<>()); + } + parent.getChildren().add(treeNode); + } + }); + + return root; + } + + /** + * 获取节点详情 + * + * @param req type和code + * @return 一个字典节点 + */ + @Override + public ApiResult getBasicDictNode(BasicDictNodeReq req) { + return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); + } + + @Override + public ApiResult create(BasicDictCreateReq req) { return null; } @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + public ApiResult update(BasicDictUpdateReq req) { return null; } + + @Override + public ApiResult updateStauts(BasicDictUpdateStatusReq req) { + return null; + } + @Override public ApiResult getById(Long id) { return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java new file mode 100644 index 00000000..7a76af4f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { + private final SaasRoleGroupDao saasRoleGroupDao; + private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; + + @Override + public List getList(QuerySaasRoleGroupReq req) { + List groups = saasRoleGroupDao.query(req); + if (CollectionUtils.isEmpty(groups)) { + return new ArrayList<>(); + } + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); + List results = groups.stream().map(e -> { + SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); + if (StringUtils.isNotBlank(e.getOuTypeCode())) { + target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); + } + target.setRoleIds(groupRoleMap.get(e.getId())); + return target; + }).collect(Collectors.toList()); + + return results; + } +} diff --git a/tyr-server/src/main/resources/bootstrap.yml b/tyr-server/src/main/resources/bootstrap.yml index c1fd1a5a..80e20e00 100644 --- a/tyr-server/src/main/resources/bootstrap.yml +++ b/tyr-server/src/main/resources/bootstrap.yml @@ -8,7 +8,7 @@ spring: file-extension: yaml namespace: ${NACOS_NAMESPACE_ID} profiles: - active: ${NACOS_PROFILES_ACTIVE:local} + active: ${NACOS_PROFILES_ACTIVE:dev} include: swagger main: allow-bean-definition-overriding: true