Merge branch 'master' into feature/REQ-2845
# Conflicts: # tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java # tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java
This commit is contained in:
commit
0e416ff5ab
@ -15,7 +15,7 @@ public enum AttrPermissionEnum {
|
|||||||
|
|
||||||
DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"),
|
DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"),
|
||||||
|
|
||||||
UNIT_ONLY(5, "仅本单位数据"),
|
UNIT_ONLY(5, "仅本单位数据(包含班组)"),
|
||||||
|
|
||||||
UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"),
|
UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"),
|
||||||
|
|
||||||
@ -24,6 +24,8 @@ public enum AttrPermissionEnum {
|
|||||||
UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"),
|
UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"),
|
||||||
WORKSPACE(9, "本项目数据"),
|
WORKSPACE(9, "本项目数据"),
|
||||||
EQUAL_TO_ROW(10, "同行级数据权限"),
|
EQUAL_TO_ROW(10, "同行级数据权限"),
|
||||||
|
|
||||||
|
UNIT_ONLY_EXCLUDE_TEAM(11, "仅本单位数据(不包含班组)"),
|
||||||
;
|
;
|
||||||
private final Integer value;
|
private final Integer value;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
@ -34,6 +36,6 @@ public enum AttrPermissionEnum {
|
|||||||
|
|
||||||
public static List<AttrPermissionEnum> listAttrPermissionForNotWorkspace() {
|
public static List<AttrPermissionEnum> listAttrPermissionForNotWorkspace() {
|
||||||
return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE,
|
return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE,
|
||||||
DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, EQUAL_TO_ROW);
|
DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, UNIT_ONLY_EXCLUDE_TEAM, EQUAL_TO_ROW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,16 @@
|
|||||||
|
package cn.axzo.tyr.client.common.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/9/5
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum PageElementAppTypeEnum {
|
||||||
|
|
||||||
|
PC,H5,APP;
|
||||||
|
}
|
||||||
@ -14,6 +14,7 @@ public enum PageElementTypeEnum {
|
|||||||
|
|
||||||
PAGE("PAGE", "页面"),
|
PAGE("PAGE", "页面"),
|
||||||
COMPONENT("COMPONENT", "组件"),
|
COMPONENT("COMPONENT", "组件"),
|
||||||
|
APP_ENTRY("APP_ENTRY", "应用入口"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@ -93,6 +93,26 @@ public enum PermissionRelationOperateLogSceneEnum {
|
|||||||
*/
|
*/
|
||||||
OMS_API_SYNC("OMS_API_SYNC", "oms后台同步API"),
|
OMS_API_SYNC("OMS_API_SYNC", "oms后台同步API"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* oms新增、编辑元素类型
|
||||||
|
*/
|
||||||
|
OMS_UPSERT_PAGE_ELEMENT_CATEGORY("OMS_UPSERT_PAGE_ELEMENT_CATEGORY", "oms新增、编辑元素类型"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* oms删除元素类型
|
||||||
|
*/
|
||||||
|
OMS_DELETE_PAGE_ELEMENT_CATEGORY("OMS_DELETE_PAGE_ELEMENT_CATEGORY", "oms删除元素类型"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* oms新增、编辑页面元素
|
||||||
|
*/
|
||||||
|
OMS_UPSERT_PAGE_ELEMENT("OMS_UPSERT_PAGE_ELEMENT", "oms新增、编辑页面元素"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* oms删除页面元素
|
||||||
|
*/
|
||||||
|
OMS_DELETE_PAGE_ELEMENT("OMS_DELETE_PAGE_ELEMENT", "oms删除页面元素"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
@EnumValue
|
@EnumValue
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -56,4 +57,17 @@ public enum RoleTypeEnum {
|
|||||||
return Objects.equals(this.value, value);
|
return Objects.equals(this.value, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<String> listAdmin() {
|
||||||
|
return Arrays.stream(values())
|
||||||
|
.filter(RoleTypeEnum::isAdminRole)
|
||||||
|
.map(RoleTypeEnum::getValue)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> listNormal() {
|
||||||
|
return Arrays.stream(values())
|
||||||
|
.filter(e -> !e.isAdmin)
|
||||||
|
.map(RoleTypeEnum::getValue)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,14 +18,16 @@ public enum RowPermissionEnum {
|
|||||||
|
|
||||||
DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"),
|
DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"),
|
||||||
|
|
||||||
UNIT_ONLY(5, "仅本单位数据"),
|
UNIT_ONLY(5, "仅本单位数据(包含班组)"),
|
||||||
|
|
||||||
UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"),
|
UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"),
|
||||||
|
|
||||||
UNIT_COOPERATE_SUBORDINATE(7, "本单位及下级协同(直属+合作)单位数据"),
|
UNIT_COOPERATE_SUBORDINATE(7, "本单位及下级协同(直属+合作)单位数据"),
|
||||||
|
|
||||||
UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"),
|
UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"),
|
||||||
WORKSPACE(9, "本项目数据"),
|
WORKSPACE(9, "本项目部数据"),
|
||||||
|
|
||||||
|
UNIT_ONLY_EXCLUDE_TEAM(10, "仅本单位数据(不包含班组)"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
@ -41,7 +43,7 @@ public enum RowPermissionEnum {
|
|||||||
|
|
||||||
public static List<RowPermissionEnum> listRowPermissionForNotWorkspace() {
|
public static List<RowPermissionEnum> listRowPermissionForNotWorkspace() {
|
||||||
return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE,
|
return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE,
|
||||||
DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY);
|
DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, UNIT_ONLY_EXCLUDE_TEAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,11 +2,7 @@ package cn.axzo.tyr.client.feign;
|
|||||||
|
|
||||||
import cn.axzo.basics.common.page.PageResult;
|
import cn.axzo.basics.common.page.PageResult;
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
import cn.axzo.tyr.client.common.annotation.RepeatedSubmit;
|
import cn.axzo.tyr.client.model.req.*;
|
||||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.DeleteDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||||
import cn.axzo.tyr.client.model.res.EnumRes;
|
import cn.axzo.tyr.client.model.res.EnumRes;
|
||||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||||
@ -28,7 +24,6 @@ public interface DataObjectApi {
|
|||||||
@PostMapping("/api/dataObject/create")
|
@PostMapping("/api/dataObject/create")
|
||||||
ApiResult<Long> createDataObject(@RequestBody @Valid CreateDataObjectReq req);
|
ApiResult<Long> createDataObject(@RequestBody @Valid CreateDataObjectReq req);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改数据对象
|
* 修改数据对象
|
||||||
* @param req
|
* @param req
|
||||||
@ -63,4 +58,12 @@ public interface DataObjectApi {
|
|||||||
*/
|
*/
|
||||||
@GetMapping("/api/dataObject/get")
|
@GetMapping("/api/dataObject/get")
|
||||||
ApiResult<DataObjectRes> getDataObject(@RequestParam Long dataObjectId);
|
ApiResult<DataObjectRes> getDataObject(@RequestParam Long dataObjectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据租户范围、数据对象code查询数据对象
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/dataObject/query")
|
||||||
|
ApiResult<DataObjectRes> queryDataObject(@RequestBody @Valid QueryDataObjectReq req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,8 +3,7 @@ package cn.axzo.tyr.client.feign;
|
|||||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
import cn.axzo.tyr.client.model.req.*;
|
import cn.axzo.tyr.client.model.req.*;
|
||||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
import cn.axzo.tyr.client.model.res.*;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
@ -36,9 +35,44 @@ public interface PageElementApi {
|
|||||||
|
|
||||||
/** 分页查询页面资源 **/
|
/** 分页查询页面资源 **/
|
||||||
@PostMapping("/api/pageElement/page")
|
@PostMapping("/api/pageElement/page")
|
||||||
ApiPageResult<PageElementResp> page(@RequestBody @Valid PageQueryElementReq req);
|
ApiPageResult<PageElementCategoryAndElementResp> page(@RequestBody @Valid PageQueryElementReq req);
|
||||||
|
|
||||||
/** 根据用户传入的页面code,查询用户有权限的元素code **/
|
/** 根据用户传入的页面code,查询用户有权限的元素code **/
|
||||||
@PostMapping("/api/pageElement/getUserHasPermissionPageElement")
|
@PostMapping("/api/pageElement/getUserHasPermissionPageElement")
|
||||||
ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(@RequestBody @Valid GetUserHasPermissionPageElementReq req);
|
ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(@RequestBody @Valid GetUserHasPermissionPageElementReq req);
|
||||||
|
|
||||||
|
@PostMapping("/api/pageElement/list")
|
||||||
|
ApiResult<List<PageElementResp>> list(PageElementReq param);
|
||||||
|
|
||||||
|
/** 查询页面元素类型(按端分组) **/
|
||||||
|
@PostMapping("/api/pageElementCategory/list")
|
||||||
|
ApiResult<List<ListPageElementCategoryResp>> listPageElementCategory();
|
||||||
|
|
||||||
|
/** 新增、编辑页面元素类型 **/
|
||||||
|
@PostMapping("/api/pageElementCategory/saveOrUpdate")
|
||||||
|
ApiResult<Long> saveOrUpdateCategory(@RequestBody @Valid SaveOrUpdatePageElementCategoryReq req);
|
||||||
|
|
||||||
|
/** 删除页面元素类型 **/
|
||||||
|
@PostMapping("/api/pageElementCategory/delete")
|
||||||
|
ApiResult<Void> deleteCategory(@RequestBody @Valid DeletePageElementCategoryReq req);
|
||||||
|
|
||||||
|
/** 分页查询页面资源V2 **/
|
||||||
|
@PostMapping("/api/pageElement/pageV2")
|
||||||
|
ApiPageResult<PageElementResp> pageV2(@RequestBody @Valid PageQueryElementV2Req req);
|
||||||
|
|
||||||
|
/** 新增、编辑页面元素 **/
|
||||||
|
@PostMapping("/api/pageElement/saveOrUpdate")
|
||||||
|
ApiResult<Void> saveOrUpdate(@RequestBody @Valid SaveOrUpdatePageElementReq req);
|
||||||
|
|
||||||
|
/** 删除页面元素 **/
|
||||||
|
@PostMapping("/api/pageElement/delete")
|
||||||
|
ApiResult<Void> delete(@RequestBody @Valid DeletePageElementReq req);
|
||||||
|
|
||||||
|
/** 查询页面元素关联关系 **/
|
||||||
|
@PostMapping("/api/pageElement/getFeatureResourceRelations")
|
||||||
|
ApiResult<List<PageElementRelationFeatureResourceResp>> getFeatureResourceRelations(@RequestBody @Valid IdReq req);
|
||||||
|
|
||||||
|
/** 查询页面元素关联关系 **/
|
||||||
|
@PostMapping("/api/pageElement/importData")
|
||||||
|
ApiResult<Void> importData(@RequestBody @Valid List<PageElementImportDataReq> req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package cn.axzo.tyr.client.feign;
|
package cn.axzo.tyr.client.feign;
|
||||||
|
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
|
import cn.axzo.tyr.client.model.req.ListPermissionFeatureReq;
|
||||||
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
||||||
@ -8,6 +9,7 @@ import cn.axzo.tyr.client.model.req.PermissionCheckReq;
|
|||||||
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
||||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||||
|
import cn.axzo.tyr.client.model.res.ListPermissionFeatureResp;
|
||||||
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
||||||
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
||||||
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
||||||
@ -67,4 +69,12 @@ public interface PermissionQueryApi {
|
|||||||
*/
|
*/
|
||||||
@PostMapping(value = "/api/v3/permission/featureResource/tree")
|
@PostMapping(value = "/api/v3/permission/featureResource/tree")
|
||||||
ApiResult<List<TreePermissionResp>> treePermission(@RequestBody @Validated TreePermissionReq req);
|
ApiResult<List<TreePermissionResp>> treePermission(@RequestBody @Validated TreePermissionReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询有权限的菜单树节点
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping(value = "/api/v3/permission/featureResource/list")
|
||||||
|
ApiResult<List<ListPermissionFeatureResp>> listPermission(@RequestBody @Validated ListPermissionFeatureReq req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public class AttributePermissionBO {
|
|||||||
private Integer sort; // 序号
|
private Integer sort; // 序号
|
||||||
private String attrName; //字段名
|
private String attrName; //字段名
|
||||||
private String attrCode; // 字段code
|
private String attrCode; // 字段code
|
||||||
private Integer visibilityScope; // 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目数据 10:同行级数据权限
|
private Integer visibilityScope; // 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据(包含班组) 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目部数据 10:同行级数据权限 11:仅本单位数据(不包含班组)
|
||||||
private Integer isUnmaskable; // 是否可脱敏 1-不可操作脱敏 2-可操作脱敏
|
private Integer isUnmaskable; // 是否可脱敏 1-不可操作脱敏 2-可操作脱敏
|
||||||
private Integer isEditable; // 是否可编辑 1-不可编辑 2-可编辑
|
private Integer isEditable; // 是否可编辑 1-不可编辑 2-可编辑
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,10 +39,19 @@ public class DataObjectRuleBO {
|
|||||||
* 岗位/角色id
|
* 岗位/角色id
|
||||||
*/
|
*/
|
||||||
private List<Long> relationId;
|
private List<Long> relationId;
|
||||||
|
/**
|
||||||
|
* 岗位code
|
||||||
|
*/
|
||||||
|
private List<String> relationCodes;
|
||||||
|
/**
|
||||||
|
* 岗位列表
|
||||||
|
*/
|
||||||
|
private List<JobInfo> jobs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 行级数据权限(单选) 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
|
* 行级数据权限(单选) 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据
|
||||||
* 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目数据
|
* 5:仅本单位数据(包含班组) 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据
|
||||||
|
* 9:本项目部数据 10:仅本单位数据(不包含班组)
|
||||||
*/
|
*/
|
||||||
private Integer rowPermission;
|
private Integer rowPermission;
|
||||||
/**
|
/**
|
||||||
@ -50,4 +59,12 @@ public class DataObjectRuleBO {
|
|||||||
*/
|
*/
|
||||||
private List<AttributePermissionBO> attributePermissionBOList;
|
private List<AttributePermissionBO> attributePermissionBOList;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public static class JobInfo{
|
||||||
|
private Long id;
|
||||||
|
private String code;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import lombok.Getter;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限点授权策略类型
|
* 权限点授权策略类型
|
||||||
@ -39,4 +40,8 @@ public enum DelegatedType {
|
|||||||
public boolean sameCode(Integer code) {
|
public boolean sameCode(Integer code) {
|
||||||
return this.code.equals(code);
|
return this.code.equals(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean notAuth(Integer delegatedType) {
|
||||||
|
return Objects.equals(NO_NEED.getCode(), delegatedType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class DeletePageElementCategoryReq {
|
||||||
|
|
||||||
|
@NotNull(message = "ID不能为空")
|
||||||
|
@Min(value = 1, message = "ID有误")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 操作人personId **/
|
||||||
|
private Long operatorId;
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class DeletePageElementReq {
|
||||||
|
|
||||||
|
@NotNull(message = "ID不能为空")
|
||||||
|
@Min(value = 1, message = "ID有误")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 操作人personId **/
|
||||||
|
private Long operatorId;
|
||||||
|
}
|
||||||
@ -39,6 +39,11 @@ public class FeatureResourceTreeSaveReq extends BaseFeatureResourceDO {
|
|||||||
*/
|
*/
|
||||||
private Long workspaceType;
|
private Long workspaceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用范围(租户类型):1:企业工作台 2;项目工作台 以英文逗号分隔
|
||||||
|
*/
|
||||||
|
private String workspaceTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最低版本序列,主要支持版本灰度策略
|
* 最低版本序列,主要支持版本灰度策略
|
||||||
*/
|
*/
|
||||||
@ -47,9 +52,6 @@ public class FeatureResourceTreeSaveReq extends BaseFeatureResourceDO {
|
|||||||
/** 页面组件对象 **/
|
/** 页面组件对象 **/
|
||||||
private List<FeatureComponentSaveReq> componentSaveReqList;
|
private List<FeatureComponentSaveReq> componentSaveReqList;
|
||||||
|
|
||||||
/** 页面及组件权限对象 **/
|
|
||||||
private List<RolePermissionSaveReq> permissions;
|
|
||||||
|
|
||||||
@NotNull(message = "操作人ID不能为空")
|
@NotNull(message = "操作人ID不能为空")
|
||||||
private Long operatorId;
|
private Long operatorId;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,25 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class IdReq {
|
||||||
|
|
||||||
|
@NotNull(message = "ID不能为空")
|
||||||
|
@Min(value = 1, message = "ID有误")
|
||||||
|
private Long id;
|
||||||
|
}
|
||||||
@ -64,6 +64,22 @@ public class IdentityAuthReq {
|
|||||||
/** 是否使用缓存 - 默认true **/
|
/** 是否使用缓存 - 默认true **/
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
private boolean useCache = true;
|
private boolean useCache = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer versionMax;
|
||||||
|
|
||||||
public IdentityAuthRes toEmpty() {
|
public IdentityAuthRes toEmpty() {
|
||||||
IdentityAuthRes result = new IdentityAuthRes();
|
IdentityAuthRes result = new IdentityAuthRes();
|
||||||
result.setIdentity(this.getIdentityId());
|
result.setIdentity(this.getIdentityId());
|
||||||
@ -112,6 +128,9 @@ public class IdentityAuthReq {
|
|||||||
/** 基于角色标签查询逻辑不再用该参数 **/
|
/** 基于角色标签查询逻辑不再用该参数 **/
|
||||||
private Integer workspaceJoinType;
|
private Integer workspaceJoinType;
|
||||||
|
|
||||||
|
public String buildOuWorkspaceKey() {
|
||||||
|
return this.getOuId() + "_" + this.getWorkspaceId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||||
|
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||||
|
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||||
|
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ListPermissionFeatureReq {
|
||||||
|
|
||||||
|
@NotNull(message = "人员ID不能为空")
|
||||||
|
private Long personId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端
|
||||||
|
*/
|
||||||
|
@NotNull(message = "端不能为空")
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目与企业
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "项目与企业对不能为空")
|
||||||
|
private List<WorkspaceOUPair> workspaceOUPairs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单节点的uniCode
|
||||||
|
* 查询指定组件code集合里有权限的组件code
|
||||||
|
*/
|
||||||
|
private Set<String> uniCodes;
|
||||||
|
|
||||||
|
private Boolean needPageElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单跟页面元素绑定的类型
|
||||||
|
*/
|
||||||
|
private Set<PageElementFeatureResourceRelationTypeEnum> pageElementTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer versionMax;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询菜单树节点类型
|
||||||
|
*/
|
||||||
|
private List<FeatureResourceType> featureResourceTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询父组件code下的有权限的uniCode
|
||||||
|
*/
|
||||||
|
private String parentUniCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示或者隐藏,如果父节点是隐藏,则子节点也会隐藏
|
||||||
|
*/
|
||||||
|
private FeatureResourceStatus status;
|
||||||
|
}
|
||||||
@ -1,11 +1,13 @@
|
|||||||
package cn.axzo.tyr.client.model.req;
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@ -72,4 +74,19 @@ public class ListRoleReq {
|
|||||||
* 是否需要角色对应的用户信息
|
* 是否需要角色对应的用户信息
|
||||||
*/
|
*/
|
||||||
private Boolean needRoleUser;
|
private Boolean needRoleUser;
|
||||||
|
/**
|
||||||
|
* 是否需要预设角色,因为预设角色的workspaceId和ouId为-1
|
||||||
|
*/
|
||||||
|
private Boolean needPresetRole;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* workspaceId和ouId配对查询
|
||||||
|
* 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##))
|
||||||
|
*/
|
||||||
|
private List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限码
|
||||||
|
*/
|
||||||
|
private Set<String> roleCodes;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,5 +25,4 @@ public class ListSaasRoleGroupParam {
|
|||||||
|
|
||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private Boolean needRole;
|
private Boolean needRole;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package cn.axzo.tyr.client.model.req;
|
|||||||
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||||
import cn.axzo.foundation.page.IPageReq;
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
|
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -30,11 +31,14 @@ public class PageElementFeatureResourceRelationReq implements IPageReq {
|
|||||||
List<String> sort;
|
List<String> sort;
|
||||||
|
|
||||||
@CriteriaField(field = "featureResourceUniCode", operator = Operator.IN)
|
@CriteriaField(field = "featureResourceUniCode", operator = Operator.IN)
|
||||||
private List<String> featureResourceUniCodes;
|
private Set<String> featureResourceUniCodes;
|
||||||
|
|
||||||
@CriteriaField(field = "pageElementCode", operator = Operator.IN)
|
@CriteriaField(field = "pageElementCode", operator = Operator.IN)
|
||||||
private Set<String> pageElementCodes;
|
private Set<String> pageElementCodes;
|
||||||
|
|
||||||
@CriteriaField(field = "terminal", operator = Operator.EQ)
|
@CriteriaField(field = "terminal", operator = Operator.EQ)
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Set<PageElementFeatureResourceRelationTypeEnum> types;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,86 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementImportDataReq implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "端信息不能为空")
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素分类
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素分类不能为空")
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素组编码
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素组编码不能为空")
|
||||||
|
private String groupCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素编码
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素编码不能为空")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素名称
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素名称不能为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素类型(PAGE:页面,COMPONENT:页面里的组件)
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素类型不能为空")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素资源类型:APP、H5、PC
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "元素资源类型不能为空")
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* H5的appId
|
||||||
|
*/
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素支持的最低版本号
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 路由地址
|
||||||
|
*/
|
||||||
|
private String linkUrl;
|
||||||
|
|
||||||
|
/** ios跳转地址 **/
|
||||||
|
private String iosRouterUrl;
|
||||||
|
|
||||||
|
/** android跳转地址 **/
|
||||||
|
private String androidRouterUrl;
|
||||||
|
|
||||||
|
private Long operatorId;
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||||
|
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||||
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementReq implements IPageReq {
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
Integer page;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
Integer pageSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序:使用示例,createTime__DESC
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
List<String> sort;
|
||||||
|
|
||||||
|
@CriteriaField(field = "code", operator = Operator.IN)
|
||||||
|
private Set<String> codes;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needFeatureSource;
|
||||||
|
}
|
||||||
@ -3,12 +3,14 @@ package cn.axzo.tyr.client.model.req;
|
|||||||
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||||
import cn.axzo.foundation.page.IPageReq;
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
|
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@ -30,4 +32,22 @@ public class PageProductFeatureRelationReq implements IPageReq {
|
|||||||
|
|
||||||
@CriteriaField(field = "id", operator = Operator.IN)
|
@CriteriaField(field = "id", operator = Operator.IN)
|
||||||
private List<Long> ids;
|
private List<Long> ids;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产品 ID
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "productModuleId", operator = Operator.IN)
|
||||||
|
private Set<Long> productModuleIds;
|
||||||
|
|
||||||
|
@CriteriaField(field = "type", operator = Operator.EQ)
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询菜单树节点类型
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "featureType", operator = Operator.IN)
|
||||||
|
private List<Integer> featureResourceTypes;
|
||||||
|
|
||||||
|
@CriteriaField(field = "terminal", operator = Operator.EQ)
|
||||||
|
private String terminal;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.framework.domain.page.PageResp;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/6/14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageQueryElementV2Req {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务编码
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端
|
||||||
|
*/
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素组件类型
|
||||||
|
*/
|
||||||
|
private List<String> elementTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素名称
|
||||||
|
*/
|
||||||
|
private String pageElementCodeOrName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素名称
|
||||||
|
*/
|
||||||
|
private String pageElementGroupCodeOrName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页码
|
||||||
|
*/
|
||||||
|
@Builder.Default
|
||||||
|
private Long page = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每页大小
|
||||||
|
*/
|
||||||
|
@Builder.Default
|
||||||
|
private Long pageSize = 20L;
|
||||||
|
|
||||||
|
public PageResp toEmpty() {
|
||||||
|
return PageResp.builder()
|
||||||
|
.page(this.getPage())
|
||||||
|
.pageSize(this.getPageSize())
|
||||||
|
.list(Collections.emptyList())
|
||||||
|
.totalCount(0L)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,7 +4,7 @@ import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
|||||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||||
import cn.axzo.foundation.page.IPageReq;
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
import cn.axzo.foundation.page.PageResp;
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -70,6 +70,21 @@ public class PageSaasFeatureResourceReq implements IPageReq {
|
|||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private Set<String> paths;
|
private Set<String> paths;
|
||||||
|
|
||||||
|
@CriteriaField(field = "terminal", operator = Operator.IN)
|
||||||
|
private Set<String> terminals;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needPageElement;
|
||||||
|
|
||||||
|
@CriteriaField(field = "status", operator = Operator.EQ)
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单跟页面元素绑定的类型
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Set<PageElementFeatureResourceRelationTypeEnum> pageElementTypes;
|
||||||
|
|
||||||
public PageResp toEmpty() {
|
public PageResp toEmpty() {
|
||||||
return PageResp.builder()
|
return PageResp.builder()
|
||||||
.current(this.getPage())
|
.current(this.getPage())
|
||||||
|
|||||||
@ -29,10 +29,12 @@ public class PermissionOperateLogReq implements Serializable {
|
|||||||
@NotBlank(message = "表名不能为空")
|
@NotBlank(message = "表名不能为空")
|
||||||
private String tableName;
|
private String tableName;
|
||||||
|
|
||||||
@NotNull(message = "操作人ID不能为空")
|
// @NotNull(message = "操作人ID不能为空")
|
||||||
@Min(value = 1, message = "操作人ID有误")
|
// @Min(value = 1, message = "操作人ID有误")
|
||||||
private Long operatorId;
|
private Long operatorId;
|
||||||
|
|
||||||
|
private String operatorName;
|
||||||
|
|
||||||
@NotBlank(message = "场景不能为空")
|
@NotBlank(message = "场景不能为空")
|
||||||
private String scene;
|
private String scene;
|
||||||
|
|
||||||
@ -41,4 +43,6 @@ public class PermissionOperateLogReq implements Serializable {
|
|||||||
private Object requestData;
|
private Object requestData;
|
||||||
|
|
||||||
private Object operateData;
|
private Object operateData;
|
||||||
|
|
||||||
|
private JSONObject ext;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/6/3
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class QueryDataObjectReq implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据对象code
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "数据对象code不能为空")
|
||||||
|
private String dataObjectCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户范围 1:单位租户 2:项目租户 3:政务监管平台 6:OMS
|
||||||
|
*/
|
||||||
|
private Integer tenantScope;
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaveOrUpdatePageElementCategoryReq {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 项目编码 **/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/** 项目名称 **/
|
||||||
|
@NotBlank(message = "项目名称不能为空")
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
/** 登录端 **/
|
||||||
|
@NotBlank(message = "所属端不能为空")
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
/** 操作人personId **/
|
||||||
|
private Long operatorId;
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/21
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaveOrUpdatePageElementReq {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 项目编码 **/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/** 分组ID **/
|
||||||
|
private String groupCode;
|
||||||
|
|
||||||
|
/** 页面元素类型:PAGE/COMPONENT **/
|
||||||
|
@NotBlank(message = "页面元素类型不能为空")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/** 项目编码 **/
|
||||||
|
@NotBlank(message = "项目编码不能为空")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/** 元素名称 **/
|
||||||
|
@NotBlank(message = "元素名称不能为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/** app类型(APP:原生,H5:h5页面, PC:web页面) **/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/** H5的appId **/
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
/** pc/h5路由地址 **/
|
||||||
|
private String linkUrl;
|
||||||
|
|
||||||
|
/** ios跳转地址 **/
|
||||||
|
private String iosRouterUrl;
|
||||||
|
|
||||||
|
/** android跳转地址 **/
|
||||||
|
private String androidRouterUrl;
|
||||||
|
|
||||||
|
/** 版本号 **/
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
|
/** 操作人personId **/
|
||||||
|
private Long operatorId;
|
||||||
|
}
|
||||||
@ -1,15 +1,20 @@
|
|||||||
package cn.axzo.tyr.client.model.req;
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||||
|
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||||
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@ -37,13 +42,41 @@ public class TreePermissionReq {
|
|||||||
*/
|
*/
|
||||||
private List<FeatureResourceType> featureResourceTypes;
|
private List<FeatureResourceType> featureResourceTypes;
|
||||||
|
|
||||||
/**
|
|
||||||
* 菜单节点的uniCode
|
|
||||||
*/
|
|
||||||
private String uniCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否需要返回权限码
|
* 是否需要返回权限码
|
||||||
*/
|
*/
|
||||||
private boolean needFeatureCodes;
|
private boolean needFeatureCodes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单节点的uniCode
|
||||||
|
* 查询指定组件code集合里有权限的组件code
|
||||||
|
*/
|
||||||
|
private Set<String> uniCodes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer versionMax;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询父组件code下的有权限的uniCode
|
||||||
|
*/
|
||||||
|
private String parentUniCode;
|
||||||
|
|
||||||
|
private Boolean needPageElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单跟页面元素绑定的类型
|
||||||
|
*/
|
||||||
|
private Set<PageElementFeatureResourceRelationTypeEnum> pageElementTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认会增加config配置的默认权限,不需要就传true
|
||||||
|
*/
|
||||||
|
private Boolean excludeDefaultPermission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示或者隐藏,如果父节点是隐藏,则子节点也会隐藏
|
||||||
|
*/
|
||||||
|
private FeatureResourceStatus status;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -144,6 +144,11 @@ public class FeatureResourceDTO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Long workspaceType;
|
private Long workspaceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用范围(租户类型):1:企业工作台 2;项目工作台 以英文逗号分隔
|
||||||
|
*/
|
||||||
|
private String workspaceTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最低版本序列,主要支持版本灰度策略
|
* 最低版本序列,主要支持版本灰度策略
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -56,16 +56,11 @@ public class IdentityAuthRes {
|
|||||||
public static class PermissionPoint {
|
public static class PermissionPoint {
|
||||||
private Long featureId;
|
private Long featureId;
|
||||||
|
|
||||||
private String featureCode;
|
private String featureCode;
|
||||||
|
|
||||||
// private FeatureType featureType;
|
private Integer featureType;
|
||||||
|
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
/**
|
|
||||||
* 应用范围(租户类型):1:企业工作台 2;项目工作台
|
|
||||||
*/
|
|
||||||
private Long workspaceType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package cn.axzo.tyr.client.model.res;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/20
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ListPageElementCategoryResp {
|
||||||
|
|
||||||
|
/** 端 **/
|
||||||
|
private String terminal;
|
||||||
|
/** 页面元素类型列表 **/
|
||||||
|
private List<PageElementCategoryDTO> pageElementCategories;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class PageElementCategoryDTO {
|
||||||
|
/** 主键 **/
|
||||||
|
private Long id;
|
||||||
|
/** 项目编码 **/
|
||||||
|
private String itemCode;
|
||||||
|
/** 项目名称 **/
|
||||||
|
private String itemName;
|
||||||
|
/** 端 **/
|
||||||
|
private String terminal;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package cn.axzo.tyr.client.model.res;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ListPermissionFeatureResp {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单树节点id
|
||||||
|
*/
|
||||||
|
private Long featureId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单树节点名字
|
||||||
|
*/
|
||||||
|
private String featureName;
|
||||||
|
|
||||||
|
/** 图标 **/
|
||||||
|
private String icon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单页面编码,端唯一
|
||||||
|
*/
|
||||||
|
private String uniCode;
|
||||||
|
|
||||||
|
private List<PageElementResp> saasPageElements;
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.axzo.tyr.client.model.res;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementCategoryAndElementResp {
|
||||||
|
/** 项目编码 **/
|
||||||
|
private String itemCode;
|
||||||
|
/** 项目名称 **/
|
||||||
|
private String itemName;
|
||||||
|
/** 元素列表 **/
|
||||||
|
private List<PageElementResp> pageElements;
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
package cn.axzo.tyr.client.model.res;
|
||||||
|
|
||||||
|
import cn.axzo.basics.common.model.IBaseTree;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @date 2024/8/30
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementRelationFeatureResourceResp implements IBaseTree<PageElementRelationFeatureResourceResp, Long> {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上级资源ID
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源编码-权限码
|
||||||
|
*/
|
||||||
|
private String uniCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源名称
|
||||||
|
*/
|
||||||
|
private String featureName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源类型1-菜单 2-页面 3-应用入口 4-组件 5-root 6-分组
|
||||||
|
*/
|
||||||
|
private Integer featureType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子节点
|
||||||
|
*/
|
||||||
|
private List<PageElementRelationFeatureResourceResp> children;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否关联
|
||||||
|
*/
|
||||||
|
private Boolean hasRelation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1:路由页面
|
||||||
|
*/
|
||||||
|
private Integer relationType;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Override
|
||||||
|
public Long getNodeCode() {
|
||||||
|
return this.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Override
|
||||||
|
public Long getParentNodeCode() {
|
||||||
|
return this.getParentId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@Override
|
||||||
|
public List<PageElementRelationFeatureResourceResp> getNodeChildren() {
|
||||||
|
return this.children;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNodeChildren(List<PageElementRelationFeatureResourceResp> nodeChildren) {
|
||||||
|
this.children = nodeChildren;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,11 +1,15 @@
|
|||||||
package cn.axzo.tyr.client.model.res;
|
package cn.axzo.tyr.client.model.res;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author likunpeng
|
* @author likunpeng
|
||||||
@ -28,6 +32,11 @@ public class PageElementResp {
|
|||||||
*/
|
*/
|
||||||
private String groupCode;
|
private String groupCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素的组编码
|
||||||
|
*/
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 元素编码
|
* 元素编码
|
||||||
*/
|
*/
|
||||||
@ -48,13 +57,73 @@ public class PageElementResp {
|
|||||||
*/
|
*/
|
||||||
private String linkUrl;
|
private String linkUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否已勾选
|
* 是否已勾选
|
||||||
*/
|
*/
|
||||||
private Boolean selected;
|
private Boolean selected;
|
||||||
|
|
||||||
|
/** 业务编码 **/
|
||||||
|
private String itemCode;
|
||||||
|
/** 业务名称 **/
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
private String linkExt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 子元素(只包含一级)
|
* 子元素(只包含一级)
|
||||||
*/
|
*/
|
||||||
private List<PageElementResp> children;
|
private List<PageElementResp> children;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元素对应的菜单信息,可能会存在多个
|
||||||
|
*/
|
||||||
|
private List<SaasFeatureResourceResp> featureResources;
|
||||||
|
|
||||||
|
/** ios挑战地址 **/
|
||||||
|
private String iosRouterUrl;
|
||||||
|
|
||||||
|
/** android挑战地址 **/
|
||||||
|
private String androidRouterUrl;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class LinkExt {
|
||||||
|
private String system;
|
||||||
|
|
||||||
|
private String routerUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<LinkExt> resolveLinkExt() {
|
||||||
|
return Optional.ofNullable(this.getLinkExt())
|
||||||
|
.map(e -> JSONArray.parseArray(this.getLinkExt(), LinkExt.class))
|
||||||
|
.orElseGet(Lists::newArrayList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String resolveIosRouterUrl() {
|
||||||
|
return resolveLinkExt().stream()
|
||||||
|
.filter(e -> Objects.equals(e.getSystem(), "ios"))
|
||||||
|
.findFirst()
|
||||||
|
.map(LinkExt::getRouterUrl)
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String resolveAndroidRouterUrl() {
|
||||||
|
return resolveLinkExt().stream()
|
||||||
|
.filter(e -> Objects.equals(e.getSystem(), "android"))
|
||||||
|
.findFirst()
|
||||||
|
.map(LinkExt::getRouterUrl)
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,13 +3,18 @@ package cn.axzo.tyr.client.model.res;
|
|||||||
import cn.axzo.tyr.client.model.base.FeatureResourceExtraDO;
|
import cn.axzo.tyr.client.model.base.FeatureResourceExtraDO;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@ -143,4 +148,15 @@ public class SaasFeatureResourceResp {
|
|||||||
* 唯一编码,用于pre环境菜单同步
|
* 唯一编码,用于pre环境菜单同步
|
||||||
*/
|
*/
|
||||||
private String uniCode;
|
private String uniCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素信息
|
||||||
|
*/
|
||||||
|
private List<PageElementResp> saasPageElements;
|
||||||
|
|
||||||
|
public Set<Long> resolvePath() {
|
||||||
|
return Optional.ofNullable(this.getPath())
|
||||||
|
.map(e -> Arrays.stream(e.split(",")).map(Long::valueOf).collect(Collectors.toSet()))
|
||||||
|
.orElseGet(Sets::newHashSet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,6 +37,11 @@ public class SimplePermissionPointResp implements IBaseTree<SimplePermissionPoin
|
|||||||
/** 上级权限点ID **/
|
/** 上级权限点ID **/
|
||||||
private Long parentId;
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型 0.模块 1.菜单 2页面 3功能
|
||||||
|
*/
|
||||||
|
private Integer featureType;
|
||||||
|
|
||||||
/** 子节点 **/
|
/** 子节点 **/
|
||||||
private List<SimplePermissionPointResp> children;
|
private List<SimplePermissionPointResp> children;
|
||||||
|
|
||||||
|
|||||||
@ -80,6 +80,8 @@ public class TreePermissionResp implements IBaseTree<TreePermissionResp, Long> {
|
|||||||
*/
|
*/
|
||||||
private Integer displayOrder;
|
private Integer displayOrder;
|
||||||
|
|
||||||
|
private List<PageElementResp> saasPageElements;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单树子节点信息
|
* 菜单树子节点信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -52,6 +52,19 @@ public class SaasRoleUserV2DTO {
|
|||||||
*/
|
*/
|
||||||
private Long workspaceId;
|
private Long workspaceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份Id
|
||||||
|
*/
|
||||||
|
private Long identityId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
|
||||||
|
*/
|
||||||
|
private Integer identityType;
|
||||||
|
|
||||||
|
public String buildOuWorkspaceKey() {
|
||||||
|
return this.getOuId() + "_" + this.getWorkspaceId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -72,6 +85,8 @@ public class SaasRoleUserV2DTO {
|
|||||||
*/
|
*/
|
||||||
private String roleType;
|
private String roleType;
|
||||||
|
|
||||||
|
private String roleCode;
|
||||||
|
|
||||||
private Long workspaceId;
|
private Long workspaceId;
|
||||||
|
|
||||||
private Long ownerOuId;
|
private Long ownerOuId;
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
|
|||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@Data
|
@Data
|
||||||
@ -27,6 +28,18 @@ public class ListRoleUserRelationParam {
|
|||||||
@CriteriaField(field = "ouId", operator = Operator.EQ)
|
@CriteriaField(field = "ouId", operator = Operator.EQ)
|
||||||
private Long ouId;
|
private Long ouId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否显示
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean isDisplay;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean enabled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
|
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
|
||||||
*/
|
*/
|
||||||
@ -94,6 +107,12 @@ public class ListRoleUserRelationParam {
|
|||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private Boolean needPermission;
|
private Boolean needPermission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限码
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Set<String> roleCodes;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -2,11 +2,13 @@ package cn.axzo.tyr.client.model.roleuser.req;
|
|||||||
|
|
||||||
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||||
import cn.axzo.foundation.page.IPageReq;
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@ -26,4 +28,13 @@ public class PageRoleUserRelationParam extends ListRoleUserRelationParam impleme
|
|||||||
*/
|
*/
|
||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
List<String> sort;
|
List<String> sort;
|
||||||
|
|
||||||
|
public PageResp toEmpty() {
|
||||||
|
return PageResp.builder()
|
||||||
|
.current(this.getPage())
|
||||||
|
.size(this.getPageSize())
|
||||||
|
.total(0)
|
||||||
|
.data(Collections.emptyList())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -138,6 +138,12 @@
|
|||||||
<artifactId>apisix-plat-api</artifactId>
|
<artifactId>apisix-plat-api</artifactId>
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
<version>2.0.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
|
||||||
|
<version>2.0.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
@ -31,6 +31,7 @@ public class TyrServerDevApplication {
|
|||||||
System.setProperty("spring.redis.host","172.16.2.23");
|
System.setProperty("spring.redis.host","172.16.2.23");
|
||||||
System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin");
|
System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin");
|
||||||
System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
|
System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
|
||||||
|
System.setProperty("spring.datasource.url", "jdbc:mysql://172.16.2.171:3306/pudge?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=true&verifyServerCertificate=false&rewriteBatchedStatements=true");
|
||||||
SpringApplication application = new SpringApplication(TyrServerDevApplication.class);
|
SpringApplication application = new SpringApplication(TyrServerDevApplication.class);
|
||||||
ApplicationContext applicationContext = application.run(args);
|
ApplicationContext applicationContext = application.run(args);
|
||||||
Environment env = applicationContext.getEnvironment();
|
Environment env = applicationContext.getEnvironment();
|
||||||
|
|||||||
@ -0,0 +1,68 @@
|
|||||||
|
package cn.axzo.tyr.server.common.util;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.dingtalk.api.DefaultDingTalkClient;
|
||||||
|
import com.dingtalk.api.DingTalkClient;
|
||||||
|
import com.dingtalk.api.request.OapiRobotSendRequest;
|
||||||
|
import com.dingtalk.api.response.OapiRobotSendResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangsiqian
|
||||||
|
* @since 2024/07/30
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class DingTalkUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息
|
||||||
|
*
|
||||||
|
* @author wangsiqian
|
||||||
|
* @date 2024-07-30
|
||||||
|
*/
|
||||||
|
public static void sendMessage(String content, String accessToken, String secret) {
|
||||||
|
Long timestamp = System.currentTimeMillis();
|
||||||
|
String sign = getSign(timestamp, secret);
|
||||||
|
if (StrUtil.isBlank(sign)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String url = StrUtil.format("https://oapi.dingtalk.com/robot/send?access_token={}&sign={}×tamp={}",
|
||||||
|
accessToken, sign, String.valueOf(timestamp));
|
||||||
|
DingTalkClient client = new DefaultDingTalkClient(url);
|
||||||
|
|
||||||
|
OapiRobotSendRequest req = new OapiRobotSendRequest();
|
||||||
|
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
|
||||||
|
text.setContent(content);
|
||||||
|
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
|
||||||
|
at.setIsAtAll(false);
|
||||||
|
req.setMsgtype("text");
|
||||||
|
req.setText(text);
|
||||||
|
req.setAt(at);
|
||||||
|
try {
|
||||||
|
OapiRobotSendResponse response = client.execute(req);
|
||||||
|
log.info("发送钉钉消息结果:{}", response);
|
||||||
|
} catch (Exception error) {
|
||||||
|
log.info("发送钉钉消息失败:{}", error.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getSign(Long timestamp, String secret) {
|
||||||
|
try {
|
||||||
|
String stringToSign = timestamp + "\n" + secret;
|
||||||
|
Mac mac = Mac.getInstance("HmacSHA256");
|
||||||
|
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
|
||||||
|
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
|
||||||
|
return URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
package cn.axzo.tyr.server.config;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventProducer;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yanglin
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RefreshScope
|
||||||
|
public class MqProducer {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventProducer<?> eventProducer;
|
||||||
|
|
||||||
|
@Value("${sendMq}")
|
||||||
|
private Boolean sendMq;
|
||||||
|
|
||||||
|
public void send(Event event){
|
||||||
|
log.info(JSON.toJSONString(event));
|
||||||
|
if(sendMq != null && !sendMq){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//生产消息
|
||||||
|
eventProducer.send(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendBatch(List<Event> events){
|
||||||
|
events.forEach(this::send);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -9,6 +9,7 @@ import cn.axzo.framework.rocketmq.RocketMQEventProducer;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.spring.annotation.ConsumeMode;
|
import org.apache.rocketmq.spring.annotation.ConsumeMode;
|
||||||
|
import org.apache.rocketmq.spring.annotation.MessageModel;
|
||||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||||
@ -67,10 +68,46 @@ public class RocketMQEventConfiguration {
|
|||||||
@Component
|
@Component
|
||||||
@RocketMQMessageListener(topic = "topic_thrones_${spring.profiles.active}",
|
@RocketMQMessageListener(topic = "topic_thrones_${spring.profiles.active}",
|
||||||
consumerGroup = "GID_topic_thrones_${spring.application.name}_${spring.profiles.active}",
|
consumerGroup = "GID_topic_thrones_${spring.application.name}_${spring.profiles.active}",
|
||||||
consumeMode = ConsumeMode.ORDERLY,
|
messageModel = MessageModel.BROADCASTING,
|
||||||
nameServer = "${rocketmq.name-server}"
|
nameServer = "${rocketmq.name-server}"
|
||||||
)
|
)
|
||||||
public static class DefaultListener extends BaseListener implements RocketMQListener<MessageExt> {
|
public static class ThronesListener extends BaseListener implements RocketMQListener<MessageExt> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(MessageExt message) {
|
||||||
|
super.onEvent(message, eventConsumer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RocketMQMessageListener(topic = "topic_tyr_${spring.profiles.active}",
|
||||||
|
consumerGroup = "GID_topic_tyr_${spring.application.name}_${spring.profiles.active}",
|
||||||
|
messageModel = MessageModel.BROADCASTING,
|
||||||
|
nameServer = "${rocketmq.name-server}"
|
||||||
|
)
|
||||||
|
public static class TyrListener extends BaseListener implements RocketMQListener<MessageExt> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(MessageExt message) {
|
||||||
|
super.onEvent(message, eventConsumer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RocketMQMessageListener(topic = "topic_apisix_plat_${spring.profiles.active}",
|
||||||
|
consumerGroup = "GID_topic_apisix_plat_${spring.application.name}_${spring.profiles.active}",
|
||||||
|
messageModel = MessageModel.BROADCASTING,
|
||||||
|
nameServer = "${rocketmq.name-server}"
|
||||||
|
)
|
||||||
|
public static class ApiSixPlatListener extends BaseListener implements RocketMQListener<MessageExt> {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private EventConsumer eventConsumer;
|
private EventConsumer eventConsumer;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -85,6 +85,7 @@ public class TyrSaasAuthController implements TyrSaasAuthApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<List<ListIdentityFromPermissionResp>> listWorkspacePermissionIdentity(WorkspacePermissionIdentityReq req) {
|
public ApiResult<List<ListIdentityFromPermissionResp>> listWorkspacePermissionIdentity(WorkspacePermissionIdentityReq req) {
|
||||||
|
|
||||||
return ApiResult.ok(tyrSaasAuthService.listWorkspacePermissionIdentity(req));
|
return ApiResult.ok(tyrSaasAuthService.listWorkspacePermissionIdentity(req));
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package cn.axzo.tyr.server.controller.data.object;
|
package cn.axzo.tyr.server.controller.data.object;
|
||||||
|
|
||||||
import cn.axzo.basics.auth.enums.WorkspaceTypeWithLegacyEnum;
|
|
||||||
import cn.axzo.basics.common.page.PageResult;
|
import cn.axzo.basics.common.page.PageResult;
|
||||||
import cn.axzo.framework.domain.ServiceException;
|
import cn.axzo.framework.domain.ServiceException;
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
@ -10,12 +9,8 @@ import cn.axzo.tyr.client.common.enums.EnumTypeEnum;
|
|||||||
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
|
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
|
||||||
import cn.axzo.tyr.client.common.enums.RowPermissionEnum;
|
import cn.axzo.tyr.client.common.enums.RowPermissionEnum;
|
||||||
import cn.axzo.tyr.client.common.enums.TenantScopeEnum;
|
import cn.axzo.tyr.client.common.enums.TenantScopeEnum;
|
||||||
import cn.axzo.tyr.client.common.enums.WorkspaceJoinType;
|
|
||||||
import cn.axzo.tyr.client.feign.DataObjectApi;
|
import cn.axzo.tyr.client.feign.DataObjectApi;
|
||||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
import cn.axzo.tyr.client.model.req.*;
|
||||||
import cn.axzo.tyr.client.model.req.DeleteDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
|
||||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||||
import cn.axzo.tyr.client.model.res.EnumRes;
|
import cn.axzo.tyr.client.model.res.EnumRes;
|
||||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||||
@ -91,4 +86,8 @@ public class DataObjectController implements DataObjectApi {
|
|||||||
return ApiResult.ok(dataObjectService.getDataObject(dataObjectId));
|
return ApiResult.ok(dataObjectService.getDataObject(dataObjectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<DataObjectRes> queryDataObject(QueryDataObjectReq req) {
|
||||||
|
return ApiResult.ok(dataObjectService.queryDataObject(req));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
|||||||
import cn.axzo.tyr.server.service.FeatureResourceSyncService;
|
import cn.axzo.tyr.server.service.FeatureResourceSyncService;
|
||||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -52,7 +53,7 @@ public class FeatureResourceController implements FeatureResourceApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<Long> saveMenu(FeatureResourceTreeSaveReq req) {
|
public ApiResult<Long> saveMenu(FeatureResourceTreeSaveReq req) {
|
||||||
log.info("save feature resource req : " + req.toString());
|
log.info("save feature resource req : " + JSON.toJSONString(req));
|
||||||
Long featureId = featureResourceService.saveOrUpdateMenu(req);
|
Long featureId = featureResourceService.saveOrUpdateMenu(req);
|
||||||
log.info("save feature resource resp : " + featureId.toString());
|
log.info("save feature resource resp : " + featureId.toString());
|
||||||
return ApiResult.ok(featureId);
|
return ApiResult.ok(featureId);
|
||||||
|
|||||||
@ -4,8 +4,8 @@ import cn.axzo.framework.domain.web.result.ApiPageResult;
|
|||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
import cn.axzo.tyr.client.feign.PageElementApi;
|
import cn.axzo.tyr.client.feign.PageElementApi;
|
||||||
import cn.axzo.tyr.client.model.req.*;
|
import cn.axzo.tyr.client.model.req.*;
|
||||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
import cn.axzo.tyr.client.model.res.*;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
import cn.axzo.tyr.server.service.SaasPageElementCategoryService;
|
||||||
import cn.axzo.tyr.server.service.SaasPageElementService;
|
import cn.axzo.tyr.server.service.SaasPageElementService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -24,6 +24,7 @@ import java.util.List;
|
|||||||
public class PageElementController implements PageElementApi {
|
public class PageElementController implements PageElementApi {
|
||||||
|
|
||||||
private final SaasPageElementService saasPageElementService;
|
private final SaasPageElementService saasPageElementService;
|
||||||
|
private final SaasPageElementCategoryService saasPageElementCategoryService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<Void> report(PageElementReportReq req) {
|
public ApiResult<Void> report(PageElementReportReq req) {
|
||||||
@ -43,7 +44,7 @@ public class PageElementController implements PageElementApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiPageResult<PageElementResp> page(PageQueryElementReq req) {
|
public ApiPageResult<PageElementCategoryAndElementResp> page(PageQueryElementReq req) {
|
||||||
return ApiPageResult.ok(saasPageElementService.page(req));
|
return ApiPageResult.ok(saasPageElementService.page(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,4 +52,53 @@ public class PageElementController implements PageElementApi {
|
|||||||
public ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq req) {
|
public ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq req) {
|
||||||
return ApiResult.ok(saasPageElementService.getUserHasPermissionPageElement(req));
|
return ApiResult.ok(saasPageElementService.getUserHasPermissionPageElement(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<List<PageElementResp>> list(PageElementReq param) {
|
||||||
|
return ApiResult.ok(saasPageElementService.list(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<List<ListPageElementCategoryResp>> listPageElementCategory() {
|
||||||
|
return ApiResult.ok(saasPageElementCategoryService.listGroupByTerminal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Long> saveOrUpdateCategory(SaveOrUpdatePageElementCategoryReq req) {
|
||||||
|
return ApiResult.ok(saasPageElementCategoryService.saveOrUpdate(req));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Void> deleteCategory(DeletePageElementCategoryReq req) {
|
||||||
|
saasPageElementCategoryService.delete(req);
|
||||||
|
return ApiResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiPageResult<PageElementResp> pageV2(PageQueryElementV2Req req) {
|
||||||
|
return ApiPageResult.ok(saasPageElementService.pageV2(req));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Void> saveOrUpdate(SaveOrUpdatePageElementReq req) {
|
||||||
|
saasPageElementService.saveOrUpdate(req);
|
||||||
|
return ApiResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Void> delete(DeletePageElementReq req) {
|
||||||
|
saasPageElementService.delete(req);
|
||||||
|
return ApiResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<List<PageElementRelationFeatureResourceResp>> getFeatureResourceRelations(IdReq req) {
|
||||||
|
return ApiResult.ok(saasPageElementService.getFeatureResourceRelations(req.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<Void> importData(List<PageElementImportDataReq> req) {
|
||||||
|
saasPageElementService.importData(req);
|
||||||
|
return ApiResult.ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.permission;
|
|||||||
|
|
||||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||||
import cn.axzo.tyr.client.feign.PermissionQueryApi;
|
import cn.axzo.tyr.client.feign.PermissionQueryApi;
|
||||||
|
import cn.axzo.tyr.client.model.req.ListPermissionFeatureReq;
|
||||||
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
||||||
@ -9,6 +10,7 @@ import cn.axzo.tyr.client.model.req.PermissionCheckReq;
|
|||||||
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
||||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||||
|
import cn.axzo.tyr.client.model.res.ListPermissionFeatureResp;
|
||||||
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
||||||
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
||||||
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
||||||
@ -62,4 +64,10 @@ public class PermissionQueryController implements PermissionQueryApi {
|
|||||||
public ApiResult<List<TreePermissionResp>> treePermission(TreePermissionReq req) {
|
public ApiResult<List<TreePermissionResp>> treePermission(TreePermissionReq req) {
|
||||||
return ApiResult.ok(permissionService.treePermission(req));
|
return ApiResult.ok(permissionService.treePermission(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<List<ListPermissionFeatureResp>> listPermission(ListPermissionFeatureReq req) {
|
||||||
|
|
||||||
|
return ApiResult.ok(permissionService.listPermission(req));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,78 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||||
|
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.event.payload.ProductPermissionCreatedPayload;
|
||||||
|
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.ProductService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存产品的权限
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheProductPermissionHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private ProductPermissionCacheService productPermissionCacheService;
|
||||||
|
@Autowired
|
||||||
|
private ProductService productService;
|
||||||
|
|
||||||
|
|
||||||
|
public void onProductPermissionUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached product permission handler rocketmq event: {}", event);
|
||||||
|
ProductPermissionCreatedPayload payload = event.normalizedData(ProductPermissionCreatedPayload.class);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(payload.getProductModuleIds())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductPermissionCacheService.RefreshProductPermissionCacheParam param = ProductPermissionCacheService.RefreshProductPermissionCacheParam.builder()
|
||||||
|
.productIds(payload.getProductModuleIds())
|
||||||
|
.build();
|
||||||
|
productPermissionCacheService.refreshCache(param);
|
||||||
|
log.info("end cached product permission handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPageElementFeatureResourceUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached product permission handler rocketmq event: {}", event);
|
||||||
|
PageElementFeatureResourceUpsertPayload payload = event.normalizedData(PageElementFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Long> productIds = productService.list(new ProductSearchListReq()).getData().stream()
|
||||||
|
.map(ProductVO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductPermissionCacheService.RefreshProductPermissionCacheParam param = ProductPermissionCacheService.RefreshProductPermissionCacheParam.builder()
|
||||||
|
.productIds(productIds)
|
||||||
|
.build();
|
||||||
|
productPermissionCacheService.refreshCache(param);
|
||||||
|
log.info("end cached product permission handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PRODUCT_PERMISSION_CREATED.getEventCode(), this::onProductPermissionUpsert);
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT.getEventCode(), this::onPageElementFeatureResourceUpsert);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||||
|
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.event.payload.ProductPermissionCreatedPayload;
|
||||||
|
import cn.axzo.tyr.server.service.ProductSaasFeatureResourceCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.ProductService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheProductSaasFeatureResourceHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private ProductSaasFeatureResourceCacheService productSaasFeatureResourceCacheService;
|
||||||
|
@Autowired
|
||||||
|
private ProductService productService;
|
||||||
|
|
||||||
|
public void onProductPermissionUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached product featureResource handler rocketmq event: {}", event);
|
||||||
|
ProductPermissionCreatedPayload payload = event.normalizedData(ProductPermissionCreatedPayload.class);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(payload.getProductModuleIds())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam param = ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam.builder()
|
||||||
|
.productIds(payload.getProductModuleIds())
|
||||||
|
.build();
|
||||||
|
productSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
log.info("end cached product featureResource handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPageElementFeatureResourceUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached product featureResource handler rocketmq event: {}", event);
|
||||||
|
PageElementFeatureResourceUpsertPayload payload = event.normalizedData(PageElementFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Long> productIds = productService.list(new ProductSearchListReq()).getData().stream()
|
||||||
|
.map(ProductVO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam param = ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam.builder()
|
||||||
|
.productIds(productIds)
|
||||||
|
.build();
|
||||||
|
productSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
log.info("end cached product featureResource handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PRODUCT_PERMISSION_CREATED.getEventCode(), this::onProductPermissionUpsert);
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT.getEventCode(), this::onPageElementFeatureResourceUpsert);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||||
|
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||||
|
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
|
||||||
|
import cn.axzo.tyr.server.service.RolePermissionCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存角色的权限
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheRolePermissionHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private RolePermissionCacheService rolePermissionCacheService;
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
|
||||||
|
public void onRolePermissionUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached role permission handler rocketmq event: {}", event);
|
||||||
|
RolePermissionCreatedPayload payload = event.normalizedData(RolePermissionCreatedPayload.class);
|
||||||
|
|
||||||
|
// 影响角色权限入口的代码没法简单重构,导致发送的roleIds可能不准确,所以一旦有角色权限的更新事件后,全量更新角色权限,角色权限数量不多
|
||||||
|
// 后续收口了代码就准确根据角色去更新缓存
|
||||||
|
// if (CollectionUtils.isEmpty(payload.getRoleIds())) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
|
||||||
|
.roleIds(Optional.ofNullable(payload.getRoleIds())
|
||||||
|
.map(Lists::newArrayList)
|
||||||
|
.orElse(null))
|
||||||
|
.roleTypesNotIn(RoleTypeEnum.listAdmin())
|
||||||
|
.build();
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RolePermissionCacheService.RefreshRolePermissionCacheParam refreshRolePermissionCacheParam = RolePermissionCacheService.RefreshRolePermissionCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
rolePermissionCacheService.refreshCache(refreshRolePermissionCacheParam);
|
||||||
|
|
||||||
|
log.info("end cached role permission handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPageElementFeatureResourceUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
PageElementFeatureResourceUpsertPayload payload = event.normalizedData(PageElementFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
|
||||||
|
.roleTypesNotIn(RoleTypeEnum.listAdmin())
|
||||||
|
.build();
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RolePermissionCacheService.RefreshRolePermissionCacheParam refreshRolePermissionCacheParam = RolePermissionCacheService.RefreshRolePermissionCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
rolePermissionCacheService.refreshCache(refreshRolePermissionCacheParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.ROLE_PERMISSION_CREATED.getEventCode(), this::onRolePermissionUpsert);
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT.getEventCode(), this::onPageElementFeatureResourceUpsert);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||||
|
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||||
|
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
|
||||||
|
import cn.axzo.tyr.server.service.RoleSaasFeatureResourceCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 因为菜单树不一定有权限code
|
||||||
|
* 登录时需要查询菜单树,所以把菜单树缓存起来
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheRoleSaasFeatureResourceHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
@Autowired
|
||||||
|
private RoleSaasFeatureResourceCacheService roleSaasFeatureResourceCacheService;
|
||||||
|
|
||||||
|
public void onRolePermissionUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached role saasFeatureResource handler rocketmq event: {}", event);
|
||||||
|
RolePermissionCreatedPayload payload = event.normalizedData(RolePermissionCreatedPayload.class);
|
||||||
|
|
||||||
|
// 影响角色权限入口的代码没法简单重构,导致发送的roleIds可能不准确,所以一旦有角色权限的更新事件后,全量更新角色权限,角色权限数量不多
|
||||||
|
// 后续收口了代码就准确根据角色去更新缓存
|
||||||
|
// if (CollectionUtils.isEmpty(payload.getRoleIds())) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
|
||||||
|
.roleIds(Optional.ofNullable(payload.getRoleIds())
|
||||||
|
.map(Lists::newArrayList)
|
||||||
|
.orElse(null))
|
||||||
|
.roleTypesNotIn(RoleTypeEnum.listAdmin())
|
||||||
|
.build();
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam param = RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
roleSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
|
||||||
|
log.info("end cached role saasFeatureResource handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPageElementFeatureResourceUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
PageElementFeatureResourceUpsertPayload payload = event.normalizedData(PageElementFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
|
||||||
|
.roleTypesNotIn(RoleTypeEnum.listAdmin())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam param = RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
roleSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.ROLE_PERMISSION_CREATED.getEventCode(), this::onRolePermissionUpsert);
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT.getEventCode(), this::onPageElementFeatureResourceUpsert);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.framework.rocketmq.EventHandler;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存全量权限点,因为鉴权等逻辑,需要查询免授权和权限点是否存在,数据量大,数据库压力大
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheSaasFeatureHandler implements EventHandler, InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private SaasFeatureResourceService saasFeatureResourceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
SaasFeatureUpsertPayload payload = event.normalizedData(SaasFeatureUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaasFeatureResourceService.RefreshFeatureResourceCacheParam param = SaasFeatureResourceService.RefreshFeatureResourceCacheParam.builder()
|
||||||
|
.terminals(Sets.newHashSet(payload.getTerminal()))
|
||||||
|
.build();
|
||||||
|
saasFeatureResourceService.refreshCache(param);
|
||||||
|
log.info("end cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.SAAS_FEATURE_UPSERT.getEventCode(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.framework.rocketmq.EventHandler;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存全量权限点,因为鉴权等逻辑,需要查询免授权和权限点是否存在,数据量大,数据库压力大
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheSaasFeatureResourceHandler implements EventHandler, InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private SaasFeatureResourceService saasFeatureResourceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached saasFeatureResource handler rocketmq event: {}", event);
|
||||||
|
SaasFeatureResourceUpsertPayload payload = event.normalizedData(SaasFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(payload.getTerminals())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaasFeatureResourceService.RefreshFeatureResourceCacheParam param = SaasFeatureResourceService.RefreshFeatureResourceCacheParam.builder()
|
||||||
|
.terminals(payload.getTerminals())
|
||||||
|
.build();
|
||||||
|
saasFeatureResourceService.refreshCache(param);
|
||||||
|
log.info("end cached saasFeatureResource handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.SAAS_FEATURE_RESOURCE_UPSERT.getEventCode(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum EventTypeEnum {
|
||||||
|
|
||||||
|
PRODUCT_PERMISSION_CREATED("product-permission", "product-permission-created", "产品权限添加"),
|
||||||
|
ROLE_PERMISSION_CREATED("role-permission", "role-permission-created", "角色权限添加"),
|
||||||
|
SAAS_FEATURE_UPSERT("saas-feature", "saas-feature-upsert", "旧菜单树更新"),
|
||||||
|
SAAS_FEATURE_RESOURCE_UPSERT("saas-feature-resource", "saas-feature-resource-upsert", "新菜单树更新"),
|
||||||
|
PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT("page-element-feature-resource", "page-element-feature-resource-upsert", "菜单-页面元素绑定关系更新"),
|
||||||
|
;
|
||||||
|
|
||||||
|
EventTypeEnum(String model, String name, String desc) {
|
||||||
|
this.eventCode = Event.EventCode.builder()
|
||||||
|
.module(model)
|
||||||
|
.name(name)
|
||||||
|
.build();
|
||||||
|
this.model = model;
|
||||||
|
this.name = name;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String model;
|
||||||
|
private String name;
|
||||||
|
private String desc;
|
||||||
|
private Event.EventCode eventCode;
|
||||||
|
}
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
package cn.axzo.tyr.server.event.inner;
|
||||||
|
|
||||||
|
import cn.axzo.framework.auth.domain.TerminalInfo;
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.server.common.util.DingTalkUtil;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class SendDingTalkHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Value("${spring.profiles.active}")
|
||||||
|
private String env;
|
||||||
|
|
||||||
|
// 语音助手菜单变更通知,@沈尚只是临时的方案,对方接入MQ成本高,所以没改成配置
|
||||||
|
private static final String ACCESS_TOKEN = "11cdf26d77211ee887184844910bf249b94aa2675c7ce36d75a7aa87d619490f";
|
||||||
|
private static final String SECRET = "SEC3c1be9e4fe4cc09f16eb4b2eebf91659f21d5bdfb1d764b52f3e47825e6bed3f";
|
||||||
|
|
||||||
|
|
||||||
|
public void onFeatureResourceUpsert(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin send dingTalk rocketmq event: {}", event);
|
||||||
|
SaasFeatureResourceUpsertPayload payload = event.normalizedData(SaasFeatureResourceUpsertPayload.class);
|
||||||
|
|
||||||
|
if (Objects.isNull(payload.getAction())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Objects.isNull(payload.getNewValue()) && Objects.isNull(payload.getOldValue())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 现在沈尚那边只关心CMP的code有更新的情况
|
||||||
|
String terminal = Optional.ofNullable(payload.getNewValue())
|
||||||
|
.map(SaasFeatureResource::getTerminal)
|
||||||
|
.orElseGet(() -> payload.getOldValue().getTerminal());
|
||||||
|
|
||||||
|
if (!Objects.equals(terminal, TerminalInfo.NT_CMP_APP_GENERAL)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Objects.equals(payload.getAction(), SaasFeatureResource.Action.UPDATE) &&
|
||||||
|
Objects.equals(payload.getNewValue().getUniCode(), payload.getOldValue().getUniCode())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("环境:" + env + "\n");
|
||||||
|
sb.append("操作:" + payload.getAction() + "\n");
|
||||||
|
if (Objects.equals(payload.getAction(), SaasFeatureResource.Action.CREATE)) {
|
||||||
|
sb.append("新code:" + payload.getNewValue().getUniCode());
|
||||||
|
} else if (Objects.equals(payload.getAction(), SaasFeatureResource.Action.UPDATE)) {
|
||||||
|
sb.append("新code:" + payload.getNewValue().getUniCode() + "\n");
|
||||||
|
sb.append("旧code:" + payload.getOldValue().getUniCode());
|
||||||
|
} else if (Objects.equals(payload.getAction(), SaasFeatureResource.Action.DELETE)) {
|
||||||
|
sb.append("旧code:" + payload.getOldValue().getUniCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
DingTalkUtil.sendMessage(sb.toString(), ACCESS_TOKEN, SECRET);
|
||||||
|
log.info("end send dingTalk rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.SAAS_FEATURE_RESOURCE_UPSERT.getEventCode(), this::onFeatureResourceUpsert);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
package cn.axzo.tyr.server.event.outer;
|
||||||
|
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureDeletedPayload;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureUpsertPayload;
|
||||||
|
import cn.axzo.tyr.server.job.CacheSaasFeatureJob;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存全量权限点,因为鉴权等逻辑,需要查询免授权和权限点是否存在,数据量大,数据库压力大
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheSaasFeatureOldHandler implements InitializingBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventConsumer eventConsumer;
|
||||||
|
@Autowired
|
||||||
|
private CacheSaasFeatureJob cacheSaasFeatureJob;
|
||||||
|
|
||||||
|
public void onSaasFeatureUpserted(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
SaasFeatureUpsertPayload payload = event.normalizedData(SaasFeatureUpsertPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheSaasFeatureJob.cacheSaasFeature(Sets.newHashSet(payload.getTerminal()));
|
||||||
|
log.info("end cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSaasFeatureDeleted(Event event, EventConsumer.Context context) {
|
||||||
|
log.info("begin cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
SaasFeatureDeletedPayload payload = event.normalizedData(SaasFeatureDeletedPayload.class);
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(payload.getTerminal())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheSaasFeatureJob.cacheSaasFeature(Sets.newHashSet(payload.getTerminal()));
|
||||||
|
log.info("end cached saasFeature handler rocketmq event: {}", event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.SAAS_FEATURE_UPSERT.getEventCode(), this::onSaasFeatureUpserted);
|
||||||
|
eventConsumer.registerHandler(EventTypeEnum.SAAS_FEATURE_DELETED.getEventCode(), this::onSaasFeatureDeleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,6 +12,8 @@ import lombok.Getter;
|
|||||||
public enum EventTypeEnum {
|
public enum EventTypeEnum {
|
||||||
|
|
||||||
SERVICE_PKG_PRODUCT_CREATED("service-pkg-product", "service-pkg-product-created", "创建服务包的产品"),
|
SERVICE_PKG_PRODUCT_CREATED("service-pkg-product", "service-pkg-product-created", "创建服务包的产品"),
|
||||||
|
SAAS_FEATURE_UPSERT("saas-feature", "saas-feature-upsert", "旧菜单树更新"),
|
||||||
|
SAAS_FEATURE_DELETED("saas-feature", "saas-feature-deleted", "旧菜单树删除"),
|
||||||
;
|
;
|
||||||
|
|
||||||
EventTypeEnum(String model, String name, String desc) {
|
EventTypeEnum(String model, String name, String desc) {
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementFeatureResourceUpsertPayload implements Serializable {
|
||||||
|
|
||||||
|
private String terminal;
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产品权限点做了更新,没有发送相关权限点消息,是因为日志太大,只能消费的时候实时查询
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ProductPermissionCreatedPayload implements Serializable {
|
||||||
|
|
||||||
|
private Set<Long> productModuleIds;
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限点做了更新,没有发送相关权限点消息,是因为日志太大,只能消费的时候实时查询
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class RolePermissionCreatedPayload implements Serializable {
|
||||||
|
|
||||||
|
private Set<Long> roleIds;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaasFeatureDeletedPayload implements Serializable {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String terminal;
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaasFeatureResourceUpsertPayload implements Serializable {
|
||||||
|
|
||||||
|
// 只有tyr消费,触发更新缓存,同步等很多批量操作要全部重构收口代码后,才能好修改这个payload
|
||||||
|
private Set<String> terminals;
|
||||||
|
|
||||||
|
private SaasFeatureResource oldValue;
|
||||||
|
|
||||||
|
private SaasFeatureResource newValue;
|
||||||
|
|
||||||
|
private SaasFeatureResource.Action action;
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaasFeatureUpsertPayload implements Serializable {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String terminal;
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||||
|
import cn.axzo.tyr.server.service.ProductSaasFeatureResourceCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.ProductService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheProductFeatureResourceJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProductSaasFeatureResourceCacheService productSaasFeatureResourceCacheService;
|
||||||
|
@Autowired
|
||||||
|
private ProductService productService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheProductFeatureResourceJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheProductFeatureResourceJob, s:{}", s);
|
||||||
|
ProductSearchListReq productSearchListReq = Optional.ofNullable(s)
|
||||||
|
.map(e -> JSONObject.parseObject(e, ProductSearchListReq.class))
|
||||||
|
.orElseGet(ProductSearchListReq::new);
|
||||||
|
|
||||||
|
Set<Long> productIds = productService.list(productSearchListReq).getData()
|
||||||
|
.stream()
|
||||||
|
.map(ProductVO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam param = ProductSaasFeatureResourceCacheService.RefreshProductFeatureResourceCacheParam.builder()
|
||||||
|
.productIds(productIds)
|
||||||
|
.build();
|
||||||
|
productSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||||
|
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||||
|
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.ProductService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheProductPermissionJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProductPermissionCacheService productPermissionCacheService;
|
||||||
|
@Autowired
|
||||||
|
private ProductService productService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheProductPermissionJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheProductPermissionJob, s:{}", s);
|
||||||
|
ProductSearchListReq productSearchListReq = Optional.ofNullable(s)
|
||||||
|
.map(e -> JSONObject.parseObject(e, ProductSearchListReq.class))
|
||||||
|
.orElseGet(ProductSearchListReq::new);
|
||||||
|
|
||||||
|
Set<Long> productIds = productService.list(productSearchListReq).getData()
|
||||||
|
.stream()
|
||||||
|
.map(ProductVO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductPermissionCacheService.RefreshProductPermissionCacheParam param = ProductPermissionCacheService.RefreshProductPermissionCacheParam.builder()
|
||||||
|
.productIds(productIds)
|
||||||
|
.build();
|
||||||
|
productPermissionCacheService.refreshCache(param);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||||
|
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||||
|
import cn.axzo.tyr.server.service.RoleSaasFeatureResourceCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheRoleFeatureResourceJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
@Autowired
|
||||||
|
private RoleSaasFeatureResourceCacheService roleSaasFeatureResourceCacheService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheRoleFeatureResourceJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheRoleFeatureResourceJob, s:{}", s);
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = Optional.ofNullable(s)
|
||||||
|
.map(e -> JSONObject.parseObject(e, RoleService.ListSaasRoleParam.class))
|
||||||
|
.orElseGet(() -> RoleService.ListSaasRoleParam.builder().build());
|
||||||
|
listSaasRoleParam.setRoleTypesNotIn(RoleTypeEnum.listAdmin());
|
||||||
|
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam param = RoleSaasFeatureResourceCacheService.RefreshRoleFeatureResourceCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
roleSaasFeatureResourceCacheService.refreshCache(param);
|
||||||
|
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||||
|
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||||
|
import cn.axzo.tyr.server.service.RolePermissionCacheService;
|
||||||
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheRolePermissionJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
@Autowired
|
||||||
|
private RolePermissionCacheService rolePermissionCacheService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheRolePermissionJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheRolePermissionJob, s:{}", s);
|
||||||
|
RoleService.ListSaasRoleParam listSaasRoleParam = Optional.ofNullable(s)
|
||||||
|
.map(e -> JSONObject.parseObject(e, RoleService.ListSaasRoleParam.class))
|
||||||
|
.orElseGet(() -> RoleService.ListSaasRoleParam.builder().build());
|
||||||
|
|
||||||
|
listSaasRoleParam.setRoleTypesNotIn(RoleTypeEnum.listAdmin());
|
||||||
|
|
||||||
|
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
|
||||||
|
.map(SaasRoleRes::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
if (CollectionUtils.isEmpty(roleIds)) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
RolePermissionCacheService.RefreshRolePermissionCacheParam refreshRolePermissionCacheParam = RolePermissionCacheService.RefreshRolePermissionCacheParam.builder()
|
||||||
|
.roleIds(roleIds)
|
||||||
|
.build();
|
||||||
|
rolePermissionCacheService.refreshCache(refreshRolePermissionCacheParam);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||||
|
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||||
|
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasFeature;
|
||||||
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheSaasFeatureJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SaasFeatureDao saasFeatureDao;
|
||||||
|
@Autowired
|
||||||
|
private SaasFeatureResourceService saasFeatureResourceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheSaasFeatureJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheSaasFeatureJob, s:{}", s);
|
||||||
|
StoreSaasFeatureParam req = Optional.ofNullable(s)
|
||||||
|
.map(e -> JSONObject.parseObject(e, StoreSaasFeatureParam.class))
|
||||||
|
.orElseGet(() -> StoreSaasFeatureParam.builder().build());
|
||||||
|
|
||||||
|
cacheSaasFeature(req.getTerminals());
|
||||||
|
|
||||||
|
cacheSaasFeatureResource(req.getTerminals());
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cacheSaasFeature(Set<String> terminals) {
|
||||||
|
// 没有办法只有所有端,除非写sql去重,菜单数量不多
|
||||||
|
Set<String> updateTerminals = saasFeatureDao.lambdaQuery()
|
||||||
|
.in(CollectionUtils.isNotEmpty(terminals), SaasFeature::getTerminal, terminals)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(SaasFeature::getTerminal)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(updateTerminals)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaasFeatureResourceService.RefreshFeatureResourceCacheParam param = SaasFeatureResourceService.RefreshFeatureResourceCacheParam.builder()
|
||||||
|
.terminals(updateTerminals)
|
||||||
|
.build();
|
||||||
|
saasFeatureResourceService.refreshCache(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cacheSaasFeatureResource(Set<String> terminals) {
|
||||||
|
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||||
|
.terminals(terminals)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Set<String> updateTerminals = saasFeatureResourceService.list(pageSaasFeatureResourceReq)
|
||||||
|
.stream()
|
||||||
|
.map(SaasFeatureResourceResp::getTerminal)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(updateTerminals)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaasFeatureResourceService.RefreshFeatureResourceCacheParam param = SaasFeatureResourceService.RefreshFeatureResourceCacheParam.builder()
|
||||||
|
.terminals(updateTerminals)
|
||||||
|
.build();
|
||||||
|
saasFeatureResourceService.refreshCache(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class StoreSaasFeatureParam {
|
||||||
|
private Set<String> terminals;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
package cn.axzo.tyr.server.job;
|
||||||
|
|
||||||
|
import cn.axzo.thrones.client.saas.ServicePkgClient;
|
||||||
|
import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct;
|
||||||
|
import cn.axzo.thrones.client.saas.entity.servicepkg.ServicePkgDetailRes;
|
||||||
|
import cn.axzo.tyr.server.service.WorkspaceProductService;
|
||||||
|
import cn.axzo.tyr.server.utils.RpcInternalUtil;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.IJobHandler;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class CacheWorkspaceProductJob extends IJobHandler {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WorkspaceProductService workspaceProductService;
|
||||||
|
@Autowired
|
||||||
|
private ServicePkgClient servicePkgClient;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@XxlJob("CacheWorkspaceProductJob")
|
||||||
|
public ReturnT<String> execute(String s) throws Exception {
|
||||||
|
|
||||||
|
log.info("start CacheWorkspaceProductJob, s:{}", s);
|
||||||
|
|
||||||
|
// 全量更新所有项目的产品数量比较大,所以这里只从缓存中的项目去更新产品
|
||||||
|
Map<Long, Set<Long>> allWorkspaceProducts = workspaceProductService.listAllWorkspaceProductCached();
|
||||||
|
|
||||||
|
Set<Long> workspaceIds = allWorkspaceProducts.keySet();
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(workspaceIds)) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ServicePkgDetailRes> servicePkgDetailRes = RpcInternalUtil.rpcListProcessor(() -> servicePkgClient.getServicePkgDetailBySpaceId(workspaceIds),
|
||||||
|
"查询项目的产品", workspaceIds).getData();
|
||||||
|
|
||||||
|
List<WorkspaceProductService.WorkspaceProductDTO> workspaceProducts = servicePkgDetailRes.stream()
|
||||||
|
.map(e -> WorkspaceProductService.WorkspaceProductDTO.builder()
|
||||||
|
.workspaceId(e.getSpaceId())
|
||||||
|
.productIds(Optional.ofNullable(e.getProducts())
|
||||||
|
.map(products -> products.stream()
|
||||||
|
.map(ServicePkgProduct::getProductId)
|
||||||
|
.collect(Collectors.toSet()))
|
||||||
|
.orElse(null))
|
||||||
|
.build())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
WorkspaceProductService.StoreWorkspaceProductParam storeWorkspaceProductParam = WorkspaceProductService.StoreWorkspaceProductParam.builder()
|
||||||
|
.workspaceProducts(workspaceProducts)
|
||||||
|
.build();
|
||||||
|
workspaceProductService.storeWorkspaceProduct(storeWorkspaceProductParam);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -32,7 +32,8 @@ public class SaasFeatureResourceDao extends ServiceImpl<SaasFeatureResourceMappe
|
|||||||
SaasFeatureResource::getFeatureName, SaasFeatureResource::getFeatureType,
|
SaasFeatureResource::getFeatureName, SaasFeatureResource::getFeatureType,
|
||||||
SaasFeatureResource::getTerminal, SaasFeatureResource::getParentId,
|
SaasFeatureResource::getTerminal, SaasFeatureResource::getParentId,
|
||||||
SaasFeatureResource::getDisplayOrder,
|
SaasFeatureResource::getDisplayOrder,
|
||||||
SaasFeatureResource::getWorkspaceType)
|
SaasFeatureResource::getWorkspaceType,
|
||||||
|
SaasFeatureResource::getWorkspaceTypes)
|
||||||
.eq(SaasFeatureResource::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
.eq(SaasFeatureResource::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||||
.in(CollectionUtils.isNotEmpty(req.getTerminals()), SaasFeatureResource::getTerminal, req.getTerminals())
|
.in(CollectionUtils.isNotEmpty(req.getTerminals()), SaasFeatureResource::getTerminal, req.getTerminals())
|
||||||
.eq(Objects.nonNull(req.getStatus()), SaasFeatureResource::getStatus, req.getStatus())
|
.eq(Objects.nonNull(req.getStatus()), SaasFeatureResource::getStatus, req.getStatus())
|
||||||
|
|||||||
@ -0,0 +1,15 @@
|
|||||||
|
package cn.axzo.tyr.server.repository.dao;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementCategory;
|
||||||
|
import cn.axzo.tyr.server.repository.mapper.SaasPageElementCategoryMapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/20
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
public class SaasPageElementCategoryDao extends ServiceImpl<SaasPageElementCategoryMapper, SaasPageElementCategory> {
|
||||||
|
}
|
||||||
@ -1,6 +1,8 @@
|
|||||||
package cn.axzo.tyr.server.repository.dao;
|
package cn.axzo.tyr.server.repository.dao;
|
||||||
|
|
||||||
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
||||||
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
|
import cn.axzo.tyr.client.common.enums.PageElementTypeEnum;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasPageElement;
|
import cn.axzo.tyr.server.repository.entity.SaasPageElement;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
||||||
import cn.axzo.tyr.server.repository.mapper.SaasPageElementMapper;
|
import cn.axzo.tyr.server.repository.mapper.SaasPageElementMapper;
|
||||||
@ -41,4 +43,42 @@ public class SaasPageElementDao extends ServiceImpl<SaasPageElementMapper, SaasP
|
|||||||
.notIn(CollectionUtils.isNotEmpty(excludeIds), SaasPageElement::getId, excludeIds)
|
.notIn(CollectionUtils.isNotEmpty(excludeIds), SaasPageElement::getId, excludeIds)
|
||||||
.list();
|
.list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateItemNameByItemCode(String itemCode, String itemName, String terminal) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(SaasPageElement::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||||
|
.eq(SaasPageElement::getItemCode, itemCode)
|
||||||
|
.eq(SaasPageElement::getTerminal, terminal)
|
||||||
|
.set(SaasPageElement::getItemName, itemName)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SaasPageElement> listByItemCodeAndTerminal(String itemCode, String terminal) {
|
||||||
|
return lambdaQuery()
|
||||||
|
.eq(SaasPageElement::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||||
|
.eq(SaasPageElement::getTerminal, terminal)
|
||||||
|
.eq(SaasPageElement::getItemCode, itemCode)
|
||||||
|
.list();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteIdsByTerminal(List<Long> ids, String terminal) {
|
||||||
|
if (CollectionUtils.isEmpty(ids)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(SaasPageElement::getTerminal, terminal)
|
||||||
|
.in(BaseEntity::getId, ids)
|
||||||
|
.set(SaasPageElement::getIsDelete, DeleteEnum.DELETE.getValue())
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateComponentsGroupCode(String oldGroupCode, String newGroupCode, String terminal) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(SaasPageElement::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||||
|
.eq(SaasPageElement::getTerminal, terminal)
|
||||||
|
.eq(SaasPageElement::getType, PageElementTypeEnum.COMPONENT.getCode())
|
||||||
|
.eq(SaasPageElement::getGroupCode, oldGroupCode)
|
||||||
|
.set(SaasPageElement::getGroupCode, newGroupCode)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package cn.axzo.tyr.server.repository.dao;
|
|||||||
|
|
||||||
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
||||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
|
import cn.axzo.tyr.client.common.enums.PageElementTypeEnum;
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasPageElement;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
||||||
import cn.axzo.tyr.server.repository.mapper.SaasPageElementFeatureResourceRelationMapper;
|
import cn.axzo.tyr.server.repository.mapper.SaasPageElementFeatureResourceRelationMapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -46,4 +48,23 @@ public class SaasPageElementFeatureResourceRelationDao extends ServiceImpl<SaasP
|
|||||||
.set(Objects.nonNull(operatorId), SaasPageElementFeatureResourceRelation::getUpdateBy, operatorId)
|
.set(Objects.nonNull(operatorId), SaasPageElementFeatureResourceRelation::getUpdateBy, operatorId)
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteByTerminalAndPageElementCodes(String terminal, List<String> pageElementCodes, Long operatorId) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||||
|
.eq(SaasPageElementFeatureResourceRelation::getTerminal, terminal)
|
||||||
|
.in(SaasPageElementFeatureResourceRelation::getPageElementCode, pageElementCodes)
|
||||||
|
.set(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.DELETE.getValue())
|
||||||
|
.set(Objects.nonNull(operatorId), SaasPageElementFeatureResourceRelation::getUpdateBy, operatorId)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateGroupCode(String oldGroupCode, String newGroupCode, String terminal) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||||
|
.eq(SaasPageElementFeatureResourceRelation::getTerminal, terminal)
|
||||||
|
.eq(SaasPageElementFeatureResourceRelation::getPageElementCode, oldGroupCode)
|
||||||
|
.set(SaasPageElementFeatureResourceRelation::getPageElementCode, newGroupCode)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,8 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public class SaasPgroupPermissionRelationDao extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation> {
|
public class SaasPgroupPermissionRelationDao extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation> {
|
||||||
|
|
||||||
@ -59,6 +61,7 @@ public class SaasPgroupPermissionRelationDao extends ServiceImpl<SaasPgroupPermi
|
|||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.in(SaasPgroupPermissionRelation::getFeatureId,featureIds)
|
.in(SaasPgroupPermissionRelation::getFeatureId,featureIds)
|
||||||
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||||
|
.eq(SaasPgroupPermissionRelation::getType, NEW_FEATURE)
|
||||||
.list();
|
.list();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,4 +36,8 @@ public class DataObjectRuleScope extends BaseOperatorEntity<DataObjectRuleScope>
|
|||||||
* 岗位id/角色id
|
* 岗位id/角色id
|
||||||
*/
|
*/
|
||||||
private Long relationId;
|
private Long relationId;
|
||||||
|
/**
|
||||||
|
* 岗位编码
|
||||||
|
*/
|
||||||
|
private String relationCode;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -162,6 +162,11 @@ public class SaasFeatureResource extends BaseEntity<SaasFeatureResource> {
|
|||||||
*/
|
*/
|
||||||
private Long workspaceType;
|
private Long workspaceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用范围(租户类型):1:企业工作台 2;项目工作台 以英文逗号分隔 cmp的应用可以配置支持多工作台类型
|
||||||
|
*/
|
||||||
|
private String workspaceTypes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 最低版本序列,主要支持版本灰度策略
|
* 最低版本序列,主要支持版本灰度策略
|
||||||
*/
|
*/
|
||||||
@ -193,4 +198,14 @@ public class SaasFeatureResource extends BaseEntity<SaasFeatureResource> {
|
|||||||
return Objects.equals(ALL_ROLE.getValue(), authType);
|
return Objects.equals(ALL_ROLE.getValue(), authType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum Action {
|
||||||
|
DELETE( "删除操作"),
|
||||||
|
CREATE( "创建操作"),
|
||||||
|
UPDATE( "更新操作");
|
||||||
|
|
||||||
|
private String desc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,11 @@ import lombok.*;
|
|||||||
@TableName("saas_page_element")
|
@TableName("saas_page_element")
|
||||||
public class SaasPageElement extends BaseEntity<SaasPageElement> {
|
public class SaasPageElement extends BaseEntity<SaasPageElement> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 元素的组编码
|
* 元素的组编码
|
||||||
*/
|
*/
|
||||||
@ -50,6 +55,11 @@ public class SaasPageElement extends BaseEntity<SaasPageElement> {
|
|||||||
@TableField("link_url")
|
@TableField("link_url")
|
||||||
private String linkUrl;
|
private String linkUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APP适配参数
|
||||||
|
*/
|
||||||
|
private String linkExt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 所属端
|
* 所属端
|
||||||
*/
|
*/
|
||||||
@ -61,4 +71,27 @@ public class SaasPageElement extends BaseEntity<SaasPageElement> {
|
|||||||
*/
|
*/
|
||||||
@TableField("create_name")
|
@TableField("create_name")
|
||||||
private String createName;
|
private String createName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
@TableField("app_type")
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
@TableField("item_code")
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目名称
|
||||||
|
*/
|
||||||
|
@TableField("item_name")
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* H5的应用ID
|
||||||
|
*/
|
||||||
|
private String appId;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,45 @@
|
|||||||
|
package cn.axzo.tyr.server.repository.entity;
|
||||||
|
|
||||||
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素表
|
||||||
|
*
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/6/18
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
@Builder
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName(value = "saas_page_element_category", autoResultMap = true)
|
||||||
|
public class SaasPageElementCategory extends BaseEntity<SaasPageElementCategory> {
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private Long createBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新人
|
||||||
|
*/
|
||||||
|
private Long updateBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目名称
|
||||||
|
*/
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属端
|
||||||
|
*/
|
||||||
|
private String terminal;
|
||||||
|
}
|
||||||
@ -2,7 +2,10 @@ package cn.axzo.tyr.server.repository.entity;
|
|||||||
|
|
||||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +18,7 @@ import lombok.*;
|
|||||||
@Builder
|
@Builder
|
||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@TableName("saas_pgroup_permission_relation_operate_log")
|
@TableName(value = "saas_pgroup_permission_relation_operate_log", autoResultMap = true)
|
||||||
public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgroupPermissionRelationOperateLog> {
|
public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgroupPermissionRelationOperateLog> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,4 +66,7 @@ public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgrou
|
|||||||
* 操作人角色
|
* 操作人角色
|
||||||
*/
|
*/
|
||||||
private String createByRole;
|
private String createByRole;
|
||||||
|
|
||||||
|
@TableField(typeHandler = FastjsonTypeHandler.class)
|
||||||
|
private JSONObject ext;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
package cn.axzo.tyr.server.repository.mapper;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementCategory;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
public interface SaasPageElementCategoryMapper extends BaseMapper<SaasPageElementCategory> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -4,12 +4,35 @@ import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface SaasRoleUserRelationMapper extends BaseMapper<SaasRoleUserRelation> {
|
public interface SaasRoleUserRelationMapper extends BaseMapper<SaasRoleUserRelation> {
|
||||||
|
|
||||||
Page<SaasRoleUserRelation> batListCleanRelation(IPage<SaasRoleUserRelation> page, @Param("param") SaasRoleUserRelation cleanParam);
|
Page<SaasRoleUserRelation> batListCleanRelation(IPage<SaasRoleUserRelation> page, @Param("param") SaasRoleUserRelation cleanParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 现在没有数据可以查询项目的角色
|
||||||
|
* 通过权限点找有权限的人,需要这个接口
|
||||||
|
* @param listRole
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Set<Long> listRoleIds(@Param("param") ListRole listRole);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListRole {
|
||||||
|
private Long ouId;
|
||||||
|
private Long workspaceId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.page.PageResult;
|
|||||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.QueryDataObjectReq;
|
||||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||||
|
|
||||||
@ -17,4 +18,6 @@ public interface DataObjectService {
|
|||||||
PageResult<SimpleDataObjectRes> pageDataObject(PageDataObjectReq req);
|
PageResult<SimpleDataObjectRes> pageDataObject(PageDataObjectReq req);
|
||||||
|
|
||||||
DataObjectRes getDataObject(Long dataObjectId);
|
DataObjectRes getDataObject(Long dataObjectId);
|
||||||
|
|
||||||
|
DataObjectRes queryDataObject(QueryDataObjectReq req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.axzo.tyr.server.service;
|
package cn.axzo.tyr.server.service;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.req.ListPermissionFeatureReq;
|
||||||
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
||||||
@ -7,6 +8,7 @@ import cn.axzo.tyr.client.model.req.PermissionCheckReq;
|
|||||||
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
import cn.axzo.tyr.client.model.req.TreePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.TreeProductFeatureResourceReq;
|
||||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||||
|
import cn.axzo.tyr.client.model.res.ListPermissionFeatureResp;
|
||||||
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
import cn.axzo.tyr.client.model.res.NavTreeResp;
|
||||||
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
||||||
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
||||||
@ -51,4 +53,6 @@ public interface PermissionQueryService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<TreePermissionResp> treePermission(TreePermissionReq req);
|
List<TreePermissionResp> treePermission(TreePermissionReq req);
|
||||||
|
|
||||||
|
List<ListPermissionFeatureResp> listPermission(ListPermissionFeatureReq req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,15 +6,27 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public interface ProductPermissionCacheService {
|
public interface ProductPermissionCacheService {
|
||||||
|
|
||||||
List<PermissionDTO> list(ListProductPermissionParam param);
|
/**
|
||||||
|
* 查询产品的权限信息
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<Long, List<PermissionDTO>> list(ListProductPermissionParam param);
|
||||||
|
|
||||||
void store(StoreProductPermissionParam param);
|
void refreshCache(RefreshProductPermissionCacheParam param);
|
||||||
|
|
||||||
|
@Data
|
||||||
List<Long> hasProductIds(HasProductPermissionParam param);
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class RefreshProductPermissionCacheParam {
|
||||||
|
private Set<Long> productIds;
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@ -47,7 +59,9 @@ public interface ProductPermissionCacheService {
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
class ListProductPermissionParam {
|
class ListProductPermissionParam {
|
||||||
private List<Long> productIds;
|
private Set<Long> productIds;
|
||||||
|
|
||||||
|
private Set<String> featureCodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -57,12 +71,32 @@ public interface ProductPermissionCacheService {
|
|||||||
class PermissionDTO {
|
class PermissionDTO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品关联的字典 Code 原值
|
* 协同关系类型
|
||||||
|
* 原saas_product_module_feature_relation.dictCode
|
||||||
*/
|
*/
|
||||||
private String dictCode;
|
private String cooperateType;
|
||||||
|
|
||||||
private Long featureId;
|
private Long featureId;
|
||||||
|
|
||||||
private String featureCode;
|
private String featureCode;
|
||||||
|
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
private Integer featureType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
package cn.axzo.tyr.server.service;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface ProductSaasFeatureResourceCacheService {
|
||||||
|
|
||||||
|
Map<Long, List<FeatureResourceDTO>> list(ListProductFeatureResourceParam param);
|
||||||
|
|
||||||
|
void refreshCache(RefreshProductFeatureResourceCacheParam param);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class RefreshProductFeatureResourceCacheParam {
|
||||||
|
private Set<Long> productIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class StoreProductFeatureResourceParam {
|
||||||
|
private List<ProductFeatureResource> productFeatureResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ProductFeatureResource {
|
||||||
|
private Long productId;
|
||||||
|
|
||||||
|
private List<FeatureResourceDTO> featureResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListProductFeatureResourceParam {
|
||||||
|
private Set<Long> productIds;
|
||||||
|
|
||||||
|
private Set<String> uniCodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class FeatureResourceDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 协同关系类型
|
||||||
|
* 原saas_product_module_feature_relation.dictCode
|
||||||
|
*/
|
||||||
|
private String cooperateType;
|
||||||
|
|
||||||
|
private Long featureId;
|
||||||
|
|
||||||
|
private String uniCode;
|
||||||
|
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
private Integer featureType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,36 +6,22 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public interface RolePermissionCacheService {
|
public interface RolePermissionCacheService {
|
||||||
|
|
||||||
|
|
||||||
List<PermissionDTO> list(ListRolePermissionParam param);
|
Map<Long, List<PermissionDTO>> list(ListRolePermissionParam param);
|
||||||
|
|
||||||
/**
|
void refreshCache(RefreshRolePermissionCacheParam param);
|
||||||
* redisKey:roleId
|
|
||||||
* redisValue:permission
|
|
||||||
* @param param
|
|
||||||
*/
|
|
||||||
void store(StoreRolePermissionParam param);
|
|
||||||
|
|
||||||
List<Long> hasRoleIds(HasRolePermissionParam param);
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
class HasRolePermissionParam {
|
class RefreshRolePermissionCacheParam {
|
||||||
private List<Long> roleIds;
|
private Set<Long> roleIds;
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
class StoreRolePermissionParam {
|
|
||||||
private List<RolePermission> rolePermissions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -53,7 +39,9 @@ public interface RolePermissionCacheService {
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
class ListRolePermissionParam {
|
class ListRolePermissionParam {
|
||||||
private List<Long> roleIds;
|
private Set<Long> roleIds;
|
||||||
|
|
||||||
|
private Set<String> featureCodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -80,5 +68,7 @@ public interface RolePermissionCacheService {
|
|||||||
* 资源所属端
|
* 资源所属端
|
||||||
*/
|
*/
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
|
private Integer featureType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,74 @@
|
|||||||
|
package cn.axzo.tyr.server.service;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface RoleSaasFeatureResourceCacheService {
|
||||||
|
|
||||||
|
Map<Long, List<SaasFeatureResourceDTO>> list(ListRoleSaasFeatureResourceParam param);
|
||||||
|
|
||||||
|
void refreshCache(RefreshRoleFeatureResourceCacheParam param);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class RefreshRoleFeatureResourceCacheParam {
|
||||||
|
private Set<Long> roleIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class StoreRoleSaasFeatureResourceParam {
|
||||||
|
private List<RoleFeatureResource> roleSaasFeatureResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class RoleFeatureResource {
|
||||||
|
private Long roleId;
|
||||||
|
|
||||||
|
private List<SaasFeatureResourceDTO> saasFeatureResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListRoleSaasFeatureResourceParam {
|
||||||
|
private Set<Long> roleIds;
|
||||||
|
|
||||||
|
private Set<String> uniCodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class SaasFeatureResourceDTO {
|
||||||
|
|
||||||
|
private Long featureId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源所属端
|
||||||
|
*/
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单资源类型1-菜单 2-页面 3-应用入口 4-组件 5-root节点 6-分组
|
||||||
|
*/
|
||||||
|
private Integer featureType;
|
||||||
|
|
||||||
|
private String uniCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,6 +19,7 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
|
|||||||
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||||
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||||
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||||
|
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||||
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
||||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||||
@ -135,9 +136,18 @@ public interface RoleService extends IService<SaasRole> {
|
|||||||
@CriteriaField(field = "roleType", operator = Operator.IN)
|
@CriteriaField(field = "roleType", operator = Operator.IN)
|
||||||
private List<String> roleTypes;
|
private List<String> roleTypes;
|
||||||
|
|
||||||
|
@CriteriaField(field = "roleType", operator = Operator.NOT_IN)
|
||||||
|
private List<String> roleTypesNotIn;
|
||||||
|
|
||||||
@CriteriaField(field = "id", operator = Operator.NE)
|
@CriteriaField(field = "id", operator = Operator.NE)
|
||||||
private Long idNE;
|
private Long idNE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限码
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "roleCode", operator = Operator.IN)
|
||||||
|
private Set<String> roleCodes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限点从saas_feature_resource表查询
|
* 权限点从saas_feature_resource表查询
|
||||||
*/
|
*/
|
||||||
@ -166,6 +176,12 @@ public interface RoleService extends IService<SaasRole> {
|
|||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private Boolean needPermissionRelation;
|
private Boolean needPermissionRelation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否需要预设角色,因为预设角色的workspaceId和ouId为-1
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needPresetRole;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询菜单树节点类型
|
* 查询菜单树节点类型
|
||||||
*/
|
*/
|
||||||
@ -183,6 +199,19 @@ public interface RoleService extends IService<SaasRole> {
|
|||||||
*/
|
*/
|
||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* workspaceId和ouId配对查询
|
||||||
|
* 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##))
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs;
|
||||||
|
|
||||||
|
@CriteriaField(field = "workspaceId", operator = Operator.EQ)
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
@CriteriaField(field = "ownerOuId", operator = Operator.EQ)
|
||||||
|
private Long ouId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
|
|||||||
@ -11,8 +11,13 @@ import cn.axzo.tyr.server.model.ResourcePermission;
|
|||||||
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,4 +66,71 @@ public interface SaasFeatureResourceService extends IService<SaasFeatureResource
|
|||||||
|
|
||||||
void deleteFeatureResource(DeleteFeatureResourceReq param);
|
void deleteFeatureResource(DeleteFeatureResourceReq param);
|
||||||
|
|
||||||
|
Map<String, List<SaasFeatureResourceCache>> listCache(ListSaasFeatureResourceCache param);
|
||||||
|
|
||||||
|
void refreshCache(RefreshFeatureResourceCacheParam param);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class RefreshFeatureResourceCacheParam {
|
||||||
|
private Set<String> terminals;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class StoreSaasFeatureResourceCache {
|
||||||
|
|
||||||
|
private List<SaasFeatureResourceDTO> saasFeatureResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class SaasFeatureResourceDTO {
|
||||||
|
private String terminal;
|
||||||
|
|
||||||
|
private List<SaasFeatureResourceCache> features;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListSaasFeatureResourceCache {
|
||||||
|
|
||||||
|
private Set<String> terminals;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class SaasFeatureResourceCache {
|
||||||
|
|
||||||
|
private Long featureId;
|
||||||
|
|
||||||
|
private boolean notAuth;
|
||||||
|
|
||||||
|
private Set<Long> parentIds;
|
||||||
|
|
||||||
|
private String uniCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
* 在根据版本号查询菜单树限的时候需要
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1、展示
|
||||||
|
* 0、隐藏
|
||||||
|
* FeatureResourceStatus
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
package cn.axzo.tyr.server.service;
|
||||||
|
|
||||||
|
import cn.axzo.tyr.client.model.req.DeletePageElementCategoryReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementCategoryReq;
|
||||||
|
import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author likunpeng
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2024/8/20
|
||||||
|
*/
|
||||||
|
public interface SaasPageElementCategoryService {
|
||||||
|
|
||||||
|
List<ListPageElementCategoryResp> listGroupByTerminal();
|
||||||
|
|
||||||
|
Long saveOrUpdate(SaveOrUpdatePageElementCategoryReq req);
|
||||||
|
|
||||||
|
void delete(DeletePageElementCategoryReq req);
|
||||||
|
}
|
||||||
@ -2,9 +2,9 @@ package cn.axzo.tyr.server.service;
|
|||||||
|
|
||||||
import cn.axzo.framework.domain.page.PageResp;
|
import cn.axzo.framework.domain.page.PageResp;
|
||||||
import cn.axzo.tyr.client.model.req.*;
|
import cn.axzo.tyr.client.model.req.*;
|
||||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
import cn.axzo.tyr.client.model.res.*;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
import cn.axzo.tyr.server.repository.entity.SaasPageElement;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ import java.util.List;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @date 2024/6/18
|
* @date 2024/6/18
|
||||||
*/
|
*/
|
||||||
public interface SaasPageElementService {
|
public interface SaasPageElementService extends IService<SaasPageElement> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面元素上报
|
* 页面元素上报
|
||||||
@ -61,7 +61,7 @@ public interface SaasPageElementService {
|
|||||||
* @param request 查询条件
|
* @param request 查询条件
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
PageResp<PageElementResp> page(PageQueryElementReq request);
|
PageResp<PageElementCategoryAndElementResp> page(PageQueryElementReq request);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据用户传入的页面code,查询用户有权限的元素code
|
* 根据用户传入的页面code,查询用户有权限的元素code
|
||||||
@ -70,4 +70,19 @@ public interface SaasPageElementService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
GetUserHasPermissionPageElementResp getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq request);
|
GetUserHasPermissionPageElementResp getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq request);
|
||||||
|
|
||||||
|
|
||||||
|
List<PageElementResp> list(PageElementReq param);
|
||||||
|
|
||||||
|
cn.axzo.foundation.page.PageResp<PageElementResp> page(PageElementReq param);
|
||||||
|
|
||||||
|
PageResp<PageElementResp> pageV2(PageQueryElementV2Req req);
|
||||||
|
|
||||||
|
Long saveOrUpdate(SaveOrUpdatePageElementReq req);
|
||||||
|
|
||||||
|
void delete(DeletePageElementReq req);
|
||||||
|
|
||||||
|
List<PageElementRelationFeatureResourceResp> getFeatureResourceRelations(Long pageElementId);
|
||||||
|
|
||||||
|
void importData(List<PageElementImportDataReq> req);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,4 +66,10 @@ public interface TyrSaasAuthService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean authNewPermission(PermissionCheckReq req);
|
boolean authNewPermission(PermissionCheckReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 增加统一的开关:权限是否从数据库查询
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean permissionFromDB();
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user